How to submit an MCP server to ChatGPT and Codex plugin directory

By Jonah EasePublished Last checked

OpenAI's directory for ChatGPT and Codex takes a plugin package, not a form. You upload a ZIP, automated checks read it and scan your MCP server, a review team looks at what passes, and after approval you decide when it goes live[1]. Final submission requires a verified developer or business identity, so that comes first.

Before anything opens: identity and role

  • Pick the organisation and project that will own the plugin. Organisation owners can submit; other members need the Apps Management Write role[1].
  • Complete individual or business verification in the organisation's general settings. The plugin is shown under the name of the verified identity you choose[1][3].
  • You also need public website, support, privacy policy and terms pages, all on HTTPS, and a demo recording URL[2].

The ZIP and what the final check enforces

Open the Plugins page, choose to upload a plugin, pick your developer identity and upload the ZIP; a draft opens after validation. Upload checks are looser than the ones at final submission[1][4].

FieldRule
Display nameRequired, one line, 30 characters at most
Short descriptionRequired, one line, 30 characters at most
Long descriptionRequired, 4,000 characters at most
Starter promptsAt most 3, each 128 characters or fewer, no server @mention
Compressed ZIP100 MB at most

[2]

Proving the server is yours

The portal shows a token. Host it as plain text at /.well-known/openai-apps-challenge on the MCP host or an allowed parent domain, then connect the server so its tools are scanned. Only one MCP server can be connected per plugin[1].

Check the challenge before you verify the domain
curl -s https://mcp.example.com/.well-known/openai-apps-challenge
# the response body must be the exact token from the portal, as plain text:
# not JSON, not a list of tokens

What the reviewers are given

A remote server needs exactly five positive and three negative test cases, release notes and a demo recording. Every tool must carry readOnlyHint, openWorldHint and destructiveHint, each with a written justification. Where sign-in is needed, give a demo account that works at once, without MFA, email or SMS codes[2][1][3]. The manifest can carry all of it:

plugin.json, the review and publication keys (shape from the docs)
"review": {
  "test_cases": {
    "positive": [ /* exactly five: description, prompt, tools_triggered, expected_behavior */ ],
    "negative": [ /* exactly three: description, prompt */ ]
  },
  "demo_recording_url": "https://example.com/review/demo"
},
"publication": { "countries": ["US", "GB"], "release_notes": "Initial release." }

Error codes, and what clears them

  • annotations_required, justification_required: a tool is missing a hint or its reason[2].
  • scan_required: the tool scan must be successful and current for the production server[2].
  • domain_verification_required: the exact token is not at the challenge URL, or Verify Domain did not pass[2].
  • archive_too_large, plugin_root_ambiguous: the ZIP is over 100 MB, or holds more than one plugin root[2].
  • A demo account that needs a sign-up step or 2FA is rejected outright[3].

Who presses what

  1. You click Submit for review and tick the policy attestations.
  2. Feedback from the review team arrives by email, and you can reply to appeal a rejection.
  3. After approval, you click Publish plugin yourself.

That is the whole sequence, done by hand[1]. Anthropic runs a separate review for its own directory; see the Claude Connectors Directory.

Current status,

OpenAI's pages state no review time. Its page refers to a previous submission form, and tells anyone who used it to download their existing plugin as a ZIP to continue in the current flow[1].

Sources

  1. OpenAI: Upload and submit your plugin · checked
  2. OpenAI: Plugin submission errors · checked
  3. OpenAI: Plugin guidelines · checked
  4. OpenAI Platform: Plugins page · checked

ManyCP is not affiliated with, endorsed by or sponsored by any directory, Docker, OpenAI, Anthropic or GitHub named here. Names are used to say which service a fact is about.

Or skip all of that

Or let ManyCP prepare it for you

ManyCP writes your plugin.json and mcp.json, ready to zip: the name, descriptions, starter prompts and first test cases, plus a checklist of what OpenAI's review checks. You zip the folder, upload it and submit it yourself. It needs your verified identity and your own OpenAI organization.

ManyCP prepares

  • plugin.json and mcp.json, ready to zip
  • The name and short description cut to 30 characters, the long description and starter prompts
  • A first set of test cases, in plugin.json
  • A checklist of what OpenAI's review checks, each linked to OpenAI's docs
  • A zip command and a command to check your domain challenge file

You do

  • Verify your identity
  • Add your logo and URLs, zip the folder and upload it
  • Host the challenge token, verify your domain and connect your server
  • Write the privacy and terms pages and record the demo
  • Submit for review, then Publish after approval

Guides

More directories