Skip to main content
Glama

get_verified_stay_offer

Read-onlyIdempotent

Fetch, verify, and render a live host-domain signed stay offer for exact dates and guest count, validating the Ed25519 JWS against the domain JWKS to provide a verified direct booking link.

Instructions

Fetch, verify, and render a live host-domain signed VRP stay offer for exact dates and guest count. Verifies Ed25519 JWS against domain JWKS. Call after hemmabo_search_properties returns a host domain, or after verify_vacation_rental_node confirms a domain from outside search, always before quoting final price or a booking link. Read-only: must not lock a quote, create a booking, collect guest details, or start checkout. Route booking only to the signed direct_booking_url; fall back to hemmabo_booking_negotiate/hemmabo_booking_checkout only when this call returns no signed offer, for a configured non-VRP deployment, after explicit user confirmation. The parameters work as a set: pass the same domain, checkIn, checkOut and guests the guest used at search; checkIn must be strictly before checkOut, and the resulting night count — not the dates themselves — drives the signed price and the host capacity check, so changing either date re-prices the offer. Always pass language as the guest's actual conversation language so the rendered widget matches the guest; it never affects the signed price or availability, only formatting.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
domainYesHost-owned domain without protocol or path (e.g. 'villaakerlyckan.se', 'myvilla.it'). Invalid: 'https://...', paths, ports, or booking URLs.
guestsYesTotal guest count as positive integer (e.g. 2, 4). Used by the host node for capacity validation and guest-tier pricing on the signed offer.
checkInYesRequested arrival date in YYYY-MM-DD format (e.g. '2026-11-14'). Must be strictly before checkOut. Use the same dates the guest requested in search.
checkOutYesRequested departure date in YYYY-MM-DD format (e.g. '2026-11-17'). Must be strictly after checkIn. Guest does not stay the departure night.
languageNoThe guest's conversation language, as a BCP-47 tag (e.g. 'en', 'sv', 'de', 'sv-SE') — ALWAYS pass this, matching the language the guest is chatting in, so the rendered widget's labels, dates and currency formatting match the guest instead of falling back to the rendering client's own locale (which can silently disagree with the conversation). Never changes the signed price value or availability — only how it is displayed.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
errorNo
freshNoTrue when the signed offer is still within its validity/freshness window.
domainYesEchoed host domain that issued the signed offer.
guestsNoEchoed requested guest count.
checkInNoEchoed requested arrival date.
checkOutNoEchoed requested departure date.
verifiedYesTrue only when the host-domain offer signature and payload checks pass.
signatureNoEd25519/JWS verification details, including key id and verification status.
widget_mediaNoImages and media hydrated from the verified host discovery document for the ChatGPT widget.
agent_citationNoCitation permission and safe-to-quote status derived from the signed offer.
agent_guardrailsNoRules the agent must follow when presenting or acting on this offer.
payload_matches_offerNoTrue when the signed payload matches the structured offer returned to the agent.
official_offer_summaryNoSmall signed-offer summary for agents to quote without inventing price, availability, discounts, savings, comparisons, or booking details.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changedv4.0.9
    • changedInput schema / properties / domain / description
      Previous value: -"Host-owned domain without protocol or path (e.g. 'villaakerlyckan.se', 'myvilla.it'). Optional; omit when the host has not chosen a domain yet. Invalid: 'https://...', paths, ports, or booking URLs."New value: +"Host-owned domain without protocol or path (e.g. 'villaakerlyckan.se', 'myvilla.it'). Invalid: 'https://...', paths, ports, or booking URLs."
  2. Changed1 schema field changedv0.1.11
    • changedInput schema / properties / language / description
      Previous value: -"Optional BCP-47 language tag for labels and formatting (e.g. 'en', 'sv', 'de', 'sv-SE'). Omit to use host default; does not change price or availability."New value: +"The guest's conversation language, as a BCP-47 tag (e.g. 'en', 'sv', 'de', 'sv-SE') — ALWAYS pass this, matching the language the guest is chatting in, so the rendered widget's labels, dates and currency formatting match the guest instead of falling back to the rendering client's own locale (which can silently disagree with the conversation). Never changes the signed price value or availability — only how it is displayed."
  3. Changed9 schema fields changedv0.1.6
    • removedInput schema / $schema
      Removed value: -"http://json-schema.org/draft-07/schema#"
    • addedInput schema / additionalProperties
      Added value: +false
    • addedInput schema / properties / checkIn
      Added value: +{
      +  "description": "Requested arrival date in YYYY-MM-DD format (e.g. '2026-11-14'). Must be strictly before checkOut. Use the same dates the guest requested in search.",
      +  "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      +  "type": "string"
      +}
    • addedInput schema / properties / checkOut
      Added value: +{
      +  "description": "Requested departure date in YYYY-MM-DD format (e.g. '2026-11-17'). Must be strictly after checkIn. Guest does not stay the departure night.",
      +  "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      +  "type": "string"
      +}
    • removedInput schema / properties / check_in
      Removed value: -{
      -  "description": "Requested arrival date in YYYY-MM-DD format (e.g. '2026-11-14'). Must be strictly before check_out. Use the same dates the guest requested in search.",
      -  "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      -  "type": "string"
      -}
    • removedInput schema / properties / check_out
      Removed value: -{
      -  "description": "Requested departure date in YYYY-MM-DD format (e.g. '2026-11-17'). Must be strictly after check_in. Guest does not stay the departure night.",
      -  "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      -  "type": "string"
      -}
    • removedInput schema / properties / guests / maximum
      Removed value: -9007199254740991
    • changedInput schema / required
      Previous value: -[
      -  "domain",
      -  "check_in",
      -  "check_out",
      -  "guests"
      -]New value: +[
      +  "domain",
      +  "checkIn",
      +  "checkOut",
      +  "guests"
      +]
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "additionalProperties": true,
      +  "properties": {
      +    "agent_citation": {
      +      "additionalProperties": true,
      +      "description": "Citation permission and safe-to-quote status derived from the signed offer.",
      +      "type": "object"
      +    },
      +    "agent_guardrails": {
      +      "additionalProperties": true,
      +      "description": "Rules the agent must follow when presenting or acting on this offer.",
      +      "type": "object"
      +    },
      +    "checkIn": {
      +      "description": "Echoed requested arrival date.",
      +      "type": "string"
      +    },
      +    "checkOut": {
      +      "description": "Echoed requested departure date.",
      +      "type": "string"
      +    },
      +    "domain": {
      +      "description": "Echoed host domain that issued the signed offer.",
      +      "type": "string"
      +    },
      +    "error": {
      +      "type": "string"
      +    },
      +    "fresh": {
      +      "description": "True when the signed offer is still within its validity/freshness window.",
      +      "type": "boolean"
      +    },
      +    "guests": {
      +      "description": "Echoed requested guest count.",
      +      "type": "integer"
      +    },
      +    "official_offer_summary": {
      +      "additionalProperties": true,
      +      "description": "Small signed-offer summary for agents to quote without inventing price, availability, discounts, savings, comparisons, or booking details.",
      +      "type": "object"
      +    },
      +    "payload_matches_offer": {
      +      "description": "True when the signed payload matches the structured offer returned to the agent.",
      +      "type": "boolean"
      +    },
      +    "signature": {
      +      "additionalProperties": true,
      +      "description": "Ed25519/JWS verification details, including key id and verification status.",
      +      "type": "object"
      +    },
      +    "verified": {
      +      "description": "True only when the host-domain offer signature and payload checks pass.",
      +      "type": "boolean"
      +    },
      +    "widget_media": {
      +      "additionalProperties": true,
      +      "description": "Images and media hydrated from the verified host discovery document for the ChatGPT widget.",
      +      "type": "object"
      +    }
      +  },
      +  "required": [
      +    "domain",
      +    "verified"
      +  ],
      +  "type": "object"
      +}
  4. Changed5 schema fields changedv0.1.5
    • changedInput schema / properties / check_in / description
      Previous value: -"Requested arrival date in YYYY-MM-DD format, e.g. 2026-11-14. Must be before check_out."New value: +"Requested arrival date in YYYY-MM-DD format (e.g. '2026-11-14'). Must be strictly before check_out. Use the same dates the guest requested in search."
    • changedInput schema / properties / check_out / description
      Previous value: -"Requested departure date in YYYY-MM-DD format, e.g. 2026-11-15. Must be after check_in."New value: +"Requested departure date in YYYY-MM-DD format (e.g. '2026-11-17'). Must be strictly after check_in. Guest does not stay the departure night."
    • changedInput schema / properties / domain / description
      Previous value: -"Canonical public host-owned vacation-rental domain returned by search or verify_vacation_rental_node, e.g. villaakerlyckan.se. Provide only the domain, not a URL or path."New value: +"Host-owned domain without protocol or path (e.g. 'villaakerlyckan.se', 'myvilla.it'). Optional; omit when the host has not chosen a domain yet. Invalid: 'https://...', paths, ports, or booking URLs."
    • changedInput schema / properties / guests / description
      Previous value: -"Total guest count for the stay as an integer >= 1. The host node uses this for capacity checks and guest-based pricing."New value: +"Total guest count as positive integer (e.g. 2, 4). Used by the host node for capacity validation and guest-tier pricing on the signed offer."
    • changedInput schema / properties / language / description
      Previous value: -"Optional BCP-47/RFC 5646 language hint for labels and formatting, e.g. en, sv, de, or sv-SE."New value: +"Optional BCP-47 language tag for labels and formatting (e.g. 'en', 'sv', 'de', 'sv-SE'). Omit to use host default; does not change price or availability."
  5. Changed5 schema fields changedv0.1.4
    • changedInput schema / properties / check_in / description
      Previous value: -"Arrival date in YYYY-MM-DD format."New value: +"Requested arrival date in YYYY-MM-DD format, e.g. 2026-11-14. Must be before check_out."
    • changedInput schema / properties / check_out / description
      Previous value: -"Departure date in YYYY-MM-DD format. Must be after check_in."New value: +"Requested departure date in YYYY-MM-DD format, e.g. 2026-11-15. Must be after check_in."
    • changedInput schema / properties / domain / description
      Previous value: -"Host-owned vacation rental domain, e.g. villaakerlyckan.se."New value: +"Canonical public host-owned vacation-rental domain returned by search or verify_vacation_rental_node, e.g. villaakerlyckan.se. Provide only the domain, not a URL or path."
    • changedInput schema / properties / guests / description
      Previous value: -"Total number of guests as integer >= 1."New value: +"Total guest count for the stay as an integer >= 1. The host node uses this for capacity checks and guest-based pricing."
    • changedInput schema / properties / language / description
      Previous value: -"Optional preferred response language, e.g. en or sv."New value: +"Optional BCP-47/RFC 5646 language hint for labels and formatting, e.g. en, sv, de, or sv-SE."
  6. Addedv0.1.1

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint annotation, the description spells out concrete side-effect prohibitions: must not lock a quote, create a booking, collect guest details, or start checkout. It also discloses verification behavior (Ed25519 JWS against domain JWKS) and the proper booking path via direct_booking_url, adding meaningful behavioral context beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but front-loaded, starting with purpose and then covering invocation, constraints, parameter-set behavior, and language semantics. It is somewhat long, with minor redundancy against the schema descriptions, but every section earns its place for a tool with this complexity and safety boundary.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the output schema exists, the description does not need to explain return values. It covers when to call, what not to do, how to route bookings, what verification happens, and how parameters interact. No critical selection or invocation information is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Although schema coverage is 100%, the description adds cross-parameter semantics: the parameters must be used as a set matching the guest's search parameters, night count rather than dates drives pricing and capacity checks, and changing either date re-prices the offer. It also clarifies that language is formatting-only and must reflect the guest's actual conversation language, which is not fully inferable from the schema alone.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence identifies a concrete verb-resource pair: 'Fetch, verify, and render a live host-domain signed VRP stay offer for exact dates and guest count.' It distinguishes itself from search, verification, and booking siblings by naming them and positioning this tool as the step before quoting or booking.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit call timing: after hemmabo_search_properties returns a host domain or verify_vacation_rental_node confirms a domain, and always before quoting final price or a booking link. It also names fallback tools and the condition for using them (no signed offer, configured non-VRP deployment, explicit user confirmation), which is exceptionally clear routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.