1MCP
Runs many MCP servers behind one local runtime and hands each client a filtered view of them
Local hub that runs many MCP servers and serves all their tools through one endpoint
By ravitemer (individual) JavaScript Local · Streamable HTTP Developer tools
29 popularity score ★ 525 ↓ 433/wk
Opens the app, which asks before it adds the server.
claude mcp add --transport http hub http://localhost:37373/mcp{
"mcpServers": {
"hub": {
"url": "http://localhost:37373/mcp"
}
}
}{
"servers": {
"hub": {
"type": "http",
"url": "http://localhost:37373/mcp"
}
}
}[mcp_servers.hub]
url = "http://localhost:37373/mcp"gemini mcp add --scope user --transport http hub http://localhost:37373/mcpMCP_HUB_ENV |
Optional: JSON object of variables injected into every managed server's environment and used to resolve ${input:...} placeholders. |
|---|---|
XDG_STATE_HOME |
Optional: Base folder for logs, OAuth storage and the workspace cache (default ~/.local/state). |
MCP Hub is a long-running local process that starts and supervises the MCP servers listed in one or more JSON config files, then offers everything they provide through a single MCP endpoint at http://localhost:<port>/mcp. An assistant connects once to the hub instead of to each server. To keep names apart, the hub prefixes each capability with its server's name and a double underscore (a filesystem server's search tool becomes filesystem__search). It forwards tools, resources, resource templates and prompts, and tells connected clients when a server's list changes.
The hub has no tools of its own: what an assistant can do through it is the sum of the servers you configure. Managed servers can be local stdio processes or remote servers over streamable HTTP or SSE, including remote servers that sign in with OAuth or take headers. Config files accept JSON5 and VS Code's mcp.json format, with ${env:...}, ${input:...} and command placeholders, and several files can be merged in order. Beside the MCP endpoint it runs a REST API under /api for starting, stopping and inspecting servers, calling tools directly, and browsing a server catalog; the mcphub.nvim Neovim plugin is built on that API.
Checked in the v4.2.1 source (src/server.js, src/mcp/server.js): the /mcp endpoint is served with the MCP SDK's SSE transport (GET /mcp, then POST /messages), so a client must support SSE to connect. The catalog is downloaded from ravitemer.github.io/mcp-registry/registry.json and cached for one hour by default (src/marketplace.js).
| Runtime | Node.js |
|---|
Node.js with npm (package.json sets no minimum version). Install with npm install -g mcp-hub, write a config file listing your servers, and start it yourself with mcp-hub --port 37373 --config <PATH_TO_CONFIG>; both --port and --config are required. It runs as an HTTP service, not a stdio command, so a client connects to http://localhost:37373/mcp while it runs. Each managed server brings its own runtime and keys. A Nix flake is also offered.
It adds no tools itself; with an empty config an assistant gets nothing. Its README marks MCP roots, sampling and completion as not supported, so managed servers that rely on them lose those features. Version 4.2.1 serves /mcp over SSE only (GET /mcp plus POST /messages in src/server.js), not streamable HTTP, so clients that only speak streamable HTTP cannot connect. The --watch hot reload and dev-mode file watching are off by default, and dev mode needs an absolute cwd per server. The --auto-shutdown option is off by default.
Suits a developer who uses several MCP servers across more than one client (Claude Desktop, Cline, Neovim through mcphub.nvim) and wants to configure them once, see their status, and keep tool names from clashing. It is worth less with a single server, or with a client that only speaks stdio or streamable HTTP, since the hub is a separate HTTP process you must keep running. It is a community project, not tied to any vendor; what it can reach depends wholly on the servers you put in its config.