@leeguoo/yapi-mcp 0.3.10 → 0.3.11

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 CHANGED
@@ -71,6 +71,8 @@ npx -y @leeguoo/yapi-mcp install-skill \
71
71
  --yapi-password=your_password
72
72
  ```
73
73
 
74
+ Skill 模板来源:`packages/yapi-mcp/skill-template/SKILL.md`(发布后从包内复制到技能目录)。
75
+
74
76
  CLI 使用示例(走同一份 `~/.yapi/config.toml`):
75
77
 
76
78
  ```bash
@@ -12,518 +12,48 @@ const yargs_1 = __importDefault(require("yargs"));
12
12
  const SKILL_NAME = "yapi";
13
13
  const PLACEHOLDER_EMAIL = "YOUR_EMAIL";
14
14
  const PLACEHOLDER_PASSWORD = "YOUR_PASSWORD";
15
- const SKILL_MD = [
16
- "---",
17
- "name: yapi",
18
- 'description: Query and sync YApi interface documentation. Use when user mentions \"yapi 接口文档\", YAPI docs, asks for request/response details, or needs docs sync.',
19
- "---",
20
- "",
21
- "# YApi interface docs",
22
- "",
23
- "## Workflow",
24
- "1. Load config from `~/.yapi/config.toml` (preferred) or `config.toml` in this skill directory (base_url, auth_mode, email/password or token, optional project_id).",
25
- "2. Identify the target interface by id or keyword; ask for project/category ids if needed.",
26
- "3. Call YApi endpoints with `scripts/yapi_request.js` to fetch raw JSON.",
27
- "4. Summarize method, path, headers, query/body schema, response schema, and examples.",
28
- "",
29
- "## CLI",
30
- "- Install & run: `npx -y @leeguoo/yapi-mcp yapi -h` (or install globally and use `yapi`).",
31
- "- Use the same config as the skill: `~/.yapi/config.toml`.",
32
- "",
33
- "## Docs sync",
34
- "- Bind local docs to YApi category with `yapi docs-sync bind add --name <binding> --dir <path> --project-id <id> --catid <id>` (stored in `.yapi/docs-sync.json`).",
35
- "- Sync with `yapi docs-sync --binding <binding>` or run all bindings with `yapi docs-sync`.",
36
- "- Default syncs only changed files; use `--force` to sync everything.",
37
- "- Mermaid rendering depends on `mmdc` (auto-installed if possible; failures do not block sync).",
38
- "- For full Markdown render, install `pandoc` (manual install required).",
39
- "- Extra mappings (generated after docs-sync run in binding mode):",
40
- " - `.yapi/docs-sync.links.json`: local docs to YApi doc URLs.",
41
- " - `.yapi/docs-sync.projects.json`: cached project metadata/envs.",
42
- " - `.yapi/docs-sync.deployments.json`: local docs to deployed URLs.",
43
- "",
44
- "## Interface creation tips",
45
- "- When adding interfaces, always set `req_body_type` (use `json` if unsure) and provide `res_body` (prefer JSON Schema). Empty values can make `/api/interface/add` fail.",
46
- "- Keep request/response structures in `req_*` / `res_body` instead of stuffing them into `desc` or `markdown`.",
47
- "",
48
- "## Script",
49
- "- Basic: `node <skill-dir>/scripts/yapi_request.js --path /api/interface/get --query id=123`",
50
- "- The script reads `~/.yapi/config.toml` first, then `<skill-dir>/config.toml`; pass `--config` for a custom path.",
51
- "- Use `--base-url`, `--token`, `--project-id` to override config.",
52
- "- For `auth_mode=global`, the script logs in via `/api/user/login` and uses the returned cookie automatically.",
53
- '- For POST: `--method POST --data \'{"key":"value"}\'`',
54
- "- If your instance differs, pass a full URL with `--url`.",
55
- "",
56
- ].join("\n");
57
- const REQUEST_SCRIPT = [
58
- "#!/usr/bin/env node",
59
- '"use strict";',
60
- "",
61
- 'const fs = require("fs");',
62
- 'const os = require("os");',
63
- 'const path = require("path");',
64
- 'const readline = require("readline");',
65
- "",
66
- "function parseKeyValue(raw) {",
67
- ' if (!raw || !raw.includes("=")) throw new Error("expected key=value");',
68
- ' const idx = raw.indexOf("=");',
69
- " return [raw.slice(0, idx), raw.slice(idx + 1)];",
70
- "}",
71
- "",
72
- "function parseHeader(raw) {",
73
- ' if (!raw || !raw.includes(":")) throw new Error("expected Header:Value");',
74
- ' const idx = raw.indexOf(":");',
75
- " return [raw.slice(0, idx).trim(), raw.slice(idx + 1).trim()];",
76
- "}",
77
- "",
78
- "function joinUrl(baseUrl, endpoint) {",
79
- " if (!baseUrl) return endpoint;",
80
- ' if (baseUrl.endsWith("/") && endpoint.startsWith("/")) return baseUrl.slice(0, -1) + endpoint;',
81
- ' if (!baseUrl.endsWith("/") && !endpoint.startsWith("/")) return baseUrl + "/" + endpoint;',
82
- " return baseUrl + endpoint;",
83
- "}",
84
- "",
85
- "function globalConfigPath() {",
86
- ' const yapiHome = process.env.YAPI_HOME || path.join(os.homedir(), ".yapi");',
87
- ' return path.join(yapiHome, "config.toml");',
88
- "}",
89
- "",
90
- "function localConfigPath() {",
91
- ' return path.resolve(__dirname, "..", "config.toml");',
92
- "}",
93
- "",
94
- "function ensureDir(dirPath) {",
95
- " try {",
96
- " fs.mkdirSync(dirPath, { recursive: true });",
97
- " } catch {",
98
- " // ignore",
99
- " }",
100
- "}",
101
- "",
102
- "function escapeTomlValue(value) {",
103
- ' return String(value || "").replace(/\\\\/g, "\\\\\\\\").replace(/\\"/g, "\\\\\\"");',
104
- "}",
105
- "",
106
- "function formatToml(config) {",
107
- ' const orderedKeys = ["base_url", "auth_mode", "email", "password", "token", "project_id"];',
108
- ' const lines = ["# YApi CLI config"];',
109
- " for (const key of orderedKeys) {",
110
- ' const value = config[key] || "";',
111
- ' lines.push(`${key} = \\"${escapeTomlValue(value)}\\"`);',
112
- " }",
113
- ' return lines.join("\\n") + "\\n";',
114
- "}",
115
- "",
116
- "function writeConfig(filePath, config) {",
117
- " ensureDir(path.dirname(filePath));",
118
- ' fs.writeFileSync(filePath, formatToml(config), "utf8");',
119
- "}",
120
- "",
121
- "function promptText(question) {",
122
- " const rl = readline.createInterface({ input: process.stdin, output: process.stdout, terminal: true });",
123
- " return new Promise((resolve) => {",
124
- " rl.question(question, (answer) => {",
125
- " rl.close();",
126
- " resolve(answer);",
127
- " });",
128
- " });",
129
- "}",
130
- "",
131
- "function promptHidden(question) {",
132
- " const rl = readline.createInterface({ input: process.stdin, output: process.stdout, terminal: true });",
133
- " const originalWrite = rl._writeToOutput;",
134
- " rl._writeToOutput = function writeToOutput(stringToWrite) {",
135
- " if (rl.stdoutMuted) return;",
136
- ' if (typeof originalWrite === "function") {',
137
- " originalWrite.call(this, stringToWrite);",
138
- " } else {",
139
- " rl.output.write(stringToWrite);",
140
- " }",
141
- " };",
142
- " rl.stdoutMuted = true;",
143
- " return new Promise((resolve) => {",
144
- " rl.question(question, (answer) => {",
145
- " rl.stdoutMuted = false;",
146
- " rl.close();",
147
- " resolve(answer);",
148
- " });",
149
- " });",
150
- "}",
151
- "",
152
- "async function promptRequired(question, hidden) {",
153
- " while (true) {",
154
- " const answer = hidden ? await promptHidden(question) : await promptText(question);",
155
- ' const trimmed = String(answer || "").trim();',
156
- " if (trimmed) return trimmed;",
157
- " }",
158
- "}",
159
- "",
160
- "async function initConfigIfMissing(options) {",
161
- " const hasBaseUrl = Boolean(options.baseUrl);",
162
- " const hasEmail = Boolean(options.email);",
163
- " const hasPassword = Boolean(options.password);",
164
- " if (!hasBaseUrl || !hasEmail || !hasPassword) {",
165
- " if (!process.stdin.isTTY || !process.stdout.isTTY) return null;",
166
- " }",
167
- ' const baseUrl = hasBaseUrl ? options.baseUrl : await promptRequired("YApi base URL: ", false);',
168
- ' const email = hasEmail ? options.email : await promptRequired("YApi email: ", false);',
169
- ' const password = hasPassword ? options.password : await promptRequired("YApi password: ", true);',
170
- " const config = {",
171
- " base_url: baseUrl,",
172
- ' auth_mode: "global",',
173
- " email,",
174
- " password,",
175
- ' token: options.token || "",',
176
- ' project_id: options.projectId || "",',
177
- " };",
178
- " const configPath = globalConfigPath();",
179
- " writeConfig(configPath, config);",
180
- " return { configPath, config };",
181
- "}",
182
- "",
183
- "function parseSimpleToml(text) {",
184
- " const data = {};",
185
- ' const lines = String(text || "").split(/\\r?\\n/);',
186
- " for (const rawLine of lines) {",
187
- ' const line = rawLine.split("#", 1)[0].split(";", 1)[0].trim();',
188
- ' if (!line || line.startsWith("[")) continue;',
189
- ' const idx = line.indexOf("=");',
190
- " if (idx === -1) continue;",
191
- " const key = line.slice(0, idx).trim();",
192
- " let value = line.slice(idx + 1).trim();",
193
- " if (!key) continue;",
194
- " if ((value.startsWith('\"') && value.endsWith('\"')) || (value.startsWith(\"'\") && value.endsWith(\"'\"))) {",
195
- " value = value.slice(1, -1);",
196
- " }",
197
- " data[key] = value;",
198
- " }",
199
- " return data;",
200
- "}",
201
- "",
202
- "function resolveToken(tokenValue, projectId) {",
203
- ' if (!tokenValue) return "";',
204
- ' if (tokenValue.includes(",") || tokenValue.includes(":")) {',
205
- ' let defaultToken = "";',
206
- " const mapping = {};",
207
- ' tokenValue.split(",").forEach((rawPair) => {',
208
- " const pair = rawPair.trim();",
209
- " if (!pair) return;",
210
- ' const idx = pair.indexOf(":");',
211
- " if (idx === -1) {",
212
- " defaultToken = pair;",
213
- " return;",
214
- " }",
215
- " const pid = pair.slice(0, idx).trim();",
216
- " const token = pair.slice(idx + 1).trim();",
217
- " if (pid && token) mapping[pid] = token;",
218
- " });",
219
- " if (projectId && mapping[projectId]) return mapping[projectId];",
220
- " if (defaultToken) return defaultToken;",
221
- " const keys = Object.keys(mapping);",
222
- " if (keys.length) return mapping[keys[0]];",
223
- " }",
224
- " return tokenValue;",
225
- "}",
226
- "",
227
- "function getSetCookie(headers) {",
228
- " if (!headers) return [];",
229
- ' if (typeof headers.getSetCookie === "function") return headers.getSetCookie();',
230
- ' const value = headers.get("set-cookie");',
231
- " return value ? [value] : [];",
232
- "}",
233
- "",
234
- "function extractCookieValue(setCookies, name) {",
235
- ' if (!setCookies || !setCookies.length) return "";',
236
- " for (const entry of setCookies) {",
237
- ' const parts = String(entry || "").split(";");',
238
- " for (const part of parts) {",
239
- " const item = part.trim();",
240
- ' if (item.startsWith(name + "=")) return item.split("=").slice(1).join("=");',
241
- " }",
242
- " }",
243
- ' return "";',
244
- "}",
245
- "",
246
- "async function fetchWithTimeout(url, options, timeoutMs) {",
247
- " const controller = new AbortController();",
248
- " const timer = setTimeout(() => controller.abort(), timeoutMs);",
249
- " try {",
250
- " return await fetch(url, { ...options, signal: controller.signal });",
251
- " } finally {",
252
- " clearTimeout(timer);",
253
- " }",
254
- "}",
255
- "",
256
- "async function loginGetCookie(baseUrl, email, password, timeoutMs) {",
257
- ' const url = joinUrl(baseUrl, "/api/user/login");',
258
- " const payload = JSON.stringify({ email, password });",
259
- " const response = await fetchWithTimeout(url, {",
260
- ' method: "POST",',
261
- ' headers: { "Content-Type": "application/json;charset=UTF-8" },',
262
- " body: payload,",
263
- " }, timeoutMs);",
264
- " const bodyText = await response.text();",
265
- " const setCookies = getSetCookie(response.headers);",
266
- ' const yapiToken = extractCookieValue(setCookies, "_yapi_token");',
267
- ' const yapiUid = extractCookieValue(setCookies, "_yapi_uid");',
268
- " if (!yapiToken) {",
269
- ' let message = "login failed: missing _yapi_token cookie";',
270
- " try {",
271
- " const payload = JSON.parse(bodyText);",
272
- ' if (payload && typeof payload === "object" && payload.errmsg) message = payload.errmsg;',
273
- " } catch {",
274
- " // ignore",
275
- " }",
276
- " throw new Error(message);",
277
- " }",
278
- " let cookie = `_yapi_token=${yapiToken}`;",
279
- " if (yapiUid) cookie = `${cookie}; _yapi_uid=${yapiUid}`;",
280
- " return cookie;",
281
- "}",
282
- "",
283
- "function buildUrl(baseUrl, endpoint, queryItems, token, tokenParam) {",
284
- " const url = baseUrl ? joinUrl(baseUrl, endpoint) : endpoint;",
285
- " const parsed = new URL(url);",
286
- " if (Array.isArray(queryItems)) {",
287
- " for (const [key, value] of queryItems) {",
288
- ' if (key) parsed.searchParams.append(key, value ?? "");',
289
- " }",
290
- " }",
291
- " if (token) {",
292
- " if (!parsed.searchParams.has(tokenParam)) {",
293
- " parsed.searchParams.append(tokenParam, token);",
294
- " }",
295
- " }",
296
- " return parsed.toString();",
297
- "}",
298
- "",
299
- "function parseArgs(argv) {",
300
- " const options = {",
301
- " query: [],",
302
- " header: [],",
303
- ' method: "GET",',
304
- ' tokenParam: "token",',
305
- " timeout: 30000,",
306
- " };",
307
- " for (let i = 0; i < argv.length; i += 1) {",
308
- " const arg = argv[i];",
309
- " if (!arg) continue;",
310
- ' if (arg === "--config") { options.config = argv[++i]; continue; }',
311
- ' if (arg.startsWith("--config=")) { options.config = arg.slice(9); continue; }',
312
- ' if (arg === "--base-url") { options.baseUrl = argv[++i]; continue; }',
313
- ' if (arg.startsWith("--base-url=")) { options.baseUrl = arg.slice(11); continue; }',
314
- ' if (arg === "--token") { options.token = argv[++i]; continue; }',
315
- ' if (arg.startsWith("--token=")) { options.token = arg.slice(8); continue; }',
316
- ' if (arg === "--project-id") { options.projectId = argv[++i]; continue; }',
317
- ' if (arg.startsWith("--project-id=")) { options.projectId = arg.slice(13); continue; }',
318
- ' if (arg === "--auth-mode") { options.authMode = argv[++i]; continue; }',
319
- ' if (arg.startsWith("--auth-mode=")) { options.authMode = arg.slice(12); continue; }',
320
- ' if (arg === "--email") { options.email = argv[++i]; continue; }',
321
- ' if (arg.startsWith("--email=")) { options.email = arg.slice(8); continue; }',
322
- ' if (arg === "--password") { options.password = argv[++i]; continue; }',
323
- ' if (arg.startsWith("--password=")) { options.password = arg.slice(11); continue; }',
324
- ' if (arg === "--cookie") { options.cookie = argv[++i]; continue; }',
325
- ' if (arg.startsWith("--cookie=")) { options.cookie = arg.slice(9); continue; }',
326
- ' if (arg === "--token-param") { options.tokenParam = argv[++i]; continue; }',
327
- ' if (arg.startsWith("--token-param=")) { options.tokenParam = arg.slice(14); continue; }',
328
- ' if (arg === "--method") { options.method = argv[++i]; continue; }',
329
- ' if (arg.startsWith("--method=")) { options.method = arg.slice(9); continue; }',
330
- ' if (arg === "--path") { options.path = argv[++i]; continue; }',
331
- ' if (arg.startsWith("--path=")) { options.path = arg.slice(7); continue; }',
332
- ' if (arg === "--url") { options.url = argv[++i]; continue; }',
333
- ' if (arg.startsWith("--url=")) { options.url = arg.slice(6); continue; }',
334
- ' if (arg === "--query") { options.query.push(argv[++i]); continue; }',
335
- ' if (arg.startsWith("--query=")) { options.query.push(arg.slice(8)); continue; }',
336
- ' if (arg === "--header") { options.header.push(argv[++i]); continue; }',
337
- ' if (arg.startsWith("--header=")) { options.header.push(arg.slice(9)); continue; }',
338
- ' if (arg === "--data") { options.data = argv[++i]; continue; }',
339
- ' if (arg.startsWith("--data=")) { options.data = arg.slice(7); continue; }',
340
- ' if (arg === "--data-file") { options.dataFile = argv[++i]; continue; }',
341
- ' if (arg.startsWith("--data-file=")) { options.dataFile = arg.slice(12); continue; }',
342
- ' if (arg === "--timeout") { options.timeout = Number(argv[++i]); continue; }',
343
- ' if (arg.startsWith("--timeout=")) { options.timeout = Number(arg.slice(10)); continue; }',
344
- ' if (arg === "--no-pretty") { options.noPretty = true; continue; }',
345
- ' if (arg === "--help" || arg === "-h") { options.help = true; continue; }',
346
- " }",
347
- " return options;",
348
- "}",
349
- "",
350
- "function usage() {",
351
- " return [",
352
- ' "Usage:",',
353
- ' " node yapi_request.js --path /api/interface/get --query id=123",',
354
- ' "Options:",',
355
- ' " --config <path> config file path (default: ~/.yapi/config.toml)",',
356
- ' " --base-url <url> YApi base URL",',
357
- ' " --token <token> project token (supports projectId:token)",',
358
- ' " --project-id <id> select token for project",',
359
- ' " --auth-mode <mode> token or global",',
360
- ' " --email <email> login email for global mode",',
361
- ' " --password <pwd> login password for global mode",',
362
- ' " --path <path> API path (e.g., /api/interface/get)",',
363
- ' " --url <url> full URL (overrides base-url/path)",',
364
- ' " --query key=value query param (repeatable)",',
365
- ' " --header Header:Value request header (repeatable)",',
366
- ' " --method <method> HTTP method",',
367
- ' " --data <payload> request body (JSON or text)",',
368
- ' " --data-file <file> request body file",',
369
- ' " --timeout <ms> request timeout in ms",',
370
- ' " --no-pretty print raw response",',
371
- ' ].join("\\n");',
372
- "}",
373
- "",
374
- "async function main() {",
375
- " const options = parseArgs(process.argv.slice(2));",
376
- " if (options.help) {",
377
- " console.log(usage());",
378
- " return 0;",
379
- " }",
380
- "",
381
- " if (options.url && options.path) {",
382
- ' console.error("use --url or --path, not both");',
383
- " return 2;",
384
- " }",
385
- "",
386
- " if (!options.url && !options.path) {",
387
- ' console.error("missing --path or --url");',
388
- " console.error(usage());",
389
- " return 2;",
390
- " }",
391
- "",
392
- " let config = {};",
393
- ' let configPath = options.config || "";',
394
- " if (options.config) {",
395
- " if (fs.existsSync(configPath)) {",
396
- ' config = parseSimpleToml(fs.readFileSync(configPath, "utf8"));',
397
- " } else {",
398
- " const init = await initConfigIfMissing(options);",
399
- " if (init) {",
400
- " config = init.config;",
401
- " configPath = init.configPath;",
402
- " } else {",
403
- " console.error(`missing config file: ${configPath}`);",
404
- " return 2;",
405
- " }",
406
- " }",
407
- " } else {",
408
- " const globalPath = globalConfigPath();",
409
- " const localPath = localConfigPath();",
410
- " if (fs.existsSync(globalPath)) {",
411
- " configPath = globalPath;",
412
- ' config = parseSimpleToml(fs.readFileSync(globalPath, "utf8"));',
413
- " } else if (fs.existsSync(localPath)) {",
414
- " configPath = localPath;",
415
- ' config = parseSimpleToml(fs.readFileSync(localPath, "utf8"));',
416
- " } else {",
417
- " const init = await initConfigIfMissing(options);",
418
- " if (init) {",
419
- " config = init.config;",
420
- " configPath = init.configPath;",
421
- " } else {",
422
- ' console.error("missing config: create ~/.yapi/config.toml or pass --config");',
423
- " return 2;",
424
- " }",
425
- " }",
426
- " }",
427
- "",
428
- ' const baseUrl = options.url ? null : (options.baseUrl || config.base_url || "");',
429
- " const endpoint = options.url || options.path;",
430
- " if (!options.url && !baseUrl) {",
431
- ' console.error("missing --base-url or config base_url");',
432
- " return 2;",
433
- " }",
434
- "",
435
- ' const projectId = options.projectId || config.project_id || "";',
436
- ' const rawToken = options.token || config.token || "";',
437
- " const token = resolveToken(rawToken, projectId);",
438
- "",
439
- ' let authMode = (options.authMode || config.auth_mode || "").trim().toLowerCase();',
440
- " if (!authMode) {",
441
- ' authMode = token ? "token" : (options.email || options.password || config.email || config.password) ? "global" : "token";',
442
- " }",
443
- ' if (authMode !== "token" && authMode !== "global") {',
444
- ' console.error("invalid --auth-mode (use token or global)");',
445
- " return 2;",
446
- " }",
447
- "",
448
- " const headers = {};",
449
- " for (const header of options.header || []) {",
450
- " const [key, value] = parseHeader(header);",
451
- " headers[key] = value;",
452
- " }",
453
- "",
454
- " if (options.cookie) {",
455
- " headers.Cookie = options.cookie;",
456
- ' } else if (authMode === "global") {',
457
- " const email = options.email || config.email;",
458
- " const password = options.password || config.password;",
459
- " if (!email || !password) {",
460
- ' console.error("missing email/password for global auth");',
461
- " return 2;",
462
- " }",
463
- " try {",
464
- " headers.Cookie = await loginGetCookie(baseUrl, email, password, options.timeout);",
465
- " } catch (error) {",
466
- " console.error(error && error.message ? error.message : String(error));",
467
- " return 2;",
468
- " }",
469
- " }",
470
- "",
471
- " const queryItems = [];",
472
- " for (const query of options.query || []) {",
473
- " queryItems.push(parseKeyValue(query));",
474
- " }",
475
- ' const url = buildUrl(baseUrl, endpoint, queryItems, authMode === "token" ? token : "", options.tokenParam);',
476
- "",
477
- " let dataRaw = null;",
478
- " if (options.dataFile) {",
479
- ' dataRaw = fs.readFileSync(options.dataFile, "utf8");',
480
- " } else if (options.data !== undefined) {",
481
- " dataRaw = options.data;",
482
- " }",
483
- "",
484
- " let body;",
485
- ' if (dataRaw !== null && options.method.toUpperCase() !== "GET" && options.method.toUpperCase() !== "HEAD") {',
486
- " try {",
487
- " const parsed = JSON.parse(dataRaw);",
488
- " body = JSON.stringify(parsed);",
489
- ' if (!headers["Content-Type"]) headers["Content-Type"] = "application/json";',
490
- " } catch {",
491
- " body = String(dataRaw);",
492
- ' if (!headers["Content-Type"]) headers["Content-Type"] = "text/plain";',
493
- " }",
494
- " }",
495
- "",
496
- " let response;",
497
- " try {",
498
- " response = await fetchWithTimeout(url, {",
499
- " method: options.method.toUpperCase(),",
500
- " headers,",
501
- " body,",
502
- " }, options.timeout);",
503
- " } catch (error) {",
504
- ' console.error("request failed: " + (error && error.message ? error.message : String(error)));',
505
- " return 2;",
506
- " }",
507
- "",
508
- " const text = await response.text();",
509
- " if (options.noPretty) {",
510
- " console.log(text);",
511
- " return 0;",
512
- " }",
513
- " try {",
514
- " const payload = JSON.parse(text);",
515
- " console.log(JSON.stringify(payload, null, 2));",
516
- " } catch {",
517
- " console.log(text);",
518
- " }",
519
- " return 0;",
520
- "}",
521
- "",
522
- "main().then((code) => {",
523
- " process.exitCode = code;",
524
- "});",
525
- "",
526
- ].join("\n");
15
+ const SKILL_TEMPLATE_DIR = "skill-template";
16
+ const SKILL_TEMPLATE_FILE = "SKILL.md";
17
+ function detectPackageManager() {
18
+ const userAgent = process.env.npm_config_user_agent || "";
19
+ if (userAgent.includes("pnpm"))
20
+ return "pnpm";
21
+ if (userAgent.includes("yarn"))
22
+ return "yarn";
23
+ if (userAgent.includes("npm"))
24
+ return "npm";
25
+ const execPath = process.env.npm_execpath || "";
26
+ if (execPath.includes("pnpm"))
27
+ return "pnpm";
28
+ if (execPath.includes("yarn"))
29
+ return "yarn";
30
+ if (execPath.includes("npm"))
31
+ return "npm";
32
+ return "unknown";
33
+ }
34
+ function resolvePackageRoot(startDir) {
35
+ let current = path_1.default.resolve(startDir);
36
+ const { root } = path_1.default.parse(current);
37
+ while (true) {
38
+ const candidate = path_1.default.join(current, "package.json");
39
+ if (fs_1.default.existsSync(candidate)) {
40
+ let pkgName;
41
+ try {
42
+ const pkg = JSON.parse(fs_1.default.readFileSync(candidate, "utf8"));
43
+ pkgName = pkg.name;
44
+ }
45
+ catch {
46
+ pkgName = undefined;
47
+ }
48
+ if (pkgName === "@leeguoo/yapi-mcp")
49
+ return current;
50
+ }
51
+ if (current === root)
52
+ break;
53
+ current = path_1.default.dirname(current);
54
+ }
55
+ return path_1.default.resolve(__dirname, "..", "..");
56
+ }
527
57
  function parseSimpleToml(text) {
528
58
  const data = {};
529
59
  for (const rawLine of text.split(/\r?\n/)) {
@@ -564,19 +94,6 @@ function formatToml(config) {
564
94
  }
565
95
  return `${lines.join("\n")}\n`;
566
96
  }
567
- function writeFileIfNeeded(filePath, contents, force) {
568
- if (!force && fs_1.default.existsSync(filePath))
569
- return false;
570
- fs_1.default.writeFileSync(filePath, contents, "utf8");
571
- return true;
572
- }
573
- function ensureExecutable(filePath) {
574
- try {
575
- fs_1.default.chmodSync(filePath, 0o755);
576
- }
577
- catch {
578
- }
579
- }
580
97
  function ensurePrivate(filePath) {
581
98
  try {
582
99
  fs_1.default.chmodSync(filePath, 0o600);
@@ -728,6 +245,13 @@ async function runInstallSkill(rawArgs) {
728
245
  }
729
246
  }
730
247
  merged.password = password;
248
+ const packageRoot = resolvePackageRoot(__dirname);
249
+ const templatePath = path_1.default.join(packageRoot, SKILL_TEMPLATE_DIR, SKILL_TEMPLATE_FILE);
250
+ if (!fs_1.default.existsSync(templatePath)) {
251
+ const manager = detectPackageManager();
252
+ throw new Error(`Missing skill template: ${templatePath} (package root: ${packageRoot}, manager: ${manager})`);
253
+ }
254
+ const skillTemplate = fs_1.default.readFileSync(templatePath, "utf8");
731
255
  const installedRoots = [];
732
256
  const configPaths = [];
733
257
  fs_1.default.mkdirSync(yapiHome, { recursive: true });
@@ -735,15 +259,13 @@ async function runInstallSkill(rawArgs) {
735
259
  ensurePrivate(globalConfigPath);
736
260
  configPaths.push(globalConfigPath);
737
261
  for (const target of uniqueTargets) {
738
- const scriptsDir = path_1.default.join(target.root, "scripts");
262
+ if (fs_1.default.existsSync(target.root)) {
263
+ fs_1.default.rmSync(target.root, { recursive: true, force: true });
264
+ }
265
+ fs_1.default.mkdirSync(target.root, { recursive: true });
739
266
  const configPath = path_1.default.join(target.root, "config.toml");
740
267
  const skillPath = path_1.default.join(target.root, "SKILL.md");
741
- const scriptPath = path_1.default.join(scriptsDir, "yapi_request.js");
742
- fs_1.default.mkdirSync(scriptsDir, { recursive: true });
743
- writeFileIfNeeded(skillPath, SKILL_MD, argv.force ?? false);
744
- const scriptWritten = writeFileIfNeeded(scriptPath, REQUEST_SCRIPT, argv.force ?? false);
745
- if (scriptWritten)
746
- ensureExecutable(scriptPath);
268
+ fs_1.default.writeFileSync(skillPath, skillTemplate, "utf8");
747
269
  fs_1.default.writeFileSync(configPath, formatToml(merged), "utf8");
748
270
  ensurePrivate(configPath);
749
271
  installedRoots.push(`${target.label}: ${target.root}`);
@@ -1 +1 @@
1
- {"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/skill/install.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/skill/install.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@leeguoo/yapi-mcp",
3
- "version": "0.3.10",
3
+ "version": "0.3.11",
4
4
  "description": "YApi Auto MCP Server - Model Context Protocol server for YApi integration, enables AI tools like Cursor to interact with YApi API documentation",
5
5
  "main": "dist/index.js",
6
6
  "bin": {
@@ -10,7 +10,8 @@
10
10
  },
11
11
  "files": [
12
12
  "dist",
13
- "README.md"
13
+ "README.md",
14
+ "skill-template"
14
15
  ],
15
16
  "scripts": {
16
17
  "build": "tsc && tsc-alias",
@@ -0,0 +1,35 @@
1
+ ---
2
+ name: yapi
3
+ description: Query and sync YApi interface documentation. Use when user mentions "yapi 接口文档", YAPI docs, asks for request/response details, or needs docs sync.
4
+ ---
5
+
6
+ # YApi interface docs
7
+
8
+ ## Workflow
9
+ 1. Load config from `~/.yapi/config.toml` (base_url, auth_mode, email/password or token, optional project_id).
10
+ 2. Identify the target interface by id or keyword; ask for project/category ids if needed.
11
+ 3. Call YApi endpoints with the CLI (see examples below) to fetch raw JSON.
12
+ 4. Summarize method, path, headers, query/body schema, response schema, and examples.
13
+
14
+ ## CLI
15
+ - Install & run: `npx -y @leeguoo/yapi-mcp yapi -h` (or install globally and use `yapi`).
16
+ - Use the same config as the skill: `~/.yapi/config.toml`.
17
+ - Examples:
18
+ - `yapi --path /api/interface/get --query id=123`
19
+ - `yapi search --q keyword`
20
+ - `yapi whoami`
21
+
22
+ ## Docs sync
23
+ - Bind local docs to YApi category with `yapi docs-sync bind add --name <binding> --dir <path> --project-id <id> --catid <id>` (stored in `.yapi/docs-sync.json`).
24
+ - Sync with `yapi docs-sync --binding <binding>` or run all bindings with `yapi docs-sync`.
25
+ - Default syncs only changed files; use `--force` to sync everything.
26
+ - Mermaid rendering depends on `mmdc` (auto-installed if possible; failures do not block sync).
27
+ - For full Markdown render, install `pandoc` (manual install required).
28
+ - Extra mappings (generated after docs-sync run in binding mode):
29
+ - `.yapi/docs-sync.links.json`: local docs to YApi doc URLs.
30
+ - `.yapi/docs-sync.projects.json`: cached project metadata/envs.
31
+ - `.yapi/docs-sync.deployments.json`: local docs to deployed URLs.
32
+
33
+ ## Interface creation tips
34
+ - When adding interfaces, always set `req_body_type` (use `json` if unsure) and provide `res_body` (prefer JSON Schema). Empty values can make `/api/interface/add` fail.
35
+ - Keep request/response structures in `req_*` / `res_body` instead of stuffing them into `desc` or `markdown`.