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

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,CAwZf"}
@@ -0,0 +1,407 @@
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: WorkerEnv) {
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.description,
102
+ greetTool.inputSchema,
103
+ greetTool.handler
104
+ );
105
+ }
106
+ }
107
+
108
+ /**
109
+ * Hono Router
110
+ * Routes MCP and verification endpoints
111
+ */
112
+ const app = new Hono<{ Bindings: WorkerEnv }>();
113
+
114
+ // Enable CORS for MCP client access
115
+ app.use("/*", cors({
116
+ origin: "*",
117
+ allowMethods: ["GET", "POST", "OPTIONS"],
118
+ allowHeaders: ["Content-Type", "Authorization", "mcp-session-id", "mcp-protocol-version"],
119
+ exposeHeaders: ["mcp-session-id"],
120
+ }));
121
+
122
+ // Health check endpoint
123
+ app.get("/health", (c) => {
124
+ return c.json({
125
+ status: "healthy",
126
+ timestamp: new Date().toISOString(),
127
+ });
128
+ });
129
+
130
+ // MCP endpoint (uses Durable Object for session state)
131
+ app.all("/mcp", (c) => {
132
+ return ${className}MCP.serve("/mcp").fetch(c.req.raw, c.env, c.executionCtx);
133
+ });
134
+
135
+ // MCP SSE endpoint (for streaming responses)
136
+ app.all("/sse/*", (c) => {
137
+ return ${className}MCP.serveSSE("/sse").fetch(c.req.raw, c.env, c.executionCtx);
138
+ });
139
+
140
+ // Verification endpoint (uses KV for nonce cache)
141
+ app.post("/verify", async (c) => {
142
+ const config = createConfigFromEnv(c.env, {
143
+ allowMockData: false,
144
+ });
145
+
146
+ const result = await verifyWorker(c.req.raw, config);
147
+
148
+ if (!result.success) {
149
+ return applyVerificationToResponse(result);
150
+ }
151
+
152
+ const agent = result.agentContext;
153
+
154
+ return c.json({
155
+ verified: true,
156
+ agent: {
157
+ did: agent?.did,
158
+ keyId: agent?.keyId,
159
+ scopes: agent?.scopes,
160
+ session: agent?.session,
161
+ },
162
+ timestamp: new Date().toISOString(),
163
+ });
164
+ });
165
+
166
+ export default app;
167
+ `;
168
+ fs.writeFileSync(path.join(srcDir, "index.ts"), indexContent);
169
+ // Create wrangler.toml (Durable Objects for MCP, KV for nonce cache)
170
+ const wranglerContent = `#:schema node_modules/wrangler/config-schema.json
171
+ name = "${projectName}"
172
+ main = "src/index.ts"
173
+ compatibility_date = "2025-06-18"
174
+ compatibility_flags = ["nodejs_compat"]
175
+
176
+ # KV Namespace for nonce cache
177
+ # Run: wrangler kv:namespace create NONCE_CACHE
178
+ # Then replace the id below with the output
179
+ [[kv_namespaces]]
180
+ binding = "NONCE_CACHE"
181
+ id = "your-kv-namespace-id"
182
+
183
+ # Environment variables (non-sensitive)
184
+ [vars]
185
+ KYA_API_URL = "https://knowthat.ai"
186
+ XMCP_I_TS_SKEW_SEC = "120"
187
+ XMCP_I_SESSION_TTL = "1800"
188
+
189
+ # Durable Object binding for MCP sessions
190
+ [[durable_objects.bindings]]
191
+ name = "MCP_OBJECT"
192
+ class_name = "${className}MCP"
193
+
194
+ # Durable Object migrations
195
+ [[migrations]]
196
+ tag = "v1"
197
+ new_sqlite_classes = ["${className}MCP"]
198
+
199
+ # Production environment
200
+ [env.production]
201
+ name = "${projectName}-production"
202
+ vars = { KYA_API_URL = "https://knowthat.ai", XMCP_I_TS_SKEW_SEC = "60" }
203
+
204
+ [[env.production.kv_namespaces]]
205
+ binding = "NONCE_CACHE"
206
+ id = "your-production-kv-namespace-id"
207
+ `;
208
+ fs.writeFileSync(path.join(projectPath, "wrangler.toml"), wranglerContent);
209
+ // Create tsconfig.json
210
+ const tsconfigContent = {
211
+ compilerOptions: {
212
+ target: "ES2022",
213
+ module: "ES2022",
214
+ lib: ["ES2022"],
215
+ types: ["@cloudflare/workers-types"],
216
+ moduleResolution: "bundler",
217
+ resolveJsonModule: true,
218
+ allowSyntheticDefaultImports: true,
219
+ esModuleInterop: true,
220
+ strict: true,
221
+ skipLibCheck: true,
222
+ forceConsistentCasingInFileNames: true,
223
+ },
224
+ include: ["src/**/*"],
225
+ };
226
+ fs.writeJsonSync(path.join(projectPath, "tsconfig.json"), tsconfigContent, { spaces: 2 });
227
+ // Create .gitignore
228
+ const gitignoreContent = `node_modules/
229
+ dist/
230
+ .wrangler/
231
+ .dev.vars
232
+ .env
233
+ .env.local
234
+ *.log
235
+ `;
236
+ fs.writeFileSync(path.join(projectPath, ".gitignore"), gitignoreContent);
237
+ // Create README.md
238
+ const readmeContent = `# ${projectName}
239
+
240
+ MCP-I server running on Cloudflare Workers with identity verification.
241
+
242
+ ## Quick Start
243
+
244
+ ### 1. Install Dependencies
245
+
246
+ \`\`\`bash
247
+ ${packageManager} install
248
+ \`\`\`
249
+
250
+ ### 2. Create KV Namespace
251
+
252
+ \`\`\`bash
253
+ ${packageManager === "npm" ? "npm run" : packageManager} kv:create
254
+ \`\`\`
255
+
256
+ Copy the \`id\` from the output and update \`wrangler.toml\`:
257
+
258
+ \`\`\`toml
259
+ [[kv_namespaces]]
260
+ binding = "NONCE_CACHE"
261
+ id = "your-actual-kv-id-here" # ← Update this
262
+ \`\`\`
263
+
264
+ ### 3. Test Locally
265
+
266
+ \`\`\`bash
267
+ ${packageManager === "npm" ? "npm run" : packageManager} dev
268
+ \`\`\`
269
+
270
+ **Endpoints:**
271
+ - MCP: http://localhost:8787/mcp
272
+ - Verify: http://localhost:8787/verify
273
+ - Health: http://localhost:8787/health
274
+
275
+ ### 4. Deploy to Cloudflare
276
+
277
+ \`\`\`bash
278
+ # Login to Cloudflare (first time only)
279
+ npx wrangler login
280
+
281
+ # Deploy to development
282
+ ${packageManager === "npm" ? "npm run" : packageManager} deploy
283
+
284
+ # Deploy to production
285
+ ${packageManager === "npm" ? "npm run" : packageManager} deploy --env production
286
+ \`\`\`
287
+
288
+ ## Connect with Claude Desktop
289
+
290
+ Add to your \`claude_desktop_config.json\`:
291
+
292
+ \`\`\`json
293
+ {
294
+ "mcpServers": {
295
+ "${projectName}": {
296
+ "command": "npx",
297
+ "args": [
298
+ "mcp-remote",
299
+ "https://your-worker.workers.dev/mcp"
300
+ ]
301
+ }
302
+ }
303
+ }
304
+ \`\`\`
305
+
306
+ ## Adding Tools
307
+
308
+ Create new tools in \`src/tools/\`:
309
+
310
+ \`\`\`typescript
311
+ // src/tools/example.ts
312
+ import { z } from "zod";
313
+
314
+ export const exampleTool = {
315
+ name: "example",
316
+ description: "Example tool description",
317
+ inputSchema: z.object({
318
+ input: z.string().describe("Input parameter"),
319
+ }),
320
+ handler: async ({ input }: { input: string }) => {
321
+ return {
322
+ content: [
323
+ {
324
+ type: "text" as const,
325
+ text: \`Result: \${input}\`
326
+ }
327
+ ],
328
+ };
329
+ },
330
+ };
331
+ \`\`\`
332
+
333
+ Register in \`src/index.ts\`:
334
+
335
+ \`\`\`typescript
336
+ import { exampleTool } from "./tools/example";
337
+
338
+ async init() {
339
+ this.server.tool(
340
+ exampleTool.name,
341
+ exampleTool.description,
342
+ exampleTool.inputSchema,
343
+ exampleTool.handler
344
+ );
345
+ }
346
+ \`\`\`
347
+
348
+ ## API Endpoints
349
+
350
+ ### \`GET /health\`
351
+ Health check endpoint.
352
+
353
+ **Response:**
354
+ \`\`\`json
355
+ {
356
+ "status": "healthy",
357
+ "timestamp": "2024-10-10T12:00:00.000Z"
358
+ }
359
+ \`\`\`
360
+
361
+ ### \`POST /mcp\`
362
+ MCP protocol endpoint for tool calls.
363
+
364
+ ### \`POST /verify\`
365
+ Verify MCP-I cryptographic proofs.
366
+
367
+ **Request:**
368
+ \`\`\`json
369
+ {
370
+ "proof": {
371
+ "agentDid": "did:web:example.com",
372
+ "timestamp": 1234567890,
373
+ "nonce": "abc123",
374
+ "signature": "...",
375
+ "publicKey": "..."
376
+ }
377
+ }
378
+ \`\`\`
379
+
380
+ **Response:**
381
+ \`\`\`json
382
+ {
383
+ "verified": true,
384
+ "agent": {
385
+ "did": "did:web:example.com",
386
+ "keyId": "key-123",
387
+ "scopes": ["read", "write"],
388
+ "session": "session-456"
389
+ }
390
+ }
391
+ \`\`\`
392
+
393
+ ## Learn More
394
+
395
+ - [MCP-I Documentation](https://github.com/kya-os/xmcp-i)
396
+ - [Cloudflare Workers](https://developers.cloudflare.com/workers/)
397
+ - [agents/mcp](https://www.npmjs.com/package/agents)
398
+ `;
399
+ fs.writeFileSync(path.join(projectPath, "README.md"), readmeContent);
400
+ console.log(chalk.green("āœ… Cloudflare Worker MCP-I server structure created"));
401
+ }
402
+ catch (error) {
403
+ console.error(chalk.red("Failed to set up Cloudflare Worker MCP-I server:"), error);
404
+ throw error;
405
+ }
406
+ }
407
+ //# 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)}`);