/**
 * MCP Tool Factory
 *
 * Creates AgentTool instances from MCP tool definitions.
 * Uses the factory pattern to match new_indusvx's ToolRegistry.
 *
 * Reference: MCP tool factory integration patterns.
 */
import type { TSchema } from "@sinclair/typebox";
import type { AgentTool } from "../bot/types.js";
import type { MCPToolDefinition, MCPToolCallResult } from "./types.js";
/**
 * Interface for MCP client that can call tools.
 */
export interface MCPToolClient {
    /** Server name */
    readonly serverName: string;
    /** Whether client is connected */
    readonly connected: boolean;
    /** Call a tool on the MCP server */
    callTool(name: string, args: Record<string, unknown>): Promise<MCPToolCallResult>;
}
/**
 * Create an AgentTool from an MCP tool definition.
 *
 * This function creates a factory that matches ToolRegistry's pattern.
 * The tool is namespaced with the server name to avoid conflicts.
 *
 * @param mcpTool - MCP tool definition from the server
 * @param client - MCP client to use for tool execution
 * @returns Factory function that creates an AgentTool
 */
export declare function createMCPAgentToolFactory(mcpTool: MCPToolDefinition, client: MCPToolClient): () => AgentTool<TSchema, MCPToolCallResult>;
/**
 * Register all MCP tools from a client into a ToolRegistry.
 *
 * This is the main integration point with new_indusvx's ToolRegistry.
 *
 * @param registry - ToolRegistry instance to register tools into
 * @param client - MCP client with tools to register
 * @param tools - List of tool definitions from the server
 * @returns Number of tools registered
 */
export declare function registerMCPToolsInRegistry(registry: import("../bot/actions/registry.js").ToolRegistry, client: MCPToolClient, tools: MCPToolDefinition[]): Promise<number>;
/**
 * Create a map of AgentTools from MCP tool definitions.
 * Useful when you don't want to use the registry pattern.
 *
 * @param tools - List of tool definitions from the server
 * @param client - MCP client to use for tool execution
 * @returns Map of namespaced tool names to AgentTool instances
 */
export declare function createMCPToolsMap(tools: MCPToolDefinition[], client: MCPToolClient): Map<string, AgentTool<TSchema, MCPToolCallResult>>;
/**
 * Create a record of AgentTools from MCP tool definitions.
 * Matches the format expected by Agent's tools property.
 *
 * @param tools - List of tool definitions from the server
 * @param client - MCP client to use for tool execution
 * @returns Record of namespaced tool names to AgentTool instances
 */
export declare function createMCPToolsRecord(tools: MCPToolDefinition[], client: MCPToolClient): Record<string, AgentTool<TSchema, MCPToolCallResult>>;
