this trip, btw

Entrega a alguien un itinerario completo como un enlace de mapa privado y editable. Sin cuenta, sin clave de API, sin tarjeta.

Servidor MCP alojado

npx add-mcp 'https://thistripbtw.us/mcp'

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

Documentación

thistripbtw-mcp

thistripbtw-mcp MCP server

Espacios de trabajo de viaje persistentes y compartibles para agentes de IA.

Todo sobre tu viaje en un solo enlace compartible: un mapa privado que cualquiera puede abrir, sin cuenta para crear uno y sin cuenta para abrirlo.

Un servidor MCP que entrega ese enlace a alguien, lo hace crecer a medida que el plan cambia y lo lee de vuelta. Seis herramientas, y la primera es el punto: crea el enlace tan pronto como haya un origen y un destino, luego modifícalo cada vez que el plan se mueva. Una resuelve un nombre de lugar a coordenadas, una convierte tramos en una URL, una cambia una URL que ya construiste, una decodifica una URL en los tramos, una lee un viaje que la persona ha comprado y una añade una parada a este. La persona lo abre y su viaje ya está dibujado en un mapa real: gratis, editable y suyo.

→ Qué decir — la frase que activa cada herramienta, con los enlaces que esas llamadas produjeron.

→ thistripbtw.us — el lado humano, y lo que paga por esto. El servidor es gratuito y no pide nada; los niveles de pago únicos del sitio lo financian en lugar de un negocio de anuncios o tus datos.

Escrito primero para el asistente que llamará a la herramienta, segundo para la persona que lee el repositorio. Si eres esa persona: el código fuente del sitio es thistripbtw (AGPL-3.0). Este servidor es MIT y autónomo a propósito: intégralo donde quieras.

Por qué existe

Un asistente de IA generalmente no puede crear una cuenta ni ingresar datos de tarjeta. Eso deja casi todas las herramientas de viaje fuera del alcance de un agente cuando actúa en nombre de alguien. Esta no pide nada, por lo que sigue siendo accesible.

Conectar

Una URL, si tu cliente acepta una. Nada que instalar, nada que mantener actualizado:

https://thistripbtw.us/mcp

HTTP transmisible, sin clave, sin registro para empezar. Esa es toda la configuración.

Una nota sobre las puertas de enlace. Algunos directorios listan este servidor haciendo proxy a esa URL en lugar de apuntarte a ella. Un proxy ve lo que pasa a través de él, por lo que un viaje enrutado de esa manera es leído por quien ejecute la puerta de enlace antes de que llegue a nosotros: no nos involucramos con ellos y no podemos responder por lo que conservan. Usa la URL directamente, o ejecuta el archivo tú mismo, si eso te importa.

O ejecútalo localmente desde npm. Node 18+, sin dependencias, nada que mantener actualizado:

claude mcp add thistripbtw -- npx -y thistripbtw-mcp

O descarga el único archivo y ejecútalo, si prefieres leer el código antes que confiar en un host o en un registro de paquetes. Esta es toda la instalación:

curl -O https://thistripbtw.us/mcp/thistripbtw-mcp.mjs
claude mcp add thistripbtw -- node ./thistripbtw-mcp.mjs
Configuración de Claude Desktop
{
  "mcpServers": {
    "thistripbtw": {
      "command": "npx",
      "args": ["-y", "thistripbtw-mcp"]
    }
  }
}

Cambia a "command": "node" con "args": ["/absolute/path/to/thistripbtw-mcp.mjs"] si descargaste el archivo en su lugar.

Compruébalo antes de confiar en él: la autoprueba no toca la red y no necesita configuración:

npx -y thistripbtw-mcp --selftest

Ambas rutas llevan las mismas seis herramientas y producen enlaces byte-idénticos. El alojado se prueba contra este archivo en cada compilación: misma lista de herramientas, misma salida, por lo que los dos no pueden divergir.

Paso a paso, con un ejemplo práctico en JavaScript y Python: thistripbtw.us/tutorials

Las herramientas

