Remote plugin keeps removed MCP tools after cache purge and process-dead restart
Nobody has claimed this yet.
- Dominant language
- Rust
- Stars
- 125k
- Forks
- 19.4k
- PR merge metrics
- PR metrics pending
Description
What version of Codex is running?
- Bundled Codex CLI:
0.150.0-alpha.8 - Desktop app:
26.820.80927(build7271) - Platform: macOS 26.2 (25C56), arm64
What issue are you seeing?
Codex Desktop continues exposing tools that a private remote MCP plugin has removed.
The live Mission Control MCP server now exposes zero GitHub tools. Codex still injects 27 plugin tools, including 16 removed github_* tools, into every new turn.
This is not only a stale sidebar display. The removed tools remain present in the model's active callable tool inventory.
Plugin type: private, user-scoped, created-by-me remote plugin.
Expected behavior
After the plugin's MCP tool surface changes, Codex should refetch the current tool list and remove tools that are no longer returned. New turns after a process-dead restart must not receive removed tool schemas.
In this reproduction, the refreshed inventory should contain zero github_* tools.
Actual behavior
Codex repeatedly restores the same obsolete set of 27 plugin tool names, including these 16 removed GitHub tools:
github_issues_listgithub_milestones_listgithub_wiki_get_pagegithub_issues_bulk_plangithub_wiki_propose_patchgithub_issues_creategithub_issues_updategithub_milestones_creategithub_milestones_updategithub_issues_bulk_applygithub_wiki_apply_patchgithub_wiki_create_pagegithub_code_searchgithub_code_get_contentgithub_issues_comments_listgithub_issues_comments_create
Reproduction and recovery attempts
- Update the remote MCP service so its current
tools/listcontains zero GitHub tools. - Start a new Codex Desktop turn. The 16 removed GitHub tools are still injected.
- Remove the generated schema cache under
$CODEX_HOME/cache/codex_apps_tools/. - Remove the plugin's local materialized bundle and remote catalog cache.
- Delete the persisted
mcp-extension-sidebar-catalogatom from the desktop global state and its backup. - Fully quit Codex.
- After the process is dead, remove the regenerated tool-schema cache again.
- Relaunch Codex and start a new turn.
Observed: Codex regenerates the obsolete 27-tool inventory.
The sorted tool-name set before and after the process-dead purge/restart has the identical SHA-256:
cea4a4b70623a541fb553de351bd9292a05e2ec8281aa6ddce16bd7d851e0db5
The containing cache file is rewritten, but the obsolete plugin tool-name set remains unchanged.
Uninstalling and reinstalling the plugin has historically forced a refresh, but users should not have to uninstall/reinstall a development plugin after every tool-surface update.
Why this appears to be a registry invalidation bug
The local generated schema and persisted sidebar catalog were removed while Codex was not running. The obsolete inventory was nevertheless rebuilt after relaunch, indicating that a higher-level remote app/tool registry or discovery cache is serving the old schemas.
This may be related to #33266, but that report concerns notifications/tools/list_changed for stdio MCP servers. This reproduction affects a private remote ChatGPT/Codex plugin and persists through a full desktop restart plus post-exit cache purge.
Privacy
No application logs, session transcript, repository content, credentials, or account identifiers are attached.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by tracing remote plugin discovery and refresh from the remote MCP tools/list entry point, then inspect regeneration of $CODEX_HOME/cache/codex_apps_tools/ and the mcp-extension-sidebar-catalog state. Done means a changed remote tool surface is reflected in new turns, with removed tools absent after cache purge and process-dead restart.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- rust
- Domain
- devtools
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 48/100