Skip to main content
Glama
janetsep

TreePod Financial MCP Agent

by janetsep

get_business_status

Check current business health with real-time alerts and KPIs to monitor financial performance and operational status.

Instructions

Estado general actual del negocio con alertas y KPIs basado en datos reales

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
formatNosummary

Implementation Reference

  • Main handler function that loads business data from dataLoader, validates availability, computes metrics/alerts/status using helper methods, and returns formatted text response.
    async getBusinessStatus() { validator.log('info', 'Obteniendo estado general del negocio'); try { // Cargar todos los datos necesarios const financialData = await dataLoader.loadFinancialData(); const businessData = await dataLoader.loadBusinessStatus(); const domosStatus = await dataLoader.loadDomosStatus(); // Validar que tenemos datos mínimos if (!financialData && !businessData) { return validator.generateInsufficientDataResponse( 'datos del estado del negocio', 'No se pudo acceder a los datos financieros ni de estado del negocio' ); } // Calcular métricas principales const metrics = this.calculateBusinessMetrics(financialData, businessData, domosStatus); const alerts = this.checkBusinessAlerts(metrics); const overallStatus = this.determineOverallStatus(metrics); return { content: [{ type: 'text', text: this.formatBusinessStatus(metrics, alerts, overallStatus) }] }; } catch (error) { validator.log('error', `Error obteniendo estado del negocio: ${error.message}`); return validator.generateInsufficientDataResponse( 'estado del negocio', 'Error interno en la consulta. Contacta al administrador.' ); } }
  • server.js:232-258 (registration)
    Tool registration including schema definition (inputSchema with optional format), description, title, and thin async wrapper handler that invokes businessCalculator.getBusinessStatus() with logging and error handling.
    server.registerTool( 'get_business_status', { title: 'Estado del negocio', description: 'Estado general actual del negocio con alertas y KPIs basado en datos reales', inputSchema: z.object({ format: z.string().optional().default('summary') }), }, async () => { validator.log('info', 'Iniciando consulta de estado general del negocio'); try { const result = await businessCalculator.getBusinessStatus(); validator.log('info', 'Estado del negocio obtenido exitosamente'); return result; } catch (error) { validator.log('error', `Error crítico obteniendo estado del negocio: ${error.message}`); return validator.generateInsufficientDataResponse( 'estado del negocio', 'Error interno del sistema. Contacta al administrador.' ); } } );
  • Key helper method that generates the formatted text output for the business status report, including KPIs, domos status, alerts, goal progress, and recommendations.
    formatBusinessStatus(metrics, alerts, overallStatus) { const now = new Date(); const timestamp = now.toLocaleDateString('es-CL') + ' ' + now.toLocaleTimeString('es-CL', { hour: '2-digit', minute: '2-digit' }); let content = `🎯 **ESTADO GENERAL TREEPOD GLAMPING**\n\n`; content += `💼 **Estado del Negocio:** ${overallStatus}\n`; content += `📅 **Última actualización:** ${timestamp}\n\n`; content += `**📊 KPIs PRINCIPALES:**\n`; content += `• 💰 Ingresos: ${this.formatCurrency(metrics.revenue)}\n`; content += `• 📈 Utilidad: ${this.formatCurrency(metrics.profit)} (${metrics.margin}%)\n`; content += `• 🏠 Ocupación: ${metrics.occupancy}%\n`; content += `• 📅 Reservas: ${metrics.reservations}\n\n`; // Información de domos si está disponible if (metrics.domosMetrics) { content += `**🏕️ ESTADO DOMOS:**\n`; content += `• Disponibles: ${metrics.domosMetrics.available}/${metrics.domosMetrics.total}\n`; content += `• Ocupados: ${metrics.domosMetrics.occupied}/${metrics.domosMetrics.total}\n`; if (metrics.domosMetrics.maintenance > 0) { content += `• En mantención: ${metrics.domosMetrics.maintenance}/${metrics.domosMetrics.total}\n`; } content += `\n`; } content += `**🚨 ALERTAS ACTIVAS:**\n`; if (alerts.length > 0) { alerts.forEach(alert => { content += `• ${alert}\n`; }); } else { content += `✅ Sin alertas críticas\n`; } content += `\n`; content += `**🎯 PROGRESO HACIA METAS:**\n`; content += `• Ingresos: ${((metrics.revenue / metrics.revenueGoal) * 100).toFixed(1)}% de ${this.formatCurrency(metrics.revenueGoal)}\n`; content += `• Utilidad: ${((metrics.profit / metrics.profitGoal) * 100).toFixed(1)}% de ${this.formatCurrency(metrics.profitGoal)}\n`; content += `• Ocupación: ${((metrics.occupancy / metrics.occupancyGoal) * 100).toFixed(1)}% de ${metrics.occupancyGoal}%\n\n`; content += `**⚡ ACCIONES RECOMENDADAS:**\n`; const recommendations = this.getBusinessRecommendations(metrics, alerts); recommendations.forEach(rec => { content += `• ${rec}\n`; }); content += `\n*Estado basado en datos reales del sistema TreePod*`; return content; }
  • Helper that computes core business metrics (revenue, profit, margin, occupancy, reservations, domos metrics) from loaded data, including business goals for progress calculation.
    calculateBusinessMetrics(financialData, businessData, domosStatus) { const revenue = financialData?.ingresos_total || 0; const expenses = financialData?.gastos_total || 0; const profit = revenue - expenses; const margin = revenue > 0 ? (profit / revenue * 100).toFixed(1) : 0; const occupancy = businessData?.occupancy || 0; const reservations = financialData?.reservas_totales || 0; // Métricas de domos si están disponibles let domosMetrics = null; if (domosStatus) { domosMetrics = this.calculateOccupancyMetrics(domosStatus); } return { revenue, expenses, profit, margin: parseFloat(margin), occupancy, reservations, domosMetrics, // Metas del negocio revenueGoal: 6000000, profitGoal: 2000000, occupancyGoal: 70 }; }

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