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.
| Client | File | Top-level key | Where | Source, read 2026-09-08 |
|---|---|---|---|---|
| Claude Desktop | claude_desktop_config.json |
mcpServers |
macOS ~/Library/Application Support/Claude/claude_desktop_config.jsonWindows %APPDATA%\Claude\claude_desktop_config.jsonLinux: 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 rootlocal and user scope: ~/.claude.json |
docs.claude.com/en/docs/claude-code/mcp |
| Cursor | mcp.json |
mcpServers |
this project: .cursor/mcp.jsoneverywhere: ~/.cursor/mcp.json |
cursor.com/docs/context/mcp |
| VS Code | mcp.json |
servers |
workspace: .vscode/mcp.jsonuser 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.jsoneditor 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 |
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.
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.
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.
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.
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.
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.
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.
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.
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.
All MCP servers and prices · All guides · Buy the bundle $39