Model Context Protocol servers give workers tools beyond the built-ins. Our setup uses a single aggregator rather than wiring each server individually.
The aggregator: mcp-router
The only MCP entry in the agent config (Claude Code settings.json and Codex config.toml) is mcp-router:
mcp-router → cmd.exe /c npx -y @mcp_router/cli@latest connect (stdio)It is a stdio aggregator, spawned per client. The individual servers are registered inside mcp-router, and all their tools surface under the mcp__mcp-router__* namespace. (This also means a one-shot script — like a hook — can't call these servers directly; it must talk to their underlying store, e.g. SQLite, instead.)
Capability families behind the router
| Family | Representative tools | Use |
|---|---|---|
| Memory (vector) | memory_search, memory_store, memory_update, memory_delete | The shared decision/context store — see Memory. |
| Knowledge graph | create_entities, create_relations, read_graph | Entity/relation memory (distinct from the vector store). |
| Browser automation | browser_navigate, browser_snapshot, lighthouse_audit, performance_* | Playwright / Chrome DevTools driving + audits. |
| Docs lookup | resolve-library-id, query-docs | Library/API documentation retrieval. |
| Sequential thinking | sequentialthinking | Structured multi-step reasoning. |
| Context-mode | ctx_* | Sandbox execution + large-output handling. |
Shared data lives under E:\memory\ (the vector store is memory-sqlite.db).
Known Windows pitfalls
- UTF-8: the memory-vector server must run with
PYTHONUTF8=1on Windows, or it crashes on emoji/non-ASCII logging. - Duplicate project-entry bug: path-separator drift in
~/.claude.jsoncan create duplicate project entries that silently disable all.mcp.jsonservers. If MCP tools vanish, check for duplicate keys differing only by/vs\.