~/.codex/config.toml, so a single setup covers both. They reach the same https://api.get-exo.com/mcp/ endpoint Claude Code uses, authenticated with a static Exo API key.
This page covers the Codex CLI and the Codex IDE extension. Codex in the browser does not read
config.toml and cannot be configured this way. For ChatGPT itself, see ChatGPT connector.Before you start
- An Exo account allowlisted for the private preview.
- An Exo API key. Mint one in the dashboard under Import, then Codex, or with
POST /v1/keys. See Authentication. - Node and the Codex CLI installed, or the Codex IDE extension.
The short version
EXO_API_KEY stored in ${CODEX_HOME:-~/.codex}/.env, not just exported in your shell. The next section explains why that distinction matters.
Set it up
1
Mint a connection key
In the dashboard, open Import, then Codex, and click Generate connection key. Copy it. The plaintext is shown once.
2
Store the key where Codex will actually find it
Codex Desktop and IDE sessions do not reliably inherit environment variables from the shell that launched them, so an Both snippets remove any previous
export in your profile is not enough. Write the key to Codex’s durable environment file instead.- Windows PowerShell
- bash and zsh
EXO_API_KEY line before appending, so re-running them rotates the key rather than stacking duplicates.3
Register the server
The plugin path, which persists across Codex tasks:Or register the endpoint directly:Only the credential needs to be stored durably. The registration itself persists on its own.
4
Restart Codex fully, then verify
Start a new task and run
/mcp. Exo should be listed with its tools: exo_context, exo_capture, search, fetch and the rest.The dashboard’s Codex card flips to Connected after the first authenticated request from that key, and the key list shows a last-used time. That is the check that cannot be faked by a config file.When it goes wrong
`missing field 'command'` when adding a url server
`missing field 'command'` when adding a url server
Your Codex build predates native Streamable HTTP support. Update Codex, or add this line at the top of
~/.codex/config.toml:401 right after a setup you are sure is correct
401 right after a setup you are sure is correct
Two usual causes. First, the URL lost its trailing slash: a bare
/mcp redirects, and the redirect drops the Authorization header behind a TLS-terminating proxy. Re-add with /mcp/.Second, the key is not actually reaching the process. Check the dashboard key list. A key that reads Never used was never sent, which almost always means it went into a shell profile instead of ${CODEX_HOME:-~/.codex}/.env.OAuth authenticates but no tools appear
OAuth authenticates but no tools appear
Codex can speak OAuth against Exo’s OAuth 2.1 server with
auth = "oauth" and codex mcp login, and Exo accepts it. Codex’s own OAuth client has known upstream issues though: a missing User-Agent breaks discovery behind some proxies, and the desktop app can authenticate and then import no tools. The static-key path on this page is the supported route.It connects, but Exo knows nothing about you
It connects, but Exo knows nothing about you
Your organization has no content yet. Every recall surface returns empty collections until content lands and the background cognition cycle runs. See How a memory is made, then bring data in.
Ingest your Codex history
Codex writes full session transcripts, called rollouts, to~/.codex/sessions/YYYY/MM/DD/rollout-*.jsonl. The exo CLI reads them and loads them into your graph:
--source all covers Claude Code and Codex in one run. Re-runs are dedup safe, because each event carries a stable dedup key, so a second backfill over the same transcripts does not duplicate anything.
Requires an exo CLI release with Codex support. See Coding session history for what the pipeline does with the transcripts once they land.
Next
Coding session history
What backfill sends, and how to watch the graph build.
Conditioning your own agent
Inject an identity-conditioned prompt into any model, not only Codex.