mcp-doctor
Evals & guardrails for AI agents and the MCP tools they call: lint + auto-fix, fuzz, SHIP/FIX-FIRST/BLOCK verdict, live guard. Runs in CI, Claude Code, Codex, Cursor.
Install / Use
claude mcp add vishalhabib99 -- npx -y github:vishalhabib99/mcp-doctorIf the server publishes to npm under a different name, use that package instead — check the repo README.
MCP Server
Model Context Protocol server
Quality Score
Category
SecuritySupported Platforms
Our assessment of mcp-doctor
mcp-doctor scores 74/100 on our quality scale, 1047th of 1,125 Security skills we index.
Its MCP Server is 54 KB long, well organised into 22 sections with 15 code examples: long enough that it reads more like full documentation than a focused instruction file, which agents can find harder to follow.
It has 3 GitHub stars, so there is little community track record yet; judge it on its content.
Maintenance, license and trust
- The repository was last updated 2 days ago, so mcp-doctor is actively maintained.
- It is released under the MIT license, a permissive license that allows use, modification and commercial use with attribution.
- Its trust signals score 92/100, with 1 caution from licensing, adoption, age or documentation. These come from repository metadata, not a code audit — read the skill file before letting an agent act on it.
mcp-doctor compared with similar skills
All 4 of these similar skills score higher than mcp-doctor; compare them before choosing.
| Skill | Score | Stars | Updated | Format |
|---|---|---|---|---|
| mcp-doctor (this skill)by vishalhabib99 | 74 | 3 | 2d ago | MCP Server |
| Agent-Reachby Panniantong | 100 | 102.4k | today | CLAUDE.md |
| headroomby headroomlabs-ai | 100 | 77.8k | 1d ago | CLAUDE.md |
| CowAgentby zhayujie | 100 | 47.6k | today | CLAUDE.md |
| Scraplingby D4Vinci | 100 | 89.7k | 3d ago | MCP Server |
Frequently asked questions
- How do I install mcp-doctor?
- Run
claude mcp add vishalhabib99 -- npx -y github:vishalhabib99/mcp-doctor. The install tabs above show the steps for each supported agent. - Which AI agents does mcp-doctor work with?
- It is written for Claude Code, Claude Desktop, Cursor and OpenAI Codex, as a MCP Server file. Other agents that read the same format can often use it too.
- Is mcp-doctor safe to use?
- It is MIT-licensed and scores 92/100 on trust signals. Skills are instructions an agent will follow, so read the file before installing it and do not approve commands you do not understand.
- Is mcp-doctor still maintained?
- The repository was last updated 2 days ago, so mcp-doctor is actively maintained.
Skill content
View source on GitHubmcp-doctor
Evals and guardrails for AI agents and the MCP tools they call. Lint, fuzz and guard a server to catch what breaks the agent: in the code, before release, and on every live call.
An agent is only as reliable as the tools it calls, and most MCP servers ship unchecked: tools with no description, parameters the model has to guess, errors that crash the session, a "success" that never happened, a prompt injection that walks a secret out the door. mcp-doctor checks a server at every stage, from the first line of code to the live agent call. Python, TypeScript, Go and Rust; runs in CI, Claude Code, Codex and Cursor.
| When | Command | What it answers |
|---|---|---|
| Writing it | mcp-doctor . · --fix · --diff-against | Can an agent understand and safely call these tools? What changed since the last release? |
| Every PR | GitHub Action · pre-commit | The same, on the lines that changed, with one-click fixes. Add run: for a verdict. |
| Before release | fuzz · fuzz --truth · verdict | Does it fail cleanly on bad input? Is a "success" a real answer? Ship it? |
| In production | guard · guard hook · mcp_doctor.session | Did that call actually work? Is a secret about to leave after a prompt injection? |
| Anywhere | browser · issue bot · plugin for Claude Code, Codex, Cursor | The same checks with nothing to install, or from inside your editor. |
Real output from mcp-doctor 0.35.0 on the bundled example servers and guard's test fixture, long lines cut and some findings left out (how it's built).
In use: jupyter-mcp-server (1.3K★) runs the Action on every PR, added after its maintainer asked for it. Fixes from mcp-doctor's findings have been merged upstream in telegram-mcp (111 tools in one PR), davinci-resolve-mcp (shipped as its own release) and ha-mcp (5.1K★); 61 merged upstream fixes in 58 repos.
Contents: Try it · Why trust it · Scan and fix · GitHub Action · pre-commit · Fuzz and verdict · Guard · Plugin · What it checks · Security checks · Install · Limitations · Roadmap
Try it in 30 seconds
- In your browser: check any MCP server. Paste a GitHub repo, npm or PyPI name and get both grades in seconds. The real mcp-doctor runs in your browser (Pyodide); nothing is uploaded or run.
- No install, as a GitHub issue: open a scan request with your server's GitHub URL. A bot replies with the report in a few minutes. It reads the code only and never runs it. Security findings are posted as counts only, since the issue is public.
- CLI:
pip install mcp-server-lint, thenmcp-doctor path/to/your/server - Fuzz a running server:
uvx --from 'mcp-server-lint[runtime]' mcp-doctor fuzz -- python server.py, ormcp-doctor verdict . --run "python server.py"for one SHIP / FIX-FIRST / BLOCK decision (details) - Running an agent? Put
mcp-doctor guardin front of any MCP server, and the agent is told when a tool says "success" but the write didn't land, its arguments were ignored, or it didn't do what it claims - Claude Code, Codex or Cursor: install the plugin (Claude Code:
/plugin install mcp-doctor --marketplace vishalhabib99/mcp-doctor; Codex:codex plugin marketplace add vishalhabib99/mcp-doctor), then ask "check my MCP server". The agent scans, explains each finding, and fixes what it can with your OK (details) - CI:
uses: vishalhabib99/mcp-doctor@v1comments on each PR, suggests one-click fixes on the lines it changes, and can fail a PR that drops below your score (details)
<a id="why-trust-the-grade"></a>
Why trust its findings
- Recall is measured, misses are published. A checker that can't see a tool quietly grades it as fine, so tool detection is measured against an independent count: 15,755 of 15,977 tools found across 805 real servers on 5 frameworks. Every miss is listed with its reason in docs/coverage.md.
- Breakages first, grades second. Every report opens with what will break an agent calling the server, from checks maintainers have already acted on: an optional argument that rejects the
nullits own schema advertises (fixed by maintainers in 20 repos), stray stdout on a stdio server (3 repos), a server that won't start on a fresh install ofmcp2.x. Before the fix, 17 of the 19 such bugs maintainers merged showed up this way, while the grade gave most of those repos an A. On 20 repos it had never seen, the lines checked by hand were 96% right (53 of 55 read in full, plus 16 of 16 sampled from two repos with hundreds). The grades still follow, for everything else. - 131 of its own bugs found and fixed after release by running it on real servers, up to the 91.5k★ official
modelcontextprotocol/serversmonorepo; a fix ships only when a before/after run on 120+ real repos changes nothing it shouldn't. The log · how 69 of them got through. - Maintainers act on its reports: fixes merged upstream, among them ha-mcp, telegram-mcp (111 tools fixed in one PR) and davinci-resolve-mcp (shipped as its own release).
- Quality and security are graded separately, so a well-documented A can't hide a security gap. Every audited repo is on the leaderboard with a dated badge you can add to your README, and re-scans show ▲/▼ drift.
- What the first outside users hit, and what changed because of it: docs/what-users-taught-me.md.
<a id="lint-and-fix"></a>
Scan the code and fix it in place
The static scan reads source and never runs it. Point it at a server and it leads with what will break an agent, then two grades and every finding:
$ mcp-doctor .
mcp-doctor report
Will break an agent: 3
search(limit) (server.py:5): a client that sends the advertised null default gets a validation error, and the tool never runs.
Fix: type it `T | None` (`mcp-doctor --fix` does this). (fixed by maintainers in 20 repos)
search (server.py:12): stray stdout on stdio corrupts the JSON-RPC stream: calls time out (Python) or the client logs parse errors (Node).
Fix: write to stderr or use logging. (fixed by maintainers in 3 repos)
server.py:1: a fresh install gets mcp 2.x and the server fails to start.
Fix: pin `mcp<2`, or migrate the removed import. (removed in mcp 2.x; fails on import)
Quality: 34% Grade: F (1 tool(s) found)
When none are found it says so, and names what it looked for: No known agent-breaking issues (checked: null defaults, stdout on stdio, mcp 2.x start-up). --json lists them under breakages, with breakage_count.

