---
title: "ChatGPT plugins: how to build one and get it in the Plugin Directory | Agentic Studio"
description: "ChatGPT apps are now plugins, and one package runs in ChatGPT and Codex. What changed, what goes in a plugin, how to build and submit one, how review works, and how ChatGPT picks plugins. Or book a call and we build it."
canonical: "https://www.theagentic.studio/chatgpt-plugins"
markdown: "https://www.theagentic.studio/chatgpt-plugins.md"
last_updated: "2026-09-29"
---

# ChatGPT plugins are back. Here's how to build one.

> ChatGPT apps are now plugins, and one package runs in ChatGPT and Codex. What changed, what goes in a plugin, how to build and submit one, how review works, and how ChatGPT picks plugins. Or book a call and we build it.

By Ravi Sojitra. Published 2026-09-29, updated 2026-09-29.

On July 9, OpenAI renamed ChatGPT apps to plugins and opened the Plugin Directory. At DevDay on September 29, it added plugin extensions and plugin picks inside the conversation. One package now runs in ChatGPT and Codex.

This guide covers what goes in a plugin, how to build one, what review asks for, and how ChatGPT decides to use it. Rather have it built? That's what we do.

- **Apps are plugins now.** One directory for ChatGPT and Codex. DevDay 2026 added plugin extensions and in-chat recommendations.
- **Skills, tools, UI.** A plugin.json ties SKILL.md files, an MCP server and optional interface into one install.
- **Review is real.** Test cases, a demo video, a test account and domain proof. Skills-only plugins skip most of it.

## What changed, and when.

Plugins died in 2024. They came back in 2026 with a new engine. Here is the short history.

| date | what happened |
| --- | --- |
| MAR 2023 | The first ChatGPT plugins launch in beta. A manifest file and an OpenAPI spec the model could call. |
| APR 2024 | Those plugins shut down for good. GPTs take their place. |
| OCT 2025 | OpenAI launches the Apps SDK at DevDay 2025. Apps run inside the chat, built on MCP. |
| JUL 9, 2026 | Codex merges into the ChatGPT desktop app. Apps are renamed plugins. The App Directory becomes the Plugin Directory. |
| SEP 29, 2026 | DevDay 2026: plugin extensions, plugin recommendations in conversation, Plugin Creator, and a redesigned submission flow. |

Same name as 2023. Nothing else in common. The old plugins were an API spec the model called. The new ones bundle tools, instructions and interface, and they install in two products at once.

Publish once and the plugin is listed in one directory that serves both ChatGPT and Codex. Users can browse it, call a plugin with `@`, or have ChatGPT suggest it mid-conversation.

> **why it matters**: OpenAI says 1.2 billion people use ChatGPT every week. A listing does not hand you that audience. Getting recommended in the right conversation might.

## Six parts. Most plugins use two.

A plugin can be skills only, an MCP server only, or both. Everything else is optional and earns its place.

- **Instructions the model follows** (skills): A folder with a `SKILL.md`. Its description decides when it fires. Scripts, references and templates sit beside it.
- **Tools that do real work** (mcp server): Your API, exposed over Streamable HTTP. Search, create, update. This is how the plugin touches your product.
- **Cards inside the chat** (ui): Built on the open MCP Apps standard. Inline card, carousel, fullscreen or picture-in-picture.
- **Your app, inside ChatGPT** (plugin extensions): New at DevDay 2026. Sidebar apps, side panels, file viewers, composer mentions. Canva, Figma and Adobe are the launch examples.
- **Scripts on lifecycle events** (hooks): Run a command at session start and similar moments. A Codex feature, and users must trust a hook before it runs.
- **Physical goods only** (checkout): External checkout or saved payment methods. Digital goods, subscriptions and upsells are off limits.

the folder:

```text
acme-orders/
├── plugin.json          # name, version, description
├── mcp.json             # your MCP server (optional)
├── skills/
│   └── find-orders/
│       └── SKILL.md     # when and how to use your tools
├── assets/              # logo, composer icon, screenshots
└── hooks/
    └── hooks.json       # lifecycle hooks (optional)
```

plugin.json:

