Skip to content

Fix: MCP entries not being read by some agents - #274

Open
Fluzko wants to merge 1 commit into
symposium-dev:mainfrom
Fluzko:mcp-registration-paths
Open

Fix: MCP entries not being read by some agents#274
Fluzko wants to merge 1 commit into
symposium-dev:mainfrom
Fluzko:mcp-registration-paths

Conversation

@Fluzko

@Fluzko Fluzko commented Aug 13, 2026

Copy link
Copy Markdown

What does this PR do?

A plugin can declare [[mcp_servers]], and sync writes those entries into each agent's config. Three of our five agent CLIs can't use what we write, and nobody finds out: sync reports success because it did write the file it meant to write.

Claude Code ignores our entry, so the feature silently does nothing. The Copilot CLI and Goose reject their whole config file, which also takes down MCP servers the user set up themselves. Codex and Gemini were fine.

Root cause: each agent has its own vocabulary for the same thing. Different file (usually not the one hooks live in), different field names, different container key, different name for a remote transport. Symposium wrote one plausible shape everywhere and assumed it landed.

Fix

Each adapter writes what its tool actually accepts. The four duplicated per-agent path tables collapse into one seam, Agent::mcp_config_path. MCP scope becomes its own concept instead of following hook scope, since only some agents have a project-level MCP file; the rest fall back to user level and say so.

Two robustness points came with it: one file we now write is live agent state, so JSON writes go through temp-file-plus-rename, and a server the user disabled stays disabled (auto-sync runs per hook event and would re-enable it forever).

Verification

Checked by asking each tool, not by reading docs: feed it the file symposium wrote, ask its own mcp list what it sees, compare against what its own mcp add writes. Several shapes looked right on paper and were rejected in practice.

An e2e sweep covers all six installable CLIs across three entry kinds (stdio, stdio+env, remote+headers), env vars reaching the server process, recovery from the broken shapes already on disk, and cleanup when an agent is removed. A real Claude session drives a tool call end to end. Kiro is the gap: GUI-only, no CLI to ask, paths unchanged.

Disclosure questions

AI disclosure.

  • The AI tool authored large parts of the code

Questions for reviewers.

@Fluzko Fluzko changed the title fix(mcp): write MCP entries where each agent reads them fix(mcp): MCP entries not being read by some agents Aug 13, 2026
@Fluzko Fluzko changed the title fix(mcp): MCP entries not being read by some agents FIX: MCP entries not being read by some agents Aug 13, 2026
@Fluzko Fluzko changed the title FIX: MCP entries not being read by some agents Fix: MCP entries not being read by some agents Aug 13, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant