Skip to content
Salyro
Tool

MCP config converter

Convert MCP server settings between Claude Desktop, Claude Code's .mcp.json and ~/.claude.json, and claude mcp add-json commands, with credentials moved out.

What it does

Paste the MCP server settings written for one client, and get them written for another:

  • Claude Desktop: claude_desktop_config.json;
  • Claude Code, project scope: .mcp.json at the root of your project, shared through version control;
  • Claude Code, user scope: the top level of ~/.claude.json;
  • Claude Code commands: one claude mcp add-json command per server, quoted for a shell.

Everything that does not carry over is listed: a field the target does not take, a name it would reject, a remote server where support is not documented.

This is about your MCP client, Claude Code or Claude Desktop, and the servers it starts or connects to. It is not Salyro's MCP Expose, where a Salyro gateway is the server your client connects to, and not MCP Connect, where a gateway is the client of an outside server.

Credentials

A configuration often carries an API key in env or a token in a header, and the file is then copied, shared and committed.

  • On the page, credentials are masked. A switch shows them.
  • "Move credentials to $" writes each one as a reference, such as "GITHUB_TOKEN": "${GITHUB_TOKEN}" or "Authorization": "Bearer ${AUTHORIZATION}", and lists the variables to set. Claude Code expands ${VAR} and ${VAR:-default} in command, args, env, url and headers. No page read here says Claude Desktop expands them, so converting to it with this on comes with a warning.
  • A link never holds a credential. The page keeps what you pasted. The address and any shared link hold only the file's structure: the server names, transports, commands, flags and package names, and each address's scheme and host. Every value of env and headers becomes a ${VARIABLE}, and every other value a placeholder. A flag keeps its name, never its value. A name with a slash is kept only as a scoped package (@scope/name) or an image with its registry's host (ghcr.io/…), and a tag other than latest or a version such as 3.12 becomes ‹tag›. Only the servers are kept, not the rest of a ~/.claude.json. Text that is not JSON is not put in a link at all, and when anything credential-shaped would still be there, the link holds no file. "Share settings only" leaves the file out altogether.

A credential is recognised in three ways:

  • Its shape. The tool recognises what Salyro's own log redactor recognises, for example a sk-…, ghp_…, AKIA… or Bearer … value, and adds github_pat_… and sk_live_… keys.
  • Its name. Any value under a name such as API_KEY, TOKEN, DB_PASS, PASSWORD or Authorization counts. So does a number under one of those names.
  • Its place. The value after a flag such as --api-key, a --token= argument, a URL's api_key= parameter, or a user name and password in a URL.

A suggested variable never uses a name that Claude Code reads as empty in a remote server's headers, such as NPM_TOKEN or an ANTHROPIC_ name.

How it converts

  • Transports: stdio (a command to start), http, sse and ws. streamable-http is read as http. Every entry is written with its type: Claude Code reads an entry with a url and no type as a stdio server, and skips it.
  • Names: Claude Code's commands accept only letters, numbers, hyphens and underscores. Claude Desktop accepts any name, so a name like local files becomes local-files, and the tool says so.
  • Claude Code's own fields, such as headersHelper, timeout and alwaysLoad, are kept. Converting to Claude Desktop keeps them too, with a note, because no page read here says whether Claude Desktop reads them.

What it does not know

  • A credential nothing marks. One with no known shape and no credential's name, such as a random segment in an address's path, is not recognised on the page. A link never holds it, because a link keeps only an address's scheme and host.
  • Cursor, VS Code and Windsurf. Their pages could not be read when this tool was built, so their formats are unknown, and not guessed.
  • Where Claude Desktop's file lives on each OS. The page naming the location could not be read.
  • Whether Claude Desktop's file takes remote (url) servers. Anthropic's pages show it with stdio entries only. A remote entry is written in the shape Claude Code reads, with a warning.
  • Whether a server works. The tool reads the configuration. It does not start or reach any server.

Sources

The file names, the mcpServers key, the transports, the naming rules and ${VAR} expansion quote Claude Code's MCP page on code.claude.com. It is also where Anthropic describes Claude Desktop's file. Every fact is recorded as Reference Data with the date it was read.

Where the numbers come from

  • Facts about models and providers that are not in that catalogue carry their own source and the date they were checked, and are shown as unknown where no reliable source exists.