The MCP Hub. One config that bridges every AI agent (Claude, Cursor, Windsurf, Copilot, Gemini) to every MCP server you register.
npx @curatedmcp/launcher initPlug it in once. Add servers anytime. Use them in any AI agent.
If you use MCP servers across multiple AI clients, you've felt this pain:
- You configure GitHub MCP in Claude Desktop. Then you switch to Cursor and have to do it again.
- You add five servers to Claude. Want them in Windsurf too? Edit a different config file.
- A new AI agent ships? Re-paste every server config from scratch.
Launcher fixes that. It's one MCP entry that fans out to every server you've added, in every AI client.
Claude Cursor Windsurf Copilot Gemini
\ \ | / /
┌──────────────────────────┐
│ @curatedmcp/launcher │ ← one config in each agent
│ (the MCP hub) │
└────┬──────┬──────┬───────┘
│ │ │
GitHub Postgres Stripe ← `launcher add`'d once, available everywhere
Drop this entry into your MCP config:
{
"mcpServers": {
"curatedmcp": {
"command": "npx",
"args": ["-y", "@curatedmcp/launcher"]
}
}
}Config file location:
| Client | Path |
|---|---|
| Claude Desktop | ~/Library/Application Support/Claude/claude_desktop_config.json (mac) / %APPDATA%\Claude\claude_desktop_config.json (win) |
| Cursor | ~/.cursor/mcp.json |
| Windsurf | ~/.codeium/windsurf/mcp_config.json |
| Claude Code | ~/.claude/mcp.json (or .claude/mcp.json per-project) |
npx @curatedmcp/launcher add github
# Prompts for GITHUB_TOKEN
npx @curatedmcp/launcher add postgres --env DATABASE_URL=postgres://...
npx @curatedmcp/launcher listTools appear with a <slug>__ prefix:
github__create_issuepostgres__queryfilesystem__read_file
That's it. Add more servers any time — just add and restart.
launcher # Run as MCP server (used by AI clients)
launcher init # Print the config snippet for your AI client
launcher add <slug> # Add a server from the CuratedMCP catalog
--env KEY=value # Pre-supply env vars (otherwise prompted)
launcher remove <slug> # Remove a server from your stack
launcher list # Show your stack
launcher --version # Print version
launcher --help # Print help
- Your AI client launches
npx @curatedmcp/launcherover stdio (one MCP entry, like any other). - Launcher reads
~/.curatedmcp/stack.jsonand spawns each registered server as a child process over stdio. - On
tools/list, Launcher aggregates every child's tools and returns them prefixed with the server's slug. - On
tools/call, Launcher routes the request to the matching child by name prefix and forwards the response unchanged.
This makes Launcher invisible to the agent — it sees one MCP server with all the tools — while behind the scenes you've got N independent processes, isolated, each with its own credentials.
~/.curatedmcp/stack.json — plain JSON, hand-editable, version-controllable:
{
"version": 1,
"entries": [
{
"slug": "github",
"name": "GitHub",
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-github"],
"env": { "GITHUB_TOKEN": "ghp_xxxxxxxxxxxx" },
"addedAt": "2026-05-01T10:14:00.000Z"
}
]
}Set "disabled": true on an entry to skip it without removing it.
Launcher itself exposes 5 discovery tools to your AI client, so you can ask the agent:
"Find me an MCP server for Postgres." "What's the best Stripe MCP?" "Add the Postgres MCP server to my stack."
The agent uses search_servers, get_server_details, and add_to_stack to do all of that without you leaving the chat.
- All config is local at
~/.curatedmcp/stack.json. No cloud sync, no account. - Anonymous telemetry only (event names like "search", "add"). Disable with
--no-telemetryorCURATOR_TELEMETRY=false. - A persistent UUID is stored at
~/.curatedmcp/launcher.jsonfor de-duplication.
- Works with Claude Desktop, Claude Code, Cursor, Windsurf, Copilot, Gemini, OpenAI Agents — anything that supports MCP over stdio.
- Node.js ≥ 18.
- Single dependency:
@modelcontextprotocol/sdk.
MIT licensed.