Large Language ModelsGenerate imagesGenerate videos

Codex Plugins vs MCP vs Skills: Which One Do You Need?

Codex offers three ways to extend an agent: skills that carry your process, MCP servers that reach live systems, and plugins that bundle both for a team. This article shows how each one looks on disk, what it costs in context, and how to choose between them.

Codex Plugins vs MCP vs Skills: Which One Do You Need?
Cristian Da Conceicao
Founder of Picasso IA

Open the Codex plugin browser and you will see skills, MCP servers and plugins listed side by side, as if they were three versions of the same thing. They are not. Mixing them up is how people end up writing a 400 line instruction file when they needed a ten line connector, or wiring up a server when a one page checklist would have done the job.

Here is the short version before the details. A skill teaches Codex how to do a job. An MCP server gives Codex live access to a tool or a data source. A plugin is the box that ships skills, servers and app connections together, so someone else can install them in one step. The rest of this article shows what each one looks like on disk, what it costs in context, where it breaks, and how to pick the right one for your own work.

The Short Answer

Low-angle photo of a steel wrench, a recipe binder and a sealed shipping crate on a maple workbench

Three objects on one workbench make the split easy to remember. The wrench is a tool you reach for. The binder tells you how to run a job. The crate is a bundle somebody packed so it can be handed to a colleague.

One Sentence Each

  • Skill: a folder with a SKILL.md file that tells Codex when and how to run a repeatable workflow.
  • MCP server: a running program that exposes tools and data to Codex through the Model Context Protocol.
  • Plugin: an installable package that can hold skills, MCP servers, app connections and hooks.

None of them replaces the others. A plugin is not a fourth kind of capability. It is packaging for the first two, plus app connections, with a version number attached.

The Kitchen Analogy

A skill is a recipe card: ordered steps, quantities and a description of what "done" looks like. An MCP server is an appliance wired into the wall: it does things the cook cannot do by hand, like blending or refrigerating. A plugin is the meal kit: the card, the ingredients and a note about which appliance you need, all in one box.

💡 Rule of thumb: if the problem is "Codex does not know our process," write a skill. If it is "Codex cannot reach that system," add an MCP server. If it is "teammates keep asking how I set this up," build a plugin.

What MCP Actually Does

Close-up of a technician's hands pushing a blue ethernet cable into a patch panel

The Model Context Protocol is an open standard, introduced by Anthropic in late 2024, that lets an AI client talk to outside tools through one common interface. Codex plays the client. The server is whatever you point it at: a GitHub connector, a database bridge, a documentation search, an image generator.

Live Access, Not Instructions

An MCP server answers one question: what can you do right now, and with what data? It lists tools with names, descriptions and input schemas. When Codex decides a tool fits the task, it calls the tool and reads the result. Nothing in the server says how your team prefers to use it. A database server will run any query you permit, but it will not tell Codex that nobody touches the billing tables on a Friday afternoon.

That gap is why servers and skills pair so well. The server supplies the reach. The skill supplies the judgment.

What the Config Looks Like

Codex stores MCP settings in ~/.codex/config.toml, with project scoped settings possible in .codex/config.toml. A local server that Codex starts itself (STDIO) looks like this:

[mcp_servers.docs]
command = "npx"
args = ["-y", "@upstash/context7-mcp"]

A remote server over streamable HTTP uses a URL instead:

[mcp_servers.figma]
url = "https://mcp.figma.com/mcp"
bearer_token_env_var = "FIGMA_OAUTH_TOKEN"

You can also run codex mcp add <name> -- <command> to write the entry for you, codex mcp list to see what is configured, and codex mcp login <server-name> to run OAuth for servers that need it.

A few settings deserve attention. startup_timeout_sec defaults to 10 seconds, which can be tight for a slow first npx download. tool_timeout_sec defaults to 60 seconds, which will cut off long jobs such as a video render. enabled_tools and disabled_tools let you trim a server down to the calls you actually want the agent to see.

The costs of MCP are real. Every connected server adds tool definitions the model has to carry, a process or a network hop that can fail, and a new trust boundary. A server that can write to your repository can also write something you did not intend.

What a Skill Actually Is

Overhead flat-lay of a procedure binder with handwritten recipe cards and a chef's hands

A Folder With a SKILL.md

A skill is a folder. Inside is a SKILL.md file that opens with a short YAML header, set between two fence lines at the top of the file. The header holds a name and a description:

name: release-notes
description: Use when the user asks for release notes or a changelog built from merged pull requests. Do not use for commit message drafts.

