UNPKG

@sigyl-dev/cli

Version:

Official Sigyl CLI for installing and managing MCP packages. Zero-config installation for public packages, secure API-based authentication.

237 lines (227 loc) • 8.85 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || (function () { var ownKeys = function(o) { ownKeys = Object.getOwnPropertyNames || function (o) { var ar = []; for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; return ar; }; return ownKeys(o); }; return function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); __setModuleDefault(result, mod); return result; }; })(); var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.initTemplate = initTemplate; const chalk_1 = __importDefault(require("chalk")); const node_fs_1 = require("node:fs"); const node_path_1 = require("node:path"); const yaml = __importStar(require("yaml")); const ora_1 = __importDefault(require("ora")); async function initTemplate(options) { const spinner = (0, ora_1.default)("Creating template MCP server...").start(); try { // Ensure output directory exists if (!(0, node_fs_1.existsSync)(options.outDir)) { (0, node_fs_1.mkdirSync)(options.outDir, { recursive: true }); } // Generate MCP configuration spinner.text = "Generating MCP configuration..."; await generateMCPConfig(options); // Generate server code spinner.text = "Generating server code..."; if (options.serverLanguage === "typescript") { await generateTypeScriptServer(options); } else { await generateJavaScriptServer(options); } spinner.succeed("Template MCP server created successfully!"); console.log(chalk_1.default.green("\nšŸŽ‰ Generated files:")); console.log(chalk_1.default.gray(` ${(0, node_path_1.join)(options.outDir, "sigyl.yaml")} - MCP configuration`)); console.log(chalk_1.default.gray(` ${(0, node_path_1.join)(options.outDir, "server.ts")} - MCP server`)); console.log(chalk_1.default.gray(` ${(0, node_path_1.join)(options.outDir, "package.json")} - Node.js package`)); console.log(chalk_1.default.blue("\nšŸš€ Next steps:")); console.log(chalk_1.default.gray(` cd ${options.outDir}`)); console.log(chalk_1.default.gray(" npm install")); console.log(chalk_1.default.gray(" npm run build")); console.log(chalk_1.default.gray(" sigyl inspect server.js")); } catch (error) { spinner.fail("Template creation failed"); throw error; } } async function generateMCPConfig(options) { // Use the MCP config schema and header as in the old working sigyl.yaml const config = { runtime: "node", language: options.serverLanguage || "typescript", startCommand: { type: "http" } }; const yamlHeader = `# MCP-compatible server configuration\n# This template demonstrates all major JSON Schema features for configSchema.\n# - apiKey: Secret string field\n# - serviceName: Arbitrary string field\n# - logLevel: Enum string field\n# - timeout: Number field with min/max\n# - enableMetrics: Boolean field\n# - allowedClients: Array of strings\n# - customSettings: Object field\n# - environment: Enum for environment\n# Add/remove fields as needed for your server.\n`; const yamlContent = yamlHeader + yaml.stringify(config, { indent: 2 }); (0, node_fs_1.writeFileSync)((0, node_path_1.join)(options.outDir, "sigyl.yaml"), yamlContent); } async function generateTypeScriptServer(options) { const serverCode = `/** * Auto-generated MCP Server (template) * * This server provides a template tool for you to customize. * To add a new tool, use the template at the bottom of this file. */ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js" import { z } from "zod" // ============================================================================ // SERVER CONFIGURATION // ============================================================================ export default function createStatelessServer({ config, }: { config: any; }) { const server = new McpServer({ name: "generated-mcp-server", version: "1.0.0", }); // ============================================================================ // TEMPLATE TOOL // ============================================================================ // Replace or add more tools as needed. server.tool( "reverseString", "Reverse a string value", { value: z.string().describe("String to reverse"), }, async ({ value }) => { return { content: [ { type: "text", text: value.split("").reverse().join("") } ] }; } ); return server.server; } `; (0, node_fs_1.writeFileSync)((0, node_path_1.join)(options.outDir, "server.ts"), serverCode); // Generate package.json for the server const packageJson = { name: options.name, version: "1.0.0", type: "module", main: "server.js", description: "Template MCP server with a sample tool", scripts: { build: "tsc", start: "node server.js" }, dependencies: { "@modelcontextprotocol/sdk": "^1.10.1", "zod": "^3.22.0", }, devDependencies: { "typescript": "^5.0.0", "@types/node": "^20.0.0" } }; (0, node_fs_1.writeFileSync)((0, node_path_1.join)(options.outDir, "package.json"), JSON.stringify(packageJson, null, 2)); // Always generate a valid tsconfig.json for TypeScript/ESM compatibility const tsConfig = { compilerOptions: { target: "ES2020", module: "ESNext", moduleResolution: "node", outDir: "./", rootDir: "./", strict: true, esModuleInterop: true, skipLibCheck: true }, include: ["*.ts"], exclude: ["node_modules", "*.js"] }; (0, node_fs_1.writeFileSync)((0, node_path_1.join)(options.outDir, "tsconfig.json"), JSON.stringify(tsConfig, null, 2)); } async function generateJavaScriptServer(options) { const serverCode = `/** * Auto-generated MCP Server (template, JavaScript) * * This server provides a template tool for you to customize. * To add a new tool, use the template at the bottom of this file. */ const { McpServer } = require("@modelcontextprotocol/sdk/server/mcp.js"); const { z } = require("zod"); // ============================================================================ // SERVER CONFIGURATION // ============================================================================ function createStatelessServer({ config }) { const server = new McpServer({ name: "generated-mcp-server", version: "1.0.0", }); // ============================================================================ // TEMPLATE TOOL // ============================================================================ // Replace or add more tools as needed. server.tool( "reverseString", "Reverse a string value", { value: z.string().describe("String to reverse"), }, async ({ value }) => { return { content: [ { type: "text", text: value.split("").reverse().join("") } ] }; } ); return server.server; } `; (0, node_fs_1.writeFileSync)((0, node_path_1.join)(options.outDir, "server.js"), serverCode); // Generate package.json for the server const packageJson = { name: options.name, version: "1.0.0", main: "server.js", scripts: { start: "node server.js" }, dependencies: { "@modelcontextprotocol/sdk": "^1.10.1", "zod": "^3.22.0" } }; (0, node_fs_1.writeFileSync)((0, node_path_1.join)(options.outDir, "package.json"), JSON.stringify(packageJson, null, 2)); } //# sourceMappingURL=init.js.map