import { Tool, Prompt } from '@modelcontextprotocol/sdk/types.js';
import winston from 'winston';
import { ToolRegistryEntry, PromptRegistryEntry, RegistryConfig, RegistryStats, DiscoveryEntry, DiscoveryMetadata, ExecutionContext, RegistryEvent } from './types.js';
/**
 * Central registry for managing MCP tools and prompts
 */
export declare class ToolAndPromptRegistry {
    private readonly tools;
    private readonly prompts;
    private readonly config;
    private readonly logger;
    private readonly eventListeners;
    constructor(config?: Partial<RegistryConfig>, logger?: winston.Logger);
    /**
     * Register a tool in the registry
     */
    registerTool(toolDefinition: Tool, handler: (args: any) => Promise<any>, metadata?: Partial<Omit<ToolRegistryEntry, 'type' | 'toolDefinition' | 'handler'>>): Promise<void>;
    /**
     * Register a prompt in the registry
     */
    registerPrompt(promptDefinition: Prompt, handler: (args: any) => Promise<string>, metadata?: Partial<Omit<PromptRegistryEntry, 'type' | 'promptDefinition' | 'handler'>>): Promise<void>;
    /**
     * Register multiple tools and prompts at once
     */
    registerAll(tools: Array<{
        definition: Tool;
        handler: (args: any) => Promise<any>;
        metadata?: Partial<Omit<ToolRegistryEntry, 'type' | 'toolDefinition' | 'handler'>>;
    }>, prompts: Array<{
        definition: Prompt;
        handler: (args: any) => Promise<string>;
        metadata?: Partial<Omit<PromptRegistryEntry, 'type' | 'promptDefinition' | 'handler'>>;
    }>): Promise<void>;
    /**
     * Get a tool by name
     */
    getTool(name: string): ToolRegistryEntry | undefined;
    /**
     * Get a prompt by name
     */
    getPrompt(name: string): PromptRegistryEntry | undefined;
    /**
     * Get all tool definitions for MCP server registration
     */
    getToolDefinitions(): Tool[];
    /**
     * Get all prompt definitions for MCP server registration
     */
    getPromptDefinitions(): Prompt[];
    /**
     * Execute a tool by name
     */
    executeTool(name: string, args: any, context?: Partial<ExecutionContext>): Promise<any>;
    /**
     * Execute a prompt by name
     */
    executePrompt(name: string, args: any, context?: Partial<ExecutionContext>): Promise<string>;
    /**
     * Get discovery metadata for client exploration
     */
    getDiscoveryMetadata(): DiscoveryMetadata;
    /**
     * Get discovery entries for client exploration
     */
    getDiscoveryEntries(): DiscoveryEntry[];
    /**
     * Get registry statistics
     */
    getStats(): RegistryStats;
    /**
     * Add event listener for registry events
     */
    addEventListener(listener: (event: RegistryEvent) => void): void;
    /**
     * Remove event listener
     */
    removeEventListener(listener: (event: RegistryEvent) => void): void;
    /**
     * Clear all registered tools and prompts
     */
    clear(): void;
    private registerEntry;
    private validateEntry;
    private generateId;
    private compareVersions;
    private formatVersion;
    private emitEvent;
    private log;
}
//# sourceMappingURL=ToolAndPromptRegistry.d.ts.map