UNPKG

@juspay/neurolink

Version:

Universal AI Development Platform with working MCP integration, multi-provider support, voice (TTS/STT/realtime), and professional CLI. 58+ external MCP servers discoverable, multimodal file processing, RAG pipelines. Build, test, and deploy AI applicatio

350 lines (349 loc) 11 kB
/** * External MCP Server Types * Comprehensive type system for external MCP server integration * Following MCP 2024-11-05 specification */ import type { JsonValue, JsonObject } from "./common.js"; import type { ChildProcess } from "child_process"; import type { Client } from "@modelcontextprotocol/sdk/client/index.js"; import type { Transport } from "@modelcontextprotocol/sdk/shared/transport.js"; /** * Supported MCP transport protocols - imported from mcpTypes.js (canonical definition) */ import type { MCPTransportType, MCPServerInfo } from "./mcp.js"; export type { MCPTransportType } from "./mcp.js"; /** * External MCP server configuration for process spawning */ export type ExternalMCPServerConfig = { /** Unique identifier for the server */ id: string; /** Command to execute (e.g., 'npx', 'node', 'python') */ command: string; /** Arguments to pass to the command */ args: string[]; /** Environment variables for the process */ env?: Record<string, string>; /** Transport protocol to use */ transport: MCPTransportType; /** Connection timeout in milliseconds (default: 10000) */ timeout?: number; /** Maximum retry attempts for connection (default: 3) */ retries?: number; /** Health check interval in milliseconds (default: 30000) */ healthCheckInterval?: number; /** Whether to automatically restart on failure (default: true) */ autoRestart?: boolean; /** Working directory for the process */ cwd?: string; /** URL for SSE/WebSocket/HTTP transports */ url?: string; /** HTTP headers for authentication and configuration (HTTP/SSE/WebSocket) */ headers?: Record<string, string>; /** List of tool names to block/blacklist from this server */ blockedTools?: string[]; /** Additional metadata */ metadata?: Record<string, JsonValue>; }; /** * Runtime state of an external MCP server instance */ export type ExternalMCPServerInstance = { /** Server configuration */ config: ExternalMCPServerConfig; /** Child process (for stdio transport) */ process: ChildProcess | null; /** MCP client instance */ client: Client | null; /** Transport instance */ transport: Transport | null; /** Current server status */ status: ExternalMCPServerStatus; /** Last error message if any */ lastError?: string; /** When the server was started */ startTime?: Date; /** When the server was last seen healthy */ lastHealthCheck?: Date; /** Number of reconnection attempts */ reconnectAttempts: number; /** Maximum reconnection attempts before giving up */ maxReconnectAttempts: number; /** Available tools from this server */ tools: Map<string, ExternalMCPToolInfo>; /** Cached tools array for ZERO conversion - MCP format */ toolsArray?: Array<{ name: string; description: string; inputSchema?: object; }>; /** Server capabilities reported by MCP */ capabilities?: Record<string, JsonValue>; /** Health monitoring timer */ healthTimer?: NodeJS.Timeout; /** Restart backoff timer */ restartTimer?: NodeJS.Timeout; /** Performance metrics */ metrics: { totalConnections: number; totalDisconnections: number; totalErrors: number; totalToolCalls: number; averageResponseTime: number; lastResponseTime: number; }; }; /** * External MCP server status states */ export type ExternalMCPServerStatus = "initializing" | "connecting" | "connected" | "disconnected" | "failed" | "restarting" | "stopping" | "stopped"; /** * Tool information from external MCP server */ export type ExternalMCPToolInfo = { /** Tool name */ name: string; /** Tool description */ description: string; /** Server ID that provides this tool */ serverId: string; /** Input schema (JSON Schema) */ inputSchema?: JsonObject; /** Whether the tool is currently available */ isAvailable: boolean; /** Tool metadata */ metadata?: Record<string, JsonValue>; /** When the tool was last successfully called */ lastCalled?: Date; /** Tool execution statistics */ stats: { totalCalls: number; successfulCalls: number; failedCalls: number; averageExecutionTime: number; lastExecutionTime: number; }; }; /** * External MCP server health status */ export type ExternalMCPServerHealth = { /** Server ID */ serverId: string; /** Whether the server is healthy */ isHealthy: boolean; /** Current status */ status: ExternalMCPServerStatus; /** When the health check was performed */ checkedAt: Date; /** Response time for health check */ responseTime?: number; /** Number of available tools */ toolCount: number; /** Any health issues detected */ issues: string[]; /** Performance metrics */ performance: { uptime: number; memoryUsage?: number; cpuUsage?: number; averageResponseTime: number; }; }; /** * External MCP server configuration validation result */ export type ExternalMCPConfigValidation = { /** Whether the configuration is valid */ isValid: boolean; /** Validation errors */ errors: string[]; /** Validation warnings */ warnings: string[]; /** Suggestions for improvement */ suggestions: string[]; }; /** * External MCP server operation result */ export type ExternalMCPOperationResult<T = unknown> = { /** Whether the operation was successful */ success: boolean; /** Result data if successful */ data?: T; /** Error message if failed */ error?: string; /** Server ID */ serverId?: string; /** Operation duration in milliseconds */ duration?: number; /** Additional metadata */ metadata?: { timestamp: number; operation: string; [key: string]: JsonValue; }; }; /** * External MCP tool execution context */ export type ExternalMCPToolContext = { /** Execution session ID */ sessionId: string; /** User ID if available */ userId?: string; /** Server ID executing the tool */ serverId: string; /** Tool name being executed */ toolName: string; /** Execution timeout in milliseconds */ timeout?: number; /** Additional context data */ metadata?: Record<string, JsonValue>; }; /** * External MCP tool execution result */ export type ExternalMCPToolResult = { /** Whether the execution was successful */ success: boolean; /** Result data if successful */ data?: unknown; /** Error message if failed */ error?: string; /** Execution duration in milliseconds */ duration: number; /** Tool execution metadata */ metadata?: { toolName: string; serverId: string; timestamp: number; [key: string]: JsonValue; }; }; /** * External MCP server events */ export type ExternalMCPServerEvents = { /** Server status changed */ statusChanged: { serverId: string; serverName: string; oldStatus: ExternalMCPServerStatus; newStatus: ExternalMCPServerStatus; timestamp: Date; }; /** Server connected successfully */ connected: { serverId: string; serverName: string; toolCount: number; timestamp: Date; }; /** Server disconnected */ disconnected: { serverId: string; serverName: string; reason?: string; timestamp: Date; }; /** Server failed */ failed: { serverId: string; serverName: string; error: string; timestamp: Date; }; /** Tool discovered */ toolDiscovered: { serverId: string; serverName: string; toolName: string; toolInfo: ExternalMCPToolInfo; timestamp: Date; }; /** Tool removed */ toolRemoved: { serverId: string; serverName: string; toolName: string; timestamp: Date; }; /** Health check completed */ healthCheck: { serverId: string; serverName: string; health: ExternalMCPServerHealth; timestamp: Date; }; }; /** * External MCP manager configuration */ export type ExternalMCPManagerConfig = { /** Maximum number of concurrent servers */ maxServers?: number; /** Default timeout for operations */ defaultTimeout?: number; /** Default health check interval */ defaultHealthCheckInterval?: number; /** Whether to enable automatic restart */ enableAutoRestart?: boolean; /** Maximum restart attempts per server */ maxRestartAttempts?: number; /** Restart backoff multiplier */ restartBackoffMultiplier?: number; /** Whether to enable performance monitoring */ enablePerformanceMonitoring?: boolean; /** Log level for external MCP operations */ logLevel?: "debug" | "info" | "warn" | "error"; }; /** * Extended MCPServerInfo with runtime state for external servers * Represents the transition towards zero-conversion architecture by combining * configuration fields from MCPServerInfo with runtime-only state needed for * active server management (process handles, clients, metrics, etc.) */ export type RuntimeMCPServerInfo = MCPServerInfo & { /** Child process handle (for stdio transport, null for HTTP transports) */ process: import("child_process").ChildProcess | null; /** MCP client instance for communication */ client: Client | null; /** Transport instance (renamed from 'transport' to avoid conflict with MCPServerInfo.transport) */ transportInstance: Transport | null; /** Last error message if any */ lastError?: string; /** When the server was started */ startTime?: Date; /** When the server was last seen healthy */ lastHealthCheck?: Date; /** Number of reconnection attempts */ reconnectAttempts: number; /** Maximum reconnection attempts before giving up */ maxReconnectAttempts: number; /** Server capabilities reported during MCP handshake */ capabilities?: Record<string, JsonValue>; /** Health monitoring timer */ healthTimer?: NodeJS.Timeout; /** Restart backoff timer */ restartTimer?: NodeJS.Timeout; /** Performance metrics for this server */ metrics: { totalConnections: number; totalDisconnections: number; totalErrors: number; totalToolCalls: number; averageResponseTime: number; lastResponseTime: number; }; /** Legacy compatibility - maintain tools map for now */ toolsMap: Map<string, ExternalMCPToolInfo>; /** Cached tools array for ZERO conversion - MCP format */ toolsArray?: Array<{ name: string; description: string; inputSchema?: object; }>; /** Compatibility field for existing code - stores MCPServerInfo config */ config: MCPServerInfo; };