@mcp-z/cli 1.0.0

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 (126) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +166 -0
  3. package/bin/cli.js +5 -0
  4. package/dist/cjs/cli.d.cts +1 -0
  5. package/dist/cjs/cli.d.ts +1 -0
  6. package/dist/cjs/cli.js +576 -0
  7. package/dist/cjs/cli.js.map +1 -0
  8. package/dist/cjs/commands/call-tool.d.cts +26 -0
  9. package/dist/cjs/commands/call-tool.d.ts +26 -0
  10. package/dist/cjs/commands/call-tool.js +362 -0
  11. package/dist/cjs/commands/call-tool.js.map +1 -0
  12. package/dist/cjs/commands/get-prompt.d.cts +26 -0
  13. package/dist/cjs/commands/get-prompt.d.ts +26 -0
  14. package/dist/cjs/commands/get-prompt.js +335 -0
  15. package/dist/cjs/commands/get-prompt.js.map +1 -0
  16. package/dist/cjs/commands/inspect.d.cts +35 -0
  17. package/dist/cjs/commands/inspect.d.ts +35 -0
  18. package/dist/cjs/commands/inspect.js +896 -0
  19. package/dist/cjs/commands/inspect.js.map +1 -0
  20. package/dist/cjs/commands/manifest/env-prompting.d.cts +21 -0
  21. package/dist/cjs/commands/manifest/env-prompting.d.ts +21 -0
  22. package/dist/cjs/commands/manifest/env-prompting.js +657 -0
  23. package/dist/cjs/commands/manifest/env-prompting.js.map +1 -0
  24. package/dist/cjs/commands/manifest/generate.d.cts +124 -0
  25. package/dist/cjs/commands/manifest/generate.d.ts +124 -0
  26. package/dist/cjs/commands/manifest/generate.js +2541 -0
  27. package/dist/cjs/commands/manifest/generate.js.map +1 -0
  28. package/dist/cjs/commands/manifest/index.d.cts +2 -0
  29. package/dist/cjs/commands/manifest/index.d.ts +2 -0
  30. package/dist/cjs/commands/manifest/index.js +229 -0
  31. package/dist/cjs/commands/manifest/index.js.map +1 -0
  32. package/dist/cjs/commands/manifest/metadata-reader.d.cts +71 -0
  33. package/dist/cjs/commands/manifest/metadata-reader.d.ts +71 -0
  34. package/dist/cjs/commands/manifest/metadata-reader.js +441 -0
  35. package/dist/cjs/commands/manifest/metadata-reader.js.map +1 -0
  36. package/dist/cjs/commands/manifest/validate.d.cts +1 -0
  37. package/dist/cjs/commands/manifest/validate.d.ts +1 -0
  38. package/dist/cjs/commands/manifest/validate.js +525 -0
  39. package/dist/cjs/commands/manifest/validate.js.map +1 -0
  40. package/dist/cjs/commands/read-resource.d.cts +24 -0
  41. package/dist/cjs/commands/read-resource.d.ts +24 -0
  42. package/dist/cjs/commands/read-resource.js +311 -0
  43. package/dist/cjs/commands/read-resource.js.map +1 -0
  44. package/dist/cjs/commands/search.d.cts +31 -0
  45. package/dist/cjs/commands/search.d.ts +31 -0
  46. package/dist/cjs/commands/search.js +464 -0
  47. package/dist/cjs/commands/search.js.map +1 -0
  48. package/dist/cjs/commands/up.d.cts +49 -0
  49. package/dist/cjs/commands/up.d.ts +49 -0
  50. package/dist/cjs/commands/up.js +235 -0
  51. package/dist/cjs/commands/up.js.map +1 -0
  52. package/dist/cjs/index.d.cts +7 -0
  53. package/dist/cjs/index.d.ts +7 -0
  54. package/dist/cjs/index.js +85 -0
  55. package/dist/cjs/index.js.map +1 -0
  56. package/dist/cjs/lib/find-config.d.cts +14 -0
  57. package/dist/cjs/lib/find-config.d.ts +14 -0
  58. package/dist/cjs/lib/find-config.js +93 -0
  59. package/dist/cjs/lib/find-config.js.map +1 -0
  60. package/dist/cjs/lib/json-schema.d.cts +18 -0
  61. package/dist/cjs/lib/json-schema.d.ts +18 -0
  62. package/dist/cjs/lib/json-schema.js +306 -0
  63. package/dist/cjs/lib/json-schema.js.map +1 -0
  64. package/dist/cjs/lib/resolve-server-config.d.cts +50 -0
  65. package/dist/cjs/lib/resolve-server-config.d.ts +50 -0
  66. package/dist/cjs/lib/resolve-server-config.js +214 -0
  67. package/dist/cjs/lib/resolve-server-config.js.map +1 -0
  68. package/dist/cjs/package.json +1 -0
  69. package/dist/cjs/types.d.cts +21 -0
  70. package/dist/cjs/types.d.ts +21 -0
  71. package/dist/cjs/types.js +32 -0
  72. package/dist/cjs/types.js.map +1 -0
  73. package/dist/esm/cli.d.ts +1 -0
  74. package/dist/esm/cli.js +129 -0
  75. package/dist/esm/cli.js.map +1 -0
  76. package/dist/esm/commands/call-tool.d.ts +26 -0
  77. package/dist/esm/commands/call-tool.js +151 -0
  78. package/dist/esm/commands/call-tool.js.map +1 -0
  79. package/dist/esm/commands/get-prompt.d.ts +26 -0
  80. package/dist/esm/commands/get-prompt.js +118 -0
  81. package/dist/esm/commands/get-prompt.js.map +1 -0
  82. package/dist/esm/commands/inspect.d.ts +35 -0
  83. package/dist/esm/commands/inspect.js +438 -0
  84. package/dist/esm/commands/inspect.js.map +1 -0
  85. package/dist/esm/commands/manifest/env-prompting.d.ts +21 -0
  86. package/dist/esm/commands/manifest/env-prompting.js +213 -0
  87. package/dist/esm/commands/manifest/env-prompting.js.map +1 -0
  88. package/dist/esm/commands/manifest/generate.d.ts +124 -0
  89. package/dist/esm/commands/manifest/generate.js +1087 -0
  90. package/dist/esm/commands/manifest/generate.js.map +1 -0
  91. package/dist/esm/commands/manifest/index.d.ts +2 -0
  92. package/dist/esm/commands/manifest/index.js +23 -0
  93. package/dist/esm/commands/manifest/index.js.map +1 -0
  94. package/dist/esm/commands/manifest/metadata-reader.d.ts +71 -0
  95. package/dist/esm/commands/manifest/metadata-reader.js +143 -0
  96. package/dist/esm/commands/manifest/metadata-reader.js.map +1 -0
  97. package/dist/esm/commands/manifest/validate.d.ts +1 -0
  98. package/dist/esm/commands/manifest/validate.js +167 -0
  99. package/dist/esm/commands/manifest/validate.js.map +1 -0
  100. package/dist/esm/commands/read-resource.d.ts +24 -0
  101. package/dist/esm/commands/read-resource.js +95 -0
  102. package/dist/esm/commands/read-resource.js.map +1 -0
  103. package/dist/esm/commands/search.d.ts +31 -0
  104. package/dist/esm/commands/search.js +145 -0
  105. package/dist/esm/commands/search.js.map +1 -0
  106. package/dist/esm/commands/up.d.ts +49 -0
  107. package/dist/esm/commands/up.js +74 -0
  108. package/dist/esm/commands/up.js.map +1 -0
  109. package/dist/esm/index.d.ts +7 -0
  110. package/dist/esm/index.js +11 -0
  111. package/dist/esm/index.js.map +1 -0
  112. package/dist/esm/lib/find-config.d.ts +14 -0
  113. package/dist/esm/lib/find-config.js +42 -0
  114. package/dist/esm/lib/find-config.js.map +1 -0
  115. package/dist/esm/lib/json-schema.d.ts +18 -0
  116. package/dist/esm/lib/json-schema.js +66 -0
  117. package/dist/esm/lib/json-schema.js.map +1 -0
  118. package/dist/esm/lib/resolve-server-config.d.ts +50 -0
  119. package/dist/esm/lib/resolve-server-config.js +154 -0
  120. package/dist/esm/lib/resolve-server-config.js.map +1 -0
  121. package/dist/esm/package.json +1 -0
  122. package/dist/esm/types.d.ts +21 -0
  123. package/dist/esm/types.js +11 -0
  124. package/dist/esm/types.js.map +1 -0
  125. package/package.json +99 -0
  126. package/schemas/server.schema.json +489 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/Users/kevin/Dev/Projects/ai/mcp-z/cli/src/commands/manifest/generate.ts"],"sourcesContent":["import checkbox from '@inquirer/checkbox';\nimport confirm from '@inquirer/confirm';\nimport input from '@inquirer/input';\nimport select from '@inquirer/select';\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport { validateSchema } from '../../lib/json-schema.ts';\nimport type { MCPConfiguration, ServerConfig, ServerConfigHttp, ServerConfigStdio } from '../../types.ts';\nimport { promptForEnvVars, substituteTemplateVars } from './env-prompting.ts';\nimport { type CliArgMetadata, type EnvVarMetadata, MetadataReader, type ServerMetadata } from './metadata-reader.ts';\n\nexport type ConfigurationMode = 'env' | 'args' | 'both' | 'none';\n\nexport interface Dimension {\n name: string;\n type: 'env' | 'arg';\n choices: string[];\n}\n\nexport interface Combination {\n name: string;\n envKeys: string[]; // List of environment variable names needed for this combination\n argNames: string[]; // List of package argument names needed for this combination\n defaults: Record<string, string>; // Default values for non-dimension env vars\n argDefaults: Record<string, string>; // Default values for non-dimension args\n dimensionValues: Record<string, string>; // Dimension values for this combination (both env and args)\n}\n\nexport interface ConfigChoice {\n combination: Combination;\n transport: 'stdio' | 'streamable-http';\n label: string;\n}\n\n/** Maps user-facing transport names to internal types */\nexport const TRANSPORT_MAP: Record<string, 'stdio' | 'streamable-http'> = {\n stdio: 'stdio',\n http: 'streamable-http',\n};\n\n/**\n * Build config choices from combinations and transports.\n * Used for both \"select all\" and \"select specific\" flows.\n * @param combinations - Array of config combinations\n * @param transports - Array of transport names ('stdio', 'http', or 'streamable-http')\n * @returns Array of ConfigChoice objects\n */\nexport function createConfigChoices(combinations: Combination[], transports: string[]): ConfigChoice[] {\n const choices: ConfigChoice[] = [];\n for (const combination of combinations) {\n for (const t of transports) {\n const transport = TRANSPORT_MAP[t] || (t as 'stdio' | 'streamable-http');\n choices.push({\n combination,\n transport,\n label: `${combination.name} (${t})`,\n });\n }\n }\n return choices;\n}\n\n/**\n * Filter config choices by selected labels.\n * @param allChoices - All available config choices\n * @param selectedLabels - Labels of configs to include\n * @returns Filtered array of ConfigChoice objects\n */\nexport function filterConfigChoices(allChoices: ConfigChoice[], selectedLabels: string[]): ConfigChoice[] {\n return allChoices.filter((choice) => selectedLabels.includes(choice.label));\n}\n\n/**\n * Generate cartesian product of all dimension choices.\n * Example: [AUTH_MODE: [a, b], DCR_MODE: [x, y]] → [[a,x], [a,y], [b,x], [b,y]]\n */\nfunction generateCartesianProduct(dimensions: Array<{ name: string; choices?: string[] }>): string[][] {\n if (dimensions.length === 0) return [[]];\n\n const first = dimensions[0];\n if (!first || !first.choices || first.choices.length === 0) return [[]];\n\n if (dimensions.length === 1) {\n return first.choices.map((c) => [c]);\n }\n\n const rest = dimensions.slice(1);\n const restProduct = generateCartesianProduct(rest);\n\n const result: string[][] = [];\n for (const choice of first.choices) {\n for (const restCombination of restProduct) {\n result.push([choice, ...restCombination]);\n }\n }\n\n return result;\n}\n\n/**\n * Generate combinations from env vars with choices (simple cartesian product).\n * All combinations are generated - user can filter via selection pass.\n */\nexport function generateMatrixCombinations(envVars: Array<{ name: string; choices: string[] }>): Combination[] {\n const dimensions = envVars.map((e) => ({ name: e.name, choices: e.choices }));\n const product = generateCartesianProduct(dimensions);\n\n return product.map((values) => {\n const dimensionValues: Record<string, string> = {};\n dimensions.forEach((dim, i) => {\n dimensionValues[dim.name] = values[i] || '';\n });\n const nameParts = dimensions.map((dim, i) => `${dim.name.toLowerCase()}-${values[i]}`);\n return {\n name: nameParts.length > 0 ? nameParts.join('_') : 'minimal',\n envKeys: dimensions.map((d) => d.name),\n argNames: [],\n defaults: {},\n argDefaults: {},\n dimensionValues,\n };\n });\n}\n\n/**\n * Generate combinations respecting dependsOn relationships.\n * Conditional dimensions are only included when their dependencies are satisfied.\n * Example: DCR_MODE only generates variations when AUTH_MODE=dcr\n */\nexport function generateConditionalCombinations(envVars: Array<{ name: string; choices: string[]; dependsOn?: Record<string, string[]> }>): Combination[] {\n // Separate primary dimensions (no dependsOn) from conditional ones\n const primaryDims = envVars.filter((e) => !e.dependsOn);\n const conditionalDims = envVars.filter((e) => e.dependsOn);\n\n if (primaryDims.length === 0) {\n // No primary dimensions - return empty or minimal\n return [\n {\n name: 'minimal',\n envKeys: [],\n argNames: [],\n defaults: {},\n argDefaults: {},\n dimensionValues: {},\n },\n ];\n }\n\n // Generate all combinations of primary dimensions first\n const primaryProduct = generateCartesianProduct(primaryDims);\n\n const combinations: Combination[] = [];\n\n for (const primaryValues of primaryProduct) {\n // Build base dimension values from primary\n const baseDimensionValues: Record<string, string> = {};\n primaryDims.forEach((dim, i) => {\n baseDimensionValues[dim.name] = primaryValues[i] || '';\n });\n\n // Find which conditional dimensions apply to this primary combination\n const applicableConditionals = conditionalDims.filter((cond) => shouldPromptEnvVar(cond, baseDimensionValues));\n\n if (applicableConditionals.length === 0) {\n // No conditional dimensions apply - single combination\n // Only include dimensions with multiple choices in the name (single-choice dimensions don't add discriminating value)\n const nameParts = primaryDims.filter((dim) => dim.choices.length > 1).map((dim, _i) => `${dim.name.toLowerCase()}-${primaryValues[primaryDims.indexOf(dim)]}`);\n combinations.push({\n name: nameParts.length > 0 ? nameParts.join('_') : 'default',\n envKeys: primaryDims.map((d) => d.name),\n argNames: [],\n defaults: {},\n argDefaults: {},\n dimensionValues: { ...baseDimensionValues },\n });\n } else {\n // Generate sub-combinations for applicable conditional dimensions\n const conditionalProduct = generateCartesianProduct(applicableConditionals);\n\n for (const condValues of conditionalProduct) {\n const fullDimensionValues: Record<string, string> = { ...baseDimensionValues };\n applicableConditionals.forEach((dim, i) => {\n fullDimensionValues[dim.name] = condValues[i] || '';\n });\n\n // Build name from dimensions with multiple choices only (single-choice dimensions don't add discriminating value)\n const allDims = [...primaryDims, ...applicableConditionals];\n const nameParts = allDims.filter((dim) => dim.choices.length > 1).map((dim) => `${dim.name.toLowerCase()}-${fullDimensionValues[dim.name]}`);\n\n combinations.push({\n name: nameParts.length > 0 ? nameParts.join('_') : 'default',\n envKeys: [...primaryDims, ...applicableConditionals].map((d) => d.name),\n argNames: [],\n defaults: {},\n argDefaults: {},\n dimensionValues: fullDimensionValues,\n });\n }\n }\n }\n\n return combinations;\n}\n\n/**\n * Check if an environment variable should be prompted based on dependsOn conditions.\n * Returns true if the envVar has no dependencies, or if all dependencies are satisfied.\n *\n * @param envVar - Environment variable metadata with optional dependsOn field\n * @param selectedValues - Currently selected dimension values (e.g., { AUTH_MODE: 'loopback-oauth' })\n * @returns true if the env var should be prompted, false if it should be skipped\n */\nexport function shouldPromptEnvVar(envVar: { dependsOn?: Record<string, string[]> }, selectedValues: Record<string, string>): boolean {\n if (!envVar.dependsOn) return true;\n\n // All dependencies must be satisfied\n for (const [depName, allowedValues] of Object.entries(envVar.dependsOn)) {\n const selectedValue = selectedValues[depName];\n // If dependency not yet selected, or selected value not in allowed list, skip\n if (!selectedValue || !allowedValues.includes(selectedValue)) {\n return false;\n }\n }\n return true;\n}\n\n/**\n * Generate server configuration interactively.\n * Discovers server.json in current directory, prompts for configuration,\n * and generates config files for selected combinations and transports.\n *\n * @param options - Command options\n * @param options.source - Use source code paths (node instead of npx)\n * @param options.json - Output to stdout instead of writing files\n * @param options.matrix - Non-interactive mode: generate all matrix combinations\n * @param options.output - Output directory (default: examples for --matrix, . otherwise)\n * @param options.quick - Skip all optional env var prompts, use defaults\n */\nexport async function generateCommand(options: { source?: boolean; json?: boolean; matrix?: boolean; output?: string; quick?: boolean } = {}): Promise<void> {\n console.log('🔧 MCP Config Generator\\n');\n\n const useSource = options.source || false;\n const jsonOutput = options.json || false;\n const matrixMode = options.matrix || false;\n const quickMode = options.quick || false;\n\n // 1. Discover server.json in current directory or parent\n const serverJsonPath = discoverServerJson();\n if (!serverJsonPath) {\n console.error('❌ No server.json found in current directory or parent');\n console.error(' Run this command from an MCP server package directory');\n process.exit(1);\n }\n\n // 2. Read package.json to get package name\n const packageDir = path.dirname(serverJsonPath);\n const packageJsonPath = path.join(packageDir, 'package.json');\n if (!fs.existsSync(packageJsonPath)) {\n console.error('❌ No package.json found alongside server.json');\n console.error(' Package.json is required to get package name');\n process.exit(1);\n }\n\n const packageJson: { name: string; bin?: string | Record<string, string> } = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));\n const packageName = packageJson.name;\n const serverName = extractServerName(packageName);\n\n // Get bin entry for source mode\n let binPath: string | undefined;\n if (packageJson.bin) {\n if (typeof packageJson.bin === 'string') {\n // Default bin entry\n binPath = packageJson.bin;\n } else {\n // Named bin entries - try to match package name without org\n const packageNameWithoutOrg = packageName.replace(/^@[^/]+\\//, '');\n binPath = packageJson.bin[packageNameWithoutOrg] || packageJson.bin[Object.keys(packageJson.bin)[0] || ''];\n }\n }\n\n console.log(`📦 Package: ${packageName}`);\n\n // 3. Read and validate server.json metadata\n const serverJsonContent = fs.readFileSync(serverJsonPath, 'utf-8');\n let metadata: ServerMetadata;\n try {\n metadata = JSON.parse(serverJsonContent);\n await validateSchema(metadata, serverName);\n } catch (error) {\n console.error(`❌ Failed to read or validate server.json: ${error instanceof Error ? error.message : String(error)}`);\n process.exit(1);\n }\n\n const metadataReader = new MetadataReader();\n\n // 4. Get stdio package to analyze env vars\n const stdioPackage = metadataReader.getPackageForTransport(metadata, 'stdio');\n if (!stdioPackage) {\n console.error('❌ No stdio transport found in server.json');\n process.exit(1);\n }\n\n // 5. Find all environment variables and package arguments with choices\n // Filter to only mandatory matrix items (isMandatoryForMatrix !== false)\n // Non-mandatory items like LOG_LEVEL should not explode the test matrix\n const envVarsWithChoices = (stdioPackage.environmentVariables || []).filter((envVar) => envVar.choices && envVar.choices.length > 0 && envVar.isMandatoryForMatrix !== false);\n const argsWithChoices = (stdioPackage.packageArguments || []).filter((arg): arg is CliArgMetadata & { choices: string[] } => arg.choices !== undefined && arg.choices.length > 0);\n\n if (envVarsWithChoices.length === 0 && argsWithChoices.length === 0) {\n console.error('❌ No environment variables or package arguments with choices found in server.json');\n console.error(' Cannot generate configurations without choice-based configuration options');\n process.exit(1);\n }\n\n console.log('\\n🔍 Available configuration options:');\n if (envVarsWithChoices.length > 0) {\n console.log(` Environment variables (${envVarsWithChoices.length}):`);\n for (const envVar of envVarsWithChoices) {\n console.log(` • ${envVar.name}: ${envVar.choices?.join(', ') || ''}`);\n }\n }\n if (argsWithChoices.length > 0) {\n console.log(` Package arguments (${argsWithChoices.length}):`);\n for (const arg of argsWithChoices) {\n console.log(` • ${arg.name}: ${arg.choices?.join(', ') || ''}`);\n }\n }\n console.log();\n\n // Matrix mode: non-interactive generation of all combinations\n if (matrixMode) {\n const outputDir = options.output || 'examples';\n const transports: Array<'stdio' | 'streamable-http'> = ['stdio'];\n\n // Add http transport if available\n const httpPackage = metadataReader.getPackageForTransport(metadata, 'streamable-http');\n if (httpPackage) {\n transports.push('streamable-http');\n }\n\n // Build env vars for matrix generation (with dependsOn for conditional filtering)\n const envVarsForMatrix = envVarsWithChoices.map((envVar) => ({\n name: envVar.name,\n choices: envVar.choices || [],\n dependsOn: envVar.dependsOn,\n }));\n\n // Collect defaults for non-dimension env vars (ones without choices or non-mandatory)\n // Support both 'default' (MCP schema standard) and 'value' (legacy) fields\n const defaults: Record<string, string> = {};\n for (const envVar of stdioPackage.environmentVariables || []) {\n if (!envVarsWithChoices.some((e) => e.name === envVar.name)) {\n const defaultValue = envVar.default ?? envVar.value;\n if (defaultValue) {\n defaults[envVar.name] = defaultValue;\n }\n }\n }\n\n // Generate combinations respecting dependsOn relationships (no unnecessary combinations)\n const combinations = generateConditionalCombinations(envVarsForMatrix);\n\n // Add defaults to each combination\n for (const combo of combinations) {\n combo.defaults = defaults;\n }\n\n console.log(`📊 Matrix mode: Generating ${combinations.length} combination(s) × ${transports.length} transport(s)`);\n console.log(` Output: ${outputDir}/`);\n console.log(` Transports: ${transports.join(', ')}`);\n console.log();\n\n // Create output directory\n fs.mkdirSync(outputDir, { recursive: true });\n\n // Default HTTP settings for matrix mode\n const httpHost = 'localhost';\n const httpPort = 3000;\n\n let generatedCount = 0;\n for (const combination of combinations) {\n for (const transport of transports) {\n await generateConfigFile({\n serverName,\n combination,\n transport,\n outputDir,\n packageName,\n packageDir,\n ...(binPath !== undefined && { binPath }),\n metadata,\n metadataReader,\n httpHost,\n httpPort,\n useSource,\n quick: true, // Matrix mode always uses defaults\n });\n generatedCount++;\n }\n }\n\n console.log(`\\n✅ Generated ${generatedCount} config file(s) in ${outputDir}`);\n return;\n }\n\n // 5a. Ask what to configure (env/args/both/none)\n const configMode = await select<ConfigurationMode>({\n message: 'What do you want to configure?',\n choices: [\n { name: 'Environment variables only', value: 'env' as const, disabled: envVarsWithChoices.length === 0 },\n { name: 'Package arguments only', value: 'args' as const, disabled: argsWithChoices.length === 0 },\n {\n name: 'Both environment variables and package arguments',\n value: 'both' as const,\n disabled: envVarsWithChoices.length === 0 || argsWithChoices.length === 0,\n },\n { name: 'None (minimal server config)', value: 'none' as const },\n ].filter((choice) => !choice.disabled),\n });\n\n if (configMode === 'none') {\n // Generate single minimal config\n const finalServerName = await input({\n message: 'Server name for mcpServers config:',\n default: serverName,\n validate: (input: string) => input.length > 0 || 'Server name is required',\n });\n\n const outputDir = jsonOutput\n ? '.'\n : await input({\n message: 'Output directory:',\n default: '.',\n });\n\n const combination: Combination = {\n name: 'minimal',\n envKeys: [],\n argNames: [],\n defaults: {},\n argDefaults: {},\n dimensionValues: {},\n };\n\n if (jsonOutput) {\n const config = await generateConfigObject({\n serverName: finalServerName,\n combination,\n transport: 'stdio',\n packageName,\n packageDir,\n ...(binPath !== undefined && { binPath }),\n metadata,\n metadataReader,\n useSource,\n quick: quickMode,\n });\n console.log(JSON.stringify(config, null, 2));\n } else {\n fs.mkdirSync(outputDir, { recursive: true });\n await generateConfigFile({\n serverName: finalServerName,\n combination,\n transport: 'stdio',\n outputDir,\n packageName,\n packageDir,\n ...(binPath !== undefined && { binPath }),\n metadata,\n metadataReader,\n useSource,\n quick: quickMode,\n });\n console.log(`\\n✅ Generated 1 config file in ${outputDir}`);\n }\n return;\n }\n\n // 6. Select transports\n const transports = await checkbox({\n message: 'Select transports:',\n choices: [\n { name: 'stdio', value: 'stdio', checked: true },\n { name: 'http', value: 'http', checked: true },\n ],\n validate: (choices: readonly unknown[]) => choices.length > 0 || 'Select at least one transport',\n });\n\n // 7. HTTP configuration if HTTP transport selected\n let httpHost = 'localhost';\n let httpPort = 3000;\n\n if (transports.includes('http')) {\n httpHost = await input({\n message: 'HTTP host:',\n default: 'localhost',\n });\n\n const portStr = await input({\n message: 'HTTP port:',\n default: '3000',\n validate: (input: string) => {\n const port = Number.parseInt(input, 10);\n return (!Number.isNaN(port) && port > 0 && port < 65536) || 'Port must be between 1 and 65535';\n },\n });\n\n httpPort = Number.parseInt(portStr, 10);\n }\n\n // 8. Collect available dimensions based on configuration mode\n const availableDimensions: Dimension[] = [];\n\n if (configMode === 'env' || configMode === 'both') {\n for (const envVar of envVarsWithChoices) {\n availableDimensions.push({\n name: envVar.name,\n type: 'env',\n choices: envVar.choices || [],\n });\n }\n }\n\n if (configMode === 'args' || configMode === 'both') {\n for (const arg of argsWithChoices) {\n availableDimensions.push({\n name: arg.name,\n type: 'arg',\n choices: arg.choices,\n });\n }\n }\n\n // 8a. Ask user which dimensions to use for combinations\n const selectedDimensionNames = await checkbox({\n message: 'Select dimensions to generate combinations from (order determines filename pattern):',\n choices: availableDimensions.map((d) => ({\n name: `${d.type === 'env' ? 'ENV' : 'ARG'} ${d.name} (${d.choices.join(', ')})`,\n value: d.name,\n checked: true, // Default to all selected\n })),\n validate: (choices: readonly unknown[]) => choices.length > 0 || 'Select at least one dimension',\n });\n\n const selectedDimensions = availableDimensions.filter((d) => selectedDimensionNames.includes(d.name));\n\n // 9. For each dimension, select which choices to include (with \"skip\" option)\n const dimensionsWithFilteredChoices: Dimension[] = [];\n\n for (const dim of selectedDimensions) {\n const choicesWithSkip = [...dim.choices, 'skip'];\n const selectedChoices = await checkbox({\n message: `For ${dim.type === 'env' ? 'ENV' : 'ARG'} ${dim.name}, select choices to include:`,\n choices: choicesWithSkip.map((choice) => ({\n name: choice === 'skip' ? 'skip (do not configure)' : choice,\n value: choice,\n checked: choice !== 'skip', // Default all except skip\n })),\n validate: (choices: readonly unknown[]) => choices.length > 0 || 'Select at least one choice (or skip)',\n });\n\n dimensionsWithFilteredChoices.push({\n ...dim,\n choices: selectedChoices,\n });\n }\n\n // 10. For non-dimensions with choices, get default values (including \"skip\")\n const dimensionNames = selectedDimensions.map((d) => d.name);\n const nonDimensionEnvVars = envVarsWithChoices.filter((e) => !dimensionNames.includes(e.name));\n const nonDimensionArgs = argsWithChoices.filter((a) => !dimensionNames.includes(a.name));\n\n const defaults: Record<string, string> = {};\n const argDefaults: Record<string, string> = {};\n\n // Get defaults for env vars (if configured)\n if (configMode === 'env' || configMode === 'both') {\n for (const envVar of nonDimensionEnvVars) {\n const choicesWithSkip = [...(envVar.choices || []), 'skip'];\n const defaultValue = await select({\n message: `Select default value for ENV ${envVar.name} (used in all configs)`,\n choices: choicesWithSkip.map((c) => ({ name: c === 'skip' ? 'skip (do not configure)' : c, value: c })),\n });\n\n if (defaultValue !== 'skip') {\n defaults[envVar.name] = defaultValue as string;\n }\n }\n }\n\n // Get defaults for args (if configured)\n if (configMode === 'args' || configMode === 'both') {\n for (const arg of nonDimensionArgs) {\n const choicesWithSkip = [...arg.choices, 'skip'];\n const defaultValue = await select({\n message: `Select default value for ARG ${arg.name} (used in all configs)`,\n choices: choicesWithSkip.map((c) => ({ name: c === 'skip' ? 'skip (do not configure)' : c, value: c })),\n });\n\n if (defaultValue !== 'skip') {\n argDefaults[arg.name] = defaultValue as string;\n }\n }\n }\n\n // 11. Generate combinations as cartesian product\n const combinations: Combination[] = generateCartesianProduct(dimensionsWithFilteredChoices).map((choiceValues) => {\n // Build name from dimensions that have multiple choices (single-choice dimensions don't add discriminating value)\n // Also filter out \"skip\" values\n const nameParts: string[] = [];\n for (let i = 0; i < choiceValues.length; i++) {\n const dim = dimensionsWithFilteredChoices[i];\n const value = choiceValues[i];\n // Only include in name if: not \"skip\" AND dimension has multiple selected choices\n if (dim && value !== 'skip' && dim.choices.filter((c) => c !== 'skip').length > 1) {\n nameParts.push(value || '');\n }\n }\n const name = nameParts.length > 0 ? nameParts.join('-').toLowerCase() : 'defaults';\n\n // Map choice values back to dimension names (excluding \"skip\")\n const dimensionValues: Record<string, string> = {};\n for (let i = 0; i < choiceValues.length; i++) {\n const dimension = dimensionsWithFilteredChoices[i];\n const value = choiceValues[i];\n if (dimension && value !== 'skip') {\n dimensionValues[dimension.name] = value || '';\n }\n }\n\n // Include env vars and args based on what's configured\n const allEnvKeys = (stdioPackage.environmentVariables || []).map((e) => e.name);\n const allArgNames = (stdioPackage.packageArguments || []).map((a) => a.name);\n\n return {\n name,\n envKeys: configMode === 'env' || configMode === 'both' ? allEnvKeys : [],\n argNames: configMode === 'args' || configMode === 'both' ? allArgNames : [],\n defaults,\n argDefaults,\n dimensionValues,\n };\n });\n\n // 12. Show preview with final counts\n const totalConfigs = combinations.length * transports.length;\n\n console.log('\\n📋 Preview:');\n console.log(` ${combinations.length} combination(s) × ${transports.length} transport(s) = ${totalConfigs} config file(s)`);\n console.log('\\n Combinations:');\n for (const combo of combinations) {\n console.log(` • ${combo.name}`);\n }\n console.log(`\\n Transports: ${transports.join(', ')}`);\n\n if (Object.keys(defaults).length > 0) {\n console.log('\\n Default ENV values (used in all configs):');\n for (const [key, value] of Object.entries(defaults)) {\n console.log(` • ${key}=${value}`);\n }\n }\n\n if (Object.keys(argDefaults).length > 0) {\n console.log('\\n Default ARG values (used in all configs):');\n for (const [key, value] of Object.entries(argDefaults)) {\n console.log(` • ${key}=${value}`);\n }\n }\n console.log();\n\n // 12a. Ask how to proceed\n type GenerationMode = 'all' | 'select' | 'cancel';\n const generationMode = await select<GenerationMode>({\n message: 'How would you like to proceed?',\n choices: [\n { name: 'Generate all configurations', value: 'all' as const },\n { name: 'Select specific configurations', value: 'select' as const },\n { name: 'Cancel', value: 'cancel' as const },\n ],\n });\n\n if (generationMode === 'cancel') {\n console.log('❌ Cancelled');\n process.exit(0);\n }\n\n // 12b. If selecting, show checkbox for each combination × transport\n let selectedConfigs: ConfigChoice[];\n\n // Build all config choices\n const allChoices = createConfigChoices(combinations, transports);\n\n if (generationMode === 'select') {\n const selectedLabels = await checkbox<string>({\n message: 'Select configurations to generate:',\n choices: allChoices.map((choice) => ({\n name: choice.label,\n value: choice.label,\n checked: true, // Default all selected\n })),\n required: true,\n });\n\n selectedConfigs = filterConfigChoices(allChoices, selectedLabels);\n\n if (selectedConfigs.length === 0) {\n console.log('❌ No configurations selected');\n process.exit(0);\n }\n\n console.log(`\\n📋 Selected ${selectedConfigs.length} configuration(s)`);\n } else {\n // Generate all\n selectedConfigs = allChoices;\n }\n\n // 13. Final prompts\n const finalServerName = await input({\n message: 'Server name for mcpServers config:',\n default: serverName,\n validate: (input: string) => input.length > 0 || 'Server name is required',\n });\n\n const outputDir = jsonOutput\n ? '.'\n : await input({\n message: 'Output directory:',\n default: '.',\n });\n\n // 13a. Select which optional env vars to prompt for (per-config prompting happens later)\n // This is just a FILTER - actual prompting happens in buildServerConfig with config context\n const optionalVarsToPrompt = new Set<string>();\n\n if (!quickMode && process.stdin.isTTY) {\n // Track env vars with their relevance context\n interface EnvVarWithContext {\n envVar: EnvVarMetadata;\n relevantModes: Set<string>; // Which dimension values this var applies to\n appliesToAll: boolean; // True if no dependsOn (applies to all configs)\n }\n\n const envVarsWithContext = new Map<string, EnvVarWithContext>();\n\n // Get the primary dimension (usually AUTH_MODE) for context grouping\n const primaryDimensionName = selectedDimensions.length > 0 ? selectedDimensions[0]?.name : undefined;\n\n for (const { combination } of selectedConfigs) {\n const allEnvVars = stdioPackage.environmentVariables || [];\n for (const envVar of allEnvVars) {\n // Skip if already in defaults or dimension values\n if (combination.envKeys.includes(envVar.name) && Object.keys(combination.dimensionValues).includes(envVar.name)) {\n continue;\n }\n if (Object.keys(combination.defaults).includes(envVar.name)) {\n continue;\n }\n // Check dependsOn\n if (!shouldPromptEnvVar(envVar, combination.dimensionValues)) {\n continue;\n }\n // Only collect optional env vars (required ones are always prompted per-config)\n if (!envVar.isRequired) {\n if (!envVarsWithContext.has(envVar.name)) {\n envVarsWithContext.set(envVar.name, {\n envVar,\n relevantModes: new Set(),\n appliesToAll: !envVar.dependsOn,\n });\n }\n const context = envVarsWithContext.get(envVar.name);\n // Track which primary dimension value this var is relevant to\n if (context && primaryDimensionName && combination.dimensionValues[primaryDimensionName]) {\n context.relevantModes.add(combination.dimensionValues[primaryDimensionName]);\n }\n }\n }\n }\n\n if (envVarsWithContext.size > 0) {\n // Group env vars by their relevance for clearer display\n const allSelectedModes = new Set(selectedConfigs.map((c) => (primaryDimensionName ? c.combination.dimensionValues[primaryDimensionName] : '')).filter(Boolean));\n const groupedVars: Map<string, EnvVarMetadata[]> = new Map();\n\n for (const { envVar, relevantModes, appliesToAll } of envVarsWithContext.values()) {\n let groupKey: string;\n if (appliesToAll || relevantModes.size === allSelectedModes.size) {\n groupKey = 'all';\n } else {\n // Sort modes for consistent display\n groupKey = Array.from(relevantModes).sort().join(', ');\n }\n\n if (!groupedVars.has(groupKey)) {\n groupedVars.set(groupKey, []);\n }\n groupedVars.get(groupKey)?.push(envVar);\n }\n\n console.log(`\\n📋 ${envVarsWithContext.size} optional env var(s) can be configured:`);\n\n // Build template vars from HTTP settings for placeholder substitution\n const templateVars: Record<string, string> = {};\n if (transports.includes('http') || transports.includes('streamable-http')) {\n templateVars.HOST = httpHost;\n templateVars.PORT = String(httpPort);\n }\n\n // Display grouped by relevance\n for (const [groupKey, vars] of groupedVars.entries()) {\n if (groupKey === 'all') {\n console.log('\\n For all configurations:');\n } else {\n console.log(`\\n For ${groupKey} mode:`);\n }\n for (const envVar of vars) {\n const rawDefault = envVar.default ?? envVar.value ?? envVar.placeholder;\n const defaultVal = substituteTemplateVars(rawDefault, templateVars);\n const label = defaultVal ? `(default: ${defaultVal})` : '(no default)';\n console.log(` • ${envVar.name} - ${envVar.description || 'optional'} ${label}`);\n }\n }\n\n // Build flat list of all optional var names for checkbox selection\n const allOptionalVarNames = Array.from(envVarsWithContext.keys());\n\n const configureChoice = await select({\n message: '\\nConfigure optional env vars?',\n choices: [\n { name: 'None (use defaults)', value: 'none' },\n { name: 'All (prompt for each config)', value: 'all' },\n { name: 'Select specific ones', value: 'select' },\n ],\n default: 'none',\n });\n\n if (configureChoice === 'all') {\n // Add all optional vars to the prompt set\n for (const name of allOptionalVarNames) {\n optionalVarsToPrompt.add(name);\n }\n } else if (configureChoice === 'select') {\n // Show multi-select checkbox grouped by relevance\n const checkboxChoices = [];\n\n for (const [groupKey, vars] of groupedVars.entries()) {\n // Add group separator\n checkboxChoices.push({\n name: groupKey === 'all' ? '── For all configurations ──' : `── For ${groupKey} mode ──`,\n value: `__separator__${groupKey}`,\n disabled: ' ',\n });\n\n for (const envVar of vars) {\n const rawDefault = envVar.default ?? envVar.value ?? envVar.placeholder;\n const defaultVal = substituteTemplateVars(rawDefault, templateVars);\n const label = defaultVal ? ` (default: ${defaultVal})` : '';\n checkboxChoices.push({\n name: `${envVar.name} - ${envVar.description || 'optional'}${label}`,\n value: envVar.name,\n });\n }\n }\n\n const selectedVarNames = (await checkbox({\n message: 'Select which env vars to configure:',\n choices: checkboxChoices,\n })) as string[];\n\n // Add selected vars to the prompt set (excluding separators)\n for (const name of selectedVarNames) {\n if (!name.startsWith('__separator__')) {\n optionalVarsToPrompt.add(name);\n }\n }\n }\n // configureChoice === 'none' leaves optionalVarsToPrompt empty\n }\n }\n\n // 14. Generate configs for selected combinations\n if (jsonOutput) {\n // Output selected configs as JSON array to stdout\n const configs: MCPConfiguration[] = [];\n for (const { combination, transport } of selectedConfigs) {\n const config = await generateConfigObject({\n serverName: finalServerName,\n combination,\n transport,\n packageName,\n packageDir,\n ...(binPath !== undefined && { binPath }),\n metadata,\n metadataReader,\n httpHost,\n httpPort,\n useSource,\n quick: quickMode,\n optionalVarsToPrompt,\n });\n configs.push(config);\n }\n console.log(JSON.stringify(configs, null, 2));\n } else {\n fs.mkdirSync(outputDir, { recursive: true });\n\n let generatedCount = 0;\n for (const { combination, transport } of selectedConfigs) {\n const success = await generateConfigFile({\n serverName: finalServerName,\n combination,\n transport,\n outputDir,\n packageName,\n packageDir,\n ...(binPath !== undefined && { binPath }),\n metadata,\n metadataReader,\n httpHost,\n httpPort,\n useSource,\n quick: quickMode,\n optionalVarsToPrompt,\n });\n if (success) {\n generatedCount++;\n }\n }\n\n console.log(`\\n✅ Generated ${generatedCount} config file(s) in ${outputDir}`);\n }\n}\n\n/** Exported for testing */\nexport function discoverServerJson(basePath = process.cwd()): string | null {\n // Check current directory\n const currentPath = path.join(basePath, 'server.json');\n if (fs.existsSync(currentPath)) {\n return currentPath;\n }\n\n // Check parent directory (for monorepo structure)\n const parentPath = path.join(basePath, '..', 'server.json');\n if (fs.existsSync(parentPath)) {\n return parentPath;\n }\n\n return null;\n}\n\n/** Exported for testing */\nexport function extractServerName(packageName: string): string {\n // Strip org prefix if present: \"@org/package\" -> \"package\"\n const withoutOrg = packageName.replace(/^@[^/]+\\//, '');\n return withoutOrg || 'server';\n}\n\n/** Build config object (shared logic) */\nasync function buildServerConfig(\n params: {\n combination: Combination;\n transport: string;\n packageName: string;\n packageDir?: string;\n binPath?: string;\n metadata: ServerMetadata;\n metadataReader: Pick<MetadataReader, 'getPackageForTransport'>;\n httpHost?: string;\n httpPort?: number;\n useSource?: boolean;\n quick?: boolean; // Skip optional env var prompts, use defaults\n optionalVarsToPrompt?: Set<string>; // Filter: which optional vars to include in per-config prompting\n },\n envPromptFn: typeof promptForEnvVars = promptForEnvVars\n): Promise<ServerConfig> {\n // Get package config for transport\n const transportType = params.transport === 'http' ? 'streamable-http' : 'stdio';\n const pkg = params.metadataReader.getPackageForTransport(params.metadata, transportType);\n\n if (!pkg) {\n throw new Error(`No ${params.transport} transport available`);\n }\n\n // Separate env vars and package args from dimensionValues\n const envDimensions: Record<string, string> = {};\n const argDimensions: Record<string, string> = {};\n\n const allPackageArgNames = (pkg.packageArguments || []).map((a) => a.name);\n for (const [key, value] of Object.entries(params.combination.dimensionValues)) {\n if (allPackageArgNames.includes(key)) {\n argDimensions[key] = value;\n } else {\n envDimensions[key] = value;\n }\n }\n\n // Filter environmentVariables based on combination's envKeys\n const relevantEnvVars = (pkg.environmentVariables || []).filter((envVar) => params.combination.envKeys.includes(envVar.name));\n\n // Filter by dependsOn - only prompt for env vars relevant to this combination's dimension values\n const envVarsMatchingDependsOn = relevantEnvVars.filter((envVar) => shouldPromptEnvVar(envVar, params.combination.dimensionValues));\n\n // Filter defaults to only include env vars whose dependsOn is satisfied for this combination\n // This ensures DCR_STORE_URI isn't included when AUTH_MODE=loopback-oauth, etc.\n const allEnvVars = pkg.environmentVariables || [];\n const filteredDefaults: Record<string, string> = {};\n for (const [envName, envValue] of Object.entries(params.combination.defaults)) {\n const envVarMeta = allEnvVars.find((e) => e.name === envName);\n if (!envVarMeta || shouldPromptEnvVar(envVarMeta, params.combination.dimensionValues)) {\n filteredDefaults[envName] = envValue;\n }\n }\n\n // Separate env vars into those with pre-populated values and those to prompt for\n const envDefaultKeys = Object.keys(filteredDefaults);\n const envDimensionKeys = Object.keys(envDimensions);\n const prePopulatedEnvKeys = [...envDefaultKeys, ...envDimensionKeys];\n\n // Determine which env vars to prompt for\n let envVarsToPrompt: EnvVarMetadata[];\n\n if (params.optionalVarsToPrompt === undefined) {\n // No filter provided (e.g., tests, non-interactive) - use old behavior: prompt all relevant vars\n envVarsToPrompt = envVarsMatchingDependsOn.filter((envVar) => !prePopulatedEnvKeys.includes(envVar.name));\n } else if (params.optionalVarsToPrompt.size === 0) {\n // Empty filter - only prompt for required vars, skip optional\n envVarsToPrompt = envVarsMatchingDependsOn.filter((envVar) => !prePopulatedEnvKeys.includes(envVar.name) && envVar.isRequired);\n } else {\n // Filter provided - prompt required vars + selected optional vars\n const requiredVars = envVarsMatchingDependsOn.filter((envVar) => !prePopulatedEnvKeys.includes(envVar.name) && envVar.isRequired);\n\n const selectedOptionalVars = allEnvVars.filter(\n (envVar) =>\n !envVar.isRequired && // Only optional vars\n params.optionalVarsToPrompt?.has(envVar.name) && // User selected it\n !prePopulatedEnvKeys.includes(envVar.name) && // Not already populated\n shouldPromptEnvVar(envVar, params.combination.dimensionValues) // Relevant to this config\n );\n\n envVarsToPrompt = [...requiredVars, ...selectedOptionalVars];\n }\n\n // Prompt for environment variable values using shared logic\n // In quick mode, skip prompts and use defaults/placeholders via the yes option\n const promptContext = `${params.combination.name}/${params.transport}`;\n\n // Build template vars for placeholder substitution (e.g., {HOST}, {PORT})\n const templateVars: Record<string, string> = {};\n if (params.httpHost) templateVars.HOST = params.httpHost;\n if (params.httpPort) templateVars.PORT = String(params.httpPort);\n\n const promptedEnv = await envPromptFn(promptContext, envVarsToPrompt, { yes: params.quick, templateVars });\n\n // Merge all env values: filtered defaults + dimension values + prompted values\n const env = { ...filteredDefaults, ...envDimensions, ...promptedEnv };\n\n // Build command and args based on source vs installed mode\n let command: string;\n let args: string[];\n\n if (params.useSource) {\n // Source mode: use node with relative path to bin entry\n if (!params.packageDir) {\n throw new Error('packageDir is required when useSource is true');\n }\n if (!params.binPath) {\n throw new Error('binPath is required when useSource is true (check package.json bin entry)');\n }\n const absolutePackageDir = path.resolve(params.packageDir);\n const relativePath = path.join(absolutePackageDir, params.binPath);\n command = 'node';\n args = [relativePath];\n } else {\n // Installed mode: use npx (current behavior)\n command = 'npx';\n args = ['-y', params.packageName];\n }\n\n // Add package arguments from argDefaults and argDimensions\n const allArgValues = { ...params.combination.argDefaults, ...argDimensions };\n for (const [argName, argValue] of Object.entries(allArgValues)) {\n // Named arguments are added as --arg value\n args.push(argName, argValue);\n }\n\n // Add HTTP-specific configuration\n if (params.transport === 'http' || params.transport === 'streamable-http') {\n const port = params.httpPort ?? 3000;\n args.push('--port', String(port));\n }\n\n // Build server config - structure differs for stdio vs http\n let serverConfig: ServerConfig;\n\n if (params.transport === 'http' || params.transport === 'streamable-http') {\n // HTTP servers use start block with stdio config structure\n const startBlock: ServerConfigStdio = {\n command,\n ...(args.length > 0 && { args }), // Only include if not empty\n ...(Object.keys(env).length > 0 && { env }), // Only include if not empty\n };\n\n const httpConfig: ServerConfigHttp = {\n type: 'http',\n url: `http://${params.httpHost ?? 'localhost'}:${params.httpPort ?? 3000}/mcp`,\n start: startBlock,\n };\n\n serverConfig = httpConfig;\n } else {\n // Stdio servers use top-level stdio config structure\n const stdioConfig: ServerConfigStdio = {\n command,\n ...(args.length > 0 && { args }), // Only include if not empty\n ...(Object.keys(env).length > 0 && { env }), // Only include if not empty\n };\n\n serverConfig = stdioConfig;\n }\n\n return serverConfig;\n}\n\n/** Generate config object (for JSON output or testing) - Exported for testing */\nexport async function generateConfigObject(\n params: {\n serverName: string;\n combination: Combination;\n transport: string;\n packageName: string;\n packageDir?: string;\n binPath?: string;\n metadata: ServerMetadata;\n metadataReader: Pick<MetadataReader, 'getPackageForTransport'>;\n httpHost?: string;\n httpPort?: number;\n useSource?: boolean;\n quick?: boolean;\n optionalVarsToPrompt?: Set<string>;\n },\n envPromptFn: typeof promptForEnvVars = promptForEnvVars\n): Promise<MCPConfiguration> {\n const serverConfig = await buildServerConfig(params, envPromptFn);\n\n return {\n mcpServers: {\n [params.serverName]: serverConfig,\n },\n };\n}\n\n/** Generate config file - Exported for testing */\nexport async function generateConfigFile(\n params: {\n serverName: string;\n combination: Combination;\n transport: string;\n outputDir: string;\n packageName: string;\n packageDir?: string;\n binPath?: string;\n metadata: ServerMetadata;\n metadataReader: Pick<MetadataReader, 'getPackageForTransport'>;\n httpHost?: string;\n httpPort?: number;\n useSource?: boolean;\n quick?: boolean;\n optionalVarsToPrompt?: Set<string>;\n },\n envPromptFn: typeof promptForEnvVars = promptForEnvVars\n): Promise<boolean> {\n // Normalize transport name for filename ('streamable-http' → 'http' to match config type)\n const transportName = params.transport === 'streamable-http' ? 'http' : params.transport;\n const filename = `.mcp.${params.combination.name}-${transportName}.json`;\n const filepath = path.join(params.outputDir, filename);\n\n // Check if file exists and ask user whether to overwrite\n if (fs.existsSync(filepath) && process.stdin.isTTY) {\n const shouldOverwrite = await confirm({\n message: `${filename} already exists. Overwrite?`,\n default: false,\n });\n\n if (!shouldOverwrite) {\n console.log(` ⏭️ Skipped ${filename}`);\n return false;\n }\n }\n\n try {\n // Ensure output directory exists\n fs.mkdirSync(params.outputDir, { recursive: true });\n\n const config = await generateConfigObject(params, envPromptFn);\n fs.writeFileSync(filepath, `${JSON.stringify(config, null, 2)}\\n`);\n console.log(` ✅ ${filename}`);\n return true;\n } catch (error) {\n console.error(` ❌ ${filename}: ${error instanceof Error ? error.message : String(error)}`);\n return false;\n }\n}\n"],"names":["TRANSPORT_MAP","createConfigChoices","discoverServerJson","extractServerName","filterConfigChoices","generateCommand","generateConditionalCombinations","generateConfigFile","generateConfigObject","generateMatrixCombinations","shouldPromptEnvVar","stdio","http","combinations","transports","choices","combination","t","transport","push","label","name","allChoices","selectedLabels","filter","choice","includes","generateCartesianProduct","dimensions","length","first","map","c","rest","slice","restProduct","result","restCombination","envVars","e","product","values","dimensionValues","forEach","dim","i","nameParts","toLowerCase","join","envKeys","d","argNames","defaults","argDefaults","primaryDims","dependsOn","conditionalDims","primaryProduct","primaryValues","baseDimensionValues","applicableConditionals","cond","_i","indexOf","conditionalProduct","condValues","fullDimensionValues","allDims","envVar","selectedValues","Object","entries","depName","allowedValues","selectedValue","options","useSource","jsonOutput","matrixMode","quickMode","serverJsonPath","packageDir","packageJsonPath","packageJson","packageName","serverName","binPath","packageNameWithoutOrg","serverJsonContent","metadata","error","metadataReader","stdioPackage","envVarsWithChoices","argsWithChoices","arg","outputDir","httpPackage","envVarsForMatrix","combo","httpHost","httpPort","generatedCount","configMode","finalServerName","config","portStr","availableDimensions","selectedDimensionNames","selectedDimensions","dimensionsWithFilteredChoices","choicesWithSkip","selectedChoices","dimensionNames","nonDimensionEnvVars","nonDimensionArgs","defaultValue","totalConfigs","key","value","generationMode","selectedConfigs","optionalVarsToPrompt","envVarsWithContext","primaryDimensionName","allEnvVars","context","allSelectedModes","groupedVars","relevantModes","appliesToAll","groupKey","templateVars","vars","rawDefault","defaultVal","allOptionalVarNames","configureChoice","checkboxChoices","selectedVarNames","configs","success","console","log","source","json","matrix","quick","process","exit","path","dirname","fs","existsSync","JSON","parse","readFileSync","bin","replace","keys","validateSchema","Error","message","String","MetadataReader","getPackageForTransport","environmentVariables","isMandatoryForMatrix","packageArguments","undefined","output","some","default","mkdirSync","recursive","select","disabled","input","validate","stringify","checkbox","checked","port","Number","parseInt","isNaN","type","a","choiceValues","dimension","allEnvKeys","allArgNames","required","Set","stdin","isTTY","Map","isRequired","has","set","get","add","size","Boolean","Array","from","sort","HOST","PORT","placeholder","substituteTemplateVars","description","startsWith","basePath","cwd","currentPath","parentPath","withoutOrg","buildServerConfig","params","envPromptFn","transportType","pkg","envDimensions","argDimensions","allPackageArgNames","relevantEnvVars","envVarsMatchingDependsOn","filteredDefaults","envDefaultKeys","envDimensionKeys","prePopulatedEnvKeys","envVarsToPrompt","requiredVars","selectedOptionalVars","promptContext","promptedEnv","env","command","args","absolutePackageDir","relativePath","allArgValues","argName","argValue","serverConfig","startBlock","httpConfig","stdioConfig","promptForEnvVars","envName","envValue","envVarMeta","find","yes","resolve","url","start","mcpServers","transportName","filename","filepath","shouldOverwrite","confirm","writeFileSync"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { Command } from 'commander';
2
+ export declare function createManifestCommand(): Command;
@@ -0,0 +1,2 @@
1
+ import { Command } from 'commander';
2
+ export declare function createManifestCommand(): Command;
@@ -0,0 +1,229 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "createManifestCommand", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return createManifestCommand;
9
+ }
10
+ });
11
+ var _commander = require("commander");
12
+ var _generatets = require("./generate.js");
13
+ var _validatets = require("./validate.js");
14
+ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
15
+ try {
16
+ var info = gen[key](arg);
17
+ var value = info.value;
18
+ } catch (error) {
19
+ reject(error);
20
+ return;
21
+ }
22
+ if (info.done) {
23
+ resolve(value);
24
+ } else {
25
+ Promise.resolve(value).then(_next, _throw);
26
+ }
27
+ }
28
+ function _async_to_generator(fn) {
29
+ return function() {
30
+ var self = this, args = arguments;
31
+ return new Promise(function(resolve, reject) {
32
+ var gen = fn.apply(self, args);
33
+ function _next(value) {
34
+ asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
35
+ }
36
+ function _throw(err) {
37
+ asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
38
+ }
39
+ _next(undefined);
40
+ });
41
+ };
42
+ }
43
+ function _instanceof(left, right) {
44
+ if (right != null && typeof Symbol !== "undefined" && right[Symbol.hasInstance]) {
45
+ return !!right[Symbol.hasInstance](left);
46
+ } else {
47
+ return left instanceof right;
48
+ }
49
+ }
50
+ function _ts_generator(thisArg, body) {
51
+ var f, y, t, _ = {
52
+ label: 0,
53
+ sent: function() {
54
+ if (t[0] & 1) throw t[1];
55
+ return t[1];
56
+ },
57
+ trys: [],
58
+ ops: []
59
+ }, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype), d = Object.defineProperty;
60
+ return d(g, "next", {
61
+ value: verb(0)
62
+ }), d(g, "throw", {
63
+ value: verb(1)
64
+ }), d(g, "return", {
65
+ value: verb(2)
66
+ }), typeof Symbol === "function" && d(g, Symbol.iterator, {
67
+ value: function() {
68
+ return this;
69
+ }
70
+ }), g;
71
+ function verb(n) {
72
+ return function(v) {
73
+ return step([
74
+ n,
75
+ v
76
+ ]);
77
+ };
78
+ }
79
+ function step(op) {
80
+ if (f) throw new TypeError("Generator is already executing.");
81
+ while(g && (g = 0, op[0] && (_ = 0)), _)try {
82
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
83
+ if (y = 0, t) op = [
84
+ op[0] & 2,
85
+ t.value
86
+ ];
87
+ switch(op[0]){
88
+ case 0:
89
+ case 1:
90
+ t = op;
91
+ break;
92
+ case 4:
93
+ _.label++;
94
+ return {
95
+ value: op[1],
96
+ done: false
97
+ };
98
+ case 5:
99
+ _.label++;
100
+ y = op[1];
101
+ op = [
102
+ 0
103
+ ];
104
+ continue;
105
+ case 7:
106
+ op = _.ops.pop();
107
+ _.trys.pop();
108
+ continue;
109
+ default:
110
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
111
+ _ = 0;
112
+ continue;
113
+ }
114
+ if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {
115
+ _.label = op[1];
116
+ break;
117
+ }
118
+ if (op[0] === 6 && _.label < t[1]) {
119
+ _.label = t[1];
120
+ t = op;
121
+ break;
122
+ }
123
+ if (t && _.label < t[2]) {
124
+ _.label = t[2];
125
+ _.ops.push(op);
126
+ break;
127
+ }
128
+ if (t[2]) _.ops.pop();
129
+ _.trys.pop();
130
+ continue;
131
+ }
132
+ op = body.call(thisArg, _);
133
+ } catch (e) {
134
+ op = [
135
+ 6,
136
+ e
137
+ ];
138
+ y = 0;
139
+ } finally{
140
+ f = t = 0;
141
+ }
142
+ if (op[0] & 5) throw op[1];
143
+ return {
144
+ value: op[0] ? op[1] : void 0,
145
+ done: true
146
+ };
147
+ }
148
+ }
149
+ function createManifestCommand() {
150
+ var manifest = new _commander.Command('manifest').description('Author and validate MCP server manifests (server.json)');
151
+ manifest.command('generate').description('Interactively generate a server manifest (server.json)').option('--source', 'Use source code paths (node instead of npx)').option('--json', 'Output to stdout instead of writing files').option('--matrix', 'Generate all matrix combinations without prompts').option('--output <dir>', 'Output directory (default: examples for --matrix, . otherwise)').option('--quick', 'Skip optional env var prompts and use defaults').action(function(options) {
152
+ return _async_to_generator(function() {
153
+ var error;
154
+ return _ts_generator(this, function(_state) {
155
+ switch(_state.label){
156
+ case 0:
157
+ _state.trys.push([
158
+ 0,
159
+ 2,
160
+ ,
161
+ 3
162
+ ]);
163
+ return [
164
+ 4,
165
+ (0, _generatets.generateCommand)(options)
166
+ ];
167
+ case 1:
168
+ _state.sent();
169
+ return [
170
+ 3,
171
+ 3
172
+ ];
173
+ case 2:
174
+ error = _state.sent();
175
+ console.error("\n❌ ".concat(_instanceof(error, Error) ? error.message : String(error)));
176
+ process.exit(1);
177
+ return [
178
+ 3,
179
+ 3
180
+ ];
181
+ case 3:
182
+ return [
183
+ 2
184
+ ];
185
+ }
186
+ });
187
+ })();
188
+ });
189
+ manifest.command('validate <file>').description('Validate a server manifest against the MCP schema').action(function(filePath) {
190
+ return _async_to_generator(function() {
191
+ var error;
192
+ return _ts_generator(this, function(_state) {
193
+ switch(_state.label){
194
+ case 0:
195
+ _state.trys.push([
196
+ 0,
197
+ 2,
198
+ ,
199
+ 3
200
+ ]);
201
+ return [
202
+ 4,
203
+ (0, _validatets.validateCommand)(filePath)
204
+ ];
205
+ case 1:
206
+ _state.sent();
207
+ return [
208
+ 3,
209
+ 3
210
+ ];
211
+ case 2:
212
+ error = _state.sent();
213
+ console.error("\n❌ ".concat(_instanceof(error, Error) ? error.message : String(error)));
214
+ process.exit(1);
215
+ return [
216
+ 3,
217
+ 3
218
+ ];
219
+ case 3:
220
+ return [
221
+ 2
222
+ ];
223
+ }
224
+ });
225
+ })();
226
+ });
227
+ return manifest;
228
+ }
229
+ /* CJS INTEROP */ if (exports.__esModule && exports.default) { try { Object.defineProperty(exports.default, '__esModule', { value: true }); for (var key in exports) { exports.default[key] = exports[key]; } } catch (_) {}; module.exports = exports.default; }
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/Users/kevin/Dev/Projects/ai/mcp-z/cli/src/commands/manifest/index.ts"],"sourcesContent":["import { Command } from 'commander';\nimport { generateCommand } from './generate.ts';\nimport { validateCommand } from './validate.ts';\n\nexport function createManifestCommand(): Command {\n const manifest = new Command('manifest').description('Author and validate MCP server manifests (server.json)');\n\n manifest\n .command('generate')\n .description('Interactively generate a server manifest (server.json)')\n .option('--source', 'Use source code paths (node instead of npx)')\n .option('--json', 'Output to stdout instead of writing files')\n .option('--matrix', 'Generate all matrix combinations without prompts')\n .option('--output <dir>', 'Output directory (default: examples for --matrix, . otherwise)')\n .option('--quick', 'Skip optional env var prompts and use defaults')\n .action(async (options: unknown) => {\n try {\n await generateCommand(options as { source?: boolean; json?: boolean; matrix?: boolean; output?: string; quick?: boolean });\n } catch (error) {\n console.error(`\\n❌ ${error instanceof Error ? error.message : String(error)}`);\n process.exit(1);\n }\n });\n\n manifest\n .command('validate <file>')\n .description('Validate a server manifest against the MCP schema')\n .action(async (filePath: string) => {\n try {\n await validateCommand(filePath);\n } catch (error) {\n console.error(`\\n❌ ${error instanceof Error ? error.message : String(error)}`);\n process.exit(1);\n }\n });\n\n return manifest;\n}\n"],"names":["createManifestCommand","manifest","Command","description","command","option","action","options","error","generateCommand","console","Error","message","String","process","exit","filePath","validateCommand"],"mappings":";;;;+BAIgBA;;;eAAAA;;;yBAJQ;0BACQ;0BACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEzB,SAASA;IACd,IAAMC,WAAW,IAAIC,kBAAO,CAAC,YAAYC,WAAW,CAAC;IAErDF,SACGG,OAAO,CAAC,YACRD,WAAW,CAAC,0DACZE,MAAM,CAAC,YAAY,+CACnBA,MAAM,CAAC,UAAU,6CACjBA,MAAM,CAAC,YAAY,oDACnBA,MAAM,CAAC,kBAAkB,kEACzBA,MAAM,CAAC,WAAW,kDAClBC,MAAM,CAAC,SAAOC;;gBAGJC;;;;;;;;;;wBADP;;4BAAMC,IAAAA,2BAAe,EAACF;;;wBAAtB;;;;;;wBACOC;wBACPE,QAAQF,KAAK,CAAC,AAAC,OAA6D,OAAvDA,AAAK,YAALA,OAAiBG,SAAQH,MAAMI,OAAO,GAAGC,OAAOL;wBACrEM,QAAQC,IAAI,CAAC;;;;;;;;;;;QAEjB;;IAEFd,SACGG,OAAO,CAAC,mBACRD,WAAW,CAAC,qDACZG,MAAM,CAAC,SAAOU;;gBAGJR;;;;;;;;;;wBADP;;4BAAMS,IAAAA,2BAAe,EAACD;;;wBAAtB;;;;;;wBACOR;wBACPE,QAAQF,KAAK,CAAC,AAAC,OAA6D,OAAvDA,AAAK,YAALA,OAAiBG,SAAQH,MAAMI,OAAO,GAAGC,OAAOL;wBACrEM,QAAQC,IAAI,CAAC;;;;;;;;;;;QAEjB;;IAEF,OAAOd;AACT"}
@@ -0,0 +1,71 @@
1
+ export interface ServerMetadata {
2
+ name: string;
3
+ description: string;
4
+ version: string;
5
+ title: string;
6
+ packages: PackageConfig[];
7
+ }
8
+ export interface PackageConfig {
9
+ registryType: string;
10
+ identifier: string;
11
+ transport: {
12
+ type: 'stdio' | 'streamable-http';
13
+ url?: string;
14
+ };
15
+ runtimeHint?: string;
16
+ runtimeArguments?: CliArgMetadata[];
17
+ environmentVariables: EnvVarMetadata[];
18
+ packageArguments: CliArgMetadata[];
19
+ }
20
+ export interface EnvVarMetadata {
21
+ name: string;
22
+ value?: string;
23
+ default?: string;
24
+ description: string;
25
+ placeholder?: string;
26
+ choices?: string[];
27
+ isRequired?: boolean;
28
+ isSecret: boolean;
29
+ isMandatoryForMatrix?: boolean;
30
+ dependsOn?: Record<string, string[]>;
31
+ }
32
+ export interface CliArgMetadata {
33
+ type: 'named';
34
+ name: string;
35
+ value?: string;
36
+ description?: string;
37
+ choices?: string[];
38
+ }
39
+ export interface MetadataReaderOptions {
40
+ monorepoPath?: string;
41
+ nodeModulesPath?: string;
42
+ moduleResolutionPaths?: string[];
43
+ skipSchemaValidation?: boolean;
44
+ }
45
+ export declare class MetadataReader {
46
+ private readonly options;
47
+ constructor(options?: MetadataReaderOptions);
48
+ /**
49
+ * Read server.json metadata from local directory or node_modules
50
+ * Validates against MCP schema before returning
51
+ *
52
+ * @param serverName - Can be:
53
+ * - Full package name: "@org/package-name"
54
+ * - Short name: "drive" (will search node_modules for packages with server.json)
55
+ */
56
+ readServerMetadata(serverName: string): Promise<ServerMetadata>;
57
+ /**
58
+ * Get package config for specific transport type
59
+ */
60
+ getPackageForTransport(metadata: ServerMetadata, transport: 'stdio' | 'streamable-http'): PackageConfig | undefined;
61
+ /**
62
+ * Discover installed servers from:
63
+ * 1. ../servers/ directory (for monorepo development)
64
+ * 2. node_modules (any package with server.json)
65
+ */
66
+ discoverInstalledServers(): Promise<Array<{
67
+ shortName: string;
68
+ packageName: string;
69
+ serverJsonPath: string;
70
+ }>>;
71
+ }
@@ -0,0 +1,71 @@
1
+ export interface ServerMetadata {
2
+ name: string;
3
+ description: string;
4
+ version: string;
5
+ title: string;
6
+ packages: PackageConfig[];
7
+ }
8
+ export interface PackageConfig {
9
+ registryType: string;
10
+ identifier: string;
11
+ transport: {
12
+ type: 'stdio' | 'streamable-http';
13
+ url?: string;
14
+ };
15
+ runtimeHint?: string;
16
+ runtimeArguments?: CliArgMetadata[];
17
+ environmentVariables: EnvVarMetadata[];
18
+ packageArguments: CliArgMetadata[];
19
+ }
20
+ export interface EnvVarMetadata {
21
+ name: string;
22
+ value?: string;
23
+ default?: string;
24
+ description: string;
25
+ placeholder?: string;
26
+ choices?: string[];
27
+ isRequired?: boolean;
28
+ isSecret: boolean;
29
+ isMandatoryForMatrix?: boolean;
30
+ dependsOn?: Record<string, string[]>;
31
+ }
32
+ export interface CliArgMetadata {
33
+ type: 'named';
34
+ name: string;
35
+ value?: string;
36
+ description?: string;
37
+ choices?: string[];
38
+ }
39
+ export interface MetadataReaderOptions {
40
+ monorepoPath?: string;
41
+ nodeModulesPath?: string;
42
+ moduleResolutionPaths?: string[];
43
+ skipSchemaValidation?: boolean;
44
+ }
45
+ export declare class MetadataReader {
46
+ private readonly options;
47
+ constructor(options?: MetadataReaderOptions);
48
+ /**
49
+ * Read server.json metadata from local directory or node_modules
50
+ * Validates against MCP schema before returning
51
+ *
52
+ * @param serverName - Can be:
53
+ * - Full package name: "@org/package-name"
54
+ * - Short name: "drive" (will search node_modules for packages with server.json)
55
+ */
56
+ readServerMetadata(serverName: string): Promise<ServerMetadata>;
57
+ /**
58
+ * Get package config for specific transport type
59
+ */
60
+ getPackageForTransport(metadata: ServerMetadata, transport: 'stdio' | 'streamable-http'): PackageConfig | undefined;
61
+ /**
62
+ * Discover installed servers from:
63
+ * 1. ../servers/ directory (for monorepo development)
64
+ * 2. node_modules (any package with server.json)
65
+ */
66
+ discoverInstalledServers(): Promise<Array<{
67
+ shortName: string;
68
+ packageName: string;
69
+ serverJsonPath: string;
70
+ }>>;
71
+ }