--- title: 'API 参考' description: 'MCPHub REST API 完整参考文档' --- ## 概述 MCPHub 提供全面的 REST API,用于管理 MCP 服务器、用户、组和监控。所有 API 端点都需要身份验证,并支持 JSON 格式的请求和响应。 ## 基础信息 ### 基础 URL ``` https://your-mcphub-instance.com/api ``` ### 身份验证 所有 API 请求都需要身份验证。支持以下方法: #### JWT 令牌认证 ```bash curl -X GET https://api.mcphub.com/servers \ -H "Authorization: Bearer YOUR_JWT_TOKEN" ``` #### API 密钥认证 ```bash curl -X GET https://api.mcphub.com/servers \ -H "X-API-Key: YOUR_API_KEY" ``` ### 请求格式 - **Content-Type**: `application/json` - **Accept**: `application/json` - **User-Agent**: 建议包含您的应用程序名称和版本 ### 响应格式 所有响应都采用 JSON 格式: ```json { "success": true, "data": { // 响应数据 }, "message": "操作成功", "timestamp": "2024-01-01T12:00:00Z" } ``` 错误响应格式: ```json { "success": false, "error": { "code": "VALIDATION_ERROR", "message": "请求数据无效", "details": { "field": "name", "reason": "名称不能为空" } }, "timestamp": "2024-01-01T12:00:00Z" } ``` ## 状态码 | 状态码 | 说明 | | ------ | -------------------- | | 200 | 请求成功 | | 201 | 资源创建成功 | | 204 | 请求成功,无返回内容 | | 400 | 请求参数错误 | | 401 | 未授权访问 | | 403 | 权限不足 | | 404 | 资源不存在 | | 409 | 资源冲突 | | 422 | 请求数据验证失败 | | 429 | 请求频率超限 | | 500 | 服务器内部错误 | ## 分页 支持分页的端点使用以下参数: - `page`: 页码(从 1 开始) - `limit`: 每页记录数(默认 20,最大 100) - `sort`: 排序字段 - `order`: 排序顺序(`asc` 或 `desc`) ```bash curl -X GET "https://api.mcphub.com/servers?page=2&limit=50&sort=name&order=asc" \ -H "Authorization: Bearer $TOKEN" ``` 分页响应格式: ```json { "success": true, "data": { "items": [...], "pagination": { "page": 2, "limit": 50, "total": 234, "pages": 5, "hasNext": true, "hasPrev": true } } } ``` ## 过滤和搜索 支持过滤的端点可以使用以下参数: - `search`: 全文搜索 - `filter[field]`: 字段过滤 - `status`: 状态过滤 - `created_after`: 创建时间筛选 - `created_before`: 创建时间筛选 ```bash curl -X GET "https://api.mcphub.com/servers?search=python&filter[status]=running&created_after=2024-01-01" \ -H "Authorization: Bearer $TOKEN" ``` ## API 端点 ### 服务器管理 #### 获取服务器列表 ```http GET /api/servers ``` 参数: - `status` (可选): 过滤服务器状态 (`running`, `stopped`, `error`) - `group` (可选): 过滤所属组 - `search` (可选): 搜索服务器名称或描述 示例响应: ```json { "success": true, "data": { "items": [ { "id": "server-1", "name": "文件系统服务器", "status": "running", "command": "npx", "args": ["-y", "@modelcontextprotocol/server-filesystem", "/data"], "env": { "NODE_ENV": "production" }, "cwd": "/app", "pid": 12345, "uptime": 3600000, "lastRestart": "2024-01-01T12:00:00Z", "createdAt": "2024-01-01T10:00:00Z", "updatedAt": "2024-01-01T12:00:00Z" } ] } } ``` #### 创建服务器 ```http POST /api/servers ``` 请求体: ```json { "name": "新服务器", "command": "python", "args": ["-m", "mcp_server"], "env": { "API_KEY": "your-api-key", "LOG_LEVEL": "INFO" }, "cwd": "/app/python-server", "enabled": true, "description": "Python MCP 服务器", "tags": ["python", "production"] } ``` #### 获取服务器详情 ```http GET /api/servers/{serverId} ``` #### 更新服务器 ```http PUT /api/servers/{serverId} ``` #### 删除服务器 ```http DELETE /api/servers/{serverId} ``` #### 启动服务器 ```http POST /api/servers/{serverId}/start ``` #### 停止服务器 ```http POST /api/servers/{serverId}/stop ``` 请求体(可选): ```json { "graceful": true, "timeout": 30000 } ``` #### 重启服务器 ```http POST /api/servers/{serverId}/restart ``` #### 获取服务器日志 ```http GET /api/servers/{serverId}/logs ``` 参数: - `level` (可选): 日志级别过滤 - `limit` (可选): 返回日志条数 - `since` (可选): 开始时间 - `follow` (可选): 实时跟踪日志 ### 用户管理 #### 获取用户列表 ```http GET /api/users ``` #### 创建用户 ```http POST /api/users ``` 请求体: ```json { "username": "newuser", "email": "user@example.com", "password": "securepassword", "role": "user", "groups": ["dev-team"], "profile": { "firstName": "张", "lastName": "三", "department": "开发部" } } ``` #### 获取用户详情 ```http GET /api/users/{userId} ``` #### 更新用户 ```http PUT /api/users/{userId} ``` #### 删除用户 ```http DELETE /api/users/{userId} ``` ### 组管理 #### 获取组列表 ```http GET /api/groups ``` #### 创建组 ```http POST /api/groups ``` 请求体: ```json { "name": "dev-team", "displayName": "开发团队", "description": "前端和后端开发人员", "parentGroup": null, "permissions": { "servers": ["read", "write", "execute"], "tools": ["read", "execute"] }, "settings": { "autoAssign": false, "maxMembers": 50, "requireApproval": true } } ``` #### 添加用户到组 ```http POST /api/groups/{groupId}/members ``` 请求体: ```json { "userId": "user123", "role": "member" } ``` #### 从组中移除用户 ```http DELETE /api/groups/{groupId}/members/{userId} ``` #### 分配服务器到组 ```http POST /api/groups/{groupId}/servers ``` 请求体: ```json { "serverId": "server-1", "permissions": ["read", "write", "execute"] } ``` ### 身份验证 #### 登录 ```http POST /api/auth/login ``` 请求体: ```json { "username": "admin", "password": "password", "mfaCode": "123456" } ``` 响应: ```json { "success": true, "data": { "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...", "refreshToken": "refresh_token_here", "expiresIn": 86400, "user": { "id": "user123", "username": "admin", "role": "admin", "permissions": ["*"] } } } ``` #### 刷新令牌 ```http POST /api/auth/refresh ``` #### 注销 ```http POST /api/auth/logout ``` #### 验证令牌 ```http GET /api/auth/verify ``` ### 监控 #### 获取系统状态 ```http GET /api/monitoring/status ``` 响应: ```json { "success": true, "data": { "system": { "uptime": 86400, "version": "2.1.0", "nodeVersion": "18.17.0" }, "servers": { "total": 12, "running": 10, "stopped": 1, "error": 1 }, "performance": { "requestsPerMinute": 85, "avgResponseTime": "245ms", "errorRate": "0.3%" } } } ``` #### 获取性能指标 ```http GET /api/monitoring/metrics ``` 参数: - `timeRange`: 时间范围 (`1h`, `24h`, `7d`, `30d`) - `granularity`: 数据粒度 (`1m`, `5m`, `1h`, `1d`) - `metrics`: 指定指标名称(逗号分隔) #### 获取日志 ```http GET /api/monitoring/logs ``` 参数: - `level`: 日志级别 - `source`: 日志源 - `limit`: 返回条数 - `since`: 开始时间 - `until`: 结束时间 ### 配置管理 #### 获取系统配置 ```http GET /api/config ``` #### 更新系统配置 ```http PUT /api/config ``` 请求体: ```json { "smtp": { "host": "smtp.example.com", "port": 587, "secure": false, "auth": { "user": "noreply@example.com", "pass": "password" } }, "notifications": { "email": true, "slack": true, "webhook": "https://hooks.example.com/notifications" } } ``` ## WebSocket API MCPHub 支持 WebSocket 连接以获取实时更新。 ### 连接 ```javascript const ws = new WebSocket('wss://api.mcphub.com/ws'); ws.onopen = function () { // 发送认证消息 ws.send( JSON.stringify({ type: 'auth', token: 'YOUR_JWT_TOKEN', }), ); }; ``` ### 订阅事件 ```javascript // 订阅服务器状态更新 ws.send( JSON.stringify({ type: 'subscribe', channel: 'server-status', filters: { serverId: 'server-1', }, }), ); // 订阅系统监控 ws.send( JSON.stringify({ type: 'subscribe', channel: 'monitoring', metrics: ['cpu', 'memory', 'requests'], }), ); ``` ### 事件类型 - `server-status`: 服务器状态变化 - `server-logs`: 实时日志流 - `monitoring`: 系统监控指标 - `alerts`: 系统警报 - `user-activity`: 用户活动事件 ## 错误处理 ### 错误代码 | 错误代码 | 描述 | | ----------------------- | -------------- | | `INVALID_REQUEST` | 请求格式无效 | | `AUTHENTICATION_FAILED` | 身份验证失败 | | `AUTHORIZATION_FAILED` | 权限不足 | | `RESOURCE_NOT_FOUND` | 资源不存在 | | `RESOURCE_CONFLICT` | 资源冲突 | | `VALIDATION_ERROR` | 数据验证失败 | | `RATE_LIMIT_EXCEEDED` | 请求频率超限 | | `SERVER_ERROR` | 服务器内部错误 | ### 错误处理示例 ```javascript async function handleApiRequest() { try { const response = await fetch('/api/servers', { headers: { Authorization: `Bearer ${token}`, 'Content-Type': 'application/json', }, }); const data = await response.json(); if (!data.success) { switch (data.error.code) { case 'AUTHENTICATION_FAILED': // 重新登录 redirectToLogin(); break; case 'RATE_LIMIT_EXCEEDED': // 延迟重试 setTimeout(() => handleApiRequest(), 5000); break; default: // 显示错误消息 showError(data.error.message); } return; } // 处理成功响应 handleSuccessResponse(data.data); } catch (error) { // 处理网络错误 console.error('网络请求失败:', error); } } ``` ## 速率限制 API 实施速率限制以防止滥用: - **默认限制**: 每分钟 100 请求 - **认证用户**: 每分钟 1000 请求 - **管理员**: 每分钟 5000 请求 响应头包含速率限制信息: ``` X-RateLimit-Limit: 1000 X-RateLimit-Remaining: 999 X-RateLimit-Reset: 1609459200 ``` ## SDK 和客户端库 ### JavaScript/Node.js ```bash npm install @mcphub/sdk ``` ```javascript import { MCPHubClient } from '@mcphub/sdk'; const client = new MCPHubClient({ baseURL: 'https://api.mcphub.com', token: 'YOUR_JWT_TOKEN', }); // 获取服务器列表 const servers = await client.servers.list(); // 创建服务器 const newServer = await client.servers.create({ name: '新服务器', command: 'python', args: ['-m', 'mcp_server'], }); ``` ### Python ```bash pip install mcphub-sdk ``` ```python from mcphub_sdk import MCPHubClient client = MCPHubClient( base_url='https://api.mcphub.com', token='YOUR_JWT_TOKEN' ) # 获取服务器列表 servers = client.servers.list() # 创建服务器 new_server = client.servers.create( name='新服务器', command='python', args=['-m', 'mcp_server'] ) ``` ## 最佳实践 1. **使用 HTTPS**: 始终通过 HTTPS 访问 API 2. **安全存储令牌**: 不要在客户端代码中硬编码令牌 3. **处理错误**: 实施适当的错误处理和重试逻辑 4. **遵守速率限制**: 监控速率限制并实施退避策略 5. **使用分页**: 对于大数据集使用分页参数 6. **缓存响应**: 适当缓存 API 响应以减少请求 7. **版本控制**: 使用 API 版本号以确保兼容性 有关更多信息,请参阅我们的 [SDK 文档](https://docs.mcphub.com/sdk) 和 [示例代码](https://github.com/mcphub/examples)。