How to build a custom ChatGPT plugin for your company
How companies build a custom ChatGPT plugin today: an MCP server, OpenAI's plugin docs, which ChatGPT plans allow custom MCP servers, admin publishing and RBAC, and testing before rollout.
Updated
What OpenAI calls it today
OpenAI's naming has moved several times, so it is worth being precise. The current developer documentation is titled Plugins, and describes building and publishing plugins with skills, MCP servers, and optional UI. The pages at the older Apps SDK address now lead to these Plugins docs. In the OpenAI Help Center, the related admin page refers to custom MCP server connections and MCP apps, and the admin console still has a Manage Legacy Apps entry under Plugins.
For a company that wants ChatGPT to reach internal systems, the part that matters is the MCP server. OpenAI's docs describe the MCP server as what gives a plugin tools and access to external systems. Skills and a custom interface are optional extras. These are not the original 2023 ChatGPT plugins.
Which plans allow it
OpenAI's Help Center says custom MCP server connections and full MCP support are available for ChatGPT Business and Enterprise/Edu customers on ChatGPT web. Permissions differ by plan:
- Business: only admins and owners can create and publish plugins for custom MCP servers.
- Enterprise and Edu: admins and owners can create and test connections, and can use role-based access control to let selected members create connections. Only admins and owners can publish to the workspace.
- The workspace permission to look for is called Create plugins with MCPs.
- OpenAI's plugins page says Enterprise and Edu administrators must enable plugins in workspace settings before users can connect them.
Step 1: design the tools
Start from what people need to get done, not from your API. OpenAI's planning docs recommend an inventory of use cases and a focused tool surface built from it. Each tool should do one job with a strict input schema and a description that says when to use it.
Label each tool honestly. OpenAI documents three annotations: readOnlyHint only when the tool cannot change state, destructiveHint when a tool can cause outcomes that are hard to reverse, and openWorldHint when it reaches the public internet or open-ended external entities. OpenAI states these help ChatGPT choose confirmation behavior but do not replace authorization, validation, or confirmation in your server.
If you want the plugin to feed ChatGPT's company knowledge feature, OpenAI says to implement the standard search and fetch tool schemas and mark other read-only tools as read-only.
Step 2: build, authenticate, and host
Build the server with an official MCP SDK and serve it over streamable HTTP, typically at /mcp. For anything that exposes customer-specific data or write actions, OpenAI's authentication guide says to authenticate users, using an OAuth 2.1 flow that follows the MCP authorization specification. Your server hosts protected resource metadata, your identity provider publishes OAuth metadata, and ChatGPT registers as a client using a client ID metadata document, dynamic registration, or a predefined client.
For hosting, ChatGPT needs a public HTTPS endpoint or a Secure MCP Tunnel. OpenAI describes the tunnel as an outbound-only connection from inside your network, so a private server can be used without opening inbound firewall ports. It supports private connections, not public directory submission.
Step 3: connect, test, and publish
OpenAI's current steps: go to ChatGPT Plugins, select the plus button, then Add custom MCP server. Enter a name and description, choose a public URL or a tunnel, configure authentication, accept the risk warning, select Create as a plugin, and review the tools ChatGPT discovered. The Help Center notes you no longer need to turn on Developer Mode first in the current Plugins experience.
Then test. OpenAI recommends an evaluation set with direct requests, indirect requests for the same goal, follow-ups that reuse earlier results, write actions that need confirmation, and requests that should not call any tool. Record the tool chosen, the arguments, and the result, and rerun the set whenever you change names, descriptions, or schemas.
When it is ready, an admin publishes it to the workspace and chooses which roles get access. OpenAI says workspace-published plugins stay inside your workspace and are not added to the public Plugins Directory. For oversight, OpenAI's plugins page describes compliance logs covering tool calls and files accessed.
Common mistakes to avoid
The first version of a company plugin usually fails in predictable ways. Most of them are design problems, not ChatGPT problems, and are cheaper to avoid than to fix after rollout.
- Mirroring every API endpoint as a tool. ChatGPT then has to choose among many similar tools and often picks the wrong one.
- Using one shared service account, so every employee sees the same data regardless of their role.
- Marking a tool read-only when it can change state. OpenAI says readOnlyHint should be true only when the tool cannot.
- Returning huge results. Cap rows and fields so answers stay focused.
- Testing only happy paths. Include requests the plugin should refuse, and follow-ups that reuse earlier results.
- Publishing to the whole workspace at once instead of to a pilot role first.
Build it once for ChatGPT and Claude
Because the plugin is an MCP server, the same server can usually serve Claude as a custom connector too. Keep access rules in the server, and test in each assistant. Prestyj's custom ChatGPT plugin work follows these steps for your internal systems, including the admin setup and role-based rollout in your workspace.
Sources
- OpenAI Help: Connecting custom MCP servers in ChatGPT
- OpenAI: Plugins in ChatGPT
- OpenAI: Build an MCP server
- OpenAI: Authentication for plugin MCP servers
- OpenAI: Connect and test your plugin
- OpenAI: Secure MCP Tunnel
Plan rules and product names from Anthropic and OpenAI change often. Check the linked documentation for your plan before you plan a rollout.