Skip to main content
Glama
main.py4.39 kB
""" Este MCP permite agregar gastos a una lista de gastos. """ import csv import os from enum import Enum from fastmcp import FastMCP class MetodoPago(Enum): """Métodos de pago válidos para registrar gastos.""" TARJETA_DEBITO = "Tarjeta de débito" TARJETA_CREDITO = "Tarjeta de crédito" EFECTIVO = "Efectivo" mcp = FastMCP('Gastos MCP') @mcp.tool def agregar_gasto(fecha: str, categoria: str, cantidad: float, metodo_pago: MetodoPago): """ Agrega un nuevo gasto al archivo gastos.csv Args: fecha: Fecha del gasto (formato YYYY-MM-DD) categoria: Categoría del gasto cantidad: Cantidad del gasto (número decimal) metodo_pago: Método de pago utilizado (MetodoPago.TARJETA_DEBITO, MetodoPago.TARJETA_CREDITO o MetodoPago.EFECTIVO) """ archivo_csv = 'gastos.csv' # Verificar si el archivo existe, si no, crearlo con encabezados archivo_existe = os.path.exists(archivo_csv) try: # Abrir el archivo en modo append con encoding UTF-8 with open(archivo_csv, 'a', newline='', encoding='utf-8') as archivo: writer = csv.writer(archivo) # Si el archivo no existe, escribir los encabezados if not archivo_existe: writer.writerow(['Fecha', 'Categoría', 'Cantidad', 'Método de pago']) # Escribir la nueva fila con los datos del gasto writer.writerow([fecha, categoria, f"{cantidad:.2f}", metodo_pago.value]) return f"Gasto agregado correctamente: {fecha}, {categoria}, {cantidad:.2f}, {metodo_pago.value}" except Exception as e: return f"Error al agregar el gasto: {str(e)}" @mcp.resource('resource://gastos') def datos_de_gastos(): """ Retorna todos los gastos registrados en formato legible para un LLM. """ archivo_csv = 'gastos.csv' # Verificar si el archivo existe if not os.path.exists(archivo_csv): return "No hay gastos registrados. El archivo gastos.csv no existe." try: # Leer el archivo CSV with open(archivo_csv, 'r', encoding='utf-8') as archivo: reader = csv.DictReader(archivo) gastos = list(reader) # Si no hay gastos, retornar mensaje apropiado if not gastos: return "No hay gastos registrados en el archivo." # Formatear los datos de manera clara para un LLM resultado = "# Registro de Gastos\n\n" resultado += f"Total de gastos registrados: {len(gastos)}\n\n" # Calcular estadísticas básicas total_gastado = sum(float(gasto['Cantidad']) for gasto in gastos) resultado += f"Total gastado: ${total_gastado:.2f}\n\n" # Agrupar por categoría gastos_por_categoria = {} for gasto in gastos: categoria = gasto['Categoría'] if categoria not in gastos_por_categoria: gastos_por_categoria[categoria] = [] gastos_por_categoria[categoria].append(gasto) resultado += "## Gastos por Categoría\n\n" for categoria, lista_gastos in sorted(gastos_por_categoria.items()): total_categoria = sum(float(g['Cantidad']) for g in lista_gastos) resultado += f"### {categoria}\n" resultado += f"- Cantidad de gastos: {len(lista_gastos)}\n" resultado += f"- Total: ${total_categoria:.2f}\n\n" # Listar todos los gastos resultado += "## Detalle de Todos los Gastos\n\n" for i, gasto in enumerate(gastos, 1): resultado += f"{i}. **Fecha:** {gasto['Fecha']} | " resultado += f"**Categoría:** {gasto['Categoría']} | " resultado += f"**Cantidad:** ${gasto['Cantidad']} | " resultado += f"**Método de pago:** {gasto['Método de pago']}\n" return resultado except Exception as e: return f"Error al leer los gastos: {str(e)}" @mcp.prompt def prompt_agregar_gasto(): """ Genera un resumen de gastos de los últimos 5 días usando el recurso de datos de gastos. """ return "Consulta el recurso 'resource://gastos' y genera un resumen de los gastos de los últimos 5 días, incluyendo el total gastado por día y por categoría." if __name__ == "__main__": mcp.run()

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/BrayanTM/mcp-basico'

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