MCP Failure Lab
Allows MCP Failure Lab scenarios to be run against GitHub's official remote MCP server, exercising GitHub tools through configurable failure and resilience tests.
Allows MCP Failure Lab scenarios to be run against GitLab through an OAuth-capable stdio MCP bridge, enabling fault-injection and resilience testing of GitLab MCP interactions.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@MCP Failure Lablist the planned fault injection scenarios"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
MCP Failure Lab
A chaos-engineering and resilience-testing toolkit for Model Context Protocol servers.

Quick start
Run a real deterministic delay scenario without cloning the repository or installing the package globally:
npx mcp-failure-lab demoExample output:
MCP Failure Lab — Demo
Running a real 500ms delay scenario...
Scenario: Deterministic delay demo
Outcome: success
Duration: ~500 ms
Assertions: passedThe exact duration may vary slightly between runs. No API key or external MCP server is required.
Display the available commands:
npx mcp-failure-lab --helpStart the built-in MCP server over stdio:
npx mcp-failure-lab serveOr start a local Streamable HTTP endpoint:
npx mcp-failure-lab serve --transport httpRelated MCP server: mcp-chaos-rig
Purpose
MCP Failure Lab helps server authors reproduce delays, hanging tools, cancellation, and transport loss in a deterministic way.
It provides controlled failure behavior for testing timeout handling, cancellation cleanup, transport-loss recovery, assertions, and CI outcomes.
Current scope
MCP Failure Lab runs deterministic JSON scenarios against its built-in server or a configured external HTTP or stdio MCP target from the command line.
Available now:
ping,delay,hang, anddisconnecttoolsMCP communication over stdio and Streamable HTTP
Code-first and JSON scenario definitions
Outcome and maximum-duration assertions
MCP result assertions
Sequential observer calls for post-condition verification
External MCP target orchestration through a validated adapter registry
Streamable HTTP and stdio target configurations
Bounded adapter setup, execution, observation, cancellation, and cleanup
Separate scenario-assertion and adapter-lifecycle diagnostics
Console, JSON, and JUnit XML reporting
Machine-readable command errors
CI-friendly exit codes
Unit, integration, and end-to-end tests
Not implemented:
Provider-specific adapters and recovery policies
Malformed-message, duplicate-response, and session-loss faults
MCP Failure Lab is not a general-purpose proxy. External targets are exercised through the same scenario calls and expectations as the built-in server.
Run against another MCP server
Pass a target configuration to execute the same scenario against a Streamable HTTP or stdio MCP server:
# From a repository checkout
npm run dev -- run path/to/scenario.json --target path/to/target.json
# With the published package and your own scenario and target files
npx mcp-failure-lab run path/to/scenario.json --target path/to/target.jsonSee the external MCP targets guide for complete HTTP and stdio configuration, verified GitHub and GitLab workflows, browser-based MCP Inspector validation, lifecycle diagnostics, credential handling, and troubleshooting.
The repository also includes a safe, read-only GitHub MCP example using the official remote server:
export GITHUB_MCP_AUTHORIZATION="Bearer your-token"
npm run dev -- run examples/scenarios/github-get-me.json \
--target examples/targets/github-http.jsonGitLab is available through its OAuth-capable stdio bridge:
npm run dev -- run examples/scenarios/gitlab-search-projects.json \
--target examples/targets/gitlab-stdio.jsonThe first connection can open a browser for GitLab authorization. See the external-target guide for GitLab prerequisites and the difference between GitLab OAuth and GitHub token authentication.
Target-client adapter contract
The generic adapter contract drives external-target orchestration, and the deterministic test adapter verifies its lifecycle without external I/O. See the architecture documentation for lifecycle, ownership, timeout, and observation details.
How it works
MCP Failure Lab runs deterministic scenarios through its built-in MCP client and server or through
a configured external HTTP or stdio target. A scenario invokes a tool, records the observed outcome
and duration, and evaluates the declared expectations. Built-in scenarios use ping, delay,
hang, or disconnect; external scenarios use tools exposed by their target server.
Optional observer calls run sequentially on the same MCP client connection to verify post-conditions through a separate tool path.
See the architecture documentation for diagrams, responsibilities, and implementation boundaries.
Documentation
Full guides and references are available at mcplab.dev/docs.
Requirements
Node.js 22.19.0 or newer
npm
Protocol compatibility
MCP Failure Lab targets MCP 2026-07-28 and accepts the 2025-11-25 initialization flow for
compatibility. See Streamable HTTP for protocol and
session details.
Installation
Run the package directly with npx:
npx mcp-failure-lab demoNo global installation is required.
To install the command globally:
npm install -g mcp-failure-labCLI
# Run the built-in demonstration
npx mcp-failure-lab demo
# Display command help
npx mcp-failure-lab --help
# Display the installed version
npx mcp-failure-lab --version
# Start the MCP server over stdio
npx mcp-failure-lab serve
# Start Streamable HTTP with local-safe defaults
npx mcp-failure-lab serve --transport http
# Override the HTTP endpoint explicitly
npx mcp-failure-lab serve --transport http --host localhost --port 4000 --path /mcpThe serve process waits for an MCP client. Press Ctrl+C to shut it down gracefully.
Streamable HTTP listens on http://127.0.0.1:3000/mcp by default. The server validates
the request path plus Host and Origin headers. Binding another host is an explicit
choice; this mode does not provide authentication or TLS, so do not expose it to an
untrusted network. Put authentication and TLS termination in a trusted front end if
remote access is required.
Run a scenario
Scenario files use JSON:
{
"name": "bounded delay succeeds",
"call": {
"tool": "delay",
"args": {
"delayMs": 250
}
},
"timeoutMs": 1000,
"expect": {
"outcome": "success",
"maxDurationMs": 500
}
}From a repository checkout, run the included scenario:
npm run dev -- run examples/scenarios/delay-success.jsonGenerate machine-readable output:
npm run dev -- run examples/scenarios/delay-success.json --report jsonGenerate JUnit XML for CI systems:
npm run --silent dev -- run examples/scenarios/delay-success.json --report junit > junit.xmlThe command exits with:
Code | Meaning |
| All expectations passed |
| The scenario could not be loaded or executed |
| One or more assertions failed |
For result assertions, observer calls, reporting formats, and timeout behavior, see the scenario and reporting documentation.
Fault tools
Tool | Behavior |
| Returns a deterministic health response |
| Waits for a bounded duration before returning |
| Remains pending until the client cancels |
| Interrupts the active transport while a request is in flight |
See the fault tools reference for arguments and behavior.
Inspect the server
Launch the official MCP Inspector web UI against the published package:
npx @modelcontextprotocol/inspector npx mcp-failure-lab serveSee External MCP targets for the complete browser-testing workflow and credential guidance.
External integration validation
See the Future AGI example for an
independent Python-client validation of the hang fault. It is an external validation example,
not an official integration or endorsement.
Development
Clone the repository and install its dependencies:
git clone https://github.com/anilloutombam/mcp-failure-lab.git
cd mcp-failure-lab
npm installRun the development CLI:
npm run dev -- --helpBefore opening a pull request, run:
npm run format:check
npm run typecheck
npm test
npm run buildSee CONTRIBUTING.md for the contribution workflow.
Roadmap
Planned work is tracked in GitHub Issues.
Roadmap items are not part of the current implementation unless explicitly documented as available.
License
This server cannot be installed
Maintenance
Related MCP Connectors
MEOK MCP Test MCP — golden-file + schema-drift + tool-failure tests for any MCP server. Drop-in
MCP server for building and testing AI agents with multi-model experimentation and insights.
A Model Context Protocol server for Wix AI tools
A Model Context Protocol (MCP) server for Selise Blocks Cloud integration
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceA comprehensive reference implementation demonstrating all features of the Model Context Protocol (MCP) specification, serving as documentation, learning resource, and testing tool for MCP implementations.1MIT
- AlicenseNot gradedqualityBmaintenanceA local MCP server that breaks on demand, allowing you to test your client against auth failures, disappearing tools, flaky responses, and token expiry from a web UI.4810MIT
- AlicenseAqualityAmaintenanceConformance test harness for Model Context Protocol servers, validating JSON-RPC, transport, capability, schema, and more across multiple spec versions.1248MIT
- AlicenseNot gradedqualityBmaintenanceA lightweight mock MCP server for local testing and resilience experiments, providing predictable tool responses with simulated latency and errors.1MIT