An MCP integration can remain saved in Codex while it is disabled or unavailable. The server inventory identifies the configured local launchers and remote endpoints, including entries that will not load in a session.
The inventory depends on the Codex configuration environment and current project. A custom CODEX_HOME or a trusted project's configuration can change which entries appear, so the relevant starting point is the project where you normally use those servers with an installed Codex CLI.
A listed server is a configuration entry, rather than a connection or tool-health result. Its enabled state and authentication column describe settings; they do not establish that the launcher works, the endpoint responds, or a required credential is available.
Steps to list Codex MCP servers:
- List the configured MCP servers from your usual Codex project.
Server listings can expose internal URLs, launch arguments, and environment settings. Output containing sensitive values belongs in private troubleshooting records.
$ codex mcp list Name Command Args Env Cwd Status Auth local-tools node local-mcp.js - - enabled Unsupported Name Url Bearer Token Env Var Status Auth example-docs https://mcp.example.com/mcp MCP_TOKEN enabled Bearer token private-docs https://mcp.example.com/private - disabled Unsupported
The first table contains local stdio launchers; the second contains streamable HTTP endpoints. The names and addresses depend on your saved configuration. enabled entries are eligible to load, while disabled entries remain listed without being enabled for sessions. Bearer token identifies a configured token source, even if its environment variable is unset. Unsupported is not a server-health verdict.
An empty configuration returns the message below instead of server rows. An unexpected empty list can indicate a different configuration environment or project.
Related: How to add a URL-based MCP server to CodexNo MCP servers configured yet. Try `codex mcp add my-tool -- my-command`.
- Inspect the inventory as JSON for explicit transport and enabled fields.
$ codex mcp list --json [ { "name": "example-docs", "enabled": true, "disabled_reason": null, "transport": { "type": "streamable_http", ##### snipped ##### { "name": "local-tools", "enabled": true, "disabled_reason": null, "transport": { "type": "stdio", ##### snipped ##### { "name": "private-docs", "enabled": false, ##### snipped ##### ]The shortened output shows the same three names as the tables. Each complete object contains its transport settings; transport.type distinguishes stdio from streamable_http, and enabled: false identifies a disabled entry. An empty inventory returns []. A missing name or unexpected target means the resolved configuration differs from the server inventory you expected. Details and removal use the exact saved name.
Related: How to get Codex MCP server details
Related: How to remove a Codex MCP server