<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[PickAPlugin]]></title><description><![CDATA[PickAPlugin]]></description><link>https://pickaplugin.hashnode.dev</link><generator>RSS for Node</generator><lastBuildDate>Thu, 05 Nov 2026 05:09:32 GMT</lastBuildDate><atom:link href="https://pickaplugin.hashnode.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[How I vet a Codex plugin or MCP server in about two minutes]]></title><description><![CDATA[Plugins and MCP servers are easy to install, and that's the problem. A plugin can bundle hooks and MCP servers, and both run code on your machine. Nobody…]]></description><link>https://pickaplugin.hashnode.dev/how-i-vet-a-codex-plugin-or-mcp-server-in-about-two-minutes</link><guid isPermaLink="true">https://pickaplugin.hashnode.dev/how-i-vet-a-codex-plugin-or-mcp-server-in-about-two-minutes</guid><category><![CDATA[AI]]></category><category><![CDATA[mcp]]></category><category><![CDATA[Security]]></category><category><![CDATA[codex]]></category><dc:creator><![CDATA[PickAPlugin]]></dc:creator><pubDate>Wed, 04 Nov 2026 22:26:10 GMT</pubDate><content:encoded><![CDATA[<p>Plugins and MCP servers are easy to install, and that's the problem. A plugin can bundle hooks and MCP servers, and both run code on your machine. Nobody audits every community plugin (we don't either), so here's the quick check I run before installing anything.</p>
<p><em>Disclosure: I run <a href="https://pickaplugin.com">PickAPlugin</a>, an independent, hand-sorted catalog of ChatGPT and Codex plugins. This checklist is adapted from our guide, and it works no matter where you found the plugin.</em></p>
<h2>1. Is it alive?</h2>
<p>Look at the last commit, the open issues, and whether the repo is archived. A plugin that hasn't been touched in a long time may still work, but you'll be on your own when something in the host app changes.</p>
<h2>2. What does it actually run?</h2>
<p>Open <code>.mcp.json</code> and any <code>hooks.json</code> before you install. These are the parts that execute:</p>
<ul>
<li><strong>MCP servers</strong> start a process (often <code>npx</code>, <code>uvx</code>, or a binary) that your agent talks to.</li>
<li><strong>Hooks</strong> run commands on events like tool calls or session start.</li>
</ul>
<p>If you can't tell what a command does, look it up before letting it run.</p>
<h2>3. What does it ask for?</h2>
<p>Tokens, filesystem access, network access. Then ask whether that matches what it says it does. A Markdown formatter that wants your GitHub token deserves a closer look.</p>
<p>I boil this down to three questions:</p>
<ol>
<li>What can it read?</li>
<li>What can it write or send?</li>
<li>Where does my data go?</li>
</ol>
<p>If the README can't answer those on one screen, I usually skip it.</p>
<h2>4. Who made it?</h2>
<p>A known company or a maintainer with a history of active projects is a better bet than a brand-new account with one repo. It's not proof of anything, just a signal.</p>
<h2>5. Is there a license?</h2>
<p>No license means you technically can't reuse the code. It also tells you how much thought went into publishing it.</p>
<h2>6. Is the manifest sane?</h2>
<p>Check <code>plugin.json</code> for absolute paths, hardcoded secrets, or fields pointing somewhere unexpected. Those are red flags. We built a free <a href="https://pickaplugin.com/tools/plugin-json-validator">plugin.json validator</a> that catches the common problems in the browser.</p>
<h2>What about official plugins?</h2>
<p>Plugins in the built-in directory are curated by OpenAI, which is a real signal. It's still worth knowing what you're connecting, especially anything that touches email, files, or deploys.</p>
<h2>The short version</h2>
<p>Alive, what it runs, what it asks for, who made it, license, manifest. Two minutes, and you'll skip most of the sketchy stuff. The full checklist lives at <a href="https://pickaplugin.com/guides/vet-a-plugin">pickaplugin.com/guides/vet-a-plugin</a>.</p>
<p>What's on your own checklist? I'd like to hear what I'm missing.</p>
]]></content:encoded></item><item><title><![CDATA[I moved my MCP servers from Claude to Codex. Here's the cheat sheet]]></title><description><![CDATA[Full disclosure up front: I run PickAPlugin, a free directory of ChatGPT and Codex plugins, and I built a small converter while doing this move myself. You…]]></description><link>https://pickaplugin.hashnode.dev/i-moved-my-mcp-servers-from-claude-to-codex-here-s-the-cheat-sheet</link><guid isPermaLink="true">https://pickaplugin.hashnode.dev/i-moved-my-mcp-servers-from-claude-to-codex-here-s-the-cheat-sheet</guid><category><![CDATA[AI]]></category><category><![CDATA[mcp]]></category><category><![CDATA[codex]]></category><dc:creator><![CDATA[PickAPlugin]]></dc:creator><pubDate>Mon, 02 Nov 2026 22:22:25 GMT</pubDate><content:encoded><![CDATA[<p>Full disclosure up front: I run <a href="https://pickaplugin.com">PickAPlugin</a>, 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.</p>
<h2>Same servers, different wrapper</h2>
<p>Claude Desktop and Cursor keep MCP servers in JSON. Codex keeps them in TOML, in <code>~/.codex/config.toml</code> (or <code>.codex/config.toml</code> inside a trusted project). The servers themselves don't change at all. Only the config format does.</p>
<p>Here's a server in Claude's JSON:</p>
<pre><code class="language-json">{"mcpServers": {
  "context7": {
    "command": "npx",
    "args": ["-y", "@upstash/context7-mcp"]
  }
}}
</code></pre>
<p>And the same server in Codex's TOML:</p>
<pre><code class="language-toml">[mcp_servers.context7]
command = "npx"
args = ["-y", "@upstash/context7-mcp"]
</code></pre>
<p>Each server becomes its own <code>[mcp_servers.NAME]</code> table. The CLI and the IDE extension both read the same file.</p>
<h2>Things that bit me</h2>
<ul>
<li><strong><code>env</code> becomes an inline table.</strong> So <code>"env": {"API_KEY": "..."}</code> turns into <code>env = { API_KEY = "..." }</code>.</li>
<li><strong>Remote servers use <code>url</code>.</strong> Put any headers in <code>http_headers</code>.</li>
<li><strong>Keep tokens out of the file.</strong> For remote servers, <code>bearer_token_env_var</code> points Codex at an environment variable instead of pasting the token into <code>config.toml</code>.</li>
<li><strong>You don't have to touch the server.</strong> Local stdio servers run the same command everywhere.</li>
</ul>
<h2>Or skip the file and use the CLI</h2>
<pre><code class="language-bash">codex mcp add context7 -- npx -y @upstash/context7-mcp
codex mcp list
</code></pre>
<h2>Where the old config lives</h2>
<ul>
<li>macOS: <code>~/Library/Application Support/Claude/claude_desktop_config.json</code></li>
<li>Windows: <code>%APPDATA%\Claude\claude_desktop_config.json</code></li>
</ul>
<h2>If you have a lot of them</h2>
<p>Converting one or two by hand is fine. If you've got ten, I put a paste-and-convert page here: <a href="https://pickaplugin.com/tools/mcp-config-converter">MCP config converter</a>. It runs in your browser and nothing gets uploaded. It goes the other way too, TOML back to JSON.</p>
<p>The longer version of this guide is on <a href="https://pickaplugin.com/guides/convert-mcp-config-claude-to-codex">pickaplugin.com</a>.</p>
]]></content:encoded></item><item><title><![CDATA[Your Codex plugin isn't showing up? Check these 5 things in plugin.json]]></title><description><![CDATA[(Full disclosure: I run pickaplugin.com, a directory of these plugins. I've read a few hundred manifests by now.) Free in-browser checker if you want it:]]></description><link>https://pickaplugin.hashnode.dev/your-codex-plugin-isn-t-showing-up-check-these-5-things-in-plugin-json</link><guid isPermaLink="true">https://pickaplugin.hashnode.dev/your-codex-plugin-isn-t-showing-up-check-these-5-things-in-plugin-json</guid><category><![CDATA[AI]]></category><category><![CDATA[openai]]></category><category><![CDATA[codex]]></category><category><![CDATA[mcp]]></category><dc:creator><![CDATA[PickAPlugin]]></dc:creator><pubDate>Wed, 28 Oct 2026 18:45:29 GMT</pubDate><content:encoded><![CDATA[<p>(Full disclosure: I run pickaplugin.com, a directory of these plugins. I've read a few hundred manifests by now.)</p>
<ol>
<li><code>name</code> has to be kebab-case. <code>My Plugin</code> won't work, <code>my-plugin</code> will.</li>
<li>Only <code>plugin.json</code> goes in <code>.codex-plugin/</code>. Skills, <code>.mcp.json</code> and hooks go at the plugin root.</li>
<li>Paths start with <code>./</code>. No <code>/Users/you/...</code>, no <code>..</code>.</li>
<li>In a marketplace.json, every entry needs a <code>source</code> (and you'll want a <code>policy</code>).</li>
<li>When you add a repo with <code>codex plugin marketplace add</code>, give it the repo, not the raw marketplace.json URL. Otherwise you get a 404.</li>
</ol>
<p>Free in-browser checker if you want it: <a href="https://pickaplugin.com/tools/plugin-json-validator">https://pickaplugin.com/tools/plugin-json-validator</a></p>
]]></content:encoded></item></channel></rss>