https://api.get-exo.com/mcp/ as a custom connector, using the same OAuth 2.1 server the claude.ai connector uses. The OAuth exchange mints ChatGPT its own Exo API key automatically.
Before you start
- An Exo account allowlisted for the private preview.
- A paid ChatGPT plan: Plus, Pro, Business, Enterprise or Edu. Developer mode is not available on Free.
- Content already in your graph.
searchreads your knowledge graph, so an empty organization returns nothing. See Import your ChatGPT history first.
Set it up
1
Turn on Developer mode
In ChatGPT, open Settings, then Apps and Connectors, then Advanced settings, and turn on Developer mode (beta).
2
Create the connector
Back in Apps and Connectors, click Create and fill in:
3
Sign in and allow
ChatGPT discovers Exo’s OAuth server and opens the Exo sign-in page at
/connect. Sign in with your dashboard account and click Allow.4
Enable it in a chat
Open the composer’s tools menu and enable the Exo connector. The dashboard’s ChatGPT card flips to Connected once Exo receives the first request from the connector’s key, which appears in your key list labeled ChatGPT connector.
What each surface can do
This is the part that surprises people. ChatGPT does not expose the same toolset everywhere.
Deep research and Company knowledge follow OpenAI’s Deep Research contract, which recognises exactly two tools. Exo exposes both, so those surfaces work without Developer mode, but they can only read. Citations link back to the node in your knowledge graph.
The write tools, the ones that let ChatGPT put things into your graph rather than take things out, need Developer mode.
Import your ChatGPT history first
The connector is far more useful when Exo already knows you, and the obvious source is ChatGPT itself.1
Export from ChatGPT
Settings, then Data controls, then Export data. OpenAI emails you a zip.
2
Upload it to Exo
Use the dropzone on the Exo dashboard’s Import page, or send it to the API:
3
Wait for the job
Import is asynchronous. Poll
GET /v1/ingest/{jobId}/status until status is neither pending nor running. This route reports the worker’s own vocabulary, where success is done, so a loop that waits for succeeded never finishes. Full walkthrough in File and transcript imports.When it goes wrong
Next
File and transcript imports
Formats, size behaviour, and how to poll a job to completion.
Retrieving context
What
search and fetch are reading underneath, and the richer call behind them.