MCP server config linter and doctor
Click on "Deploy 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 server config linter and doctorlint my claude_desktop_config.json and diagnose failing MCP servers"
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.
mcpdoc
Lints MCP server config files (.mcp.json, claude_desktop_config.json) and tells you exactly why a server will not start.
When an MCP server fails to load, the client usually says nothing useful: the tools
are just absent. The real cause is almost always boring -- the command is not on
your PATH, a token was left as "", the same server name appears twice so one
entry silently wins, or an HTTP endpoint is dead. mcpdoc reads the config the
same way the client does and names the broken line.
Real terminal output
$ mcpdoc --config .mcp.json
Linting .mcp.json
error: Server 'filesystem' is defined more than once.
error: Server 'github' command 'github-mcp-server' was not found on PATH.
error: Server 'github' environment variable 'GITHUB_PERSONAL_ACCESS_TOKEN' must be a non-empty string.
warning: Endpoint 'http://127.0.0.1:9/mcp' did not respond in time.
$ echo $?
1Errors print in red, warnings in yellow. Any error means exit code 1, so it drops straight into CI.
Related MCP server: MCP Observatory
Install
Not on PyPI. Clone it and install from the checkout:
pip install -e .Needs Python 3.11 or newer.
Usage
mcpdoc # lint ./.mcp.json
mcpdoc --config ~/.claude.json # lint a config somewhere else
mcpdoc --config .mcp.json --json # one JSON object, for scripts
mcpdoc --config .mcp.json --fix # rename duplicate server names in place--fix rewrites the file as valid JSON and only changes what it can change
safely, which today means de-duplicating server names. Everything else is
reported, not guessed at:
$ mcpdoc --config .mcp.json --fix
Linting .mcp.json
error: Server 'github' command 'github-mcp-server' was not found on PATH.
error: Server 'github' environment variable 'GITHUB_PERSONAL_ACCESS_TOKEN' must be a non-empty string.
warning: Endpoint 'http://127.0.0.1:9/mcp' did not respond in time.
fixed: renamed duplicate server 'filesystem' to 'filesystem-2'
hint: install 'github-mcp-server' or point the command at a real path--check reports without touching the file, and --version prints the version.
How it works
The config is parsed with a JSON hook that keeps repeated keys, so a duplicated
server name cannot vanish on the way in. Servers are read from mcpServers,
falling back to servers for hand-written files.
Check | What it does | Severity |
Duplicate servers | Server names that appear more than once in the raw JSON | error |
Missing binaries |
| error |
Bad env vars | Non-string, empty or whitespace values in | error |
Unreachable endpoints | One HEAD request per | warning |
If a config declares its own binaries allowlist, commands are checked against
that list instead of against the real system.
Limitations
It never starts a server, so a command that exists but crashes on launch looks fine.
It does not validate
args, transport fields, or anything MCP-protocol specific.Env values are only checked for being non-empty strings; a wrong token passes.
--fixonly de-duplicates names. Missing binaries and bad env values are yours to fix.The endpoint check is a single HEAD request, so a slow server on a bad network can be reported as unreachable.
Development
pip install -e ".[dev]"
pytest -q
ruff check .MIT -- see LICENSE.
This server cannot be deployed
Maintenance
Related MCP Connectors
MCP Spec Compliance MCP — audits any MCP server.json against the official Model Context Protocol
Check if your MCP server is ready to publish on the MCP Registry, Smithery, or npm.
Statically audits MCP tool surfaces for token cost, schema quality, and design issues.
Validate oh-my-posh configurations and segment snippets against the official schema.
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables safe management of MCP server configuration files for AWS Q Developer and Claude Desktop, including adding, updating, removing servers, automatic backups, and validation.7MIT
- AlicenseBqualityAmaintenanceFinds problems in your MCP servers before your users do. Scans your Claude config, checks every server's capabilities, actually calls tools to make sure they work, and catches breaking changes between versions.13432 npm142MIT
- AlicenseNot gradedqualityCmaintenanceDiagnose MCP servers — health checks, tool testing, token cost audits, conflict detection, and security scanning with 50+ prompt injection patterns. Works as CLI or MCP server inside Claude Desktop.1MIT
- FlicenseNot gradedqualityCmaintenanceAn MCP (Model Context Protocol) server that inspects your local development environment and reports missing dependencies, version mismatches, and misconfigured environment variables to any MCP-compatible AI assistant. Works with Claude Desktop, Cursor, Gemini CLI, and any other client that supports stdio-transport MCP servers.-