Skip to main content

Python SDK for WaveGuard — physics-based anomaly detection API

Project description

PyPI v2.0.0 CUDA MCP

WaveGuard Python SDK

Anomaly detection powered by wave physics. Not machine learning.
One API call. Fully stateless. Works on any data type.

QuickstartUse CasesExamplesAPI ReferenceMCP / ClaudeAzure Migration


What is WaveGuard?

WaveGuard is a general-purpose anomaly detection API. Send it any data — server metrics, financial transactions, log files, sensor readings, time series — and get back anomaly scores, confidence levels, and explanations of which features triggered the alert.

No training pipelines. No model management. No state. One API call.

Your data  →  WaveGuard API (GPU)  →  Anomaly scores + explanations

Under the hood, it uses GPU-accelerated wave physics instead of machine learning. You don't need to know or care about the physics — it's all server-side.

How does it actually work?

Your data is encoded onto a 32³ lattice and run through coupled wave equation simulations on GPU. Normal data produces stable wave patterns; anomalies produce divergent ones. A 52-dimensional statistical fingerprint is compared between training and test data. Everything is torn down after each call — nothing is stored.

The key advantage over ML: no training data requirements (2+ samples is enough), no model drift, no retraining, no hyperparameter tuning. Same API call works on structured data, text, numbers, and time series.

Install

pip install WaveGuardClient

That's it. The only dependency is requests. All physics runs server-side on GPU.

Quickstart

The same scan() call works on any data type. Here are three different industries — same API:

Detect a compromised server

from waveguard import WaveGuard

wg = WaveGuard(api_key="YOUR_KEY")

result = wg.scan(
    training=[
        {"cpu": 45, "memory": 62, "disk_io": 120, "errors": 0},
        {"cpu": 48, "memory": 63, "disk_io": 115, "errors": 0},
        {"cpu": 42, "memory": 61, "disk_io": 125, "errors": 1},
    ],
    test=[
        {"cpu": 46, "memory": 62, "disk_io": 119, "errors": 0},    # ✅ normal
        {"cpu": 99, "memory": 95, "disk_io": 800, "errors": 150},   # 🚨 anomaly
    ],
)

for r in result.results:
    print(f"{'🚨' if r.is_anomaly else '✅'}  score={r.score:.1f}  confidence={r.confidence:.0%}")

Flag a fraudulent transaction

result = wg.scan(
    training=[
        {"amount": 74.50, "items": 3, "session_sec": 340, "returning": 1},
        {"amount": 52.00, "items": 2, "session_sec": 280, "returning": 1},
        {"amount": 89.99, "items": 4, "session_sec": 410, "returning": 0},
    ],
    test=[
        {"amount": 68.00, "items": 2, "session_sec": 300, "returning": 1},     # ✅ normal
        {"amount": 4200.00, "items": 25, "session_sec": 8, "returning": 0},     # 🚨 fraud
    ],
)

Catch a security event in logs

result = wg.scan(
    training=[
        "2026-02-24 10:15:03 INFO  Request processed in 45ms [200 OK]",
        "2026-02-24 10:15:04 INFO  Request processed in 52ms [200 OK]",
        "2026-02-24 10:15:05 INFO  Cache hit ratio=0.94 ttl=300s",
    ],
    test=[
        "2026-02-24 10:20:03 INFO  Request processed in 48ms [200 OK]",                  # ✅ normal
        "2026-02-24 10:20:04 CRIT  xmrig consuming 98% CPU, port 45678 open",             # 🚨 crypto miner
        "2026-02-24 10:20:05 WARN  GET /api/users?id=1;DROP TABLE users-- from 185.x.x",  # 🚨 SQL injection
    ],
    encoder_type="text",
)

Same client. Same scan() call. Any data.

Use Cases

WaveGuard works on any structured, numeric, or text data. If you can describe "normal," it can detect deviations.

Industry What You Scan What It Catches
DevOps Server metrics (CPU, memory, latency) Memory leaks, DDoS attacks, runaway processes
Fintech Transactions (amount, velocity, location) Fraud, money laundering, account takeover
Security Log files, access events SQL injection, crypto miners, privilege escalation
IoT / Manufacturing Sensor readings (temp, pressure, vibration) Equipment failure, calibration drift
E-commerce User behavior (session time, cart, clicks) Bot traffic, bulk purchase fraud, scraping
Healthcare Lab results, vitals, biomarkers Abnormal readings, data entry errors
Time Series Metric windows (latency, throughput) Spikes, flatlines, seasonal breaks

The API doesn't know your domain. It just knows what "normal" looks like (your training data) and flags anything that deviates. This makes it general — you bring the context, it brings the detection.

Supported Data Types

All auto-detected from data shape. No configuration needed:

Type Example Use When
JSON objects {"cpu": 45, "memory": 62} Structured records with named fields
Numeric arrays [1.0, 1.2, 5.8, 1.1] Feature vectors, embeddings
Text strings "ERROR segfault at 0x0" Logs, messages, free text
Time series [100, 102, 98, 105, 99] Metric windows, sequential readings

