@songsss1/apifox-html-mcp 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/server.js ADDED
@@ -0,0 +1,82 @@
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 * as z from "zod";
5
+ import { collectApiPagesFromEntry, listApisFromSharedDocEntry, renderApifoxHtmlTypesFile, } from "./src/apifoxHtmlToTs.js";
6
+ const mcpServer = new McpServer({
7
+ name: "apifox-html-mcp",
8
+ version: "2.0.0",
9
+ }, {
10
+ capabilities: { tools: {} },
11
+ });
12
+ const entryList = z
13
+ .string()
14
+ .describe("共享文档入口页 URL(如 apifox.com 分享链接)或本机 HTML 文件路径;若为单页详情且无侧边链接,会返回该入口自身作为唯一 docUrl")
15
+ .refine((s) => s.trim().length > 0, { message: "参数错误: entry 必须是非空字符串" });
16
+ const entryExport = z
17
+ .string()
18
+ .describe("同上:入口 URL 或本地 .html;单接口详情页也可(无列表链接时按单页解析)")
19
+ .refine((s) => s.trim().length > 0, { message: "参数错误: entry 必须是非空字符串" });
20
+ function toolError(message) {
21
+ return {
22
+ content: [{ type: "text", text: `Error: ${message}` }],
23
+ isError: true,
24
+ };
25
+ }
26
+ mcpServer.registerTool("list_shared_doc_apis", {
27
+ description: "从 Apifox「在线分享」文档入口页(HTTPS URL 或本地保存的 .html 路径)解析出各接口详情页链接。无需 Apifox Open API Token。",
28
+ inputSchema: { entry: entryList },
29
+ }, async ({ entry }) => {
30
+ try {
31
+ const list = await listApisFromSharedDocEntry(entry);
32
+ return {
33
+ content: [{ type: "text", text: JSON.stringify(list, null, 2) }],
34
+ };
35
+ }
36
+ catch (error) {
37
+ const message = error instanceof Error ? error.message : "未知错误";
38
+ return toolError(message);
39
+ }
40
+ });
41
+ mcpServer.registerTool("export_apifox_html_types", {
42
+ description: "根据共享文档入口(或单页 HTML)抓取并解析接口,生成 TypeScript:`export type` + `apiTypeMap`(method/path → request、response 类型名字符串)。",
43
+ inputSchema: {
44
+ entry: entryExport,
45
+ includeJsonSummary: z
46
+ .boolean()
47
+ .optional()
48
+ .describe("为 true 时额外返回解析摘要 JSON(成功数、失败 URL 等),默认 false"),
49
+ },
50
+ }, async ({ entry, includeJsonSummary }) => {
51
+ try {
52
+ const includeSummary = includeJsonSummary === true;
53
+ const apiResults = await collectApiPagesFromEntry(entry);
54
+ const ts = renderApifoxHtmlTypesFile(apiResults);
55
+ const parts = [ts];
56
+ if (includeSummary) {
57
+ const ok = apiResults.filter((x) => !x.error).length;
58
+ const fail = apiResults.filter((x) => x.error).length;
59
+ parts.push("\n\n---\n" +
60
+ JSON.stringify({
61
+ entry,
62
+ okCount: ok,
63
+ errorCount: fail,
64
+ errors: apiResults.filter((x) => x.error).map((x) => ({ url: x.url, error: x.error })),
65
+ }, null, 2));
66
+ }
67
+ return { content: [{ type: "text", text: parts.join("") }] };
68
+ }
69
+ catch (error) {
70
+ const message = error instanceof Error ? error.message : "未知错误";
71
+ return toolError(message);
72
+ }
73
+ });
74
+ async function main() {
75
+ const transport = new StdioServerTransport();
76
+ await mcpServer.connect(transport);
77
+ }
78
+ main().catch((err) => {
79
+ console.error(err);
80
+ process.exit(1);
81
+ });
82
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,584 @@
1
+ /**
2
+ * 自 parse-apifox/tools/apifox-html-to-ts.mjs 移植:从 Apifox 在线共享文档 HTML 解析接口与 Schema,生成 TypeScript。
3
+ */
4
+ import fs from "node:fs/promises";
5
+ // --- fetch / 入口 ---
6
+ export async function fetchText(url) {
7
+ const res = await fetch(url, { redirect: "follow" });
8
+ if (!res.ok)
9
+ throw new Error(`Fetch failed ${String(res.status)} ${res.statusText}: ${url}`);
10
+ return await res.text();
11
+ }
12
+ export function isProbablyUrl(input) {
13
+ if (!input)
14
+ return false;
15
+ try {
16
+ const u = new URL(input);
17
+ return u.protocol === "http:" || u.protocol === "https:";
18
+ }
19
+ catch {
20
+ return false;
21
+ }
22
+ }
23
+ export async function loadHtml(entry) {
24
+ return isProbablyUrl(entry) ? await fetchText(entry) : await fs.readFile(entry, "utf8");
25
+ }
26
+ // --- HTML / Remix ---
27
+ function extractHtmlTitle(html) {
28
+ const m = html.match(/<title>([\s\S]*?)<\/title>/i);
29
+ const inner = m?.[1];
30
+ return inner !== undefined ? inner.replace(/\s+/g, " ").trim() : null;
31
+ }
32
+ function extractRemixEnqueuePayload(html) {
33
+ const marker = "window.__remixContext.streamController.enqueue(";
34
+ const idx = html.indexOf(marker);
35
+ if (idx < 0)
36
+ return null;
37
+ const start = html.indexOf('"', idx);
38
+ if (start < 0)
39
+ return null;
40
+ let i = start + 1;
41
+ let escaped = false;
42
+ for (; i < html.length; i++) {
43
+ const ch = html[i];
44
+ if (escaped) {
45
+ escaped = false;
46
+ continue;
47
+ }
48
+ if (ch === "\\") {
49
+ escaped = true;
50
+ continue;
51
+ }
52
+ if (ch === '"')
53
+ break;
54
+ }
55
+ if (i >= html.length)
56
+ return null;
57
+ const jsStringLiteral = html.slice(start, i + 1);
58
+ return JSON.parse(jsStringLiteral);
59
+ }
60
+ function extractAllRemixEnqueuePayloads(html) {
61
+ const marker = "window.__remixContext.streamController.enqueue(";
62
+ const payloads = [];
63
+ let from = 0;
64
+ while (true) {
65
+ const idx = html.indexOf(marker, from);
66
+ if (idx < 0)
67
+ break;
68
+ const start = html.indexOf('"', idx);
69
+ if (start < 0)
70
+ break;
71
+ let i = start + 1;
72
+ let escaped = false;
73
+ for (; i < html.length; i++) {
74
+ const ch = html[i];
75
+ if (escaped) {
76
+ escaped = false;
77
+ continue;
78
+ }
79
+ if (ch === "\\") {
80
+ escaped = true;
81
+ continue;
82
+ }
83
+ if (ch === '"')
84
+ break;
85
+ }
86
+ if (i >= html.length)
87
+ break;
88
+ const jsStringLiteral = html.slice(start, i + 1);
89
+ payloads.push(JSON.parse(jsStringLiteral));
90
+ from = i + 1;
91
+ }
92
+ return payloads;
93
+ }
94
+ function parseRemixPayloadToApiBundle(enqueuePayloads) {
95
+ const payloadList = Array.isArray(enqueuePayloads)
96
+ ? enqueuePayloads
97
+ : enqueuePayloads
98
+ ? [enqueuePayloads]
99
+ : [];
100
+ if (!payloadList.length)
101
+ return null;
102
+ function unpackPackedRemixArray(packed) {
103
+ if (!Array.isArray(packed) || !packed.length)
104
+ return packed;
105
+ const cache = new Map();
106
+ function fromIndex(idx) {
107
+ if (typeof idx !== "number")
108
+ return idx;
109
+ if (idx === -5)
110
+ return null;
111
+ if (idx === -7)
112
+ return undefined;
113
+ if (idx < 0)
114
+ return undefined;
115
+ return resolve(packed[idx]);
116
+ }
117
+ function resolve(node) {
118
+ if (!node || typeof node !== "object")
119
+ return node;
120
+ if (cache.has(node))
121
+ return cache.get(node);
122
+ if (Array.isArray(node)) {
123
+ const outArr = [];
124
+ cache.set(node, outArr);
125
+ for (const v of node) {
126
+ if (typeof v === "number")
127
+ outArr.push(fromIndex(v));
128
+ else
129
+ outArr.push(resolve(v));
130
+ }
131
+ return outArr;
132
+ }
133
+ const outObj = {};
134
+ cache.set(node, outObj);
135
+ for (const [k, v] of Object.entries(node)) {
136
+ const m = k.match(/^_(\d+)$/);
137
+ if (!m)
138
+ continue;
139
+ const keyIdx = Number(m[1]);
140
+ const key = fromIndex(keyIdx);
141
+ if (typeof key !== "string")
142
+ continue;
143
+ outObj[key] = fromIndex(v);
144
+ }
145
+ return outObj;
146
+ }
147
+ return resolve(packed[0]);
148
+ }
149
+ function scanBundle(root) {
150
+ const seen = new Set();
151
+ let apiData = null;
152
+ let dataSchemaDefinitions = null;
153
+ function looksLikeApiDetail(x) {
154
+ return (Boolean(x) &&
155
+ typeof x === "object" &&
156
+ typeof x.method === "string" &&
157
+ typeof x.path === "string" &&
158
+ Boolean(x.requestBody ||
159
+ x.responses ||
160
+ x.parameters));
161
+ }
162
+ function walk(x) {
163
+ if (!x || typeof x !== "object")
164
+ return;
165
+ if (seen.has(x))
166
+ return;
167
+ seen.add(x);
168
+ if (!apiData && looksLikeApiDetail(x))
169
+ apiData = x;
170
+ if (!dataSchemaDefinitions &&
171
+ x.dataSchemaDefinitions &&
172
+ typeof x.dataSchemaDefinitions === "object") {
173
+ dataSchemaDefinitions = x.dataSchemaDefinitions;
174
+ }
175
+ if (x.resourceData && x.resourceData) {
176
+ const rd = x.resourceData;
177
+ if (rd.data && !apiData) {
178
+ const d = rd.data;
179
+ if (looksLikeApiDetail(d))
180
+ apiData = d;
181
+ }
182
+ }
183
+ for (const v of Array.isArray(x) ? x : Object.values(x))
184
+ walk(v);
185
+ }
186
+ walk(root);
187
+ return { apiData, dataSchemaDefinitions };
188
+ }
189
+ for (const payload of payloadList) {
190
+ if (!payload)
191
+ continue;
192
+ let arr;
193
+ try {
194
+ arr = JSON.parse(String(payload).trim());
195
+ }
196
+ catch {
197
+ continue;
198
+ }
199
+ const decoded = unpackPackedRemixArray(arr);
200
+ const bundle = scanBundle(decoded);
201
+ if (bundle.apiData)
202
+ return bundle;
203
+ }
204
+ return null;
205
+ }
206
+ export function extractApiBaseUrl(enqueuePayload) {
207
+ const m = enqueuePayload.match(/"apiBaseUrl","(https?:\/\/[^"]+)"/);
208
+ return m?.[1] ?? null;
209
+ }
210
+ export function extractApiDetailLinks(entryHtml, apiBaseUrl) {
211
+ const links = new Set();
212
+ const reA = /href="(\/apidoc\/shared\/[^"]+?\/\d+e0)"/g;
213
+ let m;
214
+ while ((m = reA.exec(entryHtml))) {
215
+ const href = m[1];
216
+ if (href)
217
+ links.add(new URL(href, apiBaseUrl).toString());
218
+ }
219
+ return Array.from(links).filter((u) => /\/\d+e0$/.test(u));
220
+ }
221
+ // --- Schema → TS(与 mjs 一致)---
222
+ function safeTypeName(name) {
223
+ const n = String(name ?? "")
224
+ .trim()
225
+ .replace(/^[^A-Za-z_]+/g, "")
226
+ .replace(/[^A-Za-z0-9_]/g, "_");
227
+ return n || "AnonymousType";
228
+ }
229
+ function refKeyFromRef(ref) {
230
+ const m = ref.match(/^#\/definitions\/(.+)$/);
231
+ const g = m?.[1];
232
+ return g !== undefined ? g : null;
233
+ }
234
+ function collectAllRefKeys(root, into) {
235
+ if (!root || typeof root !== "object")
236
+ return;
237
+ if (Array.isArray(root)) {
238
+ for (const x of root)
239
+ collectAllRefKeys(x, into);
240
+ return;
241
+ }
242
+ if (typeof root.$ref === "string") {
243
+ const k = refKeyFromRef(root.$ref);
244
+ if (k)
245
+ into.add(k);
246
+ }
247
+ for (const v of Object.values(root))
248
+ collectAllRefKeys(v, into);
249
+ }
250
+ function expandDefinitionClosure(definitions, seedKeys) {
251
+ const out = new Set(seedKeys);
252
+ const queue = [...seedKeys];
253
+ while (queue.length) {
254
+ const k = queue.pop();
255
+ if (k === undefined)
256
+ break;
257
+ const def = definitions[k];
258
+ if (!def)
259
+ continue;
260
+ const found = new Set();
261
+ collectAllRefKeys(def, found);
262
+ for (const nk of found) {
263
+ if (definitions[nk] && !out.has(nk)) {
264
+ out.add(nk);
265
+ queue.push(nk);
266
+ }
267
+ }
268
+ }
269
+ return out;
270
+ }
271
+ function buildTypeNameMappingForKeys(definitions, keys) {
272
+ const refToTypeName = new Map();
273
+ const used = new Set();
274
+ const sorted = Array.from(keys).sort((a, b) => {
275
+ const na = Number(a);
276
+ const nb = Number(b);
277
+ if (!Number.isNaN(na) && !Number.isNaN(nb) && String(na) === String(a) && String(nb) === String(b)) {
278
+ return na - nb;
279
+ }
280
+ return String(a).localeCompare(String(b));
281
+ });
282
+ for (const key of sorted) {
283
+ const def = definitions[key];
284
+ const preferred = def?.title ||
285
+ def?.name ||
286
+ def?.xName ||
287
+ def?.["x-apifox-name"] ||
288
+ def?.["x-apifox-model-name"];
289
+ let typeName = safeTypeName(preferred || `Def_${key}`);
290
+ while (used.has(typeName))
291
+ typeName = `${typeName}_${key}`;
292
+ used.add(typeName);
293
+ refToTypeName.set(String(key), typeName);
294
+ }
295
+ return { refToTypeName };
296
+ }
297
+ function makeSchemaTypeCtx(refToTypeName) {
298
+ return { refToTypeName };
299
+ }
300
+ function jsonSchemaTypeToTs(schema, ctx) {
301
+ if (!schema || typeof schema !== "object")
302
+ return "any";
303
+ const s = schema;
304
+ if (typeof s.$ref === "string") {
305
+ const key = refKeyFromRef(s.$ref);
306
+ if (!key)
307
+ return "unknown";
308
+ return ctx.refToTypeName.get(key) || "unknown";
309
+ }
310
+ const t = s.type;
311
+ if (Array.isArray(t)) {
312
+ return t.map((x) => jsonSchemaTypeToTs({ ...s, type: x }, ctx)).join(" | ");
313
+ }
314
+ if (s.oneOf || s.anyOf) {
315
+ const arr = (s.oneOf || s.anyOf);
316
+ if (Array.isArray(arr) && arr.length) {
317
+ return arr.map((x) => jsonSchemaTypeToTs(x, ctx)).join(" | ");
318
+ }
319
+ }
320
+ if (s.allOf && Array.isArray(s.allOf) && s.allOf.length) {
321
+ return s.allOf.map((x) => jsonSchemaTypeToTs(x, ctx)).join(" & ");
322
+ }
323
+ switch (t) {
324
+ case "string":
325
+ return "string";
326
+ case "integer":
327
+ case "number":
328
+ return "number";
329
+ case "boolean":
330
+ return "boolean";
331
+ case "null":
332
+ return "null";
333
+ case "array": {
334
+ const itemTs = jsonSchemaTypeToTs(s.items || {}, ctx);
335
+ return `Array<${itemTs}>`;
336
+ }
337
+ case "object":
338
+ default: {
339
+ const props = s.properties && typeof s.properties === "object" ? s.properties : null;
340
+ if (!props) {
341
+ if (s.additionalProperties && typeof s.additionalProperties === "object") {
342
+ const vTs = jsonSchemaTypeToTs(s.additionalProperties, ctx);
343
+ return `Record<string, ${vTs}>`;
344
+ }
345
+ if (s.additionalProperties === true)
346
+ return "Record<string, unknown>";
347
+ return "unknown";
348
+ }
349
+ const required = new Set(Array.isArray(s.required) ? s.required : []);
350
+ const lines = [];
351
+ for (const [propName, propSchema] of Object.entries(props)) {
352
+ const optional = required.size ? !required.has(propName) : true;
353
+ const ts = jsonSchemaTypeToTs(propSchema, ctx);
354
+ const safeProp = /^[A-Za-z_$][A-Za-z0-9_$]*$/.test(propName) ? propName : JSON.stringify(propName);
355
+ const desc = propSchema &&
356
+ typeof propSchema === "object" &&
357
+ typeof propSchema.description === "string"
358
+ ? propSchema.description.trim()
359
+ : "";
360
+ if (desc)
361
+ lines.push(`/** ${desc.replace(/\*\//g, "*\\/")} */`);
362
+ lines.push(`${safeProp}${optional ? "?" : ""}: ${ts};`);
363
+ }
364
+ if (!lines.length)
365
+ return "unknown";
366
+ return `{\n${lines.map((l) => " " + l).join("\n")}\n}`;
367
+ }
368
+ }
369
+ }
370
+ function schemaRootToTs(schema, ctx) {
371
+ if (!schema || typeof schema !== "object")
372
+ return "{}";
373
+ const s = schema;
374
+ if (s.$ref) {
375
+ const key = refKeyFromRef(s.$ref);
376
+ if (!key)
377
+ return "unknown";
378
+ return ctx.refToTypeName.get(key) || "unknown";
379
+ }
380
+ return jsonSchemaTypeToTs(schema, ctx);
381
+ }
382
+ /** 供「接口 → 类型名」表:根为 $ref 时返回 export type 名;否则短字面量或 (inline) / - */
383
+ function primaryTypeLabel(schema, ctx) {
384
+ if (schema === undefined || schema === null)
385
+ return "-";
386
+ if (typeof schema !== "object")
387
+ return "-";
388
+ const s = schema;
389
+ if (typeof s.$ref === "string") {
390
+ const key = refKeyFromRef(s.$ref);
391
+ if (key) {
392
+ const n = ctx.refToTypeName.get(key);
393
+ if (n)
394
+ return n;
395
+ }
396
+ return "-";
397
+ }
398
+ const ts = schemaRootToTs(schema, ctx);
399
+ if (!ts || ts === "{}" || ts === "unknown")
400
+ return "-";
401
+ if (ts.includes("\n"))
402
+ return "(inline)";
403
+ if (ts.length > 64)
404
+ return "(inline)";
405
+ return ts;
406
+ }
407
+ function pickResJsonSchema(responses) {
408
+ const arr = Array.isArray(responses) ? responses : [];
409
+ const by2xx = arr.find((r) => {
410
+ const rec = r;
411
+ const code = String(rec.statusCode ?? rec.code ?? "");
412
+ return /^2\d\d$/.test(code);
413
+ }) ??
414
+ arr.find((r) => {
415
+ const sc = r.statusCode;
416
+ return typeof sc === "number" && sc >= 200 && sc < 300;
417
+ });
418
+ if (by2xx && by2xx.jsonSchema !== undefined) {
419
+ return by2xx.jsonSchema;
420
+ }
421
+ const fallback = arr.find((r) => r.jsonSchema);
422
+ return fallback ? fallback.jsonSchema : undefined;
423
+ }
424
+ function pickApiMeta(resourceData) {
425
+ if (!resourceData || typeof resourceData !== "object")
426
+ return null;
427
+ const extra = resourceData.extraData;
428
+ const dataSchemaDefinitions = resourceData.dataSchemaDefinitions ?? extra?.dataSchemaDefinitions;
429
+ const parameters = resourceData.parameters;
430
+ const requestBody = resourceData.requestBody;
431
+ const responses = resourceData.responses;
432
+ const base = {
433
+ id: resourceData.id,
434
+ name: resourceData.name,
435
+ method: resourceData.method,
436
+ path: resourceData.path,
437
+ };
438
+ if (parameters !== undefined)
439
+ base.parameters = parameters;
440
+ if (requestBody !== undefined)
441
+ base.requestBody = requestBody;
442
+ if (responses !== undefined)
443
+ base.responses = responses;
444
+ if (dataSchemaDefinitions !== undefined)
445
+ base.dataSchemaDefinitions = dataSchemaDefinitions;
446
+ return base;
447
+ }
448
+ function processOneApiHtml(html, url) {
449
+ const payloads = extractAllRemixEnqueuePayloads(html);
450
+ const bundle = parseRemixPayloadToApiBundle(payloads);
451
+ const apiData = bundle?.apiData || null;
452
+ const scannedDefs = bundle?.dataSchemaDefinitions || null;
453
+ const meta = pickApiMeta(apiData);
454
+ if (!meta) {
455
+ const title = extractHtmlTitle(html);
456
+ return {
457
+ url,
458
+ error: `未解析到接口详情(enqueueChunks=${String(payloads.length)}${title ? `, title=${JSON.stringify(title)}` : ""})`,
459
+ };
460
+ }
461
+ if (!meta.dataSchemaDefinitions && scannedDefs)
462
+ meta.dataSchemaDefinitions = scannedDefs;
463
+ return { url, meta };
464
+ }
465
+ /**
466
+ * 从共享文档入口页列出各接口详情页 URL(不逐个拉取详情)。
467
+ */
468
+ export async function listApisFromSharedDocEntry(entry) {
469
+ const entryHtml = await loadHtml(entry);
470
+ const entryPayload = extractRemixEnqueuePayload(entryHtml);
471
+ if (!entryPayload)
472
+ throw new Error("未找到 remix enqueue 数据(请确认页面为 Apifox 在线共享文档)");
473
+ const apiBaseUrl = extractApiBaseUrl(entryPayload);
474
+ if (!apiBaseUrl)
475
+ throw new Error("未解析到 apiBaseUrl");
476
+ const links = extractApiDetailLinks(entryHtml, apiBaseUrl);
477
+ if (!links.length) {
478
+ return [{ docUrl: entry }];
479
+ }
480
+ return links.map((docUrl) => ({ docUrl }));
481
+ }
482
+ /**
483
+ * 拉取入口页及全部接口详情(或单页 HTML),解析为结构化结果。
484
+ */
485
+ export async function collectApiPagesFromEntry(entry) {
486
+ const entryHtml = await loadHtml(entry);
487
+ const entryPayload = extractRemixEnqueuePayload(entryHtml);
488
+ if (!entryPayload)
489
+ throw new Error("未找到 remix enqueue 数据");
490
+ const apiBaseUrl = extractApiBaseUrl(entryPayload);
491
+ if (!apiBaseUrl)
492
+ throw new Error("未解析到 apiBaseUrl");
493
+ const links = extractApiDetailLinks(entryHtml, apiBaseUrl);
494
+ const results = [];
495
+ if (links.length > 0) {
496
+ for (const url of links) {
497
+ const html = await fetchText(url);
498
+ results.push(processOneApiHtml(html, url));
499
+ }
500
+ }
501
+ else {
502
+ results.push(processOneApiHtml(entryHtml, entry));
503
+ }
504
+ return results;
505
+ }
506
+ /** 生成 `export type` + 极简 `apiTypeMap`(method/path → request、response 类型名)。 */
507
+ export function renderApifoxHtmlTypesFile(apiResults) {
508
+ const globalDefs = {};
509
+ for (const item of apiResults) {
510
+ if (item.error)
511
+ continue;
512
+ Object.assign(globalDefs, item.meta?.dataSchemaDefinitions || {});
513
+ }
514
+ const seedKeys = new Set();
515
+ for (const item of apiResults) {
516
+ if (item.error)
517
+ continue;
518
+ const m = item.meta;
519
+ if (!m)
520
+ continue;
521
+ collectAllRefKeys(m.requestBody?.jsonSchema, seedKeys);
522
+ for (const r of m.responses || [])
523
+ collectAllRefKeys(r?.jsonSchema, seedKeys);
524
+ }
525
+ const seedsInDefs = [...seedKeys].filter((k) => globalDefs[k]);
526
+ const closure = expandDefinitionClosure(globalDefs, new Set(seedsInDefs));
527
+ const { refToTypeName } = buildTypeNameMappingForKeys(globalDefs, closure);
528
+ const ctx = makeSchemaTypeCtx(refToTypeName);
529
+ const orderedKeys = Array.from(closure).sort((a, b) => {
530
+ const na = Number(a);
531
+ const nb = Number(b);
532
+ if (!Number.isNaN(na) && !Number.isNaN(nb) && String(na) === String(a) && String(nb) === String(b)) {
533
+ return na - nb;
534
+ }
535
+ return String(a).localeCompare(String(b));
536
+ });
537
+ const typeBlocks = [];
538
+ for (const key of orderedKeys) {
539
+ const def = globalDefs[key];
540
+ if (!def)
541
+ continue;
542
+ const typeName = refToTypeName.get(key);
543
+ if (!typeName)
544
+ continue;
545
+ typeBlocks.push(`export type ${typeName} = ${jsonSchemaTypeToTs(def, ctx)};`);
546
+ }
547
+ const pieces = [];
548
+ pieces.push(typeBlocks.join("\n\n"));
549
+ const ok = apiResults.filter((x) => !x.error && x.meta);
550
+ if (ok.length) {
551
+ if (typeBlocks.length)
552
+ pieces.push("");
553
+ pieces.push(`export type ApiTypeMapRow = {
554
+ method: string;
555
+ path: string;
556
+ name: string;
557
+ request: string;
558
+ response: string;
559
+ };`);
560
+ pieces.push("");
561
+ pieces.push("export const apiTypeMap = [");
562
+ for (const item of ok) {
563
+ const m = item.meta;
564
+ const method = String(m.method || "").toUpperCase();
565
+ const pathStr = String(m.path || "");
566
+ const nm = String(m.name || "").replace(/\s+/g, " ").trim();
567
+ const request = primaryTypeLabel(m.requestBody?.jsonSchema, ctx);
568
+ const response = primaryTypeLabel(pickResJsonSchema(m.responses), ctx);
569
+ pieces.push(` { method: ${JSON.stringify(method)}, path: ${JSON.stringify(pathStr)}, name: ${JSON.stringify(nm)}, request: ${JSON.stringify(request)}, response: ${JSON.stringify(response)} },`);
570
+ }
571
+ pieces.push("] as const satisfies readonly ApiTypeMapRow[];");
572
+ }
573
+ const errors = apiResults.filter((x) => x.error);
574
+ if (errors.length) {
575
+ pieces.push("");
576
+ pieces.push(`// ${String(errors.length)} page(s) failed: ${errors.map((e) => e.url).join(", ")}`);
577
+ }
578
+ return pieces.join("\n");
579
+ }
580
+ export async function generateTypesFromSharedDocEntry(entry) {
581
+ const apiResults = await collectApiPagesFromEntry(entry);
582
+ return renderApifoxHtmlTypesFile(apiResults);
583
+ }
584
+ //# sourceMappingURL=apifoxHtmlToTs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apifoxHtmlToTs.js","sourceRoot":"","sources":["../../src/apifoxHtmlToTs.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,32 @@
1
+ {
2
+ "name": "@songsss1/apifox-html-mcp",
3
+ "version": "1.0.0",
4
+ "description": "",
5
+ "main": "dist/server.ts",
6
+ "type": "module",
7
+ "bin": {
8
+ "apifox-html-mcp": "./dist/server.js"
9
+ },
10
+ "files": ["dist", "README.md"],
11
+ "scripts": {
12
+ "dev": "tsx server.ts",
13
+ "typecheck": "tsc --noEmit",
14
+ "build": "tsc",
15
+ "start": "node dist/server.js"
16
+ },
17
+ "publishConfig": {
18
+ "access": "public"
19
+ },
20
+ "keywords": [],
21
+ "author": "songsss1",
22
+ "license": "ISC",
23
+ "dependencies": {
24
+ "@modelcontextprotocol/sdk": "^1.29.0",
25
+ "zod": "^4.0.0"
26
+ },
27
+ "devDependencies": {
28
+ "@types/node": "^25.5.0",
29
+ "tsx": "^4.21.0",
30
+ "typescript": "^6.0.2"
31
+ }
32
+ }