/**
 * MCP tools → Gemini function tools bridge (realtime mode).
 *
 * In speech-to-speech mode Gemini owns the tool loop, so an external MCP
 * server's tools are registered as LiveKit/Gemini function tools rather than
 * NeuroLink tools. This connects to the MCP server as the calling user
 * (`x-auth-token` + base64 `x-context`), sanitizes each tool's schema into the
 * Gemini-safe subset, wires WRITE-labeled (destructive) tools through a HITL
 * confirmation, and forwards tool start/result events to the browser bridge.
 *
 * `@livekit/agents` and `@modelcontextprotocol/sdk` are imported dynamically so
 * the core package does not require them unless the realtime agent is used.
 *
 * See docs/features/livekit-voice-agent.md.
 */
import type { llm as llmNs } from "@livekit/agents";
import type { BuildRealtimeMcpToolsParams } from "../../types/index.js";
/** Flatten an MCP tool result's text content into a single string for the model. */
export declare function mcpResultToText(result: unknown): string;
/**
 * Connect to the MCP server as the calling user and bridge every tool into a
 * LiveKit `ToolContext`. Returns the tool map + the client (close on shutdown).
 * The server already scopes the tool list by `x-context`, so no client-side
 * filtering is needed.
 */
export declare function buildRealtimeMcpTools(params: BuildRealtimeMcpToolsParams): Promise<{
    tools: llmNs.ToolContext;
    client: {
        close: () => Promise<void>;
    };
}>;
