Runs entirely in your browser. The key you type is never sent anywhere.
How to do it
- Pick your client Claude Desktop, Cursor, VS Code, Windsurf, or a generic mcpServers block.
- Choose the transport stdio runs a local command, such as npx. Streamable HTTP points at a URL.
- Fill in the server details Command and arguments for stdio, or URL and an Authorization header for HTTP. Add environment variables if the server needs them.
- Copy the JSON into the config file Merge it into the existing file rather than replacing it, so your other servers stay.
- Restart the client Most clients read the file on start. Check the tools list to confirm the server loaded.
Where each client keeps its MCP config
| Client | File | Top-level key |
|---|---|---|
| Claude Desktop (macOS) | ~/Library/Application Support/Claude/claude_desktop_config.json | mcpServers |
| Claude Desktop (Windows) | %APPDATA%\Claude\claude_desktop_config.json | mcpServers |
| Cursor (one project) | .cursor/mcp.json in the project | mcpServers |
| Cursor (all projects) | ~/.cursor/mcp.json | mcpServers |
| VS Code | .vscode/mcp.json in the workspace | servers |
| Windsurf | ~/.codeium/windsurf/mcp_config.json | mcpServers |
| Claude Code | .mcp.json in the project, or claude mcp add | mcpServers |
| Gemini CLI | ~/.gemini/settings.json | mcpServers |
In Claude Desktop you can also open the file from Settings, then Developer, then Edit Config.
stdio versus streamable HTTP
stdio starts the server as a child process of the client. It suits servers you run with npx or a local binary:
{
"mcpServers": {
"social": {
"command": "npx",
"args": ["-y", "socialhandoff-mcp"]
}
}
}Streamable HTTP connects to a server that is already running, locally or remotely, and usually sends a bearer token:
{
"mcpServers": {
"social": {
"url": "https://your-server.example/mcp",
"headers": { "Authorization": "Bearer YOUR_KEY" }
}
}
}VS Code uses servers instead of mcpServers and a type field of stdio or http.
Common mistakes
- Trailing commas. JSON does not allow them, and one stray comma makes the client ignore the whole file.
- Replacing the file. Merge new servers into the existing object.
- Committing keys. A project
.cursor/mcp.jsonor.vscode/mcp.jsonoften ends up in git. Use an environment variable or a user-level file for secrets. - Not restarting. Claude Desktop reads the file at launch only.
Connecting SocialHandoff
SocialHandoff runs an MCP server over stdio (npx socialhandoff-mcp) and streamable HTTP at /mcp. The app shows ready-made snippets for Claude Desktop, Cursor, and ChatGPT when you mint an agent key. Each key is scoped to specific networks and permissions, and an agent can never approve its own draft. See Claude Desktop setup, Cursor setup, VS Code setup, or read what an MCP server is.