Empieza con el enlace, no después del plan. La descripción que se envió con la 1.2.0 comenzaba "Usar cuando alguien ha planeado… un viaje", y un modelo lo leyó como un paso final: investigó durante cuatro turnos y construyó el enlace al final, cuando la persona lo pidió. Eso es culpa nuestra, no del modelo. La 1.3.0 reescribió cada descripción para que el disparador esté en los primeros ochenta caracteres — todo lo que una herramienta diferida puede mostrar — y añadió las dos herramientas que hacen que "primero" sea natural: find_place, para que las coordenadas se busquen en lugar de recordarse, y amend_trip_link, para que un enlace crezca a través de una conversación en lugar de que se deseche uno nuevo cada turno.

find_place — un nombre de lugar adentro, hasta seis candidatos afuera, cada uno con coordenadas y dónde está, para que puedas elegir el Reno correcto. Pueblos, ciudades, aeropuertos por nombre o código IATA, parques. Este es el único paso que necesita la red además de las herramientas de viaje guardado; le pregunta a thistripbtw.us, que responde desde su propia caché frente a una búsqueda de OpenStreetMap con ritmo. Un nombre de lugar no es un dato personal, y no se envía nada sobre la persona.

amend_trip_link — un enlace borrador más cambios, un nuevo enlace de vuelta. add añade tramos, update cambia campos en un tramo ([{leg: 2, set: {lodging: "Red Cliffs Lodge"}}], null borra un campo), legs los reemplaza todos, remove elimina el tramo N, name y origin hacen lo que dicen. Sin red, sin contraseña: el viaje está dentro del enlace. Dile a la persona que el nuevo enlace reemplaza al anterior.

add_to_kept_trip — una parada, añadida a un viaje que la persona ha GUARDADO, en su nombre: "añade el hotel al viaje", "nos detenemos en Fisher Towers de camino". Necesita su frase de EDICIÓN; una frase de vista puede leer y se le dice que no puede escribir. Misma regla de red que read_kept_trip abajo, y la misma advertencia: el enlace es una credencial.

