Skip to main content
MCP server Codex reaches Keenable two ways: the plugin listing it shares with ChatGPT, or an MCP entry in config.toml. The MCP route takes your own API key, so it is the one to use on a paid tier — but it needs a second step that is easy to miss.
Adding the server is not enough. Codex ships its own web search, enabled by default, and it will keep reaching for that instead of Keenable — so the tools look connected in /mcp yet never get called unless you name them in the prompt. Turn the built-in search off and the problem goes away.

Install

Add the server

Add the following to ~/.codex/config.toml:
The key travels in the X-API-Key header, not an environment variable — Codex reads nothing from KEENABLE_API_KEY for a remote server. Create one in the console; see Authentication. Omit the http_headers line and the server still answers, on the shared public tier at lower rate limits. Codex enables web search by default for local chats, in cached mode — results come from an index OpenAI maintains rather than a live fetch. Setting web_search to disabled removes that tool entirely, and with nothing to fall back on Codex uses search_web_pages for every lookup. It is a top-level key, so it has to sit above the [mcp_servers.keenable] line. A bare key written after a table header belongs to that table, which would make it mcp_servers.keenable.web_search — not a setting Codex looks at, and it fails quietly. The finished file:
The mode key takes four values: cached (the default), indexed, live, and disabled. A full-access sandbox — --yolo or danger-full-access — silently upgrades cached to live, so a permissive session searches the live web whether or not you asked for it.Don’t confuse the mode with the [tools.web_search] table, which carries settings like allowed_domains and context_size and does not switch the tool off. Older releases used [tools] web_search = true and then [features] web_search_request = true; both are deprecated in favour of the top-level key.
Want to keep the built-in tool for other work? Scope the change to a profile instead, and invoke it with codex --profile research. Here the key belongs inside the table, which is the one place nesting it is correct:

Tell the agent which tool to use

Codex reads AGENTS.md for project instructions — ~/.codex/AGENTS.md applies everywhere. Naming the tools there is worth doing even with the built-in search disabled, because Codex loads MCP tool schemas on demand: it sees a tool’s name and description upfront and fetches the rest only when it decides the tool is relevant, so that decision is made on the description alone.

Verify

Run /mcp in the TUI to confirm the server connected and both tools are listed, then ask something that needs the live web. Codex should call search_web_pages without being told to.
Still going around Keenable on a recent Codex? Check codex --version. Releases before v0.121.0 registered on-demand tool names in a format their own lookup table did not match, which produced exactly this symptom for every MCP server, not just this one.

No config file

Keenable is also published in OpenAI’s Plugins Directory, the catalog Codex shares with ChatGPT — OAuth sign-in, nothing to paste. See ChatGPT and Codex. The built-in search competes there too, so the web_search change above is worth making either way. Full MCP server reference