Add an MCP Server to ChatGPT: Custom Connectors and Fixes | MCP Hunter

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.

MCP Hunter team 8 min read

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 curl on 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 S256 in 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

  1. Open chatgpt.com/plugins on the web [1].
  2. Click +, then Add custom MCP server.
  3. Enter the server's URL, for example https://mcp.example.com/mcp.
  4. Pick an authentication option (the next section).
  5. 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_supported containing S256. OpenAI is explicit that servers whose metadata omits it are unsupported [2].
  • A way to register. "client_id_metadata_document_supported": true is ChatGPT's preference, and its client ID is then https://chatgpt.com/oauth/client.json [2]. Failing that, a registration_endpoint for Dynamic Client Registration, which ChatGPT calls once per connection [2].
  • The redirect URI on your allowlist. https://chatgpt.com/connector_platform_oauth_redirect if your authorization server supports issuer identification (RFC 9207), otherwise a per-connector https://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 resource parameter 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

  1. Add custom MCP server, OpenAI developer docs
  2. Authentication, OpenAI plugin docs
  3. Developer mode and MCP apps in ChatGPT, OpenAI Help Center
  4. Not able to add ChatGPT App/MCP Server to ChatGPT, OpenAI Developer Community
  5. IP egress ranges, OpenAI developer docs
  6. Dynamic Client Registration, MCP Hunter glossary