
MCP orchestrator, one install, all your MCP servers
概览
Yaw MCP (the yaw-mcp CLI) is an MCP server that fronts every other MCP server you use. Point each AI client (Claude Code, Claude Desktop, Cursor, VS Code) at it once, and your servers load lazily from a single connection instead of a hand-edited mcpServers block per client. It runs entirely on your machine. No account, no sign-in, no telemetry -- your servers live in a local bundles.json and your credentials in a local encrypted vault. Running as an MCP server, its only outbound calls are two background npm checks: one for its own updates (YAW_MCP_AUTO_UPGRADE=0 to disable) and, if you have run yaw-mcp sidecars install, a once-a-day check that the managed sidecar packages are current (YAW_MCP_SIDECAR_REFRESH=0 to disable). One more is conditional: if a configured server launches through uv/uvx and uv is not on your PATH, yaw-mcp downloads Astral's uv release from GitHub once and caches it (see Runtime detection & uv bootstrap).
README
以下为原文 README 节选,完整内容请查看原文。
@yawlabs/mcp
One install. Every MCP server. Managed from one place.
Yaw MCP (the yaw-mcp CLI) is an MCP server that fronts every other MCP server you use. Point each AI client (Claude Code, Claude Desktop, Cursor, VS Code) at it once, and your servers load lazily from a single connection instead of a hand-edited mcpServers block per client.
It runs entirely on your machine. No account, no sign-in, no telemetry – your servers live in a local bundles.json and your credentials in a local encrypted vault. Running as an MCP server, its only outbound calls are two background npm checks: one for its own updates (YAW_MCP_AUTO_UPGRADE=0 to disable) and, if you have run yaw-mcp sidecars install, a once-a-day check that the managed sidecar packages are current (YAW_MCP_SIDECAR_REFRESH=0 to disable). One more is conditional: if a configured server launches through uv/uvx and uv is not on your PATH, yaw-mcp downloads Astral’s uv release from GitHub once and caches it (see Runtime detection & uv bootstrap). yaw-mcp add, search and try fetch the public server catalog on demand. Nothing else leaves your machine.
It earns its keep when you hit any of these:
- More than one client. Define a server once in
bundles.json; every client on the machine picks it up. No copy-pasting the same JSON into four config files. (Syncbundles.jsonacross machines with your dotfiles if you want it everywhere.) - Tool-context bloat. The
dispatchmeta-tool ranks your servers against the task and loads only the top match. A 30-server setup keeps a handful of tools in context at a time instead of hundreds. - Tokens you’d rather not leave in disk configs. Credentials live encrypted in a local vault and inject at spawn time. Rotate once; every client picks up the new value.
- A trust signal before you activate. Every scored server shows an A-F compliance grade. Set
YAW_MCP_MIN_COMPLIANCE=Bto refuse anything below.
One client, a few servers? claude mcp add is fine – yaw-mcp’s value shows up when that setup stops scaling.
How it works
Your MCP client (Claude Code, Cursor, ...)
|
| single stdio connection
v
@yawlabs/mcp --lazy load--> GitHub | Slack | Stripe | ... (your servers)
- Add servers with
yaw-mcp add(or edit~/.yaw-mcp/bundles.jsondirectly). - yaw-mcp reads that file on startup.
- The model uses a handful of meta-tools to control which servers’ tools are in context. Adding a server puts it on your list; loading it brings its tools into the session.
| Meta-tool | What it does |
|---|---|
mcp_connect_dispatch |
Describe a task in plain English; picks the best server, loads its tools, exposes them in one call. The fast path. |
安装
npx -y @yawlabs/mcp@latest配置
{
"mcpServers": {
"mcp": { "command": "npx", "args": ["-y", "@yawlabs/mcp@latest"] }
}
}