Inklusport MCP Server (Python)
Servidor MCP Inklusport (Python)
Servidor MCP (Model Context Protocol) con la misma base que el ejemplo de clase
(mcp>=2.0.0, MCPServer, @server.tool, transporte HTTP).
Las tools de dominio no tocan bases de datos: hacen GET HTTP a
ink-ms-users (puerto 3002) e ink-ms-sports (puerto 3003). Un agente por rol
(usuario, entrenador, organizador, admin) ve solo las tools que le corresponden.
Herramientas (lectura y gestión → microservicios)
Herramienta | Microservicio | Endpoint | Casos de prueba |
| sports |
| CP1-HU16.2 |
| sports |
| CP2-HU16.2 |
| sports |
| CP1-HU16.1, CP2-HU16.1 |
| sports |
| CP1-HU16.3, CP2-HU16.3 |
| sports |
| CP1-HU16.4, CP2-HU16.4 |
| sports |
| CP1-HU16.4 |
| sports |
| CP1-HU17, CP2-HU17 |
| sports |
| CP1-HU18 |
| sports |
| CP2-HU18, CP1-HU18.1, CP2-HU18.1 |
| sports |
| CP1-HU18.2 |
| sports |
| CP2-HU18.2 |
| sports |
| CP1-HU18.3, CP2-HU18.3 |
| sports |
| CP1-HU18.4, CP2-HU18.4 |
| sports |
| CP1-HU18.5, CP2-HU18.5 |
| sports |
| CP1-HU19, CP2-HU19 |
| users |
| — |
| sports |
| — |
| users |
| — |
| users |
| — |
| users |
| — |
| users |
| — |
| users |
| — |
| users |
| — |
| users |
| — |
| users |
| — |
| users |
| — |
| users |
| — |
| reports |
| — |
| reports |
| — |
| sports |
| — |
| sports |
| — |
| sports |
| — |
| sports |
| — |
| sports |
| — |
Agentes por rol
AGENT_ROLE en .env (o al arrancar) filtra las tools:
Rol | Tools |
| eventos, disponibles, calendario, inscribirse, deportes, perfil, inscripciones, adaptaciones |
| eventos, calendario, perfil, rutinas, adaptaciones, discapacidades (CRUD/activar) |
| eventos (CRUD/cancelar), calendario, discapacidades, inscripciones, adaptaciones |
| todas las de gestión: usuarios (bloquear/activar/eliminar/roles), PDF, eventos, discapacidades, deportes, rutinas y adaptaciones |
| todas las anteriores |
Instrucciones para Antigravity: agents/usuario.md, entrenador.md, organizador.md, admin.md.
Estructura
ink-mcp-inklusport/
├── requirements.txt
├── .env / .env.example
├── README.md
├── agents/ # prompts y config MCP para Antigravity
└── src/
├── server.py # servidor MCP y registro de tools
├── ms_client.py # GET HTTP a Users/Sports
└── client_test.py # cliente de prueba (como en clase)Configuración (.env)
TRANSPORT=streamable-http
HOST=127.0.0.1
PORT=8000
AGENT_ROLE=all
USERS_SERVICE_URL=http://localhost:3002
SPORTS_SERVICE_URL=http://localhost:3003
REPORTS_SERVICE_URL=http://localhost:3006TRANSPORT: sse, streamable-http o stdio.
Inicio rápido (Windows)
1. Entorno e instalación
cd ink-mcp-inklusport
python -m venv .venv
.\.venv\Scripts\Activate.ps1
pip install -r requirements.txt2. Servidor MCP
Users y Sports no son obligatorios para arrancar. Sin ellos, las tools
devuelven success=false (microservicio no alcanzable).
python src/server.pyDeberías ver http://127.0.0.1:8000. Health: http://127.0.0.1:8000/.
3. Cliente de prueba (otra terminal)
.\.venv\Scripts\Activate.ps1
python src/client_test.py4. Un proceso por rol (opcional)
# terminal 1
$env:AGENT_ROLE="usuario"; $env:PORT="8000"; python src/server.py
# terminal 2
$env:AGENT_ROLE="entrenador"; $env:PORT="8001"; python src/server.py
# terminal 3
$env:AGENT_ROLE="organizador"; $env:PORT="8002"; python src/server.py
# terminal 4
$env:AGENT_ROLE="admin"; $env:PORT="8003"; python src/server.pyConfig Antigravity con los cuatro: agents/antigravity.roles.mcp.json.
Con un solo servidor (AGENT_ROLE=all): agents/antigravity.mcp.json.
Antigravity
Instala Antigravity IDE (no el agente 2.0 “puro”).
Arranca el servidor con
TRANSPORT=streamable-http.Añade el MCP:
http://127.0.0.1:8000/mcp.Pega el prompt de
agents/<rol>.mdcomo instrucciones del agente.Prueba: “¿Qué eventos hay en Inklusport?”. Si la respuesta incluye el campo
"via": "mcp", el agente está usando el servidor y no inventando datos.
Microservicios
Desde la raíz del monorepo:
docker compose up -d users-service sports-service reports-servicePuertos: Users 3002, Sports 3003, Reports 3006. Las consultas de lectura
son permitAll. Las tools de escritura (crear/editar/cancelar/inscribir,
bloquear usuarios, roles, deportes) llaman los mismos endpoints y pueden
exigir JWT de admin/entrenador/organizador según el perfil de seguridad.