@hellocrossman/mcp-sdk 0.1.2 → 0.3.1

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 (76) hide show
  1. package/README.md +99 -28
  2. package/dist/cjs/cli.d.ts +3 -0
  3. package/dist/cjs/cli.d.ts.map +1 -0
  4. package/dist/cjs/cli.js +610 -0
  5. package/dist/cjs/cli.js.map +1 -0
  6. package/dist/cjs/db-executor.d.ts +4 -0
  7. package/dist/cjs/db-executor.d.ts.map +1 -0
  8. package/dist/cjs/db-executor.js +152 -0
  9. package/dist/cjs/db-executor.js.map +1 -0
  10. package/dist/cjs/db-introspect.d.ts +18 -0
  11. package/dist/cjs/db-introspect.d.ts.map +1 -0
  12. package/dist/cjs/db-introspect.js +145 -0
  13. package/dist/cjs/db-introspect.js.map +1 -0
  14. package/dist/cjs/db-tool-generator.d.ts +9 -0
  15. package/dist/cjs/db-tool-generator.d.ts.map +1 -0
  16. package/dist/cjs/db-tool-generator.js +167 -0
  17. package/dist/cjs/db-tool-generator.js.map +1 -0
  18. package/dist/cjs/enrichment.d.ts +13 -0
  19. package/dist/cjs/enrichment.d.ts.map +1 -0
  20. package/dist/cjs/enrichment.js +36 -0
  21. package/dist/cjs/enrichment.js.map +1 -0
  22. package/dist/cjs/index.d.ts +2 -0
  23. package/dist/cjs/index.d.ts.map +1 -1
  24. package/dist/cjs/index.js +4 -1
  25. package/dist/cjs/index.js.map +1 -1
  26. package/dist/cjs/introspect.d.ts.map +1 -1
  27. package/dist/cjs/introspect.js +10 -4
  28. package/dist/cjs/introspect.js.map +1 -1
  29. package/dist/cjs/route-scan.d.ts +9 -0
  30. package/dist/cjs/route-scan.d.ts.map +1 -0
  31. package/dist/cjs/route-scan.js +140 -0
  32. package/dist/cjs/route-scan.js.map +1 -0
  33. package/dist/cjs/server.d.ts +1 -0
  34. package/dist/cjs/server.d.ts.map +1 -1
  35. package/dist/cjs/server.js +113 -15
  36. package/dist/cjs/server.js.map +1 -1
  37. package/dist/cjs/types.d.ts +6 -0
  38. package/dist/cjs/types.d.ts.map +1 -1
  39. package/dist/cli.d.ts +3 -0
  40. package/dist/cli.d.ts.map +1 -0
  41. package/dist/cli.js +582 -0
  42. package/dist/cli.js.map +1 -0
  43. package/dist/db-executor.d.ts +4 -0
  44. package/dist/db-executor.d.ts.map +1 -0
  45. package/dist/db-executor.js +125 -0
  46. package/dist/db-executor.js.map +1 -0
  47. package/dist/db-introspect.d.ts +18 -0
  48. package/dist/db-introspect.d.ts.map +1 -0
  49. package/dist/db-introspect.js +118 -0
  50. package/dist/db-introspect.js.map +1 -0
  51. package/dist/db-tool-generator.d.ts +9 -0
  52. package/dist/db-tool-generator.d.ts.map +1 -0
  53. package/dist/db-tool-generator.js +163 -0
  54. package/dist/db-tool-generator.js.map +1 -0
  55. package/dist/enrichment.d.ts +13 -0
  56. package/dist/enrichment.d.ts.map +1 -0
  57. package/dist/enrichment.js +33 -0
  58. package/dist/enrichment.js.map +1 -0
  59. package/dist/index.d.ts +2 -0
  60. package/dist/index.d.ts.map +1 -1
  61. package/dist/index.js +1 -0
  62. package/dist/index.js.map +1 -1
  63. package/dist/introspect.d.ts.map +1 -1
  64. package/dist/introspect.js +10 -4
  65. package/dist/introspect.js.map +1 -1
  66. package/dist/route-scan.d.ts +9 -0
  67. package/dist/route-scan.d.ts.map +1 -0
  68. package/dist/route-scan.js +133 -0
  69. package/dist/route-scan.js.map +1 -0
  70. package/dist/server.d.ts +1 -0
  71. package/dist/server.d.ts.map +1 -1
  72. package/dist/server.js +113 -15
  73. package/dist/server.js.map +1 -1
  74. package/dist/types.d.ts +6 -0
  75. package/dist/types.d.ts.map +1 -1
  76. package/package.json +13 -3
