phone_get_logs
Retrieve system logs from the Asterisk S2S MCP Server for debugging. Filter logs by level (info, warn, error, debug) and component (mcp, phone, callback, client) to diagnose telephony system issues efficiently.
Instructions
Obtener logs del sistema telefónico para debugging
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| component | No | Filtrar por componente del sistema | |
| level | No | Filtrar por nivel de log | |
| limit | No | Número máximo de logs a obtener |
Implementation Reference
- index.ts:191-230 (registration)Registers the 'phone_get_logs' MCP tool with Zod input schema and a handler that calls phoneTools.getSystemLogs, formats the logs with icons and returns as text content.server.tool( "phone_get_logs", "Obtener logs del sistema telefónico para debugging", { limit: z.number().optional().default(20).describe("Número máximo de logs a obtener"), level: z.enum(["info", "warn", "error", "debug"]).optional().describe("Filtrar por nivel de log"), component: z.enum(["mcp", "phone", "callback", "client"]).optional().describe("Filtrar por componente del sistema") }, async (args) => { const result = await phoneTools.getSystemLogs({ limit: args.limit, level: args.level, component: args.component }); if (result.length === 0) { return { content: [{ type: "text", text: "📝 No hay logs disponibles con los filtros especificados" }], }; } const logsText = result.map(log => { const levelIcon = { info: 'ℹ️', warn: '⚠️', error: '❌', debug: '🔍' }[log.level] || '📝'; return `${levelIcon} **${log.timestamp}** [${log.component.toUpperCase()}] ${log.action}\n${JSON.stringify(log.details, null, 2)}`; }).join('\n\n'); return { content: [{ type: "text", text: `📝 **Logs del Sistema (${result.length} entradas)**\n\n${logsText}` }], }; } );
- operations/realtime-assistant.ts:397-401 (handler)Core handler function that retrieves the most recent system logs from the in-memory 'systemLogs' array, sorts them by timestamp descending, and limits to the specified number.export function getSystemLogs(limit: number = 100): SystemLog[] { return systemLogs .sort((a, b) => new Date(b.timestamp).getTime() - new Date(a.timestamp).getTime()) .slice(0, limit); }
- tools/realtime-assistant.ts:248-276 (helper)Intermediate helper function that applies client-specified filtering (level, component) on top of core getSystemLogs, fetches extra logs to account for filtering.export async function getSystemLogs(args?: { limit?: number; level?: 'info' | 'warn' | 'error' | 'debug'; component?: 'mcp' | 'phone' | 'callback' | 'client'; }): Promise<Array<{ id: string; timestamp: string; level: string; component: string; action: string; details: any; callId?: string; }>> { const limit = args?.limit || 50; const logs = phoneOps.getSystemLogs(limit * 2); // Obtener más para filtrar // Filtrar por nivel y componente si se especifica let filteredLogs = logs; if (args?.level) { filteredLogs = filteredLogs.filter(log => log.level === args.level); } if (args?.component) { filteredLogs = filteredLogs.filter(log => log.component === args.component); } return filteredLogs.slice(0, limit); }
- index.ts:194-230 (schema)Zod schema for input parameters of phone_get_logs tool.{ limit: z.number().optional().default(20).describe("Número máximo de logs a obtener"), level: z.enum(["info", "warn", "error", "debug"]).optional().describe("Filtrar por nivel de log"), component: z.enum(["mcp", "phone", "callback", "client"]).optional().describe("Filtrar por componente del sistema") }, async (args) => { const result = await phoneTools.getSystemLogs({ limit: args.limit, level: args.level, component: args.component }); if (result.length === 0) { return { content: [{ type: "text", text: "📝 No hay logs disponibles con los filtros especificados" }], }; } const logsText = result.map(log => { const levelIcon = { info: 'ℹ️', warn: '⚠️', error: '❌', debug: '🔍' }[log.level] || '📝'; return `${levelIcon} **${log.timestamp}** [${log.component.toUpperCase()}] ${log.action}\n${JSON.stringify(log.details, null, 2)}`; }).join('\n\n'); return { content: [{ type: "text", text: `📝 **Logs del Sistema (${result.length} entradas)**\n\n${logsText}` }], }; } );