Quub hotel search and booking

Live hotel prices worldwide, sourced destination guides, prebooking. No key needed for reads.

¿Debería usar esto?

Calidad y seguridad

A
Calidad de la descripción
96%
Integridad del esquema
99%
Calidad de los nombres
95%
Riesgo de envenenamiento
100%
Coincidencia de permisos
100%
Cumplimiento del protocolo
100%

Hallazgos (1)

  • LOWTool 'get_destination_guide' description lacks action verben get_destination_guide

Basado en el análisis automatizado de las definiciones de herramientas y el cumplimiento del protocolo.

Costo de contexto

~2,458Tokens (definiciones de herramientas)
~1.9 KBTamaño de respuesta típico
Impacto moderado en la atención (1.92% del contexto de 128k)

Este es el número aproximado de tokens que se consumen cada vez que las herramientas del servidor se cargan en el contexto de un modelo. Los recuentos más altos reducen la atención disponible para otras tareas.

Instalar

Instalación con un clic

Agrega esto a tu archivo `claude_desktop_config.json`:

{
  "mcpServers": {
    "hotels": {
      "url": "https://quub.rent/mcp"
    }
  }
}

Puntos de conexión remotos

https://quub.rent/mcpstreamable-http

Qué puede hacer

Inventario de herramientas

Herramientas (8)

🟢 Solo lectura🟡 Escritura🔴 Eliminación⚪ Desconocido
🟢search_hotels(place, checkin, checkout, adults, children, ...)

Live hotel prices for a place and dates. place can be a city, region, island, airport or landmark name anywhere in the world, a Quub destination slug (see list_destinations) or a Google place id. Returns up to limit hotels, cheapest first (or best rated): id, name, stars, guest rating (0 to 10) and review count, coordinates, photo, area or distance from the centre, the cheapest room with its total, board, refund rule and free cancellation deadline, its offer_id for prebook, and hotel_url / book_url pages a person can open. Prices are the total for the whole stay for one room, in the currency asked (EUR by default), as Nuitee, the booking partner and merchant of record, charges them, with the taxes Nuitee collects included. Taxes and fees paid at the property (often a city or tourist tax) are listed separately in taxes_at_property and are not in the total.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "place": {
      "type": "string",
      "minLength": 2,
      "description": "Where: \"Lisbon\", \"Kotor, Montenegro\", \"lisbon\" (slug) or a Google place id."
    },
    "checkin": {
      "type": "string",
      "description": "Check-in date, YYYY-MM-DD, today or later."
    },
    "checkout": {
      "type": "string",
      "description": "Check-out date, YYYY-MM-DD, 1 to 30 nights after check-in."
    },
    "adults": {
      "description": "Adults in the one room, 1 to 8. Default 2.",
      "type": "integer",
      "minimum": 1,
      "maximum": 8
    },
    "children": {
      "description": "Ages of children in the room, if any.",
      "maxItems": 4,
      "type": "array",
      "items": {
        "type": "integer",
        "minimum": 0,
        "maximum": 17
      }
    },
    "currency": {
      "description": "ISO 4217 currency for the prices, default EUR.",
      "type": "string",
      "minLength": 3,
      "maxLength": 3
    },
    "nationality": {
      "description": "Guest nationality, ISO 3166 alpha-2 (prices can depend on it). Default from the client's language, else NL.",
      "type": "string",
      "minLength": 2,
      "maxLength": 2
    },
    "limit": {
      "description": "How many hotels, 1 to 60. Default 20.",
      "type": "integer",
      "minimum": 1,
      "maximum": 60
    },
    "sort": {
      "description": "price (cheapest total first, default) or rating.",
      "type": "string",
      "enum": [
        "price",
        "rating"
      ]
    }
  },
  "required": [
    "place",
    "checkin",
    "checkout"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢get_hotel(hotel_id, checkin, checkout, adults, children, ...)

One hotel's details (address, coordinates, stars, rating, photos, description, facilities, check-in and check-out times, parking) and, when dates are given, every bookable room for them: offer_id, room name, board, refundable and the free cancellation deadline, total, per night, taxes included and taxes at the property, and a book_url where a person can fill in the guest form. Prices are the total for the whole stay for one room, in the currency asked (EUR by default), as Nuitee, the booking partner and merchant of record, charges them, with the taxes Nuitee collects included. Taxes and fees paid at the property (often a city or tourist tax) are listed separately in taxes_at_property and are not in the total.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "hotel_id": {
      "type": "string",
      "description": "The hotel id from search_hotels."
    },
    "checkin": {
      "type": "string",
      "description": "Check-in date, YYYY-MM-DD, today or later."
    },
    "checkout": {
      "type": "string",
      "description": "Check-out date, YYYY-MM-DD, 1 to 30 nights after check-in."
    },
    "adults": {
      "description": "Adults in the one room, 1 to 8. Default 2.",
      "type": "integer",
      "minimum": 1,
      "maximum": 8
    },
    "children": {
      "description": "Ages of children in the room, if any.",
      "maxItems": 4,
      "type": "array",
      "items": {
        "type": "integer",
        "minimum": 0,
        "maximum": 17
      }
    },
    "currency": {
      "description": "ISO 4217 currency for the prices, default EUR.",
      "type": "string",
      "minLength": 3,
      "maxLength": 3
    },
    "nationality": {
      "description": "Guest nationality, ISO 3166 alpha-2 (prices can depend on it). Default from the client's language, else NL.",
      "type": "string",
      "minLength": 2,
      "maxLength": 2
    }
  },
  "required": [
    "hotel_id"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢list_destinations(q)

The destinations Quub has a sourced guide for (slug, name, country, one line, last fact check, guide URL). Hotels can be searched anywhere, not only in these. Optional q filters by name or country.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "q": {
      "description": "Filter by name, country or slug, e.g. \"Spain\".",
      "type": "string"
    }
  },
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢get_destination_guide(slug)