Examples

Every example is a runnable Python script. They span 6 industries and 4 data types to show WaveGuard isn't tied to one domain:

# Example Industry Data Type What It Shows
01 Quickstart General JSON Minimal scan in 10 lines
02 Server Monitoring DevOps JSON Memory leak + DDoS detection
03 Log Analysis Security Text SQL injection, crypto miner, stack traces
04 Time Series Monitoring Numeric Latency spikes, flatline detection
05 Azure Migration Enterprise JSON Side-by-side Azure replacement
06 Batch Scanning E-commerce JSON 20 transactions, fraud flagging
07 Error Handling Production Retry logic, exponential backoff

MCP Server (Claude Desktop)

Give Claude the ability to detect anomalies. Add to your Claude Desktop config:

{
  "mcpServers": {
    "waveguard": {
      "command": "python",
      "args": ["/path/to/WaveGuardClient/mcp_server/server.py"],
      "env": {
        "WAVEGUARD_API_KEY": "your-key"
      }
    }
  }
}

Then ask Claude: "Check if these server metrics are anomalous..."

See MCP Integration Guide for full setup.

Azure Migration

Azure Anomaly Detector retires October 2026. WaveGuard is a drop-in replacement:

# Before (Azure) — 3+ API calls, stateful, time-series only
client = AnomalyDetectorClient(endpoint, credential)
model = client.train_multivariate_model(request)   # minutes
result = client.detect_multivariate_batch_anomaly(model_id, data)
client.delete_multivariate_model(model_id)

# After (WaveGuard) — 1 API call, stateless, any data type
wg = WaveGuard(api_key="YOUR_KEY")
result = wg.scan(training=normal_data, test=new_data)  # seconds

See Azure Migration Guide for details.

API Reference

wg.scan(training, test, encoder_type=None, sensitivity=None)

Parameter Type Description
training list 2+ examples of normal data
test list 1+ samples to check
encoder_type str Force: "json", "numeric", "text", "timeseries" (default: auto)
sensitivity float 0.5–3.0, lower = more sensitive (default: 1.0)

Returns ScanResult with .results (per-sample) and .summary (aggregate).

wg.health() / wg.tier()

Health check (no auth) and subscription tier info.

Error Handling

from waveguard import WaveGuard, AuthenticationError, RateLimitError

try:
    result = wg.scan(training=data, test=new_data)
except AuthenticationError:
    print("Bad API key")
except RateLimitError:
    print("Too many requests — back off and retry")

Full API reference: docs/api-reference.md

Project Structure

WaveGuardClient/
├── waveguard/              # Python SDK package
│   ├── __init__.py         # Public API exports
│   ├── client.py           # WaveGuard client class
│   └── exceptions.py       # Exception hierarchy
├── mcp_server/             # MCP server for Claude Desktop
│   ├── server.py           # stdio + HTTP transport
│   └── README.md           # MCP setup guide
├── examples/               # 7 runnable examples
├── docs/                   # Documentation
│   ├── getting-started.md
│   ├── api-reference.md
│   ├── mcp-integration.md
│   └── azure-migration.md
├── tests/                  # Test suite (runs offline)
├── pyproject.toml          # Package config (pip install -e .)
└── CHANGELOG.md

Development

git clone https://github.com/gpartin/WaveGuardClient.git
cd WaveGuardClient
pip install -e ".[dev]"
pytest

Links

License

MIT — see LICENSE.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

waveguardclient-2.0.0.tar.gz (13.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

waveguardclient-2.0.0-py3-none-any.whl (11.4 kB view details)

Uploaded Python 3

File details

Details for the file waveguardclient-2.0.0.tar.gz.

File metadata

  • Download URL: waveguardclient-2.0.0.tar.gz
  • Upload date:
  • Size: 13.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for waveguardclient-2.0.0.tar.gz
Algorithm Hash digest
SHA256 92b3922f41af517ee2860e64649ba5f625a283dfd82de668627e63e23b21afe8
MD5 65a2a5f50a229966868077dd0975a0ec
BLAKE2b-256 296cca078f5e6011b5e348bf6615534b59513e68ae76fe8b7a7cad12d1220742

See more details on using hashes here.

Provenance

The following attestation bundles were made for waveguardclient-2.0.0.tar.gz:

Publisher: publish.yml on gpartin/WaveGuardClient

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file waveguardclient-2.0.0-py3-none-any.whl.

File metadata

File hashes

Hashes for waveguardclient-2.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 084b614c76020c52657402bd62b347f27a37026dc920ae54b1a6df7e2b0505f2
MD5 0cba88b583412e1ff5a42c942d052437
BLAKE2b-256 68520976b50588f5c6e46c4158ce04647f1c0fd1cc7518ac590af9dfea7d45d0

See more details on using hashes here.

Provenance

The following attestation bundles were made for waveguardclient-2.0.0-py3-none-any.whl:

Publisher: publish.yml on gpartin/WaveGuardClient

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page