# Submit your Claude Code plugin to OpenAI

> For the complete documentation index, see [llms.txt](/llms.txt). Markdown versions of documentation pages are available by appending `.md` to the page URL.

If you already publish a Claude Code plugin or connector, choose the OpenAI
submission path that matches what you ship.

| What you have                                            | OpenAI submission path                                                                                                                     |
| -------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ |
| A skills-only Claude Code plugin                         | Follow [Submit a skills-only plugin](#submit-a-skills-only-plugin).                                                                        |
| A remote MCP connector                                   | Follow [Submit a plugin with an MCP server](#submit-a-plugin-with-an-mcp-server). Skills are optional.                                     |
| A Claude Code plugin with skills and a remote MCP server | Follow [Submit a plugin with an MCP server](#submit-a-plugin-with-an-mcp-server) and include the skills in the same submission.            |
| A plugin with only local `stdio` MCP servers             | We recommend exposing your MCP server as a public HTTP endpoint. If that isn't possible, wait until OpenAI supports local MCP servers.     |
| A Claude Desktop extension (`.mcpb`)                     | The portal doesn't accept `.mcpb` files. Expose its MCP server as a public HTTP endpoint, or wait until OpenAI supports local MCP servers. |

Claude uses separate submission processes for Claude Code plugins and MCP
connectors. OpenAI uses one plugin submission with either skills alone or
skills and an optional remote MCP server. Claude marketplace listings and
approvals don't transfer.

## Submit a skills-only plugin

Choose this path when the plugin doesn't need an MCP server.

### Review what OpenAI supports

| What your Claude plugin has                                                                                 | What to do                                                                                                                                                                                                                                                                                                                                                                 |
| ----------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `skills`                                                                                                    | Keep each skill with its `SKILL.md`, scripts, references, and assets. A direct Claude archive upload must include at least one skill at `skills/<skill-name>/SKILL.md`.                                                                                                                                                                                                    |
| Manifest-declared custom skill directories                                                                  | Keep the directories and their manifest declarations in the archive.                                                                                                                                                                                                                                                                                                       |
| Skills that explicitly refer to Claude                                                                      | Replace Claude-specific references in the skill instructions with provider-neutral language, such as “the model.” Keep a product name only when the instruction genuinely applies to that product.                                                                                                                                                                         |
| `commands`, `commands/`, `agents`, or `agents/`                                                             | Convert reusable behavior to skills. Turn each Markdown command into a skill, move reusable agent procedures into skills, and merge useful persona instructions into the relevant skill.                                                                                                                                                                                   |
| `hooks` or `hooks/hooks.json`                                                                               | Adapt supported command hooks for Codex and test them against the [Codex hook runtime](https://developers.openai.com/codex/hooks). Don't require hooks for the core ChatGPT workflow. ChatGPT doesn't run plugin hooks yet, and Codex doesn't run prompt or agent hook handlers.                                                                                                                        |
| `userConfig` or `${user_config.*}`                                                                          | OpenAI doesn't run Claude installation prompts or expand `user_config` variables. Follow [Replace Claude `userConfig`](#replace-claude-userconfig). If the plugin needs credentials or persistent user settings, use the **With MCP** path.                                                                                                                                |
| Skills that create or update Claude live artifacts                                                          | OpenAI doesn't currently support Claude live artifacts. Remove instructions that require creating, reopening, refreshing, or updating an artifact. Return the underlying content as regular conversation output instead; for example, render artifact tables as standard tables. Artifact-specific HTML, persistence, refresh behavior, and interactions aren't preserved. |
| `bin/`, `settings`, `settings.json`, `CLAUDE.md`, or `.claude/settings*.json`                               | Keep required helpers and instructions in the plugin. Call bundled executables with package-relative paths, and remove Claude-only settings.                                                                                                                                                                                                                               |
| `outputStyles`, `lspServers`, `experimental.themes`, `experimental.monitors`, `channels`, or `dependencies` | Move essential behavior into skills, then remove the Claude declaration. Contact your OpenAI partner if the core workflow requires inbound channel messages.                                                                                                                                                                                                               |
| `.claude-plugin/plugin.json`                                                                                | Keep the manifest for a direct Claude archive upload. The portal converts it to `.codex-plugin/plugin.json`.                                                                                                                                                                                                                                                               |
| `.claude-plugin/marketplace.json`, `.mcp.json`, `mcpServers`, `.app.json`, or `apps`                        | Don't rely on these files or declarations. A skills-only upload excludes MCP and app configuration, and you can't submit an existing app integration by reference.                                                                                                                                                                                                         |

### Prepare and upload the archive

1. Confirm that the archive root, or its single top-level directory, includes
   `.claude-plugin/plugin.json` with a nonempty `description` and at least one
   valid skill at `skills/<skill-name>/SKILL.md`.
2. Open the [plugin submission portal](https://platform.openai.com/plugins),
   select **Create plugin**, choose **Skills only**, and upload the archive.
3. Review the generated `.codex-plugin/plugin.json`. The portal adds missing
   interface defaults and normalizes text fields during conversion.
4. Test the imported skills in a clean environment. Confirm that each skill can
   find its referenced files and executables and doesn't depend on undeclared
   local packages, files, or credentials.
5. Complete the listing and review fields, fix every scan result, and submit the
   draft.

If the archive doesn't qualify for direct upload, use
[Package your plugin](https://developers.openai.com/plugins/build/plugins#plugin-structure) to create the
OpenAI manifest and package layout. See [Build skills](https://developers.openai.com/plugins/build/skills)
for skill requirements.

## Submit a plugin with an MCP server

Choose this path for a plugin that needs both skills and an MCP server.

### Review what OpenAI supports

| What your Claude integration has                                                                            | What to do                                                                                                                                                                                                                                                                                                                                                                 |
| ----------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| A remote MCP server                                                                                         | Reuse the server implementation. Submit a stable, public HTTPS endpoint that uses streamable HTTP.                                                                                                                                                                                                                                                                         |
| A local `stdio` server, `.mcpb`, `.mcp.json`, or `claude_desktop_config.json`                               | We recommend exposing your MCP server as a public HTTP endpoint. If that isn't possible, wait until OpenAI supports local MCP servers. The portal doesn't accept `.mcpb` files.                                                                                                                                                                                            |
| Skills or manifest-declared custom skill directories                                                        | Include the skills in the same **With MCP** submission. Keep each `SKILL.md` with its scripts, references, and assets.                                                                                                                                                                                                                                                     |
| Skills that explicitly refer to Claude                                                                      | Replace Claude-specific references in the skill instructions with provider-neutral language, such as “the model.” Keep a product name only when the instruction genuinely applies to that product.                                                                                                                                                                         |
| `commands`, `commands/`, `agents`, or `agents/`                                                             | Convert reusable behavior to skills. Turn each Markdown command into a skill, move reusable agent procedures into skills, and merge useful persona instructions into the relevant skill.                                                                                                                                                                                   |
| `hooks` or `hooks/hooks.json`                                                                               | Adapt supported command hooks for Codex and test them against the [Codex hook runtime](https://developers.openai.com/codex/hooks). Don't require hooks for the core ChatGPT workflow. ChatGPT doesn't run plugin hooks yet, and Codex doesn't run prompt or agent hook handlers.                                                                                                                        |
| `userConfig` or `${user_config.*}`                                                                          | OpenAI doesn't run Claude installation prompts or expand `user_config` variables. Follow [Replace Claude `userConfig`](#replace-claude-userconfig) to move each value to an explicit input, OAuth, hosted storage, or Codex-local configuration.                                                                                                                           |
| Skills that create or update Claude live artifacts                                                          | OpenAI doesn't currently support Claude live artifacts. Remove instructions that require creating, reopening, refreshing, or updating an artifact. Return the underlying content as regular conversation output instead; for example, render artifact tables as standard tables. Artifact-specific HTML, persistence, refresh behavior, and interactions aren't preserved. |
| `.app.json`, `apps`, or an existing app integration                                                         | Submit the MCP server endpoint directly. You can't submit an existing app integration by reference.                                                                                                                                                                                                                                                                        |
| `outputStyles`, `lspServers`, `experimental.themes`, `experimental.monitors`, `channels`, or `dependencies` | Move essential behavior into skills or MCP tools, then remove the Claude declaration. Contact your OpenAI partner if the core workflow requires inbound channel messages.                                                                                                                                                                                                  |

### Prepare and submit the MCP server

1. Deploy the MCP server at its production HTTPS endpoint. Use OAuth 2.1 when
   the server accesses private user data or takes actions for a user.
2. Add accurate tool schemas and safety annotations. Test that every tool
   connects, authenticates, returns the expected result shape, and requires the
   intended confirmation for write or destructive actions.
3. Convert any commands or agents to skills and make sure the skills don't
   depend on undeclared local packages, files, or credentials.
4. Open the [plugin submission portal](https://platform.openai.com/plugins),
   select **Create plugin**, choose **With MCP**, and submit the production
   endpoint. Add the converted skills to the same draft when applicable.
5. Verify the server domain, configure authentication when the server requires
   sign-in, complete the listing and review fields, fix every scan result, and
   submit the draft.

Review the [MCP server review requirements](https://developers.openai.com/plugins/deploy/app-review) before
submitting.

## Replace Claude `userConfig`

OpenAI plugins don't run Claude `userConfig` installation prompts or expand
`${user_config.*}` references. Remove those references and replace each value
based on how the plugin uses it.

| What the value controls                      | OpenAI replacement                                                                                                                                                                            |
| -------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| A choice that can change for each task       | Add an explicit skill or MCP tool input. Ask for the value only when the workflow needs it.                                                                                                   |
| A credential for a remote service            | Use OAuth 2.1 through the remote MCP server. Don't put secrets in the skill archive, manifest, instructions, or default values.                                                               |
| A preference that should persist             | Store it in the hosted service and associate it with the authenticated user. Let the user update it through an explicit workflow or tool input.                                               |
| A setting for a Codex-local script or hook   | Use a documented environment variable or config file. Check it before use and return an actionable error when missing. Don't make this local setting necessary for the core ChatGPT workflow. |
| A fixed value that is the same for all users | Put a non-secret default in the skill instructions or hosted service configuration.                                                                                                           |

If a skills-only plugin needs a credential or a setting that must persist
between conversations, add a remote MCP server and submit it through **With
MCP**. If the value only affects the current task, keep the plugin skills-only
and collect it as an explicit skill input.

## Complete the submission requirements

Before submitting either plugin, get **Apps Management** write access in the
OpenAI organization that will own it. You must also complete individual or
business identity verification. Every plugin must complete OpenAI review.

Contact your OpenAI partner before submitting if the plugin's core value
requires local execution, arbitrary access to files on the user's computer,
hardware or application access, offline operation, or inbound channel
messages. These cases may need a different design or product-specific review.

For the complete portal workflow, see
[Submit plugins](https://developers.openai.com/plugins/deploy/submission). If the portal reports a package
validation code, use the
[submission error reference](https://developers.openai.com/plugins/deploy/submission-errors).