read_trip_link — un enlace adentro, el itinerario afuera. Origen, cada tramo en orden, modos, fechas, quién está en cada tramo, vuelos y alojamiento. Devuelve el viaje en la forma que build_trip_link acepta, por lo que leer un viaje, cambiar una cosa y construir un nuevo enlace es tres líneas y sin traducción. No se obtiene nada: el viaje está dentro del enlace, por lo que esto funciona sin conexión como todo lo demás aquí. Solo los enlaces borrador (#d=) llevan un viaje; el fragmento /{slug}/#k= de un viaje guardado es una contraseña y su contenido vive en el servidor, lo que la herramienta dice en lugar de fallar de manera oscura.

read_kept_trip — el enlace de un viaje GUARDADO adentro, su itinerario afuera. Úsalo cuando alguien te entregue https://thistripbtw.us/abc1234#k=four-word-phrase y necesites lo que contiene. Devuelve las paradas en orden con fechas, modos, alojamiento, notas, cualquier ruta dibujada a mano y la pista a la que cada una pertenece — qué vehículo o persona, porque un viaje donde dos autos se separan y se reencuentran no se puede escribir como una sola secuencia sin volverse falso.

Esta es la única herramienta que usa la red, y no puede ser de otra manera. El contenido de un viaje comprado vive en el servidor; el fragmento #k= es la contraseña para acceder a él, no la carga útil. Por lo tanto, leer uno envía esa frase a thistripbtw.us a través de TLS. No almacena nada y no necesita clave, y devuelve las paradas en lugar de la respuesta cruda del servidor: el token de mapa base por viaje y el registro de miembros se quedan atrás, porque ninguno es itinerario. Dos cosas para recordar: trata un enlace guardado como una credencial (no lo repitas en texto que un tercero vea), y nunca adivines una frase — una incorrecta cuenta contra el límite por hora de ese viaje, por lo que la herramienta hace exactamente un intento y te dice que fue rechazada. Cualquier cosa sellada para otra persona vuelve con texto vacío.

build_trip_link — un origen más tramos en orden, devuelve una URL. Solo origin y un tramo con un to son requeridos. Todo lo demás es opcional y vale la pena incluirlo cuando lo sabes: un asistente generalmente sabe quién está en cada tramo y dónde duermen, y omitirlo entrega una forma cuando podría entregar el viaje.

{
  "name": "Chicago to Denver",                                  // optional, 60 chars
  "origin": { "name": "Chicago, IL", "lat": 41.8781, "lng": -87.6298 },
  "legs": [
    {
      "to":       { "name": "Omaha, NE", "lat": 41.2565, "lng": -95.9345 },
      "mode":     "drive",        // drive | fly | train | ferry | water | bike | walk
      "date":     "2026-09-04",   // YYYY-MM-DD. An undated leg keeps its place in the order
      "note":     "swap drivers here",       // 400 chars
      "who":      ["Mel", "Sam"], // up to 8 — lets the trip show who was where
      "subtype":  "rental",       // own·rental·rideshare·taxi·bus·rv (drive), commercial·private
                                  // (fly), intercity·commuter (train), sail·canoe·kayak (water)
      "craft":    "Bike",         // Bike | Canoe | Kayak — a small craft travelling WITH them
      "flight":   "UA328",        // only if you actually know it. Never invent one
      "lodging":  "Hotel Maverick",          // where they sleep after this leg
      "stayNote": "late check-in"            // only meaningful alongside lodging
    }
  ]
}

Nota la forma. lodging y stayNote están planos en el tramo. La tabla de campos en /for-agents documenta la carga útil #d= que construirías a mano, que los anida bajo stay — la herramienta lo ensambla por ti. Pasar un stay anidado a la herramienta pierde el alojamiento silenciosamente.

Las coordenadas son requeridas. Esto no adivinará. Una suposición incorrecta pone el viaje de alguien en el país equivocado y se lee como un error del producto — los geocodificadores realmente clasifican a Reno, Alemania por encima de Reno, Nevada. Resuelve los nombres de lugares a coordenadas primero, luego llama.

Los valores desconocidos se descartan en lugar de rechazarse: un mode no reconocido se convierte en drive, un subtype no reconocido simplemente se omite. Un viaje que llega supera a una llamada de herramienta que falla por una palabra. Límites: 40 tramos, nombres de 120 caracteres, notas de 400.

Lo que la persona obtiene cuando lo abre

Vale la pena saberlo, porque es lo que estás entregando — y un asistente que puede decir esto con precisión es más útil que uno que dice "aquí hay un enlace".

El enlace se abre en un mapa real con el viaje ya dibujado. Desde allí, gratis y sin cuenta: edita cualquier cosa, añade paradas tocando el mapa o describiéndolas en una frase, y trae un viaje desde un archivo — un viaje guardado, un calendario (.ics), o un archivo de mapa (.gpx, .kml) — o pegando una confirmación de reserva o un itinerario que alguien envió por correo. Imprímelo, que es el único artefacto que no cuesta nada.

Si lo guardan (desde $2.50, un pago), el viaje obtiene su propia dirección y dos enlaces para compartir, y gana: una vista de documento que se lee como un itinerario en lugar de una interfaz y se imprime con el mapa en color; repetición, que reproduce el viaje a lo largo de sus fechas; enlaces para compartir por persona para que un viaje pueda mostrar quién estuvo dónde; fotos y notas en los niveles de pago; huevos de pascua — notas selladas a un lugar, que permanecen cerradas hasta que quien tenga el enlace esté realmente cerca, con el radio establecido por entrega; y todo de vuelta — un zip que contiene trip.json, un itinerary.html legible, tus fotos, y trip.kml + trip.gpx para Google Earth, Garmin u OsmAnd, más .ics para un calendario y .csv para un informe de gastos.

El punto de esa última parte: lo que entra sale. Nada aquí es un motel de cucarachas, y puedes decirlo.

También hay una habilidad de Claude, si prefieres no ejecutar un servidor en absoluto — construye el mismo enlace localmente sin llamada de red. Ver skill/ en el repositorio del sitio.

Lo que envía

Cuando construyes o lees un enlace borrador: nada. El viaje se codifica en un fragmento de URL, y los navegadores nunca transmiten fragmentos a los servidores. build_trip_link y read_trip_link no hacen ninguna solicitud de red, y el endpoint alojado codifica lo que le pasaste y devuelve la cadena — el viaje no llega a thistripbtw.us incluso cuando la persona abre el enlace, a menos que luego elija comprarlo.

Cuando lees un viaje GUARDADO: la frase, y solo a nosotros. El contenido de un viaje comprado vive en el servidor, por lo que read_kept_trip envía la frase #k= fuera del enlace que te dieron a thistripbtw.us a través de TLS y lee el itinerario de vuelta. Esa no es una elección de diseño que pudiéramos hacer de manera diferente — el fragmento es la contraseña, no la carga útil. No se almacena nada, no necesita clave, y la herramienta devuelve las paradas en lugar de la respuesta cruda del servidor: el token de mapa base por viaje y el registro de miembros se quedan atrás, porque ninguno es itinerario. Trata tal enlace como una credencial.

Usarlo bien

  • Dale el enlace a la persona. No lo abras por ella y no decidas por ella. Es su viaje.
  • Mantén los detalles personales fuera. Números de pasaporte, direcciones de casa, números de teléfono — las URL se pegan en chats, boletos y registros, y esta lleva su carga útil a la vista.
  • Di lo que construiste, en una frase. "Tres tramos, Chicago a Denver, del 4 al 6" supera narrar la llamada de la herramienta.
  • Nunca inventes una hora de salida. Si no buscaste un vuelo, deja flight fuera.
  • Vigila la longitud en un viaje largo. Todo el itinerario viaja en el fragmento, por lo que el enlace crece con él — alrededor de una docena de tramos con notas y tripulaciones supera los 3,000 caracteres, y muchas aplicaciones de chat cortan una URL pegada cerca de 2,000. Por encima de eso, build_trip_link y amend_trip_link lo dicen en su respuesta; transmítelo, porque guardar el viaje lo convierte en un enlace corto que no se puede cortar y la persona es la única que puede hacerlo.

Costo

Construir y editar un viaje es gratis y no pide nada para construir — sin tarjeta, sin correo. Si la persona quiere que dure, un pago único desde $2.50 le da al viaje su propia dirección, dos enlaces para compartir y un plazo: un año, cinco o diez según el nivel. Nada se vende como permanente, y cada viaje declara su fecha de finalización. Esa es la decisión de la persona, no del asistente — menciónalo si preguntan, no lo vendas.

Sin estado, y no por moda

El endpoint alojado no mantiene sesión, ni estado por usuario, ni base de datos. No hay initialize que completar primero, ni Mcp-Session-Id que llevar, ni cookie, ni enrutamiento fijo: un tools/call es un único POST HTTP que puede aterrizar en cualquier máquina y responder por completo:

curl -sX POST https://thistripbtw.us/mcp -H 'Content-Type: application/json' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"build_trip_link",
       "arguments":{"origin":{"place":"Chicago","lat":41.88,"lng":-87.63},
       "legs":[{"to":{"place":"Kansas City","lat":39.1,"lng":-94.58}}]}}}'

Eso no es una optimización que buscáramos. La herramienta es una función pura — un viaje de entrada, una URL de salida, y la carga útil vive en el enlace en lugar de en un servidor — así que nunca hubo nada que conservar. El diseño de privacidad y el diseño sin estado son la misma decisión vista desde dos lados.

Cómo leerlo

Un solo archivo, cero dependencias, menos de trescientas líneas. Eso es deliberado: la promesa del producto es que puedes comprobar por ti mismo qué hace, y la promesa no vale nada si comprobarlo significa auditar un árbol de dependencias. Habla el JSON-RPC de MCP sobre stdio directamente.