MCP server conformance tester — zero external dependencies
Project description
mcp-probe-cli
MCP server conformance tester — zero external dependencies.
Catch spec violations before your MCP server ships. mcp-conform runs a suite of
Model Context Protocol conformance checks and tells you exactly what's wrong and why.
pip install mcp-conform
mcp-conform server --transport stdio --command "python my_server.py"
Why mcp-conform?
The official MCP Inspector accepts invalid JSON Schema that MCP clients (including
Claude Code) reject — silently, with no useful error messages. You discover the
problem when a real user reports it. mcp-conform catches it before push.
What it checks:
| Check | What it validates |
|---|---|
| JSON-RPC envelope | jsonrpc: "2.0", matching id, exactly one of result/error |
| Initialize response | protocolVersion, capabilities object, serverInfo.name/version |
| tools/list structure | tools array, each tool's name/description/inputSchema |
| JSON Schema validity | Detects true/false boolean schemas rejected by Claude Code |
| Error responses | code (integer) + message (string) per spec |
| Method not found | Returns -32601 for unknown methods |
Usage
stdio transport (most common)
mcp-conform server --transport stdio --command "python my_server.py"
mcp-conform server --transport stdio --command "node dist/server.js"
mcp-conform server --transport stdio --command "uv run python -m mypackage.server"
HTTP transport
mcp-conform server --transport http --url http://localhost:8080
CI / GitHub Actions
# Fails with exit code 1 if any check fails
mcp-conform server --transport stdio --command "python my_server.py" --format json | tee report.json
# .github/workflows/mcp-conformance.yml
- name: Run MCP conformance checks
run: |
pip install mcp-conform
mcp-conform server --transport stdio --command "python my_server.py"
Output example
════════════════════════════════════════════════════════════
mcp-conform report
Server : python my_server.py
Transport: stdio
Duration : 312 ms
════════════════════════════════════════════════════════════
✓ jsonrpc_envelope
JSON-RPC 2.0 envelope is valid
✓ protocol_version
protocolVersion '2025-03-26' is valid
✓ capabilities
capabilities is an object
✓ server_info_name
serverInfo.name = 'MyServer'
✗ tool[0](search)_input_schema
inputSchema invalid: JSON Schema 'true' literal is not accepted by Claude Code
────────────────────────────────────────────────────────────
Result: FAIL — 1/5 checks failed
Failing checks:
✗ tool[0](search)_input_schema: inputSchema invalid: ...
════════════════════════════════════════════════════════════
Zero dependencies
mcp-conform uses only Python stdlib (Python 3.10+). No mcp SDK, no httpx,
no pydantic — nothing to install, no version conflicts.
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file mcp_conform-0.1.0.tar.gz.
File metadata
- Download URL: mcp_conform-0.1.0.tar.gz
- Upload date:
- Size: 10.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e9cf32cf9c64094fc3ce5a06150e14ab659cc0f9d2874f4ca2961158f1c6fb42
|
|
| MD5 |
b2817b1aca52bea7a832196e6deed888
|
|
| BLAKE2b-256 |
69b4aab8b715aba49d58b17a7867a612ca99988898889dd3e08ba593582709a1
|
File details
Details for the file mcp_conform-0.1.0-py3-none-any.whl.
File metadata
- Download URL: mcp_conform-0.1.0-py3-none-any.whl
- Upload date:
- Size: 10.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4da3420d78697fd6a5a9d7629458dfe78657aa31d3bda8b1040c57466173c08c
|
|
| MD5 |
149b027683ee0e4f7632d3bb9e747755
|
|
| BLAKE2b-256 |
39afd03d50e8368ca4cec72863f55317baba5af281213a16677e743d52b1b5e0
|