@miku39r/knife4j-mcp 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/DELIVERY_CHECKLIST.md +343 -0
- package/DEMO.md +350 -0
- package/DEVELOPMENT_SUMMARY.md +271 -0
- package/EXAMPLES.md +189 -0
- package/INDEX.md +158 -0
- package/PROJECT_STRUCTURE.md +213 -0
- package/QUICKSTART.md +148 -0
- package/README.md +198 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +18 -0
- package/dist/knife4j-fetcher.d.ts +39 -0
- package/dist/knife4j-fetcher.js +184 -0
- package/dist/test.d.ts +4 -0
- package/dist/test.js +35 -0
- package/dist/tools/base-tool.d.ts +14 -0
- package/dist/tools/base-tool.js +5 -0
- package/dist/tools/get-doc.d.ts +20 -0
- package/dist/tools/get-doc.js +52 -0
- package/dist/types.d.ts +37 -0
- package/dist/types.js +4 -0
- package/mcp-config.example.json +10 -0
- package/package.json +31 -0
- package/src/index.ts +24 -0
- package/src/tools/base-tool.ts +21 -0
- package/src/tools/get-doc.ts +59 -0
- package/src/types.ts +42 -0
- package/tsconfig.json +18 -0
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
# Knife4j MCP 项目结构
|
|
2
|
+
|
|
3
|
+
## 📁 目录结构
|
|
4
|
+
|
|
5
|
+
```
|
|
6
|
+
knife4j-mcp/
|
|
7
|
+
├── src/ # 源代码目录
|
|
8
|
+
│ ├── index.ts # MCP 服务器入口文件
|
|
9
|
+
│ ├── knife4j-fetcher.ts # Knife4j API 文档获取工具类
|
|
10
|
+
│ ├── types.ts # TypeScript 类型定义
|
|
11
|
+
│ └── test.ts # 测试脚本
|
|
12
|
+
│
|
|
13
|
+
├── dist/ # 编译后的 JavaScript 代码
|
|
14
|
+
│ ├── index.js # MCP 服务器主文件
|
|
15
|
+
│ ├── knife4j-fetcher.js # 获取工具类
|
|
16
|
+
│ └── types.js # 类型定义
|
|
17
|
+
│
|
|
18
|
+
├── package.json # 项目配置和依赖
|
|
19
|
+
├── tsconfig.json # TypeScript 配置
|
|
20
|
+
├── mcp-config.example.json # MCP 配置示例
|
|
21
|
+
├── README.md # 完整使用说明
|
|
22
|
+
├── QUICKSTART.md # 快速开始指南
|
|
23
|
+
├── EXAMPLES.md # 详细使用示例
|
|
24
|
+
└── .gitignore # Git 忽略文件
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## 📄 文件说明
|
|
28
|
+
|
|
29
|
+
### 核心文件
|
|
30
|
+
|
|
31
|
+
#### `src/index.ts`
|
|
32
|
+
- **作用**: MCP 服务器的主要入口
|
|
33
|
+
- **功能**:
|
|
34
|
+
- 创建 MCP Server 实例
|
|
35
|
+
- 注册 `fetch_api_documentation` 工具
|
|
36
|
+
- 处理客户端请求
|
|
37
|
+
- 格式化输出结果
|
|
38
|
+
- **运行方式**: 通过 MCP 协议与 AI 客户端通信
|
|
39
|
+
|
|
40
|
+
#### `src/knife4j-fetcher.ts`
|
|
41
|
+
- **作用**: API 文档获取和解析工具类
|
|
42
|
+
- **功能**:
|
|
43
|
+
- 发送 HTTP 请求获取 Swagger/OpenAPI 文档
|
|
44
|
+
- 解析不同格式的文档(Swagger 2.0、OpenAPI 3.0)
|
|
45
|
+
- 提取接口信息(路径、方法、参数、响应)
|
|
46
|
+
- 数据格式转换
|
|
47
|
+
- **关键方法**: `fetchApiDocument()`
|
|
48
|
+
|
|
49
|
+
#### `src/types.ts`
|
|
50
|
+
- **作用**: TypeScript 类型定义
|
|
51
|
+
- **包含接口**:
|
|
52
|
+
- `Knife4jDocument`: 完整的 API 文档结构
|
|
53
|
+
- `Knife4jApiInfo`: 单个 API 接口信息
|
|
54
|
+
- `ApiParameter`: 请求参数
|
|
55
|
+
- `ApiResponse`: 响应信息
|
|
56
|
+
- `FetchOptions`: 请求配置选项
|
|
57
|
+
|
|
58
|
+
#### `src/test.ts`
|
|
59
|
+
- **作用**: 独立测试脚本
|
|
60
|
+
- **用途**: 在不启动 MCP 服务的情况下测试获取功能
|
|
61
|
+
|
|
62
|
+
### 配置文件
|
|
63
|
+
|
|
64
|
+
#### `package.json`
|
|
65
|
+
```json
|
|
66
|
+
{
|
|
67
|
+
"scripts": {
|
|
68
|
+
"build": "tsc", // 编译 TypeScript
|
|
69
|
+
"start": "node dist/index.js", // 启动 MCP 服务
|
|
70
|
+
"dev": "tsx src/index.ts", // 开发模式
|
|
71
|
+
"test": "tsx src/test.ts" // 运行测试
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
#### `tsconfig.json`
|
|
77
|
+
- TypeScript 编译配置
|
|
78
|
+
- 输出目录:`dist/`
|
|
79
|
+
- 模块系统:ESNext
|
|
80
|
+
- 目标环境:ES2022
|
|
81
|
+
|
|
82
|
+
#### `mcp-config.example.json`
|
|
83
|
+
- MCP 客户端配置模板
|
|
84
|
+
- 包含服务器路径、工作目录等配置
|
|
85
|
+
|
|
86
|
+
### 文档文件
|
|
87
|
+
|
|
88
|
+
#### `README.md`
|
|
89
|
+
- 完整的功能说明
|
|
90
|
+
- 详细的参数解释
|
|
91
|
+
- 输出格式示例
|
|
92
|
+
- 故障排查指南
|
|
93
|
+
|
|
94
|
+
#### `QUICKSTART.md`
|
|
95
|
+
- 5 分钟快速上手指南
|
|
96
|
+
- 分步骤安装说明
|
|
97
|
+
- 常见使用场景
|
|
98
|
+
- 简化的问题排查
|
|
99
|
+
|
|
100
|
+
#### `EXAMPLES.md`
|
|
101
|
+
- 实际使用场景示例
|
|
102
|
+
- 不同客户端的配置方法
|
|
103
|
+
- 高级用法说明
|
|
104
|
+
- 输出解读指南
|
|
105
|
+
|
|
106
|
+
## 🔧 工作流程
|
|
107
|
+
|
|
108
|
+
### 1. AI 调用流程
|
|
109
|
+
|
|
110
|
+
```
|
|
111
|
+
用户请求 → AI 理解意图 → MCP 客户端 → MCP 服务器 → Knife4jFetcher
|
|
112
|
+
→ HTTP 请求 → Swagger JSON → 解析 → 格式化 → 返回给 AI
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
### 2. 数据处理流程
|
|
116
|
+
|
|
117
|
+
```
|
|
118
|
+
输入 URL
|
|
119
|
+
↓
|
|
120
|
+
HTTP GET 请求
|
|
121
|
+
↓
|
|
122
|
+
Swagger/OpenAPI JSON
|
|
123
|
+
↓
|
|
124
|
+
解析文档结构
|
|
125
|
+
↓
|
|
126
|
+
提取接口信息
|
|
127
|
+
↓
|
|
128
|
+
格式化输出
|
|
129
|
+
↓
|
|
130
|
+
Markdown 文本
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
## 🎯 关键技术点
|
|
134
|
+
|
|
135
|
+
### MCP 协议实现
|
|
136
|
+
- 使用 `@modelcontextprotocol/sdk`
|
|
137
|
+
- 实现 `ListTools` 和 `CallTool` 处理器
|
|
138
|
+
- 通过 `StdioServerTransport` 通信
|
|
139
|
+
|
|
140
|
+
### API 文档解析
|
|
141
|
+
- 支持 Swagger 2.0
|
|
142
|
+
- 支持 OpenAPI 3.0+
|
|
143
|
+
- 自动识别文档格式
|
|
144
|
+
- 统一数据结构
|
|
145
|
+
|
|
146
|
+
### 错误处理
|
|
147
|
+
- 参数验证(Zod)
|
|
148
|
+
- HTTP 错误捕获
|
|
149
|
+
- 超时控制
|
|
150
|
+
- 友好的错误消息
|
|
151
|
+
|
|
152
|
+
### 输出优化
|
|
153
|
+
- Markdown 格式化
|
|
154
|
+
- 按标签分组显示
|
|
155
|
+
- 可视化方法徽章
|
|
156
|
+
- 结构化参数表格
|
|
157
|
+
|
|
158
|
+
## 🚀 扩展性
|
|
159
|
+
|
|
160
|
+
### 添加新工具
|
|
161
|
+
在 `index.ts` 的 `setupToolHandlers()` 中添加:
|
|
162
|
+
|
|
163
|
+
```typescript
|
|
164
|
+
{
|
|
165
|
+
name: 'new_tool',
|
|
166
|
+
description: '新工具描述',
|
|
167
|
+
inputSchema: { /* 参数定义 */ }
|
|
168
|
+
}
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
### 支持更多格式
|
|
172
|
+
在 `knife4j-fetcher.ts` 中添加新的解析器:
|
|
173
|
+
|
|
174
|
+
```typescript
|
|
175
|
+
private parseCustomFormat(data: any): Knife4jDocument {
|
|
176
|
+
// 自定义解析逻辑
|
|
177
|
+
}
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
### 增强输出格式
|
|
181
|
+
修改 `formatApiDocument()` 方法,添加更多信息:
|
|
182
|
+
- 认证方式说明
|
|
183
|
+
- 速率限制信息
|
|
184
|
+
- 版本变更记录
|
|
185
|
+
|
|
186
|
+
## 📊 性能考虑
|
|
187
|
+
|
|
188
|
+
- 使用 axios 的 HTTP 连接池
|
|
189
|
+
- 可配置的超时时间
|
|
190
|
+
- 异步非阻塞 I/O
|
|
191
|
+
- 内存高效的流式处理
|
|
192
|
+
|
|
193
|
+
## 🔒 安全特性
|
|
194
|
+
|
|
195
|
+
- URL 验证(防止 SSRF)
|
|
196
|
+
- 超时控制(防止 hangs)
|
|
197
|
+
- 错误隔离(防止崩溃)
|
|
198
|
+
- 无敏感信息存储
|
|
199
|
+
|
|
200
|
+
## 🎨 设计模式
|
|
201
|
+
|
|
202
|
+
- **单一职责**: 每个类有明确的职责
|
|
203
|
+
- **依赖注入**: Fetcher 可独立替换
|
|
204
|
+
- **策略模式**: 支持多种文档格式解析
|
|
205
|
+
- **工厂模式**: 统一的对象创建
|
|
206
|
+
|
|
207
|
+
---
|
|
208
|
+
|
|
209
|
+
这个结构设计使得项目:
|
|
210
|
+
✅ 易于理解和维护
|
|
211
|
+
✅ 易于测试和调试
|
|
212
|
+
✅ 易于扩展和升级
|
|
213
|
+
✅ 符合 TypeScript 最佳实践
|
package/QUICKSTART.md
ADDED
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
# 快速开始指南
|
|
2
|
+
|
|
3
|
+
## 🚀 5 分钟快速上手
|
|
4
|
+
|
|
5
|
+
### 1. 安装依赖
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
### 2. 编译项目
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
npm run build
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
### 3. 配置到 MCP 客户端
|
|
18
|
+
|
|
19
|
+
#### Windows 用户
|
|
20
|
+
|
|
21
|
+
编辑 `%APPDATA%\Claude\claude_desktop_config.json`,添加:
|
|
22
|
+
|
|
23
|
+
```json
|
|
24
|
+
{
|
|
25
|
+
"mcpServers": {
|
|
26
|
+
"knife4j-mcp": {
|
|
27
|
+
"command": "node",
|
|
28
|
+
"args": ["d:/front-end/gitee/knife4j-mcp/dist/index.js"],
|
|
29
|
+
"cwd": "d:/front-end/gitee/knife4j-mcp"
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
#### macOS/Linux 用户
|
|
36
|
+
|
|
37
|
+
编辑 `~/Library/Application Support/Claude/claude_desktop_config.json`,添加:
|
|
38
|
+
|
|
39
|
+
```json
|
|
40
|
+
{
|
|
41
|
+
"mcpServers": {
|
|
42
|
+
"knife4j-mcp": {
|
|
43
|
+
"command": "node",
|
|
44
|
+
"args": ["/absolute/path/to/knife4j-mcp/dist/index.js"],
|
|
45
|
+
"cwd": "/absolute/path/to/knife4j-mcp"
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
### 4. 重启 Claude Desktop
|
|
52
|
+
|
|
53
|
+
关闭并重新打开 Claude Desktop。
|
|
54
|
+
|
|
55
|
+
### 5. 开始使用
|
|
56
|
+
|
|
57
|
+
在对话框中输入:
|
|
58
|
+
|
|
59
|
+
```
|
|
60
|
+
帮我获取这个接口文档的信息:http://api.example.com/v2/api-docs
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
或者:
|
|
64
|
+
|
|
65
|
+
```
|
|
66
|
+
我想看看我们内网服务的 API:http://192.168.1.100:8080/swagger-ui.html
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
## ✅ 验证安装
|
|
70
|
+
|
|
71
|
+
运行测试命令(可选):
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
npm run test http://petstore.swagger.io/v2/swagger.json
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
这会从 Swagger Petstore 获取示例 API 文档。
|
|
78
|
+
|
|
79
|
+
## 📝 典型使用场景
|
|
80
|
+
|
|
81
|
+
### 场景 1: 查看接口列表
|
|
82
|
+
|
|
83
|
+
```
|
|
84
|
+
这个 API 文档里有哪些接口?
|
|
85
|
+
http://localhost:8080/v2/api-docs
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
### 场景 2: 查找特定接口
|
|
89
|
+
|
|
90
|
+
```
|
|
91
|
+
找一下跟用户相关的接口
|
|
92
|
+
http://user-service.example.com/v2/api-docs
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
### 场景 3: 生成调用代码
|
|
96
|
+
|
|
97
|
+
```
|
|
98
|
+
帮我生成调用登录接口的 Python 代码
|
|
99
|
+
http://auth-service.example.com/v2/api-docs
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
## 🔧 常见问题
|
|
103
|
+
|
|
104
|
+
### Q: 配置后没有反应?
|
|
105
|
+
|
|
106
|
+
A: 检查以下几点:
|
|
107
|
+
1. 路径是否正确(使用绝对路径)
|
|
108
|
+
2. 是否已执行 `npm install` 和 `npm run build`
|
|
109
|
+
3. 重启 Claude Desktop
|
|
110
|
+
4. 查看控制台错误信息
|
|
111
|
+
|
|
112
|
+
### Q: 访问内网接口超时?
|
|
113
|
+
|
|
114
|
+
A: 确认网络连通性,或增加 timeout 参数:
|
|
115
|
+
```json
|
|
116
|
+
{
|
|
117
|
+
"url": "http://internal-api/v2/api-docs",
|
|
118
|
+
"timeout": 30000
|
|
119
|
+
}
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
### Q: 如何自定义请求头?
|
|
123
|
+
|
|
124
|
+
A: 在请求时提供 headers 参数:
|
|
125
|
+
```json
|
|
126
|
+
{
|
|
127
|
+
"url": "http://api.example.com/v2/api-docs",
|
|
128
|
+
"headers": {
|
|
129
|
+
"Authorization": "Bearer token123"
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
## 📖 更多文档
|
|
135
|
+
|
|
136
|
+
- [README.md](./README.md) - 完整使用说明
|
|
137
|
+
- [EXAMPLES.md](./EXAMPLES.md) - 详细使用示例
|
|
138
|
+
- [test.ts](./src/test.ts) - 测试脚本源码
|
|
139
|
+
|
|
140
|
+
## 🎉 开始使用
|
|
141
|
+
|
|
142
|
+
现在你已经配置好了 Knife4j MCP 服务,可以开始让 AI 帮你:
|
|
143
|
+
- 快速获取接口文档信息
|
|
144
|
+
- 理解 API 结构
|
|
145
|
+
- 生成接口调用代码
|
|
146
|
+
- 分析接口依赖关系
|
|
147
|
+
|
|
148
|
+
祝你使用愉快!🚀
|
package/README.md
ADDED
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
# Knife4j MCP Server
|
|
2
|
+
|
|
3
|
+
一个用于获取 Knife4j 接口文档的 MCP(Model Context Protocol)服务。
|
|
4
|
+
|
|
5
|
+
## 功能特性
|
|
6
|
+
|
|
7
|
+
- ✅ 支持从内网/外网的 Knife4j 接口文档地址获取 API 信息
|
|
8
|
+
- ✅ 自动解析 Swagger/OpenAPI 格式的接口文档
|
|
9
|
+
- ✅ 提供结构化的接口信息(路径、方法、参数、响应等)
|
|
10
|
+
- ✅ 友好的格式化输出,便于 AI 理解和使用
|
|
11
|
+
|
|
12
|
+
## 安装步骤
|
|
13
|
+
|
|
14
|
+
### 1. 安装依赖
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
npm install
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
### 2. 编译项目
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
npm run build
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
### 3. 配置到 MCP 客户端
|
|
27
|
+
|
|
28
|
+
将 `mcp-config.example.json` 复制到你的 MCP 配置目录,并根据实际情况修改路径:
|
|
29
|
+
|
|
30
|
+
```json
|
|
31
|
+
{
|
|
32
|
+
"mcpServers": {
|
|
33
|
+
"knife4j-mcp": {
|
|
34
|
+
"command": "node",
|
|
35
|
+
"args": ["你的路径/knife4j-mcp/dist/index.js"],
|
|
36
|
+
"cwd": "你的路径/knife4j-mcp",
|
|
37
|
+
"env": {}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## 使用方法
|
|
44
|
+
|
|
45
|
+
### 工具名称
|
|
46
|
+
|
|
47
|
+
`fetch_api_documentation`
|
|
48
|
+
|
|
49
|
+
### 参数说明
|
|
50
|
+
|
|
51
|
+
| 参数名 | 类型 | 必填 | 默认值 | 描述 |
|
|
52
|
+
|--------|------|------|--------|------|
|
|
53
|
+
| url | string | ✅ 是 | - | Knife4j 接口文档的 URL 地址 |
|
|
54
|
+
| timeout | number | ⭕ 否 | 10000 | 请求超时时间(毫秒) |
|
|
55
|
+
| headers | object | ⭕ 否 | - | 自定义请求头 |
|
|
56
|
+
|
|
57
|
+
### 使用示例
|
|
58
|
+
|
|
59
|
+
#### 示例 1:基本使用
|
|
60
|
+
|
|
61
|
+
```
|
|
62
|
+
请帮我获取这个接口文档的信息:http://localhost:8080/doc.html
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
AI 会自动调用 MCP 服务,返回所有接口的详细信息。
|
|
66
|
+
|
|
67
|
+
#### 示例 2:带超时设置
|
|
68
|
+
|
|
69
|
+
```json
|
|
70
|
+
{
|
|
71
|
+
"url": "http://api.example.com/doc.html",
|
|
72
|
+
"timeout": 15000
|
|
73
|
+
}
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
#### 示例 3:需要认证的接口
|
|
77
|
+
|
|
78
|
+
```json
|
|
79
|
+
{
|
|
80
|
+
"url": "http://internal-api/doc.html",
|
|
81
|
+
"headers": {
|
|
82
|
+
"Authorization": "Bearer your_token_here"
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
## 输出格式
|
|
88
|
+
|
|
89
|
+
MCP 服务会返回格式化的 Markdown 文本,包含:
|
|
90
|
+
|
|
91
|
+
- 📚 文档基本信息(标题、版本、描述)
|
|
92
|
+
- 🔢 接口总数统计
|
|
93
|
+
- 📁 按标签分组的接口列表
|
|
94
|
+
- 📝 每个接口的详细信息:
|
|
95
|
+
- HTTP 方法和路径
|
|
96
|
+
- 接口描述
|
|
97
|
+
- 请求参数表格(参数名、类型、位置、是否必填、描述)
|
|
98
|
+
- 响应状态码和说明
|
|
99
|
+
|
|
100
|
+
### 输出示例
|
|
101
|
+
|
|
102
|
+
```markdown
|
|
103
|
+
# 📚 API 文档:用户管理系统
|
|
104
|
+
|
|
105
|
+
**版本**: 1.0.0
|
|
106
|
+
**描述**: 用户管理相关的 RESTful API
|
|
107
|
+
**基础 URL**: http://api.example.com
|
|
108
|
+
|
|
109
|
+
**接口总数**: 5
|
|
110
|
+
|
|
111
|
+
## 📁 User Controller
|
|
112
|
+
|
|
113
|
+
### 🟢 GET `http://api.example.com/api/users`
|
|
114
|
+
|
|
115
|
+
获取用户列表
|
|
116
|
+
|
|
117
|
+
**请求参数:**
|
|
118
|
+
|
|
119
|
+
| 参数名 | 类型 | 位置 | 必填 | 描述 |
|
|
120
|
+
|--------|------|------|------|------|
|
|
121
|
+
| page | integer | query | ⭕ | 页码 |
|
|
122
|
+
| size | integer | query | ⭕ | 每页数量 |
|
|
123
|
+
|
|
124
|
+
**响应:**
|
|
125
|
+
|
|
126
|
+
- **200**: 成功
|
|
127
|
+
- **404**: 未找到
|
|
128
|
+
|
|
129
|
+
### 🔵 POST `http://api.example.com/api/users`
|
|
130
|
+
|
|
131
|
+
创建新用户
|
|
132
|
+
|
|
133
|
+
**请求参数:**
|
|
134
|
+
|
|
135
|
+
| 参数名 | 类型 | 位置 | 必填 | 描述 |
|
|
136
|
+
|--------|------|------|------|------|
|
|
137
|
+
| body | object | body | ✅ | 用户信息 |
|
|
138
|
+
|
|
139
|
+
...
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
## 技术栈
|
|
143
|
+
|
|
144
|
+
- **TypeScript** - 类型安全
|
|
145
|
+
- **@modelcontextprotocol/sdk** - MCP 官方 SDK
|
|
146
|
+
- **axios** - HTTP 请求库
|
|
147
|
+
- **zod** - 参数验证
|
|
148
|
+
|
|
149
|
+
## 开发调试
|
|
150
|
+
|
|
151
|
+
### 开发模式
|
|
152
|
+
|
|
153
|
+
```bash
|
|
154
|
+
npm run dev
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
### 构建生产版本
|
|
158
|
+
|
|
159
|
+
```bash
|
|
160
|
+
npm run build
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
### 启动服务
|
|
164
|
+
|
|
165
|
+
```bash
|
|
166
|
+
npm start
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
## 支持的文档格式
|
|
170
|
+
|
|
171
|
+
- ✅ Swagger 2.0
|
|
172
|
+
- ✅ OpenAPI 3.0+
|
|
173
|
+
- ✅ Knife4j 增强的 Swagger 文档
|
|
174
|
+
|
|
175
|
+
## 注意事项
|
|
176
|
+
|
|
177
|
+
1. 确保提供的 URL 可以访问(内网地址需要在同一网络环境)
|
|
178
|
+
2. 如果接口文档需要认证,请通过 `headers` 参数提供必要的认证信息
|
|
179
|
+
3. 默认超时时间为 10 秒,可根据网络情况调整
|
|
180
|
+
4. 仅支持 JSON 格式的 Swagger/OpenAPI 文档
|
|
181
|
+
|
|
182
|
+
## 常见问题
|
|
183
|
+
|
|
184
|
+
### Q: 无法访问内网接口文档?
|
|
185
|
+
|
|
186
|
+
A: 确保运行 MCP 服务的机器与内网在同一网络环境,或者通过代理访问。
|
|
187
|
+
|
|
188
|
+
### Q: 返回的数据格式不对?
|
|
189
|
+
|
|
190
|
+
A: 检查目标 URL 是否返回标准的 Swagger/OpenAPI JSON 格式数据。
|
|
191
|
+
|
|
192
|
+
### Q: 如何查看详细的错误信息?
|
|
193
|
+
|
|
194
|
+
A: 查看控制台输出,MCP 服务会记录详细的错误日志。
|
|
195
|
+
|
|
196
|
+
## License
|
|
197
|
+
|
|
198
|
+
MIT
|
package/dist/index.d.ts
ADDED
package/dist/index.js
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
3
|
+
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
4
|
+
import { GetApiDocumentTool } from "./tools/get-doc";
|
|
5
|
+
// Main function
|
|
6
|
+
function main() {
|
|
7
|
+
// Create server instance
|
|
8
|
+
const server = new McpServer({
|
|
9
|
+
name: "ApiDocMcpServer",
|
|
10
|
+
version: "0.0.1",
|
|
11
|
+
});
|
|
12
|
+
// Register tools
|
|
13
|
+
new GetApiDocumentTool().register(server);
|
|
14
|
+
// Connect to standard input/output
|
|
15
|
+
server.connect(new StdioServerTransport());
|
|
16
|
+
}
|
|
17
|
+
// Start the program
|
|
18
|
+
main();
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Knife4j API 文档获取工具类
|
|
3
|
+
*/
|
|
4
|
+
import type { Knife4jDocument, FetchOptions } from './types.js';
|
|
5
|
+
export declare class Knife4jFetcher {
|
|
6
|
+
/**
|
|
7
|
+
* 从 Knife4j 接口文档地址获取 API 信息
|
|
8
|
+
* @param options 请求配置选项
|
|
9
|
+
* @returns Promise<Knife4jDocument> 接口文档信息
|
|
10
|
+
*/
|
|
11
|
+
fetchApiDocument(options: FetchOptions): Promise<Knife4jDocument>;
|
|
12
|
+
/**
|
|
13
|
+
* 解析 Swagger/OpenAPI 文档
|
|
14
|
+
* @param data Swagger 数据
|
|
15
|
+
* @param originalUrl 原始 URL
|
|
16
|
+
* @returns Knife4jDocument
|
|
17
|
+
*/
|
|
18
|
+
private parseSwaggerDocument;
|
|
19
|
+
/**
|
|
20
|
+
* 解析单个 API 操作
|
|
21
|
+
*/
|
|
22
|
+
private parseApiOperation;
|
|
23
|
+
/**
|
|
24
|
+
* 解析请求参数
|
|
25
|
+
*/
|
|
26
|
+
private parseParameters;
|
|
27
|
+
/**
|
|
28
|
+
* 获取参数类型
|
|
29
|
+
*/
|
|
30
|
+
private getParameterType;
|
|
31
|
+
/**
|
|
32
|
+
* 解析响应
|
|
33
|
+
*/
|
|
34
|
+
private parseResponses;
|
|
35
|
+
/**
|
|
36
|
+
* 从 URL 提取基础路径
|
|
37
|
+
*/
|
|
38
|
+
private extractBaseUrl;
|
|
39
|
+
}
|