MCP Client Config Formats: Claude Desktop, Cursor, VS Code & More

The MCP protocol is identical across every client — the same JSON-RPC messages, the same tools and resources. What differs is the config wrapper: where the file lives, what the top-level key is called, and how a server entry is shaped. Copy-pasting a config from one client into another without adjusting the wrapper is the single most common setup mistake.

The four config “shapes” #

Every server entry boils down to one of four shapes:

  1. STDIO / localcommand + args + optional env (the npx -y @scope/package pattern).
  2. Remote (Claude / Cursor style)url + headers with a Bearer token.
  3. Remote (VS Code style) → adds an explicit type field ("stdio" or "sse").
  4. Array style (Continue) → same fields, but the list is an array and each entry needs a name.

Claude Desktop #

Root key: mcpServers (object). Config file:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows: %APPDATA%\Claude\claude_desktop_config.json

You must fully quit and reopen the app after editing — closing the window is not enough.

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

Cursor #

Same mcpServers object format as Claude Desktop — you can often copy configs directly between the two. Global config at ~/.cursor/mcp.json, or project-scoped at .cursor/mcp.json in your project root. Unlike Claude Desktop, Cursor hot-reloads config changes, so no restart is needed.

For a remote server, both Claude Desktop and Cursor swap command/args for a url + headers block:

{
  "mcpServers": {
    "notion": {
      "url": "https://mcp.notion.com/sse",
      "headers": { "Authorization": "Bearer YOUR_TOKEN" }
    }
  }
}

VS Code #

The big one people trip over: VS Code uses servers as the top-level key, not mcpServers. Use the wrong key and VS Code silently ignores every server with no error message. Config goes at .vscode/mcp.json in the project root. VS Code also wants an explicit type field ("stdio" for local, "sse" for remote) and supports an inputs block so you can be prompted for secrets instead of hardcoding them.

{
  "servers": {
    "github": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-github"],
      "env": { "GITHUB_PERSONAL_ACCESS_TOKEN": "${input:gh-token}" }
    }
  }
}

Cline (VS Code extension) #

Mirrors Claude Desktop’s mcpServers schema exactly, but stored in its own extension path under VS Code’s globalStorage as cline_mcp_settings.json. Hot-reloads, no restart. Easiest path is the MCP Servers panel in the sidebar rather than editing the file by hand.

Continue #

The sneaky one. Continue uses an array for mcpServers, not an object like Claude Desktop and Cursor, and each entry needs its own name field. Mixing this up causes silent failures. Config lives at ~/.continue/config.json.

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

Zed #

Different key entirely: context_servers, inside ~/.config/zed/settings.json. The command is nested inside a command object with a path. Zed only supports STDIO natively — to use a remote server you wrap it in the mcp-remote bridge package, which runs locally as a STDIO proxy to the remote endpoint.

{
  "context_servers": {
    "github": {
      "command": {
        "path": "npx",
        "args": ["-y", "@modelcontextprotocol/server-github"],
        "env": { "GITHUB_PERSONAL_ACCESS_TOKEN": "YOUR_TOKEN" }
      }
    }
  }
}

Codex CLI #

Not even JSON. Codex reads TOML from ~/.codex/config.toml. Key differences: mcpServers becomes mcp_servers (underscore, not camelCase), there is no outer object wrapper, server names use dot notation ([mcp_servers.name]), and remote Streamable HTTP servers need mcp-proxy to bridge them.

Quick reference #

Client Config file Root key Remote support Restart needed?
Claude Desktop claude_desktop_config.json mcpServers {} url + headers Yes
Cursor ~/.cursor/mcp.json mcpServers {} url + headers No (hot reload)
VS Code .vscode/mcp.json servers {} type: sse + url Yes
Cline cline_mcp_settings.json mcpServers {} Yes No
Continue ~/.continue/config.json mcpServers [] url field No
Zed ~/.config/zed/settings.json context_servers {} via mcp-remote Yes
Codex CLI ~/.codex/config.toml mcp_servers (TOML) via mcp-proxy Yes

If a server connects but no tools appear, or you hit a 403 on a remote server, see the companion Troubleshooting article.

What are your feelings

Updated on 26 May 2026