UNPKG

@cequenceai/mcp-cli

Version:

Cequence MCP CLI - Command-line tool for setting up Cequence MCP servers with AI clients

112 lines (92 loc) 2.97 kB
import { spawn } from 'child_process'; import { McpServerConfig, SetupResult } from '../types'; import { sanitizeServerName } from '../utils/validation'; /** * Checks if the Claude CLI is available in PATH */ async function isClaudeCliAvailable(): Promise<boolean> { return new Promise((resolve) => { const process = spawn('claude', ['--version'], { stdio: 'pipe', shell: true }); process.on('close', (code) => { resolve(code === 0); }); process.on('error', () => { resolve(false); }); }); } /** * Executes the claude mcp add command */ async function executeClaudeMcpAdd( serverName: string, url: string, transport: 'http' | 'sse' = 'http' ): Promise<{ success: boolean; output: string; error?: string }> { return new Promise((resolve) => { const args = ['mcp', 'add', '--transport', transport, serverName, url]; const process = spawn('claude', args, { stdio: 'pipe', shell: true }); let stdout = ''; let stderr = ''; process.stdout?.on('data', (data) => { stdout += data.toString(); }); process.stderr?.on('data', (data) => { stderr += data.toString(); }); process.on('close', (code) => { if (code === 0) { resolve({ success: true, output: stdout }); } else { resolve({ success: false, output: stdout, error: stderr || 'Command failed' }); } }); process.on('error', (error) => { resolve({ success: false, output: '', error: error.message }); }); }); } /** * Sets up Cequence MCP server configuration for Claude Code */ export async function setupClaudeCode( config: McpServerConfig, transport: 'http' | 'sse' = 'http' ): Promise<SetupResult> { try { // Check if Claude CLI is available const cliAvailable = await isClaudeCliAvailable(); if (!cliAvailable) { return { success: false, message: 'Claude CLI is not installed or not in PATH. Please install Claude Code first: https://claude.ai/code' }; } // Sanitize the server name for use as an identifier const serverName = sanitizeServerName(config.name).toLowerCase().replace(/\s+/g, '-'); // Execute the claude mcp add command const result = await executeClaudeMcpAdd(serverName, config.url, transport); if (result.success) { return { success: true, message: `Cequence MCP server "${config.name}" configured successfully for Claude Code using ${transport.toUpperCase()} transport` }; } else { return { success: false, message: `Failed to configure Cequence MCP server for Claude Code: ${result.error || 'Unknown error'}` }; } } catch (error) { return { success: false, message: `Failed to configure Cequence MCP server for Claude Code: ${error instanceof Error ? error.message : String(error)}` }; } }