Skip to main content

mcp-drill

Fault injection and reliability testing for MCP servers and AI agents. Wrap any Model Context Protocol server in one command; inject timeouts, malformed JSON-RPC, truncated and corrupted-but-valid tool outputs; measure whether the server degrades cleanly — and whether your agent notices or silently acts on the garbage.

uvx mcp-drill wrap --faults timeout,corrupt -- npx -y @modelcontextprotocol/server-filesystem /tmp

MCP is JSON-RPC over stdio/SSE with bidirectional notifications, so ordinary HTTP fault-injectors and chaos tools don't fit. mcp-drill speaks MCP: it sits transparently between an MCP client and a backend server and perturbs the traffic, so you can test failure paths in CI without a live LLM.

Why

Real MCP deployments fail in ways integration tests never cover: a tool times out, a server returns a well-formed-but-wrong payload, a response is truncated mid-stream. Most agents were never exercised against these paths. mcp-drill makes them reproducible:

  • 🧪 Fault injection — deterministically inject timeouts, malformed/oversized/truncated responses, corrupted-but-schema-valid payloads, dropped tools, and latency.
  • 🎬 CI-first — a CLI and a GitHub Action; no live model or API keys required in the loop.
  • 📊 Reliability scorecard — a model-free scan that grades how a server responds to bad input and how machine-checkable its tool output contracts are.

Install

Until the first PyPI release, install from source:

pip install "mcp-drill[scan] @ git+https://github.com/TimurRakhmatullin86/mcp-drill"

Quickstart

# wrap a server and inject faults into its responses
mcp-drill wrap --faults timeout,truncate -- npx -y @modelcontextprotocol/server-everything

# score a server's fault handling and output-schema hygiene (no LLM involved)
mcp-drill scan -- npx -y @modelcontextprotocol/server-filesystem /tmp

What it measures (model-free)

The scan command is deterministic and involves no language model, so its numbers are properties of the server and the protocol — not of whichever agent happens to call it:

  1. Error conformance — on invalid requests (unknown method, unknown tool, missing required arguments), does the server return a spec-compliant JSON-RPC error, a proper tool error, or does it hang / crash / answer as if nothing was wrong?
  2. Output-contract coverage — what fraction of a server's tools declare a machine-checkable outputSchema at all? Tools without one give downstream validators nothing to check.
  3. Output-contract enforceability — of the tools that declare an outputSchema, how many would actually reject a corrupted (well-typed but wrong) response? Many declared schemas validate shape only, so a corrupted payload still passes the server's own contract.

Status

Early development. The proxy/injector core is pure-stdlib; schema scoring uses jsonschema (the scan extra). Install from source until the first PyPI release. Telemetry is off — the tool never phones home.

License

Apache-2.0 (see LICENSE).

Download files

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

Source Distribution

mcp_drill-0.0.1.tar.gz (21.1 kB view details)

Uploaded Source

Built Distribution

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

mcp_drill-0.0.1-py3-none-any.whl (20.8 kB view details)

Uploaded Python 3

File details

Details for the file mcp_drill-0.0.1.tar.gz.

File metadata

  • Download URL: mcp_drill-0.0.1.tar.gz
  • Upload date:
  • Size: 21.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.14.6

File hashes

Hashes for mcp_drill-0.0.1.tar.gz
Algorithm Hash digest
SHA256 9ecfe85b561d8eed540a281028c126c90076326d7f2570e884d6245661b27a53
MD5 a009a07bb217a8b33d230a62af401ecf
BLAKE2b-256 97c363ace49a4d2425e012c02ed49f92fe0c81607bc4d85eab10dee052e79aef

See more details on using hashes here.

File details

Details for the file mcp_drill-0.0.1-py3-none-any.whl.

File metadata

  • Download URL: mcp_drill-0.0.1-py3-none-any.whl
  • Upload date:
  • Size: 20.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.14.6

File hashes

Hashes for mcp_drill-0.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 5fed478e5ecd6d4090573d9bcee6f9f7088e94fdf161a0a5aeb5811b93b27631
MD5 0bf4e699d58ff0a7aebbae8a182b575d
BLAKE2b-256 b583acef902b463383e0b7339e8a1fbf0847d98d862b0eab6a779c41f3c6cfd2

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.0.1 This release

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page