@kya-os/create-mcpi-app 0.6.4-canary.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 (110) hide show
  1. package/.eslintrc.cjs +10 -0
  2. package/.turbo/turbo-build.log +25 -0
  3. package/README.md +290 -0
  4. package/dist/bundles/blank.js +98817 -0
  5. package/dist/bundles/ecommerce.js +98891 -0
  6. package/dist/bundles/hardware-world.js +99289 -0
  7. package/dist/bundles/manifest.json +23 -0
  8. package/dist/cli-runner.d.ts +2 -0
  9. package/dist/cli-runner.d.ts.map +1 -0
  10. package/dist/cli-runner.js +407 -0
  11. package/dist/cli-runner.js.map +1 -0
  12. package/dist/effects/index.d.ts +14 -0
  13. package/dist/effects/index.d.ts.map +1 -0
  14. package/dist/effects/index.js +51 -0
  15. package/dist/effects/index.js.map +1 -0
  16. package/dist/helpers/apply-identity-preset.d.ts +14 -0
  17. package/dist/helpers/apply-identity-preset.d.ts.map +1 -0
  18. package/dist/helpers/apply-identity-preset.js +169 -0
  19. package/dist/helpers/apply-identity-preset.js.map +1 -0
  20. package/dist/helpers/config-builder.d.ts +53 -0
  21. package/dist/helpers/config-builder.d.ts.map +1 -0
  22. package/dist/helpers/config-builder.js +46 -0
  23. package/dist/helpers/config-builder.js.map +1 -0
  24. package/dist/helpers/copy-template.d.ts +2 -0
  25. package/dist/helpers/copy-template.d.ts.map +1 -0
  26. package/dist/helpers/copy-template.js +11 -0
  27. package/dist/helpers/copy-template.js.map +1 -0
  28. package/dist/helpers/create.d.ts +31 -0
  29. package/dist/helpers/create.d.ts.map +1 -0
  30. package/dist/helpers/create.js +136 -0
  31. package/dist/helpers/create.js.map +1 -0
  32. package/dist/helpers/fetch-cloudflare-mcpi-template.d.ts +25 -0
  33. package/dist/helpers/fetch-cloudflare-mcpi-template.d.ts.map +1 -0
  34. package/dist/helpers/fetch-cloudflare-mcpi-template.js +558 -0
  35. package/dist/helpers/fetch-cloudflare-mcpi-template.js.map +1 -0
  36. package/dist/helpers/fetch-cloudflare-template.d.ts +11 -0
  37. package/dist/helpers/fetch-cloudflare-template.d.ts.map +1 -0
  38. package/dist/helpers/fetch-cloudflare-template.js +338 -0
  39. package/dist/helpers/fetch-cloudflare-template.js.map +1 -0
  40. package/dist/helpers/fetch-mcpi-template.d.ts +13 -0
  41. package/dist/helpers/fetch-mcpi-template.d.ts.map +1 -0
  42. package/dist/helpers/fetch-mcpi-template.js +237 -0
  43. package/dist/helpers/fetch-mcpi-template.js.map +1 -0
  44. package/dist/helpers/fetch-xmcp-template.d.ts +13 -0
  45. package/dist/helpers/fetch-xmcp-template.d.ts.map +1 -0
  46. package/dist/helpers/fetch-xmcp-template.js +127 -0
  47. package/dist/helpers/fetch-xmcp-template.js.map +1 -0
  48. package/dist/helpers/generate-cloudflare-files.d.ts +89 -0
  49. package/dist/helpers/generate-cloudflare-files.d.ts.map +1 -0
  50. package/dist/helpers/generate-cloudflare-files.js +1541 -0
  51. package/dist/helpers/generate-cloudflare-files.js.map +1 -0
  52. package/dist/helpers/generate-config.d.ts +2 -0
  53. package/dist/helpers/generate-config.d.ts.map +1 -0
  54. package/dist/helpers/generate-config.js +105 -0
  55. package/dist/helpers/generate-config.js.map +1 -0
  56. package/dist/helpers/generate-identity.d.ts +38 -0
  57. package/dist/helpers/generate-identity.d.ts.map +1 -0
  58. package/dist/helpers/generate-identity.js +123 -0
  59. package/dist/helpers/generate-identity.js.map +1 -0
  60. package/dist/helpers/get-package-versions.d.ts +37 -0
  61. package/dist/helpers/get-package-versions.d.ts.map +1 -0
  62. package/dist/helpers/get-package-versions.js +92 -0
  63. package/dist/helpers/get-package-versions.js.map +1 -0
  64. package/dist/helpers/identity-manager.d.ts +23 -0
  65. package/dist/helpers/identity-manager.d.ts.map +1 -0
  66. package/dist/helpers/identity-manager.js +144 -0
  67. package/dist/helpers/identity-manager.js.map +1 -0
  68. package/dist/helpers/index.d.ts +14 -0
  69. package/dist/helpers/index.d.ts.map +1 -0
  70. package/dist/helpers/index.js +18 -0
  71. package/dist/helpers/index.js.map +1 -0
  72. package/dist/helpers/install.d.ts +3 -0
  73. package/dist/helpers/install.d.ts.map +1 -0
  74. package/dist/helpers/install.js +57 -0
  75. package/dist/helpers/install.js.map +1 -0
  76. package/dist/helpers/kta-registration.d.ts +58 -0
  77. package/dist/helpers/kta-registration.d.ts.map +1 -0
  78. package/dist/helpers/kta-registration.js +77 -0
  79. package/dist/helpers/kta-registration.js.map +1 -0
  80. package/dist/helpers/rename.d.ts +2 -0
  81. package/dist/helpers/rename.d.ts.map +1 -0
  82. package/dist/helpers/rename.js +15 -0
  83. package/dist/helpers/rename.js.map +1 -0
  84. package/dist/helpers/validate-project-structure.d.ts +14 -0
  85. package/dist/helpers/validate-project-structure.d.ts.map +1 -0
  86. package/dist/helpers/validate-project-structure.js +102 -0
  87. package/dist/helpers/validate-project-structure.js.map +1 -0
  88. package/dist/index.d.ts +3 -0
  89. package/dist/index.d.ts.map +1 -0
  90. package/dist/index.js +18 -0
  91. package/dist/index.js.map +1 -0
  92. package/dist/utils/check-node.d.ts +2 -0
  93. package/dist/utils/check-node.d.ts.map +1 -0
  94. package/dist/utils/check-node.js +12 -0
  95. package/dist/utils/check-node.js.map +1 -0
  96. package/dist/utils/fetch-remote-config.d.ts +74 -0
  97. package/dist/utils/fetch-remote-config.d.ts.map +1 -0
  98. package/dist/utils/fetch-remote-config.js +109 -0
  99. package/dist/utils/fetch-remote-config.js.map +1 -0
  100. package/dist/utils/is-folder-empty.d.ts +2 -0
  101. package/dist/utils/is-folder-empty.d.ts.map +1 -0
  102. package/dist/utils/is-folder-empty.js +55 -0
  103. package/dist/utils/is-folder-empty.js.map +1 -0
  104. package/dist/utils/validate-project-name.d.ts +15 -0
  105. package/dist/utils/validate-project-name.d.ts.map +1 -0
  106. package/dist/utils/validate-project-name.js +106 -0
  107. package/dist/utils/validate-project-name.js.map +1 -0
  108. package/index.js +4 -0
  109. package/package.json +73 -0
  110. package/vitest.integration.config.ts +16 -0
@@ -0,0 +1,338 @@
1
+ import fs from "fs-extra";
2
+ import path from "path";
3
+ import chalk from "chalk";
4
+ /**
5
+ * Scaffold Cloudflare Worker verifier project
6
+ * This creates a standalone Worker verifier with KV nonce caching
7
+ */
8
+ export async function fetchCloudflareTemplate(projectPath, options = {}) {
9
+ const { verifierVersion = "^1.3.4", packageManager = "npm" } = options;
10
+ try {
11
+ console.log(chalk.blue(`📦 Setting up Cloudflare Worker verifier with @kya-os/verifier@${verifierVersion}...`));
12
+ // Create package.json for Cloudflare Worker
13
+ const packageJson = {
14
+ name: path.basename(projectPath),
15
+ version: "1.0.0",
16
+ type: "module",
17
+ private: true,
18
+ scripts: {
19
+ dev: "wrangler dev",
20
+ deploy: "wrangler deploy",
21
+ "deploy:production": "wrangler deploy --env production",
22
+ "kv:create": "wrangler kv namespace create NONCE_CACHE",
23
+ "kv:create:preview": "wrangler kv namespace create NONCE_CACHE --preview",
24
+ tail: "wrangler tail",
25
+ test: "vitest",
26
+ },
27
+ dependencies: {
28
+ "@kya-os/verifier": verifierVersion,
29
+ },
30
+ devDependencies: {
31
+ "@cloudflare/workers-types": "^4.20240925.0",
32
+ "@cloudflare/vitest-pool-workers": "^0.5.0",
33
+ typescript: "^5.6.2",
34
+ vitest: "^2.1.5",
35
+ wrangler: "^4.42.2",
36
+ },
37
+ };
38
+ // Write package.json
39
+ fs.ensureDirSync(projectPath);
40
+ fs.writeJsonSync(path.join(projectPath, "package.json"), packageJson, { spaces: 2 });
41
+ // Create src directory
42
+ const srcDir = path.join(projectPath, "src");
43
+ fs.ensureDirSync(srcDir);
44
+ // Create Worker implementation
45
+ const workerContent = `import {
46
+ verifyWorker,
47
+ applyVerificationToResponse,
48
+ createConfigFromEnv,
49
+ type WorkerEnv,
50
+ } from "@kya-os/verifier/worker";
51
+
52
+ export default {
53
+ async fetch(request: Request, env: WorkerEnv): Promise<Response> {
54
+ const url = new URL(request.url);
55
+
56
+ // Health check endpoint
57
+ if (url.pathname === "/health") {
58
+ return new Response(
59
+ JSON.stringify({
60
+ status: "healthy",
61
+ timestamp: new Date().toISOString(),
62
+ }),
63
+ {
64
+ headers: { "Content-Type": "application/json" },
65
+ }
66
+ );
67
+ }
68
+
69
+ // Verification endpoint
70
+ if (url.pathname === "/verify") {
71
+ // Create config from environment variables
72
+ const config = createConfigFromEnv(env, {
73
+ allowMockData: false,
74
+ });
75
+
76
+ // Verify the proof
77
+ const result = await verifyWorker(request, config);
78
+
79
+ // If verification failed, return error response
80
+ if (!result.success) {
81
+ return applyVerificationToResponse(result);
82
+ }
83
+
84
+ // Success - extract agent context
85
+ const agent = result.agentContext;
86
+
87
+ // Check required scopes (example)
88
+ const requiredScopes = ["cart:add", "checkout"];
89
+ const hasRequiredScope = requiredScopes.some((scope) =>
90
+ agent?.scopes?.includes(scope)
91
+ );
92
+
93
+ if (!hasRequiredScope) {
94
+ return new Response(
95
+ JSON.stringify({
96
+ verified: false,
97
+ error: "Insufficient permissions",
98
+ requiredScopes,
99
+ providedScopes: agent?.scopes || [],
100
+ }),
101
+ {
102
+ status: 403,
103
+ headers: { "Content-Type": "application/json" },
104
+ }
105
+ );
106
+ }
107
+
108
+ // Success response with agent context
109
+ return new Response(
110
+ JSON.stringify({
111
+ verified: true,
112
+ agent: {
113
+ did: agent?.did,
114
+ kid: agent?.kid,
115
+ scopes: agent?.scopes,
116
+ session: agent?.session,
117
+ },
118
+ timestamp: new Date().toISOString(),
119
+ }),
120
+ {
121
+ headers: { "Content-Type": "application/json" },
122
+ }
123
+ );
124
+ }
125
+
126
+ return new Response("Not Found", { status: 404 });
127
+ },
128
+ };
129
+ `;
130
+ fs.writeFileSync(path.join(srcDir, "index.ts"), workerContent);
131
+ // Create wrangler.toml
132
+ const wranglerContent = `#:schema node_modules/wrangler/config-schema.json
133
+ name = "${path.basename(projectPath)}"
134
+ main = "src/index.ts"
135
+ compatibility_date = "2025-01-01"
136
+ compatibility_flags = ["nodejs_compat"]
137
+
138
+ # KV Namespace for nonce cache
139
+ # Run: wrangler kv:namespace create NONCE_CACHE
140
+ # Then replace the id below with the output
141
+ [[kv_namespaces]]
142
+ binding = "NONCE_CACHE"
143
+ id = "YOUR_KV_NAMESPACE_ID"
144
+
145
+ # Environment variables (non-sensitive)
146
+ [vars]
147
+ KYA_API_URL = "https://knowthat.ai"
148
+ XMCP_I_TS_SKEW_SEC = "120"
149
+ XMCP_I_SESSION_TTL = "1800"
150
+
151
+ # Production environment
152
+ [env.production]
153
+ name = "${path.basename(projectPath)}-production"
154
+ vars = { KYA_API_URL = "https://knowthat.ai", XMCP_I_TS_SKEW_SEC = "60" }
155
+
156
+ [[env.production.kv_namespaces]]
157
+ binding = "NONCE_CACHE"
158
+ id = "YOUR_PRODUCTION_KV_NAMESPACE_ID"
159
+ `;
160
+ fs.writeFileSync(path.join(projectPath, "wrangler.toml"), wranglerContent);
161
+ // Create tsconfig.json
162
+ const tsconfigContent = {
163
+ compilerOptions: {
164
+ target: "ES2022",
165
+ module: "ES2022",
166
+ lib: ["ES2022"],
167
+ types: ["@cloudflare/workers-types"],
168
+ moduleResolution: "bundler",
169
+ resolveJsonModule: true,
170
+ allowSyntheticDefaultImports: true,
171
+ esModuleInterop: true,
172
+ strict: true,
173
+ skipLibCheck: true,
174
+ forceConsistentCasingInFileNames: true,
175
+ },
176
+ include: ["src/**/*"],
177
+ };
178
+ fs.writeJsonSync(path.join(projectPath, "tsconfig.json"), tsconfigContent, { spaces: 2 });
179
+ // Create .gitignore
180
+ const gitignoreContent = `node_modules/
181
+ dist/
182
+ .wrangler/
183
+ .dev.vars
184
+ .env
185
+ .env.local
186
+ *.log
187
+ `;
188
+ fs.writeFileSync(path.join(projectPath, ".gitignore"), gitignoreContent);
189
+ // Create README.md
190
+ const readmeContent = `# ${path.basename(projectPath)}
191
+
192
+ MCP-I proof verifier deployed on Cloudflare Workers with KV nonce caching.
193
+
194
+ ## Quick Start
195
+
196
+ ### 1. Install Dependencies
197
+
198
+ \`\`\`bash
199
+ ${packageManager} install
200
+ \`\`\`
201
+
202
+ ### 2. Create KV Namespace
203
+
204
+ \`\`\`bash
205
+ ${packageManager === "npm" ? "npm run" : packageManager} kv:create
206
+ \`\`\`
207
+
208
+ Copy the \`id\` from the output and update \`wrangler.toml\`:
209
+
210
+ \`\`\`toml
211
+ [[kv_namespaces]]
212
+ binding = "NONCE_CACHE"
213
+ id = "your-kv-namespace-id-here" # ← Update this
214
+ \`\`\`
215
+
216
+ ### 3. Test Locally
217
+
218
+ \`\`\`bash
219
+ ${packageManager === "npm" ? "npm run" : packageManager} dev
220
+ \`\`\`
221
+
222
+ Visit http://localhost:8787/health to verify it's running.
223
+
224
+ ### 4. Deploy to Cloudflare
225
+
226
+ \`\`\`bash
227
+ # Login to Cloudflare (first time only)
228
+ npx wrangler login
229
+
230
+ # Deploy to development
231
+ ${packageManager === "npm" ? "npm run" : packageManager} deploy
232
+
233
+ # Deploy to production
234
+ ${packageManager === "npm" ? "npm run" : packageManager} deploy:production
235
+ \`\`\`
236
+
237
+ ## API Endpoints
238
+
239
+ ### \`GET /health\`
240
+ Health check endpoint.
241
+
242
+ **Response:**
243
+ \`\`\`json
244
+ {
245
+ "status": "healthy",
246
+ "timestamp": "2024-10-09T12:00:00.000Z"
247
+ }
248
+ \`\`\`
249
+
250
+ ### \`POST /verify\`
251
+ Verify MCP-I cryptographic proof.
252
+
253
+ **Request:**
254
+ \`\`\`json
255
+ {
256
+ "proof": {
257
+ "agentDid": "did:web:example.com",
258
+ "timestamp": 1234567890,
259
+ "nonce": "abc123",
260
+ "signature": "...",
261
+ "publicKey": "..."
262
+ },
263
+ "requiredScopes": ["cart:add"]
264
+ }
265
+ \`\`\`
266
+
267
+ **Response (Success):**
268
+ \`\`\`json
269
+ {
270
+ "verified": true,
271
+ "agentDid": "did:web:example.com",
272
+ "timestamp": "2024-10-09T12:00:00.000Z"
273
+ }
274
+ \`\`\`
275
+
276
+ **Response (Failed):**
277
+ \`\`\`json
278
+ {
279
+ "verified": false,
280
+ "error": "Invalid signature"
281
+ }
282
+ \`\`\`
283
+
284
+ ## Configuration
285
+
286
+ ### Environment Variables (wrangler.toml)
287
+
288
+ - \`KYA_API_URL\` - KYA API endpoint (default: https://knowthat.ai)
289
+ - \`XMCP_I_TS_SKEW_SEC\` - Clock skew tolerance in seconds (default: 120)
290
+ - \`XMCP_I_SESSION_TTL\` - Session timeout in seconds (default: 1800)
291
+
292
+ ### KV Namespace
293
+
294
+ The Worker uses Cloudflare KV for distributed nonce caching to prevent replay attacks.
295
+
296
+ Create separate namespaces for development and production:
297
+
298
+ \`\`\`bash
299
+ # Development
300
+ ${packageManager === "npm" ? "npm run" : packageManager} kv:create
301
+
302
+ # Production (after deploying once)
303
+ wrangler kv:namespace create NONCE_CACHE --env production
304
+ \`\`\`
305
+
306
+ ## Testing
307
+
308
+ Send a test request:
309
+
310
+ \`\`\`bash
311
+ curl -X POST https://your-worker.workers.dev/verify \\
312
+ -H "Content-Type: application/json" \\
313
+ -d '{
314
+ "proof": {
315
+ "agentDid": "did:web:example.com",
316
+ "timestamp": 1234567890,
317
+ "nonce": "test123",
318
+ "signature": "...",
319
+ "publicKey": "..."
320
+ }
321
+ }'
322
+ \`\`\`
323
+
324
+ ## Learn More
325
+
326
+ - [MCP-I Documentation](https://github.com/kya-os/xmcp-i)
327
+ - [Cloudflare Workers Docs](https://developers.cloudflare.com/workers/)
328
+ - [Cloudflare KV Docs](https://developers.cloudflare.com/kv/)
329
+ `;
330
+ fs.writeFileSync(path.join(projectPath, "README.md"), readmeContent);
331
+ console.log(chalk.green("✅ Cloudflare Worker verifier structure created"));
332
+ }
333
+ catch (error) {
334
+ console.error(chalk.red("Failed to set up Cloudflare Worker verifier:"), error);
335
+ throw error;
336
+ }
337
+ }
338
+ //# sourceMappingURL=fetch-cloudflare-template.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetch-cloudflare-template.js","sourceRoot":"","sources":["../../src/helpers/fetch-cloudflare-template.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ interface ScaffoldTemplateOptions {
2
+ mcpiVersion?: string;
3
+ packageManager?: string;
4
+ skipIdentity?: boolean;
5
+ register?: boolean;
6
+ }
7
+ /**
8
+ * Scaffold MCP-I project using @kya-os/mcp-i package
9
+ * This creates a standalone MCP server with built-in identity features
10
+ */
11
+ export declare function fetchMCPITemplate(projectPath: string, options?: ScaffoldTemplateOptions): Promise<void>;
12
+ export {};
13
+ //# sourceMappingURL=fetch-mcpi-template.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetch-mcpi-template.d.ts","sourceRoot":"","sources":["../../src/helpers/fetch-mcpi-template.ts"],"names":[],"mappings":"AAaA,UAAU,uBAAuB;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CACrC,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,uBAA4B,GACpC,OAAO,CAAC,IAAI,CAAC,CA4Qf"}
@@ -0,0 +1,237 @@
1
+ import fs from "fs-extra";
2
+ import path from "path";
3
+ import chalk from "chalk";
4
+ import { generateIdentity } from "./generate-identity.js";
5
+ import { getPackageVersions } from "./get-package-versions.js";
6
+ import { registerWithKTA, createKTARegistration, } from "./kta-registration.js";
7
+ /**
8
+ * Scaffold MCP-I project using @kya-os/mcp-i package
9
+ * This creates a standalone MCP server with built-in identity features
10
+ */
11
+ export async function fetchMCPITemplate(projectPath, options = {}) {
12
+ const { packageManager = "npm", skipIdentity = false } = options;
13
+ // Get versions from scaffolder's package.json (single source of truth)
14
+ // This ensures scaffolded projects use tested, consistent versions
15
+ const versions = await getPackageVersions();
16
+ const mcpiVersion = options.mcpiVersion || versions["@kya-os/mcp-i"];
17
+ try {
18
+ console.log(chalk.blue(`📦 Setting up MCP-I project with @kya-os/mcp-i@${mcpiVersion}...`));
19
+ // Create package.json matching our working test-mcpi structure
20
+ const packageJson = {
21
+ name: path.basename(projectPath),
22
+ version: "0.1.0",
23
+ dependencies: {
24
+ "@kya-os/cli": versions["@kya-os/cli"],
25
+ "@kya-os/mcp-i": mcpiVersion,
26
+ zod: "^3.25.76",
27
+ },
28
+ scripts: {
29
+ dev: "mcpi dev",
30
+ build: "mcpi build",
31
+ start: "mcpi start",
32
+ init: "mcpi init",
33
+ register: "mcpi register",
34
+ "keys:rotate": "mcpi rotate",
35
+ "identity:clean": "rm -rf .mcpi",
36
+ status: "mcpi status",
37
+ },
38
+ devDependencies: {
39
+ "@modelcontextprotocol/inspector": "^0.16.6",
40
+ "swc-loader": "^0.2.6",
41
+ },
42
+ };
43
+ // Write package.json
44
+ fs.ensureDirSync(projectPath);
45
+ fs.writeJsonSync(path.join(projectPath, "package.json"), packageJson, {
46
+ spaces: 2,
47
+ });
48
+ // Create basic MCP-I project structure
49
+ const srcDir = path.join(projectPath, "src");
50
+ const toolsDir = path.join(srcDir, "tools");
51
+ // Create required directories
52
+ fs.ensureDirSync(toolsDir);
53
+ // Optional directories (not created by default - users can add as needed)
54
+ // These are typically only needed for:
55
+ // - scenarios/: Demo/testing scenarios (like bouncer-demo)
56
+ // - lib/: Shared utilities (if project grows complex)
57
+ // - scripts/: Build/utility scripts (if needed)
58
+ // - docs/: Documentation (if maintaining separate docs)
59
+ // Create a basic greet tool (MCP-I default)
60
+ // CRITICAL: Import from @kya-os/mcp-i (not xmcp)
61
+ const greetToolContent = `import { z } from "zod";
62
+ import { type InferSchema, type ToolMetadata } from "@kya-os/mcp-i";
63
+
64
+ // Define the schema for tool parameters
65
+ export const schema = {
66
+ name: z.string().describe("The name of the user to greet"),
67
+ };
68
+
69
+ // Define tool metadata
70
+ export const metadata: ToolMetadata = {
71
+ name: "greet",
72
+ description: "Greet the user",
73
+ };
74
+
75
+ // Tool implementation
76
+ export default async function greet({ name }: InferSchema<typeof schema>) {
77
+ return {
78
+ content: [
79
+ {
80
+ type: "text" as const,
81
+ text: \`Hello, \${name}!\`,
82
+ },
83
+ ],
84
+ };
85
+ }
86
+ `;
87
+ fs.writeFileSync(path.join(toolsDir, "greet.ts"), greetToolContent);
88
+ // IMPORTANT: DO NOT create tools/index.ts
89
+ // This would cause duplicate tool registration in webpack bundling
90
+ // Create xmcp.config.ts with identity features enabled (matching test-mcpi)
91
+ const configContent = `import type { XmcpConfig } from "@kya-os/mcp-i";
92
+
93
+ const config: XmcpConfig = {
94
+ // Point to the tools directory
95
+ paths: {
96
+ tools: "./src/tools",
97
+ },
98
+
99
+ // Enable MCP-I identity features
100
+ identity: {
101
+ enabled: true,
102
+ environment: "development",
103
+ debug: true,
104
+ },
105
+
106
+ // Enable STDIO transport for Claude Desktop
107
+ stdio: true,
108
+ };
109
+
110
+ export default config;
111
+ `;
112
+ fs.writeFileSync(path.join(projectPath, "xmcp.config.ts"), configContent);
113
+ // Create .gitignore
114
+ const gitignoreContent = `node_modules/
115
+ dist/
116
+ .env
117
+ .env.local
118
+ .mcpi/
119
+ `;
120
+ fs.writeFileSync(path.join(projectPath, ".gitignore"), gitignoreContent);
121
+ // Create README.md with quick start instructions
122
+ const readmeContent = `# ${path.basename(projectPath)}
123
+
124
+ MCP-I server with cryptographic identity built-in.
125
+
126
+ ## Getting Started
127
+
128
+ 1. Install dependencies:
129
+ \`\`\`bash
130
+ npm install
131
+ \`\`\`
132
+
133
+ 2. Initialize identity (generates cryptographic keys):
134
+ \`\`\`bash
135
+ npm run init
136
+ \`\`\`
137
+
138
+ 3. Start development server:
139
+ \`\`\`bash
140
+ npm run dev
141
+ \`\`\`
142
+
143
+ ## Scripts
144
+
145
+ - \`npm run dev\` - Start development server with hot reload
146
+ - \`npm run build\` - Build production bundle
147
+ - \`npm run start\` - Start production server
148
+ - \`npm run init\` - Initialize agent identity
149
+ - \`npm run status\` - Check identity and server status
150
+ - \`npm run keys:rotate\` - Rotate cryptographic keys
151
+
152
+ ## Project Structure
153
+
154
+ \`\`\`
155
+ ├── src/
156
+ │ └── tools/ # MCP tools
157
+ │ └── greet.ts # Example tool
158
+ ├── xmcp.config.ts # MCP-I configuration
159
+ └── .mcpi/ # Identity files (git-ignored)
160
+ \`\`\`
161
+
162
+ **Optional directories** (add as needed):
163
+ - \`src/scenarios/\` - Demo/testing scenarios
164
+ - \`src/lib/\` - Shared utilities
165
+ - \`scripts/\` - Build/utility scripts
166
+ - \`docs/\` - Documentation
167
+
168
+ ## Learn More
169
+
170
+ - [MCP-I Documentation](https://github.com/modelcontextprotocol-identity/mcp-i)
171
+ - [Model Context Protocol](https://modelcontextprotocol.io)
172
+ `;
173
+ fs.writeFileSync(path.join(projectPath, "README.md"), readmeContent);
174
+ console.log(chalk.green("✅ MCP-I project structure created"));
175
+ // Generate persistent identity for Node.js MCP-I server
176
+ if (!skipIdentity) {
177
+ console.log(chalk.cyan("🔐 Generating persistent identity..."));
178
+ try {
179
+ const identity = await generateIdentity();
180
+ // Create .mcpi directory
181
+ const mcpiDir = path.join(projectPath, ".mcpi");
182
+ fs.ensureDirSync(mcpiDir);
183
+ // Register with Know That AI if requested
184
+ let ktaRegistration;
185
+ if (options.register) {
186
+ console.log(chalk.blue("📝 Registering with Know That AI..."));
187
+ try {
188
+ const registrationResult = await registerWithKTA({
189
+ name: path.basename(projectPath),
190
+ publicKey: identity.publicKey,
191
+ did: identity.did,
192
+ });
193
+ if (registrationResult.success) {
194
+ ktaRegistration = createKTARegistration(registrationResult.claimUrl ?? null);
195
+ console.log(chalk.green("✅ Agent registered with Know That AI"));
196
+ if (registrationResult.claimUrl) {
197
+ console.log(chalk.cyan(` 📋 Claim URL: ${registrationResult.claimUrl}`));
198
+ }
199
+ else {
200
+ console.log(chalk.dim(" (Shadow registration - did:key agent)"));
201
+ }
202
+ }
203
+ else {
204
+ console.log(chalk.yellow(`⚠️ Registration failed: ${registrationResult.error}`));
205
+ console.log(chalk.dim(" You can register later using: mcpi register"));
206
+ }
207
+ }
208
+ catch (regError) {
209
+ console.log(chalk.yellow(`⚠️ Registration failed: ${regError.message}`));
210
+ console.log(chalk.dim(" You can register later using: mcpi register"));
211
+ }
212
+ }
213
+ // Build identity object with optional KTA registration
214
+ const identityData = {
215
+ version: "1.0",
216
+ ...identity,
217
+ ...(ktaRegistration ? { kta: ktaRegistration } : {}),
218
+ };
219
+ // Save identity to .mcpi/identity.json
220
+ const identityPath = path.join(mcpiDir, "identity.json");
221
+ fs.writeJsonSync(identityPath, identityData, { spaces: 2 });
222
+ console.log(chalk.green("✅ Generated persistent identity"));
223
+ console.log(chalk.dim(` DID: ${identity.did}`));
224
+ console.log(chalk.dim(` Saved to: .mcpi/identity.json`));
225
+ }
226
+ catch (error) {
227
+ console.log(chalk.yellow("⚠️ Failed to generate identity:"), error.message);
228
+ console.log(chalk.dim(" You can generate identity later by running: npm run init"));
229
+ }
230
+ }
231
+ }
232
+ catch (error) {
233
+ console.error(chalk.red("Failed to set up MCP-I project:"), error);
234
+ throw error;
235
+ }
236
+ }
237
+ //# sourceMappingURL=fetch-mcpi-template.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetch-mcpi-template.js","sourceRoot":"","sources":["../../src/helpers/fetch-mcpi-template.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EACL,eAAe,EACf,qBAAqB,GAEtB,MAAM,uBAAuB,CAAC;AAS/B;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,WAAmB,EACnB,UAAmC,EAAE;IAErC,MAAM,EAAE,cAAc,GAAG,KAAK,EAAE,YAAY,GAAG,KAAK,EAAE,GAAG,OAAO,CAAC;IAEjE,uEAAuE;IACvE,mEAAmE;IACnE,MAAM,QAAQ,GAAG,MAAM,kBAAkB,EAAE,CAAC;IAC5C,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,QAAQ,CAAC,eAAe,CAAC,CAAC;IAErE,IAAI,CAAC;QACH,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,IAAI,CACR,kDAAkD,WAAW,KAAK,CACnE,CACF,CAAC;QAEF,+DAA+D;QAC/D,MAAM,WAAW,GAAG;YAClB,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;YAChC,OAAO,EAAE,OAAO;YAChB,YAAY,EAAE;gBACZ,aAAa,EAAE,QAAQ,CAAC,aAAa,CAAC;gBACtC,eAAe,EAAE,WAAW;gBAC5B,GAAG,EAAE,UAAU;aAChB;YACD,OAAO,EAAE;gBACP,GAAG,EAAE,UAAU;gBACf,KAAK,EAAE,YAAY;gBACnB,KAAK,EAAE,YAAY;gBACnB,IAAI,EAAE,WAAW;gBACjB,QAAQ,EAAE,eAAe;gBACzB,aAAa,EAAE,aAAa;gBAC5B,gBAAgB,EAAE,cAAc;gBAChC,MAAM,EAAE,aAAa;aACtB;YACD,eAAe,EAAE;gBACf,iCAAiC,EAAE,SAAS;gBAC5C,YAAY,EAAE,QAAQ;aACvB;SACF,CAAC;QAEF,qBAAqB;QACrB,EAAE,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;QAC9B,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,EAAE,WAAW,EAAE;YACpE,MAAM,EAAE,CAAC;SACV,CAAC,CAAC;QAEH,uCAAuC;QACvC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;QAC7C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAE5C,8BAA8B;QAC9B,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QAE3B,0EAA0E;QAC1E,uCAAuC;QACvC,2DAA2D;QAC3D,sDAAsD;QACtD,gDAAgD;QAChD,wDAAwD;QAExD,4CAA4C;QAC5C,iDAAiD;QACjD,MAAM,gBAAgB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;CAyB5B,CAAC;QAEE,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,EAAE,gBAAgB,CAAC,CAAC;QAEpE,0CAA0C;QAC1C,mEAAmE;QAEnE,4EAA4E;QAC5E,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;CAoBzB,CAAC;QACE,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,gBAAgB,CAAC,EAAE,aAAa,CAAC,CAAC;QAE1E,oBAAoB;QACpB,MAAM,gBAAgB,GAAG;;;;;CAK5B,CAAC;QACE,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,EAAE,gBAAgB,CAAC,CAAC;QAEzE,iDAAiD;QACjD,MAAM,aAAa,GAAG,KAAK,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkDxD,CAAC;QACE,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,EAAE,aAAa,CAAC,CAAC;QAErE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC,CAAC;QAE9D,wDAAwD;QACxD,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC,CAAC;YAChE,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,MAAM,gBAAgB,EAAE,CAAC;gBAE1C,yBAAyB;gBACzB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;gBAChD,EAAE,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;gBAE1B,0CAA0C;gBAC1C,IAAI,eAA4C,CAAC;gBACjD,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;oBACrB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC,CAAC;oBAC/D,IAAI,CAAC;wBACH,MAAM,kBAAkB,GAAG,MAAM,eAAe,CAAC;4BAC/C,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;4BAChC,SAAS,EAAE,QAAQ,CAAC,SAAS;4BAC7B,GAAG,EAAE,QAAQ,CAAC,GAAG;yBAClB,CAAC,CAAC;wBAEH,IAAI,kBAAkB,CAAC,OAAO,EAAE,CAAC;4BAC/B,eAAe,GAAG,qBAAqB,CACrC,kBAAkB,CAAC,QAAQ,IAAI,IAAI,CACpC,CAAC;4BACF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC,CAAC;4BACjE,IAAI,kBAAkB,CAAC,QAAQ,EAAE,CAAC;gCAChC,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,IAAI,CAAC,oBAAoB,kBAAkB,CAAC,QAAQ,EAAE,CAAC,CAC9D,CAAC;4BACJ,CAAC;iCAAM,CAAC;gCACN,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,GAAG,CAAC,0CAA0C,CAAC,CACtD,CAAC;4BACJ,CAAC;wBACH,CAAC;6BAAM,CAAC;4BACN,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,MAAM,CACV,4BAA4B,kBAAkB,CAAC,KAAK,EAAE,CACvD,CACF,CAAC;4BACF,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,GAAG,CAAC,gDAAgD,CAAC,CAC5D,CAAC;wBACJ,CAAC;oBACH,CAAC;oBAAC,OAAO,QAAa,EAAE,CAAC;wBACvB,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,MAAM,CAAC,4BAA4B,QAAQ,CAAC,OAAO,EAAE,CAAC,CAC7D,CAAC;wBACF,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,GAAG,CAAC,gDAAgD,CAAC,CAC5D,CAAC;oBACJ,CAAC;gBACH,CAAC;gBAED,uDAAuD;gBACvD,MAAM,YAAY,GAAG;oBACnB,OAAO,EAAE,KAAc;oBACvB,GAAG,QAAQ;oBACX,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBACrD,CAAC;gBAEF,uCAAuC;gBACvC,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;gBACzD,EAAE,CAAC,aAAa,CAAC,YAAY,EAAE,YAAY,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;gBAE5D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC,CAAC;gBAC5D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;gBAClD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC,CAAC;YAC7D,CAAC;YAAC,OAAO,KAAU,EAAE,CAAC;gBACpB,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,MAAM,CAAC,kCAAkC,CAAC,EAChD,KAAK,CAAC,OAAO,CACd,CAAC;gBACF,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,GAAG,CACP,6DAA6D,CAC9D,CACF,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,iCAAiC,CAAC,EAAE,KAAK,CAAC,CAAC;QACnE,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC"}
@@ -0,0 +1,13 @@
1
+ interface ScaffoldTemplateOptions {
2
+ xmcpVersion?: string;
3
+ xmcpChannel?: string;
4
+ packageManager?: string;
5
+ }
6
+ /**
7
+ * Scaffold XMCP project using the upstream xmcp npm package
8
+ * This follows the requirements specification to use the xmcp package
9
+ * with default caret ^0.3.1 and support for dist-tags
10
+ */
11
+ export declare function fetchXMCPTemplate(projectPath: string, options?: ScaffoldTemplateOptions): Promise<void>;
12
+ export {};
13
+ //# sourceMappingURL=fetch-xmcp-template.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetch-xmcp-template.d.ts","sourceRoot":"","sources":["../../src/helpers/fetch-xmcp-template.ts"],"names":[],"mappings":"AAMA,UAAU,uBAAuB;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;;;GAIG;AACH,wBAAsB,iBAAiB,CACrC,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,uBAA4B,GACpC,OAAO,CAAC,IAAI,CAAC,CAoIf"}