import { ChatCompletionFunctionTool } from "openai/resources.js"; import type { ToolPlugin, ToolResult, ToolContext } from "../tools/types.js"; import { Container } from "../utils/container.js"; import type { Logger, McpServerConfig, McpConfig, McpTool, McpServerStatus } from "../types/index.js"; export interface McpManagerCallbacks { onMcpServersChange?: (servers: McpServerStatus[]) => void; } export interface McpManagerOptions { callbacks?: McpManagerCallbacks; logger?: Logger; /** Pre-configured MCP servers passed from constructor options */ mcpServers?: Record; } export declare function expandEnvVars(value: string): string; /** * Walk an MCP config and resolve environment variables in all string fields. * Only expands ${VAR} from process.env (skipping WAVE_PLUGIN_ROOT which is * handled at spawn time). */ export declare function resolveMcpConfig(config: McpConfig): McpConfig; export declare class McpManager { private container; private config; private servers; private connections; private configPath; private workdir; private callbacks; private mcpServers; private reconnectTimers; private reconnectAttempts; constructor(container: Container, options?: McpManagerOptions); /** * Initialize MCP manager with working directory and optionally auto-connect */ initialize(workdir: string, autoConnect?: boolean): Promise; ensureConfigLoaded(): Promise; loadConfig(): Promise; saveConfig(config: McpConfig): Promise; getConfig(): McpConfig | null; getAllServers(): McpServerStatus[]; getServer(name: string): McpServerStatus | undefined; updateServerStatus(name: string, updates: Partial): void; addServer(name: string, config: McpServerConfig): boolean; removeServer(name: string): boolean; connectServer(name: string): Promise; /** * Schedule auto-reconnect with exponential backoff. * Delays: 1s, 2s, 4s, 8s, 16s, 30s, 30s, ... */ private scheduleReconnect; /** * Poll listTools() to detect when the SDK's auto-reconnect succeeds * after a transient SSE disconnect. Restores status to "connected". */ private pollReconnectRecovery; private cancelReconnect; disconnectServer(name: string): Promise; getAllConnectedTools(): McpTool[]; executeMcpTool(toolName: string, args: Record, context?: ToolContext): Promise<{ success: boolean; content: string; serverName?: string; images?: Array<{ data: string; mediaType?: string; }>; }>; private executeToolOnConnection; cleanup(): Promise; /** * Get all currently available MCP tools as plugins */ getMcpToolPlugins(): ToolPlugin[]; /** * Get all currently available MCP tools as OpenAI function tools */ getMcpToolsConfig(): ChatCompletionFunctionTool[]; /** * Execute an MCP tool by name (registry version) */ executeMcpToolByRegistry(name: string, args: Record, context: ToolContext): Promise; /** * Check if a tool name belongs to an MCP tool */ isMcpTool(name: string): boolean; }