@leeguoo/yapi-mcp 0.2.3 → 0.3.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/README.md +17 -9
- package/dist/config.d.ts +4 -0
- package/dist/config.js +48 -4
- package/dist/config.js.map +1 -1
- package/dist/index.js +9 -2
- package/dist/index.js.map +1 -1
- package/dist/server.d.ts +6 -0
- package/dist/server.js +297 -231
- package/dist/server.js.map +1 -1
- package/dist/services/yapi/api.d.ts +9 -1
- package/dist/services/yapi/api.js +55 -13
- package/dist/services/yapi/api.js.map +1 -1
- package/dist/services/yapi/auth.d.ts +13 -1
- package/dist/services/yapi/auth.js +42 -6
- package/dist/services/yapi/auth.js.map +1 -1
- package/dist/services/yapi/authCache.js +49 -4
- package/dist/services/yapi/authCache.js.map +1 -1
- package/dist/services/yapi/cache.d.ts +4 -1
- package/dist/services/yapi/cache.js +104 -15
- package/dist/services/yapi/cache.js.map +1 -1
- package/package.json +4 -4
package/README.md
CHANGED
|
@@ -28,7 +28,7 @@ Yapi Auto MCP Server 是一个基于 [Model Context Protocol](https://modelconte
|
|
|
28
28
|
- **yapi_project_get**: 获取项目详情(对应 `/api/project/get`)
|
|
29
29
|
- **yapi_get_categories**: 获取项目下的接口分类和接口列表(支持只返回分类/或包含接口列表)
|
|
30
30
|
- **yapi_interface_get_cat_menu**: 获取分类菜单(对应 `/api/interface/getCatMenu`)
|
|
31
|
-
- **yapi_update_token**:
|
|
31
|
+
- **yapi_update_token**: 全局模式登录并刷新本地登录态 Cookie(可选刷新项目/分类缓存)
|
|
32
32
|
|
|
33
33
|
### ✏️ 接口管理
|
|
34
34
|
|
|
@@ -57,7 +57,7 @@ Yapi Auto MCP Server 是一个基于 [Model Context Protocol](https://modelconte
|
|
|
57
57
|
如果你日常就在浏览器里使用 YApi,推荐安装 Chrome 扩展 [cross-request-master](https://github.com/leeguooooo/cross-request-master)。它会在 YApi 接口详情页(基本信息区域右上角)提供 **「当前项目 MCP 配置」** / **「所有项目 MCP 配置」** 按钮,可一键生成并复制配置:
|
|
58
58
|
|
|
59
59
|
- 当前项目:使用 `--yapi-token=projectId:token`
|
|
60
|
-
- 所有项目(全局模式):使用 `--yapi-auth-mode=global
|
|
60
|
+
- 所有项目(全局模式):使用 `--yapi-auth-mode=global`(账号密码),启动后调用一次 `yapi_update_token` 刷新登录态 Cookie(并可选刷新项目缓存)
|
|
61
61
|
|
|
62
62
|
### 手动方式:使用 npx(无需安装)
|
|
63
63
|
|
|
@@ -82,7 +82,7 @@ Yapi Auto MCP Server 是一个基于 [Model Context Protocol](https://modelconte
|
|
|
82
82
|
}
|
|
83
83
|
```
|
|
84
84
|
|
|
85
|
-
2)
|
|
85
|
+
2) **全局模式**(只配置一次账号密码,使用登录态 Cookie 调用页面同款接口)
|
|
86
86
|
|
|
87
87
|
```json
|
|
88
88
|
{
|
|
@@ -96,14 +96,17 @@ Yapi Auto MCP Server 是一个基于 [Model Context Protocol](https://modelconte
|
|
|
96
96
|
"--yapi-base-url=https://your-yapi-domain.com",
|
|
97
97
|
"--yapi-auth-mode=global",
|
|
98
98
|
"--yapi-email=your_email@example.com",
|
|
99
|
-
"--yapi-password=your_password"
|
|
99
|
+
"--yapi-password=your_password",
|
|
100
|
+
"--yapi-toolset=basic"
|
|
100
101
|
]
|
|
101
102
|
}
|
|
102
103
|
}
|
|
103
104
|
}
|
|
104
105
|
```
|
|
105
106
|
|
|
106
|
-
启动后先在对话里调用一次 `yapi_update_token
|
|
107
|
+
启动后先在对话里调用一次 `yapi_update_token`,会把登录态 Cookie 缓存到本地 `~/.yapi-mcp/auth-*.json`,并把项目信息缓存到 `~/.yapi-mcp/project-info-*.json`(已尽量使用 `0600` 权限落盘),请不要提交到仓库或分享给他人。
|
|
108
|
+
|
|
109
|
+
提示:stdio 模式下为了加快 MCP 启动(避免超时),本项目不会在启动阶段做任何“全量缓存预热请求”。如需更快的工具响应,建议先调用一次 `yapi_update_token`。如 MCP 客户端仍提示启动超时,可在客户端配置中提高 `startup_timeout_sec`。
|
|
107
110
|
|
|
108
111
|
## 安装配置
|
|
109
112
|
|
|
@@ -149,7 +152,8 @@ Yapi Auto MCP Server 是一个基于 [Model Context Protocol](https://modelconte
|
|
|
149
152
|
"YAPI_TOKEN": "projectId:token1,projectId2:token2",
|
|
150
153
|
"YAPI_AUTH_MODE": "token",
|
|
151
154
|
"YAPI_CACHE_TTL": "10",
|
|
152
|
-
"YAPI_LOG_LEVEL": "info"
|
|
155
|
+
"YAPI_LOG_LEVEL": "info",
|
|
156
|
+
"YAPI_HTTP_TIMEOUT_MS": "15000"
|
|
153
157
|
}
|
|
154
158
|
}
|
|
155
159
|
}
|
|
@@ -168,7 +172,8 @@ Yapi Auto MCP Server 是一个基于 [Model Context Protocol](https://modelconte
|
|
|
168
172
|
"YAPI_BASE_URL": "https://yapi.example.com",
|
|
169
173
|
"YAPI_AUTH_MODE": "global",
|
|
170
174
|
"YAPI_EMAIL": "your_email@example.com",
|
|
171
|
-
"YAPI_PASSWORD": "your_password"
|
|
175
|
+
"YAPI_PASSWORD": "your_password",
|
|
176
|
+
"YAPI_HTTP_TIMEOUT_MS": "15000"
|
|
172
177
|
}
|
|
173
178
|
}
|
|
174
179
|
}
|
|
@@ -200,6 +205,7 @@ PORT=3388
|
|
|
200
205
|
# 可选配置
|
|
201
206
|
YAPI_CACHE_TTL=10
|
|
202
207
|
YAPI_LOG_LEVEL=info
|
|
208
|
+
YAPI_HTTP_TIMEOUT_MS=15000
|
|
203
209
|
```
|
|
204
210
|
|
|
205
211
|
3. **启动服务**:
|
|
@@ -233,7 +239,7 @@ node dist/cli.js --stdio
|
|
|
233
239
|
|
|
234
240
|
### 获取 YApi Token
|
|
235
241
|
|
|
236
|
-
如果你使用的是 **全局模式**(`--yapi-auth-mode=global` / `YAPI_AUTH_MODE=global`),可以不手动找项目 token:启动后在对话里调用一次 `yapi_update_token
|
|
242
|
+
如果你使用的是 **全局模式**(`--yapi-auth-mode=global` / `YAPI_AUTH_MODE=global`),可以不手动找项目 token:启动后在对话里调用一次 `yapi_update_token`,会自动登录并刷新登录态 Cookie(后续请求会走页面同款接口)。
|
|
237
243
|
|
|
238
244
|
1. 登录你的 YApi 平台
|
|
239
245
|
2. 进入项目设置页面
|
|
@@ -282,6 +288,7 @@ Token 格式说明:
|
|
|
282
288
|
| `--yapi-auth-mode` | 鉴权模式:`token` 或 `global` | `--yapi-auth-mode=global` | token |
|
|
283
289
|
| `--yapi-email` | 全局模式登录邮箱 | `--yapi-email=a@b.com` | - |
|
|
284
290
|
| `--yapi-password` | 全局模式登录密码 | `--yapi-password=******` | - |
|
|
291
|
+
| `--yapi-toolset` | 工具集:`basic` 或 `full` | `--yapi-toolset=basic` | basic |
|
|
285
292
|
| `--yapi-cache-ttl` | 缓存时效(分钟) | `--yapi-cache-ttl=10` | 10 |
|
|
286
293
|
| `--yapi-log-level` | 日志级别 | `--yapi-log-level=info` | info |
|
|
287
294
|
| `--port` | HTTP 服务端口(SSE 模式) | `--port=3388` | 3388 |
|
|
@@ -299,10 +306,11 @@ YAPI_BASE_URL=https://your-yapi-domain.com
|
|
|
299
306
|
YAPI_AUTH_MODE=token
|
|
300
307
|
YAPI_TOKEN=projectId:your_token_here
|
|
301
308
|
|
|
302
|
-
# 模式二:全局模式(只配置一次账号密码,启动后调用 yapi_update_token
|
|
309
|
+
# 模式二:全局模式(只配置一次账号密码,启动后调用 yapi_update_token 刷新登录态 Cookie)
|
|
303
310
|
# YAPI_AUTH_MODE=global
|
|
304
311
|
# YAPI_EMAIL=your_email@example.com
|
|
305
312
|
# YAPI_PASSWORD=your_password
|
|
313
|
+
# YAPI_TOOLSET=basic
|
|
306
314
|
|
|
307
315
|
# 可选配置
|
|
308
316
|
PORT=3388 # HTTP 服务端口
|
package/dist/config.d.ts
CHANGED
|
@@ -4,18 +4,22 @@ interface ServerConfig {
|
|
|
4
4
|
yapiAuthMode: "token" | "global";
|
|
5
5
|
yapiEmail: string;
|
|
6
6
|
yapiPassword: string;
|
|
7
|
+
yapiToolset: "basic" | "full";
|
|
7
8
|
port: number;
|
|
8
9
|
yapiCacheTTL: number;
|
|
9
10
|
yapiLogLevel: string;
|
|
11
|
+
yapiHttpTimeoutMs: number;
|
|
10
12
|
configSources: {
|
|
11
13
|
yapiBaseUrl: "cli" | "env" | "default";
|
|
12
14
|
yapiToken: "cli" | "env" | "default";
|
|
13
15
|
yapiAuthMode: "cli" | "env" | "default";
|
|
14
16
|
yapiEmail: "cli" | "env" | "default";
|
|
15
17
|
yapiPassword: "cli" | "env" | "default";
|
|
18
|
+
yapiToolset: "cli" | "env" | "default";
|
|
16
19
|
port: "cli" | "env" | "default";
|
|
17
20
|
yapiCacheTTL: "cli" | "env" | "default";
|
|
18
21
|
yapiLogLevel: "cli" | "env" | "default";
|
|
22
|
+
yapiHttpTimeoutMs: "cli" | "env" | "default";
|
|
19
23
|
};
|
|
20
24
|
}
|
|
21
25
|
export declare function getServerConfig(): ServerConfig;
|
package/dist/config.js
CHANGED
|
@@ -4,11 +4,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.getServerConfig = getServerConfig;
|
|
7
|
-
const dotenv_1 = require("dotenv");
|
|
8
7
|
const yargs_1 = __importDefault(require("yargs"));
|
|
9
8
|
const helpers_1 = require("yargs/helpers");
|
|
10
9
|
const logger_1 = require("./services/yapi/logger");
|
|
11
|
-
(0, dotenv_1.config)();
|
|
12
10
|
function maskApiKey(key) {
|
|
13
11
|
if (key.length <= 4)
|
|
14
12
|
return "****";
|
|
@@ -21,6 +19,15 @@ function maskSecret(value) {
|
|
|
21
19
|
return "**";
|
|
22
20
|
return `${value[0]}***${value[value.length - 1]}`;
|
|
23
21
|
}
|
|
22
|
+
function maskEmail(email) {
|
|
23
|
+
const v = String(email || "").trim();
|
|
24
|
+
if (!v)
|
|
25
|
+
return "";
|
|
26
|
+
const at = v.indexOf("@");
|
|
27
|
+
if (at <= 1)
|
|
28
|
+
return "***";
|
|
29
|
+
return `${v[0]}***${v.slice(at)}`;
|
|
30
|
+
}
|
|
24
31
|
function getServerConfig() {
|
|
25
32
|
const argv = (0, yargs_1.default)((0, helpers_1.hideBin)(process.argv))
|
|
26
33
|
.options({
|
|
@@ -34,7 +41,7 @@ function getServerConfig() {
|
|
|
34
41
|
},
|
|
35
42
|
"yapi-auth-mode": {
|
|
36
43
|
type: "string",
|
|
37
|
-
description: "鉴权模式:token=项目 token;global
|
|
44
|
+
description: "鉴权模式:token=项目 token;global=用户名/密码登录(Cookie 登录态)",
|
|
38
45
|
choices: ["token", "global"],
|
|
39
46
|
},
|
|
40
47
|
"yapi-email": {
|
|
@@ -45,6 +52,11 @@ function getServerConfig() {
|
|
|
45
52
|
type: "string",
|
|
46
53
|
description: "全局模式登录密码(/api/user/login 的 password 字段)",
|
|
47
54
|
},
|
|
55
|
+
"yapi-toolset": {
|
|
56
|
+
type: "string",
|
|
57
|
+
description: "工具集:basic=常用精简;full=完整(包含底层接口封装工具)",
|
|
58
|
+
choices: ["basic", "full"],
|
|
59
|
+
},
|
|
48
60
|
port: {
|
|
49
61
|
type: "number",
|
|
50
62
|
description: "Port to run the server on",
|
|
@@ -58,6 +70,10 @@ function getServerConfig() {
|
|
|
58
70
|
description: "YApi日志级别 (debug, info, warn, error)",
|
|
59
71
|
choices: ["debug", "info", "warn", "error"],
|
|
60
72
|
},
|
|
73
|
+
"yapi-http-timeout-ms": {
|
|
74
|
+
type: "number",
|
|
75
|
+
description: "YApi HTTP 请求超时(毫秒),默认 15000",
|
|
76
|
+
},
|
|
61
77
|
})
|
|
62
78
|
.help()
|
|
63
79
|
.parseSync();
|
|
@@ -67,18 +83,22 @@ function getServerConfig() {
|
|
|
67
83
|
yapiAuthMode: "token",
|
|
68
84
|
yapiEmail: "",
|
|
69
85
|
yapiPassword: "",
|
|
86
|
+
yapiToolset: "basic",
|
|
70
87
|
port: 3388,
|
|
71
88
|
yapiCacheTTL: 10,
|
|
72
89
|
yapiLogLevel: "info",
|
|
90
|
+
yapiHttpTimeoutMs: 15_000,
|
|
73
91
|
configSources: {
|
|
74
92
|
yapiBaseUrl: "default",
|
|
75
93
|
yapiToken: "default",
|
|
76
94
|
yapiAuthMode: "default",
|
|
77
95
|
yapiEmail: "default",
|
|
78
96
|
yapiPassword: "default",
|
|
97
|
+
yapiToolset: "default",
|
|
79
98
|
port: "default",
|
|
80
99
|
yapiCacheTTL: "default",
|
|
81
100
|
yapiLogLevel: "default",
|
|
101
|
+
yapiHttpTimeoutMs: "default",
|
|
82
102
|
},
|
|
83
103
|
};
|
|
84
104
|
if (argv["yapi-base-url"]) {
|
|
@@ -127,6 +147,17 @@ function getServerConfig() {
|
|
|
127
147
|
else {
|
|
128
148
|
config.yapiAuthMode = config.yapiToken ? "token" : config.yapiEmail && config.yapiPassword ? "global" : "token";
|
|
129
149
|
}
|
|
150
|
+
if (argv["yapi-toolset"]) {
|
|
151
|
+
config.yapiToolset = argv["yapi-toolset"];
|
|
152
|
+
config.configSources.yapiToolset = "cli";
|
|
153
|
+
}
|
|
154
|
+
else if (process.env.YAPI_TOOLSET) {
|
|
155
|
+
const set = process.env.YAPI_TOOLSET.toLowerCase();
|
|
156
|
+
if (set === "basic" || set === "full") {
|
|
157
|
+
config.yapiToolset = set;
|
|
158
|
+
config.configSources.yapiToolset = "env";
|
|
159
|
+
}
|
|
160
|
+
}
|
|
130
161
|
if (argv.port) {
|
|
131
162
|
config.port = argv.port;
|
|
132
163
|
config.configSources.port = "cli";
|
|
@@ -158,16 +189,29 @@ function getServerConfig() {
|
|
|
158
189
|
config.configSources.yapiLogLevel = "env";
|
|
159
190
|
}
|
|
160
191
|
}
|
|
192
|
+
if (argv["yapi-http-timeout-ms"]) {
|
|
193
|
+
config.yapiHttpTimeoutMs = argv["yapi-http-timeout-ms"];
|
|
194
|
+
config.configSources.yapiHttpTimeoutMs = "cli";
|
|
195
|
+
}
|
|
196
|
+
else if (process.env.YAPI_HTTP_TIMEOUT_MS) {
|
|
197
|
+
const ms = parseInt(process.env.YAPI_HTTP_TIMEOUT_MS, 10);
|
|
198
|
+
if (!isNaN(ms)) {
|
|
199
|
+
config.yapiHttpTimeoutMs = ms;
|
|
200
|
+
config.configSources.yapiHttpTimeoutMs = "env";
|
|
201
|
+
}
|
|
202
|
+
}
|
|
161
203
|
const logger = new logger_1.Logger("Config", config.yapiLogLevel);
|
|
162
204
|
logger.info("\nConfiguration:");
|
|
163
205
|
logger.info(`- YAPI_BASE_URL: ${config.yapiBaseUrl} (source: ${config.configSources.yapiBaseUrl})`);
|
|
164
206
|
logger.info(`- YAPI_TOKEN: ${config.yapiToken ? maskApiKey(config.yapiToken) : "未配置"} (source: ${config.configSources.yapiToken})`);
|
|
165
207
|
logger.info(`- YAPI_AUTH_MODE: ${config.yapiAuthMode} (source: ${config.configSources.yapiAuthMode})`);
|
|
166
|
-
logger.info(`- YAPI_EMAIL: ${config.yapiEmail
|
|
208
|
+
logger.info(`- YAPI_EMAIL: ${config.yapiEmail ? maskEmail(config.yapiEmail) : "未配置"} (source: ${config.configSources.yapiEmail})`);
|
|
167
209
|
logger.info(`- YAPI_PASSWORD: ${config.yapiPassword ? maskSecret(config.yapiPassword) : "未配置"} (source: ${config.configSources.yapiPassword})`);
|
|
210
|
+
logger.info(`- YAPI_TOOLSET: ${config.yapiToolset} (source: ${config.configSources.yapiToolset})`);
|
|
168
211
|
logger.info(`- PORT: ${config.port} (source: ${config.configSources.port})`);
|
|
169
212
|
logger.info(`- YAPI_CACHE_TTL: ${config.yapiCacheTTL} 分钟 (source: ${config.configSources.yapiCacheTTL})`);
|
|
170
213
|
logger.info(`- YAPI_LOG_LEVEL: ${config.yapiLogLevel} (source: ${config.configSources.yapiLogLevel})`);
|
|
214
|
+
logger.info(`- YAPI_HTTP_TIMEOUT_MS: ${config.yapiHttpTimeoutMs} (source: ${config.configSources.yapiHttpTimeoutMs})`);
|
|
171
215
|
logger.info("");
|
|
172
216
|
return config;
|
|
173
217
|
}
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":";;;;;AA6DA,0CAmNC;AAhRD,kDAA0B;AAC1B,2CAAwC;AACxC,mDAAgD;AA2BhD,SAAS,UAAU,CAAC,GAAW;IAC7B,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC;QAAE,OAAO,MAAM,CAAC;IACnC,OAAO,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAChC,CAAC;AAED,SAAS,UAAU,CAAC,KAAa;IAC/B,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,CAAC;IACtB,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACnC,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC;AACpD,CAAC;AAED,SAAS,SAAS,CAAC,KAAa;IAC9B,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACrC,IAAI,CAAC,CAAC;QAAE,OAAO,EAAE,CAAC;IAClB,MAAM,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC1B,IAAI,EAAE,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IAC1B,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;AACpC,CAAC;AAeD,SAAgB,eAAe;IAE7B,MAAM,IAAI,GAAG,IAAA,eAAK,EAAC,IAAA,iBAAO,EAAC,OAAO,CAAC,IAAI,CAAC,CAAC;SACtC,OAAO,CAAC;QACP,eAAe,EAAE;YACf,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,cAAc;SAC5B;QACD,YAAY,EAAE;YACZ,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,gBAAgB;SAC9B;QACD,gBAAgB,EAAE;YAChB,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,iDAAiD;YAC9D,OAAO,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC;SAC7B;QACD,YAAY,EAAE;YACZ,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,sCAAsC;SACpD;QACD,eAAe,EAAE;YACf,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,yCAAyC;SACvD;QACD,cAAc,EAAE;YACd,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,oCAAoC;YACjD,OAAO,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC;SAC3B;QACD,IAAI,EAAE;YACJ,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,2BAA2B;SACzC;QACD,gBAAgB,EAAE;YAChB,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,sBAAsB;SACpC;QACD,gBAAgB,EAAE;YAChB,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,qCAAqC;YAClD,OAAO,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC;SAC5C;QACD,sBAAsB,EAAE;YACtB,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,6BAA6B;SAC3C;KACF,CAAC;SACD,IAAI,EAAE;SACN,SAAS,EAAa,CAAC;IAE1B,MAAM,MAAM,GAAiB;QAC3B,WAAW,EAAE,uBAAuB;QACpC,SAAS,EAAE,EAAE;QACb,YAAY,EAAE,OAAO;QACrB,SAAS,EAAE,EAAE;QACb,YAAY,EAAE,EAAE;QAChB,WAAW,EAAE,OAAO;QACpB,IAAI,EAAE,IAAI;QACV,YAAY,EAAE,EAAE;QAChB,YAAY,EAAE,MAAM;QACpB,iBAAiB,EAAE,MAAM;QACzB,aAAa,EAAE;YACb,WAAW,EAAE,SAAS;YACtB,SAAS,EAAE,SAAS;YACpB,YAAY,EAAE,SAAS;YACvB,SAAS,EAAE,SAAS;YACpB,YAAY,EAAE,SAAS;YACvB,WAAW,EAAE,SAAS;YACtB,IAAI,EAAE,SAAS;YACf,YAAY,EAAE,SAAS;YACvB,YAAY,EAAE,SAAS;YACvB,iBAAiB,EAAE,SAAS;SAC7B;KACF,CAAC;IAIF,IAAI,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC;QAC1B,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC;QAC3C,MAAM,CAAC,aAAa,CAAC,WAAW,GAAG,KAAK,CAAC;IAC3C,CAAC;SAAM,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QACrC,MAAM,CAAC,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;QAC/C,MAAM,CAAC,aAAa,CAAC,WAAW,GAAG,KAAK,CAAC;IAC3C,CAAC;IAGD,IAAI,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;QACvB,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC;QACtC,MAAM,CAAC,aAAa,CAAC,SAAS,GAAG,KAAK,CAAC;IACzC,CAAC;SAAM,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC;QAClC,MAAM,CAAC,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;QAC1C,MAAM,CAAC,aAAa,CAAC,SAAS,GAAG,KAAK,CAAC;IACzC,CAAC;IAGD,IAAI,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;QACvB,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC;QACtC,MAAM,CAAC,aAAa,CAAC,SAAS,GAAG,KAAK,CAAC;IACzC,CAAC;SAAM,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC;QAClC,MAAM,CAAC,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;QAC1C,MAAM,CAAC,aAAa,CAAC,SAAS,GAAG,KAAK,CAAC;IACzC,CAAC;IAED,IAAI,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC;QAC1B,MAAM,CAAC,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC;QAC5C,MAAM,CAAC,aAAa,CAAC,YAAY,GAAG,KAAK,CAAC;IAC5C,CAAC;SAAM,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QACrC,MAAM,CAAC,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;QAChD,MAAM,CAAC,aAAa,CAAC,YAAY,GAAG,KAAK,CAAC;IAC5C,CAAC;IAGD,IAAI,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC;QAC3B,MAAM,CAAC,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC7C,MAAM,CAAC,aAAa,CAAC,YAAY,GAAG,KAAK,CAAC;IAC5C,CAAC;SAAM,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,WAAW,EAAE,CAAC;QACtD,IAAI,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC1C,MAAM,CAAC,YAAY,GAAG,IAAI,CAAC;YAC3B,MAAM,CAAC,aAAa,CAAC,YAAY,GAAG,KAAK,CAAC;QAC5C,CAAC;IACH,CAAC;SAAM,CAAC;QAEN,MAAM,CAAC,YAAY,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC;IAClH,CAAC;IAGD,IAAI,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC;QACzB,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC;QAC1C,MAAM,CAAC,aAAa,CAAC,WAAW,GAAG,KAAK,CAAC;IAC3C,CAAC;SAAM,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;QACpC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC;QACnD,IAAI,GAAG,KAAK,OAAO,IAAI,GAAG,KAAK,MAAM,EAAE,CAAC;YACtC,MAAM,CAAC,WAAW,GAAG,GAAG,CAAC;YACzB,MAAM,CAAC,aAAa,CAAC,WAAW,GAAG,KAAK,CAAC;QAC3C,CAAC;IACH,CAAC;IAGD,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACxB,MAAM,CAAC,aAAa,CAAC,IAAI,GAAG,KAAK,CAAC;IACpC,CAAC;SAAM,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;QAC5B,MAAM,CAAC,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAC7C,MAAM,CAAC,aAAa,CAAC,IAAI,GAAG,KAAK,CAAC;IACpC,CAAC;IAGD,IAAI,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC;QAC3B,MAAM,CAAC,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC7C,MAAM,CAAC,aAAa,CAAC,YAAY,GAAG,KAAK,CAAC;IAC5C,CAAC;SAAM,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC;QACtC,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;QAC1D,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;YACrB,MAAM,CAAC,YAAY,GAAG,QAAQ,CAAC;YAC/B,MAAM,CAAC,aAAa,CAAC,YAAY,GAAG,KAAK,CAAC;QAC5C,CAAC;IACH,CAAC;IAGD,IAAI,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC;QAC3B,MAAM,CAAC,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC7C,MAAM,CAAC,aAAa,CAAC,YAAY,GAAG,KAAK,CAAC;IAC5C,CAAC;SAAM,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC;QACtC,MAAM,WAAW,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QACvD,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,WAAW,EAAE,CAAC;QAC1D,IAAI,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YACnC,MAAM,CAAC,YAAY,GAAG,QAAQ,CAAC;YAC/B,MAAM,CAAC,aAAa,CAAC,YAAY,GAAG,KAAK,CAAC;QAC5C,CAAC;IACH,CAAC;IAGD,IAAI,IAAI,CAAC,sBAAsB,CAAC,EAAE,CAAC;QACjC,MAAM,CAAC,iBAAiB,GAAG,IAAI,CAAC,sBAAsB,CAAC,CAAC;QACxD,MAAM,CAAC,aAAa,CAAC,iBAAiB,GAAG,KAAK,CAAC;IACjD,CAAC;SAAM,IAAI,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,CAAC;QAC5C,MAAM,EAAE,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,EAAE,CAAC,CAAC;QAC1D,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;YACf,MAAM,CAAC,iBAAiB,GAAG,EAAE,CAAC;YAC9B,MAAM,CAAC,aAAa,CAAC,iBAAiB,GAAG,KAAK,CAAC;QACjD,CAAC;IACH,CAAC;IAGD,MAAM,MAAM,GAAG,IAAI,eAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;IAGzD,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IAChC,MAAM,CAAC,IAAI,CACT,oBAAoB,MAAM,CAAC,WAAW,aAAa,MAAM,CAAC,aAAa,CAAC,WAAW,GAAG,CACvF,CAAC;IACF,MAAM,CAAC,IAAI,CACT,iBAAiB,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,aAAa,MAAM,CAAC,aAAa,CAAC,SAAS,GAAG,CACvH,CAAC;IACF,MAAM,CAAC,IAAI,CAAC,qBAAqB,MAAM,CAAC,YAAY,aAAa,MAAM,CAAC,aAAa,CAAC,YAAY,GAAG,CAAC,CAAC;IACvG,MAAM,CAAC,IAAI,CACT,iBAAiB,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,aAAa,MAAM,CAAC,aAAa,CAAC,SAAS,GAAG,CACtH,CAAC;IACF,MAAM,CAAC,IAAI,CACT,oBAAoB,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,KAAK,aAAa,MAAM,CAAC,aAAa,CAAC,YAAY,GAAG,CACnI,CAAC;IACF,MAAM,CAAC,IAAI,CAAC,mBAAmB,MAAM,CAAC,WAAW,aAAa,MAAM,CAAC,aAAa,CAAC,WAAW,GAAG,CAAC,CAAC;IACnG,MAAM,CAAC,IAAI,CAAC,WAAW,MAAM,CAAC,IAAI,aAAa,MAAM,CAAC,aAAa,CAAC,IAAI,GAAG,CAAC,CAAC;IAC7E,MAAM,CAAC,IAAI,CAAC,qBAAqB,MAAM,CAAC,YAAY,gBAAgB,MAAM,CAAC,aAAa,CAAC,YAAY,GAAG,CAAC,CAAC;IAC1G,MAAM,CAAC,IAAI,CAAC,qBAAqB,MAAM,CAAC,YAAY,aAAa,MAAM,CAAC,aAAa,CAAC,YAAY,GAAG,CAAC,CAAC;IACvG,MAAM,CAAC,IAAI,CAAC,2BAA2B,MAAM,CAAC,iBAAiB,aAAa,MAAM,CAAC,aAAa,CAAC,iBAAiB,GAAG,CAAC,CAAC;IACvH,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEhB,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -30,7 +30,7 @@ async function startServer() {
|
|
|
30
30
|
mode: config.yapiAuthMode,
|
|
31
31
|
email: config.yapiEmail,
|
|
32
32
|
password: config.yapiPassword,
|
|
33
|
-
});
|
|
33
|
+
}, { timeoutMs: config.yapiHttpTimeoutMs }, { toolset: config.yapiToolset });
|
|
34
34
|
const isStdioMode = process.env.NODE_ENV === "cli" || process.argv.includes("--stdio");
|
|
35
35
|
if (isStdioMode) {
|
|
36
36
|
logger.info("Initializing Yapi MCP Server in stdio mode...");
|
|
@@ -47,9 +47,16 @@ async function startServer() {
|
|
|
47
47
|
logger.info("- yapi_search_apis: 搜索YApi接口");
|
|
48
48
|
logger.info("- yapi_list_projects: 列出YApi的项目ID和项目名称");
|
|
49
49
|
logger.info("- yapi_get_categories: 获取YApi项目下的接口分类列表");
|
|
50
|
-
logger.info("- yapi_update_token:
|
|
50
|
+
logger.info("- yapi_update_token: 全局模式登录并刷新本地登录态 Cookie");
|
|
51
51
|
}
|
|
52
52
|
if (require.main === module) {
|
|
53
|
+
try {
|
|
54
|
+
const { resolve } = require("path");
|
|
55
|
+
const { config } = require("dotenv");
|
|
56
|
+
config({ path: resolve(process.cwd(), ".env") });
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
}
|
|
53
60
|
startServer().catch((error) => {
|
|
54
61
|
console.error("Failed to start server:", error);
|
|
55
62
|
process.exit(1);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAWA,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAWA,kCAwCC;AAnDD,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,EACD,EAAE,SAAS,EAAE,MAAM,CAAC,iBAAiB,EAAE,EACvC,EAAE,OAAO,EAAE,MAAM,CAAC,WAAW,EAAE,CAChC,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,4CAA4C,CAAC,CAAC;AAC5D,CAAC;AAGD,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;IAE5B,IAAI,CAAC;QAEH,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;QAEpC,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;QACrC,MAAM,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;IACnD,CAAC;IAAC,MAAM,CAAC;IAET,CAAC;IACD,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"}
|
package/dist/server.d.ts
CHANGED
|
@@ -6,13 +6,19 @@ export declare class YapiMcpServer {
|
|
|
6
6
|
private readonly logger;
|
|
7
7
|
private readonly authService;
|
|
8
8
|
private readonly authMode;
|
|
9
|
+
private readonly toolset;
|
|
9
10
|
private sseTransport;
|
|
10
11
|
private readonly isStdioMode;
|
|
11
12
|
constructor(yapiBaseUrl: string, yapiToken: string, yapiLogLevel?: string, yapiCacheTTL?: number, auth?: {
|
|
12
13
|
mode?: "token" | "global";
|
|
13
14
|
email?: string;
|
|
14
15
|
password?: string;
|
|
16
|
+
}, http?: {
|
|
17
|
+
timeoutMs?: number;
|
|
18
|
+
}, tools?: {
|
|
19
|
+
toolset?: "basic" | "full";
|
|
15
20
|
});
|
|
21
|
+
private loadCacheFromDiskOnly;
|
|
16
22
|
private initializeCache;
|
|
17
23
|
private asyncUpdateCache;
|
|
18
24
|
private registerTools;
|