MCP qBittorrent服务器
一个轻量级的模型上下文协议(MCP)服务器,通过JSON-RPC公开精心策划的qBittorrent自动化原语。该服务将qBittorrent的WebUI API与严格的验证、依赖性注入工具和Jest-based回归测试相结合,因此代理可以安全地查询torrent状态或添加新的torrent。
亮点
- JSON-RPC 2.0传输 与单一
/rpc终点和健康探针/health. - 工具注册表+DI容器 (
lib/mcp)在启动时连接qBittorrent感知工具。 - 严格的论证验证 通过Zod模式来防止格式错误的torrent操作。
- 可测试的组成根 (
createApp)这使得嘲笑成为可能QBitClient在Jest测试中。 - 准备发布Node.js服务 使用基于dotenv的配置和nodemon驱动的开发循环。
建筑
client ──JSON-RPC──> Express (/rpc)
│
▼
JsonRpcHandler
│
ToolService (tools/call)
│
ToolRegistry (DI container)
┌──────────────┴──────────────┐
GetTorrentsTool AddTorrentTool
│ │
└──────────────QBitClient─────┘lib/qbit/QBitClient封装了qBittorrent WebUI的身份验证、cookie重用和重试。- 工具继承自
McpTool并宣布自己的ZodinputSchema加execute逻辑。 ToolService验证tools/call有效载荷,解析工具ToolRegistry,运行它,并将成功/错误结果标准化。
需求
- Node.js 18+(建议使用LTS)
- npm 10+
- 在启用WebUI的情况下运行qBittorrent实例
配置
创建一个 .env 启动服务器之前,请先执行以下操作:
PORT=8000
QBIT_BASE_URL=http://localhost:8080
QBIT_USERNAME=admin
QBIT_PASSWORD=secret
QBIT_TIMEOUT=10000配置选项
- 端口 (可选):服务器端口,默认为
8000 - QBIT_BASE_URL (必填):qBittorrent WebUI URL(必须以http://或https://开头)
- QBIT_用户名 (必填):qBittorrent用户名
- QBIT_PASSWORD (必填):qBittorrent密码
- QBIT超时 (可选):请求超时(毫秒),默认为
10000(10秒)
安装和本地运行
npm install
npm run devnpm run dev使用nodemon启动服务,因此代码编辑会触发重新加载。- 使用
npm start在生产环境中运行server.js直接。
健康和RPC端点
| 方法 | 路径 | 描述 |
|---|---|---|
| 得到 | /health | 退货 { status: "ok" } 用于准备就绪探测。 |
| 职位 | /rpc | 接受用于MCP工具的JSON-RPC 2.0有效载荷。 |
样品申请
curl -X POST http://localhost:8000/rpc \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "qbit/getTorrents",
"arguments": { "filter": "all" }
}
}'样品响应
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"isError": false,
"content": [
{ "name": "ubuntu.iso", "state": "seeding", "progress": 1 },
{ "name": "movie.mkv", "state": "downloading", "progress": 0.42 }
]
}
}可用工具
| 工具名称 | 描述 | 参数 |
|---|---|---|
qbit/getTorrents | 列出种子并返回简化视图(name, hash, size, progress, state, eta).过滤器状态值(例如。, all, downloading, seeding)通过 filter 争论。 | filter?: string |
qbit/addTorrent | 使用磁铁添加新的torrent或 .torrent URL,返回成功标志。 | url: string (valid URL) |
每个工具在接触qBittorrent之前都会强制执行自己的Zod模式,因此格式错误的有效载荷永远不会到达客户端。
测试
运行Jest套件(模拟qBittorrent,因此不需要外部依赖):
npm test现场测试 tests/mcp.test.js 涵盖健康检查、传输错误以及两种刀具路径。
部署说明
- 该服务是无状态的;在任何反向代理后面运行并水平缩放。
- 请确保可以从此服务器访问qBittorrent WebUI API,并且凭据的作用域正确。
- 考虑设置
NODE_ENV=production因此Express省略了堆栈跟踪。 - 安全:参见 安全.md 安全最佳实践,包括:
- 使用TLS/SSL在反向代理后面运行 - 实施速率限制 - 使用强凭据 - 网络隔离建议
贡献
生活指南 CONTRIBUTING.md简而言之:打开一个问题,运行 npm test 在提交之前,记录新工具。
行为准则
参与受以下规定的约束 CODE_OF_CONDUCT.md,它改编了《贡献者公约》,以保持社区的欢迎。
许可证
根据MIT许可证分发。看 LICENSE 了解详情。
维护者
由创建和维护 雅克·默里 ().
