/**
 * MCP Server Base Class
 *
 * Abstract base class for creating custom MCP servers with consistent patterns
 * for tool registration, execution, and lifecycle management.
 *
 * Implements MCPServerBase features including:
 * - Tool annotation support (readOnlyHint, destructiveHint, idempotentHint)
 * - Lifecycle hooks (onInit, onStart, onStop)
 * - Event emission for tool operations
 * - Conversion to MCPServerInfo format
 *
 * @module mcp/mcpServerBase
 * @since 8.39.0
 */
import { EventEmitter } from "events";
import type { MCPServerBaseConfig, MCPServerCategory, MCPServerInfo, MCPServerTool, MCPToolAnnotations, NeuroLinkExecutionContext, ToolResult } from "../types/index.js";
/**
 * MCPServerBase configuration
 */
/**
 * Abstract base class for MCP servers
 *
 * Provides a foundation for creating custom MCP servers with consistent
 * patterns for tool registration, execution, and lifecycle management.
 *
 * @example
 * ```typescript
 * class MyCustomServer extends MCPServerBase {
 *   constructor() {
 *     super({
 *       id: "my-custom-server",
 *       name: "My Custom Server",
 *       description: "Provides custom functionality",
 *       category: "custom",
 *     });
 *
 *     // Register tools in constructor or init
 *     this.registerTool({
 *       name: "myTool",
 *       description: "Does something useful",
 *       annotations: {
 *         readOnlyHint: true,
 *         idempotentHint: true,
 *       },
 *       execute: async (params, context) => {
 *         return { success: true, data: "result" };
 *       },
 *     });
 *   }
 * }
 * ```
 */
export declare abstract class MCPServerBase extends EventEmitter {
    protected readonly config: Required<MCPServerBaseConfig>;
    protected readonly tools: Map<string, MCPServerTool>;
    protected isInitialized: boolean;
    protected isRunning: boolean;
    constructor(config: MCPServerBaseConfig);
    /**
     * Initialize the server
     * Override in subclasses for async initialization
     */
    init(): Promise<void>;
    /**
     * Hook for subclass initialization
     * Override to perform async setup
     */
    protected onInit(): Promise<void>;
    /**
     * Start the server
     */
    start(): Promise<void>;
    /**
     * Hook for subclass start logic
     */
    protected onStart(): Promise<void>;
    /**
     * Stop the server
     */
    stop(reason?: string): Promise<void>;
    /**
     * Hook for subclass stop logic
     */
    protected onStop(): Promise<void>;
    /**
     * Register a tool with the server
     */
    registerTool(tool: MCPServerTool): this;
    /**
     * Register multiple tools at once
     */
    registerTools(tools: MCPServerTool[]): this;
    /**
     * Validate tool configuration
     */
    protected validateTool(tool: MCPServerTool): void;
    /**
     * Execute a tool by name
     */
    executeTool(toolName: string, params: unknown, context?: NeuroLinkExecutionContext): Promise<ToolResult>;
    /**
     * Type guard to check if result is a ToolResult
     */
    private isToolResult;
    /**
     * Get all registered tools
     */
    getTools(): MCPServerTool[];
    /**
     * Get a specific tool by name
     */
    getTool(name: string): MCPServerTool | undefined;
    /**
     * Check if a tool exists
     */
    hasTool(name: string): boolean;
    /**
     * Remove a tool
     */
    removeTool(name: string): boolean;
    /**
     * Get server info in MCPServerInfo format
     */
    toServerInfo(): MCPServerInfo;
    /**
     * Get tools filtered by annotations
     */
    getToolsByAnnotation(annotation: keyof MCPToolAnnotations, value: boolean | string | number | string[]): MCPServerTool[];
    /**
     * Get read-only tools
     */
    getReadOnlyTools(): MCPServerTool[];
    /**
     * Get destructive tools
     */
    getDestructiveTools(): MCPServerTool[];
    /**
     * Get idempotent tools
     */
    getIdempotentTools(): MCPServerTool[];
    /**
     * Get tools that require confirmation
     */
    getToolsRequiringConfirmation(): MCPServerTool[];
    /**
     * Server identification
     */
    get id(): string;
    get name(): string;
    get description(): string;
    get version(): string;
    get category(): MCPServerCategory;
    /**
     * Check if server is initialized
     */
    get initialized(): boolean;
    /**
     * Check if server is running
     */
    get running(): boolean;
}
