Servers under no recognised key
The file parses, the client finds nothing, and no error appears anywhere
{
"filesystem": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-filesystem", "/Users/me"]
}
} Paste an MCP config and get the reasons it will not work: the wrong servers key, a relative command, npx without -y, docker without -i, and any credential written into the file. Credentials are reported by key and length, never echoed.
Or drop a file anywhere on this panel. Nothing is uploaded: the analysis runs in this tab.
The answer appears here
Paste on the left and press Validate. Nothing leaves this tab.
Nothing else to flag.
No formatting problems, and nothing the rules object to. Worth remembering what that covers: this reads the file you pasted, not the account or cluster it will be applied to.
No finding matches that filter.
Real input you can load into the tool above. Each one shows a different thing going wrong, because that is what the tool is for.
The file parses, the client finds nothing, and no error appears anywhere
{
"filesystem": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-filesystem", "/Users/me"]
}
}The -t is habit from interactive shells and it corrupts the framing by echoing input back
{
"mcpServers": {
"db": {
"command": "docker",
"args": ["run", "-it", "--rm", "my/mcp-server"]
}
}
}One argument containing a space, not two arguments
{
"mcpServers": {
"a": { "command": "npx", "args": "-y @scope/server" }
}
}These are the ones that fail silently. The config is accepted, nothing raises an error, and the consequence arrives later.
Claude Desktop and `.mcp.json` read `mcpServers`; VS Code reads `servers`. The wrong one parses cleanly and produces an empty server list with no error anywhere, which is why it survives so long.
Instead:Match the key to the client that will read the file.
`-i` is required to keep stdin open. `-t` allocates a TTY, which echoes input back and rewrites line endings, and both land in the middle of the JSON-RPC stream.
Instead:`-i` alone, plus `--rm` so a stopped container is not left behind on every client restart.
`claude_desktop_config.json` and `.mcp.json` are strict JSON with no comments and no trailing commas. One of either makes the whole file unparseable, which takes out every server rather than the one you edited.
Instead:Keep notes outside the file. Only VS Code's `mcp.json` is JSONC.
"Server disconnected" covers a crash on import, a missing binary, a prompt nobody answered and a config the client never read. This separates the ones visible in the file from the ones that are not.
Claude Desktop and .mcp.json read mcpServers. VS Code reads servers. A file that parses as JSON but puts the entries anywhere else produces no servers and no complaint, because from the client's point of view you configured nothing. This is the failure that survives longest, since the file looks obviously correct.
stdio needs stdin held open, which is what -i does. A TTY, which is what -t does, echoes input back and rewrites line endings; both land in the message stream and corrupt the framing. -it is muscle memory from interactive shells and is exactly wrong here. Use -i alone, and add --rm unless you want a stopped container for every client restart.
Writing args as a string passes a single token containing a space, which the command sees as one strange argument rather than two. The error that comes back is from the package manager and does not mention the config.
It is a VS Code feature backed by its secret storage. Anywhere else the literal placeholder text is handed to the server as the value, so the server reports an authentication failure and the mistake reads as a bad credential rather than a config one.
Everything outside the file. Whether the command exists on your machine, whether the package resolves, whether the URL is reachable, whether the server crashes two lines into its own startup, and whether your client version supports the fields used here. It runs entirely in your browser and makes no request anywhere, so nothing about your actual environment is available to it. A config that passes here and still fails is a runtime problem: capture the session and use the stdio session debugger, or check the client's server log for stderr.
Comments and trailing commas are not JSON
VS Code's mcp.json is JSONC and accepts both. claude_desktop_config.json and .mcp.json are strict JSON and accept neither. A single trailing comma makes the whole file unparseable, which takes out every server in it rather than the one you just edited, so the symptom is that everything stopped working at once.