Skip to main content
The Codex CLI and the Codex IDE extension share ~/.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

With 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 export in your profile is not enough. Write the key to Codex’s durable environment file instead.
Both snippets remove any previous 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

Your Codex build predates native Streamable HTTP support. Update Codex, or add this line at the top of ~/.codex/config.toml:
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.
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.
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.