import { Client, type ClientContext, type ClientOptions, type ConnectOptions, type HandlerResultTypeMap, type RequestTypeMap } from "@modelcontextprotocol/client";
import type { ClientDefinition } from "./types";
type Handler<Method extends keyof RequestTypeMap> = (request: RequestTypeMap[Method], context: ClientContext) => HandlerResultTypeMap[Method] | Promise<HandlerResultTypeMap[Method]>;
export interface ClientHandlers {
    sampling?: Handler<"sampling/createMessage">;
    /** Handles both form and URL elicitation requests. */
    elicitation?: Handler<"elicitation/create">;
    roots?: Handler<"roots/list">;
}
export interface ManagedClientOptions {
    handlers?: ClientHandlers;
    /** Defaults to automatic modern/legacy protocol negotiation. */
    versionNegotiation?: ClientOptions["versionNegotiation"];
    /** SDK connection options, including timeout and cancellation signal. */
    connect?: ConnectOptions;
    /** Receives piped subprocess stderr; otherwise it is forwarded to stderr. */
    onStderrData?: (chunk: Buffer) => void;
}
/** Connect using a client definition, with handlers installed before negotiation. */
export declare function createClient(definition: ClientDefinition, options?: ManagedClientOptions): Promise<Client>;
/** Run an operation and close the connection even when the operation fails. */
export declare function withClient<T>(definition: ClientDefinition, operation: (client: Client) => T | Promise<T>, options?: ManagedClientOptions): Promise<T>;
export {};
