import type { McpClientConnectOptions, McpClientOptions, McpClientStatus, McpClientStatusListener, McpTool } from './types'; import type { AnyTool } from '@agforge/core'; export declare class McpClient { readonly name: string; private readonly config; private readonly reconnectOptions; private readonly heartbeatOptions; private readonly timeoutOptions; private readonly circuitBreakerOptions; private readonly toolFilterOptions; private status; private statusListeners; private client; private transport; private connectPromise; private connectionReady; private reconnectAttempt; private heartbeatTimer; private circuitBreaker; private mcpTools; private tools; constructor(options: McpClientOptions); /** * 获取当前连接状态。 */ getStatus(): McpClientStatus; /** * 注册状态变更监听器。 * @returns 注销函数 */ onStatusChange(listener: McpClientStatusListener): () => void; /** * 建立连接。并发安全——多次调用返回同一 pending Promise。 * 仅 disconnected 状态允许真正发起连接;connected/connecting/reconnecting 时幂等返回。 * * @param options.failFast - 是否快速失败。为 true 时仅尝试首次连接, * 失败后抛出异常,重试在后台异步进行。适用于不希望阻塞调用方等待重试的场景。 */ connect(options?: McpClientConnectOptions): Promise; /** * 获取转换后的 AgForge 工具(断连时自动等待重连)。 */ getTools(): Promise>; /** * 获取 MCP 服务中原始的工具(未经转换)。 */ getMcpTools(): Promise>; /** * 断开连接并清理资源。 * 对于 StreamableHTTP 传输,发送 HTTP DELETE 终止服务端 session。 */ dispose(): Promise; private doConnect; private doReconnect; /** * 包装需要连接的操作。 * 如果操作期间断连: * - 幂等操作(canRetry=true):等待重连后重试 * - 非幂等操作(canRetry=false):等待重连完成后抛出原始错误 */ private withConnection; private handleConnectionLost; private isConnectionError; private fetchTools; private executeTool; private filterTools; private matchesPattern; private registerListChangedHandler; private clearToolCache; private startHeartbeat; private stopHeartbeat; private setStatus; private createTransport; private calculateBackoff; }