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:

  1. 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 Codex

    No MCP servers configured yet. Try `codex mcp add my-tool -- my-command`.
  2. 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

Share this guide