Skip to content

MCP Config Generator

Describe an MCP server, or paste a config you already have, to get it for Claude Desktop, Claude Code, Cursor, VS Code, Devin (formerly Windsurf) and Codex: the file to edit, the JSON or TOML, the command that adds it, and your existing file with it added.

Runs locally in your browser

Server

Transport

One per line.

Environment variables

None.

Optional. Only VS Code and Codex take one.

Config

File

~/Library/Application Support/Claude/claude_desktop_config.json

JSON

{
  "mcpServers": {
    "filesystem": {
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-filesystem",
        "/Users/me/projects"
      ]
    }
  }
}
  • Open the file from Settings > Developer > Edit Config, then quit and restart Claude Desktop.

Format checked against the Claude Desktop documentation(opens in a new tab) on 2026-10-30.

What the MCP config generator does

An MCP server gives an AI client tools: a database, a browser, a ticket system. Each client lists its servers in its own file and format, so a server's README rarely matches yours. Describe the server once, and the generator writes it for Claude Desktop, Claude Code, Cursor, VS Code, Devin (formerly Windsurf) and OpenAI Codex: the file to edit on your system, the JSON or TOML to add to it, and the command that adds it, where the client has one.

Already set up servers in one client? Paste its config under Convert a config to get the same servers for every other client. Under Add to your existing file, paste the file you have, and you get it back with the servers added and nothing else changed.

How to add an MCP server to your AI client

  1. Enter a name for the server: letters, numbers, - and _.
  2. For a server that runs on your computer, choose Local (stdio) and enter the command from its README, such as npx, with each argument on its own line. For a hosted server, choose Remote (HTTP) and enter its URL.
  3. Add the environment variables or headers the server needs, such as an API key.
  4. Choose your system and whether the server is for all your projects or one.
  5. Open your client's tab. Run its command, or paste the file shown into Add to your existing file and save what comes back. Then restart the client or reload its MCP servers.
  6. To move servers from one client to another, open Convert a config and paste the first client's config instead of filling in the form.

Examples

A local server for Claude Desktop

Input

{"name": "filesystem", "command": "npx", "args": ["-y", "@modelcontextprotocol/server-filesystem", "/Users/me/projects"]}

Output

{
  "mcpServers": {
    "filesystem": {
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-filesystem",
        "/Users/me/projects"
      ]
    }
  }
}
A Cursor config converted for Codex, with its key still read from the environment

Input

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

Output

[mcp_servers.fetch]
command = "uvx"
args = [ "mcp-server-fetch" ]

[mcp_servers.github]
command = "npx"
args = [ "-y", "@modelcontextprotocol/server-github" ]
env_vars = [ "GITHUB_PERSONAL_ACCESS_TOKEN" ]
A remote server with a token, for a VS Code project

Input

{"name": "tickets", "url": "https://mcp.example.com/mcp", "headers": {"Authorization": "Bearer your-token"}}

Output

{
  "inputs": [
    {
      "type": "promptString",
      "id": "tickets-token",
      "description": "TICKETS_TOKEN for tickets",
      "password": true
    }
  ],
  "servers": {
    "tickets": {
      "type": "http",
      "url": "https://mcp.example.com/mcp",
      "headers": {
        "Authorization": "Bearer ${input:tickets-token}"
      }
    }
  }
}

Where each client keeps its MCP servers

Where each client keeps its MCP servers
ClientFile for all projectsProject fileServers under
Claude DesktopmacOS: ~/Library/Application Support/Claude/claude_desktop_config.jsonWindows: %APPDATA%\Claude\claude_desktop_config.jsonLinux: ~/.config/Claude/claude_desktop_config.jsonNonemcpServers
Claude CodemacOS: ~/.claude.jsonWindows: %USERPROFILE%\.claude.jsonLinux: ~/.claude.json.mcp.jsonmcpServers
CursormacOS: ~/.cursor/mcp.jsonWindows: %USERPROFILE%\.cursor\mcp.jsonLinux: ~/.cursor/mcp.json.cursor/mcp.jsonmcpServers
VS CodemacOS: ~/Library/Application Support/Code/User/mcp.jsonWindows: %APPDATA%\Code\User\mcp.jsonLinux: ~/.config/Code/User/mcp.json.vscode/mcp.jsonservers
Devin Desktop (formerly Windsurf)macOS: ~/.config/devin/mcp_config.jsonWindows: %APPDATA%\devin\mcp_config.jsonLinux: ~/.config/devin/mcp_config.json.devin/mcp_config.jsonmcpServers
OpenAI CodexmacOS: ~/.codex/config.tomlWindows: %USERPROFILE%\.codex\config.tomlLinux: ~/.codex/config.toml.codex/config.tomlmcp_servers

