MCP: WODira MCP endpoint, OAuth discovery, client setup, tools, resources, and recommended flows. --- # MCP de WODira > Endpoint, autenticación, discovery y modelo de uso del servidor MCP público de WODira. El MCP de WODira permite que clientes como Codex, Claude Code, Cursor, Gemini CLI o apps de ChatGPT consulten y operen sobre eventos, boxes, reservas, tickets y herramientas de organizador usando el Model Context Protocol. Endpoint canónico: ```txt https://api.wodira.app/mcp ``` Usa este endpoint cuando el cliente soporte MCP remoto por Streamable HTTP. El transporte SSE existe como compatibilidad heredada, pero no es la opción recomendada para nuevas integraciones. ## Discovery y OAuth [Sección titulada «Discovery y OAuth»](#discovery-y-oauth) WODira publica metadata OAuth 2.1 para que los clientes no tengan que asumir endpoints internos: | Recurso | URL | | ----------------------------- | ----------------------------------------------------------------- | | Protected resource metadata | `https://api.wodira.app/.well-known/oauth-protected-resource/mcp` | | Authorization server metadata | `https://api.wodira.app/.well-known/oauth-authorization-server` | | OpenID configuration | `https://api.wodira.app/.well-known/openid-configuration` | El recurso/audience esperado del access token es: ```txt https://api.wodira.app/mcp ``` Scope mínimo requerido: ```txt profile ``` Los clientes compatibles deberían usar discovery y abrir el login/consent de WODira durante el flujo OAuth. También se acepta una sesión Better Auth válida si el cliente ejecuta la conexión desde un navegador autenticado. Tokens soportados El MCP de WODira acepta Bearer JWT con audience MCP y scope `profile`. Los tokens opacos no están soportados para este recurso. ## Transports [Sección titulada «Transports»](#transports) | Transport | Endpoint | Estado | Uso recomendado | | --------------- | -------------------------------------------------- | ------ | --------------------------------------------- | | Streamable HTTP | `https://api.wodira.app/mcp` | Activo | Clientes remotos modernos con OAuth | | SSE | `https://api.wodira.app/mcp/sse` + `/mcp/messages` | Legado | Solo si tu cliente no soporta Streamable HTTP | La conexión inicial crea una sesión MCP. Las siguientes llamadas usan el header `mcp-session-id` que gestiona el cliente MCP. ## Primer test [Sección titulada «Primer test»](#primer-test) Una vez conectado el cliente, ejecuta la tool: ```txt hello ``` Respuesta esperada: ```txt Hello from WODira MCP ``` Si `hello` funciona, el transporte, la autenticación y el descubrimiento básico de tools están operativos. ## Qué puedes hacer [Sección titulada «Qué puedes hacer»](#qué-puedes-hacer) El servidor expone tools para tres perfiles: | Perfil | Capacidades | | --------- | ---------------------------------------------------------------------------------------------------- | | Público | Buscar eventos publicados y obtener enlaces de evento | | Athlete | Ver boxes, clases de hoy, reservas, tickets, bookmarks y calendario | | Organizer | Listar organizaciones, crear eventos, consultar métricas, gestionar órdenes, tickets e inscripciones | Para flujos de organizador, empieza por `organizer_list_my_organizations` y usa el `organizationId` devuelto en las tools que lo aceptan. ## Buenas prácticas [Sección titulada «Buenas prácticas»](#buenas-prácticas) * Conecta siempre contra `https://api.wodira.app/mcp` salvo que estés en un entorno local controlado. * Usa OAuth del cliente MCP cuando esté disponible. * Revisa las tools antes de permitir acciones de escritura como crear eventos, reembolsar órdenes o borrar inscripciones. * No pegues access tokens en prompts, issues, repositorios ni documentación pública. * Usa `hello` como smoke test y después elige tools por intención, no por nombre. ## Siguientes pasos [Sección titulada «Siguientes pasos»](#siguientes-pasos) * [Conectar clientes MCP](/mcp/connect-clients/) * [Tools y flujos MCP](/mcp/tools/) --- # WODira MCP > Endpoint, authentication, discovery, and usage model for WODira's public MCP server. WODira MCP lets clients such as Codex, Claude Code, Cursor, Gemini CLI, and ChatGPT apps query and operate on events, boxes, bookings, tickets, and organizer tools using the Model Context Protocol. Canonical endpoint: ```txt https://api.wodira.app/mcp ``` Use this endpoint when the client supports remote MCP over Streamable HTTP. The SSE transport exists for legacy compatibility, but it is not recommended for new integrations. ## Discovery and OAuth [Section titled “Discovery and OAuth”](#discovery-and-oauth) WODira publishes OAuth 2.1 metadata so clients do not need to assume internal endpoints: | Resource | URL | | ----------------------------- | ----------------------------------------------------------------- | | Protected resource metadata | `https://api.wodira.app/.well-known/oauth-protected-resource/mcp` | | Authorization server metadata | `https://api.wodira.app/.well-known/oauth-authorization-server` | | OpenID configuration | `https://api.wodira.app/.well-known/openid-configuration` | The expected access token resource/audience is: ```txt https://api.wodira.app/mcp ``` Minimum required scope: ```txt profile ``` Compatible clients should use discovery and open WODira login/consent during the OAuth flow. A valid Better Auth browser session is also accepted when the client starts the connection from an authenticated browser. Supported tokens WODira MCP accepts Bearer JWTs with the MCP audience and the `profile` scope. Opaque tokens are not supported for this resource. ## Transports [Section titled “Transports”](#transports) | Transport | Endpoint | Status | Recommended use | | --------------- | -------------------------------------------------- | ------ | -------------------------------------- | | Streamable HTTP | `https://api.wodira.app/mcp` | Active | Modern remote clients with OAuth | | SSE | `https://api.wodira.app/mcp/sse` + `/mcp/messages` | Legacy | Only if your client lacks HTTP support | The initial connection creates an MCP session. Subsequent calls use the `mcp-session-id` header managed by the MCP client. ## First test [Section titled “First test”](#first-test) Once the client is connected, run the tool: ```txt hello ``` Expected response: ```txt Hello from WODira MCP ``` If `hello` works, transport, authentication, and basic tool discovery are working. ## What you can do [Section titled “What you can do”](#what-you-can-do) The server exposes tools for three profiles: | Profile | Capabilities | | --------- | ---------------------------------------------------------------------------- | | Public | Search published events and get event links | | Athlete | View boxes, today’s classes, bookings, tickets, bookmarks, and calendar data | | Organizer | List organizations, create events, check metrics, manage orders and tickets | For organizer flows, start with `organizer_list_my_organizations` and use the returned `organizationId` in tools that accept it. ## Best practices [Section titled “Best practices”](#best-practices) * Connect to `https://api.wodira.app/mcp` unless you are in a controlled local environment. * Use the MCP client’s OAuth flow when available. * Review tools before allowing write actions such as creating events, refunding orders, or deleting registrations. * Do not paste access tokens into prompts, issues, repositories, or public documentation. * Use `hello` as a smoke test, then choose tools by intent rather than by name. ## Next steps [Section titled “Next steps”](#next-steps) * [Connect MCP clients](/en/mcp/connect-clients/) * [MCP tools and flows](/en/mcp/tools/) --- # Connect MCP clients > Configure WODira MCP in Codex, Claude Code, Cursor, Gemini CLI, ChatGPT, and other clients. All clients should point to the remote endpoint: ```txt https://api.wodira.app/mcp ``` When the client supports OAuth, let it discover WODira metadata and complete login in the browser. The minimum required scope is `profile`. ## Quick connect [Section titled “Quick connect”](#quick-connect) The only stable public deeplink we can offer today is Claude’s custom connector flow. It opens the custom connector modal with name and URL prefilled: [Add WODira to Claude](https://claude.ai/customize/connectors?modal=add-custom-connector\&connectorName=WODira\&connectorUrl=https%3A%2F%2Fapi.wodira.app%2Fmcp) [View other clients](#codex) For Codex, Cursor, Gemini CLI, ChatGPT, Perplexity, and Grok, use the configurations below. If those clients publish an official deeplink with equivalent behavior, we will add a button here. ## Codex [Section titled “Codex”](#codex) Codex supports Streamable HTTP MCP servers in `config.toml`. ```toml [mcp_servers.wodira] url = "https://api.wodira.app/mcp" ``` Then sign in: ```bash codex mcp login wodira ``` Inside Codex, use `/mcp` to check that the server is connected and that the `hello` tool is available. ## Claude Code [Section titled “Claude Code”](#claude-code) If you use Claude web, open the direct modal: [Add connector in Claude](https://claude.ai/customize/connectors?modal=add-custom-connector\&connectorName=WODira\&connectorUrl=https%3A%2F%2Fapi.wodira.app%2Fmcp) If you use Claude Code, add the remote HTTP server: ```bash claude mcp add --transport http wodira https://api.wodira.app/mcp ``` In a Claude Code session, open: ```txt /mcp ``` From there you can check status, authenticate, and inspect discovered tools. If your version uses JSON, `streamable-http` is equivalent to remote HTTP. ## Cursor [Section titled “Cursor”](#cursor) Cursor lets you add MCP servers from its MCP settings. Add a remote server named `wodira` with this URL: ```txt https://api.wodira.app/mcp ``` If your version lets you edit MCP-compatible JSON, use this block as a base: ```json { "mcpServers": { "wodira": { "url": "https://api.wodira.app/mcp" } } } ``` Select Streamable HTTP if the UI asks you to choose a transport. If the client requests authorization, complete the WODira OAuth flow. ## Gemini CLI [Section titled “Gemini CLI”](#gemini-cli) Gemini CLI uses `settings.json` and distinguishes SSE (`url`) from Streamable HTTP (`httpUrl`). Use `httpUrl` for WODira: ```json { "mcpServers": { "wodira": { "httpUrl": "https://api.wodira.app/mcp" } } } ``` Then run `/mcp` in Gemini CLI to check connection, tools, and resources. ## ChatGPT [Section titled “ChatGPT”](#chatgpt) For ChatGPT, the recommended path is an app built with Apps SDK/MCP Apps. WODira already exposes tools and UI resources with `ui://wodira/...` URIs, so a compatible app or connector can use the remote server: ```txt https://api.wodira.app/mcp ``` In your app manifest/configuration, declare the remote MCP server and enable OAuth for users. Then test `hello` and a read-only tool before enabling write actions. ## Perplexity and Grok [Section titled “Perplexity and Grok”](#perplexity-and-grok) Perplexity and Grok frequently change their external connector support. If your plan or workspace offers remote MCP with OAuth, use: ```txt https://api.wodira.app/mcp ``` If you do not see a remote MCP/Streamable HTTP option, use a currently supported client such as Codex, Claude Code, Cursor, or Gemini CLI. Do not use proxies that paste tokens into prompts unless they are controlled by your team and reviewed for security. ## SSE fallback [Section titled “SSE fallback”](#sse-fallback) Only for older clients without Streamable HTTP: ```txt https://api.wodira.app/mcp/sse ``` The associated messages endpoint is: ```txt https://api.wodira.app/mcp/messages ``` Prefer Streamable HTTP whenever the client supports it. ## Verification [Section titled “Verification”](#verification) 1. Connect the `wodira` server. 2. Complete OAuth if the client asks for it. 3. Run `hello`. 4. Run a read-only tool such as `search_events`. 5. For organizer flows, run `organizer_list_my_organizations` before operating on events. --- # MCP tools and flows > WODira MCP tool map by intent, profile, and recommended flow. Choose tools by intent. Some tools require an authenticated athlete or organizer user, while others operate on public data. ## Core [Section titled “Core”](#core) | Intent | Tool | Notes | | -------------------- | --------------- | --------------------------------------------------------------------------- | | Verify connectivity | `hello` | MCP server smoke test | | Search public events | `search_events` | Search by text, date, location, status, type, price, team size, or modality | ## Athlete [Section titled “Athlete”](#athlete) | Intent | Tool | Notes | | ----------------------------- | ----------------------------------- | -------------------------------------------- | | View my boxes | `athlete_my_boxes` | Membership, credits, timezone, quick links | | View today’s classes in a box | `boxes_classes_today` | Requires `boxIdOrSlug` | | View today’s bookings | `athlete_my_box_reservations_today` | Optional `boxIdOrSlug` | | View my tickets | `athlete_my_tickets` | Tickets, event, team, and bib number | | Search upcoming events | `athlete_search_upcoming_events` | Defaults to future, published, date-sorted | | View upcoming bookmarks | `athlete_upcoming_bookmarks` | Short list with `limit` | | Export bookmarks to calendar | `athlete_my_bookmarks_calendar` | `includeIcs` can increase response size | | Preview registration checkout | `athlete_register_event_summary` | Use before creating checkout | | Create registration checkout | `athlete_register_event` | Creates registration and returns payment URL | ## Organizer [Section titled “Organizer”](#organizer) | Intent | Tool | Notes | | ---------------------------- | -------------------------------------- | --------------------------------------------------------------------- | | List available organizations | `organizer_list_my_organizations` | Recommended first step to get `organizationId` | | Create an event | `organizer_create_event` | Full event creation with categories, pricing, logistics, registration | | List events | `organizer_list_events` | Events with registrations, orders, and summary metrics | | View basic metrics | `organizer_event_metrics_basic` | Requires `eventIdOrSlug`; accepts `organizationId` | | Create offline registration | `organizer_create_manual_registration` | Offline or special cases | | Search orders | `organizer_search_orders` | Payments, orders, and related tickets | | Search athlete tickets | `organizer_search_athlete_tickets` | Participants, categories, and order status | | Edit a registration | `organizer_update_registration` | Participants, team, bib number, and check-in | | Refund or cancel an order | `organizer_refund_order` | Changes payment/order state | | Delete a registration | `organizer_delete_registration` | Requires `ticketId` | | View full event detail | `organizer_event_detail` | Categories, WODs, sponsors, products, and counts | ## Recommended flows [Section titled “Recommended flows”](#recommended-flows) | Flow | Sequence | | ----------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Smoke test | `hello` | | Public discovery | `hello` -> `search_events` | | Athlete discovery | `athlete_my_boxes` -> `athlete_search_upcoming_events` | | Registration purchase | `athlete_register_event_summary` -> `athlete_register_event` | | Organizer operation | `organizer_list_my_organizations` -> `organizer_list_events` -> `organizer_event_metrics_basic` | | Organizer incident management | `organizer_search_orders` / `organizer_search_athlete_tickets` -> `organizer_update_registration` / `organizer_refund_order` / `organizer_delete_registration` | ## Inputs that matter most [Section titled “Inputs that matter most”](#inputs-that-matter-most) | Tool | Important inputs | | -------------------------------------- | --------------------------------------------------------------------- | | `search_events` | text, `dateRange`, location, status, type, price, team size, modality | | `athlete_search_upcoming_events` | same filters as `search_events`, with athlete defaults | | `boxes_classes_today` | `boxIdOrSlug` | | `athlete_my_box_reservations_today` | `boxIdOrSlug?` | | `athlete_upcoming_bookmarks` | `limit` | | `athlete_my_bookmarks_calendar` | `limit`, `includeIcs` | | `organizer_list_events` | search filters and `organizationId?` | | `organizer_event_metrics_basic` | `eventIdOrSlug`, `organizationId?` | | `organizer_create_manual_registration` | manual payload, `organizationId?`, `checkedInAt?` | | `organizer_update_registration` | `ticketId`, update payload, `organizationId?`, `checkedInAt?` | | `organizer_refund_order` | `orderId`, refund/cancel payload, `organizationId?` | | `organizer_delete_registration` | `ticketId`, `organizationId?` | | `organizer_event_detail` | `eventIdOrSlug`, `organizationId?` | ## UI resources [Section titled “UI resources”](#ui-resources) Core tools include UI metadata with `resourceUri` values such as: ```txt ui://wodira/... ``` Clients that support MCP Apps can render these interfaces. Clients without UI support still receive useful text/JSON responses for the model. ## Operational security [Section titled “Operational security”](#operational-security) * Review every write action before approving it. * Use `organizer_list_my_organizations` to avoid operating on the wrong organization. * Do not use `athlete_register_event` without first reviewing `athlete_register_event_summary`. * Do not share MCP tokens or sessions in public prompts or tickets. * If a tool returns checkout links, treat them as sensitive actions. --- # Conectar clientes MCP > Configuración del MCP de WODira en Codex, Claude Code, Cursor, Gemini CLI, ChatGPT y otros clientes. Todos los clientes deben apuntar al endpoint remoto: ```txt https://api.wodira.app/mcp ``` Cuando el cliente soporte OAuth, deja que haga discovery desde WODira y completa el login en el navegador. El scope mínimo requerido es `profile`. ## Conectar rápido [Sección titulada «Conectar rápido»](#conectar-rápido) El único deeplink público estable que podemos ofrecer ahora es el de Claude. Abre el modal de conector personalizado con nombre y URL ya rellenados: [Añadir WODira a Claude](https://claude.ai/customize/connectors?modal=add-custom-connector\&connectorName=WODira\&connectorUrl=https%3A%2F%2Fapi.wodira.app%2Fmcp) [Ver otros clientes](#codex) Para Codex, Cursor, Gemini CLI, ChatGPT, Perplexity y Grok usa las configuraciones siguientes. Si esos clientes publican un deeplink oficial equivalente, añadiremos su botón aquí. ## Codex [Sección titulada «Codex»](#codex) Codex soporta servidores MCP Streamable HTTP en `config.toml`. ```toml [mcp_servers.wodira] url = "https://api.wodira.app/mcp" ``` Después inicia sesión: ```bash codex mcp login wodira ``` Dentro de Codex usa `/mcp` para revisar que el servidor está conectado y que la tool `hello` aparece disponible. ## Claude Code [Sección titulada «Claude Code»](#claude-code) Si usas Claude web, puedes abrir el modal directo: [Añadir conector en Claude](https://claude.ai/customize/connectors?modal=add-custom-connector\&connectorName=WODira\&connectorUrl=https%3A%2F%2Fapi.wodira.app%2Fmcp) Si usas Claude Code, añade el servidor remoto por HTTP: ```bash claude mcp add --transport http wodira https://api.wodira.app/mcp ``` En una sesión de Claude Code, abre: ```txt /mcp ``` Desde ahí puedes revisar estado, autenticarte y ver las tools descubiertas. Si tu versión usa JSON, el transport `streamable-http` es equivalente al HTTP remoto. ## Cursor [Sección titulada «Cursor»](#cursor) Cursor permite añadir servidores MCP desde su configuración MCP. Añade un servidor remoto llamado `wodira` con URL: ```txt https://api.wodira.app/mcp ``` Si tu versión permite editar JSON compatible con MCP, usa este bloque como base: ```json { "mcpServers": { "wodira": { "url": "https://api.wodira.app/mcp" } } } ``` Selecciona Streamable HTTP si el UI te pide elegir transport. Si el cliente solicita autorización, completa el flujo OAuth de WODira. ## Gemini CLI [Sección titulada «Gemini CLI»](#gemini-cli) Gemini CLI usa `settings.json` y distingue entre SSE (`url`) y Streamable HTTP (`httpUrl`). Para WODira usa `httpUrl`: ```json { "mcpServers": { "wodira": { "httpUrl": "https://api.wodira.app/mcp" } } } ``` Después ejecuta `/mcp` en Gemini CLI para comprobar conexión, tools y recursos. ## ChatGPT [Sección titulada «ChatGPT»](#chatgpt) Para ChatGPT, el camino recomendado es una app basada en Apps SDK/MCP Apps. WODira ya expone tools y recursos UI con URIs `ui://wodira/...`, por lo que una app o conector compatible puede usar el servidor remoto: ```txt https://api.wodira.app/mcp ``` En el manifiesto/configuración de tu app, declara el servidor MCP remoto y habilita OAuth para usuarios. Después prueba `hello` y una tool de lectura antes de activar acciones de escritura. ## Perplexity y Grok [Sección titulada «Perplexity y Grok»](#perplexity-y-grok) Perplexity y Grok cambian con frecuencia su soporte de conectores externos. Si tu plan o workspace ofrece MCP remoto con OAuth, usa: ```txt https://api.wodira.app/mcp ``` Si no aparece una opción de MCP remoto/Streamable HTTP, usa un cliente soportado actualmente como Codex, Claude Code, Cursor o Gemini CLI. No uses proxies con tokens pegados en prompts salvo que estén controlados por tu equipo y revisados para seguridad. ## Fallback SSE [Sección titulada «Fallback SSE»](#fallback-sse) Solo para clientes antiguos sin Streamable HTTP: ```txt https://api.wodira.app/mcp/sse ``` El endpoint de mensajes asociado es: ```txt https://api.wodira.app/mcp/messages ``` Prefiere Streamable HTTP siempre que el cliente lo soporte. ## Verificación [Sección titulada «Verificación»](#verificación) 1. Conecta el servidor `wodira`. 2. Completa OAuth si el cliente lo pide. 3. Ejecuta `hello`. 4. Ejecuta una tool de lectura, por ejemplo `search_events`. 5. Para organizer, ejecuta `organizer_list_my_organizations` antes de operar sobre eventos. --- # Tools y flujos MCP > Mapa de tools del MCP de WODira por intención, perfil y flujo recomendado. Elige tools por intención. Algunas herramientas requieren usuario autenticado como athlete u organizer y otras operan sobre datos públicos. ## Core [Sección titulada «Core»](#core) | Intención | Tool | Notas | | ----------------------- | --------------- | ------------------------------------------------------------------------------ | | Verificar conectividad | `hello` | Smoke test del servidor MCP | | Buscar eventos públicos | `search_events` | Búsqueda por texto, fecha, ubicación, estado, tipo, precio, equipo o modalidad | ## Athlete [Sección titulada «Athlete»](#athlete) | Intención | Tool | Notas | | ------------------------------- | ----------------------------------- | ------------------------------------------------ | | Ver mis boxes | `athlete_my_boxes` | Membresía, créditos, timezone y enlaces rápidos | | Ver clases de hoy de un box | `boxes_classes_today` | Requiere `boxIdOrSlug` | | Ver mis reservas de hoy | `athlete_my_box_reservations_today` | `boxIdOrSlug` opcional | | Ver mis tickets | `athlete_my_tickets` | Tickets, evento, equipo y dorsal | | Buscar próximos eventos | `athlete_search_upcoming_events` | Defaults a futuros, publicados y orden por fecha | | Ver bookmarks próximos | `athlete_upcoming_bookmarks` | Lista corta con `limit` | | Exportar bookmarks a calendario | `athlete_my_bookmarks_calendar` | `includeIcs` puede hacer crecer la respuesta | | Previsualizar inscripción | `athlete_register_event_summary` | Úsala antes de crear checkout | | Crear checkout de inscripción | `athlete_register_event` | Crea inscripción y devuelve sesión de pago | ## Organizer [Sección titulada «Organizer»](#organizer) | Intención | Tool | Notas | | --------------------------------- | -------------------------------------- | ------------------------------------------------------------------------- | | Listar organizaciones disponibles | `organizer_list_my_organizations` | Primer paso recomendado para obtener `organizationId` | | Crear evento | `organizer_create_event` | Alta completa con categorías, pricing, logística y ventana de inscripción | | Listar eventos | `organizer_list_events` | Eventos con registros, órdenes y métricas resumidas | | Ver métricas básicas | `organizer_event_metrics_basic` | Requiere `eventIdOrSlug`; admite `organizationId` | | Alta manual offline | `organizer_create_manual_registration` | Casos offline o especiales | | Buscar órdenes | `organizer_search_orders` | Pagos, órdenes y tickets relacionados | | Buscar tickets de atletas | `organizer_search_athlete_tickets` | Participantes, categorías y estado de orden | | Editar inscripción | `organizer_update_registration` | Participantes, equipo, dorsal y check-in | | Reembolsar o cancelar orden | `organizer_refund_order` | Cambia estado de pago/orden | | Borrar inscripción | `organizer_delete_registration` | Requiere `ticketId` | | Ver detalle completo de evento | `organizer_event_detail` | Categorías, WODs, sponsors, products y conteos | ## Flujos recomendados [Sección titulada «Flujos recomendados»](#flujos-recomendados) | Flujo | Secuencia | | ------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Smoke test | `hello` | | Descubrimiento público | `hello` → `search_events` | | Descubrimiento athlete | `athlete_my_boxes` → `athlete_search_upcoming_events` | | Compra de inscripción | `athlete_register_event_summary` → `athlete_register_event` | | Operación organizer | `organizer_list_my_organizations` → `organizer_list_events` → `organizer_event_metrics_basic` | | Gestión de incidentes organizer | `organizer_search_orders` / `organizer_search_athlete_tickets` → `organizer_update_registration` / `organizer_refund_order` / `organizer_delete_registration` | ## Inputs que más importan [Sección titulada «Inputs que más importan»](#inputs-que-más-importan) | Tool | Inputs importantes | | -------------------------------------- | ----------------------------------------------------------------------- | | `search_events` | texto, `dateRange`, ubicación, status, type, price, team size, modality | | `athlete_search_upcoming_events` | mismos filtros que `search_events`, con defaults de atleta | | `boxes_classes_today` | `boxIdOrSlug` | | `athlete_my_box_reservations_today` | `boxIdOrSlug?` | | `athlete_upcoming_bookmarks` | `limit` | | `athlete_my_bookmarks_calendar` | `limit`, `includeIcs` | | `organizer_list_events` | filtros de búsqueda y `organizationId?` | | `organizer_event_metrics_basic` | `eventIdOrSlug`, `organizationId?` | | `organizer_create_manual_registration` | payload manual, `organizationId?`, `checkedInAt?` | | `organizer_update_registration` | `ticketId`, payload de actualización, `organizationId?`, `checkedInAt?` | | `organizer_refund_order` | `orderId`, payload de refund/cancel, `organizationId?` | | `organizer_delete_registration` | `ticketId`, `organizationId?` | | `organizer_event_detail` | `eventIdOrSlug`, `organizationId?` | ## Recursos UI [Sección titulada «Recursos UI»](#recursos-ui) Las tools principales incluyen metadata de UI con `resourceUri` del tipo: ```txt ui://wodira/... ``` Los clientes que soporten MCP Apps pueden renderizar esas interfaces. Los clientes que no soporten UI siguen recibiendo respuestas de texto/JSON útiles para el modelo. ## Seguridad operativa [Sección titulada «Seguridad operativa»](#seguridad-operativa) * Revisa cada acción de escritura antes de aprobarla. * Usa `organizer_list_my_organizations` para evitar operar sobre la organización equivocada. * No uses `athlete_register_event` sin haber revisado antes `athlete_register_event_summary`. * No compartas tokens ni sesiones MCP en prompts o tickets públicos. * Si una tool devuelve enlaces de checkout, trátalos como acciones sensibles.