MCP Config Generator & Validator

Build the MCP server entry for Claude Code, Claude Desktop, Cursor, VS Code or Devin Desktop — or find what's wrong with yours

.mcp.json — Project root (shared with your team via git). VS Code's Copilot agent also reads this file.

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

Or add it from the terminal:

claude mcp add --transport stdio --env 'GITHUB_PERSONAL_ACCESS_TOKEN=${GITHUB_PERSONAL_ACCESS_TOKEN}' github -- npx -y @modelcontextprotocol/server-github
  • • The command adds the server for you only; add --scope project to write it to .mcp.json for everyone.
  • • Variables like ${NAME} are read from your shell environment when Claude Code starts.
  • • Already have servers? Copy only the "github" entry into your existing mcpServers object.

Was the MCP Config Generator & Validator helpful?

Get new tools in your inbox

About once a month, when new tools ship. No spam, one-click unsubscribe.

We store only your email to send these updates. Privacy

About this tool

The MCP Config Generator writes the Model Context Protocol server entry for the AI client you use — and the validator tells you exactly why a config won't load. Every client reads almost the same JSON, but the differences are what break things: Claude Code wants "type": "http" on remote servers (without it, the entry is read as a local command and fails), VS Code uses a top-level "servers" key and "inputs" for secrets, Cursor and Devin Desktop (formerly Windsurf) interpolate ${env:NAME}, Claude Code uses ${NAME}, and Claude Desktop's config file only launches local servers at all. Fill in the server once — a local command such as npx or uvx, or a remote HTTP/SSE URL — and get the right file for each client, plus the claude mcp add command. Tokens are moved out of the file into each client's variable syntax, so the config can be committed safely. The validator catches the classic failures: trailing commas, unescaped Windows backslashes, a whole command line stuffed into "command", args given as a string, the wrong top-level key, variable syntax from another client, and API keys sitting in plain text. Everything runs in your browser — nothing you type is sent anywhere or saved.

When to use it

  • →Adding a new MCP server (GitHub, Linear, a database, your own) to Claude Code, Cursor or VS Code without hand-editing JSON
  • →Finding why a server shows as failed or never appears in the client
  • →Converting a server snippet from a README written for Claude Desktop into another client's format
  • →Sharing a project .mcp.json with your team without committing API keys
  • →Checking a config before restarting the client, instead of after

Tips

  • ◆In Claude Code, run claude mcp list to see which servers connected; claude mcp get <name> shows the details for one.
  • ◆Put only the program in "command" (npx) and everything else in "args" (["-y", "@scope/server"]) — clients don't split a command line on spaces.
  • ◆On Windows, if a server fails with spawn npx ENOENT, use "command": "cmd" with "/c", "npx" as the first args.
  • ◆A single .mcp.json in the project root is read by both Claude Code and VS Code's Copilot agent.

Frequently asked questions

Where does each client keep its MCP config?

Claude Code: .mcp.json in the project (or claude mcp add --scope user for all projects). Claude Desktop: claude_desktop_config.json in ~/Library/Application Support/Claude on macOS or %APPDATA%\Claude on Windows (Settings → Developer → Edit Config opens it). Cursor: .cursor/mcp.json or ~/.cursor/mcp.json. VS Code: .vscode/mcp.json or the user configuration. Devin Desktop (formerly Windsurf): ~/.config/devin/mcp_config.json, or %APPDATA%\devin\ on Windows.

How do I add a remote MCP server to Claude Desktop?

Use Settings → Connectors → Add custom connector — the config file itself only starts local processes. If you need it in the file, the generator bridges the remote server through the mcp-remote package (npx -y mcp-remote <url>), which runs locally and forwards to the remote server.

Why does my remote server work in Cursor but not in Claude Code?

Cursor treats any entry with a url as remote. Claude Code reads an entry without "type" as a local (stdio) server, so a url-only entry is a configuration error there. Add "type": "http" (or "sse" for older servers).

Is it safe to paste my config here?

The generator and validator run entirely in your browser; nothing is uploaded or stored, not even in local storage. The validator also warns you when a config contains a plain-text token, so you can move it to an environment variable before committing.

Related tools

ToolNinja