The facts of one destination guide as data, each with its source URL: tourist tax, short-term rental rules, guest registration, parking with a rental car, monthly stays, airport, emergency number (key_facts), the areas to stay in (who each suits, how parking and car access work, distances), the articles, the FAQ and every source.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "slug": {
      "type": "string",
      "description": "Destination slug from list_destinations, e.g. \"lisbon\"."
    }
  },
  "required": [
    "slug"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟡prebook(offer_id, hotel_id, checkin, checkout, adults, ...)

Holds one room (an offer_id from search_hotels or get_hotel) with the partner for the named guest and returns booking_id, booking_secret (shown once), the confirmed total (price_changed and previous_total when the hotel repriced it), the cancellation terms and pay_url. Nothing is ever charged by a tool: the person named as guest pays on the pay_url page, Nuitee's payment form, and the booking exists only after that payment. Give the guest pay_url and tell them the total and the cancellation terms; if price_changed is true, say so. The guest's name must match the ID shown at check-in; email and phone with country code are required. Send an idempotency_key to make a retry safe. Needs a Quub API key (this connection has none yet: use request_api_key).

Esquema de entrada

{
  "type": "object",
  "properties": {
    "offer_id": {
      "type": "string",
      "description": "offer_id from search_hotels or get_hotel, for these dates and adults."
    },
    "hotel_id": {
      "type": "string",
      "description": "The hotel id the offer belongs to."
    },
    "checkin": {
      "type": "string",
      "description": "Check-in date, YYYY-MM-DD, today or later."
    },
    "checkout": {
      "type": "string",
      "description": "Check-out date, YYYY-MM-DD, 1 to 30 nights after check-in."
    },
    "adults": {
      "description": "Adults in the one room, 1 to 8. Default 2.",
      "type": "integer",
      "minimum": 1,
      "maximum": 8
    },
    "currency": {
      "description": "ISO 4217 currency for the prices, default EUR.",
      "type": "string",
      "minLength": 3,
      "maxLength": 3
    },
    "nationality": {
      "description": "Guest nationality, ISO 3166 alpha-2 (prices can depend on it). Default from the client's language, else NL.",
      "type": "string",
      "minLength": 2,
      "maxLength": 2
    },
    "guest_first_name": {
      "type": "string",
      "description": "As on the ID shown at check-in."
    },
    "guest_last_name": {
      "type": "string",
      "description": "As on the ID shown at check-in."
    },
    "guest_email": {
      "type": "string",
      "description": "The confirmation goes here; the guest needs it to cancel."
    },
    "guest_phone": {
      "type": "string",
      "description": "With country code, e.g. +31 6 1234 5678."
    },
    "remarks": {
      "description": "Special requests for the hotel, not guaranteed.",
      "type": "string",
      "maxLength": 500
    },
    "expected_total": {
      "description": "The total you saw for this offer, so a change is flagged.",
      "type": "number"
    },
    "idempotency_key": {
      "description": "Any unique string; the same key returns the same booking instead of a second one.",
      "type": "string",
      "maxLength": 200
    }
  },
  "required": [
    "offer_id",
    "hotel_id",
    "checkin",
    "checkout",
    "guest_first_name",
    "guest_last_name",
    "guest_email",
    "guest_phone"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢get_booking(booking_id, guest_email, booking_secret)

Status of a booking this key made: awaiting_payment (with pay_url), confirming, confirmed (confirmation number, hotel reference, voucher_url), outcome_pending, failed or cancelled (refund), plus the total, the cancellation terms and the free cancellation deadline. Needs the guest email or the booking_secret from prebook. Needs a Quub API key (this connection has none yet: use request_api_key).

Esquema de entrada

{
  "type": "object",
  "properties": {
    "booking_id": {
      "type": "string",
      "description": "booking_id from prebook, starts with Q."
    },
    "guest_email": {
      "description": "The guest email used for the booking.",
      "type": "string"
    },
    "booking_secret": {
      "description": "booking_secret from prebook.",
      "type": "string"
    }
  },
  "required": [
    "booking_id"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🔴cancel_booking(booking_id, guest_email)

Cancels a confirmed booking with a refundable rate that this key made. The refund follows the rate terms (free before the deadline, the hotel charge after it) and goes back to the card through Nuitee. Non-refundable rates cannot be cancelled online. Only call this when the guest asked for it. Needs the guest email. Needs a Quub API key (this connection has none yet: use request_api_key).

Esquema de entrada

{
  "type": "object",
  "properties": {
    "booking_id": {
      "type": "string",
      "description": "booking_id from prebook."
    },
    "guest_email": {
      "type": "string",
      "description": "The guest email used for the booking."
    }
  },
  "required": [
    "booking_id",
    "guest_email"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🔴request_api_key(email, label)

Sends an email with a one-time link to a free Quub API key. The owner of the address opens the link, sees the key once and adds it to this connector (Authorization: Bearer quub_..., or ?key=quub_... on the server URL). A key is needed for prebook, get_booking and cancel_booking and raises the search limits. Bookings made with a key carry an 8 percent margin. Only send it to an address the person gave you for this.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "email": {
      "type": "string",
      "description": "Where the link goes."
    },
    "label": {
      "description": "A name for the key, e.g. the agent or app.",
      "type": "string",
      "maxLength": 80
    }
  },
  "required": [
    "email"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Comunidad

Califica este servidor

Evidencia

Observaciones recientes

verificadoversión no registrada8 herramientas