Skip to content

Codex desktop can show MCP enabled while thread tool surface omits llm-tldr/serena #16702

@fengning-starsend

Description

@fengning-starsend

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-tldr and serena were configured in ~/.codex/config.toml
  • codex mcp list reported both as enabled
  • 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_tools missing: 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 list pass
  • but the model still cannot use the tool

That wastes review/QA/investigation turns and makes MCP health checks misleading.

Suggested fix

One of:

  1. ensure enabled MCP tools are hydrated into thread dynamic tool state at thread start
  2. 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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    appIssues related to the Codex desktop appbugSomething isn't workingmcpIssues related to the use of model context protocol (MCP) servers

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions