My Next Adventure

Crea viajes, compara variantes lado a lado y añade opciones de alojamiento, transporte y eventos.

Servidor MCP alojado

npx add-mcp 'https://mcp.mynextadventure.cloud/mcp'

Se instala en Claude Code, Codex, Cursor y más

Documentación

Servidor MCP MyNextAdventure

Un servidor remoto Model Context Protocol que permite a un asistente de IA planificar viajes en MyNextAdventure: crear un viaje, diseñar el itinerario, proponer vuelos y hoteles, añadir actividades y compartir el resultado.

Se ejecuta como un Cloudflare Worker sin estado y es un proxy autenticado y ligero frente a la API pública de MyNextAdventure: no almacena datos de viajes propios y reenvía cada llamada a la API con la clave API del usuario que realiza la llamada.

  • Producción: https://mcp.mynextadventure.cloud/mcp (HTTP Streamable)
  • API ascendente: https://api.mynextadventure.cloud (API pública v1)

Autenticación

Cada solicitud necesita una clave API de MyNextAdventure. Crea una en la aplicación en Configuración → Claves API y envíala como:

  • Authorization: Bearer <api-key> — lo que envían la mayoría de clientes MCP, y lo que hace mcp-remote, o
  • X-API-Key: <api-key> — para clientes que solo permiten configurar encabezados personalizados.

El worker la reenvía a la API como X-API-Key. Las solicitudes sin clave reciben un 401. Lo que la clave pueda hacer, el asistente puede hacerlo: las claves son por usuario, por lo que el asistente solo ve los viajes de ese usuario.

Dónde vive tu clave. El servidor no tiene estado: tu clave se lee de los encabezados de cada solicitud, se usa para realizar esa única llamada a la API de MyNextAdventure y nunca se almacena — no hay almacenamiento de sesión ni un Durable Object que la conserve entre solicitudes. Nunca se registra y no se comparte entre solicitudes ni usuarios. Revoca una clave en cualquier momento en la aplicación en Configuración → Claves API.

Herramientas

24 herramientas que cubren las operaciones que la planificación conversacional realmente necesita. Cada una es una vista seleccionada sobre una operación de la API de MyNextAdventure — consulta Regeneración de herramientas.

HerramientaQué hace
whoamiA qué cuenta pertenece la clave API (útil para comprobar la conexión).
list_tripsLista los viajes del usuario; filtra por estado (planning, ready, finished, cancelled).
get_tripUn viaje completo: variantes, destinos, opciones, eventos. Necesario antes de cualquier edición.
create_tripCrea un viaje nuevo y vacío.
update_tripRenombra, establece una foto de portada o mueve el viaje por su ciclo de vida.
create_trip_share_linkCrea/actualiza un enlace de uso compartido público de solo lectura.
create_variantAñade un plan alternativo (las fechas viven aquí: exactas o flexibles).
duplicate_variantCopia una variante con todo su contenido.
update_variantRenombra una variante, cambia sus fechas o notas.
select_variantMarca una variante como el plan elegido.
add_destinationAñade una parada a una variante, en orden de itinerario.
update_destinationCambia el nombre del lugar, las fechas o las notas de una parada.
reorder_destinationsReordena las paradas de una variante.
add_accommodation_optionPropone un lugar para alojarse en un destino.
add_transport_optionPropone una forma de llegar a un destino.
add_getting_around_optionPropone movilidad local (transporte público, coche de alquiler, …).
update_destination_optionEdita una opción existente de cualquiera de los tres tipos.
select_destination_optionSelecciona — o, sin optionId, deselecciona — una opción.
add_eventAñade una actividad (museo, concierto, restaurante, visita) a una variante.
update_eventEdita una actividad.
toggle_eventCambia una actividad entre confirmada y "solo una idea".
delete_trip_itemElimina permanentemente una variante, destino, opción o evento. Eliminar una variante completa además requiere confirm: true.
list_goalsLista los objetivos de viaje / lista de deseos del usuario.
add_goalAñade un objetivo a partir de un nombre o una URL.

El servidor también incluye MCP instructions que describe el modelo de datos (trip → variants → destinations → options, con eventos en la variante) y el orden habitual de operaciones, para que un cliente no tenga que adivinar el flujo de trabajo.

