File size: 7,371 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 Integration"
description: "Generate OpenAPI specifications from MCP tools for seamless integration with OpenWebUI and other systems"
---

# OpenAPI Generation for OpenWebUI Integration

MCPHub now supports generating OpenAPI 3.0.3 specifications from MCP tools, enabling seamless integration with OpenWebUI and other OpenAPI-compatible systems without requiring MCPO as an intermediary proxy.

## Features

- ✅ **Automatic OpenAPI Generation**: Converts MCP tools to OpenAPI 3.0.3 specification
- ✅ **OpenWebUI Compatible**: Direct integration without MCPO proxy
- ✅ **Real-time Tool Discovery**: Dynamically includes tools from connected MCP servers
- ✅ **Dual Parameter Support**: Supports both GET (query params) and POST (JSON body) for tool execution
- ✅ **No Authentication Required**: OpenAPI endpoints are public for easy integration
- ✅ **Comprehensive Metadata**: Full OpenAPI specification with proper schemas and documentation

## API Endpoints

### OpenAPI Specification

<CodeGroup>

```bash GET /api/openapi.json
curl "http://localhost:3000/api/openapi.json"
```

```bash With Parameters
curl "http://localhost:3000/api/openapi.json?title=My MCP API&version=2.0.0"
```

</CodeGroup>

Generates and returns the complete OpenAPI 3.0.3 specification for all connected MCP tools.

**Query Parameters:**

<ParamField query="title" type="string" optional>
  Custom API title
</ParamField>

<ParamField query="description" type="string" optional>
  Custom API description
</ParamField>

<ParamField query="version" type="string" optional>
  Custom API version
</ParamField>

<ParamField query="serverUrl" type="string" optional>
  Custom server URL
</ParamField>

<ParamField query="includeDisabled" type="boolean" optional default="false">
  Include disabled tools
</ParamField>

<ParamField query="servers" type="string" optional>
  Comma-separated list of server names to include
</ParamField>

### Group/Server-Specific OpenAPI Specification

<CodeGroup>

```bash GET /api/:name/openapi.json
curl "http://localhost:3000/api/mygroup/openapi.json"
```

```bash With Parameters
curl "http://localhost:3000/api/myserver/openapi.json?title=My Server API&version=1.0.0"
```

</CodeGroup>

Generates and returns the OpenAPI 3.0.3 specification for a specific group or server. If a group with the given name exists, it returns the specification for all servers in that group. Otherwise, it treats the name as a server name and returns the specification for that server only.

**Path Parameters:**

<ParamField path="name" type="string" required>
  Group ID/name or server name
</ParamField>

**Query Parameters:**

Same as the main OpenAPI specification endpoint (title, description, version, serverUrl, includeDisabled).

### Available Servers

<CodeGroup>

```bash GET /api/openapi/servers
curl "http://localhost:3000/api/openapi/servers"
```

</CodeGroup>

Returns a list of connected MCP server names.

<ResponseExample>

```json Example Response
{
  "success": true,
  "data": ["amap", "playwright", "slack"]
}
```

</ResponseExample>

### Tool Statistics

<CodeGroup>

```bash GET /api/openapi/stats
curl "http://localhost:3000/api/openapi/stats"
```

</CodeGroup>

Returns statistics about available tools and servers.

<ResponseExample>

```json Example Response
{
  "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>

### Tool Execution

<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>

Execute MCP tools via OpenAPI-compatible endpoints.

**Path Parameters:**

<ParamField path="serverName" type="string" required>
  The name of the MCP server
</ParamField>

<ParamField path="toolName" type="string" required>
  The name of the tool to execute
</ParamField>

## OpenWebUI Integration

To integrate MCPHub with OpenWebUI:

<Steps>
  <Step title="Start MCPHub">
    Ensure MCPHub is running with your MCP servers configured
  </Step>
  <Step title="Get OpenAPI Specification">
    ```bash
    curl http://localhost:3000/api/openapi.json > mcphub-api.json
    ```
  </Step>
  <Step title="Add to OpenWebUI">
    Import the OpenAPI specification file or point to the URL directly in OpenWebUI
  </Step>
</Steps>

### Configuration Example

In OpenWebUI, you can add MCPHub as an OpenAPI tool by using:

<CardGroup cols={2}>
  <Card title="OpenAPI URL" icon="link">
    `http://localhost:3000/api/openapi.json`
  </Card>
  <Card title="Base URL" icon="server">
    `http://localhost:3000/api`
  </Card>
</CardGroup>

## Generated OpenAPI Structure

The generated OpenAPI specification includes:

### Tool Conversion Logic

- **Simple tools** (≤10 primitive parameters) → GET endpoints with query parameters
- **Complex tools** (objects, arrays, or >10 parameters) → POST endpoints with JSON request body
- **All tools** include comprehensive response schemas and error handling

### Example Generated Operation

```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'
```

### Security

- Bearer authentication is defined but not enforced for tool execution endpoints
- Enables flexible integration with various OpenAPI-compatible systems

## Benefits over MCPO

<CardGroup cols={2}>
  <Card title="Direct Integration" icon="plug">
    No need for intermediate proxy
  </Card>
  <Card title="Real-time Updates" icon="refresh">
    OpenAPI spec updates automatically as MCP servers connect/disconnect
  </Card>
  <Card title="Better Performance" icon="bolt">
    Direct tool execution without proxy overhead
  </Card>
  <Card title="Simplified Architecture" icon="layer-group">
    One less component to manage
  </Card>
</CardGroup>

## Troubleshooting

<AccordionGroup>
  <Accordion title="OpenAPI spec shows no tools">
    Ensure MCP servers are connected. Check `/api/openapi/stats` for server status.
  </Accordion>
  
  <Accordion title="Tool execution fails">
    Verify the tool name and parameters match the OpenAPI specification. Check server logs for details.
  </Accordion>
  
  <Accordion title="OpenWebUI can't connect">
    Ensure MCPHub is accessible from OpenWebUI and the OpenAPI URL is correct.
  </Accordion>
  
  <Accordion title="Missing tools in specification">
    Check if tools are enabled in your MCP server configuration. Use `includeDisabled=true` to see all tools.
  </Accordion>
</AccordionGroup>