Skip to content

A review thread is offered every configured MCP server, including ones that cannot serve the workspace #105

Description

@patriyang

Observation

Split out of #100, which is closed by #104. #100 raised four sub-questions; three are answered there (no per-tool cancel exists at the app-server layer, aborted turns are now failureClass: "stalled", MCP calls got their own inactivity budget). The fourth is a policy question that PR #104 deliberately did not decide:

Whether MCP servers should be filtered per workspace — e.g. a server that reports it cannot serve this workspace gets dropped from the turn's tool list rather than offered to the model.

Why it is still live

The incident behind #100 was a reviewer calling codegraph/codegraph_explore in a workspace that deliberately carries no .codegraph/ index. Under Claude Code the same server answers immediately and usefully ("No CodeGraph project is loaded for this session"). Under Codex the call sat in flight until a watchdog fired.

#104 made that outcome cheaper and legible — the budget is more patient and the abort is now classified — but the reviewer is still offered a tool that cannot answer for this workspace, and it still costs the turn when the call hangs rather than errors.

What would need deciding

The plugin does not configure Codex's MCP servers today; they come from the user's own ~/.codex/config.toml and are inherited wholesale. thread/start does accept an arbitrary config override map (ThreadStartParams.config, the same shape as Codex's -c overrides), so narrowing or clearing mcp_servers for a specific thread class looks mechanically possible — untested.

Non-prescriptive, and the choice is a policy call rather than a patch:

  1. Leave it alone. A reviewer that can reach the user's MCP servers is a feature; the workspace is the right place to say "do not call this one" (which is what the downstream repo did in patriyang/obsidian-vault#652).
  2. Scope MCP servers per thread class. Review threads are short, read-only, and self-contained; dropping MCP from them removes a whole class of stall at the cost of tools a reviewer might genuinely want.
  3. Probe and drop. Ask each server whether it can serve this workspace before offering it. Most protocol-correct, most work, and depends on servers answering a health question promptly — the exact thing the failing server did not do.

Option 2 or 3 would need to establish first that config: { mcp_servers: ... } on thread/start actually takes effect against a live app-server; the generated types permit it, but nothing in this repo exercises it.

Related

Metadata

Metadata

Assignees

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions