使用说明
MCP站
一个带有web UI的自托管MCP(模型上下文协议)服务器管理器,旨在作为自定义应用程序在 TrueNAS方牙.
想想Docker Desktop的MCP工具包,但它是自托管在NAS上的。
特性
- Web用户界面 --从浏览器添加、启动、停止和监视MCP服务器
- 实时更新 --服务器发送事件流状态实时更改和记录
- 代理作曲家 --将服务器分组到具有单个端点的命名代理中
- 市场 --从官方MCP注册表浏览并一键安装
- 工具资源管理器 --查看正在运行的服务器公开的所有工具
- 端点日志 --实时检查MCP流量
- 自动重启 --发生故障的服务器会以指数级回退自动重启
- 双重运输 --支持传统SSE(
/mcp/sse)以及新的流式HTTP(/mcp)运输 - TrueNAS原生 --作为Docker Compose自定义应用程序运行;配置在您的数据集上持续存在
- REST API -UI所做的一切都可以通过API获得
快速开始
TrueNAS方牙
- 首选 Apps → 自定义应用程序→ 安装
- 粘贴以下内容
compose.yaml进入撰写编辑器 - 设置环境变量:
AUTH_TOKEN-API访问的秘密令牌DATA_PATH--TrueNAS数据集的路径,例如。/mnt/tank/mcp-station
- 点击 安装 --该应用程序将在
http://truenas.local:3000
本地开发
git clone https://github.com/braynshock/mcp-station
cd mcp-station
cp .env.example .env
# Edit .env as needed
cd backend
npm install
npm run dev
打开http://localhost:3000
配置
所有配置都存储在 config.json 里面 DATA_PATH。服务器在重新启动时热重新加载配置。
看 backend/config/config.example.json 对于完整的模式。
环境变量
| 变量 | 默认值 | 描述 |
|---|---|---|
PORT |
3000 |
端口UI和API侦听 |
AUTH_TOKEN |
changeme |
API身份验证的承载令牌(设置为时已禁用身份验证 changeme) |
DATA_PATH |
./data |
保存配置和日志的地方 |
FILES_PATH |
(可选) | 文件系统MCP sidecar容器的路径 |
添加MCP服务器
通过用户界面
点击 添加服务器 并填写:
- 名字 --显示名称
- 类型 —
npm,docker,local,或remote - 命令 --npm包、Docker镜像、二进制路径或SSE/HTTP URL
- 环境 -环境变量的JSON对象(API键等)
- 运输 —
stdio(默认为本地),sse,或http
通过API
curl -X POST http://localhost:3000/api/servers \
-H "Authorization: Bearer your-token" \
-H "Content-Type: application/json" \
-d '{
"name": "Brave Search",
"type": "npm",
"command": "@modelcontextprotocol/server-brave-search",
"transport": "stdio",
"env": { "BRAVE_API_KEY": "sk-..." }
}'
MCP端点
可流式HTTP(推荐——MCP规范2025-03-26)
与OpenWebUI和支持最新MCP规范的任何客户端兼容:
POST http://<host>:3000/mcp
GET http://<host>:3000/mcp (optional SSE stream)
传统苏格兰和南方能源公司运输
对于LiteLLM、Claude Desktop、Cursor和较旧的MCP客户端:
http://<host>:3000/mcp/sse
两个端点都聚合了所有正在运行的工具 stdio-将基于服务器的连接转换为单个多路复用连接。
LiteLLM配置示例:
mcp_servers:
- name: mcp-station
url: http://192.168.0.160:3000/mcp/sse
# If AUTH_TOKEN is set:
# headers:
# Authorization: "Bearer <your-token>"
# or append ?token=<your-token> to the URL
REST API
| 方法 | 路径 | 描述 |
|---|---|---|
GET |
/health |
健康检查 |
GET |
/api/stats |
统计摘要(服务器、工具、代理、今天的通话) |
GET |
/api/servers |
列出所有服务器 |
POST |
/api/servers |
注册新服务器 |
GET |
/api/servers/:id |
获取服务器 |
PATCH |
/api/servers/:id |
更新服务器 |
DELETE |
/api/servers/:id |
删除服务器 |
POST |
/api/servers/:id/start |
启动服务器 |
POST |
/api/servers/:id/stop |
停止服务器 |
GET |
/api/servers/:id/logs |
获取服务器日志 |
GET |
/api/tools |
列出运行服务器中的所有工具 |
GET |
/api/agents |
列出代理 |
POST |
/api/agents |
创建代理 |
PATCH |
/api/agents/:id |
更新代理 |
DELETE |
/api/agents/:id |
删除代理 |
GET |
/api/marketplace |
浏览MCP注册表(支持光标分页) |
GET |
/api/endpoint-logs |
获取MCP端点流量日志 |
GET |
/api/events |
SSE实时UI事件流 |
POST |
/mcp |
MCP流式HTTP——JSON-RPC处理程序 |
GET |
/mcp |
MCP流式HTTP——可选SSE流 |
DELETE |
/mcp |
MCP流式HTTP--终止会话 |
GET |
/mcp/sse |
MCP传统SSE传输 |
POST |
/mcp/messages |
MCP遗留SSE——消息处理程序 |
除以下路线外的所有路线 /health 和 /mcp/messages 需要 Authorization: Bearer <AUTH_TOKEN> (或 ?token=<AUTH_TOKEN>)何时 AUTH_TOKEN 设置为非默认值。
Docker镜像
每次推送时,Docker镜像都会自动构建并发布到GitHub容器注册表 main:
docker pull ghcr.io/braynshock/mcp-station:latest
建筑
┌─────────────────────────────────────────┐
│ TrueNAS Fangtooth │
│ │
│ ┌─────────────────────────────────┐ │
│ │ mcp-station container │ │
│ │ │ │
│ │ Express (port 3000) │ │
│ │ ├── GET / → Web UI │ │
│ │ ├── /api/* → REST API │ │
│ │ ├── /api/events → UI SSE │ │
│ │ ├── POST /mcp → HTTP MCP │ │
│ │ ├── GET /mcp/sse → SSE MCP │ │
│ │ └── POST /mcp/messages → MCP │ │
│ │ │ │
│ │ Process Manager (JSON-RPC) │ │
│ │ ├── server-filesystem (stdio) │ │
│ │ ├── server-brave-search (stdio)│ │
│ │ └── github-mcp (docker) │ │
│ └────────────────┬────────────────┘ │
│ │ :3000 │
└───────────────────┼─────────────────────┘
│
Claude Desktop / Cursor / LiteLLM / OpenWebUI
(connects via /mcp or /mcp/sse)
路线图
- [x] MCP多路复用——所有运行服务器的单一端点
- [x] Marketplace--从MCP注册表一键安装
- [x] 工具资源管理器--查看服务器上的所有可用工具
- [x] MCP流式HTTP传输(2025-03-26规范,兼容OpenWebUI)
- [x] 端点日志--检查MCP流量
- []每个代理的工具级访问控制
- []OAuth/多用户支持
- []导入/导出配置
- []一键式服务器更新
贡献
PR欢迎。对于较大的更改,请先打开一个问题。
许可证
麻省理工学院
