/**
 * Smart Lazy Tool Registry
 *
 * Implements eager registration with lazy implementation loading
 * to maintain fast startup while showing all tools immediately
 */
import { Tool } from '@modelcontextprotocol/sdk/types.js';
import { ToolDefinition } from '../types/index.js';
export interface LazyToolDefinition extends Omit<ToolDefinition, 'handler'> {
    loader: () => Promise<ToolDefinition | Tool | any>;
    loaded?: boolean;
    implementation?: ToolDefinition;
    handler?: (args: any) => Promise<any>;
}
export declare class LazyToolRegistry {
    private tools;
    private loadingPromises;
    private loadedCount;
    private totalCount;
    /**
     * Register a tool with lazy loading
     */
    registerLazyTool(config: {
        name: string;
        description: string;
        inputSchema: any;
        tags?: string[];
        loader: () => Promise<ToolDefinition>;
    }): void;
    /**
     * Check if a tool is registered (without loading)
     */
    hasToolMetadata(name: string): boolean;
    /**
     * Get tool metadata without loading implementation
     */
    getToolMetadata(name: string): LazyToolDefinition | null;
    /**
     * Get all tool metadata without loading implementations
     */
    getAllToolMetadata(): LazyToolDefinition[];
    /**
     * Get tool implementation (loads if needed)
     */
    getImplementation(name: string): Promise<any>;
    /**
     * Register all tools with their loaders
     */
    registerAllTools(): void;
    /**
     * Ensure a tool is loaded
     */
    private ensureLoaded;
    /**
     * Load a tool's implementation
     */
    private loadTool;
    /**
     * Get all registered tools (immediate)
     */
    getAllTools(): ToolDefinition[];
    /**
     * Get a specific tool
     */
    getTool(name: string): ToolDefinition | undefined;
    /**
     * Preload specific tools
     */
    preloadTools(toolNames: string[]): Promise<void>;
    /**
     * Preload tools by tag
     */
    preloadByTag(tag: string): Promise<void>;
    /**
     * Get loading statistics
     */
    getStats(): {
        total: number;
        loaded: number;
        percentage: number;
    };
}
//# sourceMappingURL=lazy-tool-registry.d.ts.map