@leeguoo/yapi-mcp 0.1.4

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.
Files changed (42) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +299 -0
  3. package/dist/cli.d.ts +2 -0
  4. package/dist/cli.js +32 -0
  5. package/dist/cli.js.map +1 -0
  6. package/dist/config.d.ts +22 -0
  7. package/dist/config.js +174 -0
  8. package/dist/config.js.map +1 -0
  9. package/dist/index.d.ts +5 -0
  10. package/dist/index.js +58 -0
  11. package/dist/index.js.map +1 -0
  12. package/dist/server.d.ts +21 -0
  13. package/dist/server.js +847 -0
  14. package/dist/server.js.map +1 -0
  15. package/dist/services/yapi/api.d.ts +56 -0
  16. package/dist/services/yapi/api.js +432 -0
  17. package/dist/services/yapi/api.js.map +1 -0
  18. package/dist/services/yapi/auth.d.ts +24 -0
  19. package/dist/services/yapi/auth.js +239 -0
  20. package/dist/services/yapi/auth.js.map +1 -0
  21. package/dist/services/yapi/authCache.d.ts +29 -0
  22. package/dist/services/yapi/authCache.js +172 -0
  23. package/dist/services/yapi/authCache.js.map +1 -0
  24. package/dist/services/yapi/cache.d.ts +14 -0
  25. package/dist/services/yapi/cache.js +232 -0
  26. package/dist/services/yapi/cache.js.map +1 -0
  27. package/dist/services/yapi/logger.d.ts +17 -0
  28. package/dist/services/yapi/logger.js +61 -0
  29. package/dist/services/yapi/logger.js.map +1 -0
  30. package/dist/services/yapi/types.d.ts +102 -0
  31. package/dist/services/yapi/types.js +3 -0
  32. package/dist/services/yapi/types.js.map +1 -0
  33. package/dist/services/yapi.d.ts +28 -0
  34. package/dist/services/yapi.js +84 -0
  35. package/dist/services/yapi.js.map +1 -0
  36. package/dist/skill/install.d.ts +1 -0
  37. package/dist/skill/install.js +724 -0
  38. package/dist/skill/install.js.map +1 -0
  39. package/dist/yapi-cli.d.ts +2 -0
  40. package/dist/yapi-cli.js +592 -0
  41. package/dist/yapi-cli.js.map +1 -0
  42. package/package.json +77 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Graham Lipsman
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,299 @@
1
+ # Yapi Auto MCP Server
2
+
3
+ 一个用于 YApi 的 Model Context Protocol (MCP) 服务器,让你能够在 Cursor 等 AI 编程工具中直接操作 YApi 接口文档。
4
+
5
+ ## 项目简介
6
+
7
+ Yapi Auto MCP Server 是一个基于 [Model Context Protocol](https://modelcontextprotocol.io/) 的服务器,专为 YApi 接口管理平台设计。它允许你在 Cursor、Claude Desktop 等支持 MCP 的 AI 工具中直接:
8
+
9
+ - 🔍 **搜索和查看** YApi 项目中的接口文档
10
+ - ✏️ **创建和更新** 接口定义
11
+ - 📋 **管理项目和分类** 结构
12
+ - 🔗 **无缝集成** AI 编程工作流
13
+ - 🛠 **支持多个 YApi Project配置**
14
+
15
+ 通过 MCP 协议,AI 助手可以理解你的 YApi 接口结构,在编程过程中提供更准确的建议和代码生成。
16
+
17
+ ## 主要功能
18
+
19
+ ### 🔍 接口查询和搜索
20
+
21
+ - **yapi_search_apis**: 按名称、路径、标签等条件搜索接口
22
+ - **yapi_get_api_desc**: 获取特定接口的详细信息(请求/响应结构、参数等)
23
+ - **yapi_interface_get**: 获取接口原始数据(对应 `/api/interface/get`)
24
+ - **yapi_interface_list**: 获取接口列表(对应 `/api/interface/list`)
25
+ - **yapi_interface_list_cat**: 获取分类下接口列表(对应 `/api/interface/list_cat`)
26
+ - **yapi_interface_list_menu**: 获取接口菜单列表(对应 `/api/interface/list_menu`)
27
+ - **yapi_list_projects**: 列出所有可访问的项目
28
+ - **yapi_project_get**: 获取项目详情(对应 `/api/project/get`)
29
+ - **yapi_get_categories**: 获取项目下的接口分类和接口列表(支持只返回分类/或包含接口列表)
30
+ - **yapi_interface_get_cat_menu**: 获取分类菜单(对应 `/api/interface/getCatMenu`)
31
+
32
+ ### ✏️ 接口管理
33
+
34
+ - **yapi_save_api**: 创建新接口或更新现有接口
35
+ - 支持完整的接口定义(路径、方法、参数、请求体、响应等)
36
+ - 支持 JSON Schema 和表单数据格式
37
+ - 自动处理接口状态和分类管理
38
+ - 建议把「枚举值/中文备注/示例」优先写在 `req_params` / `req_query` / `req_headers` / `req_body_*` / `res_body`,`desc` 只写一句话简介;更新接口时未提供的字段会尽量保留原值
39
+ - **yapi_interface_add**: 新增接口(对应 `/api/interface/add`)
40
+ - **yapi_interface_up**: 更新接口(对应 `/api/interface/up`)
41
+ - **yapi_interface_save**: 新增或更新接口(对应 `/api/interface/save`)
42
+ - **yapi_interface_add_cat**: 新增接口分类(对应 `/api/interface/add_cat`)
43
+ - **yapi_open_import_data**: 服务端数据导入(对应 `/api/open/import_data`)
44
+
45
+ ### 🎯 智能特性
46
+
47
+ - **多项目支持**: 同时管理多个 YApi 项目
48
+ - **缓存机制**: 提高查询响应速度
49
+ - **详细日志**: 便于调试和监控
50
+ - **灵活配置**: 支持环境变量和命令行参数
51
+
52
+ ## 快速开始
53
+
54
+ ### 推荐方式:使用 npx(无需安装)
55
+
56
+ 1. **获取 YApi Token**:登录你的 YApi 平台,在项目设置中获取 Token
57
+ 2. **配置 Cursor**:在 Cursor 设置中添加 MCP 服务器:
58
+
59
+ ```json
60
+ {
61
+ "mcpServers": {
62
+ "yapi-auto-mcp": {
63
+ "command": "npx",
64
+ "args": [
65
+ "-y",
66
+ "@leeguoo/yapi-mcp",
67
+ "--stdio",
68
+ "--yapi-base-url=https://your-yapi-domain.com",
69
+ "--yapi-token=projectId:your_token_here"
70
+ ]
71
+ }
72
+ }
73
+ }
74
+ ```
75
+
76
+ 3. **开始使用**:重启 Cursor,你就可以在对话中直接操作 YApi 了!
77
+
78
+ ## CLI / Skill
79
+
80
+ ### 一键安装 Skill(Codex / Claude Code)
81
+
82
+ 命令会交互式提示输入域名、邮箱、密码,并写入 `~/.yapi/config.toml`:
83
+
84
+ ```bash
85
+ npx -y @leeguoo/yapi-mcp install-skill
86
+ ```
87
+
88
+ 也可以非交互:
89
+
90
+ ```bash
91
+ npx -y @leeguoo/yapi-mcp install-skill \
92
+ --yapi-base-url=https://your-yapi-domain.com \
93
+ --yapi-auth-mode=global \
94
+ --yapi-email=YOUR_EMAIL \
95
+ --yapi-password=YOUR_PASSWORD
96
+ ```
97
+
98
+ ### 直接使用 CLI(yapi)
99
+
100
+ 全局安装后即可直接使用:
101
+
102
+ ```bash
103
+ npm i -g @leeguoo/yapi-mcp
104
+ yapi -h
105
+ yapi --path /api/interface/get --query id=123
106
+ ```
107
+
108
+ 不想全局安装也可以用 npx:
109
+
110
+ ```bash
111
+ npx -y @leeguoo/yapi-mcp yapi -h
112
+ ```
113
+
114
+ ## 安装配置
115
+
116
+ ### 方式一:npx 直接使用(推荐)
117
+
118
+ 无需本地安装,通过 npx 直接运行:
119
+
120
+ ```json
121
+ {
122
+ "mcpServers": {
123
+ "yapi-auto-mcp": {
124
+ "command": "npx",
125
+ "args": [
126
+ "-y",
127
+ "@leeguoo/yapi-mcp",
128
+ "--stdio",
129
+ "--yapi-base-url=https://yapi.example.com",
130
+ "--yapi-token=projectId:token1,projectId2:token2",
131
+ "--yapi-cache-ttl=10",
132
+ "--yapi-log-level=info"
133
+ ]
134
+ }
135
+ }
136
+ }
137
+ ```
138
+
139
+ ### 方式二:使用环境变量
140
+
141
+ 在 MCP 配置中定义环境变量:
142
+
143
+ ```json
144
+ {
145
+ "mcpServers": {
146
+ "yapi-auto-mcp": {
147
+ "command": "npx",
148
+ "args": [
149
+ "-y",
150
+ "@leeguoo/yapi-mcp",
151
+ "--stdio"
152
+ ],
153
+ "env": {
154
+ "YAPI_BASE_URL": "https://yapi.example.com",
155
+ "YAPI_TOKEN": "projectId:token1,projectId2:token2",
156
+ "YAPI_CACHE_TTL": "10",
157
+ "YAPI_LOG_LEVEL": "info"
158
+ }
159
+ }
160
+ }
161
+ }
162
+ ```
163
+
164
+ ### 方式三:本地开发模式
165
+
166
+ 适合需要修改代码或调试的场景:
167
+
168
+ 1. **克隆和安装**:
169
+
170
+ ```bash
171
+ git clone <repository-url>
172
+ cd yapi-mcp
173
+ pnpm install
174
+ ```
175
+
176
+ 2. **配置环境变量**(在项目根目录创建 `.env` 文件):
177
+
178
+ ```env
179
+ # YApi 基础配置
180
+ YAPI_BASE_URL=https://your-yapi-domain.com
181
+ YAPI_TOKEN=projectId:your_token_here,projectId2:your_token2_here
182
+
183
+ # 服务器配置
184
+ PORT=3388
185
+
186
+ # 可选配置
187
+ YAPI_CACHE_TTL=10
188
+ YAPI_LOG_LEVEL=info
189
+ ```
190
+
191
+ 3. **启动服务**:
192
+
193
+ **SSE 模式**(HTTP 服务):
194
+
195
+ ```bash
196
+ pnpm run dev
197
+ ```
198
+
199
+ 然后在 Cursor 中配置:
200
+
201
+ ```json
202
+ {
203
+ "mcpServers": {
204
+ "yapi-mcp": {
205
+ "url": "http://localhost:3388/sse"
206
+ }
207
+ }
208
+ }
209
+ ```
210
+
211
+ **Stdio 模式**:
212
+
213
+ ```bash
214
+ pnpm run build
215
+ node dist/cli.js --stdio
216
+ ```
217
+
218
+ ## 使用指南
219
+
220
+ ### 获取 YApi Token
221
+
222
+ 1. 登录你的 YApi 平台
223
+ 2. 进入项目设置页面
224
+ 3. 在 Token 配置中生成或查看 Token
225
+
226
+ ![Token 获取示例](./images/token.png)
227
+
228
+ Token 格式说明:
229
+
230
+ - 单项目:`projectId:token`
231
+ - 多项目:`projectId1:token1,projectId2:token2`
232
+
233
+ ### 使用示例
234
+
235
+ 配置完成后,你可以在 Cursor 中这样使用:
236
+
237
+ ![使用示例](./images/demo1.png)
238
+
239
+ **常用操作示例**:
240
+
241
+ 1. **搜索接口**:
242
+
243
+ > "帮我找一下用户登录相关的接口"
244
+
245
+ 2. **查看接口详情**:
246
+
247
+ > "显示用户注册接口的详细信息"
248
+
249
+ 3. **创建新接口**:
250
+
251
+ > "帮我创建一个获取用户列表的接口,路径是 /api/users,使用 GET 方法"
252
+
253
+ 4. **更新接口**:
254
+ > "更新用户登录接口,添加验证码参数"
255
+
256
+ ## 高级配置
257
+
258
+ ### 命令行参数详解
259
+
260
+ | 参数 | 描述 | 示例 | 默认值 |
261
+ | ------------------ | ----------------------------- | ------------------------------------------ | ------ |
262
+ | `--yapi-base-url` | YApi 服务器基础 URL | `--yapi-base-url=https://yapi.example.com` | - |
263
+ | `--yapi-token` | YApi 项目 Token(支持多项目) | `--yapi-token=1026:token1,1027:token2` | - |
264
+ | `--yapi-cache-ttl` | 缓存时效(分钟) | `--yapi-cache-ttl=10` | 10 |
265
+ | `--yapi-log-level` | 日志级别 | `--yapi-log-level=info` | info |
266
+ | `--port` | HTTP 服务端口(SSE 模式) | `--port=3388` | 3388 |
267
+ | `--stdio` | 启用 stdio 模式(MCP 必需) | `--stdio` | - |
268
+
269
+ ### 环境变量说明
270
+
271
+ 创建 `.env` 文件进行配置:
272
+
273
+ ```env
274
+ # 必需配置
275
+ YAPI_BASE_URL=https://your-yapi-domain.com
276
+ YAPI_TOKEN=projectId:your_token_here
277
+
278
+ # 可选配置
279
+ PORT=3388 # HTTP 服务端口
280
+ YAPI_CACHE_TTL=10 # 缓存时效(分钟)
281
+ YAPI_LOG_LEVEL=info # 日志级别:debug, info, warn, error, none
282
+ ```
283
+
284
+ ### 日志级别说明
285
+
286
+ - **debug**: 输出所有日志,包括详细的调试信息
287
+ - **info**: 输出信息、警告和错误日志(默认)
288
+ - **warn**: 只输出警告和错误日志
289
+ - **error**: 只输出错误日志
290
+ - **none**: 不输出任何日志
291
+
292
+ ### 配置方式选择建议
293
+
294
+ | 使用场景 | 推荐方式 | 优势 |
295
+ | -------- | --------------------- | ------------------ |
296
+ | 日常使用 | npx + 命令行参数 | 无需安装,配置简单 |
297
+ | 团队共享 | npx + 环境变量 | 配置统一,易于管理 |
298
+ | 开发调试 | 本地安装 + SSE 模式 | 便于调试和修改代码 |
299
+ | 企业部署 | 本地安装 + stdio 模式 | 性能更好,更稳定 |
package/dist/cli.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};
package/dist/cli.js ADDED
@@ -0,0 +1,32 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ const path_1 = require("path");
5
+ const dotenv_1 = require("dotenv");
6
+ const index_1 = require("./index");
7
+ const install_1 = require("./skill/install");
8
+ (0, dotenv_1.config)({ path: (0, path_1.resolve)(process.cwd(), ".env") });
9
+ const [command, ...restArgs] = process.argv.slice(2);
10
+ if (command === "install-skill") {
11
+ (0, install_1.runInstallSkill)(restArgs).catch((error) => {
12
+ if (error instanceof Error) {
13
+ console.error("Skill install failed:", error.message);
14
+ }
15
+ else {
16
+ console.error("Skill install failed with unknown error:", error);
17
+ }
18
+ process.exit(1);
19
+ });
20
+ }
21
+ else {
22
+ (0, index_1.startServer)().catch((error) => {
23
+ if (error instanceof Error) {
24
+ console.error("Failed to start server:", error.message);
25
+ }
26
+ else {
27
+ console.error("Failed to start server with unknown error:", error);
28
+ }
29
+ process.exit(1);
30
+ });
31
+ }
32
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;;AAEA,+BAA+B;AAC/B,mCAAgC;AAChC,mCAAsC;AACtC,6CAAkD;AAGlD,IAAA,eAAM,EAAC,EAAE,IAAI,EAAE,IAAA,cAAO,EAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;AAEjD,MAAM,CAAC,OAAO,EAAE,GAAG,QAAQ,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAErD,IAAI,OAAO,KAAK,eAAe,EAAE,CAAC;IAChC,IAAA,yBAAe,EAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;QACjD,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC3B,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QACxD,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,0CAA0C,EAAE,KAAK,CAAC,CAAC;QACnE,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC;KAAM,CAAC;IACN,IAAA,mBAAW,GAAE,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;QACrC,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC3B,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QAC1D,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,4CAA4C,EAAE,KAAK,CAAC,CAAC;QACrE,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,22 @@
1
+ interface ServerConfig {
2
+ yapiBaseUrl: string;
3
+ yapiToken: string;
4
+ yapiAuthMode: "token" | "global";
5
+ yapiEmail: string;
6
+ yapiPassword: string;
7
+ port: number;
8
+ yapiCacheTTL: number;
9
+ yapiLogLevel: string;
10
+ configSources: {
11
+ yapiBaseUrl: "cli" | "env" | "default";
12
+ yapiToken: "cli" | "env" | "default";
13
+ yapiAuthMode: "cli" | "env" | "default";
14
+ yapiEmail: "cli" | "env" | "default";
15
+ yapiPassword: "cli" | "env" | "default";
16
+ port: "cli" | "env" | "default";
17
+ yapiCacheTTL: "cli" | "env" | "default";
18
+ yapiLogLevel: "cli" | "env" | "default";
19
+ };
20
+ }
21
+ export declare function getServerConfig(): ServerConfig;
22
+ export {};
package/dist/config.js ADDED
@@ -0,0 +1,174 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.getServerConfig = getServerConfig;
7
+ const dotenv_1 = require("dotenv");
8
+ const yargs_1 = __importDefault(require("yargs"));
9
+ const helpers_1 = require("yargs/helpers");
10
+ const logger_1 = require("./services/yapi/logger");
11
+ (0, dotenv_1.config)();
12
+ function maskApiKey(key) {
13
+ if (key.length <= 4)
14
+ return "****";
15
+ return `****${key.slice(-4)}`;
16
+ }
17
+ function maskSecret(value) {
18
+ if (!value)
19
+ return "";
20
+ if (value.length <= 2)
21
+ return "**";
22
+ return `${value[0]}***${value[value.length - 1]}`;
23
+ }
24
+ function getServerConfig() {
25
+ const argv = (0, yargs_1.default)((0, helpers_1.hideBin)(process.argv))
26
+ .options({
27
+ "yapi-base-url": {
28
+ type: "string",
29
+ description: "YApi服务器基础URL",
30
+ },
31
+ "yapi-token": {
32
+ type: "string",
33
+ description: "YApi服务器授权Token",
34
+ },
35
+ "yapi-auth-mode": {
36
+ type: "string",
37
+ description: "鉴权模式:token=项目 token;global=用户名/密码登录并缓存项目 token",
38
+ choices: ["token", "global"],
39
+ },
40
+ "yapi-email": {
41
+ type: "string",
42
+ description: "全局模式登录邮箱(/api/user/login 的 email 字段)",
43
+ },
44
+ "yapi-password": {
45
+ type: "string",
46
+ description: "全局模式登录密码(/api/user/login 的 password 字段)",
47
+ },
48
+ port: {
49
+ type: "number",
50
+ description: "Port to run the server on",
51
+ },
52
+ "yapi-cache-ttl": {
53
+ type: "number",
54
+ description: "YApi缓存有效期(分钟),默认10分钟",
55
+ },
56
+ "yapi-log-level": {
57
+ type: "string",
58
+ description: "YApi日志级别 (debug, info, warn, error)",
59
+ choices: ["debug", "info", "warn", "error"],
60
+ },
61
+ })
62
+ .help()
63
+ .parseSync();
64
+ const config = {
65
+ yapiBaseUrl: "http://localhost:3000",
66
+ yapiToken: "",
67
+ yapiAuthMode: "token",
68
+ yapiEmail: "",
69
+ yapiPassword: "",
70
+ port: 3388,
71
+ yapiCacheTTL: 10,
72
+ yapiLogLevel: "info",
73
+ configSources: {
74
+ yapiBaseUrl: "default",
75
+ yapiToken: "default",
76
+ yapiAuthMode: "default",
77
+ yapiEmail: "default",
78
+ yapiPassword: "default",
79
+ port: "default",
80
+ yapiCacheTTL: "default",
81
+ yapiLogLevel: "default",
82
+ },
83
+ };
84
+ if (argv["yapi-base-url"]) {
85
+ config.yapiBaseUrl = argv["yapi-base-url"];
86
+ config.configSources.yapiBaseUrl = "cli";
87
+ }
88
+ else if (process.env.YAPI_BASE_URL) {
89
+ config.yapiBaseUrl = process.env.YAPI_BASE_URL;
90
+ config.configSources.yapiBaseUrl = "env";
91
+ }
92
+ if (argv["yapi-token"]) {
93
+ config.yapiToken = argv["yapi-token"];
94
+ config.configSources.yapiToken = "cli";
95
+ }
96
+ else if (process.env.YAPI_TOKEN) {
97
+ config.yapiToken = process.env.YAPI_TOKEN;
98
+ config.configSources.yapiToken = "env";
99
+ }
100
+ if (argv["yapi-email"]) {
101
+ config.yapiEmail = argv["yapi-email"];
102
+ config.configSources.yapiEmail = "cli";
103
+ }
104
+ else if (process.env.YAPI_EMAIL) {
105
+ config.yapiEmail = process.env.YAPI_EMAIL;
106
+ config.configSources.yapiEmail = "env";
107
+ }
108
+ if (argv["yapi-password"]) {
109
+ config.yapiPassword = argv["yapi-password"];
110
+ config.configSources.yapiPassword = "cli";
111
+ }
112
+ else if (process.env.YAPI_PASSWORD) {
113
+ config.yapiPassword = process.env.YAPI_PASSWORD;
114
+ config.configSources.yapiPassword = "env";
115
+ }
116
+ if (argv["yapi-auth-mode"]) {
117
+ config.yapiAuthMode = argv["yapi-auth-mode"];
118
+ config.configSources.yapiAuthMode = "cli";
119
+ }
120
+ else if (process.env.YAPI_AUTH_MODE) {
121
+ const mode = process.env.YAPI_AUTH_MODE.toLowerCase();
122
+ if (mode === "token" || mode === "global") {
123
+ config.yapiAuthMode = mode;
124
+ config.configSources.yapiAuthMode = "env";
125
+ }
126
+ }
127
+ else {
128
+ config.yapiAuthMode = config.yapiToken ? "token" : config.yapiEmail && config.yapiPassword ? "global" : "token";
129
+ }
130
+ if (argv.port) {
131
+ config.port = argv.port;
132
+ config.configSources.port = "cli";
133
+ }
134
+ else if (process.env.PORT) {
135
+ config.port = parseInt(process.env.PORT, 10);
136
+ config.configSources.port = "env";
137
+ }
138
+ if (argv["yapi-cache-ttl"]) {
139
+ config.yapiCacheTTL = argv["yapi-cache-ttl"];
140
+ config.configSources.yapiCacheTTL = "cli";
141
+ }
142
+ else if (process.env.YAPI_CACHE_TTL) {
143
+ const cacheTTL = parseInt(process.env.YAPI_CACHE_TTL, 10);
144
+ if (!isNaN(cacheTTL)) {
145
+ config.yapiCacheTTL = cacheTTL;
146
+ config.configSources.yapiCacheTTL = "env";
147
+ }
148
+ }
149
+ if (argv["yapi-log-level"]) {
150
+ config.yapiLogLevel = argv["yapi-log-level"];
151
+ config.configSources.yapiLogLevel = "cli";
152
+ }
153
+ else if (process.env.YAPI_LOG_LEVEL) {
154
+ const validLevels = ["debug", "info", "warn", "error"];
155
+ const logLevel = process.env.YAPI_LOG_LEVEL.toLowerCase();
156
+ if (validLevels.includes(logLevel)) {
157
+ config.yapiLogLevel = logLevel;
158
+ config.configSources.yapiLogLevel = "env";
159
+ }
160
+ }
161
+ const logger = new logger_1.Logger("Config", config.yapiLogLevel);
162
+ logger.info("\nConfiguration:");
163
+ logger.info(`- YAPI_BASE_URL: ${config.yapiBaseUrl} (source: ${config.configSources.yapiBaseUrl})`);
164
+ logger.info(`- YAPI_TOKEN: ${config.yapiToken ? maskApiKey(config.yapiToken) : "未配置"} (source: ${config.configSources.yapiToken})`);
165
+ logger.info(`- YAPI_AUTH_MODE: ${config.yapiAuthMode} (source: ${config.configSources.yapiAuthMode})`);
166
+ logger.info(`- YAPI_EMAIL: ${config.yapiEmail || "未配置"} (source: ${config.configSources.yapiEmail})`);
167
+ logger.info(`- YAPI_PASSWORD: ${config.yapiPassword ? maskSecret(config.yapiPassword) : "未配置"} (source: ${config.configSources.yapiPassword})`);
168
+ logger.info(`- PORT: ${config.port} (source: ${config.configSources.port})`);
169
+ logger.info(`- YAPI_CACHE_TTL: ${config.yapiCacheTTL} 分钟 (source: ${config.configSources.yapiCacheTTL})`);
170
+ logger.info(`- YAPI_LOG_LEVEL: ${config.yapiLogLevel} (source: ${config.configSources.yapiLogLevel})`);
171
+ logger.info("");
172
+ return config;
173
+ }
174
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export * from "./services/yapi/types";
2
+ export * from "./services/yapi/api";
3
+ export * from "./services/yapi/cache";
4
+ export * from "./services/yapi/logger";
5
+ export declare function startServer(): Promise<void>;
package/dist/index.js ADDED
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.startServer = startServer;
18
+ const stdio_js_1 = require("@modelcontextprotocol/sdk/server/stdio.js");
19
+ const server_1 = require("./server");
20
+ const config_1 = require("./config");
21
+ const logger_1 = require("./services/yapi/logger");
22
+ __exportStar(require("./services/yapi/types"), exports);
23
+ __exportStar(require("./services/yapi/api"), exports);
24
+ __exportStar(require("./services/yapi/cache"), exports);
25
+ __exportStar(require("./services/yapi/logger"), exports);
26
+ async function startServer() {
27
+ const config = (0, config_1.getServerConfig)();
28
+ const logger = new logger_1.Logger("StartServer", config.yapiLogLevel);
29
+ const server = new server_1.YapiMcpServer(config.yapiBaseUrl, config.yapiToken, config.yapiLogLevel, config.yapiCacheTTL, {
30
+ mode: config.yapiAuthMode,
31
+ email: config.yapiEmail,
32
+ password: config.yapiPassword,
33
+ });
34
+ const isStdioMode = process.env.NODE_ENV === "cli" || process.argv.includes("--stdio");
35
+ if (isStdioMode) {
36
+ logger.info("Initializing Yapi MCP Server in stdio mode...");
37
+ const transport = new stdio_js_1.StdioServerTransport();
38
+ await server.connect(transport);
39
+ }
40
+ else {
41
+ logger.info(`Initializing Yapi MCP Server in HTTP mode on port ${config.port}...`);
42
+ await server.startHttpServer(config.port);
43
+ }
44
+ logger.info("\n可用工具:");
45
+ logger.info("- yapi_get_api_desc: 获取YApi接口信息");
46
+ logger.info("- yapi_save_api: 新增或更新YApi接口");
47
+ logger.info("- yapi_search_apis: 搜索YApi接口");
48
+ logger.info("- yapi_list_projects: 列出YApi的项目ID和项目名称");
49
+ logger.info("- yapi_get_categories: 获取YApi项目下的接口分类列表");
50
+ logger.info("- yapi_update_token: 全局模式登录并刷新本地 token 缓存");
51
+ }
52
+ if (require.main === module) {
53
+ startServer().catch((error) => {
54
+ console.error("Failed to start server:", error);
55
+ process.exit(1);
56
+ });
57
+ }
58
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAWA,kCAsCC;AAjDD,wEAAiF;AACjF,qCAAyC;AACzC,qCAA2C;AAC3C,mDAAgD;AAGhD,wDAAsC;AACtC,sDAAoC;AACpC,wDAAsC;AACtC,yDAAuC;AAEhC,KAAK,UAAU,WAAW;IAC/B,MAAM,MAAM,GAAG,IAAA,wBAAe,GAAE,CAAC;IAGjC,MAAM,MAAM,GAAG,IAAI,eAAM,CAAC,aAAa,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;IAG9D,MAAM,MAAM,GAAG,IAAI,sBAAa,CAC9B,MAAM,CAAC,WAAW,EAClB,MAAM,CAAC,SAAS,EAChB,MAAM,CAAC,YAAY,EACnB,MAAM,CAAC,YAAY,EACnB;QACE,IAAI,EAAE,MAAM,CAAC,YAAY;QACzB,KAAK,EAAE,MAAM,CAAC,SAAS;QACvB,QAAQ,EAAE,MAAM,CAAC,YAAY;KAC9B,CACF,CAAC;IAGF,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IAEvF,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC;QAC7D,MAAM,SAAS,GAAG,IAAI,+BAAoB,EAAE,CAAC;QAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAClC,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,IAAI,CAAC,qDAAqD,MAAM,CAAC,IAAI,KAAK,CAAC,CAAC;QACnF,MAAM,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC5C,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACvB,MAAM,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;IAC/C,MAAM,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;IAC5C,MAAM,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;IAC5C,MAAM,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;IACtD,MAAM,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;IACvD,MAAM,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;AAC3D,CAAC;AAGD,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;IAC5B,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;QAC5B,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;QAChD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,21 @@
1
+ import { Transport } from "@modelcontextprotocol/sdk/shared/transport.js";
2
+ export declare class YapiMcpServer {
3
+ private readonly server;
4
+ private readonly yapiService;
5
+ private readonly projectInfoCache;
6
+ private readonly logger;
7
+ private readonly authService;
8
+ private readonly authMode;
9
+ private sseTransport;
10
+ private readonly isStdioMode;
11
+ constructor(yapiBaseUrl: string, yapiToken: string, yapiLogLevel?: string, yapiCacheTTL?: number, auth?: {
12
+ mode?: "token" | "global";
13
+ email?: string;
14
+ password?: string;
15
+ });
16
+ private initializeCache;
17
+ private asyncUpdateCache;
18
+ private registerTools;
19
+ connect(transport: Transport): Promise<void>;
20
+ startHttpServer(port: number): Promise<void>;
21
+ }