A live scan of homeassistant-ai/ha-mcp (5.1k★). The bundled examples, before and after:
$ mcp-doctor examples/bad_server
mcp-doctor report
Will break an agent: 1
run(timeout) (server.py:18): a client that sends the advertised null default gets a validation error, and the tool never runs.
Fix: type it `T | None` (`mcp-doctor --fix` does this). (fixed by maintainers in 20 repos)
Quality: 22% Grade: F (2 tool(s) found)
Security: 100% Grade: A
[FAIL] do_thing (server.py:12)
ERROR Tool has no description. An agent cannot decide when to call this.
WARNING 2/2 parameters have no type annotation.
WARNING Parameters aren't documented — no Args:/:param: docstring section and no per-parameter Field(description=...) — the model only sees …
WARNING No try/except in this function's own body. FastMCP still catches an unhandled exception here and returns a structured error rather …
[FAIL] run (server.py:18)
ERROR Tool has no description. An agent cannot decide when to call this.
WARNING 1/2 parameters have no type annotation.
WARNING Parameters aren't documented — no Args:/:param: docstring section and no per-parameter Field(description=...) — the model only sees …
WARNING timeout defaults to None but is typed as a non-optional type, so the schema advertises `"default": null` on a field whose `type` …
ERROR Bare 'except:' swallows all errors including cancellation — catch specific exceptions.
Repo-level
ERROR No README found.
WARNING No test files found.
WARNING No pyproject.toml/requirements.txt/setup.py/package.json/go.mod/Cargo.toml — dependencies aren't pinned.
$ mcp-doctor examples/good_server
mcp-doctor report
No known agent-breaking issues (checked: null defaults, stdout on stdio, mcp 2.x start-up)
Quality: 100% Grade: A (1 tool(s) found)
Security: 100% Grade: A
[OK] get_forecast (server.py:12)
mcp-doctor . # audit the current directory
mcp-doctor path/to/server # audit a specific path
mcp-doctor . --json # machine-readable output
mcp-doctor . --fail-under 80 # exit 1 if score drops below 80% — wire into CI
mcp-doctor . --diff # preview the safe fixes as a patch (pipe to `git apply`); changes nothing
mcp-doctor . --fix # apply safe, mechanical fixes in place, then re-report
mcp-doctor . --fix --fix-only none-default # one kind of fix only (none-default, bare-except, args-stub), e.g. one kind per PR
mcp-doctor . --diff --llm # same patch, with parameter docs drafted by a local model instead of TODOs
--fix only touches what's safe to fix without human judgment:
Nonedefaults typed nullable:name: str = Nonebecomesname: str | None = None(orOptional[str]when the file already importsOptional); insideAnnotated[...]only the type is wrapped. This is the
Truncated for display — read the full file on GitHub.
Related Skills
Agent-Reach
102.4kGive your AI agent eyes to see the entire internet. Read & search Twitter, Reddit, YouTube, GitHub, Bilibili, XiaoHongShu — one CLI, zero API fees.
headroom
77.8kCompress tool outputs, logs, files, and RAG chunks before they reach the LLM. 20% fewer tokens for coding agents, 60-95% fewer tokens for JSON, same answers. Library, proxy, MCP server.
CowAgent
47.6kOpen-source personal AI assistant & Agent Harness. Plans tasks, runs tools and skills, self-evolves with memory and knowledge. Multi-agent, multi-model, multi-channel. Lightweight, extensible, one-line install.
Scrapling
89.7k🕷️ A Web Scraping framework that handles everything from a single request to a full-scale crawl! Don't be shy, join here: https://discord.gg/EMgGbDceNQ and follow here for daily tips and tricks: https://x.com/Scrapling_dev
Languages
Trust signals
From repository metadata: license, adoption, age and documentation. Not a code audit — see the Safety scan above for what the skill file itself contains.
