@kya-os/create-mcpi-app 1.9.32 → 1.9.34

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 (55) hide show
  1. package/.turbo/turbo-build.log +27 -2
  2. package/.turbo/turbo-test$colon$coverage.log +1829 -0
  3. package/.turbo/turbo-test.log +260 -220
  4. package/dist/bundles/blank.js +112104 -0
  5. package/dist/bundles/ecommerce.js +112178 -0
  6. package/dist/bundles/hardware-world.js +112576 -0
  7. package/dist/bundles/manifest.json +28 -0
  8. package/dist/bundles/mix-station.js +112480 -0
  9. package/dist/cli-runner.d.ts.map +1 -1
  10. package/dist/cli-runner.js +23 -0
  11. package/dist/cli-runner.js.map +1 -1
  12. package/dist/helpers/fetch-cloudflare-mcpi-template.js +1 -1
  13. package/dist/helpers/generate-cloudflare-files.d.ts +1 -1
  14. package/dist/helpers/generate-cloudflare-files.d.ts.map +1 -1
  15. package/dist/helpers/generate-cloudflare-files.js +457 -41
  16. package/dist/helpers/generate-cloudflare-files.js.map +1 -1
  17. package/dist/helpers/generate-openapi-project.d.ts +36 -0
  18. package/dist/helpers/generate-openapi-project.d.ts.map +1 -0
  19. package/dist/helpers/generate-openapi-project.js +114 -0
  20. package/dist/helpers/generate-openapi-project.js.map +1 -0
  21. package/dist/helpers/generate-openapi-tools.d.ts +43 -0
  22. package/dist/helpers/generate-openapi-tools.d.ts.map +1 -0
  23. package/dist/helpers/generate-openapi-tools.js +550 -0
  24. package/dist/helpers/generate-openapi-tools.js.map +1 -0
  25. package/dist/helpers/generate-runtime-config.d.ts +16 -0
  26. package/dist/helpers/generate-runtime-config.d.ts.map +1 -0
  27. package/dist/helpers/generate-runtime-config.js +49 -0
  28. package/dist/helpers/generate-runtime-config.js.map +1 -0
  29. package/dist/helpers/get-package-versions.js +8 -8
  30. package/dist/helpers/get-package-versions.js.map +1 -1
  31. package/dist/helpers/openapi-ingestion.d.ts +21 -0
  32. package/dist/helpers/openapi-ingestion.d.ts.map +1 -0
  33. package/dist/helpers/openapi-ingestion.js +433 -0
  34. package/dist/helpers/openapi-ingestion.js.map +1 -0
  35. package/dist/helpers/wrap/command.d.ts +12 -0
  36. package/dist/helpers/wrap/command.d.ts.map +1 -0
  37. package/dist/helpers/wrap/command.js +344 -0
  38. package/dist/helpers/wrap/command.js.map +1 -0
  39. package/dist/helpers/wrap/detect-server.d.ts +30 -0
  40. package/dist/helpers/wrap/detect-server.d.ts.map +1 -0
  41. package/dist/helpers/wrap/detect-server.js +207 -0
  42. package/dist/helpers/wrap/detect-server.js.map +1 -0
  43. package/dist/helpers/wrap/index.d.ts +13 -0
  44. package/dist/helpers/wrap/index.d.ts.map +1 -0
  45. package/dist/helpers/wrap/index.js +11 -0
  46. package/dist/helpers/wrap/index.js.map +1 -0
  47. package/dist/helpers/wrap/templates.d.ts +24 -0
  48. package/dist/helpers/wrap/templates.d.ts.map +1 -0
  49. package/dist/helpers/wrap/templates.js +221 -0
  50. package/dist/helpers/wrap/templates.js.map +1 -0
  51. package/dist/types/openapi-generator.d.ts +142 -0
  52. package/dist/types/openapi-generator.d.ts.map +1 -0
  53. package/dist/types/openapi-generator.js +8 -0
  54. package/dist/types/openapi-generator.js.map +1 -0
  55. package/package.json +35 -9