A file for all projects applies everywhere you use the client; a project file sits in the project's folder and can be committed, so your team gets the server too. Claude Code keeps servers for all projects in ~/.claude.json together with the rest of its state: add those with claude mcp add rather than by editing the file. Codex's config.toml holds its other settings too, so add the table to it instead of replacing the file.

How the formats differ

Four of the clients list servers under mcpServers, each server by its name. VS Code uses servers, next to an optional inputs list for secrets, and Codex uses a TOML table per server, [mcp_servers.<name>], in config.toml.

The type field differs too. VS Code needs it on every server: stdio or http. Claude Code reads a server without type as a local one, so a remote server there needs "type": "http". Cursor and Devin tell the two apart by whether the entry has a command or a url, and Codex by the table's fields.

On Windows, a path in JSON has each backslash written twice, as in "C:\\Users\\me"; the generator does that for you, and quotes TOML the same way.

Local and remote servers

A local server runs on your computer: the client starts the command with its arguments and talks to it through standard input and output (stdio). Servers you install from npm, PyPI or a container image work this way, started with npx, uvx or docker. A remote server is already running somewhere else and the client connects to its URL over HTTP, the transport MCP calls Streamable HTTP.

Claude Desktop's config file only starts local servers. Add a remote server there under Customize > Connectors as a custom connector instead; Anthropic connects to it from its cloud, so the server must be reachable from the internet.

Keeping secrets out of the config

A config file is easy to commit or share by mistake, so a token written into it can leak. With Secrets set to Placeholders, the generator writes each client's way of reading a value from elsewhere:

  • Claude Code reads ${NAME} from the environment it starts in, and ${NAME:-default} falls back to a default.
  • Cursor reads ${env:NAME}.
  • VS Code asks for the value the first time the server starts, through an entry in inputs, and keeps it in its secret storage.
  • Codex forwards variables to a local server with env_vars, and reads a token for a remote one with bearer_token_env_var or env_http_headers.
  • Claude Desktop has no placeholder, and Devin recommends keeping keys in .devin/mcp_config.local.json, which stays out of version control. The generator writes the value as entered and warns you.

Converting a config to another client

