noodle-perplexity-mcp
Version:
A Perplexity API Model Context Protocol (MCP) server that unlocks Perplexity's search-augmented AI capabilities for LLM agents. Features robust error handling, secure input validation, transparent reasoning, and multimodal support with file attachments (P
149 lines (148 loc) • 6.1 kB
TypeScript
import { RequestContext } from "./requestContext.js";
/**
* Defines the supported logging levels based on RFC 5424 Syslog severity levels,
* as used by the Model Context Protocol (MCP).
* Levels are: 'debug'(7), 'info'(6), 'notice'(5), 'warning'(4), 'error'(3), 'crit'(2), 'alert'(1), 'emerg'(0).
* Lower numeric values indicate higher severity.
*/
export type McpLogLevel = "debug" | "info" | "notice" | "warning" | "error" | "crit" | "alert" | "emerg";
/**
* Interface for the payload of an MCP log notification.
* This structure is used when sending log data via MCP `notifications/message`.
*/
export interface McpLogPayload {
message: string;
context?: RequestContext;
error?: {
message: string;
stack?: string;
};
[key: string]: unknown;
}
/**
* Type for the `data` parameter of the `McpNotificationSender` function.
*/
export type McpNotificationData = McpLogPayload | Record<string, unknown>;
/**
* Defines the signature for a function that can send MCP log notifications.
* This function is typically provided by the MCP server instance.
* @param level - The severity level of the log message.
* @param data - The payload of the log notification.
* @param loggerName - An optional name or identifier for the logger/server.
*/
export type McpNotificationSender = (level: McpLogLevel, data: McpNotificationData, loggerName?: string) => void;
/**
* Singleton Logger class that wraps Winston for robust logging.
* Supports file logging, conditional console logging, and MCP notifications.
*/
export declare class Logger {
private static instance;
private winstonLogger?;
private interactionLogger?;
private initialized;
private mcpNotificationSender?;
private currentMcpLevel;
private currentWinstonLevel;
private readonly MCP_NOTIFICATION_STACK_TRACE_MAX_LENGTH;
private readonly LOG_FILE_MAX_SIZE;
private readonly LOG_MAX_FILES;
/** @private */
private constructor();
/**
* Initializes the Winston logger instance.
* Should be called once at application startup.
* @param level - The initial minimum MCP log level.
*/
initialize(level?: McpLogLevel): Promise<void>;
/**
* Sets the function used to send MCP 'notifications/message'.
* @param sender - The function to call for sending notifications, or undefined to disable.
*/
setMcpNotificationSender(sender: McpNotificationSender | undefined): void;
/**
* Dynamically sets the minimum logging level.
* @param newLevel - The new minimum MCP log level to set.
*/
setLevel(newLevel: McpLogLevel): void;
/**
* Configures the console transport based on the current log level and TTY status.
* Adds or removes the console transport as needed.
* @returns {{ enabled: boolean, message: string | null }} Status of console logging.
* @private
*/
private _configureConsoleTransport;
/**
* Gets the singleton instance of the Logger.
* @returns The singleton Logger instance.
*/
static getInstance(): Logger;
/**
* Ensures the logger has been initialized.
* @returns True if initialized, false otherwise.
* @private
*/
private ensureInitialized;
/**
* Centralized log processing method.
* @param level - The MCP severity level of the message.
* @param msg - The main log message.
* @param context - Optional request context for the log.
* @param error - Optional error object associated with the log.
* @private
*/
private log;
/** Logs a message at the 'debug' level. */
debug(msg: string, context?: RequestContext): void;
/** Logs a message at the 'info' level. */
info(msg: string, context?: RequestContext): void;
/** Logs a message at the 'notice' level. */
notice(msg: string, context?: RequestContext): void;
/** Logs a message at the 'warning' level. */
warning(msg: string, context?: RequestContext): void;
/**
* Logs a message at the 'error' level.
* @param msg - The main log message.
* @param err - Optional. Error object or RequestContext.
* @param context - Optional. RequestContext if `err` is an Error.
*/
error(msg: string, err?: Error | RequestContext, context?: RequestContext): void;
/**
* Logs a message at the 'crit' (critical) level.
* @param msg - The main log message.
* @param err - Optional. Error object or RequestContext.
* @param context - Optional. RequestContext if `err` is an Error.
*/
crit(msg: string, err?: Error | RequestContext, context?: RequestContext): void;
/**
* Logs a message at the 'alert' level.
* @param msg - The main log message.
* @param err - Optional. Error object or RequestContext.
* @param context - Optional. RequestContext if `err` is an Error.
*/
alert(msg: string, err?: Error | RequestContext, context?: RequestContext): void;
/**
* Logs a message at the 'emerg' (emergency) level.
* @param msg - The main log message.
* @param err - Optional. Error object or RequestContext.
* @param context - Optional. RequestContext if `err` is an Error.
*/
emerg(msg: string, err?: Error | RequestContext, context?: RequestContext): void;
/**
* Logs a message at the 'emerg' (emergency) level, typically for fatal errors.
* @param msg - The main log message.
* @param err - Optional. Error object or RequestContext.
* @param context - Optional. RequestContext if `err` is an Error.
*/
fatal(msg: string, err?: Error | RequestContext, context?: RequestContext): void;
/**
* Logs a structured interaction object to a dedicated file.
* @param interactionName - A name for the interaction type (e.g., 'OpenRouterIO').
* @param data - The structured data to log.
*/
logInteraction(interactionName: string, data: Record<string, unknown>): void;
}
/**
* The singleton instance of the Logger.
* Use this instance for all logging operations.
*/
export declare const logger: Logger;