Skip to content

Commit 434cd67

Browse files
committed
feat: add build script for MCP bundling and copy API documentation
1 parent 8266408 commit 434cd67

2 files changed

Lines changed: 61 additions & 1 deletion

File tree

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
"coverage": "nyc report --report-dir",
3030
"lint": "eslint -c eslint.config.mjs ./**/*.ts",
3131
"config-schema": "typescript-json-schema packages/core/types/Config.ts Config -o packages/core/config/Config.schema.json",
32-
"build:mcp-bundle": "node scripts/bundle-mcp.js"
32+
"build:mcp-bundle": "node ./node_modules/typescript/lib/tsc.js --project tsconfig-bundle-mcp.json && node scripts/bundle-mcp.js"
3333
},
3434
"nyc": {
3535
"extension": [

scripts/bundle-mcp.ts

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
import { cpSync, mkdirSync, existsSync, writeFileSync } from "fs";
2+
import { resolve, join, extname } from "path";
3+
4+
const mcpRoot = resolve(__dirname, "..", "packages", "igniteui-mcp", "igniteui-doc-mcp");
5+
const dest = resolve(__dirname, "..", "packages", "cli", "mcp");
6+
7+
// Copy compiled server (dist/) — only .js, .d.ts, and .db files
8+
const distSrc = join(mcpRoot, "dist");
9+
const distDest = join(dest, "dist");
10+
11+
if (!existsSync(distSrc)) {
12+
console.error(`MCP dist/ not found at ${distSrc}. Build the MCP server first:`);
13+
console.error(" cd packages/igniteui-mcp/igniteui-doc-mcp && npm run build");
14+
process.exit(1);
15+
}
16+
17+
mkdirSync(distDest, { recursive: true });
18+
cpSync(distSrc, distDest, {
19+
recursive: true,
20+
filter: (source) => {
21+
// Exclude intermediate processing artifacts
22+
if (source.includes("docs_processing") ||
23+
source.includes("docs_prepeared") ||
24+
source.includes("docs_final") ||
25+
source.includes("diff-manifest")) {
26+
return false;
27+
}
28+
// Allow directories (needed for recursive copy)
29+
const ext = extname(source);
30+
if (!ext) return true;
31+
// Only include .js, .d.ts, and .db files
32+
return source.endsWith(".d.ts") || ext === ".js" || ext === ".db";
33+
}
34+
});
35+
console.log(" Copied dist/ (compiled MCP server + SQLite DB)");
36+
37+
// Ensure ESM module resolution works inside the CJS CLI package
38+
writeFileSync(join(distDest, "package.json"), JSON.stringify({ type: "module" }, null, 2) + "\n");
39+
console.log(" Created dist/package.json (ESM marker)");
40+
41+
// Copy API documentation (docs/) for get_api_reference and search_api tools
42+
const docsToCopy = [
43+
{ src: "docs/angular/api", label: "Angular API docs" },
44+
{ src: "docs/react", label: "React API docs" },
45+
{ src: "docs/webcomponents/api", label: "Web Components API docs" },
46+
];
47+
48+
for (const doc of docsToCopy) {
49+
const docSrc = join(mcpRoot, doc.src);
50+
const docDest = join(dest, doc.src);
51+
if (existsSync(docSrc)) {
52+
mkdirSync(docDest, { recursive: true });
53+
cpSync(docSrc, docDest, { recursive: true });
54+
console.log(` Copied ${doc.src} (${doc.label})`);
55+
} else {
56+
console.warn(` ⚠ Skipped ${doc.src} — not found (${doc.label})`);
57+
}
58+
}
59+
60+
console.log("\nBundled MCP server into packages/cli/mcp/");

0 commit comments

Comments
 (0)