@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.
@@ -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
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};
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
+ }