Skip to content

GPT-5.6-terra does not receive callable MCP tools although the server is connected and works with other models #35153

Open

Description

@kantrveysel

What version of Codex CLI is running?

codex-cli 0.145.0

What subscription do you have?

Pro

Which model were you using?

gpt-5.6-terra, gpt-5.6-sol

What platform is your computer?

Linux 7.1.4-1-cachyos x86_64

What terminal emulator and version are you using (if applicable)?

Konsole

Codex doctor report

{
  "schemaVersion": 1,
  "generatedAt": "1784890185s since unix epoch",
  "overallStatus": "warning",
  "codexVersion": "0.145.0",
  "checks": {
    "app_server.status": {
      "id": "app_server.status",
      "category": "app-server",
      "status": "ok",
      "summary": "background server is not running",
      "details": {
        "control socket": "/home/deniz/.codex/app-server-control/app-server-control.sock",
        "daemon state dir": "/home/deniz/.codex/app-server-daemon",
        "mode": "ephemeral",
        "pid file": "/home/deniz/.codex/app-server-daemon/app-server.pid (missing)",
        "settings": "/home/deniz/.codex/app-server-daemon/settings.json (missing)",
        "status": "not running",
        "update-loop pid file": "/home/deniz/.codex/app-server-daemon/app-server-updater.pid (missing)"
      },
      "remediation": null,
      "durationMs": 0
    },
    "auth.credentials": {
      "id": "auth.credentials",
      "category": "auth",
      "status": "ok",
      "summary": "auth is configured",
      "details": {
        "auth file": "/home/deniz/.codex/auth.json",
        "auth storage mode": "File",
        "stored API key": "false",
        "stored ChatGPT tokens": "true",
        "stored agent identity": "false",
        "stored auth mode": "chatgpt"
      },
      "remediation": null,
      "durationMs": 0
    },
    "config.load": {
      "id": "config.load",
      "category": "config",
      "status": "ok",
      "summary": "config loaded",
      "details": {
        "CODEX_HOME": "/home/deniz/.codex",
        "config.toml": "/home/deniz/.codex/config.toml",
        "config.toml parse": "ok",
        "cwd": "/home/deniz/Masaüstü/projects/plotune-nexus",
        "enabled feature flags": "shell_tool, unified_exec, shell_snapshot, code_mode_host, terminal_resize_reflow, sqlite, hooks, enable_request_compression, multi_agent, apps, tool_search_always_defer_mcp_tools, tool_suggest, plugins, in_app_browser, browser_use, browser_use_full_cdp_access, browser_use_external, computer_use, remote_plugin, plugin_sharing, image_generation, resize_all_images, skill_mcp_dependency_install, skill_search, mentions_v2, steer, guardian_approval, goals, collaboration_modes, tool_call_mcp_elicitation, auth_elicitation, personality, fast_mode, tui_app_server, remote_compaction_v2, workspace_dependencies",
        "feature flag overrides": "none",
        "feature flags enabled": "36",
        "log dir": "/home/deniz/.codex/log",
        "mcp servers": "1",
        "model": "gpt-5.6-terra",
        "model provider": "openai",
        "sqlite home": "/home/deniz/.codex"
      },
      "remediation": null,
      "durationMs": 0
    },
    "git.environment": {
      "id": "git.environment",
      "category": "git",
      "status": "ok",
      "summary": "git version 2.55.0",
      "details": {
        ".git entry": "directory",
        "PATH git #1": "/usr/bin/git",
        "PATH git #2": "/bin/git",
        "PATH git entries": "2",
        "git branch": "main",
        "git build options": "git version 2.55.0; cpu: x86_64; built from commit: e9019fcafe0040228b8631c30f97ae1adb61bcdc; sizeof-long: 8; sizeof-size_t: 8; shell-path: /bin/sh; rust: enabled; feature: fsmonitor--daemon; gettext: enabled; libcurl: 8.21.0; OpenSSL: OpenSSL 3.6.3 9 Jun 2026; zlib-ng: 2.3.3; SHA-1: SHA1_DC; SHA-256: SHA256_BLK; default-ref-format: files; default-hash: sha1",
        "git exec path": "/usr/lib/git-core",
        "git version": "git version 2.55.0",
        "repo detected": "true",
        "repo root": "/home/deniz/Masaüstü/projects/plotune-nexus",
        "selected git": "/usr/bin/git"
      },
      "remediation": null,
      "durationMs": 11
    },
    "installation": {
      "id": "installation",
      "category": "install",
      "status": "ok",
      "summary": "installation looks consistent",
      "details": {
        "PATH codex #1": "/home/deniz/.nvm/versions/node/v25.9.0/bin/codex",
        "current executable": "/home/deniz/.nvm/versions/node/v25.9.0/lib/node_modules/@openai/codex/node_modules/@openai/codex-linux-x64/vendor/x86_64-unknown-linux-musl/bin/codex",
        "install context": "npm (package /home/deniz/.nvm/versions/node/v25.9.0/lib/node_modules/@openai/codex/node_modules/@openai/codex-linux-x64/vendor/x86_64-unknown-linux-musl, bin /home/deniz/.nvm/versions/node/v25.9.0/lib/node_modules/@openai/codex/node_modules/@openai/codex-linux-x64/vendor/x86_64-unknown-linux-musl/bin, resources /home/deniz/.nvm/versions/node/v25.9.0/lib/node_modules/@openai/codex/node_modules/@openai/codex-linux-x64/vendor/x86_64-unknown-linux-musl/codex-resources, path /home/deniz/.nvm/versions/node/v25.9.0/lib/node_modules/@openai/codex/node_modules/@openai/codex-linux-x64/vendor/x86_64-unknown-linux-musl/codex-path)",
        "managed by bun": "false",
        "managed by npm": "true",
        "managed by pnpm": "false",
        "managed package root": "/home/deniz/.nvm/versions/node/v25.9.0/lib/node_modules/@openai/codex",
        "npm update target": "/home/deniz/.nvm/versions/node/v25.9.0/lib/node_modules/@openai/codex"
      },
      "remediation": null,
      "durationMs": 55
    },
    "mcp.config": {
      "id": "mcp.config",
      "category": "mcp",
      "status": "ok",
      "summary": "MCP configuration is locally consistent",
      "details": {
        "configured servers": "1",
        "disabled servers": "0",
        "streamable_http servers": "1"
      },
      "remediation": null,
      "durationMs": 28
    },
    "network.env": {
      "id": "network.env",
      "category": "network",
      "status": "ok",
      "summary": "network-related environment looks readable",
      "details": {
        "proxy env vars": "none"
      },
      "remediation": null,
      "durationMs": 0
    },
    "network.provider_reachability": {
      "id": "network.provider_reachability",
      "category": "reachability",
      "status": "ok",
      "summary": "active provider endpoints are reachable over HTTP",
      "details": {
        "ChatGPT base URL": "https://chatgpt.com/backend-api/ reachable (HTTP 404)",
        "reachability mode": "ChatGPT auth"
      },
      "remediation": null,
      "durationMs": 199
    },
    "network.websocket_reachability": {
      "id": "network.websocket_reachability",
      "category": "websocket",
      "status": "ok",
      "summary": "Responses WebSocket handshake succeeded",
      "details": {
        "DNS": "2 IPv4, 2 IPv6, first IPv4",
        "auth mode": "chatgpt",
        "connect timeout": "15000 ms",
        "endpoint": "wss://chatgpt.com/backend-api/<redacted>",
        "handshake result": "HTTP 101 Switching Protocols",
        "model provider": "openai",
        "models etag present": "true",
        "provider name": "OpenAI",
        "proxy env vars": "none",
        "reasoning header": "false",
        "server model present": "false",
        "supports websockets": "true",
        "wire API": "responses"
      },
      "remediation": null,
      "durationMs": 681
    },
    "runtime.provenance": {
      "id": "runtime.provenance",
      "category": "runtime",
      "status": "ok",
      "summary": "running npm on linux-x86_64",
      "details": {
        "commit": "unknown",
        "current executable": "/home/deniz/.nvm/versions/node/v25.9.0/lib/node_modules/@openai/codex/node_modules/@openai/codex-linux-x64/vendor/x86_64-unknown-linux-musl/bin/codex",
        "install method": "npm (package /home/deniz/.nvm/versions/node/v25.9.0/lib/node_modules/@openai/codex/node_modules/@openai/codex-linux-x64/vendor/x86_64-unknown-linux-musl, bin /home/deniz/.nvm/versions/node/v25.9.0/lib/node_modules/@openai/codex/node_modules/@openai/codex-linux-x64/vendor/x86_64-unknown-linux-musl/bin, resources /home/deniz/.nvm/versions/node/v25.9.0/lib/node_modules/@openai/codex/node_modules/@openai/codex-linux-x64/vendor/x86_64-unknown-linux-musl/codex-resources, path /home/deniz/.nvm/versions/node/v25.9.0/lib/node_modules/@openai/codex/node_modules/@openai/codex-linux-x64/vendor/x86_64-unknown-linux-musl/codex-path)",
        "platform": "linux-x86_64",
        "version": "0.145.0"
      },
      "remediation": null,
      "durationMs": 0
    },
    "runtime.search": {
      "id": "runtime.search",
      "category": "search",
      "status": "ok",
      "summary": "search is OK (bundled)",
      "details": {
        "search command": "/home/deniz/.nvm/versions/node/v25.9.0/lib/node_modules/@openai/codex/node_modules/@openai/codex-linux-x64/vendor/x86_64-unknown-linux-musl/codex-path/rg",
        "search command readiness": "file exists",
        "search provider": "bundled"
      },
      "remediation": null,
      "durationMs": 0
    },
    "sandbox.helpers": {
      "id": "sandbox.helpers",
      "category": "sandbox",
      "status": "ok",
      "summary": "sandbox configuration is readable",
      "details": {
        "approval policy": "OnRequest",
        "codex-linux-sandbox helper": "/home/deniz/.codex/tmp/arg0/codex-arg0C5TzFB/codex-linux-sandbox",
        "execve wrapper helper": "/home/deniz/.codex/tmp/arg0/codex-arg0C5TzFB/codex-execve-wrapper",
        "filesystem sandbox": "restricted",
        "network sandbox": "restricted"
      },
      "remediation": null,
      "durationMs": 0
    },
    "state.paths": {
      "id": "state.paths",
      "category": "state",
      "status": "ok",
      "summary": "state paths and databases are inspectable",
      "details": {
        "CODEX_HOME": "/home/deniz/.codex (dir)",
        "active rollout files": "82 files, 38100026 total bytes, 464634 average bytes",
        "archived rollout files": "0 files, 0 total bytes, 0 average bytes",
        "goals DB": "/home/deniz/.codex/goals_1.sqlite (file)",
        "goals DB integrity": "ok",
        "log DB": "/home/deniz/.codex/logs_2.sqlite (file)",
        "log DB integrity": "ok",
        "log dir": "/home/deniz/.codex/log (missing)",
        "memories DB": "/home/deniz/.codex/memories_1.sqlite (file)",
        "memories DB integrity": "ok",
        "sqlite home": "/home/deniz/.codex (dir)",
        "state DB": "/home/deniz/.codex/state_5.sqlite (file)",
        "state DB integrity": "ok",
        "thread history DB": "/home/deniz/.codex/thread_history_1.sqlite (missing)",
        "thread history DB integrity": "skipped (missing)"
      },
      "remediation": null,
      "durationMs": 83
    },
    "state.rollout_db_parity": {
      "id": "state.rollout_db_parity",
      "category": "threads",
      "status": "ok",
      "summary": "rollout files and state DB thread inventory agree",
      "details": {
        "default model provider": "openai",
        "rollout DB active files": "82",
        "rollout DB active rows": "82",
        "rollout DB archive mismatches": "0",
        "rollout DB archived files": "0",
        "rollout DB archived rows": "0",
        "rollout DB duplicate DB paths": "0",
        "rollout DB duplicate rollout thread ids": "0",
        "rollout DB malformed file names": "0",
        "rollout DB missing active rows": "0",
        "rollout DB missing archived rows": "0",
        "rollout DB model providers": "openai=82",
        "rollout DB rows": "82",
        "rollout DB scan cap reached": "false",
        "rollout DB scan errors": "0",
        "rollout DB sources": "subagent:thread_spawn=70, cli=6, subagent:other=6",
        "rollout DB stale rows": "0"
      },
      "remediation": null,
      "durationMs": 38
    },
    "system.environment": {
      "id": "system.environment",
      "category": "system",
      "status": "ok",
      "summary": "OS language en-GB",
      "details": {
        "EDITOR": "not set",
        "LANG": "en_GB.UTF-8",
        "LESS": "set",
        "PAGER": "set",
        "VISUAL": "not set",
        "os": "CachyOS Linux Rolling Release [64-bit]",
        "os language": "en-GB",
        "os type": "CachyOS Linux",
        "os version": "Rolling Release"
      },
      "remediation": null,
      "durationMs": 5
    },
    "terminal.env": {
      "id": "terminal.env",
      "category": "terminal",
      "status": "warning",
      "summary": "width 63 cols - output may wrap (recommended >=80)",
      "details": {
        "COLORFGBG": "15;0",
        "COLORTERM": "truecolor",
        "DISPLAY": "present",
        "WAYLAND_DISPLAY": "present",
        "color output": "enabled",
        "effective locale": "en_GB.UTF-8",
        "stderr is terminal": "true",
        "stdin is terminal": "true",
        "stdout is terminal": "true",
        "terminal": "Konsole",
        "terminal size": "63x59",
        "terminal version": "260403"
      },
      "issues": [
        {
          "severity": "warning",
          "cause": "width 63 cols - output may wrap (recommended >=80)",
          "measured": "63 x 59",
          "expected": ">= 80 columns",
          "remedy": "resize the window to at least 80 columns",
          "fields": [
            "terminal size"
          ]
        }
      ],
      "remediation": null,
      "durationMs": 0
    },
    "terminal.title": {
      "id": "terminal.title",
      "category": "title",
      "status": "ok",
      "summary": "terminal title default",
      "details": {
        "terminal title activity": "true",
        "terminal title items": "activity, project-name",
        "terminal title project source": "git repo root",
        "terminal title project value": "plotune-nexus",
        "terminal title source": "default"
      },
      "remediation": null,
      "durationMs": 0
    },
    "updates.status": {
      "id": "updates.status",
      "category": "updates",
      "status": "ok",
      "summary": "update configuration is locally consistent",
      "details": {
        "cached latest version": "0.145.0",
        "check for update on startup": "true",
        "last checked at": "2026-07-24T06:59:37.648947816Z",
        "latest version": "0.145.0",
        "latest version status": "current version is not older",
        "npm update target": "/home/deniz/.nvm/versions/node/v25.9.0/lib/node_modules/@openai/codex",
        "update action": "npm install -g @openai/codex",
        "version cache": "/home/deniz/.codex/version.json"
      },
      "remediation": null,
      "durationMs": 389
    }
  }
}

