内容
# MCPHub:模型上下文协议(MCP)服务器的统一中心
English | [中文版](README.zh.md)
MCPHub 通过将多个MCP(模型上下文协议)服务器组织成灵活的Streamable HTTP(SSE)端点,使得管理和扩展多个MCP服务器变得容易——支持访问所有服务器、单个服务器或逻辑服务器组。

## 🚀 功能特点
- **广泛的MCP服务器支持**:以最小的配置无缝集成任何MCP服务器。
- **集中式仪表盘**:从一个简洁的Web界面监控实时状态和性能指标。
- **灵活的协议处理**:完全兼容stdio和SSE MCP协议。
- **热可更换配置**:动态添加、删除或更新MCP服务器 — 无需停机。
- **基于组的访问控制**:将服务器组织成可自定义的组,以便于权限管理。
- **安全认证**:内置用户管理,支持基于角色的访问控制, powered by JWT 和 bcrypt.
- **Docker就绪**:使用我们的容器化设置立即部署。
## 🔧 快速开始
### 配置
创建 `mcp_settings.json` 文件以自定义服务器设置:
```json
{
"mcpServers": {
"amap": {
"command": "npx",
"args": ["-y", "@amap/amap-maps-mcp-server"],
"env": {
"AMAP_MAPS_API_KEY": "your-api-key"
}
},
"playwright": {
"command": "npx",
"args": ["@playwright/mcp@latest", "--headless"]
},
"fetch": {
"command": "uvx",
"args": ["mcp-server-fetch"]
},
"slack": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-slack"],
"env": {
"SLACK_BOT_TOKEN": "your-bot-token",
"SLACK_TEAM_ID": "your-team-id"
}
}
}
}
```
### Docker部署
**推荐**:挂载自定义配置文件:
```bash
docker run -p 3000:3000 -v $(pwd)/mcp_settings.json:/app/mcp_settings.json samanhappy/mcphub
```
或使用默认设置运行:
```bash
docker run -p 3000:3000 samanhappy/mcphub
```
### 访问仪表盘
打开 `http://localhost:3000` 并使用您的凭证登录。
> **注意**:默认凭证为 `admin` / `admin123`。
**仪表盘概览**:
- 所有MCP服务器的实时状态
- 启用/禁用或重新配置服务器
- 服务器分组管理
- 访问控制的用户管理
### 流式HTTP端点
> 目前,不同的AI客户端对流式HTTP端点的支持程度不同。如果遇到问题,可以使用SSE端点或等待后续更新。
通过以下方式连接AI客户端(例如Claude Desktop、Cursor、DeepChat等):
```
http://localhost:3000/mcp
```
此端点为所有MCP服务器提供了一个统一的流式HTTP接口,允许您:
- 向任何已配置的MCP服务器发送请求
- 实时接收响应
- 与各种AI客户端和工具轻松集成
- 使用相同的端点访问所有服务器,简化集成过程
**智能路由(实验性)**:
智能路由是MCPHub的智能工具发现系统,它使用向量语义搜索自动为任何给定任务找到最相关的工具。
```
http://localhost:3000/mcp/$smart
```
**工作原理:**
1. **工具索引**:所有MCP工具都会自动转换为向量嵌入,并使用pgvector存储在PostgreSQL中
2. **语义搜索**:用户查询会被转换为向量,并使用余弦相似度与工具嵌入进行匹配
3. **智能过滤**:动态阈值确保相关结果而无噪音
4. **精确执行**:找到的工具可以直接执行,并具有适当的 参数验证
**设置要求:**

要启用智能路由,您需要:
- 带有pgvector扩展的PostgreSQL
- OpenAI API密钥(或兼容的嵌入服务)
- 在MCPHub设置中启用智能路由
**基于组的端点(推荐)**:

要访问特定的服务器组,请使用基于组的HTTP端点:
```
http://localhost:3000/mcp/{group}
```
其中 `{group}` 是您在仪表盘中创建的组的ID或名称。这允许您:
- 连接到按用例组织的特定MCP服务器子集
- 隔离不同的AI工具以访问仅相关的服务器
- 为不同的环境或团队实施更细粒度的访问控制
**服务器特定端点**:
要直接访问单个服务器,请使用服务器特定HTTP端点:
```
http://localhost:3000/mcp/{server}
```
其中 `{server}` 是您要连接的服务器的名称。这允许您直接访问特定的MCP服务器。
> **注意**:如果服务器名称和组名称相同,则组名称将优先。
### SSE端点(未来将被弃用)
通过以下方式连接AI客户端(例如Claude Desktop、Cursor、DeepChat等):
```
http://localhost:3000/sse
```
对于智能路由,请使用:
```
http://localhost:3000/sse/$smart
```
对于特定服务器组的访问,请使用基于组的SSE端点:
```
http://localhost:3000/sse/{group}
```
对于直接访问单个服务器,请使用服务器特定的SSE端点:
```
http://localhost:3000/sse/{server}
```
## 🧑💻 本地开发
```bash
git clone https://github.com/samanhappy/mcphub.git
cd mcphub
pnpm install
pnpm dev
```
这将同时启动前端和后端,并带有热重载。
> 对于Windows用户,您可能需要分别启动后端服务器和前端:`pnpm backend:dev`,`pnpm frontend:dev`。
## 🛠️ 常见问题
### 使用Nginx作为反向代理
如果您使用Nginx作为MCPHub的反向代理,请确保在Nginx设置中添加以下配置:
```nginx
proxy_buffering off
```
## 🔍 技术栈
- **后端**:Node.js, Express, TypeScript
- **前端**:React, Vite, Tailwind CSS
- **认证**:JWT & bcrypt
- **协议**:模型上下文协议SDK
## 👥 贡献
欢迎任何形式的贡献!
- 新功能和优化
- 文档改进
- 错误报告和修复
- 翻译和建议
欢迎加入我们的 [Discord社区](https://discord.gg/qMKNsn5Q) 进行讨论和支持。
## ❤️ 赞助
如果您喜欢这个项目,也许您可以考虑:
[](https://ko-fi.com/samanhappy)
## 🌟 星级历史
[](https://www.star-history.com/#samanhappy/mcphub&Date)
## 📄 许可证
在 [Apache 2.0 License](LICENSE) 下许可。