aia-mcp
Servidor MCP (Model Context Protocol) que expone herramientas para el agente aia del proyecto hermano amanda-IA.
aia-mcp agrupa varios servidores MCP independientes (temperatura, Warhammer 40K, monitor de estanque, Airbnb, charts, email, MangaDex, swagger) que el agente aia consume vía stdio o HTTP.
Estructura
aia-mcp/
├── README.md
├── pyproject.toml
├── Dockerfile # imagen keitarodxs/aia-mcp
├── docker-compose.yml # despliegue en nara
├── mcp_cli/ # CLI (entry point `mcp`) y registro de servidores
├── specs/ # especificaciones (ej. SPEC_TEMPERATURA.md)
├── temperatura/ wahapedia/ monitor/ airbnb/
├── charts/ mcp_email/ mangadex/ swagger/
├── resources/mcp-ssh/ # config de mcp-ssh (no usado en la imagen)
└── tests/ # tests unitarios (pytest)
Cada servidor MCP vive en su propio directorio y se registra en mcp_cli/cli.py
(diccionario SERVERS). Ejecuta cualquiera con poetry run mcp <servidor>.
Requisitos
- Python 3.11+
- Poetry
- (Opcional, para despliegue) Docker + un host con el self-hosted runner registrado
Instalación
cd aia-mcp
poetry install
Ejecutar servidores MCP
Desde el directorio aia-mcp/:
poetry run aia-mcp # temperatura (por defecto, stdio)
poetry run aia-mcp temperatura # explícito
poetry run aia-mcp --list # listar servidores disponibles
# Modo HTTP (para conexión remota / agente aia por red)
poetry run aia-mcp temperatura --http # puerto 8001
poetry run aia-mcp all --http # todos los servidores en paralelo
- stdio (por defecto): para Cursor, Claude Desktop, etc.
- HTTP (
--http): servidor enhttp://0.0.0.0:<puerto>/mcp.
Puertos por servidor
| Servidor | Puerto | Servidor | Puerto |
|---|---|---|---|
| temperatura | 8001 | airbnb | 8006 |
| wahapedia | 8002 | charts | 8007 |
| monitor | 8003 | 8008 | |
| swagger | 8010 | banco_bci | 8011 |
| drawio-mcp | 3000/3333 |
drawio-mcp-serverse instala dentro de la imagen Docker (no es un servidor MCP de este repo) y expone HTTP en:3000+ WebSocket de extensión en:3333.
Swagger UI (documentación de APIs)
poetry run mcp-swagger # puerto 8010
# o
poetry run mcp swagger --http
Accede a: http://localhost:8010/
Conectar con el agente (Cursor / amanda-IA)
Configura el servidor MCP en Cursor o en el agente aia. Ejemplo para ~/.cursor/mcp.json:
{
"mcpServers": {
"temperatura": {
"command": "poetry",
"args": ["run", "mcp", "temperatura"],
"cwd": "/ruta/a/aia-mcp"
}
}
}
Ajusta cwd a la ruta absoluta de tu proyecto aia-mcp.
Conectar aia por HTTP
- Inicia el servidor MCP en modo HTTP:
poetry run aia-mcp temperatura --http - En otra terminal, ejecuta el agente con la variable de entorno:
MCP_URL=http://localhost:8001/mcp poetry run aia
Añadir nuevos servidores: crea el directorio (ej. nuevo_servidor/), implementa
el servidor con FastMCP, y regístralo en mcp_cli/cli.py en el diccionario SERVERS
(sumando su puerto en SERVER_PORTS).
Despliegue (Docker)
El repo publica automáticamente la imagen keitarodxs/aia-mcp en Docker Hub al
pushear un tag v*.*.* (workflow .github/workflows/docker-image.yml).
Local / servidor con Docker
deprecated?
docker compose pull
docker compose up -d
Esto levanta el contenedor aia-mcp con todos los puertos mapeados y los volúmenes
logs/ y .aia/ montados. Carga las variables desde .env (ver .env.example).
Build de la imagen: el proyecto se sigue gestionando con Poetry (
pyproject.toml+poetry.lock), pero dentro delDockerfilelas dependencias se instalan conuv(uv pip install --system) por velocidad. Elpoetry.lockse respeta víapoetry exportarequirements.txt. La imagen parte de la base del ecosistemakeitarodxs/aia-utils-base:v1.0.0(Python 3.13, git, uv, Node 20 + drawio-mcp-server ya incluidos).
Tests
poetry install --with dev
poetry run pytest
Cobertura actual: wahapedia (slug/normalización/facciones) y airbnb
(serialización MongoDB / formato iCal).
Tools disponibles
temperatura — get_temperature
Obtiene la temperatura actual de una ciudad (valores simulados).
- Parámetro:
city(string, opcional) - Retorno: String con la temperatura
Ciudades soportadas: Santiago, Buenos Aires, Lima, Bogotá, Madrid, New York, Londres, Tokio.
monitor — estanque / acumulador
- get_lectura_actual(): litros y porcentaje en tiempo real vía MQTT (
MQTT_HOST,MQTT_TOPIC_OUT) oTINAJA_ESTADO_URLcomo fallback. - calculate_tinaja_level(distance): litros/% desde la distancia del sensor (cm).
- get_tinaja_config(): configuración del estanque y estado MQTT.
- get_velocidad_disminucion_agua(db_name, horas_atras): velocidad de bajada (L/h)
usando historial en MongoDB. Requiere
MONGODB_URI.
Variables .env: MQTT_HOST, MQTT_PORT, MQTT_USERNAME, MQTT_PASSWORD,
MQTT_TOPIC_OUT, TINAJA_ESTADO_URL, MONGODB_URI.
wahapedia — Warhammer 40K
- get_unit_stats(query, faction) / search_wahapedia(query)
- get_factions() / get_units(faction) / get_stratagems(faction)
Cache en disco configurable: WAHAPEDIA_CACHE_ENABLED, WAHAPEDIA_CACHE_DIR,
WAHAPEDIA_CACHE_TTL_DAYS (por defecto deshabilitada; TTL 60 días).
airbnb — reservas y calendario (MongoDB)
- get_proxima_reserva(), get_reservas_futuras(solo_futuras), get_calendario_mes_airbnb(mes, anio), get_ingresos_mes(mes, anio)
Requiere MONGODB_URI y AIRBNB_DB.
banco_bci — cartolas BCI y pipeline completo
Consulta de cartolas almacenadas en MongoDB y orquestación del pipeline BCI
vía API HTTP de aia-jobs (expone /api/jobs/* en :8080).
- banco_bci(period): cartolas BCI del período con sus movimientos.
- banco_bci_list_periods(): lista de períodos disponibles en
bci.cartolas. - sync_bci_trx(year, month, batch_size, skip_email_download, skip_transform,
sender): ejecuta el pipeline completo en una sola llamada
(descarga emails BCI de Yahoo → transforma PDFs → sincroniza movimientos a
bci.transaccionesen Atlas). Las 3 fases son idempotentes y se pueden saltar conskip_email_download/skip_transformpara re-runs parciales. - get_bci_job_status(): estado del último job BCI en
aia-jobs(running,current_job,progress,last_result). - get_bci_api_health(): health-check de la API de
aia-jobs.
Variables .env: MONGODB_URI (consulta), AIA_JOBS_API_URL
(default http://172.17.0.1:8080 = gateway bridge de Docker al host donde
corre aia-jobs), AIA_JOBS_TIMEOUT (default 600s).
charts / email / mangadex / swagger
- charts: genera gráficos (matplotlib) desde datos de MongoDB.
- email: consulta correo IMAP Yahoo (
YAHOO_EMAIL,YAHOO_APP_PASSWORD). - mangadex: descarga/consulta mangas (
AIA_MANGA_DIR). - swagger: UI de documentación de APIs en
:8010.
Metadata
Release files for aia-mcp 1.12.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| aia_mcp-1.12.0.tar.gz | 69.6 kB | Without provenance | Details for aia_mcp-1.12.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| aia_mcp-1.12.0-py3-none-any.whl | Python 3 | none | any | Details for aia_mcp-1.12.0-py3-none-any.whl |
Total release size: 146.1 kB
Release files / aia_mcp-1.12.0.tar.gz
| Download URL | aia_mcp-1.12.0.tar.gz |
|---|---|
| Size | 69.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
a5fb9e88ec45c9fcb2f2ffe594545cc3d760c4d78b39a15af80b7e475867e339
|
|
BLAKE2b-256 checksum How to use checksums |
14b59fa72f542e6dae8f3f78304706de67ff1e1be155bd25e583451b15317412
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.11.17
|
Release files / aia_mcp-1.12.0-py3-none-any.whl
| Download URL | aia_mcp-1.12.0-py3-none-any.whl |
|---|---|
| Size | 76.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
f6802bc42cfde50615ea39b152bab08c7cbd7a663566885265985bd7bf021a19
|
|
BLAKE2b-256 checksum How to use checksums |
ea2c14be4dc38452661672c78c4e6754e47743ab950626c53bd3bc693343e18a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.11.17
|
Security for aia-mcp 1.12.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.