```json
{
  "$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json",
  "name": "acme-orders",
  "version": "1.0.0",
  "description": "Find, track and update Acme orders.",
  "extensions": {
    "com.openai": {
      "interface": {
        "displayName": "Acme Orders",
        "category": "Productivity",
        "privacyPolicyURL": "https://acme.com/privacy",
        "logo": "./assets/logo.png"
      }
    }
  }
}
```

The manifest follows the open Agent Plugins schema. Only `name`, `version` and `description` are required. OpenAI-specific listing fields live under `extensions.com.openai`. Skills are found automatically from the `skills/` folder, so you don't register them anywhere.

Codex still reads the older `.codex-plugin/plugin.json` overlay, and even a `.claude-plugin/marketplace.json`. If you built a Claude plugin already, you are closer than you think.

## How to build a ChatGPT plugin.

Seven steps, from idea to directory. Step one is where most plugins go wrong, so don't skip it.

1. **Pick one job**: Not your whole product. One job people already bring to ChatGPT. "Where's my order?" "Draft a quote." "Book the room." Write 20 real prompts for it before you write any code. They become your test set.
2. **Build the MCP server**: Expose that job as a few tools over Streamable HTTP. Name them domain first, like `orders.search`. Start every description with "Use this when". Set `readOnlyHint`, `destructiveHint` and `openWorldHint` honestly, because review checks them.

   ```json
   {
     "$schema": "https://agent-plugins.org/schemas/1.0.0/mcp.schema.json",
     "mcpServers": {
       "acme": {
         "type": "streamable-http",
         "url": "https://mcp.acme.com/mcp"
       }
     }
   }
   ```

3. **Write the skills**: A skill tells the model how to run the job with your tools: what to ask for, the steps, the output format, and when to stop. The `description` in the frontmatter decides when it triggers, so write it like a search query.

   ```markdown
   ---
   name: find-orders
   description: Use when the user asks where an Acme order is, or wants to change one.
   ---
   
   1. Ask for the order number, or the email on the order.
   2. Call orders.search. Never guess an order number.
   3. Show status, carrier and delivery date.
   4. Offer an address change only if the order has not shipped.
   ```

