Spaces:
Sleeping
Sleeping
| --- | |
| title: "OpenAPI 集成" | |
| description: "从 MCP 工具生成 OpenAPI 规范,与 OpenWebUI 和其他系统无缝集成" | |
| --- | |
| # OpenWebUI 集成的 OpenAPI 生成 | |
| MCPHub 现在支持从 MCP 工具生成 OpenAPI 3.0.3 规范,实现与 OpenWebUI 和其他 OpenAPI 兼容系统的无缝集成,无需 MCPO 作为中间代理。 | |
| ## 功能特性 | |
| - ✅ **自动 OpenAPI 生成**:将 MCP 工具转换为 OpenAPI 3.0.3 规范 | |
| - ✅ **OpenWebUI 兼容**:无需 MCPO 代理的直接集成 | |
| - ✅ **实时工具发现**:动态包含已连接 MCP 服务器的工具 | |
| - ✅ **双参数支持**:支持 GET(查询参数)和 POST(JSON 正文)进行工具执行 | |
| - ✅ **无需身份验证**:OpenAPI 端点公开,便于集成 | |
| - ✅ **完整元数据**:具有适当模式和文档的完整 OpenAPI 规范 | |
| ## API 端点 | |
| ### OpenAPI 规范 | |
| <CodeGroup> | |
| ```bash GET /api/openapi.json | |
| curl "http://localhost:3000/api/openapi.json" | |
| ``` | |
| ```bash 带参数 | |
| curl "http://localhost:3000/api/openapi.json?title=我的 MCP API&version=2.0.0" | |
| ``` | |
| </CodeGroup> | |
| 生成并返回所有已连接 MCP 工具的完整 OpenAPI 3.0.3 规范。 | |
| **查询参数:** | |
| <ParamField query="title" type="string" optional> | |
| 自定义 API 标题 | |
| </ParamField> | |
| <ParamField query="description" type="string" optional> | |
| 自定义 API 描述 | |
| </ParamField> | |
| <ParamField query="version" type="string" optional> | |
| 自定义 API 版本 | |
| </ParamField> | |
| <ParamField query="serverUrl" type="string" optional> | |
| 自定义服务器 URL | |
| </ParamField> | |
| <ParamField query="includeDisabled" type="boolean" optional default="false"> | |
| 包含禁用的工具 | |
| </ParamField> | |
| <ParamField query="servers" type="string" optional> | |
| 要包含的服务器名称列表(逗号分隔) | |
| </ParamField> | |
| ### 组/服务器特定的 OpenAPI 规范 | |
| <CodeGroup> | |
| ```bash GET /api/:name/openapi.json | |
| curl "http://localhost:3000/api/mygroup/openapi.json" | |
| ``` | |
| ```bash 带参数 | |
| curl "http://localhost:3000/api/myserver/openapi.json?title=我的服务器 API&version=1.0.0" | |
| ``` | |
| </CodeGroup> | |
| 为特定组或服务器生成并返回 OpenAPI 3.0.3 规范。如果存在具有给定名称的组,则返回该组中所有服务器的规范。否则,将名称视为服务器名称并仅返回该服务器的规范。 | |
| **路径参数:** | |
| <ParamField path="name" type="string" required> | |
| 组 ID/名称或服务器名称 | |
| </ParamField> | |
| **查询参数:** | |
| 与主 OpenAPI 规范端点相同(title、description、version、serverUrl、includeDisabled)。 | |
| ### 可用服务器 | |
| <CodeGroup> | |
| ```bash GET /api/openapi/servers | |
| curl "http://localhost:3000/api/openapi/servers" | |
| ``` | |
| </CodeGroup> | |
| 返回已连接的 MCP 服务器名称列表。 | |
| <ResponseExample> | |
| ```json 示例响应 | |
| { | |
| "success": true, | |
| "data": ["amap", "playwright", "slack"] | |
| } | |
| ``` | |
| </ResponseExample> | |
| ### 工具统计 | |
| <CodeGroup> | |
| ```bash GET /api/openapi/stats | |
| curl "http://localhost:3000/api/openapi/stats" | |
| ``` | |
| </CodeGroup> | |
| 返回有关可用工具和服务器的统计信息。 | |
| <ResponseExample> | |
| ```json 示例响应 | |
| { | |
| "success": true, | |
| "data": { | |
| "totalServers": 3, | |
| "totalTools": 41, | |
| "serverBreakdown": [ | |
| {"name": "amap", "toolCount": 12, "status": "connected"}, | |
| {"name": "playwright", "toolCount": 21, "status": "connected"}, | |
| {"name": "slack", "toolCount": 8, "status": "connected"} | |
| ] | |
| } | |
| } | |
| ``` | |
| </ResponseExample> | |
| ### 工具执行 | |
| <CodeGroup> | |
| ```bash GET /api/tools/{serverName}/{toolName} | |
| curl "http://localhost:3000/api/tools/amap/amap-maps_weather?city=Beijing" | |
| ``` | |
| ```bash POST /api/tools/{serverName}/{toolName} | |
| curl -X POST "http://localhost:3000/api/tools/playwright/playwright-browser_navigate" \ | |
| -H "Content-Type: application/json" \ | |
| -d '{"url": "https://example.com"}' | |
| ``` | |
| </CodeGroup> | |
| 通过 OpenAPI 兼容端点执行 MCP 工具。 | |
| **路径参数:** | |
| <ParamField path="serverName" type="string" required> | |
| MCP 服务器的名称 | |
| </ParamField> | |
| <ParamField path="toolName" type="string" required> | |
| 要执行的工具名称 | |
| </ParamField> | |
| ## OpenWebUI 集成 | |
| 要将 MCPHub 与 OpenWebUI 集成: | |
| <Steps> | |
| <Step title="启动 MCPHub"> | |
| 确保 MCPHub 正在运行,并且已配置 MCP 服务器 | |
| </Step> | |
| <Step title="获取 OpenAPI 规范"> | |
| ```bash | |
| curl http://localhost:3000/api/openapi.json > mcphub-api.json | |
| ``` | |
| </Step> | |
| <Step title="添加到 OpenWebUI"> | |
| 在 OpenWebUI 中导入 OpenAPI 规范文件或直接指向 URL | |
| </Step> | |
| </Steps> | |
| ### 配置示例 | |
| 在 OpenWebUI 中,您可以通过以下方式将 MCPHub 添加为 OpenAPI 工具: | |
| <CardGroup cols={2}> | |
| <Card title="OpenAPI URL" icon="link"> | |
| `http://localhost:3000/api/openapi.json` | |
| </Card> | |
| <Card title="基础 URL" icon="server"> | |
| `http://localhost:3000/api` | |
| </Card> | |
| </CardGroup> | |
| ## 生成的 OpenAPI 结构 | |
| 生成的 OpenAPI 规范包括: | |
| ### 工具转换逻辑 | |
| - **简单工具**(≤10 个原始参数)→ 带查询参数的 GET 端点 | |
| - **复杂工具**(对象、数组或 >10 个参数)→ 带 JSON 请求正文的 POST 端点 | |
| - **所有工具**都包含完整的响应模式和错误处理 | |
| ### 生成操作示例 | |
| ```yaml | |
| /tools/amap/amap-maps_weather: | |
| get: | |
| summary: "根据城市名称或者标准adcode查询指定城市的天气" | |
| operationId: "amap_amap-maps_weather" | |
| tags: ["amap"] | |
| parameters: | |
| - name: city | |
| in: query | |
| required: true | |
| description: "城市名称或者adcode" | |
| schema: | |
| type: string | |
| responses: | |
| '200': | |
| description: "Successful tool execution" | |
| content: | |
| application/json: | |
| schema: | |
| $ref: '#/components/schemas/ToolResponse' | |
| ``` | |
| ### 安全性 | |
| - 定义了 Bearer 身份验证但不对工具执行端点强制执行 | |
| - 支持与各种 OpenAPI 兼容系统的灵活集成 | |
| ## 相比 MCPO 的优势 | |
| <CardGroup cols={2}> | |
| <Card title="直接集成" icon="plug"> | |
| 无需中间代理 | |
| </Card> | |
| <Card title="实时更新" icon="refresh"> | |
| OpenAPI 规范随着 MCP 服务器连接/断开自动更新 | |
| </Card> | |
| <Card title="更好的性能" icon="bolt"> | |
| 直接工具执行,无代理开销 | |
| </Card> | |
| <Card title="简化架构" icon="layer-group"> | |
| 减少一个需要管理的组件 | |
| </Card> | |
| </CardGroup> | |
| ## 故障排除 | |
| <AccordionGroup> | |
| <Accordion title="OpenAPI 规范显示没有工具"> | |
| 确保 MCP 服务器已连接。检查 `/api/openapi/stats` 查看服务器状态。 | |
| </Accordion> | |
| <Accordion title="工具执行失败"> | |
| 验证工具名称和参数是否与 OpenAPI 规范匹配。检查服务器日志以获取详细信息。 | |
| </Accordion> | |
| <Accordion title="OpenWebUI 无法连接"> | |
| 确保 MCPHub 可从 OpenWebUI 访问,并且 OpenAPI URL 正确。 | |
| </Accordion> | |
| <Accordion title="规范中缺少工具"> | |
| 检查您的 MCP 服务器配置中是否启用了工具。使用 `includeDisabled=true` 查看所有工具。 | |
| </Accordion> | |
| </AccordionGroup> | |