Guide · updated 8 November 2026
How to migrate custom GPT Actions to MCP
To migrate a custom GPT Action, copy its OpenAPI schema from the GPT editor, serve the same operations from a remote MCP server (self-hosted or hosted), keep the Action's authentication on that server, then add the server URL to ChatGPT as a custom MCP server and to Claude as a custom connector. Do it before custom GPTs stop running on 11 December 2026. The steps below take about 15 minutes for a typical Action.
1. Export the Action schema
Open your GPT in the editor, go to Configure → Actions and open each action. Copy the whole Schema box (JSON or YAML). Write down the Authentication settings: None, API Key (with Auth Type Basic, Bearer or Custom header name) or OAuth (client ID, client secret, authorization URL, token URL, scope and token exchange method). You need the secret values too, from wherever you keep them; the editor does not show saved secrets again.
2. Check the conversion
Paste the schema into the free OpenAPI to MCP converter or the GPT Action migration checker. Each operation should become one tool. Common fixes:
- Relative server URL (
servers: - url: /api/v3): enter the API's full base URL. - Missing operationId: tools are then named from the method and path; add operationIds for clearer names.
- Swagger 2.0: convert to OpenAPI 3 first.
- Too many operations: assistants choose tools more reliably with fewer than about 40; switch off the ones the GPT never used.
3. Choose where the MCP server runs
You need a public HTTPS URL that speaks MCP over Streamable HTTP. Three options:
- Self-host the generated code. The converter downloads a Cloudflare Worker or Node.js project with a README. Free; you look after hosting, secrets and, for ChatGPT with a private API, an OAuth layer.
- Use a hosted bridge. ActionBridge runs the server, stores the credentials encrypted and handles OAuth for ChatGPT and Claude.
- Write tools by hand with the official MCP SDKs, if you own the API and want a few higher-level tools instead of one per endpoint.
4. Move the authentication
A GPT Action stored your credential inside ChatGPT. An MCP server keeps it itself:
| GPT Action setting | On the MCP server | How ChatGPT or Claude connects |
|---|---|---|
| None | Nothing to store | No authentication |
| API Key, Custom header | The key, sent as that header | OAuth to the bridge, or an access-key header (Claude, Claude Code, Cursor) |
| API Key, Bearer | The token, sent as Authorization: Bearer | Same as above |
| API Key, Basic | The base64 credentials | Same as above |
| OAuth | Client ID and secret, authorization and token URLs | OAuth: each user signs in to your API through the server |
For OAuth, add the MCP server's callback URL to your OAuth app's allowed redirect URIs. The Action used a chat.openai.com/aip/…/oauth/callback address, which stops working with the GPT.
5 and 6. Connect ChatGPT, Claude and your editor
ChatGPT
- On the web, open Plugins (chatgpt.com/plugins), select +, then Add custom MCP server.
- Enter a name, choose Public endpoint and paste your bridge URL.
- Authentication: OAuth for a private bridge (ChatGPT opens the ActionBridge page, where you paste your access key once) or No authentication for a public one.
- Accept the risk warning, choose Create as a plugin, install it, and turn it on in a chat.
Claude
- Open Customize → Connectors, select + Add → Add custom connector.
- Paste the URL. Choose Sign in now (OAuth, paste the access key on the ActionBridge page), or No sign in plus a request header
Authorization: Bearer <access key>. - Team and Enterprise: an Owner adds it under Organization settings → Connectors.
Claude Code, Cursor and VS Code
claude mcp add --transport http my-api https://…/mcp/<id> --header "Authorization: Bearer <access key>"
Cursor (~/.cursor/mcp.json) and VS Code (.vscode/mcp.json, "type": "http") take the same URL and header. The app shows each snippet filled in for your bridge.
7. Test with real prompts
Run the prompts your GPT was used for. Read-only tools (GET) should run straight away; anything that writes should ask for confirmation, because the server marks it with readOnlyHint: false. Then move the GPT's instructions into the plugin's skills or the server's instructions, and tell your users the new way in before 11 December.
Frequently asked questions
Can I keep using the same API?
Yes. Nothing changes on your API. The MCP server calls the same endpoints with the same credentials the Action used.
Does the MCP server work for my GPT's users?
Users of a shared GPT need the new plugin or connector instead. For an API-key Action, everyone shares your key, as before; for an OAuth Action, each user signs in once.
How long does it take?
About 15 minutes for a typical Action with a clean schema and an API key. OAuth Actions take longer because you update the OAuth app's redirect URI.
Last updated 8 November 2026. Questions or corrections: [email protected].