@kya-os/create-mcpi-app 1.2.20 → 1.2.21

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.
@@ -16,6 +16,8 @@ interface CreateProjectOptions {
16
16
  skipAnimation?: boolean;
17
17
  fastAnimation?: boolean;
18
18
  spinner?: any;
19
+ platform?: string;
20
+ mode?: string;
19
21
  template?: string;
20
22
  }
21
23
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../src/helpers/create.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AA4CrD,UAAU,oBAAoB;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,OAAO,CAAC,EAAE,GAAG,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AASD;;GAEG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,gBAAgB,CAAC,CAiI3B"}
1
+ {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../src/helpers/create.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AA4CrD,UAAU,oBAAoB;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,OAAO,CAAC,EAAE,GAAG,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AASD;;GAEG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,gBAAgB,CAAC,CA4I3B"}
@@ -3,6 +3,7 @@ import fs from "fs-extra";
3
3
  import { fileURLToPath } from "url";
4
4
  import { fetchMCPITemplate } from "./fetch-mcpi-template.js";
5
5
  import { fetchCloudflareTemplate } from "./fetch-cloudflare-template.js";
6
+ import { fetchCloudflareMcpiTemplate } from "./fetch-cloudflare-mcpi-template.js";
6
7
  import { renameFiles } from "./rename.js";
7
8
  import { install } from "./install.js";
8
9
  import { validateProjectStructure, ensureLockfile, } from "./validate-project-structure.js";
@@ -51,27 +52,37 @@ function createProjectDirectories(projectPath) {
51
52
  * Create a new MCP-I project with identity features
52
53
  */
53
54
  export async function createProject(options) {
54
- const { projectPath, projectName, packageManager, transports, packageVersion, useLocalXmcp, mcpiVersion, deployToVercel, skipInstall, agentName = projectName, agentDescription = "MCP-I server with identity features", agentRepository = "", skipIdentity = false, skipAnimation = false, fastAnimation = false, template = "default", } = options;
55
+ const { projectPath, projectName, packageManager, transports, packageVersion, useLocalXmcp, mcpiVersion, deployToVercel, skipInstall, agentName = projectName, agentDescription = "MCP-I server with identity features", agentRepository = "", skipIdentity = false, skipAnimation = false, fastAnimation = false, platform = "node", mode = "mcp-i", template = "default", } = options;
55
56
  const warnings = [];
56
57
  let resolvedMcpiVersion = mcpiVersion;
57
58
  try {
58
59
  // Ensure the project directory exists
59
60
  fs.ensureDirSync(projectPath);
60
- // Scaffold project based on template
61
+ // Scaffold project based on platform/mode
61
62
  console.log(chalk.blue("\nšŸ“ Scaffolding project..."));
62
- if (template === "cloudflare") {
63
- // Cloudflare Worker verifier template
63
+ if (platform === "cloudflare" && mode === "verifier") {
64
+ // Cloudflare Worker verifier template (standalone verifier)
64
65
  await fetchCloudflareTemplate(projectPath, {
65
66
  packageManager,
66
67
  });
67
68
  }
68
- else {
69
- // Default MCP-I server template
69
+ else if (platform === "cloudflare" && mode === "mcp-i") {
70
+ // Cloudflare Worker MCP-I server template (NEW)
71
+ await fetchCloudflareMcpiTemplate(projectPath, {
72
+ packageManager,
73
+ projectName,
74
+ });
75
+ }
76
+ else if (platform === "node" && mode === "mcp-i") {
77
+ // Node.js MCP-I server template (default)
70
78
  await fetchMCPITemplate(projectPath, {
71
79
  mcpiVersion,
72
80
  packageManager,
73
81
  });
74
82
  }
83
+ else {
84
+ throw new Error(`Unsupported platform/mode combination: ${platform}/${mode}`);
85
+ }
75
86
  // Capture the resolved version for the result
76
87
  const packageJsonPath = path.join(projectPath, "package.json");
77
88
  if (fs.existsSync(packageJsonPath)) {
@@ -102,8 +113,9 @@ export async function createProject(options) {
102
113
  spaces: 2,
103
114
  });
104
115
  }
105
- // Create necessary project directories (skip for cloudflare template)
106
- if (template !== "cloudflare") {
116
+ // Create necessary project directories (skip for cloudflare templates)
117
+ const isCloudflare = platform === "cloudflare";
118
+ if (!isCloudflare) {
107
119
  createProjectDirectories(projectPath);
108
120
  }
109
121
  // Install project dependencies
@@ -113,7 +125,7 @@ export async function createProject(options) {
113
125
  ensureLockfile(projectPath, packageManager);
114
126
  }
115
127
  // Validate project structure meets requirements (skip for cloudflare)
116
- if (template !== "cloudflare") {
128
+ if (!isCloudflare) {
117
129
  const validation = validateProjectStructure(projectPath, !skipIdentity);
118
130
  if (!validation.valid) {
119
131
  console.warn(chalk.yellow("āš ļø Project structure validation issues:"));
@@ -124,7 +136,7 @@ export async function createProject(options) {
124
136
  }
125
137
  }
126
138
  // Identity setup is now handled by the CLI after scaffolding (not for cloudflare)
127
- if (!skipIdentity && template !== "cloudflare") {
139
+ if (!skipIdentity && !isCloudflare) {
128
140
  console.log(chalk.blue("\nšŸ” Identity setup will be handled by the CLI"));
129
141
  console.log(chalk.gray(" Run 'mcpi init' after scaffolding to set up identity"));
130
142
  }
@@ -1 +1 @@
1
- {"version":3,"file":"create.js","sourceRoot":"","sources":["../../src/helpers/create.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"create.js","sourceRoot":"","sources":["../../src/helpers/create.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ interface CloudflareMcpiTemplateOptions {
2
+ packageManager?: string;
3
+ projectName?: string;
4
+ }
5
+ /**
6
+ * Scaffold Cloudflare Worker MCP-I server
7
+ * Combines MCP server (Durable Objects) + verification endpoint (KV cache)
8
+ * Uses agents/mcp for MCP session management and @kya-os/verifier for proofs
9
+ */
10
+ export declare function fetchCloudflareMcpiTemplate(projectPath: string, options?: CloudflareMcpiTemplateOptions): Promise<void>;
11
+ export {};
12
+ //# sourceMappingURL=fetch-cloudflare-mcpi-template.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetch-cloudflare-mcpi-template.d.ts","sourceRoot":"","sources":["../../src/helpers/fetch-cloudflare-mcpi-template.ts"],"names":[],"mappings":"AAIA,UAAU,6BAA6B;IACrC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;GAIG;AACH,wBAAsB,2BAA2B,CAC/C,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,6BAAkC,GAC1C,OAAO,CAAC,IAAI,CAAC,CAsZf"}
@@ -0,0 +1,405 @@
1
+ import fs from "fs-extra";
2
+ import path from "path";
3
+ import chalk from "chalk";
4
+ /**
5
+ * Scaffold Cloudflare Worker MCP-I server
6
+ * Combines MCP server (Durable Objects) + verification endpoint (KV cache)
7
+ * Uses agents/mcp for MCP session management and @kya-os/verifier for proofs
8
+ */
9
+ export async function fetchCloudflareMcpiTemplate(projectPath, options = {}) {
10
+ const { packageManager = "npm", projectName = path.basename(projectPath) } = options;
11
+ // Sanitize project name for class names (remove special chars)
12
+ const className = projectName.replace(/[^a-zA-Z0-9]/g, "");
13
+ try {
14
+ console.log(chalk.blue("šŸ“¦ Setting up Cloudflare Worker MCP-I server..."));
15
+ // Create package.json
16
+ const packageJson = {
17
+ name: projectName,
18
+ version: "0.1.0",
19
+ private: true,
20
+ scripts: {
21
+ deploy: "wrangler deploy",
22
+ dev: "wrangler dev",
23
+ start: "wrangler dev",
24
+ "kv:create": "wrangler kv:namespace create NONCE_CACHE",
25
+ "kv:create:preview": "wrangler kv:namespace create NONCE_CACHE --preview",
26
+ "cf-typegen": "wrangler types",
27
+ "type-check": "tsc --noEmit",
28
+ },
29
+ dependencies: {
30
+ "@modelcontextprotocol/sdk": "^1.19.1",
31
+ "@kya-os/verifier": "^1.3.0",
32
+ "agents": "^0.2.8",
33
+ "hono": "^4.9.10",
34
+ "zod": "^4.1.12",
35
+ },
36
+ devDependencies: {
37
+ "@cloudflare/workers-types": "^4.20240925.0",
38
+ "typescript": "^5.6.2",
39
+ "wrangler": "^4.42.2",
40
+ },
41
+ };
42
+ fs.ensureDirSync(projectPath);
43
+ fs.writeJsonSync(path.join(projectPath, "package.json"), packageJson, { spaces: 2 });
44
+ // Create src directory and tools
45
+ const srcDir = path.join(projectPath, "src");
46
+ const toolsDir = path.join(srcDir, "tools");
47
+ fs.ensureDirSync(toolsDir);
48
+ // Create greet tool (matches Node template structure)
49
+ const greetToolContent = `import { z } from "zod";
50
+
51
+ export const greetTool = {
52
+ name: "greet",
53
+ description: "Greet a user by name",
54
+ inputSchema: z.object({
55
+ name: z.string().describe("The name of the user to greet"),
56
+ }),
57
+ handler: async ({ name }: { name: string }) => {
58
+ return {
59
+ content: [
60
+ {
61
+ type: "text" as const,
62
+ text: \`Hello, \${name}! Welcome to your Cloudflare MCP-I server.\`,
63
+ },
64
+ ],
65
+ };
66
+ },
67
+ };
68
+ `;
69
+ fs.writeFileSync(path.join(toolsDir, "greet.ts"), greetToolContent);
70
+ // Create main index.ts (McpAgent Durable Object + Hono routing)
71
+ const indexContent = `import { McpAgent } from "agents/mcp";
72
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
73
+ import { Hono } from "hono";
74
+ import { cors } from "hono/cors";
75
+ import {
76
+ verifyWorker,
77
+ applyVerificationToResponse,
78
+ createConfigFromEnv,
79
+ type WorkerEnv,
80
+ } from "@kya-os/verifier/worker";
81
+ import { greetTool } from "./tools/greet";
82
+
83
+ /**
84
+ * MCP Durable Object
85
+ * Handles stateful MCP sessions with persistent tool state
86
+ */
87
+ export class ${className}MCP extends McpAgent {
88
+ server = new McpServer({
89
+ name: "${projectName}",
90
+ version: "1.0.0"
91
+ });
92
+
93
+ constructor(state: DurableObjectState, env: Env) {
94
+ super(state, env);
95
+ }
96
+
97
+ async init() {
98
+ // Register tools using same structure as Node template
99
+ this.server.tool(
100
+ greetTool.name,
101
+ greetTool.inputSchema.shape,
102
+ greetTool.handler
103
+ );
104
+ }
105
+ }
106
+
107
+ /**
108
+ * Hono Router
109
+ * Routes MCP and verification endpoints
110
+ */
111
+ const app = new Hono<{ Bindings: WorkerEnv }>();
112
+
113
+ // Enable CORS for MCP client access
114
+ app.use("/*", cors({
115
+ origin: "*",
116
+ allowMethods: ["GET", "POST", "OPTIONS"],
117
+ allowHeaders: ["Content-Type", "Authorization", "mcp-session-id", "mcp-protocol-version"],
118
+ exposeHeaders: ["mcp-session-id"],
119
+ }));
120
+
121
+ // Health check endpoint
122
+ app.get("/health", (c) => {
123
+ return c.json({
124
+ status: "healthy",
125
+ timestamp: new Date().toISOString(),
126
+ });
127
+ });
128
+
129
+ // MCP endpoint (uses Durable Object for session state)
130
+ app.all("/mcp", (c) => {
131
+ return ${className}MCP.serve("/mcp").fetch(c.req.raw, c.env, c.executionCtx);
132
+ });
133
+
134
+ // MCP SSE endpoint (for streaming responses)
135
+ app.all("/sse/*", (c) => {
136
+ return ${className}MCP.serveSSE("/sse").fetch(c.req.raw, c.env, c.executionCtx);
137
+ });
138
+
139
+ // Verification endpoint (uses KV for nonce cache)
140
+ app.post("/verify", async (c) => {
141
+ const config = createConfigFromEnv(c.env, {
142
+ allowMockData: false,
143
+ });
144
+
145
+ const result = await verifyWorker(c.req.raw, config);
146
+
147
+ if (!result.success) {
148
+ return applyVerificationToResponse(result);
149
+ }
150
+
151
+ const agent = result.agentContext;
152
+
153
+ return c.json({
154
+ verified: true,
155
+ agent: {
156
+ did: agent?.did,
157
+ keyId: agent?.keyId,
158
+ scopes: agent?.scopes,
159
+ session: agent?.session,
160
+ },
161
+ timestamp: new Date().toISOString(),
162
+ });
163
+ });
164
+
165
+ export default app;
166
+ `;
167
+ fs.writeFileSync(path.join(srcDir, "index.ts"), indexContent);
168
+ // Create wrangler.toml (Durable Objects for MCP, KV for nonce cache)
169
+ const wranglerContent = `#:schema node_modules/wrangler/config-schema.json
170
+ name = "${projectName}"
171
+ main = "src/index.ts"
172
+ compatibility_date = "2025-06-18"
173
+ compatibility_flags = ["nodejs_compat"]
174
+
175
+ # KV Namespace for nonce cache
176
+ # Run: wrangler kv:namespace create NONCE_CACHE
177
+ # Then replace the id below with the output
178
+ [[kv_namespaces]]
179
+ binding = "NONCE_CACHE"
180
+ id = "your-kv-namespace-id"
181
+
182
+ # Environment variables (non-sensitive)
183
+ [vars]
184
+ KYA_API_URL = "https://knowthat.ai"
185
+ XMCP_I_TS_SKEW_SEC = "120"
186
+ XMCP_I_SESSION_TTL = "1800"
187
+
188
+ # Durable Object binding for MCP sessions
189
+ [[durable_objects.bindings]]
190
+ name = "MCP_OBJECT"
191
+ class_name = "${className}MCP"
192
+
193
+ # Durable Object migrations
194
+ [[migrations]]
195
+ tag = "v1"
196
+ new_sqlite_classes = ["${className}MCP"]
197
+
198
+ # Production environment
199
+ [env.production]
200
+ name = "${projectName}-production"
201
+ vars = { KYA_API_URL = "https://knowthat.ai", XMCP_I_TS_SKEW_SEC = "60" }
202
+
203
+ [[env.production.kv_namespaces]]
204
+ binding = "NONCE_CACHE"
205
+ id = "your-production-kv-namespace-id"
206
+ `;
207
+ fs.writeFileSync(path.join(projectPath, "wrangler.toml"), wranglerContent);
208
+ // Create tsconfig.json
209
+ const tsconfigContent = {
210
+ compilerOptions: {
211
+ target: "ES2022",
212
+ module: "ES2022",
213
+ lib: ["ES2022"],
214
+ types: ["@cloudflare/workers-types"],
215
+ moduleResolution: "bundler",
216
+ resolveJsonModule: true,
217
+ allowSyntheticDefaultImports: true,
218
+ esModuleInterop: true,
219
+ strict: true,
220
+ skipLibCheck: true,
221
+ forceConsistentCasingInFileNames: true,
222
+ },
223
+ include: ["src/**/*"],
224
+ };
225
+ fs.writeJsonSync(path.join(projectPath, "tsconfig.json"), tsconfigContent, { spaces: 2 });
226
+ // Create .gitignore
227
+ const gitignoreContent = `node_modules/
228
+ dist/
229
+ .wrangler/
230
+ .dev.vars
231
+ .env
232
+ .env.local
233
+ *.log
234
+ `;
235
+ fs.writeFileSync(path.join(projectPath, ".gitignore"), gitignoreContent);
236
+ // Create README.md
237
+ const readmeContent = `# ${projectName}
238
+
239
+ MCP-I server running on Cloudflare Workers with identity verification.
240
+
241
+ ## Quick Start
242
+
243
+ ### 1. Install Dependencies
244
+
245
+ \`\`\`bash
246
+ ${packageManager} install
247
+ \`\`\`
248
+
249
+ ### 2. Create KV Namespace
250
+
251
+ \`\`\`bash
252
+ ${packageManager === "npm" ? "npm run" : packageManager} kv:create
253
+ \`\`\`
254
+
255
+ Copy the \`id\` from the output and update \`wrangler.toml\`:
256
+
257
+ \`\`\`toml
258
+ [[kv_namespaces]]
259
+ binding = "NONCE_CACHE"
260
+ id = "your-actual-kv-id-here" # ← Update this
261
+ \`\`\`
262
+
263
+ ### 3. Test Locally
264
+
265
+ \`\`\`bash
266
+ ${packageManager === "npm" ? "npm run" : packageManager} dev
267
+ \`\`\`
268
+
269
+ **Endpoints:**
270
+ - MCP: http://localhost:8787/mcp
271
+ - Verify: http://localhost:8787/verify
272
+ - Health: http://localhost:8787/health
273
+
274
+ ### 4. Deploy to Cloudflare
275
+
276
+ \`\`\`bash
277
+ # Login to Cloudflare (first time only)
278
+ npx wrangler login
279
+
280
+ # Deploy to development
281
+ ${packageManager === "npm" ? "npm run" : packageManager} deploy
282
+
283
+ # Deploy to production
284
+ ${packageManager === "npm" ? "npm run" : packageManager} deploy --env production
285
+ \`\`\`
286
+
287
+ ## Connect with Claude Desktop
288
+
289
+ Add to your \`claude_desktop_config.json\`:
290
+
291
+ \`\`\`json
292
+ {
293
+ "mcpServers": {
294
+ "${projectName}": {
295
+ "command": "npx",
296
+ "args": [
297
+ "mcp-remote",
298
+ "https://your-worker.workers.dev/mcp"
299
+ ]
300
+ }
301
+ }
302
+ }
303
+ \`\`\`
304
+
305
+ ## Adding Tools
306
+
307
+ Create new tools in \`src/tools/\`:
308
+
309
+ \`\`\`typescript
310
+ // src/tools/example.ts
311
+ import { z } from "zod";
312
+
313
+ export const exampleTool = {
314
+ name: "example",
315
+ description: "Example tool description",
316
+ inputSchema: z.object({
317
+ input: z.string().describe("Input parameter"),
318
+ }),
319
+ handler: async ({ input }: { input: string }) => {
320
+ return {
321
+ content: [
322
+ {
323
+ type: "text" as const,
324
+ text: \`Result: \${input}\`
325
+ }
326
+ ],
327
+ };
328
+ },
329
+ };
330
+ \`\`\`
331
+
332
+ Register in \`src/index.ts\`:
333
+
334
+ \`\`\`typescript
335
+ import { exampleTool } from "./tools/example";
336
+
337
+ async init() {
338
+ this.server.tool(
339
+ exampleTool.name,
340
+ exampleTool.inputSchema.shape,
341
+ exampleTool.handler
342
+ );
343
+ }
344
+ \`\`\`
345
+
346
+ ## API Endpoints
347
+
348
+ ### \`GET /health\`
349
+ Health check endpoint.
350
+
351
+ **Response:**
352
+ \`\`\`json
353
+ {
354
+ "status": "healthy",
355
+ "timestamp": "2024-10-10T12:00:00.000Z"
356
+ }
357
+ \`\`\`
358
+
359
+ ### \`POST /mcp\`
360
+ MCP protocol endpoint for tool calls.
361
+
362
+ ### \`POST /verify\`
363
+ Verify MCP-I cryptographic proofs.
364
+
365
+ **Request:**
366
+ \`\`\`json
367
+ {
368
+ "proof": {
369
+ "agentDid": "did:web:example.com",
370
+ "timestamp": 1234567890,
371
+ "nonce": "abc123",
372
+ "signature": "...",
373
+ "publicKey": "..."
374
+ }
375
+ }
376
+ \`\`\`
377
+
378
+ **Response:**
379
+ \`\`\`json
380
+ {
381
+ "verified": true,
382
+ "agent": {
383
+ "did": "did:web:example.com",
384
+ "keyId": "key-123",
385
+ "scopes": ["read", "write"],
386
+ "session": "session-456"
387
+ }
388
+ }
389
+ \`\`\`
390
+
391
+ ## Learn More
392
+
393
+ - [MCP-I Documentation](https://github.com/kya-os/xmcp-i)
394
+ - [Cloudflare Workers](https://developers.cloudflare.com/workers/)
395
+ - [agents/mcp](https://www.npmjs.com/package/agents)
396
+ `;
397
+ fs.writeFileSync(path.join(projectPath, "README.md"), readmeContent);
398
+ console.log(chalk.green("āœ… Cloudflare Worker MCP-I server structure created"));
399
+ }
400
+ catch (error) {
401
+ console.error(chalk.red("Failed to set up Cloudflare Worker MCP-I server:"), error);
402
+ throw error;
403
+ }
404
+ }
405
+ //# sourceMappingURL=fetch-cloudflare-mcpi-template.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetch-cloudflare-mcpi-template.js","sourceRoot":"","sources":["../../src/helpers/fetch-cloudflare-mcpi-template.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -35,7 +35,9 @@ const program = new Command()
35
35
  .option("--mcpi-version <version>", "Specify MCP-I version (e.g., ^1.2.7)")
36
36
  .option("--no-animation", "Skip the black hole animation", false)
37
37
  .option("--fast", "Use shorter animation duration", false)
38
- .option("--template <name>", "Use a specific template (e.g., cloudflare, default)")
38
+ .option("--platform <name>", "Deployment platform: node (default), cloudflare", "node")
39
+ .option("--mode <name>", "Server mode: mcp-i (default), verifier", "mcp-i")
40
+ .option("--template <name>", "[DEPRECATED] Use --platform and --mode instead")
39
41
  .action(async (projectDir, options) => {
40
42
  console.log(chalk.bold(`\ncreate-mcpi-app@${packageJson.version}`));
41
43
  // Show KYA-OS banner
@@ -85,6 +87,36 @@ const program = new Command()
85
87
  let agentName = projectName;
86
88
  let agentDescription = "MCP-I server with identity features";
87
89
  let agentRepository = "";
90
+ // Handle platform and mode flags (with backward compatibility for --template)
91
+ let platform = options.platform || "node";
92
+ let mode = options.mode || "mcp-i";
93
+ // Backward compatibility: map --template to --platform/--mode
94
+ if (options.template) {
95
+ console.log(chalk.yellow("āš ļø --template is deprecated. Use --platform and --mode instead."));
96
+ if (options.template === "cloudflare") {
97
+ platform = "cloudflare";
98
+ mode = "verifier";
99
+ }
100
+ else if (options.template === "default") {
101
+ platform = "node";
102
+ mode = "mcp-i";
103
+ }
104
+ }
105
+ // Validate platform and mode combinations
106
+ const validCombinations = [
107
+ { platform: "node", mode: "mcp-i" },
108
+ { platform: "cloudflare", mode: "mcp-i" },
109
+ { platform: "cloudflare", mode: "verifier" },
110
+ ];
111
+ const isValid = validCombinations.some((combo) => combo.platform === platform && combo.mode === mode);
112
+ if (!isValid) {
113
+ console.error(chalk.red(`\nāŒ Invalid platform/mode combination: ${platform}/${mode}`));
114
+ console.log(chalk.yellow("\nSupported combinations:"));
115
+ console.log(chalk.cyan(" - node + mcp-i (default)"));
116
+ console.log(chalk.cyan(" - cloudflare + mcp-i"));
117
+ console.log(chalk.cyan(" - cloudflare + verifier"));
118
+ process.exit(1);
119
+ }
88
120
  // Handle transport selection from CLI options
89
121
  if (options.http || options.stdio) {
90
122
  transports = [];
@@ -225,7 +257,9 @@ const program = new Command()
225
257
  skipAnimation: options.noAnimation === false ? true : false, // Handle --no-animation flag
226
258
  fastAnimation: options.fast,
227
259
  spinner, // Pass spinner to stop it before animation
228
- template: options.template || "default", // Pass template option
260
+ platform, // Pass platform (node, cloudflare)
261
+ mode, // Pass mode (mcp-i, verifier)
262
+ template: options.template || "default", // Keep for backward compatibility
229
263
  });
230
264
  if (!result.success) {
231
265
  spinner.fail(chalk.red("Failed to create the project."));
@@ -247,9 +281,9 @@ const program = new Command()
247
281
  }
248
282
  console.log();
249
283
  console.log("Next Steps:");
250
- // Show different instructions based on template
251
- if (options.template === "cloudflare") {
252
- // Cloudflare Worker verifier instructions
284
+ // Show different instructions based on platform/mode
285
+ if (platform === "cloudflare") {
286
+ // Cloudflare Worker instructions (both verifier and mcp-i)
253
287
  console.log("1. Install dependencies:");
254
288
  if (resolvedProjectPath !== process.cwd()) {
255
289
  console.log(` cd ${chalk.cyan(projectDir)}`);