@@ -0,0 +1,344 @@
1
+ /**
2
+ * Wrap Command Implementation
3
+ *
4
+ * Interactive CLI flow for wrapping an existing MCP server with MCP-I.
5
+ */
6
+ import path from "path";
7
+ import fs from "fs-extra";
8
+ import chalk from "chalk";
9
+ import inquirer from "inquirer";
10
+ import ora from "ora";
11
+ import { execSync } from "child_process";
12
+ import { detectServer } from "./detect-server.js";
13
+ import { generateWrapper } from "./templates.js";
14
+ import { generateIdentity } from "../generate-identity.js";
15
+ // ── Display Helpers ──────────────────────────────────────────────
16
+ function displayDetection(detection) {
17
+ const framework = detection.framework === "unknown" ? "Node.js" : detection.framework;
18
+ const transport = detection.transport === "unknown" ? "undetermined" : detection.transport;
19
+ console.log("");
20
+ console.log(chalk.cyan(" Detected: ") +
21
+ chalk.bold(`${framework} MCP server`) +
22
+ chalk.gray(` (${transport} transport)`));
23
+ if (detection.tools.length > 0) {
24
+ console.log(chalk.cyan(" Tools: ") +
25
+ detection.tools.map((t) => chalk.yellow(t.name)).join(", "));
26
+ }
27
+ else {
28
+ console.log(chalk.cyan(" Tools: ") +
29
+ chalk.gray("none detected (you can add policies later)"));
30
+ }
31
+ console.log(chalk.cyan(" Language: ") + chalk.white(detection.language));
32
+ console.log(chalk.cyan(" Entry: ") + chalk.white(detection.entryPoint));
33
+ if (detection.hasIdentity) {
34
+ console.log("");
35
+ console.log(chalk.yellow(" ⚠ This server already has MCP-I packages installed."));
36
+ console.log(chalk.yellow(" Proceeding will generate additional wrapper code."));
37
+ }
38
+ console.log("");
39
+ }
40
+ // ── Prompts ──────────────────────────────────────────────────────
41
+ async function promptConfig(detection, absDir) {
42
+ const answers = await inquirer.prompt([
43
+ {
44
+ type: "list",
45
+ name: "verificationLevel",
46
+ message: "Identity verification level for agents:",
47
+ choices: [
48
+ {
49
+ name: "Level 2 — DID + Agent Registry verification (recommended)",
50
+ value: 2,
51
+ },
52
+ { name: "Level 1 — DID only (minimal)", value: 1 },
53
+ { name: "Level 3 — DID + Delegation chain (enterprise)", value: 3 },
54
+ ],
55
+ default: 0,
56
+ },
57
+ {
58
+ type: "list",
59
+ name: "protectedTools",
60
+ message: "Which tools require identity verification?",
61
+ choices: [
62
+ { name: "All tools (recommended)", value: "all" },
63
+ ...(detection.tools.length > 0
64
+ ? [
65
+ {
66
+ name: `Write operations only (${detection.tools.filter((t) => /create|update|delete|write|send|modify|remove/i.test(t.name)).length} tools)`,
67
+ value: "write-only",
68
+ },
69
+ ]
70
+ : []),
71
+ { name: "Custom selection", value: "custom" },
72
+ ],
73
+ default: 0,
74
+ },
75
+ {
76
+ type: "input",
77
+ name: "serverName",
78
+ message: "Server name for the registry:",
79
+ default: detection.serverName || path.basename(absDir),
80
+ },
81
+ {
82
+ type: "confirm",
83
+ name: "registerOnKnowThat",
84
+ message: "Register your server on KnowThat.ai? (builds server reputation)",
85
+ default: true,
86
+ },
87
+ {
88
+ type: "confirm",
89
+ name: "connectToCheckpoint",
90
+ message: "Connect to Checkpoint for monitoring?",
91
+ default: true,
92
+ },
93
+ {
94
+ type: "number",
95
+ name: "reputationThreshold",
96
+ message: "Minimum reputation score for agents (0 = no minimum, 40 = recommended):",
97
+ default: 40,
98
+ },
99
+ ]);
100
+ // Handle custom tool selection
101
+ let protectedTools = "all";
102
+ if (answers.protectedTools === "custom" && detection.tools.length > 0) {
103
+ const customAnswer = await inquirer.prompt([
104
+ {
105
+ type: "checkbox",
106
+ name: "selectedTools",
107
+ message: "Select tools that require identity verification:",
108
+ choices: detection.tools.map((t) => ({
109
+ name: `${t.name} — ${t.description}`,
110
+ value: t.name,
111
+ checked: true,
112
+ })),
113
+ },
114
+ ]);
115
+ protectedTools = customAnswer.selectedTools;
116
+ }
117
+ else if (answers.protectedTools === "write-only") {
118
+ protectedTools = detection.tools
119
+ .filter((t) => /create|update|delete|write|send|modify|remove/i.test(t.name))
120
+ .map((t) => t.name);
121
+ }
122
+ return {
123
+ verificationLevel: answers.verificationLevel,
124
+ protectedTools,
125
+ registerOnKnowThat: answers.registerOnKnowThat,
126
+ connectToCheckpoint: answers.connectToCheckpoint,
127
+ serverName: answers.serverName,
128
+ reputationThreshold: answers.reputationThreshold,
129
+ };
130
+ }
131
+ export async function runWrapCommand(targetDir, options = {}) {
132
+ const absDir = path.resolve(targetDir);
133
+ console.log("");
134
+ console.log(chalk.bold.cyan("🔐 MCP-I Server Wrapper") +
135
+ chalk.gray(" — Add identity to your MCP server"));
136
+ // Step 1: Detect
137
+ const spinner = ora("Analyzing server...").start();
138
+ let detection;
139
+ try {
140
+ detection = await detectServer(absDir);
141
+ spinner.succeed("Server analyzed");
142
+ }
143
+ catch (err) {
144
+ spinner.fail("Could not analyze server");
145
+ console.error(chalk.red(` ${err instanceof Error ? err.message : "Unknown error"}`));
146
+ process.exit(1);
147
+ }
148
+ if (!detection.hasMcpSdk) {
149
+ console.log("");
150
+ console.log(chalk.yellow(" ⚠ No MCP SDK detected (@modelcontextprotocol/sdk)."));
151
+ console.log(chalk.yellow(" Are you sure this is an MCP server directory?"));
152
+ if (!options.yes) {
153
+ const { proceed } = await inquirer.prompt([
154
+ {
155
+ type: "confirm",
156
+ name: "proceed",
157
+ message: "Continue anyway?",
158
+ default: false,
159
+ },
160
+ ]);
161
+ if (!proceed) {
162
+ console.log(chalk.gray(" Cancelled."));
163
+ return;
164
+ }
165
+ }
166
+ }
167
+ // Display detection results
168
+ displayDetection(detection);
169
+ // Step 2: Configure
170
+ let config;
171
+ if (options.yes) {
172
+ config = {
173
+ verificationLevel: 2,
174
+ protectedTools: "all",
175
+ registerOnKnowThat: true,
176
+ connectToCheckpoint: true,
177
+ serverName: detection.serverName || path.basename(absDir),
178
+ reputationThreshold: 40,
179
+ };
180
+ }
181
+ else {
182
+ config = await promptConfig(detection, absDir);
183
+ }
184
+ // Step 3: Generate
185
+ const genSpinner = ora("Generating wrapper code...").start();
186
+ const files = generateWrapper(detection, config);
187
+ let writtenCount = 0;
188
+ for (const file of files) {
189
+ const filePath = path.join(absDir, file.filename);
190
+ // Don't overwrite without asking
191
+ if (fs.existsSync(filePath) && !options.yes) {
192
+ genSpinner.stop();
193
+ const { overwrite } = await inquirer.prompt([
194
+ {
195
+ type: "confirm",
196
+ name: "overwrite",
197
+ message: `${file.filename} already exists. Overwrite?`,
198
+ default: false,
199
+ },
200
+ ]);
201
+ if (!overwrite) {
202
+ console.log(chalk.gray(` Skipped ${file.filename}`));
203
+ genSpinner.start();
204
+ continue;
205
+ }
206
+ genSpinner.start();
207
+ }
208
+ fs.writeFileSync(filePath, file.content, "utf-8");
209
+ writtenCount++;
210
+ }
211
+ genSpinner.succeed(`Generated ${writtenCount} file${writtenCount !== 1 ? "s" : ""}`);
212
+ // Step 4: Generate identity
213
+ if (!options.skipIdentity) {
214
+ const mcpiDir = path.join(absDir, ".mcpi");
215
+ const identityPath = path.join(mcpiDir, "identity.json");
216
+ const existingIdentity = fs.existsSync(identityPath);
217
+ if (existingIdentity && !options.yes) {
218
+ // Identity already exists — reuse it to avoid key/DID mismatch
219
+ const idSpinner = ora("Using existing server identity...").start();
220
+ try {
221
+ const existing = fs.readJsonSync(identityPath);
222
+ idSpinner.succeed(`Using existing DID: ${chalk.dim(existing.did)}`);
223
+ }
224
+ catch {
225
+ idSpinner.warn("Could not read existing identity — skipping");
226
+ }
227
+ }
228
+ else if (!existingIdentity) {
229
+ const idSpinner = ora("Generating server identity (DID)...").start();
230
+ try {
231
+ const identity = await generateIdentity();
232
+ // Create .mcpi directory
233
+ fs.ensureDirSync(mcpiDir);
234
+ // Save identity to .mcpi/identity.json
235
+ const identityData = {
236
+ version: "1.0",
237
+ ...identity,
238
+ };
239
+ fs.writeJsonSync(identityPath, identityData, { spaces: 2 });
240
+ // Ensure .mcpi/ is in .gitignore (contains private key)
241
+ const gitignorePath = path.join(absDir, ".gitignore");
242
+ if (fs.existsSync(gitignorePath)) {
243
+ const existing = fs.readFileSync(gitignorePath, "utf-8");
244
+ if (!existing.includes(".mcpi")) {
245
+ fs.appendFileSync(gitignorePath, "\n# MCP-I identity (contains private key)\n.mcpi/\n");
246
+ }
247
+ }
248
+ else {
249
+ fs.writeFileSync(gitignorePath, "# MCP-I identity (contains private key)\n.mcpi/\n");
250
+ }
251
+ // Write DID to .env file
252
+ const envPath = path.join(absDir, ".env");
253
+ const envLine = `MCPI_SERVER_DID=${identity.did}\n`;
254
+ if (fs.existsSync(envPath)) {
255
+ const existing = fs.readFileSync(envPath, "utf-8");
256
+ if (!existing.includes("MCPI_SERVER_DID=")) {
257
+ fs.appendFileSync(envPath, `\n${envLine}`);
258
+ }
259
+ else {
260
+ // Update existing DID to match new identity
261
+ const updated = existing.replace(/MCPI_SERVER_DID=.*/, `MCPI_SERVER_DID=${identity.did}`);
262
+ fs.writeFileSync(envPath, updated);
263
+ }
264
+ }
265
+ else {
266
+ fs.writeFileSync(envPath, envLine);
267
+ }
268
+ idSpinner.succeed(`Server DID generated: ${chalk.dim(identity.did)}`);
269
+ }
270
+ catch {
271
+ idSpinner.warn("Could not auto-generate DID. Run: npx @kya-os/cli did:generate");
272
+ }
273
+ }
274
+ }
275
+ // Step 5: Install dependencies
276
+ const packages = [];
277
+ if (detection.transport === "stdio") {
278
+ packages.push("@kya-os/mcp-i");
279
+ }
280
+ else {
281
+ packages.push("@kya-os/verifier");
282
+ }
283
+ const uniquePackages = [...new Set(packages)];
284
+ if (!options.skipInstall) {
285
+ const pm = detection.packageManager;
286
+ const installCmd = pm === "yarn"
287
+ ? "yarn add"
288
+ : pm === "pnpm"
289
+ ? "pnpm add"
290
+ : pm === "bun"
291
+ ? "bun add"
292
+ : "npm install";
293
+ const depSpinner = ora(`Installing ${uniquePackages.join(", ")}...`).start();
294
+ try {
295
+ execSync(`${installCmd} ${uniquePackages.join(" ")}`, {
296
+ cwd: absDir,
297
+ stdio: "pipe",
298
+ });
299
+ depSpinner.succeed("Dependencies installed");
300
+ }
301
+ catch {
302
+ depSpinner.warn("Could not install dependencies automatically");
303
+ console.log(chalk.gray(` Run manually: ${installCmd} ${uniquePackages.join(" ")}`));
304
+ }
305
+ }
306
+ // Step 6: Summary
307
+ console.log("");
308
+ console.log(chalk.green.bold("✓ MCP-I wrapper generated!"));
309
+ console.log("");
310
+ for (const file of files) {
311
+ console.log(chalk.cyan(` → ${file.filename}`));
312
+ }
313
+ console.log("");
314
+ console.log(chalk.white(" Next steps:"));
315
+ let step = 1;
316
+ if (options.skipInstall) {
317
+ const pm = detection.packageManager;
318
+ const addCmd = pm === "yarn"
319
+ ? "yarn add"
320
+ : pm === "pnpm"
321
+ ? "pnpm add"
322
+ : pm === "bun"
323
+ ? "bun add"
324
+ : "npm install";
325
+ console.log(chalk.gray(` ${step}. Install deps: ${addCmd} ${uniquePackages.join(" ")}`));
326
+ step++;
327
+ }
328
+ console.log(chalk.gray(` ${step}. Copy .env.mcpi.example to .env and fill in values`));
329
+ step++;
330
+ if (detection.transport === "stdio") {
331
+ console.log(chalk.gray(` ${step}. Update package.json "start" script to use mcpi-wrapper`));
332
+ }
333
+ else {
334
+ console.log(chalk.gray(` ${step}. Import and apply mcpiVerify middleware to your routes`));
335
+ }
336
+ step++;
337
+ if (config.registerOnKnowThat) {
338
+ console.log(chalk.gray(` ${step}. Register: npx @kya-os/cli registry:register --name "${config.serverName}"`));
339
+ }
340
+ console.log("");
341
+ console.log(chalk.cyan(` Docs: https://docs.checkpoint.sh/wrap`));
342
+ console.log("");
343
+ }
344
+ //# sourceMappingURL=command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command.js","sourceRoot":"","sources":["../../../src/helpers/wrap/command.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * MCP Server Detection
3
+ *
4
+ * Analyzes a target directory to detect what kind of MCP server it contains,
5
+ * what framework it uses, transport type, registered tools, and other metadata.
6
+ */
7
+ export type Framework = "express" | "fastify" | "hono" | "cloudflare-worker" | "node-http" | "unknown";
8
+ export type Transport = "stdio" | "http-sse" | "http-streamable" | "unknown";
9
+ export type PackageManager = "npm" | "yarn" | "pnpm" | "bun";
10
+ export type Language = "typescript" | "javascript";
11
+ export interface DetectedTool {
12
+ name: string;
13
+ description: string;
14
+ }
15
+ export interface ServerDetection {
16
+ framework: Framework;
17
+ transport: Transport;
18
+ tools: DetectedTool[];
19
+ packageManager: PackageManager;
20
+ language: Language;
21
+ entryPoint: string;
22
+ hasMcpSdk: boolean;
23
+ hasIdentity: boolean;
24
+ serverName: string | null;
25
+ }
26
+ /**
27
+ * Analyze a directory to detect MCP server configuration.
28
+ */
29
+ export declare function detectServer(targetDir: string): Promise<ServerDetection>;
30
+ //# sourceMappingURL=detect-server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detect-server.d.ts","sourceRoot":"","sources":["../../../src/helpers/wrap/detect-server.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,MAAM,MAAM,SAAS,GACjB,SAAS,GACT,SAAS,GACT,MAAM,GACN,mBAAmB,GACnB,WAAW,GACX,SAAS,CAAC;AAEd,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,UAAU,GAAG,iBAAiB,GAAG,SAAS,CAAC;AAE7E,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC;AAE7D,MAAM,MAAM,QAAQ,GAAG,YAAY,GAAG,YAAY,CAAC;AAEnD,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,SAAS,CAAC;IACrB,SAAS,EAAE,SAAS,CAAC;IACrB,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,cAAc,EAAE,cAAc,CAAC;IAC/B,QAAQ,EAAE,QAAQ,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,EAAE,OAAO,CAAC;IACrB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAmKD;;GAEG;AACH,wBAAsB,YAAY,CAChC,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,eAAe,CAAC,CAmE1B"}
@@ -0,0 +1,207 @@
1
+ /**
2
+ * MCP Server Detection
3
+ *
4
+ * Analyzes a target directory to detect what kind of MCP server it contains,
5
+ * what framework it uses, transport type, registered tools, and other metadata.
6
+ */
7
+ import fs from "fs-extra";
8
+ import path from "path";
9
+ // ── Detection Logic ──────────────────────────────────────────────
10
+ /**
11
+ * Detect the package manager used in a project.
12
+ */
13
+ function detectPackageManager(targetDir) {
14
+ if (fs.existsSync(path.join(targetDir, "bun.lockb")) ||
15
+ fs.existsSync(path.join(targetDir, "bun.lock")))
16
+ return "bun";
17
+ if (fs.existsSync(path.join(targetDir, "pnpm-lock.yaml")))
18
+ return "pnpm";
19
+ if (fs.existsSync(path.join(targetDir, "yarn.lock")))
20
+ return "yarn";
21
+ return "npm";
22
+ }
23
+ /**
24
+ * Detect the language (TypeScript or JavaScript).
25
+ */
26
+ function detectLanguage(targetDir) {
27
+ if (fs.existsSync(path.join(targetDir, "tsconfig.json")))
28
+ return "typescript";
29
+ // Check if entry files are .ts
30
+ const srcDir = path.join(targetDir, "src");
31
+ if (fs.existsSync(srcDir)) {
32
+ const files = fs.readdirSync(srcDir);
33
+ if (files.some((f) => f.endsWith(".ts") && !f.endsWith(".d.ts")))
34
+ return "typescript";
35
+ }
36
+ return "javascript";
37
+ }
38
+ /**
39
+ * Find the most likely entry point for the MCP server.
40
+ */
41
+ function findEntryPoint(targetDir, packageJson) {
42
+ // Check package.json main/module
43
+ const main = packageJson.main || packageJson.module;
44
+ if (main) {
45
+ // Try the source equivalent
46
+ const srcEquiv = main
47
+ .replace(/^dist\//, "src/")
48
+ .replace(/\.js$/, ".ts");
49
+ if (fs.existsSync(path.join(targetDir, srcEquiv)))
50
+ return srcEquiv;
51
+ if (fs.existsSync(path.join(targetDir, main)))
52
+ return main;
53
+ }
54
+ // Common entry points
55
+ const candidates = [
56
+ "src/index.ts",
57
+ "src/server.ts",
58
+ "src/main.ts",
59
+ "index.ts",
60
+ "server.ts",
61
+ "src/index.js",
62
+ "src/server.js",
63
+ "index.js",
64
+ "server.js",
65
+ ];
66
+ for (const candidate of candidates) {
67
+ if (fs.existsSync(path.join(targetDir, candidate)))
68
+ return candidate;
69
+ }
70
+ return "src/index.ts";
71
+ }
72
+ /**
73
+ * Detect the framework from package.json dependencies.
74
+ */
75
+ function detectFramework(deps) {
76
+ if (deps["hono"])
77
+ return "hono";
78
+ if (deps["@cloudflare/workers-types"] || deps["wrangler"])
79
+ return "cloudflare-worker";
80
+ if (deps["fastify"])
81
+ return "fastify";
82
+ if (deps["express"])
83
+ return "express";
84
+ return "unknown";
85
+ }
86
+ /**
87
+ * Detect the MCP transport from source code.
88
+ */
89
+ function detectTransport(sourceContent) {
90
+ // Check for HTTP-based transports
91
+ if (sourceContent.includes("SSEServerTransport") ||
92
+ sourceContent.includes("http-sse")) {
93
+ return "http-sse";
94
+ }
95
+ if (sourceContent.includes("StreamableHTTPServerTransport") ||
96
+ sourceContent.includes("http-streamable")) {
97
+ return "http-streamable";
98
+ }
99
+ // Check for stdio — match class name or transport config, not bare substring
100
+ if (sourceContent.includes("StdioServerTransport") ||
101
+ /transport\s*[:=]\s*["']stdio["']/.test(sourceContent)) {
102
+ return "stdio";
103
+ }
104
+ return "unknown";
105
+ }
106
+ /**
107
+ * Extract tool registrations from source code.
108
+ * Looks for patterns like: server.tool("name", "description", ...)
109
+ */
110
+ function extractTools(sourceContent) {
111
+ const tools = [];
112
+ // Match server.tool("name", "description", ...) or server.tool({ name: "...", description: "..." })
113
+ const toolRegex = /\.tool\(\s*["'`]([^"'`]+)["'`]\s*,\s*["'`]([^"'`]+)["'`]/g;
114
+ let match;
115
+ while ((match = toolRegex.exec(sourceContent)) !== null) {
116
+ tools.push({
117
+ name: match[1],
118
+ description: match[2],
119
+ });
120
+ }
121
+ // Also try object form: .tool({ name: "...", description: "..." })
122
+ const objToolRegex = /\.tool\(\s*\{[^}]*name:\s*["'`]([^"'`]+)["'`][^}]*description:\s*["'`]([^"'`]+)["'`]/g;
123
+ while ((match = objToolRegex.exec(sourceContent)) !== null) {
124
+ // Avoid duplicates
125
+ if (!tools.some((t) => t.name === match[1])) {
126
+ tools.push({
127
+ name: match[1],
128
+ description: match[2],
129
+ });
130
+ }
131
+ }
132
+ return tools;
133
+ }
134
+ /**
135
+ * Try to extract the server name from source or package.json.
136
+ */
137
+ function extractServerName(sourceContent, packageJson) {
138
+ // Check for new Server({ name: "..." })
139
+ const nameMatch = sourceContent.match(/new\s+(?:Mcp)?Server\(\s*\{[^}]*name:\s*["'`]([^"'`]+)["'`]/);
140
+ if (nameMatch)
141
+ return nameMatch[1];
142
+ // Fall back to package.json name
143
+ if (typeof packageJson.name === "string")
144
+ return packageJson.name;
145
+ return null;
146
+ }
147
+ // ── Main Detection ───────────────────────────────────────────────
148
+ /**
149
+ * Analyze a directory to detect MCP server configuration.
150
+ */
151
+ export async function detectServer(targetDir) {
152
+ const absDir = path.resolve(targetDir);
153
+ // Read package.json
154
+ const pkgPath = path.join(absDir, "package.json");
155
+ if (!fs.existsSync(pkgPath)) {
156
+ throw new Error(`No package.json found in ${absDir}. Is this a Node.js project?`);
157
+ }
158
+ const packageJson = JSON.parse(fs.readFileSync(pkgPath, "utf-8"));
159
+ const allDeps = {
160
+ ...(packageJson.dependencies || {}),
161
+ ...(packageJson.devDependencies || {}),
162
+ };
163
+ // Detect basics
164
+ const packageManager = detectPackageManager(absDir);
165
+ const language = detectLanguage(absDir);
166
+ const entryPoint = findEntryPoint(absDir, packageJson);
167
+ const framework = detectFramework(allDeps);
168
+ // Read source files for deeper analysis
169
+ let sourceContent = "";
170
+ const entryPath = path.join(absDir, entryPoint);
171
+ if (fs.existsSync(entryPath)) {
172
+ sourceContent = fs.readFileSync(entryPath, "utf-8");
173
+ }
174
+ // Also scan for other potential server files (skip entry point to avoid duplicates)
175
+ const srcDir = path.join(absDir, "src");
176
+ if (fs.existsSync(srcDir)) {
177
+ // Only skip if the entry point is actually inside src/
178
+ const entryInSrc = entryPoint.startsWith("src/");
179
+ const entryBasename = entryInSrc ? path.basename(entryPoint) : null;
180
+ const srcFiles = fs
181
+ .readdirSync(srcDir)
182
+ .filter((f) => (f.endsWith(".ts") || f.endsWith(".js")) &&
183
+ !f.endsWith(".d.ts") &&
184
+ f !== entryBasename);
185
+ for (const file of srcFiles.slice(0, 10)) {
186
+ // Cap to avoid reading huge dirs
187
+ const content = fs.readFileSync(path.join(srcDir, file), "utf-8");
188
+ sourceContent += "\n" + content;
189
+ }
190
+ }
191
+ const transport = detectTransport(sourceContent);
192
+ const tools = extractTools(sourceContent);
193
+ const serverName = extractServerName(sourceContent, packageJson);
194
+ return {
195
+ framework,
196
+ transport,
197
+ tools,
198
+ packageManager,
199
+ language,
200
+ entryPoint,
201
+ hasMcpSdk: !!allDeps["@modelcontextprotocol/sdk"] ||
202
+ !!allDeps["@anthropic-ai/sdk"],
203
+ hasIdentity: !!allDeps["@kya-os/mcp-i"] || !!allDeps["@kya-os/verifier"],
204
+ serverName,
205
+ };
206
+ }
207
+ //# sourceMappingURL=detect-server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detect-server.js","sourceRoot":"","sources":["../../../src/helpers/wrap/detect-server.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,IAAI,MAAM,MAAM,CAAC;AAmCxB,oEAAoE;AAEpE;;GAEG;AACH,SAAS,oBAAoB,CAAC,SAAiB;IAC7C,IACE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;QAChD,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;QAE/C,OAAO,KAAK,CAAC;IACf,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC;QAAE,OAAO,MAAM,CAAC;IACzE,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;QAAE,OAAO,MAAM,CAAC;IACpE,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,SAAS,cAAc,CAAC,SAAiB;IACvC,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;QAAE,OAAO,YAAY,CAAC;IAC9E,+BAA+B;IAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IAC3C,IAAI,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1B,MAAM,KAAK,GAAG,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QACrC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YACtE,OAAO,YAAY,CAAC;IACxB,CAAC;IACD,OAAO,YAAY,CAAC;AACtB,CAAC;AAED;;GAEG;AACH,SAAS,cAAc,CACrB,SAAiB,EACjB,WAAoC;IAEpC,iCAAiC;IACjC,MAAM,IAAI,GAAI,WAAW,CAAC,IAAe,IAAK,WAAW,CAAC,MAAiB,CAAC;IAC5E,IAAI,IAAI,EAAE,CAAC;QACT,4BAA4B;QAC5B,MAAM,QAAQ,GAAG,IAAI;aAClB,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC;aAC1B,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAC3B,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;YAAE,OAAO,QAAQ,CAAC;QACnE,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;IAC7D,CAAC;IAED,sBAAsB;IACtB,MAAM,UAAU,GAAG;QACjB,cAAc;QACd,eAAe;QACf,aAAa;QACb,UAAU;QACV,WAAW;QACX,cAAc;QACd,eAAe;QACf,UAAU;QACV,WAAW;KACZ,CAAC;IAEF,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;YAAE,OAAO,SAAS,CAAC;IACvE,CAAC;IAED,OAAO,cAAc,CAAC;AACxB,CAAC;AAED;;GAEG;AACH,SAAS,eAAe,CAAC,IAA4B;IACnD,IAAI,IAAI,CAAC,MAAM,CAAC;QAAE,OAAO,MAAM,CAAC;IAChC,IAAI,IAAI,CAAC,2BAA2B,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC;QAAE,OAAO,mBAAmB,CAAC;IACtF,IAAI,IAAI,CAAC,SAAS,CAAC;QAAE,OAAO,SAAS,CAAC;IACtC,IAAI,IAAI,CAAC,SAAS,CAAC;QAAE,OAAO,SAAS,CAAC;IACtC,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,SAAS,eAAe,CAAC,aAAqB;IAC5C,kCAAkC;IAClC,IACE,aAAa,CAAC,QAAQ,CAAC,oBAAoB,CAAC;QAC5C,aAAa,CAAC,QAAQ,CAAC,UAAU,CAAC,EAClC,CAAC;QACD,OAAO,UAAU,CAAC;IACpB,CAAC;IACD,IACE,aAAa,CAAC,QAAQ,CAAC,+BAA+B,CAAC;QACvD,aAAa,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EACzC,CAAC;QACD,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IACD,6EAA6E;IAC7E,IACE,aAAa,CAAC,QAAQ,CAAC,sBAAsB,CAAC;QAC9C,kCAAkC,CAAC,IAAI,CAAC,aAAa,CAAC,EACtD,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;GAGG;AACH,SAAS,YAAY,CAAC,aAAqB;IACzC,MAAM,KAAK,GAAmB,EAAE,CAAC;IACjC,oGAAoG;IACpG,MAAM,SAAS,GACb,2DAA2D,CAAC;IAC9D,IAAI,KAAK,CAAC;IACV,OAAO,CAAC,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QACxD,KAAK,CAAC,IAAI,CAAC;YACT,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;YACd,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC;SACtB,CAAC,CAAC;IACL,CAAC;IAED,mEAAmE;IACnE,MAAM,YAAY,GAChB,uFAAuF,CAAC;IAC1F,OAAO,CAAC,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QAC3D,mBAAmB;QACnB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7C,KAAK,CAAC,IAAI,CAAC;gBACT,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;gBACd,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC;aACtB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB,CACxB,aAAqB,EACrB,WAAoC;IAEpC,wCAAwC;IACxC,MAAM,SAAS,GAAG,aAAa,CAAC,KAAK,CACnC,6DAA6D,CAC9D,CAAC;IACF,IAAI,SAAS;QAAE,OAAO,SAAS,CAAC,CAAC,CAAC,CAAC;IAEnC,iCAAiC;IACjC,IAAI,OAAO,WAAW,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,WAAW,CAAC,IAAI,CAAC;IAElE,OAAO,IAAI,CAAC;AACd,CAAC;AAED,oEAAoE;AAEpE;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,SAAiB;IAEjB,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAEvC,oBAAoB;IACpB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAClD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CACb,4BAA4B,MAAM,8BAA8B,CACjE,CAAC;IACJ,CAAC;IACD,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;IAClE,MAAM,OAAO,GAAG;QACd,GAAG,CAAC,WAAW,CAAC,YAAY,IAAI,EAAE,CAAC;QACnC,GAAG,CAAC,WAAW,CAAC,eAAe,IAAI,EAAE,CAAC;KACvC,CAAC;IAEF,gBAAgB;IAChB,MAAM,cAAc,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;IACpD,MAAM,QAAQ,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IACxC,MAAM,UAAU,GAAG,cAAc,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACvD,MAAM,SAAS,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;IAE3C,wCAAwC;IACxC,IAAI,aAAa,GAAG,EAAE,CAAC;IACvB,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAChD,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC7B,aAAa,GAAG,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACtD,CAAC;IAED,oFAAoF;IACpF,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACxC,IAAI,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1B,uDAAuD;QACvD,MAAM,UAAU,GAAG,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QACjD,MAAM,aAAa,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACpE,MAAM,QAAQ,GAAG,EAAE;aAChB,WAAW,CAAC,MAAM,CAAC;aACnB,MAAM,CACL,CAAC,CAAS,EAAE,EAAE,CACZ,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YACxC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC;YACpB,CAAC,KAAK,aAAa,CACtB,CAAC;QACJ,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;YACzC,iCAAiC;YACjC,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;YAClE,aAAa,IAAI,IAAI,GAAG,OAAO,CAAC;QAClC,CAAC;IACH,CAAC;IAED,MAAM,SAAS,GAAG,eAAe,CAAC,aAAa,CAAC,CAAC;IACjD,MAAM,KAAK,GAAG,YAAY,CAAC,aAAa,CAAC,CAAC;IAC1C,MAAM,UAAU,GAAG,iBAAiB,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;IAEjE,OAAO;QACL,SAAS;QACT,SAAS;QACT,KAAK;QACL,cAAc;QACd,QAAQ;QACR,UAAU;QACV,SAAS,EACP,CAAC,CAAC,OAAO,CAAC,2BAA2B,CAAC;YACtC,CAAC,CAAC,OAAO,CAAC,mBAAmB,CAAC;QAChC,WAAW,EAAE,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,kBAAkB,CAAC;QACxE,UAAU;KACX,CAAC;AACJ,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * create-mcpi-app wrap
3
+ *
4
+ * Main orchestrator for wrapping an existing MCP server with MCP-I identity.
5
+ * Detects the server, prompts for configuration, generates wrapper code,
6
+ * installs dependencies, and optionally registers with KnowThat.ai.
7
+ */
8
+ export { detectServer } from "./detect-server.js";
9
+ export type { ServerDetection, DetectedTool, Framework, Transport } from "./detect-server.js";
10
+ export { generateWrapper } from "./templates.js";
11
+ export type { WrapConfig, GeneratedFiles } from "./templates.js";
12
+ export { runWrapCommand } from "./command.js";
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/helpers/wrap/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,YAAY,EAAE,eAAe,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC9F,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * create-mcpi-app wrap
3
+ *
4
+ * Main orchestrator for wrapping an existing MCP server with MCP-I identity.
5
+ * Detects the server, prompts for configuration, generates wrapper code,
6
+ * installs dependencies, and optionally registers with KnowThat.ai.
7
+ */
8
+ export { detectServer } from "./detect-server.js";
9
+ export { generateWrapper } from "./templates.js";
10
+ export { runWrapCommand } from "./command.js";
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/helpers/wrap/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEjD,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC"}