/**
 * MCP Client for Franklin.
 * Connects to MCP servers, discovers tools, and wraps them as CapabilityHandlers.
 * Supports stdio and HTTP (SSE) transports.
 */
import type { CapabilityHandler } from '../agent/types.js';
export interface McpServerConfig {
    /** Transport type */
    transport: 'stdio' | 'http';
    /** For stdio: command to run */
    command?: string;
    /** For stdio: arguments */
    args?: string[];
    /** For stdio: environment variables */
    env?: Record<string, string>;
    /** For http: server URL */
    url?: string;
    /** For http: headers */
    headers?: Record<string, string>;
    /** Human-readable label */
    label?: string;
    /** Disable this server */
    disabled?: boolean;
}
export interface McpConfig {
    mcpServers: Record<string, McpServerConfig>;
}
/**
 * Connect to all configured MCP servers and return discovered tools.
 * Each connection has a 5s timeout to avoid blocking startup.
 */
export declare function connectMcpServers(config: McpConfig, debug?: boolean): Promise<CapabilityHandler[]>;
/**
 * Disconnect all MCP servers.
 */
export declare function disconnectMcpServers(): Promise<void>;
/**
 * Aggregate server-level instructions from all connected MCP servers into a
 * single system-prompt section, or '' if no server supplied any.
 *
 * These come from the `initialize` response of servers Franklin chose to
 * connect (built-in, or user-configured + trusted), so they're treated as
 * trusted guidance rather than untrusted data. The agent reads this once per
 * session to learn each toolset's playbook (which tool for which question,
 * common chains, anti-patterns) instead of rediscovering it by trial.
 */
export declare function getMcpServerInstructions(): string;
/**
 * List connected MCP servers and their tools.
 */
export declare function listMcpServers(): Array<{
    name: string;
    toolCount: number;
    tools: string[];
}>;