Under Convert a config, the generator reads a pasted config as JSON, JSON with comments (VS Code's files have them) or TOML, and tells the client from the format and the key the servers are under: servers is VS Code, [mcp_servers.<name>] tables are Codex, and mcpServers is one of the other four, which share a format. Choose the client under From if the guess is wrong. Each server is then written for every client the same way as one from the form.

Placeholders change with the client: ${GITHUB_TOKEN} in Claude Code becomes ${env:GITHUB_TOKEN} for Cursor and VS Code and env_vars in Codex, and a VS Code input becomes an environment variable named after it. Claude Desktop and Devin replace none, and editor variables such as ${workspaceFolder} only work in Cursor and VS Code; the generator warns where a client would pass the text as it is. A default such as ${API_URL:-https://api.example.com} exists only in Claude Code.

The conversion carries what every client understands: the command, arguments, environment variables, working directory, URL and headers. Settings of one client, such as Codex's startup_timeout_sec, an enabled_tools list or Devin's disabled, are listed in the problems instead of being dropped silently. A server on the older SSE transport is written as a remote one, with a reminder to check its Streamable HTTP endpoint, often /mcp rather than /sse.

Adding a server to an existing config

Add a new server next to the others, under the same mcpServers, servers or mcp_servers, rather than replacing the file. Paste the file under Add to your existing file in your client's tab and the generator does that for you: the server goes after the last one, indented the way your file is, and other servers, comments and settings stay exactly as they were. Codex gets a new table at the end of config.toml, and VS Code gets the input prompts its secrets need.

Names must be unique within a file, as a second entry with the same name replaces or clashes with the first, depending on the client. When a name is taken, choose under If a name is taken whether to rename the new server, replace the old one or keep it. Check the result with the MCP Config & Schema Validator before you restart the client, and the JSON Formatter shows where a comma or brace went missing in a file the generator can't read.

Options

Options
OptionValuesDefaultWhen to change it
Client tabClaude Desktop, Claude Code, Cursor, VS Code, Devin (Windsurf), CodexClaude DesktopThe tab that opens first, remembered from your last visit.
SystemmacOS, Windows, LinuxmacOSThe system the client runs on: it decides the file's path and how the command is quoted, for zsh and bash or for PowerShell.
ScopeAll projects, This projectAll projectsThis project for a file in the project's folder that you can commit; Claude Desktop has one file for everything.
SecretsPlaceholders, As enteredPlaceholdersAs entered to write keys and tokens into the file, for a quick local test you won't share.

Common errors and fixes

Common errors and how to fix them
CodeWhat it meansHow to fix it
MCP_INVALID_SERVER_NAMEErrorThe name is empty, has a space or another character clients don't all accept, or is over 64 characters.Use letters, numbers, - and _, as in the suggested name.
MCP_MISSING_COMMAND_OR_URLErrorA local server has no command, or a remote one has no URL.Enter the command from the server's README, or the endpoint URL from its documentation.
MCP_INVALID_URLErrorThe URL can't be read, or doesn't start with http:// or https://.Copy the endpoint again, including https://.
MCP_INVALID_FIELDErrorAn environment variable or header has an invalid or repeated name, or a value with a line break.Use letters, numbers and _ for variables, letters, numbers and - for headers, and each name once.
MCP_TRANSPORT_UNSUPPORTEDWarningThe client's config file doesn't take this kind of server: Claude Desktop's file takes no remote servers.Follow the client's tab: in Claude Desktop, add a remote server as a custom connector.
MCP_PLAINTEXT_SECRETWarningA value looks like a key or token, and a client will store it as plain text.Use Placeholders, keep the file private, or pass the key in an environment variable instead of an argument.
MCP_COMMAND_HAS_ARGSWarningThe command field holds a whole command line, such as npx -y some-package.Keep only the program in Command and put each argument on its own line under Arguments.
MCP_NPX_MISSING_YWarningnpx would ask before downloading the package, and the client can't answer.Add -y as the first argument.
MCP_INSECURE_URLWarningThe URL uses http:// for a server on another computer.Use https://, unless the server is on a network you trust.
MCP_IMPORT_UNRECOGNIZEDErrorThe pasted config has none of the keys the clients list servers under, or not the one of the client chosen under From.Paste the whole config file, or choose the client it is for under From.
MCP_COMMAND_AND_URLErrorAn imported server has both a command and a URL, so it is neither clearly local nor remote.Keep the command for a local server or the URL for a remote one.
MCP_ARGS_NOT_STRINGSErrorAn imported server's args is not a list of strings, such as a number left unquoted.Quote each argument, as in ["--port", "8080"].
MCP_ENV_NOT_STRINGErrorAn environment variable's value is an object or a list.Write the value as a string.
MCP_FIELD_DROPPEDWarningAn imported server has a setting other clients don't share, such as a timeout or a list of allowed tools.Add it by hand in the other client, where it has one.
MCP_PLACEHOLDER_UNSUPPORTEDWarningA value reads a variable or input in a syntax a client doesn't replace, or with a default it doesn't support.Write the value itself for those clients, or keep the server out of their config.
MCP_SSE_DEPRECATEDWarningAn imported server uses the SSE transport, which MCP replaced with Streamable HTTP.Check the server's documentation for its Streamable HTTP endpoint, often /mcp.
MCP_TOML_SYNTAXErrorThe Codex config can't be read as TOML, or adding the server would break it, as with an inline mcp_servers table.Fix the line shown, or write each server as a [mcp_servers.<name>] table.
MCP_TOML_NUMBER_RANGEErrorA TOML integer is larger than 64 bits allow, so Codex refuses the file.Use a smaller number, or a string for an ID.
MCP_DUPLICATE_SERVERErrorYour file already has a server with the new server's name.Choose under If a name is taken: rename the new server, replace the old one or keep it.
JSON_DUPLICATE_KEYErrorThe pasted JSON has the same key twice in one object, such as one server name written twice.Remove the entry you don't want; clients keep only one of them.

Privacy

MCP Config Generator runs entirely in your browser. What you type, paste or open is processed on your device: it is not sent to Toolzami, and Toolzami does not store it. Only the options you choose are remembered, in this browser.

Frequently asked questions

Where is the Claude Desktop config file?

On macOS at ~/Library/Application Support/Claude/claude_desktop_config.json, on Windows at %APPDATA%\Claude\claude_desktop_config.json and on Linux at ~/.config/Claude/claude_desktop_config.json. Settings > Developer > Edit Config opens it. Quit and restart Claude Desktop after a change.

How do I keep API keys out of an MCP config file?

Use the client's placeholder, which this page writes for you: ${NAME} in Claude Code, ${env:NAME} in Cursor, an input prompt in VS Code and env_vars in Codex read the key from your environment or a secure prompt. Claude Desktop and Devin have none, so keep their files private.

Can I move my MCP servers from Claude Desktop to Cursor, VS Code or Codex?

Yes. Paste claude_desktop_config.json under Convert a config and open the other client's tab: its config holds the same servers in that client's format, with keys moved to placeholders. Paste the other client's file under Add to your existing file to get it back with the servers added.

Why does my remote MCP server not work in claude_desktop_config.json?

That file starts local servers only. Add a remote server under Customize > Connectors as a custom connector instead. Anthropic connects to it from its cloud, so the server must be reachable from the internet, not only from your computer.

Last updated