Skip to main content
Glama
janetsep

TreePod Financial MCP Agent

by janetsep

analyze_finances

Analyze current TreePod Glamping finances using key metrics from real data to assess business performance and identify trends.

Instructions

Analiza las finanzas actuales de TreePod Glamping con métricas clave basado en datos reales

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
periodNocurrent

Implementation Reference

  • server.js:29-58 (registration)
    Registers the analyze_finances tool with the MCP server. Defines input schema (period: string, default 'current') and handler that logs, calls businessCalculator.analyzeFinancialMetrics(period), handles errors with validator.
    // --- Herramienta: analyze_finances --- // ✅ IMPLEMENTA GUÍA DE TRABAJO FUNDAMENTAL: Sin hardcodeo, validación, trazabilidad server.registerTool( 'analyze_finances', { title: 'Analizar finanzas', description: 'Analiza las finanzas actuales de TreePod Glamping con métricas clave basado en datos reales', inputSchema: z.object({ period: z.string().default('current'), }), }, async ({ period }) => { validator.log('info', `Iniciando análisis financiero para período: ${period}`); try { // Usar módulo de cálculo sin hardcodeo const result = await businessCalculator.analyzeFinancialMetrics(period); validator.log('info', 'Análisis financiero completado exitosamente'); return result; } catch (error) { validator.log('error', `Error crítico en análisis financiero: ${error.message}`); return validator.generateInsufficientDataResponse( 'análisis financiero', 'Error interno del sistema. Contacta al administrador.' ); } } );
  • Main handler logic for analyze_finances: Loads financial data from dataLoader.loadFinancialData(), validates essential fields (ingresos_total, gastos_total), computes analysis via calculateFinancialAnalysis, formats output with formatFinancialAnalysis, handles errors.
    async analyzeFinancialMetrics(period = 'current') { const financialData = await dataLoader.loadFinancialData(); if (!financialData) { return validator.generateInsufficientDataResponse( 'datos financieros', 'No se pudo acceder a los datos financieros del sistema' ); } // Verificar campos esenciales const requiredFields = ['ingresos_total', 'gastos_total']; const missingFields = requiredFields.filter(field => !(field in financialData)); if (missingFields.length > 0) { return validator.generateInsufficientDataResponse( 'métricas financieras', `Faltan datos esenciales: ${missingFields.join(', ')}` ); } try { const analysis = this.calculateFinancialAnalysis(financialData, period); validator.log('info', `Análisis financiero completado para período: ${period}`); return { content: [{ type: 'text', text: this.formatFinancialAnalysis(analysis) }] }; } catch (error) { validator.log('error', `Error en análisis financiero: ${error.message}`); return validator.generateInsufficientDataResponse( 'análisis financiero', 'Error interno en el análisis. Contacta al administrador.' ); } }
  • Helper method that computes key financial metrics from loaded data: revenue (ingresos), expenses (gastos), profit (utilidad), margin, occupancy, reservations, average revenue per reservation, and goal achievements.
    calculateFinancialAnalysis(data, period) { const ingresos = data.ingresos_total || 0; const gastos = data.gastos_total || 0; const utilidad = ingresos - gastos; const margen = ingresos > 0 ? ((utilidad / ingresos) * 100).toFixed(1) : 0; const ocupacion = data.ocupacion_promedio || 0; const reservas = data.reservas_totales || 0; return { periodo: period, ingresos, gastos, utilidad, margen, ocupacion, reservas, ingresoPromedioPorReserva: reservas > 0 ? Math.round(ingresos / reservas) : 0, metaIngresos: ingresos >= 6000000, metaUtilidad: utilidad >= 2000000, metaOcupacion: ocupacion >= 70 }; }
  • Helper method that formats the financial analysis into a structured text response with emojis, status indicators, key metrics, and goal achievements.
    formatFinancialAnalysis(analysis) { const estado = this.determineBusinessStatus(analysis); return `📊 **ANÁLISIS FINANCIERO TREEPOD GLAMPING**\n\n` + `📅 **Período:** ${analysis.periodo}\n` + `💰 **Estado General:** ${estado}\n\n` + `**💵 FINANZAS:**\n` + `• Ingresos: ${this.formatCurrency(analysis.ingresos)} ${analysis.metaIngresos ? '✅' : '⚠️'}\n` + `• Gastos: ${this.formatCurrency(analysis.gastos)}\n` + `• Utilidad: ${this.formatCurrency(analysis.utilidad)} ${analysis.metaUtilidad ? '✅' : '⚠️'}\n` + `• Margen: ${analysis.margen}% ${analysis.margen > 30 ? '✅' : '⚠️'}\n\n` + `**🏠 OPERACIONES:**\n` + `• Ocupación: ${analysis.ocupacion}% ${analysis.metaOcupacion ? '✅' : '⚠️'}\n` + `• Reservas totales: ${analysis.reservas}\n` + `• Ingreso promedio/reserva: ${this.formatCurrency(analysis.ingresoPromedioPorReserva)}\n\n` + `*Análisis basado en datos reales del sistema TreePod*`; }
  • Zod input schema for analyze_finances tool: period as string with default 'current'.
    inputSchema: z.object({ period: z.string().default('current'), }),

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/janetsep/treepod-financial-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server