mcp-doctor
One command, every MCP audit — session hygiene, wire shapes, name collisions.
MCP integrations break in three places and none of them crash:
| Where | What breaks | Auditor |
|---|---|---|
| Recorded session | dangling tool_call_id poisons later requests (opencode #44852), swallowed isError (zeroclaw #7122), error-channel confusion (memoria #258) |
session — mcp-session-audit |
| Advertised listings | schemas that make strict clients silently reject tools (gitlab-mcp #286, langfuse #13804, strapi #27395) | schema — mcp-schema-audit |
| Tool names | collision between servers makes the agent call the wrong tool (VSCode #324992, Copilot #11480) | collide — mcp-collision |
Install
pip install mcpmedic
Usage
mcp-doctor check recording.jsonl # session + schema, one pass
mcp-doctor session recording.jsonl # session hygiene only
mcp-doctor schema recording.jsonl # wire-shape conformance only
mcp-doctor collide --client claude # name collisions across installed servers
Input: JSONL of recorded MCP messages — a CI log, a debug dump, a user-reported session file. No live server needed.
{"direction":"request","id":1,"method":"initialize","params":{"protocolVersion":"2025-11-25"}}
{"direction":"response","id":1,"result":{"protocolVersion":"2025-11-25","serverInfo":{"name":"srv","version":"1.0"}}}
{"direction":"response","id":2,"result":{"tools":[{"name":"search","inputSchema":{"type":"object","properties":{}}}]}}
Exit codes (CI-friendly): 0 clean · 1 warnings · 2 critical.
Member auditors
- mcp-session-audit — dangling calls, orphan/duplicate responses, isError swallowed, error-as-text, unknown tools
- mcp-schema-audit — empty schemas, root type violations, draft-07 tuples, duplicate names, protocol version sanity
- mcp-collision — predicts tool-name collisions before your agent does
MIT License.
Metadata
Release files for mcpmedic 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| mcpmedic-0.1.0.tar.gz | 12.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| mcpmedic-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 26.5 kB
Release files / mcpmedic-0.1.0.tar.gz
| Download URL | mcpmedic-0.1.0.tar.gz |
|---|---|
| Size | 12.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
fa56821fa5f8ca4a378a1846280af927a8e3438d7bdd029bda45c7901577b4ae
|
|
BLAKE2b-256 checksum How to use checksums |
6d8f6c3e063326dedab3cf697bda35cea7be8cb2a9cbbc1abc8d910eb4be9493
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.18 {"installer":{"name":"uv","version":"0.12.18","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / mcpmedic-0.1.0-py3-none-any.whl
| Download URL | mcpmedic-0.1.0-py3-none-any.whl |
|---|---|
| Size | 14.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
1e1b2353827b7146d1792115fb8aa55620efea31a832bdfb893f46c2bbc12c15
|
|
BLAKE2b-256 checksum How to use checksums |
793e69efb271e3af318a75bde6f5d5cb14f0a11126cb8f1568ad83260257d2c0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.18 {"installer":{"name":"uv","version":"0.12.18","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|