4. **Add UI only where it earns it**: Text is fine for most answers. Add a card when the user has to compare, pick or edit. Build on [MCP Apps](https://modelcontextprotocol.io/extensions/apps/overview) first, then layer ChatGPT extras from `window.openai`, like `callTool` and `setWidgetState`. Keep every tool working without the UI.
5. **Package it**: `plugin.json` at the root, `mcp.json` beside it, skills under `skills/`, art under `assets/`. Every path is relative and starts with `./`. No secrets in the folder, ever.
6. **Test it in Developer Mode**: Turn on Developer Mode in ChatGPT under Settings, Security and login. Register your MCP server, ask `@plugin-creator` to scaffold a local marketplace entry, restart the desktop app, and install the plugin from your personal plugins. Run your 20 prompts. Fix. Run them again.
7. **Submit it**: Upload a ZIP on the [plugins dashboard](https://platform.openai.com/plugins). Fill in the listing, fix every automated finding, verify your domain, and send it to review. Once approved, you pick the publish date.

> **internal only?**: Skip the public directory. A workspace admin can publish a plugin to their own ChatGPT workspace from the Personal tab and choose which roles get it. It stays inside the org.

**We build it. You own it.** MCP server, skills, UI, listing and review packet. Built in your repo, tested in your ChatGPT, submitted under your name.

Book a call: https://cal.com/ravisojitra/30min

## What review asks for.

Every plugin gets automated checks. Plugins with an MCP server also get tested by a person. Here is the packet.

| item | what openai wants |
| --- | --- |
| DISPLAY NAME | 30 characters max. Specific and tied to your brand, not a dictionary word. |
| SHORT DESCRIPTION | 30 characters max. Plain facts, no pricing, no hype. |
| LONG DESCRIPTION | Up to 4,000 characters. |
| LINKS | Privacy policy, terms, support and website URLs. |
| ART | A logo and a composer icon. |
| TEST CASES | 5 positive and 3 negative, each with a prompt, the expected tool and the expected result. MCP plugins only. |
| DEMO | A video walkthrough URL. MCP plugins only. |
| TEST ACCOUNT | Working credentials with no MFA, no email codes and no private network. Entered in the dashboard, never in the ZIP. |
| DOMAIN PROOF | A challenge token served as plain text at `/.well-known/openai-apps-challenge` on your MCP host. |
| IDENTITY | Individual or business verification on your OpenAI organization. |

**Six easy ways to fail review.**

- **The server won't connect**: Test credentials that only work on your office network, or need MFA.
- **A test case misses**: Output has to match what you said it would, with nothing extra.
- **The privacy policy has gaps**: Every type of user data your tools return has to be disclosed.
- **The hints lie**: A tool marked read-only that writes anything is a rejection.
- **It asks for too much**: Tools can't request the full conversation or broad context fields.
- **It sells the wrong thing**: Digital products, subscriptions and upsells are not allowed.

How long does it take? OpenAI doesn't publish a timeline and doesn't expedite. Only one review can be open per plugin. After launch, changes to your hosted MCP tools are picked up by daily scans. New skills or listing changes need a new ZIP and another review.

## How ChatGPT picks a plugin.

ChatGPT now suggests plugins mid-conversation, and it decides from your metadata. Treat it like SEO, with a model as the reader.

- **Name tools domain first**: `calendar.create_event` beats `create`. The model reads the name before anything else.
- **Say when, and when not**: Open each description with "Use this when". Then say what it's not for: "Do not use for reminders."
- **Describe every argument**: Add examples. Use allowed values for anything with a fixed set of options.
- **Test three kinds of prompt**: Direct ("use Acme to find my order"), indirect ("where's my package?"), and negative: prompts that should not trigger you.
- **Measure precision and recall**: Did the right tool run? Did it run when it should have? Fix precision on the negatives first.
- **Change one field at a time**: Otherwise you won't know what helped. Then check tool-call analytics weekly for drift.

> **the listing still counts**: People browse the directory too. A clear name, a sharp long description and real screenshots do the job a landing page used to.

## Should you build one?

Not every product needs a plugin. Here is the test we run before we quote one.

- **People already paste your stuff into ChatGPT** (signal 01): Order numbers, CRM records, docs, tickets. That's demand. A plugin meets it where it already is.
- **You have an API** (signal 02): The MCP server wraps what you already expose. No API means building one first, and that is the bigger job.
- **One job is worth doing in chat** (signal 03): Lookups, drafts, bookings, quotes. Quick in, quick out, and the answer is useful on its own.
- **You already have a Claude plugin** (signal 04): OpenAI publishes a guide to port it. Commands become skills, Claude-only features come out, most of the work carries over.

**When to skip it.**

- **You want to sell a plan inside the chat**: Not allowed. Existing customers can sign in and use what they pay for. Nobody can buy a subscription through your plugin.
- **Your data can't pass a privacy review**: If your tools return data you can't disclose in a policy, fix that before you build anything.
- **Nobody will own it after launch**: Models change, metadata drifts, updates go back through review. Somebody has to watch it, or pay us to.

## Where this comes from.

OpenAI's own docs, plus DevDay 2026 coverage. Checked on 29 September 2026.

- [Plugins quickstart](https://developers.openai.com/plugins/quickstart) (openai developers)
- [Build a plugin](https://developers.openai.com/plugins/build/plugins) (openai developers)
- [Build skills](https://developers.openai.com/plugins/build/skills) (openai developers)
- [Build a ChatGPT UI](https://developers.openai.com/plugins/build/chatgpt-ui) (openai developers)
- [Plugin extensions](https://developers.openai.com/plugins/build/extensions) (openai developers)
- [Submit your plugin](https://developers.openai.com/plugins/deploy/submission) (openai developers)
- [Plugin guidelines](https://developers.openai.com/plugins/plugin-guidelines) (openai developers)
- [Optimize metadata](https://developers.openai.com/plugins/guides/optimize-metadata) (openai developers)
- [Submit a Claude plugin](https://developers.openai.com/plugins/guides/submit-claude-plugin) (openai developers)
- [OpenAI DevDay 2026 live updates](https://www.engadget.com/2271985/openai-dev-day-live-blog-chatgpt-news/) (engadget)
- [Vibe Check: OpenAI DevDay 2026](https://every.to/vibe-check/vibe-check-openai-devday-2026) (every)

## We build it. You ship it.

The whole plugin, from the first prompt to the directory listing. Code in your repo from day one.

- **MCP server**: Your API as clean, well-named tools over Streamable HTTP, with sign-in where users need it.
- **Skills**: SKILL.md workflows that tell the model how to use your tools, and when to stop and ask.
- **In-chat UI**: Cards, carousels and fullscreen views on MCP Apps, only where they beat plain text.
- **Plugin extensions**: Sidebar apps, side panels and file viewers, for products that need a real workspace in ChatGPT.
- **Review packet**: Listing copy, test cases, demo video, test account and domain proof. Filed, answered, fixed.
- **Discovery tuning**: Golden prompt sets, precision and recall runs, and metadata changes one field at a time.
- **Claude plugin port**: Already on Claude? We adapt your skills and manifest for ChatGPT and Codex.
- **Internal plugins**: Workspace-only plugins for your team's own tools. Published by your admin, never listed publicly.
- **Upkeep**: Tool changes, metadata drift and resubmissions, on a monthly arrangement if you want one.

We don't wrap your whole product on day one. We ship the one job people already ask ChatGPT for, check that it gets picked, then add the next.

## How it runs

1. **Pick the job**: One call. What your users ask, what your API can do, and whether a plugin is worth building at all.
2. **Scope and price**: Tools, skills, UI and sign-in, in writing. Fixed scope, fixed price, before any code.
3. **Build in Developer Mode**: You install it while it's being built and run the prompts yourself. Nothing is submitted until you like it.
4. **Submit and follow through**: We file the listing, test cases and demo, answer review, and fix whatever comes back.

Approval is OpenAI's call. We can't promise it. We can hand review a packet with no easy reasons to say no.

## Questions

### Are these the same as the 2023 ChatGPT plugins?

No. Same name, new engine. The 2023 plugins were an OpenAPI spec, and they shut down in April 2024. Today's plugins bundle skills, an MCP server and optional UI, and they run in ChatGPT and Codex.

### What's the difference between a ChatGPT app and a plugin?

On July 9, 2026, OpenAI renamed apps to plugins and moved the App Directory into the Plugin Directory. An Apps SDK app is now the MCP server and UI inside a plugin. Skills sit beside it.

### Do I need an MCP server?

Only if the plugin has to reach your product or your data. Skills-only plugins are allowed. They also skip the test cases, the demo video and the test account at review.

### Can I charge for my plugin?

Not for digital goods. Subscriptions, upsells and in-chat checkout for them are not allowed. Existing paying customers can sign in and use what they already pay for. Physical goods can use checkout.

### How long does review take?

OpenAI doesn't publish a timeline and doesn't expedite. What we control is the packet: complete, tested, and with no easy reasons to bounce it.

### Does the same plugin work in Codex?

Yes. Public plugins are published once and listed for both ChatGPT and Codex. Some parts, like hooks, are Codex features, so we test every piece on both surfaces.

### We already have a Claude plugin. Can you port it?

Yes. OpenAI publishes a guide for exactly this. Commands become skills, Claude-specific wording and artifacts come out, and user config gets replaced. The core skills usually survive.

### Can we keep the plugin inside our company?

Yes. A workspace admin can publish it to your ChatGPT workspace and pick which roles get it. No public listing, and it never leaves your org.

### Do we own the code?

Yes. The repository, the MCP server and the listing live in your accounts from the first commit. You can take it in-house the day it ships.

## Bring the idea. Leave with a plan.

Thirty minutes on your product and your users. You leave knowing whether a plugin is worth building.

- **what to bring**: What your product does, what people ask ChatGPT about it, and whether you have an API.
- **what we do on the call**: Pick the one job worth putting in chat, and check it against OpenAI's rules.
- **what you leave with**: The job, the tools it needs, and a fixed price to build and submit it.

Free, and there is no follow-up sequence. If a plugin is the wrong move for you, the call will say so.

Book: https://cal.com/ravisojitra/30min

## More

- [Home](https://www.theagentic.studio/)
- [SaaS replacement development](https://www.theagentic.studio/replace-your-saas)
- [ChatGPT plugin development](https://www.theagentic.studio/chatgpt-plugins)
- [About](https://www.theagentic.studio/about)
- [Contact](https://www.theagentic.studio/contact)
- [Privacy](https://www.theagentic.studio/privacy)
- [Pricing](https://www.theagentic.studio/pricing.md)
- [llms.txt](https://www.theagentic.studio/llms.txt)
- [Sitemap](https://www.theagentic.studio/sitemap.xml)
