RFC 0004: Multi-server MCP routing

Status: Accepted, implemented. Author: Andrii Tsok Depends on: RFC 0001 §12.

1. Problem

The first MCP integration assumed exactly one stdio server per process (--mcp-stdio CMD), with one global allowlist under [policy.mcp]. Real workflows immediately wanted two or more servers — a filesystem server and a GitHub server, say — with different trust levels. One shared allowlist forces the union of permissions onto every server: the GitHub server inherits filesystem patterns and vice versa. That's the wrong default for a runtime whose posture is least-privilege.

2. Decision

3. Back-compat

--mcp-stdio survives as sugar for an implicit { name = "default" } entry carrying the legacy [policy.mcp] allowlist, so single-server workflows keep their exact semantics. Declaring a TOML entry named default and passing the flag is a name collision and refuses to start — silent precedence between two configuration surfaces is how operators get surprised.

4. Alternatives considered

5. Consequences

Each server handle owns its child process and its allowlist behind atomic-swap cells, which is what later allows per-server reload (rotate one allowlist, respawn one child) without touching the handler registry — see RFC 0005.