Skip to main content
Glama

HemmaBo Host Booking Engine

Ownership verified

Server Details

Host-owned vacation-rental direct booking via VRP. Signed offers, 0% commission. Not an OTA.

Status
Healthy
Last Tested
Transport
Streamable HTTP
URL
Repository
HemmaBo-se/hemmabo-mcp-server
GitHub Stars
2
Server Listing
HemmaBo

Glama MCP Gateway

Connect through Glama MCP Gateway for full control over tool access and complete visibility into every call.

MCP client
Glama
MCP server

Full call logging

Every tool call is logged with complete inputs and outputs, so you can debug issues and audit what your agents are doing.

Tool access control

Enable or disable individual tools per connector, so you decide what your agents can and cannot do.

Managed credentials

Glama handles OAuth flows, token storage, and automatic rotation, so credentials never expire on your clients.

Usage analytics

See which tools your agents call, how often, and when, so you can understand usage patterns and catch anomalies.

100% free. Your data is private.
Tool DescriptionsA

Average 4.8/5 across 13 of 13 tools scored.

Server CoherenceA
Disambiguation5/5

Each tool targets a distinct action in the booking or host lifecycle. The booking tools are clearly separated by purpose (quote vs negotiate vs checkout vs create vs status vs cancel vs reschedule), and search/verification tools have explicit boundaries with cross-references.

Naming Consistency3/5

Most tools follow the hemmabo_<domain>_<verb> pattern, but get_verified_stay_offer and verify_vacation_rental_node break the convention with a standalone verb_noun style. Within groups naming is consistent, but overall mixing of hemmabo_ prefix and bare verbs creates inconsistency.

Tool Count5/5

13 tools is well-scoped for a booking engine covering search, verification, booking lifecycle, and host onboarding. Each tool has a clear purpose and the count is within the ideal range.

Completeness4/5

The booking lifecycle is well covered: search, availability, quote, negotiate, create, checkout, status, cancel, reschedule, plus VRP verification and host onboarding. A minor gap is the lack of a booking listing/search tool, but the core workflows are complete.

Available Tools

13 tools
get_verified_stay_offerA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
domainYesHost-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.
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

ParametersJSON Schema
NameRequiredDescription
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.
Behavior5/5

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

Even though annotations already declare readOnlyHint=true and destructiveHint=false, the description adds critical behavioral boundaries: 'must not lock a quote, create a booking, collect guest details, or start checkout.' It also reveals verification internals (Ed25519 JWS, JWKS) and the non-obvious fact that night count drives pricing rather than actual dates. No contradiction with annotations.

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

Conciseness5/5

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

The description is long but every sentence earns its place. It is front-loaded with purpose, then usage order, then behavioral rules, then parameter semantics. The language parameter explanation is verbose, but it prevents a subtle and costly misuse (rendering locale mismatch), so it is justified.

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?

For a tool with 5 parameters, an output schema, and complex preconditions, the description covers all necessary context: prerequisites (search or verification), postconditions (signed offer), side-effect boundaries, fallback paths, and parameter interactions. The output schema exists, so return-value documentation is not needed, but the description does not neglect it.

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?

Schema coverage is 100%, so baseline is 3, but the description adds substantial meaning: parameters 'work as a set,' checkIn/checkOut must be strictly ordered, the night count (not the raw dates) re-prices the offer, and language is purely a formatting concern that never affects price. These are cross-parameter semantics not present in the individual schema descriptions.

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 description opens with a specific verb+resource combination: 'Fetch, verify, and render a live host-domain signed VRP stay offer.' This clearly distinguishes it from sibling tools like hemmabo_booking_create or hemmabo_search_properties, and the explicit mention of 'live host-domain signed' adds unique scope.

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 temporal guidance: call after hemmabo_search_properties or verify_vacation_rental_node, and before quoting/booking. It also names alternatives (hemmabo_booking_negotiate/hemmabo_booking_checkout) and specifies exactly when to fall back (only when no signed offer, after explicit user confirmation). This is exemplary when-to-use vs. when-not-to-use guidance.

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

hemmabo_booking_cancelA
DestructiveIdempotent
Inspect

Cancel a confirmed booking and process the Stripe refund per host cancellation policy. Use when the guest explicitly requests cancellation — if the guest wants new dates instead of ending the stay, use hemmabo_booking_reschedule instead. Do not use for pending/unpaid bookings — those expire automatically. To preview the applicable policy first, read cancellationPolicy from hemmabo_booking_status. Requires Authorization: Bearer token (MCP_API_KEY or OAuth). Destructive and idempotent: cancelling an already-cancelled booking returns the same status. Rate-limited per token. reservationId must be the booking UUID from hemmabo_booking_checkout or hemmabo_booking_create — not a propertyId; reason is optional free text forwarded to the host.

