# Ourway – Camino de Santiago

> Plan, quote & book the Camino de Santiago: routes, stages, live hotels, one package price, FAQ.

- name: travel.ourway/camino-de-santiago
- version: 2.1.1
- connection class: R0 (autonomous)
- trust: 93/100
- quality: 87/100 (good)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/travel.ourway%2Fcamino-de-santiago
- tools: https://api.protogrid.dev/v1/servers/travel.ourway%2Fcamino-de-santiago/tools

**An agent can connect right now, no human step.** Remote endpoint, no authentication, reachable on the last probe.

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "camino-de-santiago": {
      "type": "http",
      "url": "https://mcp.ourway.travel/mcp"
    }
  }
}
```


## Trust

- hygiene: 100
- liveness: 100
- freshness: 85
- provenance: 85
- drivers: +repository +dns-namespace +website +reachable +uptime-100% ~updated-56d-ago
- Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed.

## Quality 87/100 (good)

### protocol: 88 (weight 25)

- pass `protocol.modern`: supports 2026-07-28 (server/discover)
- pass `protocol.stateless`: answers without a session
- pass `protocol.transport`: streamable HTTP
- warn `protocol.list_ttl`: tools/list declares ttlMs 0, so clients re-fetch it on every use

### authorization: n/a (weight 15)

- n/a `auth.prm`, `auth.as_metadata`, `auth.cimd`: no remote uses OAuth
- n/a `auth.secret_in_url`: no templated URL

### tool hygiene: 93 (weight 30)

- pass `tools.descriptions`: every tool has a description
- warn `tools.description_length`: 3 tools have descriptions over 1,024 characters, which crowds the context
- pass `tools.schemas`: every tool has an object input schema
- pass `tools.annotations`: 14 of 14 tools declare readOnlyHint or destructiveHint
- pass `tools.directory_hints`: every tool declares readOnlyHint, destructiveHint, idempotentHint and openWorldHint
- pass `tools.token_cost`: about 6,336 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump

### stability: 75 (weight 15)

- warn `stability.changes`: 10 tool changes in 30 days
- pass `stability.rug_pull`: no tool changed its meaning under the same name

### dependencies: n/a (weight 15)

- n/a `deps.known_vulns`, `deps.mcp_sdk_version`, `deps.resolvable`: no npm or PyPI package

- tools: 14, about 6,336 tokens to load them all
- tool set hash: 7bbb35486ee23c2e544630450fedd351
- tools last changed: 2026-10-19T19:12:12.597Z
- badge: [![protogrid quality](https://protogrid.dev/badge/travel.ourway/camino-de-santiago.svg)](https://protogrid.dev/servers/travel.ourway/camino-de-santiago)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

- 2026-10-19 `camino_transfer_options` changed (description)
  - before: Private transfer options to add to a Camino de Santiago package (e.g. Santiago airport or city → Sarria before the first stage, or back from the last town): one option per vehicle type with enough seats, with distance, duration and how much it ADDS to the package total (`variacion_total_eur`). Town ids come from camino_route_towns. To include one, re-quote with quote_camino_package(traslados=[{ origen_poblacion_id, destino_poblacion_id, fecha, categoria_id}]). / Opciones de traslado privado para añadir al paquete del Camino, con lo que suma cada una al total. Para incluirla, recotiza con `traslados`. (es: opciones_traslado)
  - after: Private transfer options to add to a Camino de Santiago package (e.g. Santiago airport or city → Sarria before the first stage, or back from the last town): one option per vehicle type with enough seats, with distance, duration and how much it ADDS to the package total (`variacion_total_eur`). Town ids come from camino_route_towns. To include one in an already quoted package, call update_camino_package_extras with the full `traslados` list ([{ origen_poblacion_id, destino_poblacion_id, fecha, categoria_id}]); before the first quote, pass it to quote_camino_package(traslados=…). / Opciones de traslado privado para añadir al paquete del Camino, con lo que suma cada una al total. Para incluirla en un paquete ya cotizado, update_camino_package_extras. (es: opciones_traslado)
- 2026-10-19 `camino_extras_catalog` changed (description)
  - before: Official Ourway catalog of pilgrim extras for the Camino de Santiago: pilgrim credential (credencial), travel insurance, luggage / backpack transfer between stages, guided visits and activities. No unit prices (extras are folded into the package total via quote_camino_package(extras_ids=…)). `preseleccionado` marks the defaults (credential + insurance by nationality). Pass the route's `camino_slug` to get only the activities of the towns along that Camino (plus the generic pilgrim extras). The ONLY extras that may be offered. / Extras oficiales del catálogo, sin precio unitario y sin mostrar IDs; con `camino_slug`, solo las actividades de las poblaciones de ese camino. (es: catalogo_extras)
  - after: Official Ourway catalog of pilgrim extras for the Camino de Santiago: pilgrim credential (credencial), travel insurance, luggage / backpack transfer between stages, guided visits and activities. No unit prices (extras are folded into the package total via update_camino_package_extras(extras_ids=…) on a quoted package, or quote_camino_package(extras_ids=…) before quoting). `preseleccionado` marks the defaults (credential + insurance by nationality). Pass the route's `camino_slug` to get only the activities of the towns along that Camino (plus the generic pilgrim extras). The ONLY extras that may be offered. / Extras oficiales del catálogo, sin precio unitario y sin mostrar IDs; con `camino_slug`, solo las actividades de las poblaciones de ese camino. (es: catalogo_extras)
- 2026-10-19 `update_camino_package_extras` added
  - Change the pilgrim extras, private transfers or luggage transfer of an ALREADY QUOTED Camino de Santiago package, keeping the same hotels night by night: no new availability check, answers in a few seconds. Pass the COMPLETE new selection: `extras_ids` (from camino_extras_catalog; omit for the default credential + insurance), `traslados` (from camino_transfer_options; omit or [] for none) and `incluir_mochila`. Returns the same shape as quote_camino_package with the new single `total_paquete_eur` and a NEW `oferta_paquete_firmada` that replaces the previous one. Use it instead of quote_camino_package whenever only extras or transfers change. / Añade o quita extras y traslados del paquete ya cotizado sin volver a cotizar los hoteles. (es: actualizar_extras_paquete)
- 2026-10-19 `camino_hotel_alternatives` changed (description)
  - before: Up to 3 alternative hotels for ONE night of a quoted Camino de Santiago package, each with the change in the package total (`variacion_total_eur`), room, meal plan and distance to the centre. Use it when the client wants a different hotel in a town — do NOT re-quote the whole trip. Then apply the choice with swap_camino_hotel (`alternativa_id`). / Alternativas para una noche a partir de la disponibilidad ya consultada; nunca precios por noche. (es: alternativas_alojamiento)
  - after: Up to 3 alternative hotels for ONE night of a quoted Camino de Santiago package, of ANY accommodation category and as close as possible in price to the current one, each with the change in the package total (`variacion_total_eur`), room, meal plan and distance to the centre. Use it when the client wants a different hotel in a town — do NOT re-quote the whole trip. It checks live availability for that night, so it can find options even when the quote reported `alternativas_disponibles: 0` (takes a few seconds). Then apply the choice with swap_camino_hotel (`alternativa_id`). / Alternativas de cualquier categoría y de precio parecido para una noche; nunca precios por noche. (es: alternativas_alojamiento)
- 2026-10-13 `camino_transfer_options` added
  - Private transfer options to add to a Camino de Santiago package (e.g. Santiago airport or city → Sarria before the first stage, or back from the last town): one option per vehicle type with enough seats, with distance, duration and how much it ADDS to the package total (`variacion_total_eur`). Town ids come from camino_route_towns. To include one, re-quote with quote_camino_package(traslados=[{ origen_poblacion_id, destino_poblacion_id, fecha, categoria_id}]). / Opciones de traslado privado para añadir al paquete del Camino, con lo que suma cada una al total. Para incluirla, recotiza con `traslados`. (es: opciones_traslado)
- 2026-10-13 `camino_extras_catalog` changed (description, inputSchema)
  - before: Official Ourway catalog of pilgrim extras for the Camino de Santiago: pilgrim credential (credencial), travel insurance, luggage / backpack transfer between stages, guided visits and activities. No unit prices (extras are folded into the package total via quote_camino_package(extras_ids=…)). `preseleccionado` marks the defaults (credential + insurance by nationality). The ONLY extras that may be offered. / Extras oficiales del catálogo, sin precio unitario y sin mostrar IDs. (es: catalogo_extras)
  - after: Official Ourway catalog of pilgrim extras for the Camino de Santiago: pilgrim credential (credencial), travel insurance, luggage / backpack transfer between stages, guided visits and activities. No unit prices (extras are folded into the package total via quote_camino_package(extras_ids=…)). `preseleccionado` marks the defaults (credential + insurance by nationality). Pass the route's `camino_slug` to get only the activities of the towns along that Camino (plus the generic pilgrim extras). The ONLY extras that may be offered. / Extras oficiales del catálogo, sin precio unitario y sin mostrar IDs; con `camino_slug`, solo las actividades de las poblaciones de ese camino. (es: catalogo_extras)
- 2026-10-13 `quote_camino_package` changed (description, inputSchema)
  - before: Quote a complete Camino de Santiago trip as ONE all-in package price (hotels night by night with LIVE availability + pilgrim extras) — the source of the official Ourway package price. Use it whenever the user asks how much a Camino costs, wants a quote, or approves an itinerary from plan_camino_itinerary. It auto-selects the best accommodation for each night (Ourway quality filters: verified meal plan, close to the centre, guest rating) and returns a single `total_paquete_eur`. NEVER returns per-hotel, per-night or per-extra prices. `presupuesto` is REQUIRED (per person, whole trip, EUR): sin_preferencia | lt_500 | 500_1000 | 1000_1500 | gt_1500. `meal_plan`: RO | BB | HB | FB. `categoria_alojamiento`: recomendado | hoteles_encanto | casas_rurales | albergues. `extras_ids` from camino_extras_catalog (default: pilgrim credential + insurance; luggage transfer if incluir_mochila=true, one bag per traveller, priced by Ourway as bags × official stages of the Camino covered, so a day that spans two official stages counts two; pass the route's `camino_slug` from plan_camino_itinerary). ALWAYS pass `nacionalidad` (or `residente_espana`): it sets the insurance. `mascotas=true` when travelling with a pet. If a category has no availability one night the best alternative category is chosen (see `avisos`). Keep `oferta_paquete_firmada` verbatim for create_camino_booking_proposal. Usually 20-45 s (live checks hotel by hotel): tell the user it takes a moment. If your client times out, call it again with the SAME parameters: the result is cached and comes back instantly. / Fuente del precio oficial Ourway: un solo importe total del paquete, nunca precios parciales. Sin presupuesto no se cotiza. La mochila se calcula como bultos × etapas oficiales (un día que cubre dos etapas oficiales cuenta dos) y va dentro del total. Si tu cliente corta por timeout, repite la llamada con los mismos parámetros: el resultado está en caché. (es: cotizar_paquete)
  - after: Quote a complete Camino de Santiago trip as ONE all-in package price (hotels night by night with LIVE availability + pilgrim extras) — the source of the official Ourway package price. Use it whenever the user asks how much a Camino costs, wants a quote, or approves an itinerary from plan_camino_itinerary. It auto-selects the best accommodation for each night (Ourway quality filters: verified meal plan, close to the centre, guest rating) and returns a single `total_paquete_eur`. NEVER returns per-hotel, per-night or per-extra prices. `presupuesto` is REQUIRED (per person, whole trip, EUR): sin_preferencia | lt_500 | 500_1000 | 1000_1500 | gt_1500. `meal_plan`: RO | BB | HB | FB. `categoria_alojamiento`: recomendado | hoteles_encanto | casas_rurales | albergues. `extras_ids` from camino_extras_catalog (default: pilgrim credential + insurance; luggage transfer if incluir_mochila=true, one bag per traveller, priced by Ourway as bags × official stages of the Camino covered, so a day that spans two official stages counts two; pass the route's `camino_slug` from plan_camino_itinerary). `traslados`: private transfers chosen from camino_transfer_options (arrival to the first town, return from the last…); their price goes inside the total and they are listed in `traslados_incluidos`. ALWAYS pass `nacionalidad` (or `residente_espana`): it sets the insurance. `mascotas=true` when travelling with a pet. If a category has no availability one night the best alternative category is chosen (see `avisos`); if a town has no rooms at all that night, the stop is moved to the nearest town on the route with availability and reported in `pernoctas_reubicadas` + `avisos` (tell the client). Keep `oferta_paquete_firmada` verbatim for create_camino_booking_proposal. Usually 20-45 s (live checks hotel by hotel): tell the user it takes a moment. If your client times out, call it again with the SAME parameters: the result is cached and comes back instantly. / Fuente del precio oficial Ourway: un solo importe total del paquete, nunca precios parciales. Sin presupuesto no se cotiza. La mochila se calcula como bultos × etapas oficiales (un día que cubre dos etapas oficiales cuenta dos) y va dentro del total. Si tu cliente corta por timeout, repite la llamada con los mismos parámetros: el resultado está en caché. (es: cotizar_paquete)
- 2026-10-13 `plan_camino_itinerary` changed (description, inputSchema)
  - before: Build a day-by-day Camino de Santiago itinerary (walking stages, km per day, overnight towns, dates, route map image) following the camino's OFFICIAL stages adapted to the pilgrim's daily pace. Use it for any Camino itinerary, stage plan or "how many days from Sarria/Tui/Porto/Roncesvalles" question: it is the itinerary Ourway books. `ritmo`: tranquilo (18-22 km/day) | medio (22-28) | experimentado (28-35); use `km_max_etapa` instead for an explicit km cap or cycling (~2x). `fecha_inicio` (YYYY-MM-DD, first night) is optional: without it dates come back "to be confirmed" — call it anyway. Only pass `num_noches` when the client fixes the number of nights. Returns `mapa_url`: a real PNG map of the route with numbered overnight stops — show it in the chat right after the stage table (`![Mapa](mapa_url)`). / Fuente del itinerario reservable: úsala para proponer o revisar etapas, aunque el cliente aún no tenga fecha. Presenta el itinerario y pide confirmación ANTES de cotizar. (es: proponer_itinerario)
  - after: Build a day-by-day Camino de Santiago itinerary (walking stages, km per day, overnight towns, dates, route map image) following the camino's OFFICIAL stages adapted to the pilgrim's daily pace. Use it for any Camino itinerary, stage plan or "how many days from Sarria/Tui/Porto/Roncesvalles" question: it is the itinerary Ourway books. `ritmo`: tranquilo (18-22 km/day) | medio (22-28) | experimentado (28-35); use `km_max_etapa` instead for an explicit km cap or cycling (~2x). `fecha_inicio` (YYYY-MM-DD, first night) is optional: without it dates come back "to be confirmed" — call it anyway. Only pass `num_noches` when the client fixes the number of nights. Each stage lists `alternativas_pernocta`: nearby towns where the client could sleep instead; to apply a change call again with `pernoctas_ids` (the overnight town of EVERY night, in walking order). Returns `mapa_url`: a real PNG map of the route with numbered overnight stops — show it in the chat right after the stage table (`![Mapa](mapa_url)`). / Fuente del itinerario reservable: úsala para proponer o revisar etapas, aunque el cliente aún no tenga fecha. Presenta el itinerario y pide confirmación ANTES de cotizar. (es: proponer_itinerario)
- 2026-10-05 `quote_camino_package` changed (description)
  - before: Quote a complete Camino de Santiago trip as ONE all-in package price (hotels night by night with LIVE availability + pilgrim extras) — the source of the official Ourway package price. Use it whenever the user asks how much a Camino costs, wants a quote, or approves an itinerary from plan_camino_itinerary. It auto-selects the best accommodation for each night (Ourway quality filters: verified meal plan, close to the centre, guest rating) and returns a single `total_paquete_eur`. NEVER returns per-hotel, per-night or per-extra prices. `presupuesto` is REQUIRED (per person, whole trip, EUR): sin_preferencia | lt_500 | 500_1000 | 1000_1500 | gt_1500. `meal_plan`: RO | BB | HB | FB. `categoria_alojamiento`: recomendado | hoteles_encanto | casas_rurales | albergues. `extras_ids` from camino_extras_catalog (default: pilgrim credential + insurance; luggage transfer if incluir_mochila=true, one bag per traveller, priced by Ourway per real stage; pass the route's `camino_slug` from plan_camino_itinerary). ALWAYS pass `nacionalidad` (or `residente_espana`): it sets the insurance. `mascotas=true` when travelling with a pet. If a category has no availability one night the best alternative category is chosen (see `avisos`). Keep `oferta_paquete_firmada` verbatim for create_camino_booking_proposal. Usually 20-45 s (live checks hotel by hotel): tell the user it takes a moment. If your client times out, call it again with the SAME parameters: the result is cached and comes back instantly. / Fuente del precio oficial Ourway: un solo importe total del paquete, nunca precios parciales. Sin presupuesto no se cotiza. Si tu cliente corta por timeout, repite la llamada con los mismos parámetros: el resultado está en caché. (es: cotizar_paquete)
  - after: Quote a complete Camino de Santiago trip as ONE all-in package price (hotels night by night with LIVE availability + pilgrim extras) — the source of the official Ourway package price. Use it whenever the user asks how much a Camino costs, wants a quote, or approves an itinerary from plan_camino_itinerary. It auto-selects the best accommodation for each night (Ourway quality filters: verified meal plan, close to the centre, guest rating) and returns a single `total_paquete_eur`. NEVER returns per-hotel, per-night or per-extra prices. `presupuesto` is REQUIRED (per person, whole trip, EUR): sin_preferencia | lt_500 | 500_1000 | 1000_1500 | gt_1500. `meal_plan`: RO | BB | HB | FB. `categoria_alojamiento`: recomendado | hoteles_encanto | casas_rurales | albergues. `extras_ids` from camino_extras_catalog (default: pilgrim credential + insurance; luggage transfer if incluir_mochila=true, one bag per traveller, priced by Ourway as bags × official stages of the Camino covered, so a day that spans two official stages counts two; pass the route's `camino_slug` from plan_camino_itinerary). ALWAYS pass `nacionalidad` (or `residente_espana`): it sets the insurance. `mascotas=true` when travelling with a pet. If a category has no availability one night the best alternative category is chosen (see `avisos`). Keep `oferta_paquete_firmada` verbatim for create_camino_booking_proposal. Usually 20-45 s (live checks hotel by hotel): tell the user it takes a moment. If your client times out, call it again with the SAME parameters: the result is cached and comes back instantly. / Fuente del precio oficial Ourway: un solo importe total del paquete, nunca precios parciales. Sin presupuesto no se cotiza. La mochila se calcula como bultos × etapas oficiales (un día que cubre dos etapas oficiales cuenta dos) y va dentro del total. Si tu cliente corta por timeout, repite la llamada con los mismos parámetros: el resultado está en caché. (es: cotizar_paquete)
- 2026-09-29 `quote_camino_package` changed (description, inputSchema)
  - before: Quote a complete Camino de Santiago trip as ONE all-in package price (hotels night by night with LIVE availability + pilgrim extras) — the source of the official Ourway package price. Use it whenever the user asks how much a Camino costs, wants a quote, or approves an itinerary from plan_camino_itinerary. It auto-selects the best accommodation for each night (Ourway quality filters: verified meal plan, close to the centre, guest rating) and returns a single `total_paquete_eur`. NEVER returns per-hotel, per-night or per-extra prices. `presupuesto` is REQUIRED (per person, whole trip, EUR): sin_preferencia | lt_500 | 500_1000 | 1000_1500 | gt_1500. `meal_plan`: RO | BB | HB | FB. `categoria_alojamiento`: recomendado | hoteles_encanto | casas_rurales | albergues. `extras_ids` from camino_extras_catalog (default: pilgrim credential + insurance; luggage transfer if incluir_mochila=true). ALWAYS pass `nacionalidad` (or `residente_espana`): it sets the insurance. `mascotas=true` when travelling with a pet. If a category has no availability one night the best alternative category is chosen (see `avisos`). Keep `oferta_paquete_firmada` verbatim for create_camino_booking_proposal. Usually 20-45 s (live checks hotel by hotel): tell the user it takes a moment. If your client times out, call it again with the SAME parameters: the result is cached and comes back instantly. / Fuente del precio oficial Ourway: un solo importe total del paquete, nunca precios parciales. Sin presupuesto no se cotiza. Si tu cliente corta por timeout, repite la llamada con los mismos parámetros: el resultado está en caché. (es: cotizar_paquete)
  - after: Quote a complete Camino de Santiago trip as ONE all-in package price (hotels night by night with LIVE availability + pilgrim extras) — the source of the official Ourway package price. Use it whenever the user asks how much a Camino costs, wants a quote, or approves an itinerary from plan_camino_itinerary. It auto-selects the best accommodation for each night (Ourway quality filters: verified meal plan, close to the centre, guest rating) and returns a single `total_paquete_eur`. NEVER returns per-hotel, per-night or per-extra prices. `presupuesto` is REQUIRED (per person, whole trip, EUR): sin_preferencia | lt_500 | 500_1000 | 1000_1500 | gt_1500. `meal_plan`: RO | BB | HB | FB. `categoria_alojamiento`: recomendado | hoteles_encanto | casas_rurales | albergues. `extras_ids` from camino_extras_catalog (default: pilgrim credential + insurance; luggage transfer if incluir_mochila=true, one bag per traveller, priced by Ourway per real stage; pass the route's `camino_slug` from plan_camino_itinerary). ALWAYS pass `nacionalidad` (or `residente_espana`): it sets the insurance. `mascotas=true` when travelling with a pet. If a category has no availability one night the best alternative category is chosen (see `avisos`). Keep `oferta_paquete_firmada` verbatim for create_camino_booking_proposal. Usually 20-45 s (live checks hotel by hotel): tell the user it takes a moment. If your client times out, call it again with the SAME parameters: the result is cached and comes back instantly. / Fuente del precio oficial Ourway: un solo importe total del paquete, nunca precios parciales. Sin presupuesto no se cotiza. Si tu cliente corta por timeout, repite la llamada con los mismos parámetros: el resultado está en caché. (es: cotizar_paquete)

Full history: https://api.protogrid.dev/v1/servers/travel.ourway%2Fcamino-de-santiago/changes

## Remotes

- https://mcp.ourway.travel/mcp (streamable-http, auth none, reachable true, uptime30d 1)

## Packages

_none_

## Tools (14)

- `adjust_camino_package`: Propose per-night hotel swaps on a quoted Camino de Santiago package
        to reach a goal: cheaper, higher category, closer to the town centre or
        with breakfast. `objetivo`: bajar_precio | subir_categoria |
        mas_centrico | con_desayuno; optional `noche_num` to limit to one
        night. Use it when the client asks to LOWER THE PRICE, UPGRADE, sleep
        MORE CENTRAL or ADD BREAKFAST — do not re-quote. Returns each proposal
        with its change in the total and the total if all are applied; apply
        accepted ones one by one with swap_camino_hotel, chaining the new
        offer. If there are no proposals, offer to re-quote with another
        category/itinerary. (es: ajustar_paquete)
- `camino_de_santiago_info`: Practical, up-to-date answers about the Camino de Santiago from
        Ourway's specialist team — use it for ANY Camino question even when the
        user is not booking: pilgrim credential (credencial), the Compostela
        certificate and the 100 km / 200 km rule, best time of year and
        weather, which route to choose (Camino Francés, Portugués Central or
        Coastal from Porto/Tui, Norte, Primitivo, Inglés from Ferrol, Vía de la
        Plata, Finisterre-Muxía), how many days from Sarria / Tui / Porto /
        Roncesvalles / Saint-Jean-Pied-de-Port / Oviedo, daily distances and
        difficulty, luggage & backpack transfer, what to pack, walking with
        kids or seniors, cycling the Camino, pets, accommodation types
        (albergues, hostales, hotels, casas rurales), budget, how far ahead to
        book, getting to the start and back from Santiago, safety, food
        (pilgrim menu) and etiquette. `question`: free text in any language;
        `idioma`: es | en (auto-detected if omitted). Cheap and instant (no
        availability check). / Respuestas prácticas del equipo Ourway sobre el
        Camino de Santiago: credencial, Compostela, 100 km, mejor época, qué
        ruta elegir, etapas, mochila, niños, bici, mascotas, presupuesto…
        Úsala ante cualquier duda sobre el Camino aunque el usuario no quiera
        reservar. (es: info_camino)
- `camino_extras_catalog`: Official Ourway catalog of pilgrim extras for the Camino de Santiago:
        pilgrim credential (credencial), travel insurance, luggage / backpack
        transfer between stages, guided visits and activities. No unit prices
        (extras are folded into the package total via
        update_camino_package_extras(extras_ids=…) on a quoted package, or
        quote_camino_package(extras_ids=…) before quoting). `preseleccionado` marks the
        defaults (credential + insurance by nationality). Pass the route's
        `camino_slug` to get only the activities of the towns along that
        Camino (plus the generic pilgrim extras). The ONLY extras that
        may be offered. / Extras oficiales del catálogo, sin precio unitario y
        sin mostrar IDs; con `camino_slug`, solo las actividades de las
        poblaciones de ese camino. (es: catalogo_extras)
- `camino_hotel_alternatives`: Up to 3 alternative hotels for ONE night of a quoted Camino de
        Santiago package, of ANY accommodation category and as close as
        possible in price to the current one, each with the change in the
        package total (`variacion_total_eur`), room, meal plan and distance to
        the centre. Use it when the client wants a different hotel in a town —
        do NOT re-quote the whole trip. It checks live availability for that
        night, so it can find options even when the quote reported
        `alternativas_disponibles: 0` (takes a few seconds). Then apply the
        choice with swap_camino_hotel (`alternativa_id`). / Alternativas de
        cualquier categoría y de precio parecido para una noche; nunca
        precios por noche. (es: alternativas_alojamiento)
- `camino_proposal_status`: Check the status of a Camino de Santiago booking proposal created
        through this channel (code PET-123): active / confirmed / expired, plus
        its link and deadline. Use it when the customer comes back asking about
        "my proposal", "my booking" or gives a PET code. / Estado de una
        propuesta creada por este canal. (es: estado_propuesta)
- `camino_route_towns`: Towns along a Camino de Santiago route in trail order (Sarria,
        Portomarín, O Cebreiro, Tui, Porto, Roncesvalles, Ferrol…), with id,
        name, cumulative km and GPS coordinates. Use it to pick the starting
        town (`poblacion_inicio_id` for plan_camino_itinerary), to check where
        the 100 km Compostela threshold falls, and to validate overnight stops.
        / Poblaciones de un camino en orden de trazado con km acumulados y
        coordenadas. Las etapas reservables las construye plan_camino_itinerary.
        (es: poblaciones_ruta)
- `camino_transfer_options`: Private transfer options to add to a Camino de Santiago package
        (e.g. Santiago airport or city → Sarria before the first stage, or back
        from the last town): one option per vehicle type with enough seats,
        with distance, duration and how much it ADDS to the package total
        (`variacion_total_eur`). Town ids come from camino_route_towns. To
        include one in an already quoted package, call
        update_camino_package_extras with the full `traslados` list ([{
        origen_poblacion_id, destino_poblacion_id, fecha, categoria_id}]);
        before the first quote, pass it to quote_camino_package(traslados=…).
        / Opciones de traslado privado para añadir al paquete del Camino, con
        lo que suma cada una al total. Para incluirla en un paquete ya
        cotizado, update_camino_package_extras. (es: opciones_traslado)
- `camino_trip_intake_form`: Intake form contract for a tailor-made Camino de Santiago trip: the
        fields to collect conversationally from the customer BEFORE quoting
        anything (rooms with children's ages, nationality/residence, start date
        and nights, walking or cycling, route and starting town, daily pace,
        accommodation category, meal plan, luggage transfer, pets, budget per
        person, comments). Call it at the start of any planning request.
        / Espejo del formulario 'Camino a medida' de ourway.travel. No llames a
        quote_camino_package sin `presupuesto` ni a
        create_camino_booking_proposal sin los datos de contacto.
        (es: iniciar_peticion_medida)
- `create_camino_booking_proposal`: Create the Ourway booking request for a quoted Camino de Santiago
        package and return the customer's personal proposal link (valid 7
        days) where they review the trip day by day, confirm and pay securely.
        ONLY call it after the customer explicitly approves the itinerary and
        the package total and gives real contact details (full name, email,
        phone, nationality). Accepts no prices: only the signed offer from
        quote_camino_package / swap_camino_hotel. / Crea la petición en Ourway
        y devuelve el enlace de la propuesta (única llamada a la acción).
        (es: crear_propuesta)
- `list_camino_routes`: List the Camino de Santiago routes Ourway sells and can book: Camino
        Francés (French Way), Camino Portugués (Central & Coastal), Camino del
        Norte, Camino Primitivo, Camino Inglés, Vía de la Plata / Sanabrés,
        Finisterre-Muxía and more, with slug, name and total km. Start here for
        any Camino de Santiago trip question ("which Camino should I walk?",
        "routes from Porto / Sarria / Tui"). `tipo`: a_pie (walking) |
        en_bicicleta (cycling) | a_caballo. / Lista los Caminos de Santiago que
        Ourway comercializa: solo estos son reservables. El itinerario reservable
        lo construye plan_camino_itinerary. (es: listar_caminos)
- `plan_camino_itinerary`: Build a day-by-day Camino de Santiago itinerary (walking stages,
        km per day, overnight towns, dates, route map image) following the
        camino's OFFICIAL stages adapted to the pilgrim's daily pace. Use it for
        any Camino itinerary, stage plan or "how many days from
        Sarria/Tui/Porto/Roncesvalles" question: it is the itinerary Ourway books.
        `ritmo`: tranquilo (18-22 km/day) | medio (22-28) | experimentado
        (28-35); use `km_max_etapa` instead for an explicit km cap or cycling
        (~2x). `fecha_inicio` (YYYY-MM-DD, first night) is optional: without it
        dates come back "to be confirmed" — call it anyway. Only pass
        `num_noches` when the client fixes the number of nights. Each stage
        lists `alternativas_pernocta`: nearby towns where the client could
        sleep instead; to apply a change call again with `pernoctas_ids` (the
        overnight town of EVERY night, in walking order). Returns
        `mapa_url`: a real PNG map of the route with numbered overnight stops —
        show it in the chat right after the stage table (`![Mapa](mapa_url)`).
        / Fuente del itinerario reservable: úsala para proponer o revisar
        etapas, aunque el cliente aún no tenga fecha. Presenta el
        itinerario y pide confirmación ANTES de cotizar. (es: proponer_itinerario)
- `quote_camino_package`: Quote a complete Camino de Santiago trip as ONE all-in package price
        (hotels night by night with LIVE availability + pilgrim extras) — the
        source of the official Ourway package price. Use it whenever the user asks how
        much a Camino costs, wants a quote, or approves an itinerary from
        plan_camino_itinerary. It auto-selects the best accommodation for each
        night (Ourway quality filters: verified meal plan, close to the centre,
        guest rating) and returns a single `total_paquete_eur`. NEVER returns
        per-hotel, per-night or per-extra prices. `presupuesto` is REQUIRED
        (per person, whole trip, EUR): sin_preferencia | lt_500 | 500_1000 |
        1000_1500 | gt_1500. `meal_plan`: RO | BB | HB | FB.
        `categoria_alojamiento`: recomendado | hoteles_encanto | casas_rurales
        | albergues. `extras_ids` from camino_extras_catalog (default: pilgrim
        credential + insurance; luggage transfer if incluir_mochila=true, one
        bag per traveller, priced by Ourway as bags × official stages of the
        Camino covered, so a day that spans two official stages counts two;
        pass the route's `camino_slug` from plan_camino_itinerary).
        `traslados`: private transfers chosen from camino_transfer_options
        (arrival to the first town, return from the last…); their price goes
        inside the total and they are listed in `traslados_incluidos`.
        ALWAYS pass `nacionalidad` (or `residente_espana`): it sets the
        insurance. `mascotas=true` when travelling with a pet. If a category
        has no availability one night the best alternative category is chosen
        (see `avisos`); if a town has no rooms at all that night, the stop is
        moved to the nearest town on the route with availability and reported
        in `pernoctas_reubicadas` + `avisos` (tell the client). Keep `oferta_paquete_firmada` verbatim for
        create_camino_booking_proposal. Usually 20-45 s (live checks hotel by
        hotel): tell the user it takes a moment. If your client times out,
        call it again with the SAME parameters: the result is cached and comes
        back instantly. / Fuente del precio oficial Ourway: un solo importe
        total del paquete, nunca precios parciales. Sin presupuesto no se
        cotiza. La mochila se calcula como bultos × etapas oficiales (un día
        que cubre dos etapas oficiales cuenta dos) y va dentro del total. Si
        tu cliente corta por timeout, repite la llamada con los mismos
        parámetros: el resultado está en caché. (es: cotizar_paquete)
- `swap_camino_hotel`: Apply one alternative from camino_hotel_alternatives or
        adjust_camino_package to a quoted Camino de Santiago package and get a
        NEW signed offer (`oferta_paquete_firmada`) with the new package total.
        Always use the most recent offer for create_camino_booking_proposal.
        / Sustituye el hotel de esa noche y devuelve una nueva oferta firmada
        con el nuevo total. (es: cambiar_alojamiento)
- `update_camino_package_extras`: Change the pilgrim extras, private transfers or luggage transfer of
        an ALREADY QUOTED Camino de Santiago package, keeping the same hotels
        night by night: no new availability check, answers in a few seconds.
        Pass the COMPLETE new selection: `extras_ids` (from
        camino_extras_catalog; omit for the default credential + insurance),
        `traslados` (from camino_transfer_options; omit or [] for none) and
        `incluir_mochila`. Returns the same shape as quote_camino_package with
        the new single `total_paquete_eur` and a NEW `oferta_paquete_firmada`
        that replaces the previous one. Use it instead of quote_camino_package
        whenever only extras or transfers change. / Añade o quita extras y
        traslados del paquete ya cotizado sin volver a cotizar los hoteles.
        (es: actualizar_extras_paquete)