Below the header, the instructions are plain markdown:

1. List the pull requests merged since the last tag.
2. Group them under Added, Changed and Fixed.
3. Write one plain sentence per item.
4. Save the result to docs/releases/<version>.md.

The folder can also hold scripts, reference documents, templates and assets that the instructions point to. Codex looks for skills in .agents/skills inside the repository (the working directory, its parents and the repo root), in $HOME/.agents/skills for personal skills, in /etc/codex/skills for shared machine wide ones, and in the built-in set that ships with Codex.

Why Skills Cost Little Context

Macro photo of an antique card catalog with one brass handled drawer pulled halfway open

Skills use progressive disclosure. At the start of a session Codex sees only the list of skill names and descriptions, and that list is capped at about 2% of the context window (or 8,000 characters when the window size is unknown). The full SKILL.md loads only after a skill is selected. It works like a card catalog: you read the cards until you find the right drawer, then you pull the whole file.

The consequence is practical. You can keep dozens of skills installed without paying for all of them on every request. It also means the description line does the heavy lifting. A vague description such as "helps with docs" never triggers. A precise one that says when to use the skill and when to leave it alone triggers reliably.

Explicit and Implicit Triggers

There are two ways to run a skill. Explicit: type $release-notes in the Codex CLI or the IDE extension (ChatGPT uses @release-notes). Implicit: Codex picks the skill on its own when your request matches the description. An optional agents/openai.yaml file adjusts how the skill appears in the interface, its invocation policy and the tools it depends on.

💡 If a skill never fires on its own, rewrite the description before you rewrite the instructions. The description is the trigger.

What a Plugin Bundles

High-angle photo of hands packing an instruction card, a cable and a notebook into a kraft box

Plugin support reached Codex in March 2026, and the launch set of more than 20 plugins included Box, Figma, Linear, Notion, Sentry, Slack, Gmail and Hugging Face. The reason plugins exist is distribution. A skill can be copied into a folder and a server can be pasted into a config file, but handing both to ten teammates with matching versions is tedious and easy to get wrong.

The Package Layout

my-plugin/
  plugin.json
  mcp.json
  skills/
    release-notes/
      SKILL.md
  hooks/
  assets/
  scripts/

plugin.json at the root is the manifest, and .codex-plugin/plugin.json still works as a fallback. It holds the name in kebab case, a version, a description and author details. Skills sit in skills/<skill-name>/SKILL.md and are picked up from that folder without being declared. MCP servers go in mcp.json under mcpServers, with "type": "streamable-http" for remote endpoints. Hooks run commands at set points in the lifecycle.

To test locally, add an entry whose source.path points at your folder to a marketplace file at ~/.agents/plugins/marketplace.json or $REPO_ROOT/.agents/plugins/marketplace.json, then install it from the plugin directory. The @plugin-creator helper can scaffold the folder and the marketplace entry for you.

Installing and Mentioning Plugins

In the Codex CLI, run /plugins to open the plugin browser and install from the marketplaces you have configured. In the ChatGPT desktop app or on the web, open the Plugins tab, search, press the plus button and connect any outside service when prompted. After that you can ask in plain language ("Summarize unread Gmail threads from today") or type @ followed by the plugin name to call it explicitly.

A plugin also adds a manifest, a version to maintain and a marketplace entry. If you are the only person who uses the workflow, a skill in $HOME/.agents/skills and one block in config.toml do the same job with less ceremony.

💡 Codex documentation moves fast. File names and commands above follow OpenAI's pages for plugins, MCP and skills as of October 2026. Check them before you build.

Side by Side Comparison

Three colleagues around a walnut table comparing printed sheets beside a laptop

SkillMCP serverPlugin
What it isFolder with SKILL.mdRunning tool or data serviceInstallable package
Gives CodexA procedureLive reach and actionsBoth, plus app connections
Lives in.agents/skillsconfig.tomlplugin.json and mcp.json
LoadsName and description first, body on demandTool definitions at connect timeWhatever it bundles
Needs codeNoYes, or a hosted serverOnly if it bundles a server
Best forRepeatable team processSystems Codex cannot reachSharing a whole setup
Main riskVague description never triggersOver broad permissionsVersion drift, hidden bundled servers

Context Cost Compared

Skills are the cheapest of the three because only a short description sits in context until the skill is needed. An MCP server is heavier: its tool list is carried into the session whether or not the task uses it, so ten chatty servers can crowd out the actual work. A plugin inherits the cost of everything inside it.

