Tool

MCP config generator and validator

Validate an existing MCP config or generate a correct one for Claude Desktop, Claude Code, Cursor, VS Code, Devin/Windsurf, Gemini CLI, Zed or Codex — entirely in your browser.

Validate

Processing: entirely in this browser tab — nothing is sent or stored. Do not paste real keys or credentials — sample data is fictional.

    Config file per client

    ClientRoot keyFile location
    Claude Desktop mcpServers macOS: ~/Library/Application Support/Claude/claude_desktop_config.json · Windows: %APPDATA%\Claude\claude_desktop_config.json
    Claude Code mcpServers project: .mcp.json at repo root · user: ~/.claude.json
    Cursor mcpServers global: ~/.cursor/mcp.json · project: .cursor/mcp.json
    VS Code servers workspace: .vscode/mcp.json · user: ~/Library/Application Support/Code/User/mcp.json (macOS)
    Devin / Windsurf mcpServers macOS/Linux: ~/.config/devin/mcp_config.json · Windows: %APPDATA%\devin\mcp_config.json · legacy Windsurf: ~/.codeium/windsurf/mcp_config.json
    Gemini CLI mcpServers global: ~/.gemini/settings.json · project: .gemini/settings.json
    Zed context_servers context_servers key inside ~/.config/zed/settings.json
    Codex mcp_servers (TOML) ~/.codex/config.toml (TOML, not JSON)

    What the validator checks

    First, real syntax — JSON configs are checked for trailing commas, comments and single quotes with their position; when Codex is selected the same pane parses TOML instead and reports the offending line. Then structure: the root object must hold the key your client actually reads (mcpServers for most, servers for VS Code, context_servers for Zed, mcp_servers for Codex), and each server needs either command (local stdio) or url (remote) — never both, never neither.

    Field types are verified too: args as a list of strings, env and headers as key/value objects, transport values inside the supported set. Entries that look like hardcoded secrets get flagged so they end up in env references instead of committed files. Nothing is sent anywhere — the check runs in this tab.

    FAQ

    Why does the same JSON work in Cursor but not VS Code?

    The top-level key differs. Claude Desktop, Cursor, Claude Code, Gemini CLI and Devin/Windsurf all read mcpServers; VS Code reads servers; Zed reads context_servers; Codex does not read JSON at all — it wants TOML. A config that silently does nothing is usually a wrong root key.

    What is the difference between command and url servers?

    command launches a local stdio process (npx, uvx, a binary path) and talks over stdin/stdout; url connects to a remote server over HTTP or SSE. A server entry must have exactly one of them — both or neither is invalid.

    Where should API keys go?

    Into the server's env object, not into the args list, and preferably as an environment variable the client expands rather than a hardcoded secret — this validator flags values that look like live keys. Never commit a filled config to a shared repo.

    I edited the file but the tools do not appear — now what?

    Fully quit and reopen the client (the menu-bar process keeps running after you close the window), then check the client's MCP log. For stdio servers, run the command yourself in a terminal first — most 'broken MCP' cases are a command that fails outside the client too.