<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: PickAPlugin</title>
    <description>The latest articles on DEV Community by PickAPlugin (@pickaplugin).</description>
    <link>https://dev.to/pickaplugin</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4210311%2Fe1443f84-1a89-4257-8e9c-c8b6dd3da110.png</url>
      <title>DEV Community: PickAPlugin</title>
      <link>https://dev.to/pickaplugin</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/pickaplugin"/>
    <language>en</language>
    <item>
      <title>I moved my MCP servers from Claude to Codex. Here's the cheat sheet</title>
      <dc:creator>PickAPlugin</dc:creator>
      <pubDate>Mon, 02 Nov 2026 22:24:09 +0000</pubDate>
      <link>https://dev.to/pickaplugin/i-moved-my-mcp-servers-from-claude-to-codex-heres-the-cheat-sheet-4p9k</link>
      <guid>https://dev.to/pickaplugin/i-moved-my-mcp-servers-from-claude-to-codex-heres-the-cheat-sheet-4p9k</guid>
      <description>&lt;p&gt;Full disclosure up front: I run &lt;a href="https://pickaplugin.com" rel="noopener noreferrer"&gt;PickAPlugin&lt;/a&gt;, a free directory of ChatGPT and Codex plugins, and I built a small converter while doing this move myself. You don't need it, though. Everything below works by hand.&lt;/p&gt;

&lt;h2&gt;
  
  
  Same servers, different wrapper
&lt;/h2&gt;

&lt;p&gt;Claude Desktop and Cursor keep MCP servers in JSON. Codex keeps them in TOML, in &lt;code&gt;~/.codex/config.toml&lt;/code&gt; (or &lt;code&gt;.codex/config.toml&lt;/code&gt; inside a trusted project). The servers themselves don't change at all. Only the config format does.&lt;/p&gt;

&lt;p&gt;Here's a server in Claude's JSON:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"context7"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"npx"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"-y"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"@upstash/context7-mcp"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And the same server in Codex's TOML:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight toml"&gt;&lt;code&gt;&lt;span class="k"&gt;[&lt;/span&gt;&lt;span class="n"&gt;mcp_servers&lt;/span&gt;&lt;span class="k"&gt;.&lt;/span&gt;&lt;span class="n"&gt;context7&lt;/span&gt;&lt;span class="k"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;command&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;"npx"&lt;/span&gt;
&lt;span class="n"&gt;args&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;"-y"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"@upstash/context7-mcp"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each server becomes its own &lt;code&gt;[mcp_servers.NAME]&lt;/code&gt; table. The CLI and the IDE extension both read the same file.&lt;/p&gt;

&lt;h2&gt;
  
  
  Things that bit me
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;env&lt;/code&gt; becomes an inline table.&lt;/strong&gt; So &lt;code&gt;"env": {"API_KEY": "..."}&lt;/code&gt; turns into &lt;code&gt;env = { API_KEY = "..." }&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Remote servers use &lt;code&gt;url&lt;/code&gt;.&lt;/strong&gt; Put any headers in &lt;code&gt;http_headers&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Keep tokens out of the file.&lt;/strong&gt; For remote servers, &lt;code&gt;bearer_token_env_var&lt;/code&gt; points Codex at an environment variable instead of pasting the token into &lt;code&gt;config.toml&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You don't have to touch the server.&lt;/strong&gt; Local stdio servers run the same command everywhere.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Or skip the file and use the CLI
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;codex mcp add context7 &lt;span class="nt"&gt;--&lt;/span&gt; npx &lt;span class="nt"&gt;-y&lt;/span&gt; @upstash/context7-mcp
codex mcp list
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Where the old config lives
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;macOS: &lt;code&gt;~/Library/Application Support/Claude/claude_desktop_config.json&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Windows: &lt;code&gt;%APPDATA%\Claude\claude_desktop_config.json&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  If you have a lot of them
&lt;/h2&gt;

&lt;p&gt;Converting one or two by hand is fine. If you've got ten, I put a paste-and-convert page here: &lt;a href="https://pickaplugin.com/tools/mcp-config-converter" rel="noopener noreferrer"&gt;MCP config converter&lt;/a&gt;. It runs in your browser and nothing gets uploaded. It goes the other way too, TOML back to JSON.&lt;/p&gt;

&lt;p&gt;The longer version of this guide is on &lt;a href="https://pickaplugin.com/guides/convert-mcp-config-claude-to-codex" rel="noopener noreferrer"&gt;pickaplugin.com&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>mcp</category>
      <category>codex</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
