mcpd
GitHub4 clients × 4 servers = 16 configs vs 4 + 4 = 8
The problem: every MCP client (Claude Desktop, Claude Code, VS Code, Cursor, etc.) needs its own config listing every server. Add a server, update configs. Remove one, same thing. It doesn’t scale.
mcpd sits in the middle. Register a server once and every client sees it. Unregister it and it disappears from all clients instantly. No restarts, no config editing. Clients are notified automatically via the MCP list_changed protocol.
mcpd aggregates all three MCP primitives—tools, resources, and prompts—from every registered backend into a single endpoint. Tools are namespaced (server__tool) to avoid collisions. Backends spawn on-demand and only start when actually invoked.
Implements the full MCP spec (2025-11-25). Written in Rust, ~1200 lines, MIT licensed. Get it here.
Install
cargo install mcpd
Requires Cargo. No precompiled binaries yet.
Usage
Register servers once:
mcpd register github npx -y @modelcontextprotocol/server-github
mcpd register filesystem npx -y @modelcontextprotocol/server-filesystem /home
Point any MCP client at mcpd:
{
"mcpServers": {
"mcpd": { "command": "mcpd", "args": ["serve"] }
}
}
That’s it. Every client gets every server. Add or remove backends at any time—clients are notified automatically.