MCP Ecosystem Notes¶
How the repository's shared MCP catalog was chosen, which servers were deliberately left out, and the current best practices for keeping one catalog consistent across every agentic harness. The shared catalog is regenerated for all seven frontends by scripts/mcp/unity-mcp.mjs (see the README under scripts/mcp/); this page records the reasoning and the opt-in additions that did not earn a default slot.
Selection criteria¶
A server joins the default catalog only when it is:
- Useful to this repository's actual loop — C#/Unity package code, 14,000+ tests, a mkdocs documentation site, and heavy GitHub workflow.
- Cheap in context — every tool schema costs roughly 500 tokens of every session, so wide surfaces (a community Unity MCP advertises 268 tools) drown narrow ones (Context7 ships two).
- Credential-free or already-covered — the catalog must start cleanly on a fresh clone; a server that refuses without a key follows the
zai-mcp.mjspattern instead. - Maintained and cross-harness — stdio or streamable HTTP that works identically under Claude Code, Codex, OpenCode, Cursor, VS Code, the Copilot CLI, and nanocoder.
Current catalog and what each server is for¶
| Server | Why it is here |
|---|---|
github | Official GitHub MCP server; issues, PRs, reviews without gh |
zai-vision | Screenshot, image, diagram, chart, and video understanding |
zai-web-search | Current web search results |
zai-web-reader | Structured webpage extraction |
zai-zread | Public GitHub repository documentation and source exploration |
context7 | Version-specific third-party library docs (Unity, Roslyn, mkdocs, protobuf-net) |
git | Local repository queries |
fetch | Web pages as markdown |
context7 runs the official @upstash/context7-mcp stdio package. Its two tools (resolve-library-id, get-library-docs) answer the recurring "what does this API look like in the pinned Unity/Roslyn version" class of question that static training data gets wrong. An optional CONTEXT7_API_KEY in the environment raises rate limits; the catalog never requires it.
Evaluated and declined¶
Research date: September 2026. Star counts and maintenance state were verified live at research time; re-verify before adopting.
| Candidate | Verdict | Reason |
|---|---|---|
Serena (oraios/serena) | Opt-in | Strong LSP-backed C# semantics plus project memories, but the Roslyn backend wants .NET 10+ (the devcontainer pins 9.0.306) and a generated .csproj/.sln; first-run onboarding makes it a poor default. See opt-in setup below. |
Playwright MCP (microsoft/playwright-mcp) | Opt-in | Deterministic headless browser for rendered docs-site QA; needs a one-time Chromium download. |
| Semgrep MCP | Opt-in | Seven tools for agent-driven C# security scanning; the CI gate already covers the enforcement role. |
| Chrome DevTools MCP | Skip | Complements Playwright with performance traces; redundant for static docs verification. |
| DeepWiki MCP | Skip | Overlaps zai-zread for public-repo questions. |
| dotnet-mcp | Skip | Agents already shell out to dotnet; the wrapper needs .NET 10. |
| claude-context / vector code search | Skip | Adds a vector database and embedding key for little gain over Serena + ripgrep at this repo size. |
| Additional Unity editor bridges (CoplayDev, CoderGamester, IvanMurzak) | Skip | Duplicate the repository's own Unity MCP bridge; the widest one advertises ~268 tools. Unity's official MCP inside the AI Assistant package is pre-release and worth watching. |
mcp-language-server (isaacphi) | Skip | Six generic tools but no tested C# support; redundant with Serena. |
| GitLab MCP, Sourcegraph deep search | Skip | Wrong platform (GitHub-hosted; no Sourcegraph instance). |
| Memory servers (knowledge-graph, Basic Memory) | Skip | The repository's memory lives in committed agent instruction files reviewed like code. |
| Image manipulation MCPs (ImageSorcery, sharp variants) | Skip | A shell one-liner with ImageMagick or sharp-cli covers the rare crop/resize. |
Opt-in setup¶
These are documented commands, not catalog entries. Add them to your own client config if you want them; npm run validate:mcp-config only checks the generated files.
Keep any opt-in server's tool count trimmed server-side first (Serena's --context ide-assistant and excluded_tools, Playwright's config allowlist) before reaching for client-side filters.
Cross-harness practices¶
- One canonical catalog, generated outward. The
mcpServersJSON shape is shared by Claude Code, Cursor, VS Code, and nanocoder;scripts/mcp/unity-mcp.mjsgenerates the Codex TOML and OpenCode variants from the same definitions, so a server is added once and lands everywhere. Both stdio (command/args) and streamable HTTP (url) entries survive the translation. - Machine-local files stay gitignored. Generated configs carry no credentials; launchers resolve secrets from the environment and
.env.localat process start. - Context discipline. Prefer two-tool remote servers and consolidated tool surfaces; a 20-tool server is roughly 14,000 tokens of permanent context. Claude Code defers MCP tool listings until needed, and OpenCode gates tools per agent with globs.
- Repository instructions first. Committed agent context files are read by every harness and reviewed like code; MCP memory servers duplicate that poorly.
References: MCP servers reference, official MCP registry, Context7, Serena, Playwright MCP, csharp-ls.