Summary
The imessage plugin from anthropics/claude-plugins-official ships a .mcp.json that references ${CLAUDE_PLUGIN_ROOT} — a placeholder Claude Code interpolates with the plugin install dir. Codex CLI passes the literal string through to the spawned process, so bun run --cwd ${CLAUDE_PLUGIN_ROOT} ... fails with ENOENT: Could not change directory to "${CLAUDE_PLUGIN_ROOT}".
Reproduction
codex plugin marketplace add claude-plugins-official https://github.com/anthropics/claude-plugins-official.git
- Enable
imessage@claude-plugins-official
- Launch Codex — startup log shows:
MCP client for \imessage` failed to start: MCP startup failed: handshaking with MCP server failed: connection closed: initialize response`
`codex mcp list` confirms the literal placeholder:
```
imessage bun run --cwd ${CLAUDE_PLUGIN_ROOT} --shell=bun --silent start
```
Expected
Codex CLI should interpolate `${CLAUDE_PLUGIN_ROOT}` (and likely `${CLAUDE_PLUGIN_DATA}`, etc.) in `.mcp.json` `args[]` and `command` per the Claude Code plugin spec, since plugins shared between marketplaces rely on this idiom.
Workaround
Register a custom MCP via `codex mcp add` with the absolute install path; or edit cache `.mcp.json` (reverts on plugin re-extract).
Affected versions
Codex CLI (current GA as of 2026-04-25), claude-plugins-official imessage 0.1.0.
Summary
The
imessageplugin fromanthropics/claude-plugins-officialships a.mcp.jsonthat references${CLAUDE_PLUGIN_ROOT}— a placeholder Claude Code interpolates with the plugin install dir. Codex CLI passes the literal string through to the spawned process, sobun run --cwd ${CLAUDE_PLUGIN_ROOT} ...fails withENOENT: Could not change directory to "${CLAUDE_PLUGIN_ROOT}".Reproduction
codex plugin marketplace add claude-plugins-official https://github.com/anthropics/claude-plugins-official.gitimessage@claude-plugins-officialMCP client for \imessage` failed to start: MCP startup failed: handshaking with MCP server failed: connection closed: initialize response``codex mcp list` confirms the literal placeholder:
```
imessage bun run --cwd ${CLAUDE_PLUGIN_ROOT} --shell=bun --silent start
```
Expected
Codex CLI should interpolate `${CLAUDE_PLUGIN_ROOT}` (and likely `${CLAUDE_PLUGIN_DATA}`, etc.) in `.mcp.json` `args[]` and `command` per the Claude Code plugin spec, since plugins shared between marketplaces rely on this idiom.
Workaround
Register a custom MCP via `codex mcp add` with the absolute install path; or edit cache `.mcp.json` (reverts on plugin re-extract).
Affected versions
Codex CLI (current GA as of 2026-04-25), claude-plugins-official imessage 0.1.0.