ChatGPT MCP Server Setup 2026: Developer Mode, Apps, and Secure Tunnels
How to connect a custom MCP server to ChatGPT in 2026: which plans get developer mode, where the Create / Add custom MCP server button lives, the remote-only rule, Secure MCP Tunnel for private servers, OAuth refresh-token gotchas, and how publishing freezes your tool list.
How do you add an MCP server to ChatGPT? Turn on developer mode, then create a custom app (or plugin) that points at your server's public HTTPS endpoint, usually a URL ending in /mcp. Pick an auth method, let ChatGPT scan the tools, and click Create. There's no config file and no mcpServers JSON block like Cursor or Claude Desktop use. ChatGPT only talks to remote servers, so a local stdio server needs a bridge first. OpenAI's sanctioned option for that is Secure MCP Tunnel.
That last point catches most people. If you've set up MCP in an IDE, you're used to dropping npx some-server into a JSON file and letting the client start the process. ChatGPT doesn't start anything on your machine. It's a web app, and it connects outward to a server that already exists on the internet, or to one it can reach through an OpenAI-hosted tunnel. Everything below follows from that.
Quick reference
| Where you configure it | ChatGPT web UI, not a config file |
| Transport | Remote only: Streamable HTTP at a public HTTPS URL (typically /mcp), or Secure MCP Tunnel |
| Local stdio servers | Not directly. Bridge them with Secure MCP Tunnel (tunnel-client) |
| Who gets full MCP (read + write) | ChatGPT Business, Enterprise, and Edu (beta, per OpenAI's help center) |
| Pro plan | Can connect MCP servers with read/fetch permissions in developer mode |
| Mobile | No. MCP apps are web only |
search / fetch tools required? | No, not anymore |
| Tool list after publishing | Frozen snapshot. Admins must refresh it to pick up changes |
Prerequisites
tunnel-client can reach.npx @modelcontextprotocol/inspector@latest
OpenAI's own plugin docs tell you to start here. List the tools, call each one with realistic input, a missing ID, and an empty result, and confirm the schemas validate. If Inspector can't connect, ChatGPT won't either, and Inspector's errors are much easier to read.
Step 1: Turn on developer mode
Where the toggle lives depends on your plan, and the paths below come straight from OpenAI's help center article on developer mode.
Business. Only admins and owners can use developer mode, and each admin has to turn it on for themselves. The toggle doesn't apply workspace-wide. Go to Settings → Apps → Advanced settings → Developer mode, or enable it while creating an app from Workspace settings → Apps → Create.
Enterprise / Edu. An admin first grants access under Workspace Settings → Permissions & Roles → Connected Data (the "Developer mode / Create custom MCP connectors" control), and can use role-based access control to limit it to certain people. Each enabled user then flips it on under Settings → Apps → Advanced Settings.
Pro. You can build with the Apps SDK and connect MCP servers with read/fetch permissions in developer mode. Full MCP with write and modify actions is limited to Business and Enterprise/Edu for now.
If you can't find any of these menus, you're most likely on a plan without developer mode, or you're a non-admin on Business. It isn't a browser problem.
Step 2: Create the app and point it at your server
From your user settings (or Workspace settings, if you're an admin), go to Apps → Create and fill in:
1. Name and description. Users will see these, and the model uses them to decide when to reach for your server. Write them like tool documentation, not marketing copy.
2. MCP server URL. The full Streamable HTTP endpoint, including the path. For most servers that's something like https://mcp.yourcompany.com/mcp. A bare domain with no path is the most common reason the scan finds nothing.
3. Authentication. Choose whatever the server actually implements. More on OAuth below.
4. Scan Tools. ChatGPT connects, runs the MCP handshake, and lists the tools it finds. With OAuth, you'll go through the authorization prompt first.
5. Create.
Your new app shows up under Settings → Apps → Enabled Apps with a Dev label next to its name, and admins also see it as a draft under Workspace Settings → Apps → Drafts.
The "Plugins" version of the same flow
OpenAI's developer docs describe a newer path built around plugins: go to ChatGPT Plugins, click the plus button, then Add custom MCP server. Under Connection, either enter the public URL (with the /mcp path) or choose Tunnel. Set up authentication, read the risk warning, select I understand and want to continue, and then Create as a plugin. Review the tools it discovered before going further.
Which label you see (Apps or Plugins) depends on where your workspace is in OpenAI's rollout. The underlying requirement is the same either way: a reachable remote MCP endpoint plus working auth.
Step 3: Test it in a chat
Start a new conversation and select the app from the tools menu, or @-mention it in the prompt box. Then go through a short test set on purpose rather than poking at it randomly:
App selection applies to the message where you pick it, not the whole conversation. If a later turn needs fresh data from the server, mention the app again.
Write actions come with guardrails. ChatGPT may ask for confirmation depending on the app's permissions and how risky the action looks, and OpenAI says some especially risky actions may be blocked outright instead of offered for approval. Tell testers to expect this so they don't report it as a bug.
Step 4: Connect a local or private server with Secure MCP Tunnel
ChatGPT won't connect to localhost, and you shouldn't put an internal database server on the public internet just to try it out. Secure MCP Tunnel is OpenAI's answer to this:
1. Create a tunnel in the OpenAI Platform's tunnel settings (platform.openai.com/settings/organization/tunnels). You get a tunnel_id.
2. Run tunnel-client inside the network that can reach your MCP server. It makes outbound HTTPS calls to api.openai.com:443, so you don't open any inbound port.
3. Point tunnel-client at the private server. It can reach servers over stdio or HTTP, which is how a stdio-only server ends up usable from ChatGPT.
4. In ChatGPT, choose Tunnel as the connection type and select the tunnel or paste its tunnel_id.
tunnel-client long-polls for queued requests, passes each JSON-RPC message to your server, and posts the response back. That means the daemon has to stay running, not just during setup but for every tool call. If it stops, the app goes quiet. Start with tunnel-client help quickstart, from OpenAI's open-source tunnel-client repository.
For quick throwaway testing, OpenAI's docs also accept a development tunnel or another HTTPS forwarding service. That's fine for a demo, but it doesn't replace the public HTTPS endpoint you'd need to submit a plugin, and it puts your server on the public internet.
Step 5: Publish to the workspace (admins)
Only admins and owners can publish. Go to Workspace settings → Apps → Drafts → Publish and read the safety warnings, especially for write actions. On Enterprise/Edu, Configure Actions lets you deselect individual tools and Configure Access limits the app to certain groups before it goes live.
Once published, the app appears in the workspace's approved list with a custom label. Here's the part that causes confusion months later:
The tool list freezes when you publish. ChatGPT keeps using a snapshot of the tools and inputs from approval time. If your server team renames a tool or changes a required parameter, nothing updates on its own, and calls that no longer match the snapshot can fail. Backward-compatible changes, like adding an optional parameter, may keep working. Breaking changes need an admin to hit Refresh in the app's settings. New actions come in deselected, and changed actions show up as a diff. ChatGPT doesn't warn anyone when this happens, so put "refresh ChatGPT app" on the release checklist for any change to the MCP server.
OAuth: the refresh-token trap
If your server uses OAuth, everything can work on day one and then break once the original access token expires. OpenAI's help center explains why: if your identity provider doesn't issue refresh tokens, ChatGPT can't renew access and users have to re-authorize.
Here's the fix. With OpenID Connect providers, the standard way to get refresh tokens is the offline_access scope. Check that your provider's discovery document (.well-known/openid-configuration or .well-known/oauth-authorization-server) lists offline_access, or your provider's equivalent, in scopes_supported. If it doesn't, turn on offline or refresh access in the provider's admin console, then recreate the app so ChatGPT fetches the new metadata. Editing the existing app won't help. Our MCP authentication guide covers the server side of OAuth in more depth.
What ChatGPT's MCP support doesn't do (yet)
None of this means you have to ship search and fetch tools. That requirement is gone, and OpenAI's FAQ says so directly.
Troubleshooting
"Scan Tools" finds nothing or errors out. Check the URL path first (/mcp vs. /sse vs. a bare domain), then confirm the server speaks Streamable HTTP rather than only stdio. Run the same URL through MCP Inspector. If Inspector fails too, the problem is on the server side. OpenAI's plugin docs also point to the API Playground (Tools → Add → MCP Server) when you want to see raw request and response logs.
It worked yesterday, now every call fails. Two likely causes: an expired OAuth grant with no refresh token (see above), or a server change that broke the frozen tool snapshot. Ask an admin to refresh the app's actions.
Tunnel app shows no tools. Make sure tunnel-client is running and healthy before you create or verify the connector, and that the tunnel belongs to the right workspace. A tunnel that's set up correctly but has a stopped daemon looks exactly like a broken server.
The developer mode toggle is missing. On Business, only admins and owners get it. On Enterprise/Edu, an admin has to grant you access under Permissions & Roles first. On Free and Plus, look for a different client. Codex CLI, Claude Desktop, and Cursor all support local servers.
ChatGPT keeps choosing the wrong tool. Tighten the tool names and descriptions on the server, deploy, then refresh the app's metadata. The model picks tools from those descriptions, and vague ones lead to wrong picks.
Frequently Asked Questions
Can ChatGPT connect to a local MCP server? Not directly. ChatGPT connects to remote MCP servers. For a server on your laptop, on-premises, or on a private network, OpenAI's supported route is Secure MCP Tunnel: you run tunnel-client inside your network, and it relays requests over an outbound connection without exposing the server publicly.
Which ChatGPT plans support custom MCP servers? Business, Enterprise, and Edu get full MCP support, including write actions, in beta. Pro users can connect MCP servers with read/fetch permissions in developer mode. MCP apps are web only.
Do I need to implement search and fetch tools for ChatGPT? No. OpenAI's help center says search and fetch are no longer required. They only matter if you want the app to work with company knowledge or deep research, which use read/fetch access.
Why didn't ChatGPT pick up the new tool we added to our server? Published apps use a frozen snapshot of the tool list from approval time. An admin has to refresh the app's actions in workspace settings. New actions arrive disabled by default, and changes to existing ones show as a diff.
Is ChatGPT's MCP setup the same as Codex CLI's? No. Codex CLI configures servers in a TOML file (~/.codex/config.toml) and can launch local stdio servers itself. ChatGPT is configured in the web UI and only reaches remote endpoints or tunnels. See our Codex CLI MCP setup guide for the terminal side.
Related guides
Official docs cited
Related guides
- Chroma MCP Server Cursor IDE Setup (2026): uvx Install, --client-type & Persistent Storage
- Chrome DevTools MCP Server Cursor IDE Setup (2026): Let Your AI See What DevTools Sees
- CircleCI MCP Server Cursor IDE Setup 2026: API Token Config for Pipelines & Build Failures
- Claude Code MCP Server Setup 2026: claude mcp add, Scopes, and .mcp.json