Servidor MCP¶
Garúa expone un servidor MCP local sobre stdio. El comando instalado es:
También puede ejecutarse como módulo cuando trabajas desde un entorno virtual:
Punto de entrada¶
El servidor se define en src/garua/mcp_server.py. Ahí se crea la instancia de
FastMCP, se carga el catálogo de estaciones y se registran los módulos de tools.
| Módulo | Grupo funcional |
|---|---|
station_tools.py |
Búsqueda, filtros, disponibilidad y ficha de estaciones. |
stats_tools.py |
Conteos y resúmenes del inventario de estaciones. |
file_tools.py |
Archivos CSV descargados, previews y extracción mensual. |
download_tools.py |
Descarga o extracción de datos SENAMHI. |
recommendation_tools.py |
Recomendación de estaciones para un punto geográfico. |
comparison_tools.py |
Comparación de meses, años o periodos. |
anomaly_tools.py |
Validación de calidad y anomalías. |
summary_tools.py |
Resumen de datos para un periodo individual. |
Principios¶
- Usa la tool más específica para la intención del usuario.
- No recalcules métricas en el cliente MCP si Garúa ya ofrece una tool para eso.
- No descargues datos si el usuario solo pidió explorar archivos locales.
- No resumas, compares o valides dentro de la tool de descarga.
- No inventes códigos de estación: busca, filtra o confirma primero.
Anatomía de una tool¶
Una tool MCP debe tener:
- Parámetros tipados con
Annotated[..., Field(description=...)]. - Docstring orientado al cliente MCP, no solo al desarrollador.
- Delegación clara hacia
services/cuando haya lógica de negocio. - Respuesta consistente usando los helpers de respuesta del proyecto.
- Ejemplos o notas de flujo suficientes para la referencia generada.
Ejemplo de estructura:
@mcp.tool()
def search_stations(
query: Annotated[
str,
Field(description="Código exacto o nombre parcial de la estación."),
],
) -> dict:
"""
Busca estaciones SENAMHI por código o por nombre.
Úsala cuando el usuario mencione una estación específica pero no esté claro
si proporcionó código interno, código anterior o solo una parte del nombre.
"""
...
Agregar una tool¶
- Define si la tool pertenece a un módulo existente o necesita un grupo nuevo.
- Implementa la lógica compartida en
src/garua/services/si no existe. - Agrega la función MCP en
src/garua/mcp_tools/. - Registra el módulo en
src/garua/mcp_server.pysi es un grupo nuevo. - Escribe un docstring con cuándo usarla, cuándo no usarla y qué devuelve.
-
Regenera la referencia:
-
Valida la documentación:
Calidad de docstrings¶
Los docstrings MCP son parte del contrato con los clientes. Deben ayudar al modelo a elegir la tool correcta.
Incluye:
- intención principal;
- restricciones importantes;
- diferencia frente a tools parecidas;
- dependencias de flujo, por ejemplo buscar estación antes de descargar;
- advertencias sobre datos locales, scraping o calidad.
Evita:
- explicar detalles internos que el cliente no necesita;
- prometer descargas automáticas si el flujo requiere datos locales;
- duplicar instrucciones contradictorias entre tools similares.
Validación local¶
Para revisar que el servidor arranca:
En clientes como VS Code, Claude Desktop o Codex, configura el comando
garua-mcp o una ruta absoluta al Python de tu entorno virtual. La configuración
de usuario está documentada en Instalación.