Repository navigation
[macOS Desktop] Enabled plugin skill is injected but its stdio MCP tools are absent after full restart #38342
Description
What version of Codex CLI is running?
0.147.0-alpha.6.5
What model / provider were you using?
Default OpenAI GPT model (not a custom provider).
What platform are you using?
macOS, Codex Desktop.
What issue are you seeing?
A Git marketplace plugin is enabled and its skill is injected into a newly created Desktop task, but the stdio MCP server declared by that same plugin is not exposed in the task's tool inventory.
Concrete reproduction: Cowart 0.1.25 from zhongerxin/Cowart.
The skill cowart-open-canvas is available and instructs the agent to call render_cowart_canvas_widget. The plugin manifest correctly declares .mcp.json, which defines a cowart_mcp stdio server. However, the current task has no callable cowart_mcp / render_cowart_canvas_widget tool, so the native canvas cannot open.
This survives fully quitting Codex Desktop, reopening it, and creating a brand-new task twice. The plugin/cache is current, enabled, and points at the latest upstream commit.
Environment / evidence
- Plugin:
cowart@cowart-github,enabled = true - Marketplace:
https://github.com/zhongerxin/Cowart.git, refmain - Cowart version:
0.1.25 - Installed commit:
6a338f016dee21fd97346c5fd8fe1bd81b1a7522; matchesorigin/main - Cowart skill is visible in the task environment.
- The expected MCP tool is absent from the task environment/tool discovery.
- The plugin's MCP probe can launch the server and enumerate/reach its core tools outside the Desktop task surface. A later probe assertion that writes a sample download to
~/Downloadsfails under this sandboxed diagnostic environment, but that is unrelated to the missing-tool symptom. - Active provider is OpenAI, ruling out the custom Responses-provider
unsupported callissue.
Steps to reproduce
- Register
zhongerxin/Cowartas a Git marketplace and install/enablecowart@cowart-github. - Fully quit Codex Desktop.
- Reopen Codex Desktop and create a new task.
- Ask:
Open the Cowart canvas for this project. - Observe that the skill is injected, but the task does not expose
mcp__cowart_mcp__render_cowart_canvas_widget(or any Cowart MCP tool).
Expected behavior
When a plugin skill is loaded into a new Desktop task, its declared stdio MCP server should be started/discovered and its tools should be available in that task (or dynamically discoverable).
Actual behavior
Skills and MCP tool exposure are inconsistent: the skill is available, while the associated server tools are missing even after the documented restart/new-task recovery flow.
Related issues
- Custom stdio MCP server discovered by /mcp but tools not exposed to Desktop threads #19425 — custom stdio MCP tools discovered but not exposed to Desktop threads
- Desktop plugin replacement can leave stale skill paths and MCP tool inventory until restart #32636 — plugin replacement can leave stale skill/tool inventories
- Cowart-specific report: Codex Desktop: Cowart skill loads but its MCP canvas tool is absent after full restart zhongerxin/Cowart#56
Activity
github-actions commentedon Aug 13, 2026
Potential duplicates detected. Please review them and close your issue if it is a duplicate.
Powered by Codex Action
dajiaohuang commentedon Aug 13, 2026
I reproduced a core-side version of this on current
origin/mainata7b8c074b577f897111c14de3a5e127b91e2a479using only the repository's synthetic stdio MCP server, initialization barrier, and test credentials -- no Cowart installation or real account state.For account context, I use Codex on a Pro 20x subscription.
The observed sequence is:
mcp__sample::echois omitted from that turn's tool catalog;mcp://mention, and link-mention paths all wait for readiness and pass.The relevant split appears to be that
required_mcp_servers_for_inputpromotes only explicit plugin/skill/MCP selections, while ordinary natural-language use of an already-injected plugin skill leaves its MCP optional.capture_binding_with_metadatacan therefore permanently bind the first turn without the tool even though the skill tells the model to call it.This does not appear to be a strict duplicate of #38162: that report observes
initializeandtools/listcompleting before tools are omitted, while this reproduction captures the MCP still pending at first binding. #37036 also appears to involve project-specific Desktop capability/config assembly rather than this proven readiness boundary.Could maintainers clarify the intended fix direction?
tool_searchcan discover it in the same turn.The main tradeoff is first-turn latency versus catalog consistency: making every skill-contributing MCP required could block on the slowest plugin, while dynamic binding refresh is narrower but must preserve per-turn tool-directory invariants.
If maintainers choose a direction and would find an external regression test/fix useful, please explicitly invite the contribution under the repository's policy.
dajiaohuang commentedon Aug 13, 2026
Policy update (2026-08-21): the repository now states that it does not accept external code contributions or pull requests. The tested fork Draft remains available only as a technical reference; I am not requesting an invitation or upstream submission.
The reference is dajiaohuang#1. It implements the smallest catalog-consistency option from the earlier analysis: an enabled plugin MCP becomes required when that plugin contributes a visible skill. The focused first-turn regression passes with MCP initialization held beyond the old optional grace period. The draft also records the slow-plugin latency tradeoff and the dynamic-refresh/suppressed-skill alternatives.
wanou2c commentedon Aug 14, 2026
+1. Same root cause on Windows with remote HTTP MCP servers (Lingxing + SellerSprite) on Codex Desktop 26.803.81509 / engine 0.147.0-alpha.6.6. The MCP handshake and
tools/listsucceed, but the tools are omitted from the task's tool catalog with the log lineomitting MCP server without an exact ready client. Reproduces with both direct Streamable HTTP URLs and a local stdio proxy in front of the same servers; the same config works on 26.803.41515 and in Codex CLI.Additional data point for the root cause: our model catalog already sets
"use_responses_lite": false, so the workaround from #33679 does not apply here ? consistent with the catalog-consistency race described above rather than the Responses Lite tool-exposure path. The proposed fix direction (treat an enabled plugin's MCP as required when it contributes a visible skill) matches what we observe; please consider inviting the draft.JiajiaPig1124 commentedon Aug 29, 2026
Reproduced on macOS with Codex Desktop 26.825.31414 / bundled codex-cli 0.148.0 after reinstalling the local plugin and fully restarting the app.
Additional data point: this also affects custom agent definitions that contain their own
[mcp_servers.<name>]stanza. The custom agent'sdeveloper_instructionsare loaded, so the agent definition is recognized, but its configured stdio MCP namespace is completely absent from the agent's tool inventory. This reproduced with two different custom agent roles.Controls:
Expected: when a custom agent definition is loaded, its configured MCP server tools should be mounted/discoverable, or Codex should surface a startup/binding error.
ZygimantasKoncius commentedon Sep 1, 2026
Reproduced on macOS with Codex Desktop 26.820.60940 (bundle 7119). Logs identify the bundled app-server client as 0.150.0-alpha.8.
The affected MCP server is an authenticated Streamable HTTP gateway exposing several hundred downstream tools. A plugin skill was visible, but the gateway’s tools were absent from the task.
The logs repeatedly showed:
Reauth completed and Codex successfully loaded the gateway credentials from Keychain. Restarting the task and sending additional turns still produced no tools. The gateway subsequently initialized successfully with MCP protocol 2025-06-18, and a later task used its tools successfully without another authentication change.
This confirms that authentication and the MCP server were healthy. The failure was the task’s tool binding being captured while the optional server was pending and not being refreshed when it became ready.
Impact: Codex repeatedly told the user that the integration was disconnected, causing unnecessary reauthentication and four task restarts.
Expected behavior:
This appears to match the optional-server startup race described in this issue’s existing analysis.
EdgarZev commentedon Oct 7, 2026
I’m seeing a similar symptom with Microsoft Power Apps Canvas Authoring while using Codex tasks through ChatGPT on macOS.
The Canvas skills and MCP configuration are present, but tasks report that connect, sync_canvas, compile_canvas and live App Checker are unavailable. We’ve encountered this on a MacBook Pro and an Intel 12-inch MacBook. The tools previously worked on the Pro, including successful source sync and validation, then became unavailable again.
On the Intel Mac, .NET SDK 10.0.401 and the Canvas Authoring 1.1.5 package are present locally. The running server version has not been verified. An app update and restart/reconnect attempts haven’t restored tool availability there.
This is blocking ongoing development. I’m not certain it has the same root cause as this issue. What diagnostic information would help distinguish a server startup failure from tools failing to appear in the task?