@@ -0,0 +1,610 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4
+ if (k2 === undefined) k2 = k;
5
+ var desc = Object.getOwnPropertyDescriptor(m, k);
6
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
7
+ desc = { enumerable: true, get: function() { return m[k]; } };
8
+ }
9
+ Object.defineProperty(o, k2, desc);
10
+ }) : (function(o, m, k, k2) {
11
+ if (k2 === undefined) k2 = k;
12
+ o[k2] = m[k];
13
+ }));
14
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
15
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
16
+ }) : function(o, v) {
17
+ o["default"] = v;
18
+ });
19
+ var __importStar = (this && this.__importStar) || function (mod) {
20
+ if (mod && mod.__esModule) return mod;
21
+ var result = {};
22
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
23
+ __setModuleDefault(result, mod);
24
+ return result;
25
+ };
26
+ var __importDefault = (this && this.__importDefault) || function (mod) {
27
+ return (mod && mod.__esModule) ? mod : { "default": mod };
28
+ };
29
+ Object.defineProperty(exports, "__esModule", { value: true });
30
+ const fs_1 = __importDefault(require("fs"));
31
+ const path_1 = __importDefault(require("path"));
32
+ const readline_1 = __importDefault(require("readline"));
33
+ const route_scan_js_1 = require("./route-scan.js");
34
+ const IMPORT_LINE_ESM = `import { createMcpServer } from '@hellocrossman/mcp-sdk';`;
35
+ const IMPORT_LINE_CJS = `const { createMcpServer } = require('@hellocrossman/mcp-sdk');`;
36
+ const COMMON_ENTRY_FILES = [
37
+ "server/index.ts",
38
+ "server/index.js",
39
+ "src/server.ts",
40
+ "src/server.js",
41
+ "src/index.ts",
42
+ "src/index.js",
43
+ "src/app.ts",
44
+ "src/app.js",
45
+ "server.ts",
46
+ "server.js",
47
+ "index.ts",
48
+ "index.js",
49
+ "app.ts",
50
+ "app.js",
51
+ ];
52
+ const EXPRESS_PATTERNS = [
53
+ /express\(\)/,
54
+ /require\(['"]express['"]\)/,
55
+ /from\s+['"]express['"]/,
56
+ /import\s+express/,
57
+ ];
58
+ const APP_VAR_PATTERN = /(?:const|let|var)\s+(\w+)\s*=\s*express\(\)/;
59
+ const LISTEN_PATTERN = /(?:app|server|httpServer)\s*\.listen\s*\(/;
60
+ const COLORS = {
61
+ reset: "\x1b[0m",
62
+ bold: "\x1b[1m",
63
+ dim: "\x1b[2m",
64
+ green: "\x1b[32m",
65
+ yellow: "\x1b[33m",
66
+ blue: "\x1b[34m",
67
+ magenta: "\x1b[35m",
68
+ cyan: "\x1b[36m",
69
+ white: "\x1b[37m",
70
+ gray: "\x1b[90m",
71
+ bgGreen: "\x1b[42m",
72
+ bgYellow: "\x1b[43m",
73
+ };
74
+ function c(color, text) {
75
+ return `${COLORS[color]}${text}${COLORS.reset}`;
76
+ }
77
+ function createPrompt() {
78
+ const rl = readline_1.default.createInterface({
79
+ input: process.stdin,
80
+ output: process.stdout,
81
+ });
82
+ return {
83
+ ask: (question) => new Promise((resolve) => {
84
+ rl.question(question, (answer) => resolve(answer.trim()));
85
+ }),
86
+ confirm: async (question, defaultYes = true) => {
87
+ const hint = defaultYes ? "Y/n" : "y/N";
88
+ const answer = await new Promise((resolve) => {
89
+ rl.question(`${question} ${c("dim", `(${hint})`)} `, (a) => resolve(a.trim().toLowerCase()));
90
+ });
91
+ if (answer === "")
92
+ return defaultYes;
93
+ return answer === "y" || answer === "yes";
94
+ },
95
+ close: () => rl.close(),
96
+ };
97
+ }
98
+ function findProjectRoot() {
99
+ let dir = process.cwd();
100
+ while (dir !== path_1.default.dirname(dir)) {
101
+ if (fs_1.default.existsSync(path_1.default.join(dir, "package.json")))
102
+ return dir;
103
+ dir = path_1.default.dirname(dir);
104
+ }
105
+ return process.cwd();
106
+ }
107
+ function findExpressEntryFile(root) {
108
+ for (const file of COMMON_ENTRY_FILES) {
109
+ const fullPath = path_1.default.join(root, file);
110
+ if (fs_1.default.existsSync(fullPath)) {
111
+ const content = fs_1.default.readFileSync(fullPath, "utf-8");
112
+ if (EXPRESS_PATTERNS.some((p) => p.test(content)))
113
+ return fullPath;
114
+ }
115
+ }
116
+ const srcDirs = ["server", "src", "."];
117
+ for (const dir of srcDirs) {
118
+ const dirPath = path_1.default.join(root, dir);
119
+ if (!fs_1.default.existsSync(dirPath) || !fs_1.default.statSync(dirPath).isDirectory())
120
+ continue;
121
+ const files = fs_1.default.readdirSync(dirPath).filter((f) => /\.(ts|js|mjs)$/.test(f));
122
+ for (const file of files) {
123
+ const fullPath = path_1.default.join(dirPath, file);
124
+ const content = fs_1.default.readFileSync(fullPath, "utf-8");
125
+ if (EXPRESS_PATTERNS.some((p) => p.test(content)))
126
+ return fullPath;
127
+ }
128
+ }
129
+ return null;
130
+ }
131
+ function checkIsESM(filePath, root) {
132
+ if (filePath.endsWith(".ts") || filePath.endsWith(".mjs"))
133
+ return true;
134
+ try {
135
+ const pkg = JSON.parse(fs_1.default.readFileSync(path_1.default.join(root, "package.json"), "utf-8"));
136
+ return pkg.type === "module";
137
+ }
138
+ catch {
139
+ return false;
140
+ }
141
+ }
142
+ function alreadySetup(content) {
143
+ return content.includes("createMcpServer") || content.includes("@hellocrossman/mcp-sdk");
144
+ }
145
+ function checkPgInstalled(root) {
146
+ return fs_1.default.existsSync(path_1.default.join(root, "node_modules", "pg"));
147
+ }
148
+ function detectPackageManager(root) {
149
+ if (fs_1.default.existsSync(path_1.default.join(root, "pnpm-lock.yaml")))
150
+ return "pnpm";
151
+ if (fs_1.default.existsSync(path_1.default.join(root, "yarn.lock")))
152
+ return "yarn";
153
+ return "npm";
154
+ }
155
+ function printHeader() {
156
+ console.log();
157
+ console.log(` ${c("bold", "@hellocrossman/mcp-sdk")}`);
158
+ console.log(` ${c("dim", "Turn your Express API into an MCP server")}`);
159
+ console.log();
160
+ }
161
+ function printStep(step, total, title) {
162
+ console.log();
163
+ console.log(` ${c("cyan", `[${step}/${total}]`)} ${c("bold", title)}`);
164
+ console.log(` ${c("dim", "─".repeat(50))}`);
165
+ }
166
+ function printToolTable(tools) {
167
+ const routeTools = tools.filter((t) => t.source === "route");
168
+ const dbTools = tools.filter((t) => t.source === "database");
169
+ if (routeTools.length > 0) {
170
+ console.log(`\n ${c("dim", "API Routes:")}`);
171
+ for (const t of routeTools) {
172
+ const status = t.enabled ? c("green", "ON ") : c("dim", "OFF");
173
+ const method = t.method.padEnd(6);
174
+ console.log(` ${status} ${c("yellow", method)} ${t.name} ${c("dim", `- ${t.description}`)}`);
175
+ }
176
+ }
177
+ if (dbTools.length > 0) {
178
+ console.log(`\n ${c("dim", "Database Tables:")}`);
179
+ for (const t of dbTools) {
180
+ const status = t.enabled ? c("green", "ON ") : c("dim", "OFF");
181
+ const method = t.method.padEnd(6);
182
+ console.log(` ${status} ${c("magenta", method)} ${t.name} ${c("dim", `- ${t.description}`)}`);
183
+ }
184
+ }
185
+ }
186
+ async function stepDetectApp(state, prompt, specifiedFile) {
187
+ printStep(1, 5, "Detecting Express app");
188
+ let entryFile = null;
189
+ if (specifiedFile) {
190
+ const resolved = path_1.default.resolve(state.root, specifiedFile);
191
+ if (fs_1.default.existsSync(resolved)) {
192
+ entryFile = resolved;
193
+ }
194
+ else {
195
+ console.log(` ${c("yellow", "!")} File not found: ${specifiedFile}`);
196
+ return false;
197
+ }
198
+ }
199
+ else {
200
+ entryFile = findExpressEntryFile(state.root);
201
+ }
202
+ if (!entryFile) {
203
+ console.log(` ${c("yellow", "!")} Could not find an Express app file.`);
204
+ const custom = await prompt.ask(` Enter the path to your Express app file: `);
205
+ if (custom) {
206
+ const resolved = path_1.default.resolve(state.root, custom);
207
+ if (fs_1.default.existsSync(resolved)) {
208
+ entryFile = resolved;
209
+ }
210
+ else {
211
+ console.log(` ${c("yellow", "!")} File not found: ${custom}`);
212
+ return false;
213
+ }
214
+ }
215
+ else {
216
+ return false;
217
+ }
218
+ }
219
+ const content = fs_1.default.readFileSync(entryFile, "utf-8");
220
+ if (alreadySetup(content)) {
221
+ console.log(` ${c("green", "+")} MCP SDK is already set up in ${path_1.default.relative(state.root, entryFile)}`);
222
+ console.log(` ${c("dim", " Remove the existing createMcpServer() call to reconfigure.")}`);
223
+ return false;
224
+ }
225
+ const appMatch = content.match(APP_VAR_PATTERN);
226
+ state.entryFile = entryFile;
227
+ state.appVarName = appMatch ? appMatch[1] : "app";
228
+ state.isESM = checkIsESM(entryFile, state.root);
229
+ console.log(` ${c("green", "+")} Found Express app: ${c("bold", path_1.default.relative(state.root, entryFile))}`);
230
+ console.log(` ${c("dim", ` Variable: ${state.appVarName}, Module: ${state.isESM ? "ESM" : "CommonJS"}`)}`);
231
+ return true;
232
+ }
233
+ async function stepScanRoutes(state) {
234
+ printStep(2, 5, "Scanning API routes");
235
+ state.routes = (0, route_scan_js_1.scanAllRoutes)(state.entryFile, state.routePrefix);
236
+ if (state.routes.length === 0) {
237
+ console.log(` ${c("dim", " No routes found under")} ${state.routePrefix}`);
238
+ console.log(` ${c("dim", " Routes will be discovered at runtime when your app starts.")}`);
239
+ return;
240
+ }
241
+ console.log(` ${c("green", "+")} Found ${c("bold", String(state.routes.length))} API routes:\n`);
242
+ for (const route of state.routes) {
243
+ const method = route.method.padEnd(6);
244
+ console.log(` ${c("yellow", method)} ${route.path}`);
245
+ }
246
+ for (const route of state.routes) {
247
+ const name = generateToolName(route.method, route.path);
248
+ const description = generateToolDescription(route.method, route.path);
249
+ state.tools.push({
250
+ name,
251
+ description,
252
+ method: route.method,
253
+ path: route.path,
254
+ source: "route",
255
+ enabled: true,
256
+ });
257
+ }
258
+ }
259
+ async function stepScanDatabase(state, prompt) {
260
+ printStep(3, 5, "Database discovery");
261
+ const wantDb = await prompt.confirm(` Scan your database for tables to expose as tools?`);
262
+ if (!wantDb) {
263
+ state.databaseEnabled = false;
264
+ console.log(` ${c("dim", " Skipping database discovery.")}`);
265
+ return;
266
+ }
267
+ let dbUrl = process.env.DATABASE_URL || process.env.POSTGRES_URL || process.env.PG_CONNECTION_STRING;
268
+ if (!dbUrl) {
269
+ console.log(` ${c("yellow", "!")} No DATABASE_URL found in environment.`);
270
+ dbUrl = (await prompt.ask(` Enter your PostgreSQL connection string (or press Enter to skip): `)) || undefined;
271
+ if (!dbUrl) {
272
+ state.databaseEnabled = false;
273
+ console.log(` ${c("dim", " Skipping database discovery.")}`);
274
+ return;
275
+ }
276
+ }
277
+ if (!checkPgInstalled(state.root)) {
278
+ console.log(` ${c("yellow", "!")} The 'pg' package is required for database features.`);
279
+ const pm = detectPackageManager(state.root);
280
+ const installCmd = pm === "yarn" ? "yarn add pg" : pm === "pnpm" ? "pnpm add pg" : "npm install pg";
281
+ const installPg = await prompt.confirm(` Install pg now? (${c("dim", installCmd)})`);
282
+ if (installPg) {
283
+ console.log(` ${c("dim", ` Running ${installCmd}...`)}`);
284
+ const { execSync } = await Promise.resolve().then(() => __importStar(require("child_process")));
285
+ try {
286
+ execSync(installCmd, { cwd: state.root, stdio: "pipe" });
287
+ console.log(` ${c("green", "+")} pg installed successfully.`);
288
+ }
289
+ catch {
290
+ console.log(` ${c("yellow", "!")} Failed to install pg. Run '${installCmd}' manually.`);
291
+ state.databaseEnabled = false;
292
+ return;
293
+ }
294
+ }
295
+ else {
296
+ console.log(` ${c("dim", ` Run '${installCmd}' to enable database features later.`)}`);
297
+ state.databaseEnabled = false;
298
+ return;
299
+ }
300
+ }
301
+ try {
302
+ const { introspectDatabase } = await Promise.resolve().then(() => __importStar(require("./db-introspect.js")));
303
+ const { isSensitiveTable } = await Promise.resolve().then(() => __importStar(require("./db-tool-generator.js")));
304
+ console.log(` ${c("dim", " Connecting to database...")}`);
305
+ const result = await introspectDatabase(dbUrl);
306
+ const safeTables = result.tables.filter((t) => !isSensitiveTable(t.name));
307
+ const hiddenTables = result.tables.filter((t) => isSensitiveTable(t.name));
308
+ state.dbTables = safeTables;
309
+ state.databaseEnabled = true;
310
+ console.log(` ${c("green", "+")} Found ${c("bold", String(result.tables.length))} tables (${safeTables.length} safe, ${hiddenTables.length} hidden)\n`);
311
+ if (hiddenTables.length > 0) {
312
+ console.log(` ${c("dim", " Auto-hidden (sensitive):")} ${hiddenTables.map((t) => t.name).join(", ")}`);
313
+ }
314
+ console.log(`\n ${c("dim", " Available tables:")}`);
315
+ for (const table of safeTables) {
316
+ const colCount = table.columns.length;
317
+ const pk = table.columns.find((col) => col.isPrimary);
318
+ console.log(` ${c("magenta", table.name)} ${c("dim", `(${colCount} columns${pk ? `, pk: ${pk.name}` : ""})`)}`);
319
+ state.tools.push({
320
+ name: `list_${table.name}`,
321
+ description: `List all ${formatTableName(table.name)} records with filtering and pagination`,
322
+ method: "QUERY",
323
+ path: `db://${table.name}`,
324
+ source: "database",
325
+ enabled: true,
326
+ tableName: table.name,
327
+ });
328
+ if (pk) {
329
+ state.tools.push({
330
+ name: `get_${table.name}_by_${pk.name}`,
331
+ description: `Get a specific ${formatTableName(table.name)} record by ${pk.name}`,
332
+ method: "QUERY",
333
+ path: `db://${table.name}/${pk.name}`,
334
+ source: "database",
335
+ enabled: true,
336
+ tableName: table.name,
337
+ });
338
+ }
339
+ }
340
+ }
341
+ catch (err) {
342
+ const msg = err instanceof Error ? err.message : String(err);
343
+ console.log(` ${c("yellow", "!")} Database scan failed: ${msg}`);
344
+ state.databaseEnabled = false;
345
+ }
346
+ }
347
+ async function stepEnrichAndReview(state, prompt) {
348
+ printStep(4, 5, "AI enrichment & tool review");
349
+ if (state.tools.length === 0) {
350
+ console.log(` ${c("dim", " No tools discovered. Routes will be discovered at runtime.")}`);
351
+ state.enrichmentEnabled = true;
352
+ return;
353
+ }
354
+ const wantEnrich = await prompt.confirm(` Use AI to improve tool names and descriptions?`);
355
+ if (wantEnrich) {
356
+ console.log(` ${c("dim", " Contacting enrichment service...")}`);
357
+ try {
358
+ const { enrichTools } = await Promise.resolve().then(() => __importStar(require("./enrichment.js")));
359
+ const toolSummaries = state.tools.map((t) => ({
360
+ name: t.name,
361
+ description: t.description,
362
+ method: t.method === "QUERY" ? "DB_QUERY" : t.method,
363
+ path: t.path,
364
+ inputSchema: {},
365
+ params: [],
366
+ }));
367
+ const enriched = await enrichTools(toolSummaries);
368
+ let enrichCount = 0;
369
+ for (let i = 0; i < state.tools.length; i++) {
370
+ if (enriched[i]) {
371
+ if (enriched[i].name)
372
+ state.tools[i].name = enriched[i].name;
373
+ if (enriched[i].description)
374
+ state.tools[i].description = enriched[i].description;
375
+ enrichCount++;
376
+ }
377
+ }
378
+ console.log(` ${c("green", "+")} Enhanced ${enrichCount} tool descriptions.`);
379
+ state.enrichmentEnabled = true;
380
+ }
381
+ catch {
382
+ console.log(` ${c("yellow", "!")} Enrichment service unavailable. Using auto-generated names.`);
383
+ state.enrichmentEnabled = false;
384
+ }
385
+ }
386
+ else {
387
+ state.enrichmentEnabled = false;
388
+ }
389
+ console.log(`\n ${c("bold", "Discovered tools:")}`);
390
+ printToolTable(state.tools);
391
+ console.log();
392
+ const reviewMode = await prompt.ask(` Enable all tools, or review individually? ${c("dim", "(all/review)")} `);
393
+ if (reviewMode.toLowerCase() === "review" || reviewMode.toLowerCase() === "r") {
394
+ console.log();
395
+ for (let i = 0; i < state.tools.length; i++) {
396
+ const t = state.tools[i];
397
+ const source = t.source === "route" ? c("yellow", t.method) : c("magenta", "DB");
398
+ const enabled = await prompt.confirm(` ${source} ${c("bold", t.name)} ${c("dim", `- ${t.description}`)}\n Enable this tool?`);
399
+ state.tools[i].enabled = enabled;
400
+ }
401
+ const enabledCount = state.tools.filter((t) => t.enabled).length;
402
+ console.log(`\n ${c("green", "+")} ${enabledCount} of ${state.tools.length} tools enabled.`);
403
+ }
404
+ else {
405
+ console.log(` ${c("green", "+")} All ${state.tools.length} tools enabled.`);
406
+ }
407
+ if (state.databaseEnabled) {
408
+ const wantWrites = await prompt.confirm(`\n Enable write operations (create/insert) for database tables?`, false);
409
+ state.includeWrites = wantWrites;
410
+ }
411
+ }
412
+ async function stepGenerate(state) {
413
+ printStep(5, 5, "Generating MCP server");
414
+ const content = fs_1.default.readFileSync(state.entryFile, "utf-8");
415
+ const importLine = state.isESM ? IMPORT_LINE_ESM : IMPORT_LINE_CJS;
416
+ const disabledRoutePaths = state.tools
417
+ .filter((t) => t.source === "route" && !t.enabled)
418
+ .map((t) => t.path);
419
+ const enabledRoutePaths = new Set(state.tools
420
+ .filter((t) => t.source === "route" && t.enabled)
421
+ .map((t) => t.path));
422
+ const disabledRoutes = disabledRoutePaths.filter((p) => !enabledRoutePaths.has(p));
423
+ const disabledTables = new Set();
424
+ const dbTools = state.tools.filter((t) => t.source === "database");
425
+ const tableNames = [...new Set(dbTools.map((t) => t.tableName))];
426
+ for (const tableName of tableNames) {
427
+ const tableTools = dbTools.filter((t) => t.tableName === tableName);
428
+ const allDisabled = tableTools.every((t) => !t.enabled);
429
+ if (allDisabled)
430
+ disabledTables.add(tableName);
431
+ }
432
+ const configParts = [];
433
+ configParts.push(`app: ${state.appVarName}`);
434
+ if (disabledRoutes.length > 0) {
435
+ configParts.push(`excludeRoutes: ${JSON.stringify(disabledRoutes)}`);
436
+ }
437
+ if (!state.databaseEnabled) {
438
+ configParts.push(`database: false`);
439
+ }
440
+ else {
441
+ if (disabledTables.size > 0) {
442
+ configParts.push(`excludeTables: ${JSON.stringify([...disabledTables])}`);
443
+ }
444
+ if (state.includeWrites) {
445
+ configParts.push(`includeWrites: true`);
446
+ }
447
+ }
448
+ if (!state.enrichmentEnabled) {
449
+ configParts.push(`enrichment: false`);
450
+ }
451
+ let setupCode;
452
+ if (configParts.length <= 2) {
453
+ setupCode = `createMcpServer({ ${configParts.join(", ")} });`;
454
+ }
455
+ else {
456
+ const indent = " ";
457
+ setupCode = `createMcpServer({\n${configParts.map((p) => `${indent}${p},`).join("\n")}\n});`;
458
+ }
459
+ const lines = content.split("\n");
460
+ let lastImportIndex = -1;
461
+ for (let i = 0; i < lines.length; i++) {
462
+ if (/^import\s/.test(lines[i]) || /^const\s.*=\s*require/.test(lines[i])) {
463
+ lastImportIndex = i;
464
+ }
465
+ }
466
+ lines.splice(lastImportIndex + 1, 0, importLine);
467
+ let listenIndex = -1;
468
+ for (let i = lines.length - 1; i >= 0; i--) {
469
+ if (LISTEN_PATTERN.test(lines[i])) {
470
+ listenIndex = i;
471
+ break;
472
+ }
473
+ }
474
+ const commentLine = `// MCP server - exposes your API to AI assistants (Claude, ChatGPT, Cursor)`;
475
+ if (listenIndex >= 0) {
476
+ lines.splice(listenIndex, 0, "", commentLine, setupCode);
477
+ }
478
+ else {
479
+ lines.push("", commentLine, setupCode);
480
+ }
481
+ fs_1.default.writeFileSync(state.entryFile, lines.join("\n"));
482
+ const relPath = path_1.default.relative(state.root, state.entryFile);
483
+ const enabledCount = state.tools.filter((t) => t.enabled).length;
484
+ console.log(` ${c("green", "+")} Updated ${c("bold", relPath)}`);
485
+ console.log();
486
+ console.log(` ${c("dim", " Configuration:")}`);
487
+ console.log(` Tools enabled: ${c("bold", String(enabledCount))}`);
488
+ console.log(` Database: ${state.databaseEnabled ? c("green", "enabled") : c("dim", "disabled")}`);
489
+ console.log(` AI enrichment: ${state.enrichmentEnabled ? c("green", "enabled") : c("dim", "disabled")}`);
490
+ console.log(` Write operations: ${state.includeWrites ? c("green", "enabled") : c("dim", "disabled")}`);
491
+ console.log();
492
+ console.log(` ${c("bold", "Next steps:")}`);
493
+ console.log(` 1. Restart your app`);
494
+ console.log(` 2. Visit ${c("cyan", "http://localhost:3000/mcp")} to see your tools`);
495
+ console.log(` 3. Connect Claude, ChatGPT, or Cursor to your /mcp endpoint`);
496
+ console.log();
497
+ console.log(` ${c("dim", "Full guide:")} ${c("cyan", "https://mcp-skill-scanner.replit.app/guide")}`);
498
+ console.log();
499
+ }
500
+ function generateToolName(method, routePath) {
501
+ const segments = routePath
502
+ .replace(/^\/api\/?/, "")
503
+ .split("/")
504
+ .filter((s) => s && !s.startsWith(":"));
505
+ const resource = segments.join("_") || "root";
506
+ const paramSegments = routePath.split("/").filter((s) => s.startsWith(":"));
507
+ switch (method.toUpperCase()) {
508
+ case "GET":
509
+ return paramSegments.length > 0
510
+ ? `get_${resource}_by_${paramSegments[0].slice(1)}`
511
+ : `list_${resource}`;
512
+ case "POST":
513
+ return `create_${resource}`;
514
+ case "PUT":
515
+ case "PATCH":
516
+ return `update_${resource}`;
517
+ case "DELETE":
518
+ return `delete_${resource}`;
519
+ default:
520
+ return `${method.toLowerCase()}_${resource}`;
521
+ }
522
+ }
523
+ function generateToolDescription(method, routePath) {
524
+ const segments = routePath
525
+ .replace(/^\/api\/?/, "")
526
+ .split("/")
527
+ .filter((s) => s && !s.startsWith(":"));
528
+ const resource = segments.map((s) => s.replace(/[-_]/g, " ")).join(" ") || "resource";
529
+ const paramSegments = routePath.split("/").filter((s) => s.startsWith(":"));
530
+ switch (method.toUpperCase()) {
531
+ case "GET":
532
+ return paramSegments.length > 0
533
+ ? `Get ${resource} by ${paramSegments[0].slice(1)}`
534
+ : `List all ${resource}`;
535
+ case "POST":
536
+ return `Create a new ${resource}`;
537
+ case "PUT":
538
+ case "PATCH":
539
+ return `Update ${resource}`;
540
+ case "DELETE":
541
+ return `Delete ${resource}`;
542
+ default:
543
+ return `${method} ${resource}`;
544
+ }
545
+ }
546
+ function formatTableName(name) {
547
+ return name.replace(/_/g, " ").replace(/\b\w/g, (l) => l.toUpperCase());
548
+ }
549
+ async function runWizard(specifiedFile) {
550
+ printHeader();
551
+ const prompt = createPrompt();
552
+ const state = {
553
+ root: findProjectRoot(),
554
+ entryFile: "",
555
+ appVarName: "app",
556
+ isESM: false,
557
+ routePrefix: "/api",
558
+ routes: [],
559
+ dbTables: [],
560
+ tools: [],
561
+ databaseEnabled: true,
562
+ enrichmentEnabled: true,
563
+ includeWrites: false,
564
+ };
565
+ try {
566
+ const found = await stepDetectApp(state, prompt, specifiedFile);
567
+ if (!found) {
568
+ prompt.close();
569
+ return;
570
+ }
571
+ await stepScanRoutes(state);
572
+ await stepScanDatabase(state, prompt);
573
+ await stepEnrichAndReview(state, prompt);
574
+ await stepGenerate(state);
575
+ }
576
+ catch (err) {
577
+ if (err instanceof Error && err.message.includes("readline was closed")) {
578
+ console.log(`\n ${c("dim", "Setup cancelled.")}\n`);
579
+ }
580
+ else {
581
+ throw err;
582
+ }
583
+ }
584
+ finally {
585
+ prompt.close();
586
+ }
587
+ }
588
+ function main() {
589
+ const args = process.argv.slice(2);
590
+ if (args[0] !== "init") {
591
+ console.log(`
592
+ ${c("bold", "@hellocrossman/mcp-sdk")}
593
+
594
+ Usage:
595
+ npx @hellocrossman/mcp-sdk init Interactive setup wizard
596
+
597
+ Options:
598
+ --file <path> Specify the Express app file manually
599
+ `);
600
+ return;
601
+ }
602
+ const fileArgIndex = args.indexOf("--file");
603
+ const specifiedFile = fileArgIndex >= 0 ? args[fileArgIndex + 1] : undefined;
604
+ runWizard(specifiedFile).catch((err) => {
605
+ console.error(`\n Error: ${err instanceof Error ? err.message : String(err)}\n`);
606
+ process.exit(1);
607
+ });
608
+ }
609
+ main();
610
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { DiscoveredTool } from "./types.js";
2
+ export declare function initDbPool(connectionUrl: string): Promise<void>;
3
+ export declare function executeDbTool(tool: DiscoveredTool, args: Record<string, unknown>): Promise<string>;
4
+ //# sourceMappingURL=db-executor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db-executor.d.ts","sourceRoot":"","sources":["../../src/db-executor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAIjD,wBAAsB,UAAU,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAiBrE;AAED,wBAAsB,aAAa,CACjC,IAAI,EAAE,cAAc,EACpB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAAC,MAAM,CAAC,CAiBjB"}