MCP client config reference
Every MCP client reads servers from its own place, under its own key and sometimes in its own format. This table shows where each one looks, what shape it wants and whether it handles OAuth for remote servers.
| Client | Config file | Top-level key | Format | Remote OAuth | CLI add |
|---|---|---|---|---|---|
| Claude Desktop | ~/Library/Application Support/Claude/claude_desktop_config.json | mcpServers | json | Yes | No |
| Claude Code | .mcp.json | mcpServers | json | Yes | Yes |
| Cursor | .cursor/mcp.json | mcpServers | json | Yes | No |
| VS Code (GitHub Copilot) | .vscode/mcp.json (key 'servers') or portable .mcp.json (key 'mcpServers') | servers | json | Yes | Yes |
| Windsurf / Devin Desktop | .devin/mcp_config.json (Devin CLI / Devin Local project scope) | mcpServers | json | Yes | Yes |
| Zed | ~/.config/zed/settings.json | context_servers | json | Yes | No |
| OpenAI Codex CLI | .codex/config.toml (trusted projects only) | mcp_servers | toml | Yes | Yes |
| Gemini CLI | .gemini/settings.json | mcpServers | json | Yes | Yes |
| ChatGPT | Settings screen only | — | — | Yes | No |
| OpenClaw | ~/.openclaw/openclaw.json | mcp.servers | json5 | Yes | Yes |
| Cline | ~/Library/Application Support/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json | mcpServers | json | Not documented | Yes |
| Continue | .continue/mcpServers/<name>.yaml (or drop a Claude/Cursor/Cline-style mcp.json into .continue/mcpServers/) | mcpServers | yaml | Not documented | No |
| JetBrains AI Assistant | Settings screen only | mcpServers | json (pasted in UI) | Not documented | No |
Differences that break setups
VS Code uses servers
.vscode/mcp.json lists entries under servers, not mcpServers, so a Cursor or Claude config pasted in unchanged won't load. The newer portable .mcp.json and ~/.copilot/mcp-config.json do use mcpServers.
Gemini CLI: httpUrl, not url
Gemini CLI picks the transport from the field name. httpUrl means Streamable HTTP, url means the old SSE transport, and command means stdio. A modern remote server needs httpUrl.
OpenClaw and Cline default to SSE
Leave out the transport on a remote entry and both fall back to legacy SSE. Set transport to streamable-http in OpenClaw and type to streamableHttp in Cline.
Claude Code wants a type
In .mcp.json, a remote entry with a url but no type is an error. Add type http next to the url; stdio entries take type stdio.
Codex is TOML, one table per server
Codex has no JSON file. Each server is its own [mcp_servers.<name>] table in config.toml, args is a TOML array, and env_vars forwards secrets from your shell by name.
Continue expects a YAML list
In Continue, mcpServers is a list of entries that each carry a name, not a map keyed by name. Every block file also needs name, version and schema: v1 at the top.