File size: 6,974 Bytes
07af8f3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
---
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>