Aún no expuestas, aunque la API las admite: gestión de acceso de colaboradores e invitaciones, votación, colecciones, tokens de invitación, vinculación objetivo↔viaje, gestión de claves API y eliminación de viajes.

Conexión

Claude Desktop

Configuración → Desarrollador → Editar configuración y añade:

{
  "mcpServers": {
    "mynextadventure": {
      "command": "npx",
      "args": [
        "mcp-remote",
        "https://mcp.mynextadventure.cloud/mcp",
        "--header",
        "Authorization: Bearer ${MNA_API_KEY}"
      ],
      "env": { "MNA_API_KEY": "your-api-key" }
    }
  }
}

Reinicia Claude Desktop; las herramientas aparecen bajo el conector.

claude.ai / Claude Code

Añade un conector personalizado que apunte a https://mcp.mynextadventure.cloud/mcp y establece el encabezado Authorization: Bearer <api-key>. Desde Claude Code:

claude mcp add --transport http mynextadventure https://mcp.mynextadventure.cloud/mcp \
  --header "Authorization: Bearer <api-key>"

ChatGPT

Configuración → Conectores → Añadir conector personalizado, URL del servidor MCP https://mcp.mynextadventure.cloud/mcp, autenticación "encabezado personalizado" con X-API-Key: <api-key> (o Authorization: Bearer <api-key>).

Cualquier otro cliente MCP

HTTP Streamable en /mcp. GET / devuelve un pequeño documento JSON de estado con el endpoint y el número de herramientas.

Desarrollo

npm install
npm run dev              # wrangler dev on http://localhost:8787
npm test                 # vitest: request building, schemas, generator freshness
npm run type-check       # tsc --noEmit
npm run generate:tools   # regenerate src/generated/tools.ts from the OpenAPI spec
npx tsx scripts/smoke.ts # drive the MCP protocol against localhost:8787

scripts/smoke.ts realiza un handshake real (initialize → tools/list → un tools/call), leyendo la clave API de $MNA_API_KEY o ~/.config/mna/credentials. Se niega a llamar a herramientas de mutación a menos que se pase --force. Para ejercitar herramientas de escritura sin tocar datos reales, apunta el worker a un mock local:

npx wrangler dev --var MNA_API_BASE_URL:http://localhost:8899

Regeneración de herramientas

Los esquemas de herramientas están generados, no escritos a mano:

apps/server/openapi-v1.json   (the API's OpenAPI snapshot, kept fresh by server CI)
        +
scripts/tool-manifest.ts      (which operations become tools, their names and descriptions)
        ↓  scripts/generator.ts
src/generated/tools.ts        (committed; zod input schemas + request builders)

Para añadir o cambiar una herramienta, edita scripts/tool-manifest.ts y ejecuta npm run generate:tools. Nunca edites src/generated/tools.ts a mano: una prueba falla si se desvía de la especificación.

Una entrada de manifiesto nombra una operación de API, o agrupa varias operaciones sin cuerpo detrás de un argumento discriminador (delete_trip_item's target, select_destination_option's action) para mantener bajo el número de herramientas. Los parámetros de ruta se pueden renombrar (id → tripId), los parámetros de consulta se pueden restringir a enums y las descripciones se pueden sobrescribir — todo lo demás, incluidos los esquemas del cuerpo de la solicitud, proviene de la especificación.

Despliegue

npm run deploy (wrangler) — solo producción, por lo que está restringido a un mantenedor; CI nunca despliega este worker.

Desarrollo

npm ci
npm run type-check
npm test        # includes a drift test: src/generated/tools.ts must match the generator output
npm run dev     # wrangler dev

Las herramientas se generan a partir de la instantánea OpenAPI incluida en spec/openapi-v1.json (especificación canónica en vivo: https://api.mynextadventure.cloud/api/v1/openapi.json) mediante scripts/generate-tools.ts. Regenera después de actualizar la instantánea.

Este repositorio es la fuente desplegable para mcp.mynextadventure.cloud. El desarrollo también ocurre en el monorepo de My Next Adventure y se sincroniza aquí en cada versión. Las incidencias y las solicitudes de extracción son bienvenidas.

Licencia

MIT