# WaveGuard (remote · gpartin--waveguard-api-fastapi-app.modal.run)

Anomaly detection API powered by physics simulation. Scan any data for outliers.

- Trust score: 69/100 (medium)
- Change this week: +5
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-03

## Components

- remote · `gpartin--waveguard-api-fastapi-app.modal.run`: 69/100 (this document), [markdown](https://verifymcp.io/servers/com-emergentphysicslab-waveguard/v2-mcp.md), [page](https://verifymcp.io/servers/com-emergentphysicslab-waveguard/v2-mcp)

## Channel facts

- Endpoint: `https://gpartin--waveguard-api-fastapi-app.modal.run/v2/mcp`
- Transports: `streamable-http`
- Auth: `none`
- Version: `3.1.0`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-03.

- **Endpoint Security**: 74/100
  - The endpoint's TLS certificate is valid, in date, and uses a strong key.
  - No authorisation is required to call this server. Every tool declares its destructiveHint and none is destructive, so open access doesn't expose one.
  - HTTPS is enforced; there's no plaintext access path.
  - HSTS check failed: the Strict-Transport-Security header is absent.
  - DNSSEC check failed: this domain isn't protected by DNSSEC.
- **Transport & Reachability**: 100/100
  - Verified streamable-http transport via a live MCP handshake.
- **Schema Quality & AI Usability**: 74/100
  - 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).
  - AI-judged instruction clarity (good).
  - Context-footprint check failed: tool/resource definitions use about 3243 tokens (~170/item across 19 items; 19 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 27/100
  - Stability observed for 8 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
- **Capabilities**: 20/100
  - Spec-recency check failed: implements MCP spec 2024-11-05; the latest is 2026-07-28.

## Install

### Claude

```bash
claude mcp add --transport http com-emergentphysicslab-waveguard https://gpartin--waveguard-api-fastapi-app.modal.run/v2/mcp
```

### Codex

```toml
[mcp_servers.com-emergentphysicslab-waveguard]
url = "https://gpartin--waveguard-api-fastapi-app.modal.run/v2/mcp"
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "com-emergentphysicslab-waveguard": {
      "type": "remote",
      "url": "https://gpartin--waveguard-api-fastapi-app.modal.run/v2/mcp",
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add com-emergentphysicslab-waveguard --url https://gpartin--waveguard-api-fastapi-app.modal.run/v2/mcp --transport streamable-http
```

### Hermes

```yaml
mcp_servers:
  com-emergentphysicslab-waveguard:
    url: "https://gpartin--waveguard-api-fastapi-app.modal.run/v2/mcp"
```

### Other

```json
{
  "mcpServers": {
    "com-emergentphysicslab-waveguard": {
      "type": "http",
      "url": "https://gpartin--waveguard-api-fastapi-app.modal.run/v2/mcp"
    }
  }
}
```

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-08-03 (score 69, +1)

No change was recorded against any check on this day. Stability & Change Management went from 23 to 27. That category is still filling its 30-day observation window: 7 days of observed history at the previous scan, 8 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-08-02 (score 68, 0)

- [security regression] Endpoint reachability: reachable → unreachable
- [security regression] Stability: 0.20 → unverified
- [security regression] Authorization: partial → unverified
- [security regression] HSTS header: fail → unverified
- [security regression] Transport: pass → fail
- [functional regression] Schema quality: 100 → unverified
- [functional regression] Tool coverage: 100 → unverified
- [functional regression] Capabilities: fail → unverified
- [functional improvement] Endpoint reachability: unreachable → reachable

### 2026-08-01 (score 68, +3)

- [functional] New prompt “wallet_behavior_check”
- [functional] New prompt “detect_anomalies”
- [functional] New prompt “monitor_timeseries”
- [functional] New prompt “spreadsheet_quality_check”
- [functional] New prompt “token_risk_assessment”
- [functional] New prompt “volume_authenticity_check”

### 2026-07-31 (score 65, −1)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-30 (score 66, +19)

- [security regression] HSTS header: unverified → fail
- [security improvement] Authorization: unverified → partial
- [security improvement] Transport: fail → pass
- [functional] New prompt “wallet_behavior_check”
- [functional] New prompt “detect_anomalies”
- [functional] New prompt “monitor_timeseries”
- [functional] New prompt “spreadsheet_quality_check”
- [functional] New prompt “token_risk_assessment”
- [functional] New prompt “volume_authenticity_check”

### 2026-07-29 (score 47, −18)

- [security regression] HSTS header: fail → unverified
- [security regression] Authorization: partial → unverified
- [security regression] Transport: pass → fail
- [functional regression] Prompt “wallet_behavior_check” was removed
- [functional regression] Prompt “volume_authenticity_check” was removed
- [functional regression] Prompt “token_risk_assessment” was removed
- [functional regression] Prompt “spreadsheet_quality_check” was removed
- [functional regression] Prompt “monitor_timeseries” was removed
- [functional regression] Prompt “detect_anomalies” was removed

### 2026-07-28 (score 65, +1)

No change was recorded against any check on this day. Stability & Change Management went from 3 to 7. That category is still filling its 30-day observation window: 1 days of observed history at the previous scan, 2 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-07-27 (score 64, +49)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

## MCP tools (19)

### `waveguard_scan` (~480 tokens)

Find outliers and anomalies in structured data — ideal as a second step after pulling records from Google Sheets, Airtable, Supabase, Notion databases, HubSpot, Financial APIs, GitHub, NPM, or any source that returns rows of JSON. Fully stateless: send known-good rows as training and suspect rows as test in ONE call. Returns per-row anomaly scores, confidence levels, and the top features explaining WHY each row was flagged.

Typical workflow: (1) Pull data from another tool (e.g. Google Sheets, Supabase query, HubSpot deals). (2) Pass the first N rows as training (normal baseline). (3) Pass remaining or new rows as test. (4) Report which rows are anomalous and why.

Works on JSON objects, numbers, text, arrays. No separate training step required.

Examples:
\- Spreadsheet QA: Pull 500 sales rows from Sheets → train on first 400 → test last 100 → flag outlier entries
\- Financial screening: Get ratios for 50 stocks from a financial API → find anomalous ones
\- CRM hygiene: Pull HubSpot deals → flag deals with unusual discount/value patterns
\- Dependency audit: Get NPM package metrics → flag packages with anomalous quality scores
\- Commit review: Pull GitHub commit metadata → flag unusual commit patterns

Input parameters:

- `encoder_type` (string): Data encoder type. Omit to auto-detect from data shape.
- `field_level` (integer): Physics field complexity. 0 = real scalar (default). 1 = complex field (phase-aware, 62-dim fingerprint).
- `sensitivity` (number): Anomaly threshold multiplier (default: 2.0). Lower = more sensitive. Higher = less sensitive. Range: 0.5 to 5.0.
- `test` (array, required): 1+ data points to check for anomalies — new entries, recent rows, or the subset you want validated. Same type/shape as training. Each sample is scored independently.
- `training` (array, required): 2+ examples of NORMAL/expected data — the known-good baseline. Typically the bulk of rows from a spreadsheet, database query, or API response. All samples should be the same type/shape. More samples…

### `waveguard_scan_timeseries` (~280 tokens)

Detect anomalies in time-series data — use after pulling numeric metrics from monitoring APIs, financial data sources, IoT sensors, or spreadsheet columns. Send a single numeric array and specify a window size. Early windows define 'normal', recent windows are tested for anomalies.

Typical workflow: (1) Pull a column of numbers from Sheets, a Supabase time-series table, or a metrics API. (2) Pass the array here. (3) Get back which time windows are anomalous.

Examples:
\- Revenue monitoring: Pull monthly revenue from Sheets → detect anomalous months
\- Stock screening: Pull 90 days of closing prices → find unusual price windows
\- Server health: Pull response-time metrics → identify degradation windows
\- Sensor QA: Pull temperature readings from IoT API → flag sensor drift

Input parameters:

- `data` (array, required): Numeric time-series array, ordered chronologically. Should have at least 3x window_size data points.
- `sensitivity` (number): Anomaly sensitivity (default: 1.0). Higher = more sensitive.
- `test_windows` (integer): Number of most recent windows to test (default: half of total windows). The rest are used as training (normal baseline).
- `window_size` (integer): Number of data points per window (default: 10). Smaller windows detect finer-grained anomalies.

### `waveguard_health` (~56 tokens)

Check WaveGuard API health, GPU availability, version, and engine status. No authentication required. Returns status, version, and GPU info.

Input parameters:

- `verbose` (boolean): Return detailed health info including memory and uptime (default: false).

### `waveguard_fingerprint` (~176 tokens)

Get a physics embedding of any data item (52-dim at Level 0, 62-dim at Level 1 with phase statistics). The fingerprint captures structural properties via wave-equation dynamics — useful for similarity search, clustering, baseline comparison, and drift detection. Works on JSON objects, token metrics, wallet activity, trading data, or any structured data.

Returns a deterministic vector with labeled dimensions (chi statistics, energy distribution, gradient patterns, and phase coherence at Level 1).

Input parameters:

- `data` (required): Any data item to fingerprint: JSON object, numeric array, string, or structured record.
- `encoder_type` (string): Data encoder. Omit to auto-detect.
- `field_level` (integer): 0 = real scalar 52-dim (default), 1 = complex field 62-dim.

### `waveguard_compare` (~126 tokens)

Compare two data items for structural similarity using physics-based fingerprints. Returns cosine similarity (0–1) and Euclidean distance. Use for duplicate detection, behavioral matching, drift analysis, or checking if two tokens/wallets/contracts are structurally similar.

Cosine similarity > 0.95 = very similar. < 0.80 = structurally different.

Input parameters:

- `data_a` (required): First data item to compare.
- `data_b` (required): Second data item to compare (same type as data_a).
- `encoder_type` (string): Data encoder. Omit to auto-detect.

### `waveguard_token_risk` (~170 tokens)

Assess crypto token legitimacy risk. Send metrics from known-good tokens as training (price, volume, holders, liquidity, market_cap, age_days, etc.) and suspect tokens as test. Detects pump-and-dump patterns, fake metrics, and anomalous token profiles.

Example: Pull CoinGecko data for 20 established tokens → train. Test a new token → get risk score and which metrics are suspicious.

Input parameters:

- `sensitivity` (number): Risk sensitivity (default: 1.5). Higher = more flags.
- `test` (array, required): 1+ suspect token metric objects to evaluate.
- `training` (array, required): 3+ known-good token metric objects. Each should include fields like price, volume_24h, market_cap, holders, liquidity, age_days, etc.

### `waveguard_wallet_profile` (~124 tokens)

Profile wallet behavior against baselines. Send normal wallet transaction patterns as training (tx_count, avg_value, unique_tokens, gas_spent, active_days, etc.) and suspect wallets as test. Detects bot activity, wash trading wallets, and sybil patterns.

Example: Profile 50 organic wallets → test 10 suspect addresses.

Input parameters:

- `sensitivity` (number): Detection sensitivity (default: 1.5).
- `test` (array, required): 1+ suspect wallet profiles to evaluate.
- `training` (array, required): 3+ known-organic wallet activity profiles.

### `waveguard_volume_check` (~136 tokens)

Detect wash trading and fake volume in OHLCV candle data. Send known-legitimate candles as training and suspect candles as test. Detects artificial volume spikes, suspiciously regular patterns, and manipulated price-volume relationships.

Example: Send 100 candles from a liquid pair as baseline, test candles from a suspicious pair.

Input parameters:

- `sensitivity` (number): Detection sensitivity (default: 1.5).
- `test` (array, required): 1+ suspect candle objects to evaluate.
- `training` (array, required): 3+ OHLCV candle objects from known-legitimate trading. Fields: open, high, low, close, volume.

### `waveguard_price_manipulation` (~148 tokens)

Detect price manipulation in time-series data. Send a price or price+volume history as a numeric array. Early windows define 'normal' trading, recent windows are tested for manipulation patterns (pump-and-dump, spoofing, layering).

Example: Send 90 days of closing prices → detect manipulated windows.

Input parameters:

- `data` (array, required): Price time-series array (chronological). At least 20 data points.
- `sensitivity` (number): Detection sensitivity (default: 1.5).
- `test_windows` (integer): Number of recent windows to test (default: half).
- `window_size` (integer): Window size (default: 10). Smaller = finer detection.

### `waveguard_market_data` (~337 tokens)

Fetch live crypto market data from CoinGecko and DexScreener. No external data needed — WaveGuard pulls it for you.

Use 'coin_id' for CoinGecko (e.g. 'bitcoin', 'ethereum', 'solana').
Use 'contract_address' for DexScreener (any chain).
Use 'search' to find token IDs by name/symbol.

Returns: price, volume, market cap, liquidity, price history, OHLC candles — ready to feed into waveguard_token_risk, waveguard_volume_check, or waveguard_price_manipulation.

Input parameters:

- `action` (string, required): What data to fetch: - token_data: full metrics for a CoinGecko coin - price_history: daily prices (for price_manipulation) - ohlc: OHLC candles (for volume_check) - top_coins: top N by market cap (tr…
- `coin_id` (string): CoinGecko coin ID (e.g. 'bitcoin', 'ethereum'). Required for token_data, price_history, ohlc.
- `contract_address` (string): Token contract address (any chain). Required for dex_token.
- `count` (integer): Number of results for top_coins (default: 25).
- `days` (integer): Number of days of history (default: 90 for price_history, 30 for ohlc).
- `query` (string): Search query. Required for search, dex_search.

### `waveguard_counterfactual` (~157 tokens)

Run baseline plus counterfactual variants and measure verdict/score sensitivity.

Input parameters:

- `base_test` (required): Baseline candidate sample to evaluate before counterfactual perturbations.
- `counterfactual_tests` (array, required): 1+ perturbed variants of base_test for sensitivity analysis.
- `encoder_type` (string): Optional encoder override. Omit to auto-detect from input structure.
- `field_level` (integer): 0 = real scalar field (faster), 1 = complex field (richer phase dynamics).
- `sensitivity` (number): Anomaly sensitivity multiplier (default: 1.0). Higher values flag more aggressively.
- `training` (array, required): 2+ baseline normal samples used to build the reference profile.

### `waveguard_trajectory_scan` (~116 tokens)

Analyze sequence drift and regime shifts over ordered samples.

Input parameters:

- `encoder_type` (string): Optional encoder override. Omit to auto-detect.
- `field_level` (integer): 0 = real scalar field, 1 = complex field.
- `sensitivity` (number): Anomaly sensitivity multiplier (default: 1.0).
- `sequence` (array, required): Ordered samples (time sequence) to scan for drift and regime shifts.
- `training` (array, required): 2+ baseline normal samples used to establish the reference regime.

### `waveguard_instability` (~142 tokens)

Estimate instability under controlled perturb-and-resolve trials.

Input parameters:

- `encoder_type` (string): Optional encoder override. Omit to auto-detect.
- `field_level` (integer): 0 = real scalar field, 1 = complex field.
- `perturbation_strength` (number): Relative perturbation amplitude applied during instability assay.
- `sensitivity` (number): Anomaly sensitivity multiplier (default: 1.0).
- `test` (array, required): 1+ candidate samples to stress-test with perturbation trials.
- `training` (array, required): 2+ baseline normal samples for reference dynamics.
- `trials` (integer): Number of perturbation trials per sample.

### `waveguard_phase_coherence` (~114 tokens)

Measure coherence/entropy and collapse-risk indicators for candidate data.

Input parameters:

- `encoder_type` (string): Optional encoder override. Omit to auto-detect.
- `field_level` (integer): Field representation level. Default 1 for phase-aware analysis.
- `sensitivity` (number): Anomaly sensitivity multiplier (default: 1.0).
- `test` (array, required): 1+ candidate samples to evaluate for phase coherence and entropy.
- `training` (array, required): 2+ baseline normal samples for reference coherence metrics.

### `waveguard_interaction_matrix` (~113 tokens)

Compute pairwise interaction matrix and cluster decomposition for entities.

Input parameters:

- `encoder_type` (string): Optional encoder override. Omit to auto-detect.
- `entities` (array, required): 2+ entities to evaluate for pairwise interaction effects.
- `field_level` (integer): Field representation level. Default 1 for interaction/phase features.
- `sensitivity` (number): Anomaly sensitivity multiplier (default: 1.0).
- `training_context` (array, required): 2+ baseline context samples used for normalization.

### `waveguard_cascade_risk` (~165 tokens)

Estimate shock propagation and resilience from adjacency-linked entities.

Input parameters:

- `adjacency_matrix` (array, required): N×N weighted adjacency matrix describing link strengths between entities.
- `encoder_type` (string): Optional encoder override. Omit to auto-detect.
- `entities` (array, required): 2+ entities/nodes participating in the cascade graph.
- `field_level` (integer): Field representation level. Default 1 for graph interaction dynamics.
- `sensitivity` (number): Anomaly sensitivity multiplier (default: 1.0).
- `shock_indices` (array, required): Indices of initially shocked entities within the entities array.
- `shock_strength` (number): Initial perturbation magnitude injected at shock indices.
- `training_context` (array, required): 2+ baseline context samples used for normalization.

### `waveguard_mechanism_probe` (~144 tokens)

Run targeted interventions and rank effect sizes.

Input parameters:

- `base_test` (required): Baseline candidate sample before interventions.
- `encoder_type` (string): Optional encoder override. Omit to auto-detect.
- `field_level` (integer): 0 = real scalar field, 1 = complex field.
- `intervention_labels` (array): Optional labels for intervention variants (same order as intervention_tests).
- `intervention_tests` (array, required): 1+ intervention variants used to estimate effect sizes.
- `sensitivity` (number): Anomaly sensitivity multiplier (default: 1.0).
- `training` (array, required): 2+ baseline normal samples used to construct the reference profile.

### `waveguard_action_surface` (~127 tokens)

Score candidate actions and extract robust action zones.

Input parameters:

- `action_labels` (array): Optional labels for each action variant.
- `action_tests` (array, required): 1+ candidate actions/scenarios to score against baseline.
- `encoder_type` (string): Optional encoder override. Omit to auto-detect.
- `field_level` (integer): 0 = real scalar field, 1 = complex field.
- `sensitivity` (number): Anomaly sensitivity multiplier (default: 1.0).
- `training` (array, required): 2+ baseline normal samples used to define the reference profile.

### `waveguard_multi_horizon_outlook` (~132 tokens)

Compute horizon-specific anomaly outlook and consistency across windows.

Input parameters:

- `encoder_type` (string): Optional encoder override. Omit to auto-detect.
- `field_level` (integer): 0 = real scalar field, 1 = complex field.
- `horizons` (array, required): List of horizon lengths (in sequence steps) to evaluate.
- `sensitivity` (number): Anomaly sensitivity multiplier (default: 1.0).
- `sequence` (array, required): Ordered sample sequence used for multi-horizon outlook analysis.
- `training` (array, required): 2+ baseline normal samples used to establish reference behavior.

## Diagnostics

Captured diagnostic sections: TLS, DNSSEC, Authorisation, Transports. The full working is on the page: https://verifymcp.io/servers/com-emergentphysicslab-waveguard/v2-mcp#diagnostics

## Score history

- 2026-08-03: 69
- 2026-08-02: 68
- 2026-08-01: 68
- 2026-07-31: 65
- 2026-07-30: 66
- 2026-07-29: 47
- 2026-07-28: 65
- 2026-07-27: 64
- 2026-07-26: 15

## Links

- Remote endpoint: https://gpartin--waveguard-api-fastapi-app.modal.run/v2/mcp
- Repository: https://github.com/gpartin/LFMAnomalyDetection
- Website: https://github.com/gpartin/WaveGuardClient
- Changelog RSS feed: https://verifymcp.io/servers/com-emergentphysicslab-waveguard/v2-mcp/changelog.xml
- Changelog JSON feed: https://verifymcp.io/servers/com-emergentphysicslab-waveguard/v2-mcp/changelog.json
- HTML version of this page: https://verifymcp.io/servers/com-emergentphysicslab-waveguard/v2-mcp
