-
Notifications
You must be signed in to change notification settings - Fork 10.3k
Codex desktop can show MCP enabled while thread tool surface omits llm-tldr/serena #16702
Description
Summary
Codex desktop can report MCP servers as enabled in codex mcp list while still failing to expose those tools to the model in the live thread.
In my case:
llm-tldrandserenawere configured in~/.codex/config.tomlcodex mcp listreported both asenabled- backing MCP processes were alive
- but the thread's dynamic tool state did not include either tool
This silently degraded the session because the model could not call the tools even though the runtime looked healthy.
Environment
- Codex desktop app
- app version seen in local logs:
0.118.0-alpha.2 - macOS
- auth mode in logs:
Chatgpt
Exact behavior
Config present
~/.codex/config.toml contains:
[mcp_servers."llm-tldr"][mcp_servers."serena"]
MCP list looks healthy
codex mcp list returned both entries as enabled.
Processes alive
Process list showed active tldr-mcp-contained.py processes.
But thread tool state was empty for those tools
I inspected Codex's local state DB:
select distinct name from thread_dynamic_tools order by name;Result:
read_thread_terminal
No llm-tldr.
No serena.
And:
select count(*) from thread_dynamic_tools where name in ('llm-tldr','serena');Result:
0
For the active workspace thread, joined dynamic-tool names were empty.
Repro evidence
Commands used:
codex mcp list
ps aux | rg 'tldr-mcp-contained|tldr-contained-daemon|codex'
sqlite3 ~/.codex/state_5.sqlite "select distinct name from thread_dynamic_tools order by name;"
sqlite3 ~/.codex/state_5.sqlite "select count(*) from thread_dynamic_tools where name in ('llm-tldr','serena');"
sqlite3 ~/.codex/state_5.sqlite "select t.id, datetime(t.updated_at,'unixepoch','localtime'), t.cwd, group_concat(d.name, ',') from threads t left join thread_dynamic_tools d on d.thread_id=t.id where t.cwd='/Users/fengning/agent-skills' group by t.id order by t.updated_at desc limit 10;"Concrete values from the failing case:
- workspace:
/Users/fengning/agent-skills - thread id:
019cb94c-4c00-7f62-942f-8d15618d56de thread_dynamic_toolsmissing:llm-tldr,serena
Expected behavior
If Codex reports MCP tools as enabled and their backing processes are alive, the live thread should expose those tools to the model.
If that registration fails, Codex should surface a clear runtime error instead of silently degrading.
Likely fault boundary
This does not look like a launcher/config/daemon failure.
It looks like a gap between:
- MCP server enablement / process health
- and thread dynamic tool registration
Why this matters
This creates a false-green state:
- operators see
codex mcp listpass - but the model still cannot use the tool
That wastes review/QA/investigation turns and makes MCP health checks misleading.
Suggested fix
One of:
- ensure enabled MCP tools are hydrated into thread dynamic tool state at thread start
- or fail loudly when thread tool registration does not match enabled MCP state
At minimum, Codex should expose a diagnostic when codex mcp list is healthy but the current thread has no corresponding dynamic tools.