What issue are you seeing?

An OAuth-authenticated Streamable HTTP MCP server (plotune-nexus) is shown as connected in /mcp, with its full tool inventory
visible (88 tools).

However, when using GPT-5.6-terra, the model reports that it has no callable plotune-nexus MCP tools and cannot invoke them.
For example, after I ask:

Use Plotune Nexus MCP to run get_tooling_health_tool and get_device_status_tool.

GPT-5.6-terra responds that the tools are not exposed/available in the session and suggests switching models.

This is model-specific: Claude and GPT-5.5 or GPT-5.4 with same Codex CLI can use the same authenticated plotune-nexus MCP server in the same session. The MCP
server, OAuth login, and tool discovery therefore appear to be working; GPT-5.6-terra does not receive the discovered tools as
callable functions.

What steps can reproduce the bug?

Uploaded thread: 019f92ec-ca29-7b03-ad90-0cf7a3315eee

What is the expected behavior?

When an MCP server is connected, OAuth-authenticated, and its tools are visible in /mcp, GPT-5.6-terra should receive those
tools as callable functions and invoke get_tooling_health_tool and get_device_status_tool.

Additional information

Observed similar behavior on other GPT 5.6 models too, earlier models doesnt have same issue with MCPs

Activity

  1. added
    CLIIssues related to the Codex CLI
    mcpIssues related to the use of model context protocol (MCP) servers
    tool-callsIssues related to tool calling
    on Jul 24, 2026
  2. github-actions commented on Jul 24, 2026

    @github-actions
    Contributor

    Potential duplicates detected. Please review them and close your issue if it is a duplicate.

    Powered by Codex Action

  3. Megallodonik commented on Jul 30, 2026

    @Megallodonik

    Same issue for me!!!

  4. NatVol221 commented on Sep 25, 2026

    @NatVol221

    I can reproduce this on Windows with Codex CLI 0.157.0 and gpt-5.6-terra.

    The failure is specifically between MCP discovery and the model-visible callable tool context.

    Environment:

    • Windows 11
    • Codex CLI 0.157.0
    • model: gpt-5.6-terra
    • custom MCP transport: stdio / Node.js
    • MCP server configured in ~/.codex/config.toml

    Reproduction / evidence:

    1. The custom MCP server starts normally.
    2. MCP Inspector connects directly to the same stdio command and tools/list returns all 7 tools.
    3. Inspector's schema-portability warnings were fixed; the workflow tools now emit explicit additionalProperties: true for intentionally free-form objects.
    4. In Codex, /mcp reports:
      n8nLocal: connected (7 tools)
    5. In that same fresh Codex conversation, the model reports that no n8nLocal MCP tools exist in its callable tool context.
    6. I then added an enabled_tools allowlist containing only validate_workflow and create_workflow.
    7. After a complete Codex restart, /mcp correctly changed to:
      n8nLocal: connected (2 tools)
    8. The model still reports zero n8nLocal tools in its callable context.

    So enabled_tools is being honored by the MCP client/discovery layer, but the discovered tools are not being injected into the model-visible tool set.

    This also rules out a basic MCP tools/list failure: the same server and schemas work in MCP Inspector, and Codex itself reports the expected discovered tool count.

    No MCP source/config workaround found so far. The behavior looks like a host/tool-injection issue after successful MCP discovery, and closely matches this issue's gpt-5.6-terra symptom.

  5. NatVol221 commented on Sep 25, 2026

    @NatVol221

    Additional controlled tests narrow the behavior further.

    Environment remains:

    • Windows 11
    • Codex CLI 0.157.0
    • custom MCP over stdio / Node.js
    • same ~/.codex/config.toml
    • n8nLocal credentials loaded from an ignored .env.local
    • MCP Inspector can enumerate the server tools

    New findings:

    1. The issue is not limited to gpt-5.6-terra in this setup.
      I switched to GPT-6 Luna and asked the model to report only tools actually present in its callable tool context. Luna also reported no callable n8nLocal MCP tools.

    2. A rollback to the first known-good MCP commit works.
      I created a detached Git worktree at commit:
      0a8c2dd Implement Phase 1 read-only n8n MCP server

      That version exposes only four read-only tools:

      • list_workflows
      • get_workflow
      • list_executions
      • get_execution

      After copying the same ignored .env.local into that worktree and rebuilding:

      • /mcp showed n8nLocal: connected (4 tools)
      • in the same fresh conversation, the model correctly reported all four tools as callable.

      This is an important contrast with the current seven-tool build, where /mcp sees the tools but the model sees none.

    3. The next commit introduces the problem.
      I then checked out:
      7642a01 Add safe n8n workflow creation

      This adds:

      • validate_workflow
      • create_workflow

      After build/restart:

      • /mcp enumerated six tools
      • at one point it showed n8nLocal: failed (6 tools)
      • the six tool names were still listed
      • codex mcp list showed the server as enabled
      • codex mcp get n8nLocal showed the expected stdio command/path
      • Auth: Unsupported was shown for this stdio server, but OpenAI's docs MCP also reports Auth: Unsupported, so that does not appear sufficient to explain the failure.
    4. Fixing the free-form JSON schema does not restore model visibility.
      The workflow schema originally used several z.record(z.unknown()) fields. Those had previously caused MCP Inspector portability warnings.

      I changed the four free-form object fields to z.object({}).passthrough(), rebuilt, and restarted.
      Result:

      • Inspector/schema portability concern addressed
      • model still reported only the original four tools when the six-tool server was loaded

      So the additionalProperties portability fix is real, but does not explain the callable-tool omission.

    5. A minimal replacement for validate_workflow still was not callable.
      In the disposable worktree, I replaced the entire validate_workflow registration with a trivial diagnostic tool:

      • simple optional string input
      • no output schema
      • no annotations
      • static text response

      After rebuilding and restarting, the model still could not confirm any callable n8nLocal tools in that conversation.

      This weakens the hypothesis that the complex workflow input/output schema or annotations are the primary cause.

    6. enabled_tools introduces a separate model-visibility failure and should not be used as evidence that a specific tool is invalid.
      I tested:
      enabled_tools = ["validate_workflow"]

      • /mcp showed exactly 1 tool
      • model reported 0 callable n8nLocal tools

      Then:
      enabled_tools = ["create_workflow"]

      • /mcp showed exactly 1 tool
      • model reported 0 callable n8nLocal tools

      Most importantly, I then used a known-good Phase-1 tool:
      enabled_tools = ["list_workflows"]

      • /mcp showed exactly 1 tool
      • model still reported 0 callable n8nLocal tools

      Therefore the allowlist tests do not prove that validate/create are individually invalid. In this environment, adding enabled_tools itself correlates with zero model-visible n8nLocal tools, even for a tool known to be callable when no allowlist is present.

    Current evidence matrix:

    Server/build /mcp discovery Model-visible callable tools
    Phase 1 0a8c2dd, no allowlist 4 4
    Phase 2A 7642a01, no allowlist 6 only original 4 observed in one test / later sessions sometimes 0
    Current 7-tool build, no allowlist 7 0
    Any single-tool enabled_tools test 1 0
    Minimal diagnostic replacement for validate_workflow discoverable still not model-visible

    This now looks less like a simple malformed-tool-schema issue and more like a Codex-side tool binding/deferred-tool/cache/filter interaction after MCP discovery. A particularly strong signal is that the exact old four-tool commit is callable, while enabled_tools can make even a known-good Phase-1 tool disappear from the model context.

    Next diagnostic I am planning is to register the same six-tool stdio process under a brand-new MCP server name (for example n8nLocalFresh) with no enabled_tools, to test whether model-facing tool inventory is stale/cached by server identity.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    CLIIssues related to the Codex CLIbugSomething isn't workingmcpIssues related to the use of model context protocol (MCP) serverstool-callsIssues related to tool calling

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions