{"version":3,"sources":["../../src/cli/index.ts"],"names":[],"mappings":";;;;;;AAEA,SAAS,eAAe;AACxB,OAAO,QAAQ;AACf,OAAO,UAAU;AACjB,OAAO,WAAW;AALlB;AAAA;AAOA,QAAM,UAAU,IAAI,QAAQ;AAE5B,QAAM,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA8BvB,mBAAe,uBAEb;AACA,YAAM,MAAM,QAAQ,IAAI;AACxB,UAAI;AAEF,cAAM,QAAQ,MAAM,GAAG,QAAQ,GAAG;AAElC,YAAI,MAAM,SAAS,WAAW;AAAG,iBAAO;AACxC,YAAI,MAAM,SAAS,gBAAgB;AAAG,iBAAO;AAC7C,YAAI,MAAM,SAAS,WAAW;AAAG,iBAAO;AACxC,YAAI,MAAM,SAAS,mBAAmB;AAAG,iBAAO;AAGhD,eAAO;AAAA,MACT,SAAS,OAAO;AACd,eAAO;AAAA,MACT;AAAA,IACF;AAEA,mBAAe,oBACb,gBACA;AACA,YAAM,YAAY,MAAM,OAAO,eAAoB,GAAG;AACtD,YAAM,eAAe,CAAC,eAAe,gCAAgC,KAAK;AAE1E,YAAM,WAAW;AAAA,QACf,KAAK,eAAe,aAAa,KAAK,GAAG,CAAC;AAAA,QAC1C,MAAM,YAAY,aAAa,KAAK,GAAG,CAAC;AAAA,QACxC,MAAM,YAAY,aAAa,KAAK,GAAG,CAAC;AAAA,QACxC,KAAK,WAAW,aAAa,KAAK,GAAG,CAAC;AAAA,MACxC;AAEA,UAAI;AACF,gBAAQ;AAAA,UACN,MAAM,KAAK;AAAA,gCAAmC,cAAc,KAAK;AAAA,QACnE;AACA,iBAAS,SAAS,cAAc,GAAG,EAAE,OAAO,UAAU,CAAC;AACvD,gBAAQ,IAAI,MAAM,MAAM,+CAA0C,CAAC;AAAA,MACrE,SAAS,OAAO;AACd,gBAAQ;AAAA,UACN,MAAM;AAAA,YACJ;AAAA,UACF;AAAA,QACF;AACA,gBAAQ,IAAI,MAAM,OAAO;AAAA,EAAK,SAAS,cAAc,CAAC,EAAE,CAAC;AAAA,MAC3D;AAAA,IACF;AAEA,mBAAe,OAAO;AACpB,UAAI;AAEF,cAAM,cAAc,KAAK;AAAA,UACvB,MAAM,GAAG,SAAS,KAAK,KAAK,QAAQ,IAAI,GAAG,cAAc,GAAG,OAAO;AAAA,QACrE;AAEA,YAAI,CAAC,YAAY,cAAc,QAAQ,CAAC,YAAY,iBAAiB,MAAM;AACzE,kBAAQ;AAAA,YACN,MAAM,IAAI,sDAAiD;AAAA,UAC7D;AACA,kBAAQ,KAAK,CAAC;AAAA,QAChB;AAGA,cAAM,YAAY,KAAK,KAAK,QAAQ,IAAI,GAAG,OAAO,OAAO,KAAK;AAC9D,cAAM,GAAG,MAAM,WAAW,EAAE,WAAW,KAAK,CAAC;AAG7C,cAAM,gBAAgB,KAAK,KAAK,WAAW,UAAU;AACrD,cAAM,GAAG,UAAU,eAAe,cAAc;AAEhD,gBAAQ,IAAI,MAAM,MAAM,gDAA2C,CAAC;AAGpE,cAAM,iBAAiB,MAAM,qBAAqB;AAClD,cAAM,oBAAoB,cAAc;AAAA,MAC1C,SAAS,OAAO;AACd,gBAAQ,MAAM,MAAM,IAAI,mCAAmC,GAAG,KAAK;AACnE,gBAAQ,KAAK,CAAC;AAAA,MAChB;AAAA,IACF;AAEA,YACG,KAAK,aAAa,EAClB,YAAY,sDAAsD,EAClE,OAAO,IAAI;AAEd,YAAQ,MAAM;AAAA;AAAA","sourcesContent":["#!/usr/bin/env node\n\nimport { Command } from \"commander\";\nimport fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport chalk from \"chalk\";\n\nconst program = new Command();\n\nconst ROUTE_TEMPLATE = `import { createMcpHandler } from 'mcp-handler';\nimport { z } from 'zod';\n\nconst handler = createMcpHandler(\n  server => {\n    server.registerTool(\n      'roll_dice',\n      {\n        description: 'Rolls an N-sided die',\n        inputSchema: z.object({\n          sides: z.number().int().min(2),\n        }),\n      },\n      async ({ sides }) => {\n        const value = 1 + Math.floor(Math.random() * sides);\n        return {\n          content: [{ type: 'text', text: \\`🎲 You rolled a \\${value}!\\` }],\n        };\n      }\n    );\n  },\n  {\n    // Optional: server options plus handler extras\n    verboseLogs: true,\n  }\n);\n\nexport { handler as GET, handler as POST };\n`;\n\nasync function detectPackageManager(): Promise<\n  \"npm\" | \"pnpm\" | \"yarn\" | \"bun\"\n> {\n  const cwd = process.cwd();\n  try {\n    // Check for lock files in order of preference\n    const files = await fs.readdir(cwd);\n\n    if (files.includes(\"bun.lockb\")) return \"bun\";\n    if (files.includes(\"pnpm-lock.yaml\")) return \"pnpm\";\n    if (files.includes(\"yarn.lock\")) return \"yarn\";\n    if (files.includes(\"package-lock.json\")) return \"npm\";\n\n    // Fallback to npm if no lock file found\n    return \"npm\";\n  } catch (error) {\n    return \"npm\";\n  }\n}\n\nasync function installDependencies(\n  packageManager: \"npm\" | \"pnpm\" | \"yarn\" | \"bun\",\n) {\n  const execSync = (await import(\"node:child_process\")).execSync;\n  const dependencies = [\"mcp-handler\", \"@modelcontextprotocol/server\", \"zod\"];\n\n  const commands = {\n    npm: `npm install ${dependencies.join(\" \")}`,\n    pnpm: `pnpm add ${dependencies.join(\" \")}`,\n    yarn: `yarn add ${dependencies.join(\" \")}`,\n    bun: `bun add ${dependencies.join(\" \")}`,\n  };\n\n  try {\n    console.log(\n      chalk.blue(`\\nInstalling dependencies using ${packageManager}...`),\n    );\n    execSync(commands[packageManager], { stdio: \"inherit\" });\n    console.log(chalk.green(\"\\n✅ Dependencies installed successfully!\"));\n  } catch (error) {\n    console.error(\n      chalk.red(\n        \"\\n❌ Failed to install dependencies. You can install them manually:\",\n      ),\n    );\n    console.log(chalk.yellow(`\\n${commands[packageManager]}`));\n  }\n}\n\nasync function init() {\n  try {\n    // Check if we're in a Next.js project\n    const packageJson = JSON.parse(\n      await fs.readFile(path.join(process.cwd(), \"package.json\"), \"utf-8\"),\n    );\n\n    if (!packageJson.dependencies?.next && !packageJson.devDependencies?.next) {\n      console.error(\n        chalk.red(\"❌ This command must be run in a Next.js project\"),\n      );\n      process.exit(1);\n    }\n\n    // Create the static app/api/mcp route\n    const routePath = path.join(process.cwd(), \"app\", \"api\", \"mcp\");\n    await fs.mkdir(routePath, { recursive: true });\n\n    // Create the route.ts file\n    const routeFilePath = path.join(routePath, \"route.ts\");\n    await fs.writeFile(routeFilePath, ROUTE_TEMPLATE);\n\n    console.log(chalk.green(\"✅ Successfully created MCP route handler!\"));\n\n    // Detect and use the appropriate package manager\n    const packageManager = await detectPackageManager();\n    await installDependencies(packageManager);\n  } catch (error) {\n    console.error(chalk.red(\"Error creating MCP route handler:\"), error);\n    process.exit(1);\n  }\n}\n\nprogram\n  .name(\"mcp-handler\")\n  .description(\"Initialize MCP route handler in your Next.js project\")\n  .action(init);\n\nprogram.parse();\n"]}