mcp-asdeporte
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@mcp-asdeportesearch for running events in Madrid"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
mcp-asdeporte
MCP server NestJS (@rekog/mcp-nest) que expone tools de solo lectura sobre ms-event-v2 y ms-inscription-v2.
Stack
NestJS 10 +
@rekog/mcp-nest(Streamable HTTP en/mcp)Hexagonal:
src/<module>/{domain,application,infrastructure,controllers}Auth chatbot → MCP: header
x-api-key=MCP_INBOUND_APIKEYAuth MCP → micros: header
x-api-key=MCP_APIKEYObservabilidad:
nestjs-pino,x-correlation-idRate limit:
@nestjs/throttler(default 60 req / 60s)
Setup
cp .env.example .env
# Completar EVENT_BASE_URL, INSCRIPTION_BASE_URL, MCP_APIKEY, MCP_INBOUND_APIKEY, CURSOR_API_KEY
npm install
npm run start:devEndpoint MCP: POST http://localhost:3100/mcp
Chat (Olimpia)
Asistente HTTP que usa Cursor SDK + tools MCP (solo lectura). Mismo proceso que /mcp.
Endpoint | Respuesta |
| JSON |
| SSE: |
Auth: header x-api-key = MCP_INBOUND_APIKEY
Body: { "question": string, "userid": uuid }
Env: CURSOR_API_KEY (obligatorio), CURSOR_MODEL, MCP_PUBLIC_URL, CHAT_TIMEOUT_MS (default 120s)
Node: ≥ 22.13 (@cursor/sdk)
Rate limit: mismo throttler global (60 / 60s)
# Sync
curl -s -X POST http://localhost:3100/chat/ask \
-H "x-api-key: $MCP_INBOUND_APIKEY" \
-H 'Content-Type: application/json' \
-H 'x-correlation-id: demo-1' \
-d '{"question":"¿Cuántos inscritos hay en Minions 2026?","userid":"62167a2d-d0eb-4f3e-a3ca-42cc4144465b"}'
# Stream (SSE)
curl -N -X POST http://localhost:3100/chat/ask/stream \
-H "x-api-key: $MCP_INBOUND_APIKEY" \
-H 'Content-Type: application/json' \
-d '{"question":"¿Cuántos inscritos hay en Minions 2026?","userid":"62167a2d-d0eb-4f3e-a3ca-42cc4144465b"}'SSE done.data es JSON stringificado con { answer, runId, agentId }. Si el client corta la conexión, el run se cancela.
Probar con MCP Inspector
Requiere Node.js ≥ 22.7.5 (requisito del Inspector). El MCP debe estar corriendo (npm run start:dev).
UI (recomendado)
npm run inspectorAbre http://localhost:6274. En la UI:
Transport: Streamable HTTP
URL:
http://localhost:3100/mcp(preconfigurado víainspector/mcp.json)Auth: header name
x-api-key, value = tuMCP_INBOUND_APIKEYdel.envConnect → Tools → List Tools / Call Tool
CLI (smoke)
# Lista tools (usa MCP_INBOUND_APIKEY del .env)
npm run inspector:list
# Health check
npm run inspector:ping
# Cualquier tool
node scripts/inspector-cli.mjs tools/call event_get --tool-arg id=<uuid>Tools
Catálogo de solo lectura. El chatbot (o Inspector) elige la tool y manda los args; no hay mutaciones.
Tool | Para qué |
| ¿El MCP está vivo? |
| Buscar eventos por texto / filtros (Typesense) |
| Detalle de un evento (UUID o uri) |
| Listado paginado de eventos (GraphQL) |
| Distancias / modalidades de un evento |
| Secciones de convocatoria |
| Detalle de una inscripción (UUID o slug) |
| Inscritos de un evento (filtros + paginación) |
| Inscripciones de un usuario |
| Buscar inscritos en un evento por texto libre |
| ¿Usuario X está inscrito en evento Y? |
| Conteo de inscritos por eventid(s) |
| Próximas competencias de un usuario |
| Deportes / tipos de evento del usuario |
| Recuperar inscripción por nombre + fecha + evento |
| Detalle de un carrito (lean, sin secretos de pago) |
| Historial de carritos de un usuario |
Flujo típico (chatbot)
Buscar evento →
event_search/event_listDetalle / distancias / convocatoria →
event_get,event_distances,event_convocatoriesTotales o listado de inscritos →
inscription_totals,inscriptions_by_event/inscription_searchPersona concreta →
inscription_get(slug o UUID) ois_inscribed/inscriptions_by_userUsuario autenticado →
user_next_competitions,user_sport_types; recuperación →inscription_recoveryCarrito / compra →
cart_get,carts_by_user
mcp_ping
Sin parámetros. Responde { status: "ok", service: "mcp-asdeporte" }.
Preguntas: ¿Está arriba el MCP? / health check.
npm run inspector:pingevent_search
Búsqueda full-text Typesense. Respuesta lean: found, page, hits[] (nombre, uri, fechas, precios flags, etc.).
Arg | Req | Notas |
| sí | Texto. Usa |
| no | Ej. |
| no | Ej. |
| no | Campos a buscar |
| no | Paginación (default 20, max 250) |
Preguntas ejemplo:
¿Hay eventos de Minions / maratón / ciclismo?
Eventos en CDMX con inscripción abierta
Próximas carreras ordenadas por fecha
node scripts/inspector-cli.mjs tools/call event_search --tool-arg 'q=minions' --tool-arg per_page=5
node scripts/inspector-cli.mjs tools/call event_search --tool-arg 'q=*' --tool-arg 'filter_by=inscription_allow:true'event_get
Detalle de un evento por UUID o uri.
Arg | Req |
| sí — UUID o uri |
Devuelve (lean): nombre, uri, dirección, fechas, precios, currency, sports, inscription_allow, published, short_description, organizationid…
Preguntas ejemplo:
Dame el detalle del evento Minions
¿Cuánto cuesta / está publicada la inscripción?
¿Cuál es la uri / fechas del evento X?
node scripts/inspector-cli.mjs tools/call event_get --tool-arg id=minions-run-cdmx-2026-2rv
node scripts/inspector-cli.mjs tools/call event_get --tool-arg id=<uuid>event_list
Listado GraphQL paginado (alternativa más “admin” a Typesense).
Arg | Req |
| no |
| no — UUID org |
| no |
Preguntas ejemplo:
Lista eventos de la organización X
Busca por keyword “étape”
event_distances
Modalidades / distancias de un evento (stock, unidad, metros, disabled).
Arg | Req |
| sí — UUID o uri |
Preguntas ejemplo:
¿Qué distancias tiene Minions? (3k / 5k / 10k…)
¿Queda stock en la de 10 km?
node scripts/inspector-cli.mjs tools/call event_distances --tool-arg event=<uuid-o-uri>event_convocatories
Secciones e items de convocatoria (HTML/contenido editorial).
Arg | Req |
| sí — UUID o uri |
| no — ej. |
Preguntas ejemplo:
¿Cuál es la ruta / entrega de kit / premiación?
Muéstrame la convocatoria en inglés
¿Hay EXPO o beneficios plus?
node scripts/inspector-cli.mjs tools/call event_convocatories --tool-arg eventOrUri=<uri> --tool-arg lang=esinscription_get
Una inscripción. Exactamente un filtro: inscriptionid (UUID) o slug (nº de compra).
Arg | Req |
| uno de los dos |
| uno de los dos — ej. |
Devuelve (lean): status, participante, email, número, montos, distanceid, categoryid, eventid, created_at…
Preguntas ejemplo:
Dame la inscripción con slug ASD…
Detalle de la inscripción
<uuid>¿Está paid o pending_payment?
node scripts/inspector-cli.mjs tools/call inscription_get --tool-arg slug=ASDLNN2JFGZ9Q
node scripts/inspector-cli.mjs tools/call inscription_get --tool-arg inscriptionid=<uuid>inscriptions_by_event
Listado paginado de inscritos de un evento.
Arg | Req | Notas |
| sí | UUID del evento |
| no |
|
| no | Filtrar un usuario |
| no | Texto: nombre, email, folio, número |
| no | Default 10 |
Preguntas ejemplo:
Lista 10 inscritos paid del Minions
Busca al inscrito “Servando” en el evento X
¿Cuántos pending_payment hay? (ver
totalde la respuesta)
node scripts/inspector-cli.mjs tools/call inscriptions_by_event \
--tool-arg eventid=<uuid> --tool-arg status=paid --tool-arg perpage=5inscriptions_by_user
Historial de inscripciones de un usuario (el chatbot debe tener el userid).
Arg | Req |
| sí |
| no |
| no — fechas ISO |
| no |
| no |
Preguntas ejemplo:
¿En qué eventos está inscrito el user Y?
Inscripciones pagadas de Y en 2026
Filtra por nombre de evento “Étape”
node scripts/inspector-cli.mjs tools/call inscriptions_by_user --tool-arg userid=<uuid> --tool-arg perpage=10is_inscribed
¿El usuario tiene inscripción(es) en ese evento? Devuelve array (vacío = no).
Arg | Req |
| sí |
| sí |
Preguntas ejemplo:
¿El user Y está inscrito en Minions?
Confirma inscripción user+evento antes de otra acción
node scripts/inspector-cli.mjs tools/call is_inscribed \
--tool-arg userid=<uuid> --tool-arg eventid=<uuid>inscription_totals
Totales de inscritos por uno o más eventos.
Arg | Req |
| sí — array de UUIDs |
Preguntas ejemplo:
¿Cuántos inscritos tiene Minions?
Compara totales de estos 3 eventos
node scripts/inspector-cli.mjs tools/call inscription_totals \
--tool-arg 'eventids=["d09a20b1-90ee-474b-85bd-d5fac1772525"]'inscription_search
Búsqueda de inscritos dentro de un evento por texto libre (nombre, email, folio, número). Preferir frente a inscriptions_by_event cuando se busca a una persona.
Arg | Req | Notas |
| sí | Texto de búsqueda |
| sí | UUID del evento |
| no | Default 10 |
Preguntas ejemplo:
Busca “Servando” en el Minions
¿Hay alguien con folio … en el evento X?
node scripts/inspector-cli.mjs tools/call inscription_search \
--tool-arg filter=Servando --tool-arg eventid=<uuid>user_next_competitions
Próximas competencias del usuario (eventos futuros con inscripción). El chatbot debe tener el userid.
Arg | Req |
| sí |
| no |
Devuelve (lean): inscriptionid, status, eventid, fecha, nombre oficial, uri, address…
Preguntas ejemplo:
¿Cuáles son mis próximas carreras?
Próximos eventos del user Y
node scripts/inspector-cli.mjs tools/call user_next_competitions \
--tool-arg userid=<uuid>user_sport_types
Deportes / tipos de evento en los que el usuario se ha inscrito (con conteos).
Arg | Req |
| sí |
Devuelve: events_total + lista sports (sportid, name, total).
Preguntas ejemplo:
¿En qué deportes corre el user Y?
Resumen de tipos de evento del usuario
node scripts/inspector-cli.mjs tools/call user_sport_types --tool-arg userid=<uuid>inscription_recovery
Recupera una inscripción por nombre completo + fecha de nacimiento + evento. Sensible: el chatbot debe verificar identidad antes de llamar.
Arg | Req | Notas |
| sí | Como está registrado |
| sí | ISO, ej. |
| sí | UUID del evento |
Preguntas ejemplo:
Recupera mi inscripción al Minions: Juan Pérez, 1978-06-13
node scripts/inspector-cli.mjs tools/call inscription_recovery \
--tool-arg full_name="Juan Perez" \
--tool-arg birthdate=1978-06-13T12:00:00.000Z \
--tool-arg eventid=<uuid>cart_get
Detalle lean de un carrito: status, montos, inscripciones, federaciones, store. Sin tarjetas, SPEI, URLs de gateway ni customer ids.
Arg | Req |
| sí — UUID |
Preguntas ejemplo:
¿En qué status está el carrito X?
¿Qué inscripciones trae este carrito?
node scripts/inspector-cli.mjs tools/call cart_get --tool-arg cartid=<uuid>carts_by_user
Historial paginado de carritos de un usuario.
Arg | Req |
| sí |
| no |
Preguntas ejemplo:
¿Qué carritos tiene el user Y?
Últimos carritos pending_payment de Y
node scripts/inspector-cli.mjs tools/call carts_by_user --tool-arg userid=<uuid>Fuera de alcance (hoy)
No hay tools de escritura ni de: facturas, ratings, goals, transacciones, import CSV, shipping, dependientes, etc. Solo lectura event + inscription (+ cart lean) según la tabla de arriba.
Hardening
Upstream timeout (
UPSTREAM_TIMEOUT_MS) →504Chat timeout (
CHAT_TIMEOUT_MS, default 120s) →504/ SSEerror; cancela el run CursorUpstream 401/403 →
401; 5xx →502Correlation: header
x-correlation-id(generado si falta; logueado en chat conagentId/runId)Rate limit:
@nestjs/throttleren/mcpy/chat(mismo window)Chat stream: abort al
req.close→run.cancel()+ dispose del agent
Estructura
src/
shared/ # config, http clients, guards, interceptors, ping
event/ # tools event_* (hexagonal)
inscription/ # tools inscription_* (hexagonal)
chat/ # Olimpia: /chat/ask + /chat/ask/stream (Cursor + MCP)
inspector/ # config MCP Inspector (Streamable HTTP)
scripts/ # wrapper CLI Inspector + x-api-keyThis server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/FrankoCamposT800/mcp-asdeporte'
If you have feedback or need assistance with the MCP directory API, please join our Discord server