What ChatGPT needs from your server
- A public HTTPS MCP endpoint that answers Streamable HTTP.
- OAuth sign-in when the tools act for a user. ChatGPT discovers the authorization server from the
401challenge and registers itself. With"connector": true, DenkOps provides that whole flow, see OAuth for MCP servers. - Tool annotations. ChatGPT treats tools differently depending on whether they only read or also write. Give every tool a
readOnlyHintordestructiveHint, and check them with the MCP tool linter.
Develop, then publish
- Build the MCP server in Bun or Python and deploy it with "deploy on DenkOps".
- In ChatGPT, add your server URL as a custom MCP server and try the tools in a real chat.
- Fix what you see in the logs: every tool call shows up in live logs and traces, which your coding agent can read too.
- When it works, submit the app with the same URL. Nothing about hosting changes.
The steps for adding a URL in ChatGPT and other clients are collected in the config generator, and in connect your MCP server to ChatGPT.
Why an always-on slot
ChatGPT users expect an answer in seconds. A slot never cold starts, keeps caches warm on its /persist disk and runs jobs as long as they need.