MCP stdio servers show Tools: none in TUI despite valid config and direct tools/list
Summary
Codex CLI 0.137.0 on macOS registers local stdio MCP servers in codex mcp list/get, but the TUI runtime does not attach/spawn them and /mcp verbose shows Tools: (none) for every configured stdio server.
This looks like a runtime/thread tool injection issue, not an MCP server configuration issue:
codex mcp listshows the servers enabled.codex mcp getshows the expected stdio commands and redacted env forwarding.codex doctor --jsonreports MCP config is locally consistent.- Direct MCP JSON-RPC startup of the same commands returns tools.
- The active Codex TUI connection-manager logs show only
codex_appsinlist_all_tools.
Environment
- Codex CLI:
codex-cli 0.137.0 - Install method: Homebrew (
/opt/homebrew/bin/codex) - OS: macOS 26.5 (
25F71) - Architecture:
arm64 - Shell:
zsh - Auth mode: ChatGPT
- Working directory: trusted local repo
Config Shape
The relevant config uses stdio MCP servers in ~/.codex/config.toml.
[mcp_servers.context7]
command = "/Users/<user>/.local/share/mise/installs/node/24.14.0/bin/node"
args = ["/Users/<user>/.codex/mcp-node/node_modules/@upstash/context7-mcp/dist/index.js"]
startup_timeout_sec = 20
tool_timeout_sec = 60
[mcp_servers.memory-keeper]
command = "/Users/<user>/.local/share/mise/installs/node/24.14.0/bin/node"
args = ["/Users/<user>/.codex/mcp-node/node_modules/mcp-memory-keeper/bin/mcp-memory-keeper"]
startup_timeout_sec = 20
tool_timeout_sec = 60
[mcp_servers.memory-keeper.env]
DATA_DIR = "/Users/<user>/.codex/mcp-data/memory-keeper"
[mcp_servers.brave-search]
command = "/Users/<user>/.local/share/mise/installs/node/24.14.0/bin/node"
args = ["/Users/<user>/.codex/mcp-node/node_modules/@brave/brave-search-mcp-server/dist/index.js", "--transport", "stdio"]
env_vars = ["BRAVE_API_KEY"]
startup_timeout_sec = 20
tool_timeout_sec = 60
[mcp_servers.github]
command = "/opt/homebrew/bin/github-mcp-server"
args = ["stdio", "--read-only", "--toolsets=default,actions,code_security"]
env_vars = ["GITHUB_PERSONAL_ACCESS_TOKEN"]
startup_timeout_sec = 20
tool_timeout_sec = 60
Steps to Reproduce
- Configure the stdio MCP servers above.
- Confirm Codex sees the config:
``bash``
codex mcp list
codex mcp get context7
codex mcp get brave-search
codex mcp get memory-keeper
codex mcp get github
codex doctor --json
- Start Codex:
``bash``
codex -C /path/to/repo
- In the TUI, run:
``text``
/mcp verbose
Expected Behavior
The configured stdio MCP servers should initialize and expose their tools in the TUI. For example:
context7:resolve-library-id,query-docsbrave-search:brave_web_search,brave_local_search, etc.memory-keeper:context_session_start,context_save, etc.github: GitHub MCP tools such asget_file_contents,get_commit, etc.
Actual Behavior
/mcp verbose shows the configured servers but no tools/resources/templates:
• brave-search
• Auth: Unsupported
• Tools: (none)
• Resources: (none)
• Resource templates: (none)
• context7
• Auth: Unsupported
• Tools: (none)
• Resources: (none)
• Resource templates: (none)
• github
• Auth: Unsupported
• Tools: (none)
• Resources: (none)
• Resource templates: (none)
• memory-keeper
• Auth: Unsupported
• Tools: (none)
• Resources: (none)
• Resource templates: (none)
codex_apps is the only MCP server that exposes tools in the TUI.
Diagnostics
codex doctor --json reports MCP config is valid:
config.load: ok
mcp.config: ok
configured servers: 4
disabled servers: 0
stdio servers: 4
Direct MCP JSON-RPC checks against the exact configured commands return tools:
context7: 2 tools
brave-search: 6 tools
memory-keeper: 38 tools
github: 28 tools
Relevant Codex runtime log snippets show the TUI tool builder only sees codex_apps:
list_all_tools{mcp_server_count=1}: waiting for MCP server tools while building tool list server_name=codex_apps has_cached_tool_info_snapshot=true startup_complete=true
list_all_tools{mcp_server_count=1}: listed MCP server tools while building tool list server_name=codex_apps tool_count=13
Process inspection while the TUI is running shows the active codex process does not spawn the configured stdio MCP server processes. Other MCP processes on the machine were from separate Claude sessions, not from Codex.
Notes
This seems related to prior reports where MCP servers are registered/enabled but not injected into Codex threads, especially:
- #19649
- #14242
The important distinction in this case is that direct MCP protocol checks prove the configured stdio servers are capable of returning tools, but Codex 0.137.0 does not appear to attach/spawn them for the thread runtime.
This issue has 1 comment on GitHub. Read the full discussion on GitHub ↗