Add an MCP Server to ChatGPT: Custom Connectors and Fixes
How to add a remote MCP server to ChatGPT as a custom connector, what a guarded server has to answer, and why a server that works on your machine fails from OpenAI's network.
ChatGPT takes a remote MCP server by URL: open chatgpt.com/plugins, click +, choose Add custom MCP server, paste the address, pick how it signs in, and create it [1]. It speaks both Streamable HTTP and the older SSE transport [1]. It cannot launch a local command, so a stdio-only server needs a public address first.
Everything below is checked against OpenAI's documentation on 12 October 2026 [1][2][3]. Most guides that rank for this still show the older path through Settings > Connectors > Advanced > Developer mode. OpenAI's own documentation now puts custom servers under Plugins, so if your screen does not match a guide, the guide is probably the older one.
TL;DR:
- Use chatgpt.com/plugins > + > Add custom MCP server [1]. On a personal Plus or Pro account, turn on developer mode in settings first [4].
- ChatGPT calls your server from OpenAI's network, not yours. A server that passes in the MCP Inspector or
curlon your laptop can still fail in ChatGPT. - A guarded server needs S256 PKCE advertised and a way for ChatGPT to register: a Client ID Metadata Document, Dynamic Client Registration, or a client ID you type in [1][2]. Without
S256in its metadata, OpenAI calls the server unsupported [2]. - Check the public half before you paste the URL. Our MCP connection test calls your server from outside your network and shows what a stranger gets back.
Add it as a custom MCP server
- Open chatgpt.com/plugins on the web [1].
- Click +, then Add custom MCP server.
- Enter the server's URL, for example
https://mcp.example.com/mcp. - Pick an authentication option (the next section).
- Create it.
After you change tools on the server, open the app's details page and refresh it: that pulls new tools, descriptions and server instructions [1]. ChatGPT does not notice on its own.
Which plans can do it
This is the part that has changed most often, so read it as a snapshot. OpenAI's help article says full MCP, including tools that write or modify, is in beta on Business, Enterprise and Edu, where only an admin or owner can turn on developer mode and add an app [3]. On Pro it lists read and fetch permissions [3]. OpenAI support told users on the community forum that personal Plus and Pro accounts each have to enable developer mode themselves before they can create a connector [4]. The Free plan is not mentioned in either.
If Add custom MCP server is missing on your account, that is the plan or the workspace setting, not your server.
The three authentication choices
The dialog offers three [1]:
| Choice | Pick it when |
|---|---|
| OAuth | Every tool needs the user's account |
| No authentication | The server is open, or every tool is public data |
| OAuth or no authentication | Some tools work anonymously and the rest need sign-in |
Under OAuth, a client ID and secret you enter by hand are used if you provide them. Otherwise ChatGPT registers itself, with a Client ID Metadata Document where the server accepts one and Dynamic Client Registration where it does not [1][2].
Why it works on your machine and fails in ChatGPT
ChatGPT connects from OpenAI's servers. The MCP Inspector, curl and Claude Code all connect from your machine, so they test a different path. The failures on that path have the same shape every time: the server is fine, and nobody outside your network can reach it the way you can.
| Cause | How it looks | Fix |
|---|---|---|
| The hostname resolves to a private address, or only inside your network | No request ever reaches your logs | Serve it from a public host or a tunnel |
| A WAF, CDN or bot rule blocks OpenAI | 403 or 429 in edge logs your app did not write |
Allowlist the ranges in https://openai.com/chatgpt-connectors.json [5], and re-read the file, because they change |
| The URL serves a web page or redirects to one | Creation fails or finds no tools | Use the exact path the MCP endpoint listens on, usually /mcp |
| OAuth discovery fails | "MCP server url does not implement OAuth" | See the next section |
That last message is the one most people on OpenAI's forum hit, including some whose servers did implement OAuth [4]. It means ChatGPT went looking for your authorization server's metadata and did not get what it needed, so the checks below are where to start.
One more that is not an error: an app published inside a Business workspace is deliberately left out of search. Browse to it under apps instead [4].
What a guarded server has to answer
ChatGPT follows the MCP authorization spec, so the handshake starts with a 401 that says where to look [2]:
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Bearer resource_metadata="https://mcp.example.com/.well-known/oauth-protected-resource"
That document names your authorization server, and ChatGPT reads the authorization server's own metadata from there [2]. What it needs to find in it:
code_challenge_methods_supportedcontainingS256. OpenAI is explicit that servers whose metadata omits it are unsupported [2].- A way to register.
"client_id_metadata_document_supported": trueis ChatGPT's preference, and its client ID is thenhttps://chatgpt.com/oauth/client.json[2]. Failing that, aregistration_endpointfor Dynamic Client Registration, which ChatGPT calls once per connection [2]. - The redirect URI on your allowlist.
https://chatgpt.com/connector_platform_oauth_redirectif your authorization server supports issuer identification (RFC 9207), otherwise a per-connectorhttps://chatgpt.com/connector/oauth/{callback_id}. The app's management page shows the exact one [2]. - Tokens minted for your server. ChatGPT sends your MCP server's URL as the
resourceparameter on both the authorization and token requests, and your tokens should carry it as the audience [2].
Check the first two from outside your network:
curl -i https://mcp.example.com/mcp
curl -s https://mcp.example.com/.well-known/oauth-protected-resource
How real guarded servers measure up
We read this metadata from real servers. In our registry census, 263 remote MCP servers asked for credentials, and 186 of their 401s named a protected resource metadata URL. On 9 October 2026 we followed each pointer, and 169 led to a readable authorization server document. Of those 169 [6]:
| What the document offered | Servers |
|---|---|
S256 PKCE |
169 of 169 |
| Dynamic Client Registration | 162 (96%) |
| Client ID Metadata Documents | 33 (20%) |
| Neither way to register | 6 |
So PKCE is almost never the problem: every server that published readable metadata advertised S256. Registration mostly works too, through DCR rather than the metadata documents ChatGPT prefers. The 6 offering neither need a client ID and secret typed into the dialog. The bigger gap sits one step earlier: 77 of the 263 answered 401 without naming a metadata document at all, so ChatGPT has to find it some other way. These are aggregates of public documents each server published about itself, and no server is named. The background on both registration methods is in Dynamic Client Registration and protected resource metadata.
Check it from outside before you paste it
Our MCP connection test makes the call from our server rather than yours, so it answers the part your laptop cannot. It reports a private address, a hostname that does not resolve, a URL that serves a web page instead of an endpoint, a server still on the old SSE transport, a 401 from a server guarding itself, or a full handshake with its tool list, and it writes the result to its own dated URL.
It is not OpenAI's network, so it cannot see a firewall rule aimed at OpenAI's ranges in particular. What it does settle is whether a stranger on the internet gets an MCP answer at all, which rules the address, DNS and discovery rows in or out before you open the dialog. If you are still deciding whether your server should have a public address in the first place, remote MCP server vs stdio covers what that address costs and what it buys. The same steps for Claude are in add a remote MCP server to Claude Desktop.
Sources
- Add custom MCP server, OpenAI developer docs
- Authentication, OpenAI plugin docs
- Developer mode and MCP apps in ChatGPT, OpenAI Help Center
- Not able to add ChatGPT App/MCP Server to ChatGPT, OpenAI Developer Community
- IP egress ranges, OpenAI developer docs
- Dynamic Client Registration, MCP Hunter glossary