mcpd

GitHub
without mcpdClaude DesktopClaude CodeVS CodeCursorwith mcpdClaude DesktopClaude CodeVS CodeCursormcpd

4 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 NN 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.