openai / openai/codex

Plugin MCP servers: no workspace/project-root signal (hooks have cwd; MCP servers don't)

Open
#37,903 1 comment 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

CLI enhancement mcp skills
Dominant language
Rust
Stars
125k
Forks
19.5k
PR merge metrics
PR metrics pending

Description

Use case

A plugin ships a stdio MCP server that serves per-project data (in our case: a per-project knowledge index — the server must know which project the session is working in to serve the right one). Hooks can do this today: every hook payload carries cwd with the session working directory. Plugin MCP servers cannot.

Current behavior (codex-cli 0.146.0)

  • A plugin-registered stdio MCP server with "cwd": "." is spawned in the plugin's materialized cache directory (~/.codex/plugins/cache/<marketplace>/<plugin>/<version>/), so process.cwd() carries no project information.
  • No substitution token or injected environment variable exposes the workspace/session root to plugin MCP server configs (nothing analogous to hook payload cwd; env_vars only whitelists variables from the codex process environment, which requires a manual per-shell export).
  • The MCP client does not declare the roots capability, so roots/list is unavailable as an in-protocol signal (codex-rs/codex-mcp/src/rmcp_client.rs constructs client capabilities without roots as of rust-v0.146.0).

The net effect: a plugin MCP server cannot be project-aware without asking users to export an environment variable in every shell before launching codex.

Ask

Any one of these would close the gap:

  1. A substitution token for plugin MCP server env/args values that resolves to the session workspace root (the equivalent of the cwd field hooks already receive), or
  2. An injected environment variable carrying the workspace root in the MCP server child process, or
  3. Declaring the roots capability and answering roots/list with the workspace folder.

Option 1 or 2 seems most consistent with the existing hook contract, and with the MCP spec's 2026-07-28 direction (Roots is deprecated there in favor of server configuration).

Environment

  • codex-cli 0.146.0, macOS
  • Plugin installed via codex plugin add from a marketplace repo

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with codex-rs/codex-mcp/src/rmcp_client.rs and the plugin-registered stdio MCP server configuration, then compare the existing hook cwd payload with the MCP client capabilities. Trace how plugin cwd, env, and args are resolved. Done means a plugin MCP server can reliably receive the session workspace root through one supported mechanism.

Written by the indexing model from the issue text.

Assessment

Tech stack
rust
Domain
backend-api-design, cli
Issue type
Feature
Difficulty
4/5
Estimated time
3-5 days
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
48/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.