MCP Hub 是一个用于管理 MCP 服务器和客户端的中央协调器,提供两个关键接口:
这种双接口方法意味着您可以通过 Hub 的 UI 来管理服务器,而 MCP 客户端(如 Claude Desktop、Cline 等)只需连接到一个端点 (localhost:37373/mcp) 即可访问所有功能。实现了 MCP 2025-03-26 规范。
| 类别 | 功能 | 支持 | 备注 |
|---|---|---|---|
| 传输 | |||
| streamable-http | ✅ | 远程服务器的主要传输协议 | |
| SSE | ✅ | 远程服务器的备用传输协议 | |
| STDIO | ✅ | 用于运行本地服务器 | |
| 认证 | |||
| OAuth 2.0 | ✅ | 包含 PKCE 流程 | |
| Headers | ✅ | 用于 API 密钥/令牌 | |
| 能力 | |||
| 工具 | ✅ | 列出工具 | |
| 🔔 工具列表更改 | ✅ | 实时更新 | |
| 资源 | ✅ | 完整支持 | |
| 🔔 资源列表更改 | ✅ | 实时更新 | |
| 资源模板 | ✅ | URI 模板 | |
| 提示 | ✅ | 完整支持 | |
| 🔔 提示列表更改 | ✅ | 实时更新 | |
| 根目录 | ❌ | 不支持 | |
| 抽样 | ❌ | 不支持 | |
| 完成 | ❌ | 不支持 | |
| 市场 | |||
| 服务器发现 | ✅ | 浏览可用服务器 | |
| 安装 | ✅ | 自动配置 | |
| 实时 | |||
| 状态更新 | ✅ | 服务器及连接状态 | |
| 能力更新 | ✅ | 自动刷新 | |
| 事件流至客户端 | ✅ | 基于 SSE | |
| 自动重连 | ✅ | 包含退避策略 | |
| 开发 | |||
| 热重载 | ✅ | 在文件更改时自动重启 MCP 服务器(使用 dev 模式) | |
| 配置 | |||
${} 语法 | ✅ | 在所有字段中支持环境变量和命令执行 | |
| VS Code 兼容性 | ✅ | 支持 servers 键、${env:}、${input:}、预定义变量 | |
| JSON5 支持 | ✅ | 配置文件中的注释和尾随逗号 |
通过一个端点配置所有 MCP 客户端:
{
"mcpServers" : {
"Hub": {
"url" : "http://localhost:37373/mcp"
}
}
}
Hub 自动:
filesystem__search vs database__search)统一的 MCP 服务器端点 (/mcp):
动态服务器管理:
统一的 REST API:
实时事件与监控:
客户端连接管理:
进程生命周期管理:
工作区管理:
主要管理服务器,它:
连接的服务,它们:
npm install -g mcp-hub
启动 Hub 服务器:
mcp-hub --port 3000 --config path/to/config.json
# 或者使用多个配置文件(按顺序合并)
mcp-hub --port 3000 --config ~/.config/mcphub/global.json --config ./.mcphub/project.json
选项:
--port 服务器运行的端口(必需)
--config 配置文件路径。可以多次指定。按顺序合并。(必需)
--watch 监视配置文件的变化,仅更新受影响的服务器(默认:false)
--auto-shutdown 是否在没有客户端连接时自动关闭(默认:false)
--shutdown-delay 启用自动关闭时延迟关闭的毫秒数(默认:0)
-h, --help 显示帮助信息
MCP Hub 使用 JSON 配置文件来定义托管服务器,并使用 通用 ${} 占位符语法 来支持环境变量和命令执行。
MCP Hub 提供无缝兼容 VS Code 的 .vscode/mcp.json 配置格式,允许您在 VS Code 和 MCP Hub 中使用相同的配置文件。
同时支持 mcpServers 和 servers 键:
{
"servers": {
"github": {
"url": "https://api.githubcopilot.com/mcp/"
},
"perplexity": {
"command": "npx",
"args": ["-y", "server-perplexity-ask"],
"env": {
"API_KEY": "${env:PERPLEXITY_API_KEY}"
}
}
}
}
MCP Hub 支持 VS Code 样式的变量替换:
${env:VARIABLE_NAME} 或 ${VARIABLE_NAME}${workspaceFolder}、${userHome}、${pathSeparator}${cmd: command args}支持的预定义变量:
${workspaceFolder} - mcp-hub 运行的目录${userHome} - 用户的主目录${pathSeparator} - 操作系统路径分隔符(/ 或 \)${workspaceFolderBasename} - 仅文件夹名称${cwd} - workspaceFolder 的别名${/} - VS Code 缩写形式的路径分隔符对于 VS Code 配置中的 ${input:} 变量,使用 MCP_HUB_ENV 环境变量:
# 全局设置输入变量
export MCP_HUB_ENV='{"input:api-key":"your-secret-key","input:database-url":"postgresql://..."}'
# 然后在配置中使用
{
"servers": {
"myserver": {
"env": {
"API_KEY": "${input:api-key}"
}
}
}
}
现有的 .vscode/mcp.json 文件可以直接与 MCP Hub 一起使用。只需指向 MCP Hub 的 VS Code 配置:
mcp-hub --config .vscode/mcp.json --port 3000
MCP Hub 支持加载多个配置文件,这些文件按顺序合并。这使得配置管理更加灵活:
~/.config/mcphub/global.json)./.mcphub/project.json)当指定了多个配置文件时,它们按顺序合并,后面的文件会覆盖前面的文件:
# 先加载全局配置,然后项目配置覆盖
mcp-hub --port 3000 --config ~/.config/mcphub/global.json --config ./.mcphub/project.json
合并行为:
mcpServers 部分合并(后面文件中的服务器定义覆盖前面的)${ENV_VAR} 或 ${env:ENV_VAR} - 解析环境变量${cmd: command args} - 执行命令并使用输出${workspaceFolder} - mcp-hub 运行的目录${userHome} - 用户的主目录${pathSeparator} - 操作系统路径分隔符${input:variable-id} - 从 MCP_HUB_ENV 解析(VS Code 兼容)null 或 "" - 回退到 process.env{
"mcpServers": {
"local-server": {
"command": "${MCP_BINARY_PATH}/server",
"args": [
"--token", "${API_TOKEN}",
"--database", "${DB_URL}",
"--secret", "${cmd: op read op://vault/secret}"
],
"env": {
"API_TOKEN": "${cmd: aws ssm get-parameter --name /app/token --query Parameter.Value --output text}",
"DB_URL": "postgresql://user:${DB_PASSWORD}@localhost/myapp",
"DB_PASSWORD": "${cmd: op read op://vault/db/password}",
"FALLBACK_VAR": null
},
"dev": {
"enabled": true,
"watch": ["src/**/*.js", "**/*.json"],
"cwd": "/absolute/path/to/server/directory"
}
}
}
}
{
"mcpServers": {
"remote-server": {
"url": "https://${PRIVATE_DOMAIN}/mcp",
"headers": {
"Authorization": "Bearer ${cmd: op read op://vault/api/token}",
"X-Custom-Header": "${CUSTOM_VALUE}"
}
}
}
}
MCP Hub 支持 STDIO 服务器和远程服务器(streamable-http/SSE)。服务器类型会根据配置自动检测。所有字段都支持通用 ${} 占位符语法。
用于本地运行基于脚本的 MCP 服务器:
${VARIABLE} 和 ${cmd: command})${VARIABLE} 和 ${cmd: command} 占位符)MCP_HUB_ENV)MCP Hub 会在其自身的进程环境中查找环境变量 MCP_HUB_ENV(JSON 字符串)。如果设置了该变量,其中的所有键值对都会注入到每个托管 MCP 服务器的环境中(包括 stdio 和远程)。这对于传递密钥、令牌或其他共享配置到所有服务器而不必在每个服务器配置中重复它们非常有用。
env 字段始终覆盖来自 MCP_HUB_ENV 的值。MCP_HUB_ENV='{"DBUS_SESSION_BUS_ADDRESS":"/run/user/1000/bus","MY_TOKEN":"abc"}' mcp-hub --port 3000 --config path/to/config.json
用于连接到远程 MCP 服务器:
${VARIABLE} 和 ${cmd: command} 占位符)${VARIABLE} 和 ${cmd: command} 占位符)服务器类型由以下决定:
command 字段url 字段注意:服务器配置不能混用 STDIO 和远程服务器字段。
${cmd: command args} 首先执行${VAR} 从 env 对象解析,然后从 process.envnull 或 "" 值回退到 process.env即将推出...
只需将其添加到您的 NixOS flake.nix 或 home-manager:
inputs = {
mcp-hub.url = "github:ravitemer/mcp-hub";
...
}
要将 mcp-hub 整合到您的 NixOS/Home Manager 配置中,请分别在您的环境 systemPackages 或 home.packages 中添加以下内容:
inputs.mcp-hub.packages."${system}".default
如果您想使用 mcphub.nvim 而不将 mcp-hub 服务器添加到 PATH 中,可以在插件配置中的 cmd 命令中添加 mcp-hub 的 Nix 存储路径:
Nixvim 示例:
{ mcphub-nvim, mcp-hub, ... }:
{
extraPlugins = [mcphub-nvim];
extraConfigLua = ''
require("mcphub").setup({
port = 3000,
config = vim.fn.expand("~/mcp-hub/mcp-servers.json"),
cmd = "${mcp-hub}/bin/mcp-hub"
})
'';
}
# 其中
{
# 对于 nixpkgs(尚未提供)
mcp-hub = pkgs.mcp-hub;
# 对于 flakes
mcp-hub = inputs.mcp-hub.packages."${system}".default;
}
ravitemer/mcphub.nvim 插件提供了与 Neovim 的无缝集成,允许直接从编辑器与 MCP Hub 交互:
GET /api/health
健康端点提供全面的状态信息,包括: