Home · Guides

Where each MCP client keeps its config, and the key it expects

Every row below was read off the client's own documentation on 2026-09-08. The source URL is in the last column. Where a vendor publishes no path for an operating system, the cell says so rather than guessing.

ClientFileTop-level keyWhereSource, read 2026-09-08
Claude Desktop claude_desktop_config.json mcpServers macOS ~/Library/Application Support/Claude/claude_desktop_config.json
Windows %APPDATA%\Claude\claude_desktop_config.json
Linux: no path published
modelcontextprotocol.io/docs/develop/connect-local-servers
Claude Code .mcp.json and ~/.claude.json mcpServers project scope: .mcp.json at the repository root
local and user scope: ~/.claude.json
docs.claude.com/en/docs/claude-code/mcp
Cursor mcp.json mcpServers this project: .cursor/mcp.json
everywhere: ~/.cursor/mcp.json
cursor.com/docs/context/mcp
VS Code mcp.json servers workspace: .vscode/mcp.json
user profile: opened by the MCP: Open User Configuration command, not documented as a path
code.visualstudio.com/docs/copilot/customization/mcp-servers
Windsurf, legacy Cascade agent mcp_config.json mcpServers ~/.codeium/windsurf/mcp_config.json docs.devin.ai/desktop/cascade/mcp
Cline mcp.json mcpServers CLI: ~/.cline/mcp.json
editor extension: reached from the panel, MCP Servers icon, Configure tab, Configure MCP Servers. No path is published for it.
docs.cline.bot/mcp/mcp-overview
Claude.ai and Claude Desktop connectors none none A form, not a file: Connectors, Add custom connector, then a name and a remote MCP server URL support.claude.com/en/articles/11175166

The one row that costs people an afternoon

VS Code is the only client here whose top-level key is servers. Six of the seven use mcpServers. A block copied from a Claude Desktop or Cursor README into .vscode/mcp.json is valid JSON, contributes no servers, and produces no error message.

{
  "servers": {
    "invoice": {
      "command": "node",
      "args": ["/Users/you/mcp-servers/servers/invoice/dist/index.js"]
    }
  }
}

VS Code also accepts MCP servers in a dev container, under customizations.vscode.mcp.servers in devcontainer.json, which is the same key one level down.

Home-relative paths and Windows

Cursor, Windsurf and Cline document one path each, written home-relative with a tilde. That is the path on every operating system they support; the tilde resolves to the user's home directory, which on Windows is what %USERPROFILE% expands to. Only Claude Desktop publishes two genuinely different strings, and it publishes none for Linux, because its documentation lists macOS and Windows as the supported platforms.

Where these paths are not the answer

Two clients here have a second configuration surface that the file does not cover.

Windsurf's mcp_config.json applies to the legacy Cascade agent only. The Devin Local agent, which is the default for new tabs, reads the Devin CLI config files instead, so a correct entry in this file can be absent in a fresh tab.

Claude Code rarely wants the file edited by hand. claude mcp add writes it, claude mcp list and claude mcp get <name> read it back with a health check, and claude mcp add-json <name> '<json>' takes a whole config object. Which file it writes depends on --scope, and the default is local.

Checking a path rather than trusting one

A reference table ages. These two commands do not:

ls -l ~/Library/Application\ Support/Claude/claude_desktop_config.json
python3 -c 'import json,sys;json.load(open(sys.argv[1]))' ~/.cursor/mcp.json

The second one matters more than it looks. A trailing comma makes the whole file unparseable, and most clients respond to an unparseable config by loading no servers at all rather than by telling you which line is wrong.

This table exists because it is the data the 30 MCP servers on this site had to get right to ship a per-client install page for each one. The per-client pages are under setup, and the source rows with their caveats live in billing/src/setup.js in the repository.

Questions

Which clients use mcpServers and which use servers?

Claude Desktop, Claude Code, Cursor, Windsurf and Cline use mcpServers. VS Code uses servers. That is the only split among the six file-based clients checked on 2026-09-08.

Is there a Linux path for Claude Desktop?

None is published. The documentation at modelcontextprotocol.io names macOS and Windows as the platforms, and gives a path for each. Anything you find for Linux comes from a community build, not from the vendor.

Where is the VS Code user-level mcp.json?

The documentation does not give a path for it. It gives a command instead: MCP: Open User Configuration from the command palette, which opens the file in the active profile. MCP: Open Workspace Folder Configuration opens the workspace one.

Do these files support environment variable expansion?

It varies and it is worth checking before relying on it. Claude Code expands ${VAR} and ${VAR:-default} in command, args, env, url and headers. Cursor resolves ${env:NAME} and ${userHome} in command, args, env, url and headers. VS Code uses an inputs array and ${input:id} for secrets. Claude Desktop documents an env object with literal values.

Why does the same server need a different file in every client?

Because the protocol standardises the wire, not the client. MCP defines how a client and a server talk once they are connected; where a client stores the list of servers to launch is a product decision each vendor made separately.

Related

All MCP servers and prices · All guides · Buy the bundle $39