Almost never the protocol. Almost always a path, a missing build, or a server that dies on startup and says so where nobody is looking.
Last updated: 2026-09-22
Inside Claude Code, run /mcp. That tells you which of two problems you have, and they have nothing to do with each other:
| What you see | What it means |
|---|---|
| Your server is not listed | The configuration was never read. Nothing about your server code matters yet |
| Listed, but failing or disconnected | The configuration was read and the server was launched. Now it is a startup problem |
People usually skip this check and start rewriting the server. Half the time the server was never launched.
.mcp.json in the project, or whatever claude mcp add wrote.If the file parses and the server still is not listed, check the scope before anything else: claude mcp add defaults to --scope local, which writes ~/.claude.json and not the .mcp.json you are looking at. The .mcp.json that travels covers which scope goes where, and the credential names that expand to an empty string on purpose.
In order of how often each one is the answer:
| # | Cause | How to tell | Fix |
|---|---|---|---|
| 1 | Relative path | Works in your shell, not in Claude Code | Use the absolute path to the entry file |
| 2 | Not built | Config points at dist/; you have only edited src/ | Run your build, then retry |
| 3 | Crashes on startup | Connects then drops immediately | Run the exact command from the config by hand and read the error |
| 4 | Missing environment variable | Your shell has it; the launched process does not | Put it in the server's env block in the config |
| 5 | Something printed to stdout | Garbled or immediately-closed connection on a stdio server | Send every log line to stderr; stdout is the protocol |
Run the server's command yourself, exactly as the config has it — the same absolute path, the same arguments:
node /absolute/path/to/your-server/dist/server.js
If that errors, you have your answer and it was never a Claude Code problem. If it sits there waiting, the server is fine and the problem is the configuration above it.
A working reference helps more than any checklist. kit-one-tool-mcp is one tool with 15 offline tests — clone it, run npm test, and you have a known-good server to compare against. If it connects and yours does not, the difference is in your config, not in the protocol.
Flat prices, written scope, stop at any rung. No call to book, no retainer.
| Rung | What you get | Clock |
|---|---|---|
| Free — starter repo | A real setup you copy yourself | now |
| $29 — Setup Lite | One project: CLAUDE.md, allowlist, one skill, as a pull request you review | 24 hours |
| $99 — Setup Sprint | 3–5 skills, hooks, up to 3 MCP servers, plus a runbook | 48 hours |
| $79 — Surface Audit | Already set up and still fighting it: contradictions and an exact fix list | 48 hours |
Clocks run from a complete intake, not from the Stripe receipt.