ParametersJSON Schema
NameRequiredDescriptionDefault
reasonNoHuman-readable cancellation reason for the host (e.g. 'Travel plans changed', 'Flight cancelled'). Optional; omit when the guest did not give a reason.
guestTokenYesPer-booking secret returned by hemmabo_booking_create / hemmabo_booking_checkout (the booking's guest_token, a UUID). Required to view or modify this specific booking — a valid Bearer token alone is NOT sufficient, because it authenticates the caller but grants no authority over any particular booking. Present the exact guestToken you received when the booking was created; without the matching value the call is refused. Never a propertyId or reservationId.
reservationIdYesBooking or reservation UUID from hemmabo_booking_checkout or hemmabo_booking_create (e.g. '7c9e6679-7425-40de-944b-e07fc1f90ae7'). Required to look up, cancel, or reschedule the same booking record.

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoPresent only when isError=true.
refundNoRefund payload returned by cancel-booking edge function, when present.
statusYesFinal booking status after cancellation.
reservationIdYes
Behavior4/5

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

Annotations already declare `destructiveHint` and `idempotentHint`. The description adds important context: it processes a Stripe refund, requires a guest token (Bearer alone is insufficient), elaborates on idempotency (cancelling already-cancelled booking returns same status), and mentions rate limiting. Minor gap: doesn't describe what the response looks like, but output schema exists.

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

Conciseness5/5

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

Every sentence adds unique value—purpose, usage rules, behavioral notes, parameter clarifications—without redundancy. Front-loaded with the core action, then provides guidance and constraints efficiently. No filler.

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?

For a destructive tool with 3 params, output schema present, and informative annotations, the description covers all critical aspects: purpose, prerequisites (guestToken), caveats (pending bookings expire automatically, idempotency), auth requirements, and cross-references to related tools. Leaves no ambiguity.

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

Parameters4/5

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

Schema coverage is 100%. The description goes beyond the schema by clarifying the relationship between `guestToken` and `Bearer token` (guestToken is mandatory and distinct), and explains that `reservationId` must be the booking UUID from specific sources (not a propertyId). Also adds guidance for `reason` (optional free text for the host).

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 description clearly specifies the verb 'Cancel', the resource 'confirmed booking', and the key action 'process the Stripe refund', fully differentiating this tool from its sibling `hemmabo_booking_reschedule`.

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 explicitly states when to use this tool ('when the guest requests cancellation'), what not to do ('do not use for pending/unpaid bookings'), and explicitly names the alternative (`hemmabo_booking_reschedule`) for changing dates.

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

hemmabo_booking_checkoutAInspect

Create a fallback non-VRP booking and return a host-configured Stripe checkout URL. Use only after explicit user confirmation when no signed VRP direct_booking_url is available. When get_verified_stay_offer returns a signed direct_booking_url, route the guest there instead; use hemmabo_booking_create instead when the deployment wants a pending booking recorded without collecting payment yet. Requires Authorization: Bearer token (MCP_API_KEY or OAuth). Creates a pending booking and Stripe session server-side; not idempotent — check hemmabo_booking_status before retrying. Rate-limited per token. Pass quoteId to honor a price locked by hemmabo_booking_negotiate for the same propertyId/dates/guests, or omit it to price fresh at checkout; paymentMode picks the Stripe flow, channel picks the pricing channel, and guestName/guestEmail identify the guest.

ParametersJSON Schema
NameRequiredDescriptionDefault
guestsYesTotal number of guests as integer >= 1 (e.g. 4).
channelNoPricing channel selector. 'federation' (default for agent flows): direct host-source total. 'public': standard website rate without agent channel pricing. Omit to use federation.
checkInYesArrival date in ISO 8601 calendar format YYYY-MM-DD (e.g. '2026-07-15'). Must be today or later in the property's timezone. Must be strictly before checkOut; together they define the stay length used for pricing and availability.
quoteIdNoQuote ID string from hemmabo_booking_negotiate (e.g. 'q_abc123'). Optional — omit to calculate a fresh host-source price at checkout. Provide when the guest locked a price within the 15-minute quote window.
checkOutYesDeparture date in ISO 8601 calendar format YYYY-MM-DD (e.g. '2026-07-22'). Must be strictly after checkIn on the same calendar. The guest does not stay the departure night.
guestNameYesPrimary guest full name as plain text (e.g. 'Anna Svensson'). Stored on the booking for host confirmation; use the name the guest provided.
guestEmailYesPrimary guest email in RFC 5322 format (e.g. 'anna@example.com'). Used for booking confirmation and host contact; must be deliverable.
guestPhoneNoPrimary guest phone in E.164 format with country code (e.g. '+46701234567'). Optional; omit when unknown. Recommended for check-in coordination.
propertyIdYesStable property UUID from hemmabo_search_properties (e.g. '550e8400-e29b-41d4-a716-446655440000'). Pass the exact UUID string — never a property name, host domain, or booking URL.
paymentModeNoStripe payment flow. 'checkout_session' (default): returns a browser redirect URL. 'payment_intent': returns client_secret for embedded/agentic payment integrations. Omit to use checkout_session.

Output Schema

ParametersJSON Schema
NameRequiredDescription
mppNoPresent when paymentMode='payment_intent'.
errorNoPresent only when isError=true.
guestsNo
nightsNo
statusNoBooking status (typically 'pending' until payment succeeds).
checkInNo
checkOutNo
currencyYes
createdAtNo
guestTokenNoPer-booking secret (guest_token) for this booking. Present it back as guestToken on hemmabo_booking_status / hemmabo_booking_cancel / hemmabo_booking_reschedule to view or modify this booking; a Bearer token alone is not sufficient. Store it securely and do not show it to the guest.
paymentUrlNoStripe Checkout redirect URL.
propertyIdNo
totalPriceYesFinal total charged (or to be charged), in minor currency units.
payment_modesNoSupported payment modes.
reservationIdYesBooking UUID. Use for subsequent status/cancel/reschedule calls.
Behavior5/5

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

The description adds substantial behavioral context beyond annotations: it creates a pending booking and Stripe session server-side, is not idempotent (recommending checking hemmabo_booking_status before retrying), is rate-limited per token, and requires Authorization. These disclosures align with the annotations (idempotentHint=false, readOnlyHint=false) and provide actionable safety guidance.

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 every sentence carries information: purpose, use conditions, alternatives, auth, idempotency, rate limiting, and parameter semantics. It is front-loaded with the core action and is appropriately sized for a tool with 10 parameters, though it is slightly long and could benefit from structural breaks.

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 tool's complexity (10 parameters, 6 required), the description covers purpose, usage boundaries, authentication, side effects, rate limits, and key parameter relationships. An output schema exists, so return values do not need explanation. The description is complete enough for an agent to decide when and how to invoke it safely.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3. The description adds meaningful cross-parameter semantics for quoteId (honor locked price vs fresh pricing), paymentMode, channel, and guest identity, going beyond the schema's individual descriptions. However, many parameters (propertyId, checkIn/out, guests) already have rich schema descriptions and gain little from the description.

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 description opens with a specific verb+resource: 'Create a fallback non-VRP booking and return a host-configured Stripe checkout URL.' It clearly distinguishes this from siblings by positioning it as the fallback when no signed VRP direct_booking_url exists, and it names hemmabo_booking_create and get_verified_stay_offer as alternatives.

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?

Explicit guidance is provided: use only after explicit user confirmation when no signed direct_booking_url is available, route to get_verified_stay_offer when a signed URL exists, and use hemmabo_booking_create for pending bookings without payment. This gives clear when-to-use and when-not-to-use conditions with named alternative tools.

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

hemmabo_booking_createAInspect

Create a pending direct booking without online payment for configured non-VRP fallback deployments. Use only after explicit user confirmation, with a propertyId from search, and only when no signed VRP direct_booking_url is available. For signed VRP offers, route to the signed host-domain URL instead. Requires Authorization: Bearer token (MCP_API_KEY or OAuth). Writes a pending booking server-side; not idempotent — check hemmabo_booking_status before retrying on timeout. Rate-limited per token. The booking is identified by propertyId + the checkIn/checkOut range + guests; guestName and guestEmail are required for host confirmation, while guestPhone is optional for check-in coordination.

ParametersJSON Schema
NameRequiredDescriptionDefault
guestsYesTotal guest count as a positive integer (e.g. 2, 4, 6). Used for capacity filtering and staircase pricing tiers. Properties with maxGuests below this value are excluded from search results.
checkInYesArrival date in ISO 8601 calendar format YYYY-MM-DD (e.g. '2026-07-15'). Must be today or later in the property's timezone. Must be strictly before checkOut; together they define the stay length used for pricing and availability.
checkOutYesDeparture date in ISO 8601 calendar format YYYY-MM-DD (e.g. '2026-07-22'). Must be strictly after checkIn on the same calendar. The guest does not stay the departure night.
guestNameYesPrimary guest full name as plain text (e.g. 'Anna Svensson'). Stored on the booking for host confirmation; use the name the guest provided.
guestEmailYesPrimary guest email in RFC 5322 format (e.g. 'anna@example.com'). Used for booking confirmation and host contact; must be deliverable.
guestPhoneNoPrimary guest phone in E.164 format with country code (e.g. '+46701234567'). Optional; omit when unknown. Recommended for check-in coordination.
propertyIdYesStable property UUID from hemmabo_search_properties (e.g. '550e8400-e29b-41d4-a716-446655440000'). Pass the exact UUID string — never a property name, host domain, or booking URL.

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoPresent only when isError=true.
guestsNo
nightsNo
statusYesHost-node booking status. 'completed' is a protocol compatibility output only, not a status this tool writes.
checkInNo
checkOutNo
currencyNo
bookingIdYesPersistent booking UUID. Use for status/cancel/reschedule.
createdAtNo
priceTypeNoPricing mode used (federation/gap_night/package_*).
guestTokenNoPer-booking secret (guest_token) for this booking. Present it back as guestToken on hemmabo_booking_status / hemmabo_booking_cancel / hemmabo_booking_reschedule to view or modify this booking; a Bearer token alone is not sufficient. Store it securely and do not show it to the guest.
propertyIdNo
totalPriceNoFinal price written to the booking.
channel_mirrorNoOutbound channel-manager mirror heartbeat for the host's mapped external channel (status: current|stale|partial|error|not_connected). Informational only — it never affects availability or this booking; the host node is the source of truth.
packageAppliedNo
calendar_freshnessNoIncoming OTA calendar-sync freshness at booking time. The same object is embedded in the error payload when a stale calendar blocks the call — declared here so agents can treat it as a first-class field in both outcomes.
gapDiscountPercentNo
federationDiscountPercentNo
Behavior5/5

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

The description goes well beyond annotations by stating it is not idempotent, warns about rate limiting, mentions cancellation semantics ('check hemmabo_booking_status before retrying on timeout'), and details side effects ('Writes a pending booking server-side'). The annotations are consistent with these behaviors.

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

Conciseness5/5

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

The description is a single paragraph with no wasted sentences, front-loaded with the core action and conditions. Every sentence adds unique value, covering usage, prerequisites, safety, and parameter roles efficiently.

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 tool's complexity (7 parameters, output schema present), the description completely covers when to use, how to prepare, behavioral traits, and warnings about non-idempotency and rate limits. The presence of output schema means return values need not be documented, and the description handles all other aspects.

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?

With 100% schema description coverage, the schema already documents all parameters thoroughly. The description adds high-level context like 'guestName and guestEmail are required for host confirmation' and clarifies the role of 'propertyId' as coming from search, which is not in the schema.

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 description clearly states the verb 'Create' and the resource 'pending direct booking', specifying it is 'without online payment for configured non-VRP fallback deployments'. This distinctively separates it from sibling tools like 'get_verified_stay_offer' or 'hemmabo_booking_negotiate'.

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 explicitly states when to use this tool ('after explicit user confirmation, with a propertyId from search, and only when no signed VRP direct_booking_url is available'), when not to use it ('For signed VRP offers, route to the signed host-domain URL instead'), and provides clear context for decision-making.

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

hemmabo_booking_negotiateAInspect

PRICE LOCK, not negotiation: the host's price is fixed — this tool never bargains, discounts, or alters it; it only freezes the current host-source price for 15 minutes so it cannot change during checkout. It refuses to lock dates the property's calendar cannot deliver and returns alternative bookable windows instead. Create a binding price quote that locks the price for 15 minutes for configured non-VRP fallback checkout deployments. Use only when no signed direct_booking_url is available and the user explicitly asks to lock a price. Never use this for search, availability, VRP offers, rendering a stay-offer widget, or verified-offer display — use get_verified_stay_offer instead. Requires Authorization: Bearer token (MCP_API_KEY or OAuth). Writes a short-lived quote snapshot server-side. Rate-limited per token. The parameters form one locked combination: the returned quoteId is honored by hemmabo_booking_checkout only for the identical propertyId + checkIn/checkOut + guests, and only until validUntil — changing any of them requires a new quote. Night count and guest count together select the price tier that gets locked, same as hemmabo_booking_quote.

ParametersJSON Schema
NameRequiredDescriptionDefault
guestsYesTotal number of guests as integer >= 1 (e.g. 4). Determines which price tier is applied.
checkInYesArrival date in ISO 8601 calendar format YYYY-MM-DD (e.g. '2026-07-15'). Must be today or later in the property's timezone. Must be strictly before checkOut; together they define the stay length used for pricing and availability.
checkOutYesDeparture date in ISO 8601 calendar format YYYY-MM-DD (e.g. '2026-07-22'). Must be strictly after checkIn on the same calendar. The guest does not stay the departure night.
propertyIdYesStable property UUID from hemmabo_search_properties (e.g. '550e8400-e29b-41d4-a716-446655440000'). Pass the exact UUID string — never a property name, host domain, or booking URL.

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoPresent only when isError=true.
guestsNo
nightsNo
checkInNo
quoteIdYesSnapshot ID. Pass to hemmabo_booking_checkout to lock this price.
checkOutNo
currencyNo
gapNightNo
gapTotalNo
breakdownNo
propertyIdNo
validUntilYesQuote expiry (ISO 8601). Typically 15 minutes after creation.
publicTotalNo
packageAppliedNo
federationTotalYes
gapDiscountPercentNo
federationDiscountPercentNo
Behavior5/5

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

Beyond annotations (readOnlyHint=false, etc.), the description reveals important behaviors: it writes a server-side snapshot, is rate-limited per token, refuses impossible dates and returns alternates, and enforces that the quoteId is only valid for an identical parameter combination and until validUntil. These are critical for safe invocation.

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

Conciseness5/5

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

The description is long but every sentence earns its place. The most vital clarification ('PRICE LOCK, not negotiation') is front-loaded, followed by usage, exclusions, and behavioral constraints. Structure is logical and prevents misinterpretation of the tool's name.

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 tool's complexity and the presence of an output schema, the description fully covers purpose, conditions, behavior, auth, rate limits, parameter constraints, and the relation to checkout. Nothing important is missing.

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

Parameters4/5

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

Schema covers all 4 parameters (100%), so baseline is 3. The description adds a critical interaction constraint: 'The parameters form one locked combination' and clarifies that night count and guest count together select the price tier, which adds value beyond individual parameter descriptions.

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 description explicitly states the tool's core function — it locks (freezes) the host's price for 15 minutes, not negotiates. It distinguishes from siblings by naming get_verified_stay_offer as the alternative for verified offers and explicitly listing prohibited use cases (search, availability, VRP offers, etc.).

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?

Provides clear conditions for use: 'only when no signed direct_booking_url is available and the user explicitly asks to lock a price.' Also gives explicit exclusions: 'Never use this for search, availability, VRP offers...' and points to the correct alternative tool (get_verified_stay_offer).

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

hemmabo_booking_quoteA
Read-onlyIdempotent
Inspect

Get a detailed pricing quote for a specific property, dates, and guest count. Use this tool after confirming availability to show the user exact pricing before booking. Do NOT use before checking availability — the quote may be invalid if dates are unavailable. Returns the final host-source total for the booking flow, per-night breakdown, and package pricing context. All prices are integers in the property's local currency (e.g. SEK). The quote is the propertyId priced for the exact checkIn/checkOut range and guests; the night count and party size together select the price tier, so changing any of them re-quotes.

ParametersJSON Schema
NameRequiredDescriptionDefault
guestsYesTotal guest count as a positive integer (e.g. 2, 4, 6). Used for capacity filtering and staircase pricing tiers. Properties with maxGuests below this value are excluded from search results.
checkInYesArrival date in ISO 8601 calendar format YYYY-MM-DD (e.g. '2026-07-15'). Must be today or later in the property's timezone. Must be strictly before checkOut; together they define the stay length used for pricing and availability.
checkOutYesDeparture date in ISO 8601 calendar format YYYY-MM-DD (e.g. '2026-07-22'). Must be strictly after checkIn on the same calendar. The guest does not stay the departure night.
propertyIdYesStable property UUID from hemmabo_search_properties (e.g. '550e8400-e29b-41d4-a716-446655440000'). Pass the exact UUID string — never a property name, host domain, or booking URL.

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoPresent only when isError=true.
guestsNo
nightsNoNumber of nights in the range.
checkInNo
checkOutNo
currencyNoISO 4217 currency code.
gapNightNoTrue when the stay qualifies as a gap fill.
gapTotalNoGap-night adjusted total when applicable; otherwise null.
breakdownNoDetailed pricing breakdown.
propertyIdNo
publicTotalNoWebsite rate total in minor currency units.
packageAppliedNoApplied package, if any.
federationTotalNoLegacy field: direct host-source total. Prefer directBookingTotal in user-facing copy.
directBookingTotalNoPreferred user-facing field: direct host-source total.
gapDiscountPercentNoGap-night discount percentage when applied.
hostSourcePublicTotalNoPreferred user-facing field: public host-source total.
federationDiscountPercentNoLegacy internal field. Do not present this as a guest-facing discount, savings, or comparison.
directBookingDiscountPercentNoLegacy internal field. Do not present this as a guest-facing discount, savings, or comparison.
Behavior5/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true, but the description adds substantial behavioral detail beyond that: return contents (final total, per-night breakdown, package pricing), currency format (integers in local currency), and the sensitivity of pricing to date/guest changes ('changing any of them re-quotes'). It also flags the invalidity caveat when dates are unavailable, which is critical for correct invocation.

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 four sentences, each carrying relevant information: purpose, usage placement, return details, and pricing behavior. It is not overly terse, but every sentence earns its place with no filler or repetition of what annotations already state.

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

Completeness4/5

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

Given the rich annotations (read-only, idempotent) and full schema coverage for all 4 required parameters, the description appropriately covers the key aspects: what the quote returns, how to order it relative to availability checks, and a caveat about invalid quotes. It could ideally mention explicit error conditions, but the output schema and annotations fill most remaining gaps.

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

Parameters4/5

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

Schema coverage is 100% so the baseline is 3. The description adds meaningful parameter interplay by explaining that 'night count and party size together select the price tier' and that the quote is 'for the exact checkIn/checkOut range and guests.' This goes beyond individual parameter descriptions to clarify how the inputs jointly determine pricing.

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 description opens with a specific verb and resource: 'Get a detailed pricing quote for a specific property, dates, and guest count.' This clearly distinguishes it from sibling tools like search, booking creation, and cancellation by focusing on the pre-booking pricing query step.

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

Usage Guidelines4/5

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

Provides explicit when-to-use ('after confirming availability', 'before booking') and when-not-to-use ('Do NOT use before checking availability') guidance. However, it does not name an alternative tool to use instead, leaving the agent to infer from sibling names (e.g., hemmabo_search_availability).

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

hemmabo_booking_rescheduleA
Destructive
Inspect

Reschedule a confirmed or pending booking to new dates with automatic repricing and Stripe charge/refund. Use when the guest wants to change dates on an existing booking — if the guest wants to end the stay entirely rather than move it, use hemmabo_booking_cancel instead. Do not use if cancelled or if a protocol compatibility client reports completed — check hemmabo_booking_status first. Requires Authorization: Bearer token (MCP_API_KEY or OAuth). Destructive write: the original dates are released back to the host calendar and the original price no longer applies — the booking keeps the same reservationId (updated in place, never recreated), and the price difference is charged or refunded via Stripe. Rate-limited per token. Identify the existing booking by reservationId, then give the new stay as newCheckIn/newCheckOut (newCheckIn strictly before newCheckOut); the new night count re-prices the stay exactly like a fresh quote.

ParametersJSON Schema
NameRequiredDescriptionDefault
reasonNoHuman-readable reschedule reason for host records (e.g. 'Flight delayed', 'Extended conference'). Optional; omit when not provided by the guest.
guestTokenYesPer-booking secret returned by hemmabo_booking_create / hemmabo_booking_checkout (the booking's guest_token, a UUID). Required to view or modify this specific booking — a valid Bearer token alone is NOT sufficient, because it authenticates the caller but grants no authority over any particular booking. Present the exact guestToken you received when the booking was created; without the matching value the call is refused. Never a propertyId or reservationId.
newCheckInYesNew arrival date in YYYY-MM-DD format (e.g. '2026-08-01'). Must be today or later. Must be strictly before newCheckOut.
newCheckOutYesNew departure date in YYYY-MM-DD format (e.g. '2026-08-08'). Must be strictly after newCheckIn.
reservationIdYesBooking or reservation UUID from hemmabo_booking_checkout or hemmabo_booking_create (e.g. '7c9e6679-7425-40de-944b-e07fc1f90ae7'). Required to look up, cancel, or reschedule the same booking record.

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoPresent only when isError=true.
reasonNo
statusYesBooking status after reschedule.
pricingNo
newDatesNo
previousDatesNo
reservationIdYes
Behavior5/5

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

Beyond the annotations (destructiveHint: true), the description elaborates on the destructive nature: 'the original dates are released back to the host calendar and the original price no longer applies — the booking keeps the same reservationId (updated in place, never recreated), and the price difference is charged or refunded via Stripe.' It also mentions rate-limiting and authorization requirements, adding value beyond the structured fields.

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 well-structured and front-loaded with the main action, then usage guidance, then behavioral details. Each sentence earns its place, but it is slightly longer than strictly necessary; it could be tightened. Overall efficient and clear.

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 tool's destructive write nature and the existence of an output schema, the description covers all critical aspects: behavior on execution, prerequisite checks, authorization model, parameter relationships, and side effects. It leaves no obvious gaps for an agent to misuse the tool.

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

Parameters4/5

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

All 5 parameters have 100% schema description coverage, so baseline is 3. The description adds extra context by explaining how to use parameters together ('Identify the existing booking by reservationId, then give the new stay as newCheckIn/newCheckOut...'), reinforcing the relationship between parameters. While helpful, it does not add entirely new parameter details beyond schema, hence a 4.

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 description clearly states the tool's purpose: 'Reschedule a confirmed or pending booking to new dates with automatic repricing and Stripe charge/refund.' It uses a specific verb and resource, and explicitly distinguishes itself from the sibling tool hemmabo_booking_cancel by contrasting changing dates versus ending the stay.

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 provides explicit when-to-use guidance ('Use when the guest wants to change dates on an existing booking'), when-not-to-use conditions ('Do not use if cancelled or if a protocol compatibility client reports completed'), and a prerequisite action ('check hemmabo_booking_status first'). It also names the alternative tool (hemmabo_booking_cancel) and explains the booking status check.

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

hemmabo_booking_statusA
Read-onlyIdempotent
Inspect

Retrieve current status and full details of an existing booking by reservationId. Use to confirm checkout/create succeeded or before cancel/reschedule. Do NOT use for property discovery, availability, or pricing — use hemmabo_search_properties, hemmabo_search_availability, or hemmabo_booking_quote for those. Requires Authorization: Bearer token (MCP_API_KEY or OAuth). Read-only against the database — never writes, so it is safe to poll after a checkout timeout — but returns guest PII (name, email). Rate-limited per token. The only input is the reservationId returned by hemmabo_booking_checkout or hemmabo_booking_create — never the propertyId; without a reservationId there is no booking to look up yet.

ParametersJSON Schema
NameRequiredDescriptionDefault
guestTokenYesPer-booking secret returned by hemmabo_booking_create / hemmabo_booking_checkout (the booking's guest_token, a UUID). Required to view or modify this specific booking — a valid Bearer token alone is NOT sufficient, because it authenticates the caller but grants no authority over any particular booking. Present the exact guestToken you received when the booking was created; without the matching value the call is refused. Never a propertyId or reservationId.
reservationIdYesBooking or reservation UUID from hemmabo_booking_checkout or hemmabo_booking_create (e.g. '7c9e6679-7425-40de-944b-e07fc1f90ae7'). Required to look up, cancel, or reschedule the same booking record.

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoPresent only when isError=true.
guestsNoBooked guest count.
statusYesHost-node booking status. 'completed' is a protocol compatibility output only, not the active lifecycle truth.
checkInNoBooked arrival date.
checkOutNoBooked departure date.
currencyNoISO 4217 currency code for the booking total.
createdAtNoBooking creation timestamp.
guestNameNoPrimary guest name stored on the booking.
updatedAtNoLast update timestamp for the booking record.
guestEmailNoPrimary guest email stored on the booking.
propertyIdNoProperty UUID associated with the booking.
totalPriceNoTotal amount in minor currency units.
propertyNameNoDisplay name of the booked property.
reservationIdYesEchoed booking or reservation UUID.
propertyDomainNoHost-owned domain associated with the property.
cancellationPolicyNoHost cancellation-policy details applicable to this booking.
Behavior5/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds valuable behavioral context beyond these: 'Read-only against the database — never writes, so it is safe to poll after a checkout timeout', plus mentions PII in response and rate limits. No contradiction with annotations.

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

Conciseness5/5

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

The description is front-loaded with purpose, then provides usage guidance, behavioral traits, and parameter context in a logical flow. Every sentence adds unique value without redundancy.

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?

An output schema exists, so return values need not be detailed. The description covers all essential aspects: purpose, when to use, behavioral guarantees (read-only, polling safety, PII, rate limits), and parameter semantics. No gaps for a status retrieval tool.

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?

Schema description coverage is 100%, but the description still adds meaningful context: clarifies that reservationId must come from checkout/create (not propertyId), and explains the guestToken's unique role versus the Bearer token. This goes well beyond the schema's field descriptions.

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 description starts with a clear verb+resource combination: 'Retrieve current status and full details of an existing booking by reservationId.' It explicitly distinguishes this retrieval tool from siblings like hemmabo_search_properties and hemmabo_booking_quote, which serve different purposes.

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?

Explicit guidance is given: 'Use to confirm checkout/create succeeded or before cancel/reschedule.' It also states what not to use it for and lists four alternative tools by name. This fully satisfies the when/when-not criteria.

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

hemmabo_host_readiness_checkA
Read-onlyIdempotent
Inspect

Read-only fit check for a vacation-rental host evaluating HemmaBo for their own booking website or booking engine. Use when the user is a host or property owner, not a guest booking a stay — guests searching for a place to stay should use hemmabo_search_properties instead. Returns a fit verdict, what the host gets, the setup inputs to prepare, and a safe onboarding next step. Does not create an account, buy a domain, configure Stripe, store host data, or provision a website. When the host is ready to start, follow up with hemmabo_host_onboarding_link. Every parameter is optional and additive — the more you pass (propertyType, country/region/city, domain, currentChannels, and the wants* booleans), the sharper the fit verdict; with none it returns a generic readiness summary.

ParametersJSON Schema
NameRequiredDescriptionDefault
cityNoCity or municipality (e.g. 'Kävlinge', 'Florence'). Optional; used in onboarding URL prefill when provided.
domainNoHost-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.
regionNoRegion or area (e.g. 'Skåne', 'Toscana', 'Marrakech-Safi'). Optional; narrows onboarding handoff and proof examples.
countryNoCountry where the property operates (e.g. 'Sweden', 'Italy', 'Morocco'). Optional; improves onboarding URL locale and fit assessment.
hasOwnDomainNoTrue if the host already owns a domain or explicitly wants one (e.g. true for 'I have villaakerlyckan.se'). False or omit when still undecided.
propertyNameNoProperty or business display name (e.g. 'Villa Åkerlyckan'). Optional; carried into onboarding URL when provided.
propertyTypeNoProperty category enum. Optional; omit when unknown. 'villa'/'holiday_home' fit best; 'hotel' may indicate a poor HemmaBo fit for large chains.
currentChannelsNoOptional list of channels the host uses today. Omit when unknown. Helps assess migration fit from OTAs to their own booking website.
preferredLanguageNoISO 639-1 language hint for onboarding copy (e.g. 'sv', 'en', 'de', 'fr'). Optional; omit to default to English.
wantsAiAgentBookingNoTrue if the host wants AI agents (ChatGPT, Claude, Cursor) to discover and book via their own official website. False or omit when they only want a guest website.
wantsDirectPaymentsNoTrue if the host wants Stripe Connect payouts direct to their account. False or omit when they expect HemmaBo to be merchant of record (not supported).

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYesTrue when the fit check completed.
productYesHemmaBo product summary, pricing, onboarding URL, and live proof URLs.
next_stepYesSafe handoff action for the host.
readinessYesFit verdict and boundaries for the host's described need.
setup_itemsYesInputs the host should prepare before onboarding.
capabilitiesYesHost-facing capabilities included in HemmaBo.
agent_instructionYesHow an AI agent should describe HemmaBo without overclaiming.
Behavior5/5

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

Explicitly says 'Does not create an account, buy a domain, configure Stripe, store host data, or provision a website' which complements readOnlyHint/idempotentHint/destructiveHint annotations. Also discloses return content (fit verdict, what host gets, setup inputs, safe next step).

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

Conciseness5/5

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

Single paragraph, front-loaded with purpose and audience, each sentence adds information about usage, non-actions, parameter behavior; no fluff or redundancy.

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 11 optional params and an output schema, the description summarizes return values, explains parameter interplay, and provides tool alternatives. It covers all essential context for an agent to invoke correctly.

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

Parameters4/5

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

Schema covers all 11 params (100%). Description adds that 'Every parameter is optional and additive' and explains that more parameters (propertyType, country/region/city, domain, currentChannels, wants* booleans) yield sharper verdict, with none returning generic summary – this goes beyond schema descriptions.

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?

Description states 'Read-only fit check for a vacation-rental host evaluating HemmaBo for their own booking website or booking engine' – specific verb, resource, and audience. It explicitly contrasts with sibling hemmabo_search_properties for guests, distinguishing the two.

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?

States 'Use when the user is a host or property owner, not a guest booking a stay' and names hemmabo_search_properties as alternative for guests. Also directs follow-up to hemmabo_host_onboarding_link when host is ready.

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

hemmabo_search_availabilityA
Read-onlyIdempotent
Inspect

Check whether a specific property is available for the requested dates. Use this tool after the user has selected a property from hemmabo_search_properties and wants to confirm availability before getting a quote. Do NOT use for general browsing — use hemmabo_search_properties instead. Read-only: checking availability never places a hold or reserves dates. Returns available=true/false with conflict details and same-month alternative date windows when unavailable. Use the propertyId from search with the exact checkIn/checkOut range; omit guests to check dates only, or pass it to get host-source totals for that party size in the returned alternative windows.

ParametersJSON Schema
NameRequiredDescriptionDefault
guestsNoOptional guest count (e.g. 4). Omit when only checking date availability without pricing. When provided, alternative date windows in the response include live host-source totals for that guest count.
checkInYesArrival date in ISO 8601 calendar format YYYY-MM-DD (e.g. '2026-07-15'). Must be today or later in the property's timezone. Must be strictly before checkOut; together they define the stay length used for pricing and availability.
checkOutYesDeparture date in ISO 8601 calendar format YYYY-MM-DD (e.g. '2026-07-22'). Must be strictly after checkIn on the same calendar. The guest does not stay the departure night.
propertyIdYesStable property UUID from hemmabo_search_properties (e.g. '550e8400-e29b-41d4-a716-446655440000'). Pass the exact UUID string — never a property name, host domain, or booking URL.

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoPresent only when isError=true.
reasonNoReason when available=false.
checkInNo
checkOutNo
availableYesTrue if the property is bookable for the entire range.
propertyIdNo
channel_mirrorNoOutbound channel-manager mirror heartbeat for the host's mapped external channel (status: current|stale|partial|error|not_connected). Informational only — it never affects `available`; the host node is the source of truth for these dates.
alternativeDatesNoNearby same-month date windows to offer when the requested dates are unavailable.
calendar_freshnessNoIncoming OTA calendar-sync freshness at answer time. The same object is embedded in the error payload when a stale calendar blocks the call — declared here so agents can treat it as a first-class field in both outcomes.
Behavior5/5

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

Discloses critical behavioral details beyond annotations: 'Read-only: checking availability never places a hold or reserves dates.' It also describes the return behavior ('Returns available=true/false with conflict details and same-month alternative date windows when unavailable'), which complements the readOnlyHint and idempotentHint annotations without contradiction.

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 front-loaded with the purpose and covers all necessary aspects without extraneous text. It is a bit longer than minimal but every sentence contributes useful guidance, making it well-structured and efficient.

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?

With an output schema present, the description need not explain return fields. It covers usage timing, exclusions, safety, and parameter nuances, making it complete for an AI agent to select and invoke correctly.

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

Parameters4/5

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

The schema already provides 100% coverage with detailed parameter descriptions, so baseline is 3. The description adds meaningful semantics by explaining how to use 'guests' ('omit guests to check dates only, or pass it to get host-source totals') and linking 'propertyId' to its source ('from search'), elevating the score above baseline.

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 description clearly states the tool's function: 'Check whether a specific property is available for the requested dates.' It distinguishes from sibling tools by explicitly directing general browsing to hemmabo_search_properties, making its scope unique and unambiguous.

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?

Provides explicit usage context: 'Use this tool after the user has selected a property from hemmabo_search_properties and wants to confirm availability before getting a quote.' It also gives a direct exclusion: 'Do NOT use for general browsing — use hemmabo_search_properties instead.' Additionally, it specifies parameter usage ('Use the propertyId from search with the exact checkIn/checkOut range; omit guests...').

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

hemmabo_search_propertiesA
Read-onlyIdempotent
Inspect

Search available vacation rental properties by location and travel dates. Use when the user wants to find or browse places to stay. Discovery only — call get_verified_stay_offer with the host domain and same dates before the final answer so the client can render the verified stay offer widget; never quote a final price or booking link from search alone. Do NOT use when the user already has a propertyId or host domain. Returns propertyId, host domain, live availability, host-source pricing, and capacity. Parameters combine as one filter: give at least one of region or country to scope location, plus guests and the checkIn/checkOut range (checkIn strictly before checkOut) — results drop any property below the guest capacity or unavailable for that exact range.

ParametersJSON Schema
NameRequiredDescriptionDefault
guestsYesTotal guest count as a positive integer (e.g. 2, 4, 6). Used for capacity filtering and staircase pricing tiers. Properties with maxGuests below this value are excluded from search results.
regionNoRegion, area, or destination to search within (e.g. 'Skåne', 'Kävlinge', 'Toscana', 'Bavaria'). Partial case-insensitive match. Provide at least one of region or country; omit only when country alone is sufficient.
checkInYesArrival date in ISO 8601 calendar format YYYY-MM-DD (e.g. '2026-07-15'). Must be today or later in the property's timezone. Must be strictly before checkOut; together they define the stay length used for pricing and availability.
countryNoCountry name to filter by (e.g. 'Sweden', 'Italy', 'Morocco'). Partial case-insensitive match. Provide at least one of region or country; omit when region already narrows the destination.
checkOutYesDeparture date in ISO 8601 calendar format YYYY-MM-DD (e.g. '2026-07-22'). Must be strictly after checkIn on the same calendar. The guest does not stay the departure night.

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoPresent only when isError=true.
guestsNoEchoed guest count.
checkInNoEchoed check-in date (YYYY-MM-DD).
checkOutNoEchoed check-out date (YYYY-MM-DD).
propertiesNoAvailable properties matching the search criteria, with live host-source pricing.
Behavior5/5

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

Beyond annotations, description discloses that results drop properties below guest capacity or unavailable for exact range, and warns never to quote final price from search alone. It also specifies return fields and the 'combine as one filter' behavior.

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

Conciseness5/5

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

Four dense sentences, front-loaded with purpose, then usage, exclusions, return info, and filter behavior. No filler.

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?

With output schema present, description covers discovery workflow, exclusions, parameter combination, and result filtering. It provides necessary context for safe invocation.

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

Parameters4/5

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

Schema covers 100% of parameters with descriptions. Description adds the 'combine as one filter' semantics and reiterates the checkIn/checkOut ordering, complementing schema without redundancy.

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?

Description states 'Search available vacation rental properties by location and travel dates' with a specific verb and resource. It distinguishes from sibling get_verified_stay_offer by labeling itself 'Discovery only' and noting not to use when propertyId/host domain is known.

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?

Explicitly says 'Use when the user wants to find or browse places to stay' and 'Do NOT use when the user already has a propertyId or host domain.' Also directs to call get_verified_stay_offer after search, providing clear alternative.

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

verify_vacation_rental_nodeA
Read-onlyIdempotent
Inspect

Verify that a vacation-rental host domain is a valid Vacation Rental Protocol (VRP) node before trusting it. Reads the domain's .well-known/vacation-rental.json and JWKS. Read-only trust check: no availability, pricing, booking, or payment — do NOT use it to answer those questions. Use when a host domain arrives from outside search (user-typed or third-party); domains returned by hemmabo_search_properties can go straight to get_verified_stay_offer. On success, call get_verified_stay_offer with the same domain and stay dates. The single input is the host domain as a bare hostname (no scheme or path); verification reads that domain's own .well-known and JWKS, so the result is only as trustworthy as the exact domain you pass.

ParametersJSON Schema
NameRequiredDescriptionDefault
domainYesHost-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.

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoPresent when verified=false or the node cannot be checked.
domainYesEchoed canonical host domain that was checked.
signingNoSummary of accepted signing algorithms, key ids, and signing-key checks.
jwks_urlNoHost-domain JWKS URL containing the Ed25519 public keys used to verify signed offers.
protocolNoProtocol identifier discovered on the host domain, typically 'vrp'.
verifiedYesTrue only when discovery, JWKS, signing metadata, and verified-offer endpoint checks pass.
discovery_urlNoThe .well-known vacation-rental discovery URL read from the host domain.
protocol_versionNoVRP version declared by the host discovery document.
verified_stay_offer_urlNoHost-domain endpoint template or URL used to request signed verified stay offers.
Behavior5/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true. The description adds behavioral specifics: it 'Reads the domain's .well-known/vacation-rental.json and JWKS,' explicitly states 'Read-only trust check: no availability, pricing, booking, or payment,' and notes the trust caveat 'the result is only as trustworthy as the exact domain you pass.' This goes 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?

Six sentences, each contributing unique information: purpose, mechanism, exclusions, usage timing, follow-up, and input caveat. No filler or repetition; appropriately dense for a trust-verification tool. A perfect score would require even tighter structure, but this is already quite efficient.

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

Completeness4/5

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

With a full output schema and strong annotations, the description needn't explain return values. It covers purpose, input semantics, behavioral boundaries, alternatives, and success follow-up—sufficient for an agent to select and invoke correctly. Minor omission: failure behavior, but output schema likely covers that.

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

Parameters4/5

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

Schema coverage is 100% for the single domain parameter. The description reinforces the bare-hostname requirement ('no scheme or path') and ties the result's trustworthiness to the exact domain passed, adding semantic nuance beyond the schema's pattern and description. It does not introduce new parameter-level facts, so a 4 is appropriate.

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 description opens with a specific verb ('Verify') and resource ('vacation-rental host domain') and clearly defines the outcome ('is a valid VRP node before trusting it'). It also distinguishes from siblings by stating it's a trust check, not for availability/pricing/booking/payment, and contrasts with get_verified_stay_offer.

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?

Explicitly states when to use: 'Use when a host domain arrives from outside search (user-typed or third-party)' and when not to: 'domains returned by hemmabo_search_properties can go straight to get_verified_stay_offer.' It also provides follow-up guidance: 'On success, call get_verified_stay_offer...' and warns 'do NOT use it to answer those questions.'

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

Discussions

No comments yet. Be the first to start the discussion!

Related MCP Servers

View all MCP Servers

Try in Browser

Your Connectors

Sign in to create a connector for this server.