A framework for testing MCP (Model Context Protocol) client implementations against the specification.
[!WARNING] This repository is a work in progress and is unstable. Join the conversation in the #conformance-testing-wg in the MCP Contributors discord.
npm install
npm run start -- --command "tsx examples/clients/typescript/test1.ts" --scenario initializenpm run test:server -- --server-url http://localhost:3000/mcp --allThe conformance test framework validates MCP client implementations by:
- Starting a test server for the specified scenario
- Running the client implementation with the test server URL
- Capturing MCP protocol interactions
- Running conformance checks against the specification
- Generating detailed test results
npm run start -- --command "<client-command>" --scenario <scenario-name>--command- The command to run your MCP client (can include flags)--scenario- The test scenario to run (e.g., "initialize")
The framework appends the server URL as the final argument to your command.
Results are saved to results/<scenario>-<timestamp>/:
checks.json- Array of conformance check results with pass/fail statusstdout.txt- Client stdout outputstderr.txt- Client stderr output
examples/clients/typescript/test1.ts- Valid MCP client (passes all checks)examples/clients/typescript/test-broken.ts- Invalid client missing required fields (fails checks)
- initialize - Tests MCP client initialization handshake
- Validates protocol version
- Validates clientInfo (name and version)
- Validates server response handling
See src/runner/DESIGN.md for detailed architecture documentation.
- Runner (
src/runner/) - Orchestrates test execution and result generation - Scenarios (
src/scenarios/) - Test scenarios with custom server implementations - Checks (
src/checks.ts) - Conformance validation functions - Types (
src/types.ts) - Shared type definitions
- Create a new directory in
src/scenarios/<scenario-name>/ - Implement the
Scenariointerface withstart(),stop(), andgetChecks() - Register the scenario in
src/scenarios/index.ts
See src/scenarios/initialize/ for a reference implementation.