One habit saves a lot of tokens. Before you add a server, ask whether a skill with a short script could do the same thing. Scripts inside a skill run only when the skill runs. A server stays connected the whole time.

Security Compared

Close-up of a hand at the lock of a gray steel tool cabinet in a workshop

A skill is text plus optional scripts, so its danger lives in whatever commands the instructions tell Codex to run. A server is a live process with its own credentials, which makes permissions the main concern. Trim it with enabled_tools and disabled_tools, and use default_tools_approval_mode to decide how much Codex may do without asking.

A plugin can bundle servers, skills and hooks all at once, so open the plugin.json, the mcp.json and the hooks folder before installing one from a stranger. Keep tokens in environment variables, the way bearer_token_env_var expects, and never in a file you commit.

Which One Do You Need?

Medium shot of a woman developer resting her chin on her hand while studying a laptop

Five Quick Scenarios

  1. "Every release needs the same changelog format." Write a skill. No outside system is involved, only a process.
  2. "Codex must read tickets from our tracker." Add an MCP server. Codex has no other way to reach that data.
  3. "Codex must read tickets and follow our triage rules." Use both: the server for access and a skill for the rules.
  4. "Ten teammates need the same setup, with matching versions." Build a plugin that bundles the skill and the server.
  5. "I want one tweak for today's task." Use neither. A line in the prompt or in your AGENTS.md file is enough.

When you are unsure, work upward from the smallest option. Start with a prompt. If you repeat it three times, turn it into a skill. If the skill needs a system Codex cannot reach, add a server. If other people need the same pair, wrap it in a plugin.

Three Common Mistakes

Putting process inside a server. Tool descriptions are for explaining what a tool does, not how your team works. Long policy text in a server bloats every session. Move it to a skill.

Rebuilding a connector with shell scripts. If a maintained MCP server already exists for the system you want, a skill full of curl commands will be slower to write and harder to keep working.

Packaging too early. A plugin with one author and one user is overhead. Wait until a second person asks for your setup.

A Worked Example With Images

Wide shot of a photographer's studio desk with a monitor, a camera and a pinned mood board

Picture a small marketing team that needs consistent blog photos. The three pieces split cleanly. The skill, call it brand-photos, holds the rules: 16:9 for article images, natural light, no text inside the picture, a filename pattern and who approves the final set. The MCP server does the actual generation. The plugin ships both to every teammate so nobody edits a config file by hand.

The Skill and the Connector

PicassoIA offers a developer API at api.picassoia.com/v1 and an MCP connector for its image and video models, including PicassoIA Image and PicassoIA Image Editor Pro. That makes the server half of this pattern available today. Connection details live in your account, so confirm that your client supports the connector before you wire it in.

The skill then tells Codex how to use that reach well: which prompt structure to follow, which ratio to request, and when to stop and ask a human. The server never needs to know any of it.

Draft the Skill on PicassoIA

You do not have to write the first SKILL.md by hand. A coding model such as GPT 5.6 Sol or Claude Sonnet 5 can produce a draft in seconds.

  1. Open the GPT 5.6 Sol model page on PicassoIA.
  2. Paste a prompt like this: "Write a Codex SKILL.md named brand-photos. Add a header with name and description. The description must say when to use the skill and when not to. Steps: confirm the topic, write a photorealistic prompt in 16:9, generate three options, and ask for approval before saving."
  3. Keep the description to one or two literal sentences. It is the trigger, so vague wording means the skill never fires.
  4. Remove any step that does not match your real pipeline, then save the file as .agents/skills/brand-photos/SKILL.md.
  5. Test it with $brand-photos and a real request. If Codex does not pick it up on its own, tighten the description and try again.

💡 Treat model output as a first draft. A skill is only as good as the checks you add after you watch it run on a real task.

Try It on PicassoIA

Skills, servers and plugins are easier to judge once you watch them produce something. Open Picasso IA and recreate the photos in this article: a developer's oak desk at golden hour, a canvas tool roll beside a stack of index cards, a kraft box packed for shipping. Start with PicassoIA Image, change one detail per run, such as the lens, the light direction or the surface texture, and see how the picture shifts.

Then ask what the second run needed that the first did not. Was it a rule you keep repeating? That is a skill waiting to be written. Was it a system you had to open by hand? That is a server. Was it a setup you want to give to a friend? That is a plugin. Try a few prompts on Picasso IA today and let your own workflow tell you which one you need.

Share this article