How to Migrate a Custom GPT to a ChatGPT Plugin (incl. Custom Actions as MCP)
You built a custom GPT that you use every day. Now OpenAI is replacing custom GPTs with plugins. The built-in migration moves most of your GPT over, but not everything. This guide walks you through the migration, shows what transfers and what doesn't, and explains how to rebuild Custom Actions as an MCP server.
What's changing
According to OpenAI's retirement and migration FAQ (checked October 16, 2026):
- Custom GPTs are set to retire: according to OpenAI planned for December 11, 2026; dates may change (OpenAI FAQ). According to OpenAI, Enterprise workspaces with an approved deferral get until February 11, 2027.
- The transition affects all ChatGPT plans.
- At retirement, custom GPTs and their GPT pages become inaccessible. Your past conversations stay accessible.
- For Enterprise workspaces, OpenAI lists October 26, 2026 (planned) as the date when creation of new custom GPTs ends.
On personal accounts, it's already over for new GPTs: OpenAI's GPTs in ChatGPT article says new GPT creation is unavailable on personal accounts (Free, Go, Plus, Pro). Existing GPTs remain usable and editable until retirement.
What transfers and what doesn't
| GPT part | After migration |
|---|---|
| Instructions | Become a skill in the plugin |
| Knowledge files | Copied into the plugin's reference files |
| Connected apps | Added to the plugin as apps |
| Custom Actions | Do not transfer – rebuild separately |
| Selected model | Doesn't carry over |
| Conversation starters | Don't transfer one-to-one |
| Sharing settings | Don't carry over; the plugin starts private |
Step 1: Prepare before you migrate
- Finish your edits and publish. Migration uses the GPT's latest published version. Drafts don't transfer. Publishing doesn't mean sharing publicly.
- Save test prompts. Write down 3–5 prompts you use often, plus one hard case, with good answers to compare later.
- List your Custom Actions. Note each endpoint, what it does, and how it authenticates.
After migration, the original GPT becomes read-only but stays usable until retirement.
Step 2: Run the migration
When migration is available for your account, go to My GPTs, find the GPT under Created by me, and select Migrate to plugin. Review the details and follow the steps. Don't see the option? Migration rolls out at different times, you must be the GPT's creator, and plugins must be available for your account.
Step 3: Test like you mean it
OpenAI warns that a migrated plugin may respond differently. Run your saved prompts and check:
- Is the right skill selected, and does it follow your instructions and format?
- Does it use the right reference files?
- Are the tools it needs available?
- Does the hard case still work?
Step 4: Rebuild Custom Actions as an MCP server
This is the part that needs real work. According to OpenAI, custom actions don't transfer through the migration (FAQ). You replace them with a supported app or a custom MCP server, and that rebuilt connection is a separate plugin, not part of your migrated one. You can use both in one conversation (OpenAI MCP docs).
First, save your old setup: the action schema, the auth method and the non-secret settings from the GPT editor's Actions section.
How an action maps to MCP tools
A GPT action was an OpenAPI spec plus an auth setting. An MCP server exposes tools (MCP spec: Tools):
| GPT action (OpenAPI) | MCP tool |
|---|---|
Operation (operationId) | Tool name |
| Summary / description | Tool description |
| Parameters + request body | inputSchema (JSON Schema) |
| Response schema | Optional outputSchema |
| GET vs. POST/PUT/DELETE | readOnlyHint / destructiveHint annotations |
Don't mirror your API 1:1. OpenAI says to design tools around how people ask for things, and to split operations with different permissions or risks (Define tools). Prefer focused tools like list_projects and get_project over one tool with many modes (Build an MCP server).
Annotations matter. Set readOnlyHint: true only when a tool can't change anything, and destructiveHint: true for hard-to-reverse actions. Tools without readOnlyHint count as write actions, and ChatGPT asks for confirmation before running them (Add custom MCP server). Annotations don't replace your own authorization and validation.
Authentication: the biggest change
- No auth: still possible, per tool.
- API key: there's no direct equivalent. According to OpenAI, ChatGPT can't present custom API keys to your server (Authentication). Two options: (a) your server holds the key as a secret and calls the API itself, which is fine for shared data but gives no per-user separation, or (b) switch to OAuth.
- OAuth: you need OAuth 2.1 following the MCP authorization spec. Compared with action OAuth, that means: protected-resource metadata at
/.well-known/oauth-protected-resource, PKCE with S256, handling theresourceparameter ChatGPT sends (and checking the token audience), and allowlisting ChatGPT's new redirect URIs. The old GPT callback URL no longer applies. OpenAI recommends an established identity provider rather than building auth yourself.
Build, test, connect
- SDK: OpenAI's guide points to the official MCP SDKs for TypeScript (
@modelcontextprotocol/sdk) and Python (mcp). - Converters: there's no official OpenAPI-to-MCP converter. Third-party tools such as FastMCP can bootstrap a prototype, but their own docs say curated tools work better than auto-converted ones (FastMCP).
- Test locally with MCP Inspector (
npx @modelcontextprotocol/inspector). - Deploy: production needs the Streamable HTTP transport on a public HTTPS URL, typically ending in
/mcp. - Connect: in ChatGPT on the web, go to Plugins → + → Add custom MCP server, enter the URL including
/mcp, set up auth, accept the risk warning and choose Create as a plugin (Connect and test). Which plans can add custom MCP servers depends on your account and workspace, so check yours. - Evaluate: test direct, indirect and follow-up requests, write actions, and requests that shouldn't call a tool.
Only connect servers you trust, and treat every input as potentially malicious.
A shortcut: GPT-to-Plugin Kit, €19
If you'd rather not start from a blank file, the Botnexio GPT-to-Plugin Kit gives you a template to turn a custom GPT into an API/tool. According to its listing: a step-by-step guide, inventory and system-prompt templates, an OpenAPI spec with two example operations, and a small dependency-free Node.js server implementing the spec, with tests. Not included: hosting, a database, vector search or an automatic export from your GPT. Note: it's built around an OpenAPI spec, so you still wrap it as an MCP server as described above. Price: €19 incl. VAT, ZIP download.
FAQ
When do custom GPTs stop working?
According to OpenAI, the retirement of custom GPTs is planned for December 11, 2026; dates may change (OpenAI FAQ). According to OpenAI, Enterprise workspaces with an approved deferral have until February 11, 2027.
Can I still create a new GPT?
Not on personal accounts (Free, Go, Plus, Pro). For Enterprise workspaces, OpenAI plans to end creation of new GPTs on October 26, 2026.
Do my Custom Actions transfer?
No. They don't transfer through the migration workflow. Rebuild them with a supported app or a custom MCP server, which becomes a separate plugin.
Are my chats with the GPT lost?
No. According to OpenAI, existing conversations remain accessible after retirement.
Can I keep editing my GPT after migration?
No. The original becomes read-only. Make future changes in the plugin.
Do people who used my GPT get the plugin automatically?
No. The plugin starts private. Share it and ask them to install it.
Don't wait for the deadline
Migrate now. Rebuild once. Keep your workflow.
→ Get the GPT-to-Plugin Kit for €19