/** * MCP Telemetry * * Structured event emitter for MCP operations. Supports multiple * subscribers and provides convenience methods for common event types. * * @example * ```typescript * const telemetry = McpTelemetry.getInstance(); * * // Register a JSON-lines handler * telemetry.on(McpTelemetry.createJsonLogHandler()); * * // Emit events * telemetry.toolInvoke('stripe', 'create_customer', 'tenant-1', 'pro'); * telemetry.toolComplete('stripe', 'create_customer', true, 42, { * tenant: 'tenant-1', * }); * ``` */ export type McpEventType = 'tool.invoke' | 'tool.complete' | 'tool.error' | 'pipeline.start' | 'pipeline.complete' | 'server.start' | 'server.stop' | 'server.health' | 'auth.validate' | 'cache.hit' | 'cache.miss'; export interface McpEvent { type: McpEventType; timestamp: number; server?: string; tool?: string; tenant?: string; tier?: string; durationMs?: number; success?: boolean; cached?: boolean; error?: string; metadata?: Record; } export type McpEventHandler = (event: McpEvent) => void; /** * Simple event emitter for MCP telemetry. * Supports multiple subscribers and structured event types. * Default handler logs to structured JSON on stderr. */ export declare class McpTelemetry { private handlers; private static instance; static getInstance(): McpTelemetry; /** Register an event handler. Returns an unsubscribe function. */ on(handler: McpEventHandler): () => void; /** Emit an event to all registered handlers. */ emit(event: McpEvent): void; /** Convenience: emit a tool invocation event. */ toolInvoke(server: string, tool: string, tenant?: string, tier?: string): void; /** Convenience: emit a tool completion event. */ toolComplete(server: string, tool: string, success: boolean, durationMs: number, opts?: { tenant?: string; cached?: boolean; error?: string; }): void; /** Create a JSON-lines log handler (writes to stderr). */ static createJsonLogHandler(): McpEventHandler; /** * Create an OpenTelemetry-compatible span handler stub. * Pass your own tracer instance to wire real OTel export. */ static createOtelHandler(tracer?: OtelTracerLike): McpEventHandler; /** Reset singleton (for testing). */ static reset(): void; } /** Minimal OTel tracer shape - avoids requiring @opentelemetry/api as a dependency. */ interface OtelTracerLike { startSpan(name: string): { end(): void; setAttribute(key: string, value: unknown): void; }; } export {}; //# sourceMappingURL=telemetry.d.ts.map