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

FamilyRepresentative toolsUse
Memory (vector)memory_search, memory_store, memory_update, memory_deleteThe shared decision/context store — see Memory.
Knowledge graphcreate_entities, create_relations, read_graphEntity/relation memory (distinct from the vector store).
Browser automationbrowser_navigate, browser_snapshot, lighthouse_audit, performance_*Playwright / Chrome DevTools driving + audits.
Docs lookupresolve-library-id, query-docsLibrary/API documentation retrieval.
Sequential thinkingsequentialthinkingStructured multi-step reasoning.
Context-modectx_*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=1 on Windows, or it crashes on emoji/non-ASCII logging.
  • Duplicate project-entry bug: path-separator drift in ~/.claude.json can create duplicate project entries that silently disable all .mcp.json servers. If MCP tools vanish, check for duplicate keys differing only by / vs \.

On this page