Claude Desktop MCP Not Showing on Windows: Causes and Fixes

On Windows, Claude Desktop reads MCP servers from one file:%APPDATA%\Claude\claude_desktop_config.json, with a top-level mcpServers object. That file covers local stdio servers only — remote MCP servers are added through Settings > Connectors, a UI flow with OAuth sign-in, never as a URL entry in the JSON. When a server does not show up, the file usually failed to parse, the app was never fully restarted, or the server process failed to launch.

Symptoms this page covers

Possible causes, ordered by evidence strength

  1. Unescaped Windows backslashes (provable statically). JSON strings treat\ as an escape character, and a path likeC:\path\mcp\npx.cmd fails in two distinct ways. Sequences such as\p or \m areinvalid JSON escapes — the file cannot be parsed at all, so every server disappears. Sequences such as \t or \n arevalid escapes — the file parses, but the path silently becomes a tab or newline character and the command no longer exists. Use forward slashes (C:/path/mcp/npx.cmd) or double every backslash (C:\\path\\mcp\\npx.cmd).
  2. A remote URL entry in the JSON (provable statically). Claude Desktop does not read remote servers from claude_desktop_config.json. Aurl entry is a blocking schema error, not a remote config — remote servers go through Settings > Connectors.
  3. Editing the wrong file or location (verifiable on disk). The file must be exactly%APPDATA%\Claude\claude_desktop_config.json — the Claude folder inside roaming app data, with that exact filename. Aclaude_desktop_config.json saved anywhere else is never read.
  4. The app was not fully restarted (version-dependent). Claude Desktop reads the config at startup. Closing the window may not quit the app; on Windows, quitting from the system-tray icon is the reliable full exit in current versions. Menu wording and tray behavior change between versions, so the stable principle is: make sure the process fully exits, then relaunch.
  5. The server process failed to launch (visible in logs). A config can be perfectly valid while the launch fails — classically spawn npx ENOENT, because a GUI app does not inherit the PATH your terminal uses. That is a runtime problem; see thespawn ENOENT / npx not found guide.

Broken example: backslashes that break JSON

Broken claude_desktop_config.json

{"mcpServers":{"fs":{"command":"C:\path\mcp\npx.cmd","args":["-y","pkg"]}}}
Broken claude_desktop_config.json: single backslashes form invalid JSON escapes (\p, \m), so no server in the file loads.

What the doctor reports for this exact input

Client claude-desktop on windows → status blocking_error · rule: syntax.bad-escape

  • A backslash is followed by a character that is not a valid JSON escape (often a Windows path written with single backslashes).

Counter-example: a remote URL entry

Not a usable Claude Desktop config

{
  "mcpServers": {
    "api": {
      "url": "https://mcp.example.com/v1"
    }
  }
}
Not a usable Claude Desktop config: remote servers are added via Settings > Connectors, never as a url entry in claude_desktop_config.json.

What the doctor reports for this exact input

Client claude-desktop on windows → status blocking_error · rule: schema.claude-desktop-remote-json

  • Claude Desktop does not read remote servers from JSON; add remote servers via Settings > Connectors.

The corrected config (local stdio)

This is the exact output of this site’s generator for Claude Desktop on Windows: top-levelmcpServers, a local stdio entry withcommand and args, and no URL fields. Save it to%APPDATA%\Claude\claude_desktop_config.json.

{
  "mcpServers": {
    "github": {
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-github"
      ]
    }
  }
}

How to fix it

  1. Fully quit Claude Desktop (in current versions: quit from the system-tray icon — closing the window is not enough; this behavior is version-dependent, so confirm the process is gone).
  2. Open %APPDATA%\Claude\claude_desktop_config.json in a text editor.
  3. Fix the JSON: forward slashes or doubled backslashes in Windows paths, no trailing commas, no comments.
  4. Move any url entries out of the file — add remote servers via Settings > Connectors instead.
  5. Validate the edited file with the MCP Config Doctor (client: Claude Desktop, OS: Windows) before relaunching.
  6. Relaunch the app and check a new chat for the server’s tools.

Verify inside Claude Desktop

What static checks cannot prove

A valid claude_desktop_config.json proves only that the text is parseable and matches the Claude Desktop schema you checked it against — it does not prove the app has read or registered your servers. Whether the file sits at the path Claude Desktop actually reads, and whether the running instance has loaded it, can only be confirmed inside the app (the tools list and the MCP logs above). It also cannot prove the server binary exists on the PATH Claude Desktop inherits, that tokens are valid, or that the server starts without crashing. Menu names, tray behavior, and log locations also drift between versions — the version-independent rules are: valid JSON, stdio-only entries, a full restart, and a log check.

Official sources

Frequently asked questions

Where is claude_desktop_config.json on Windows?

At %APPDATA%\Claude\claude_desktop_config.json - paste that path into the Explorer address bar or the Run dialog to reach the folder. You can also open the file from inside the app via the developer settings ("Edit Config"); the exact menu wording has moved between versions, so the stable rule is: the file lives under the Claude folder in roaming app data, and remote servers are configured in Settings > Connectors, not in this file.

Why did all my MCP servers disappear from Claude Desktop at once?

A single JSON syntax error unloads every server in the file, and Claude Desktop shows no error dialog - the servers simply vanish. On Windows the classic trigger is an unescaped backslash in a path: sequences like \p or \m are invalid JSON escapes that stop parsing entirely. Validate the file with the MCP Config Doctor before anything else, then fully quit and relaunch the app.

Can I add a remote MCP server to claude_desktop_config.json?

No. Hand-written claude_desktop_config.json covers local stdio servers only (command/args/env). Remote MCP servers are added through Settings > Connectors, an official UI flow that handles OAuth sign-in. A "url" entry pasted into the JSON is not read and is flagged as a blocking schema error by the doctor.

Setting up Claude Desktop from scratch, including macOS paths? Read theClaude Desktop MCP config guide. Server dies at launch with spawn ENOENT? Seespawn ENOENT / npx not found. Comparing formats across clients? Check theMCP client compatibility matrix.