Skip to main content
Glama

Landhaus Apartments Prägant

Server Details

Live availability, rates and offers for Landhaus Apartments Prägant in Bad Kleinkirchheim, Austria.

Ownership verified
Status
Healthy
Uptime
100.0% over 21 days
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL

TDQS

A4.6/5.0

Scored across 10 tools

Disambiguation4/5

Most tools are clearly distinct, but four near-duplicate pairs exist (check_availability/render_availability_card, get_apartment_details/render_apartment_gallery, get_offers/render_offers_card, get_rates/render_rates_card) where the only difference is data versus visual card. Descriptions explicitly guide when to use each variant, but the overlap still creates some risk of misselection or redundant calls.

Naming Consistency5/5

All tool names use lowercase snake_case with a consistent verb_noun pattern (check_*, get_*, render_*). The convention is maintained throughout, with no mixing of styles.

Tool Count5/5

Ten tools is well within the ideal range for this domain. The set covers the core read-only functions (availability, rates, offers, apartment details, region info, booking link) and adds optional render variants, each with a clear role.

Completeness5/5

The surface provides complete read-only lifecycle coverage for a property information and booking-link connector: live availability, monthly price levels, offers, apartment facts, region/house info, and direct booking links. Booking and payment are intentionally external, and no obvious agent-facing operation is missing.

Available Tools

10 tools
check_availabilityCheck AvailabilityA
Read-only
Inspect

Check live availability and exact prices at Landhaus Apartments Prägant for concrete dates and a party.

Use this whenever a guest names dates — it is the main tool. It applies the booking rules (arrival days, minimum stay, closures), recommends the apartment that suits the party best (with reasons, e.g. 2 separate bedrooms for families) and lists the free apartments with the total split into stay, final cleaning and tourist tax, the payment and cancellation terms, the website offers valid for the stay and a pre-filled booking link per apartment. If the wish is not bookable it returns the nearest bookable alternative dates with prices instead; parties larger than one apartment get a combination of apartments. Ask for dates, number of adults and the ages of all children first — never assume them. Not for: prices of a whole month without dates (get_rates), apartment descriptions (get_apartment_details). To show the result visually, call render_availability_card with the same arguments.

Behaviour: read-only, nothing is booked or reserved, no personal data. Live from the property's booking system (typically 1-2 s, identical requests cached 90 s). Invalid input returns isError with the reason. Returns a text summary plus structuredContent (status, apartments with breakdown and booking_url, alternatives, group, terms, offers, inquiry_url).

ParametersJSON Schema
NameRequiredDescriptionDefault
adultsNoTOTAL number of guests aged 18+ in the whole party — also for groups larger than one apartment (the tool plans the apartments). Guests aged 0-17 go into children.
check_inYesArrival date YYYY-MM-DD, e.g. '2027-06-12'
childrenNoAges of ALL children 0-17, comma-separated, e.g. '8,15'; empty if none. Ages change price and tourist tax (charged from age 17).
languageNoAnswer language: 'de' (default) or 'en' — use the language of the conversation. Text and card are always in the same language.de
check_outYesDeparture date YYYY-MM-DD (after check_in, max. 60 nights)

Output Schema

ParametersJSON Schema
NameRequiredDescription
groupNorooms[] (like apartments, plus adults, child_ages), total, booking_url (all apartments in ONE basket on praegant.net, up to 4 apartments; else null -> enquiry), alternative{total, nrs[], rooms[], booking_url}
perksNokaernten_card, greenfee (bool, for this arrival date)
queryNocheck_in, check_out, nights, adults, child_ages, persons
rulesNook, problems[], min_nights, period{from,to,min_nights,arrival_weekdays 0=Mon}
termsNodeposit_pct, deposit_method, deposit_due_days, balance, card_required, tax_pp_night, tax_min_age, free_cancel_until
offersNoWebsite offers valid during the stay: title, url, price_text
ratingNoGoogle rating, review_count (render tool only)
statusNook: apartments free; group: several apartments needed; rule_violation: arrival/departure day or minimum stay not allowed; closed; fully_booked; not_released: beyond published dates
languageNo
apartmentsNoFree apartments, recommended first, then cheapest: nr, match{recommended, reasons[]}, total (EUR, whole stay+party), breakdown{logis, cleaning, tourist_tax, tax_persons, deposit, balance, free_cancel_until} or null, facts{name, m2, bedrooms, max_guests, url, image, photo}, booking_url
inquiry_urlNoPre-filled non-binding enquiry form
unavailableNoFitting apartments already booked: nr, name
alternativesNoNearest bookable stays: check_in, check_out, nights, from_price, cheapest, apartments[], booking_url
next_arrivalNoEarliest bookable arrival on/after the wish for the same stay length and party (fully booked / closed only)
recommendationNoBest fit for this party: nr, reasons[] (two_bedrooms, cheapest, most_space, best_value, terrace, loggia, balcony), needs_two_bedrooms, comfortable

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already cover the read-only/no-destruction profile, but the description adds substantial behavior beyond them: applied booking rules, recommendation logic, output composition, fallback to nearest bookable dates, multi-apartment grouping for large parties, latency (~1-2 s), 90 s caching, and isError on invalid input. These are exactly the traits an agent needs to plan calls and handle edge cases.

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?

Front-loads the core purpose, then organizes detail under 'Not for:' and 'Behaviour:' headers, which is easy to scan. It is fairly long and slightly redundant (return-shape described despite an output schema), but nearly every sentence carries actionable information.

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 a true output schema and full annotation coverage, the description need not restate return values yet still summarizes the text plus structuredContent shape. Combined with usage routing, prerequisites, and behavioral traits, an agent has everything needed to call it correctly and route follow-ups.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all five parameters including the adults-total and children-ages semantics. The description reinforces party/date framing and constraint context (max 60 nights, closures, arrival days) but adds little parameter dictionary detail beyond what the schema provides, so baseline 3 applies.

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?

States a specific verb and resource ('Check live availability and exact prices') scoped to a named property and input shape ('concrete dates and a party'). It clearly distinguishes itself from siblings by labeling itself 'the main tool' and naming what it is not (get_rates, get_apartment_details).

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 trigger ('Use this whenever a guest names dates'), explicit exclusions with named alternatives ('Not for: ... (get_rates) ... (get_apartment_details)'), a prerequisite ('ask for dates, number of adults and ages of all children first — never assume them'), and a routing rule for the visual sibling (render_availability_card with same arguments). Nothing is left to inference.

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

get_apartment_detailsGet Apartment DetailsA
Read-only
Inspect

Describe one or all apartments: size, bedrooms, maximum guests, description and page link.

Use for questions about the apartments themselves ("how big is #16?", "which apartment has 2 bedrooms?", "which apartments fit 5 people?"). It contains no prices or availability — use check_availability for dates and prices, or get_rates for a month overview. Studio #17 is only listed when asked for by number and is marked as bookable on request. Visual version with photos: render_apartment_gallery. Behaviour: read-only; facts as maintained on praegant.net (synced hourly), answers in milliseconds. Returns text plus structuredContent.apartments (nr, name, m2, bedrooms, max_guests, description, url, on_request, images). An unknown number returns the list of existing apartment numbers.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoApartment number such as '12' or '#16'; empty or 'all' = all online-bookable apartments; '17' = Studio #17 (on request only)
languageNoAnswer language: 'de' (default) or 'en' — use the language of the conversation. Text and card are always in the same language.de

Output Schema

ParametersJSON Schema
NameRequiredDescription
languageNo
apartmentsNo

TDQS

A4.7/5.0
Behavior5/5

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

Beyond the readOnlyHint and destructiveHint annotations, the description discloses the data source (praegant.net), sync frequency (hourly), response speed, and the fallback behavior for unknown numbers (returns list of existing apartment numbers). These are meaningful behavioral traits not present in the structured 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 dense but every sentence serves a purpose: function, usage examples, exclusions/alternatives, special case, behavior, and return format. It is front-loaded with the main purpose and flows logically to edge cases, with no filler or tautology.

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 two optional parameters, an output schema, and safety annotations, the description covers all necessary context: what it does, when to use it, behavior, output structure, and edge cases (unknown number, Studio #17). There are no significant gaps that would prevent an agent from using it correctly.

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

Parameters3/5

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

Both parameters are fully documented in the schema (100% coverage), including the special value '17' and the language guidance. The description restates some of this but adds little new param-level meaning; it mainly reinforces what the schema already says. The return-shape info belongs to output, not parameter semantics, so baseline 3 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 and resource ('Describe one or all apartments') and enumerates the exact fields returned (size, bedrooms, max guests, description, page link). It clearly differentiates from siblings by explicitly stating it contains no prices/availability and pointing to check_availability, get_rates, and render_apartment_gallery.

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?

Usage guidance is explicit: it gives example questions, states what the tool does NOT cover (prices/availability), and names the correct alternatives for those cases. It also covers the special case of Studio #17 and the visual gallery variant, leaving no ambiguity about when to choose this tool.

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

get_offersGet OffersA
Read-only
Inspect

List all current seasonal offers and packages published on praegant.net.

Use when the guest asks about deals, packages or what is special in a season, independent of dates. When the guest already has dates, check_availability includes only the offers valid for that stay — no need to call both. Visual version: render_offers_card. Behaviour: read-only; offers as published on the website (synced hourly, expired ones removed). Returns text plus structuredContent.offers (title, valid_from, valid_to, price_text, summary, url).

ParametersJSON Schema
NameRequiredDescriptionDefault
languageNoAnswer language: 'de' (default) or 'en' — use the language of the conversation. Text and card are always in the same language.de

Output Schema

ParametersJSON Schema
NameRequiredDescription
offersNotitle, valid_from, valid_to, price_text, summary, season, url, includes, image
languageNo

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, and the description reinforces read-only behavior while adding genuinely useful context: offers are synced hourly, expired ones are removed, and the response includes text plus structuredContent.offers with specific fields. This goes beyond what annotations alone provide.

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 compact and well-structured: purpose first, then usage guidance, then behavior and return shape. Every sentence contributes useful information, and the sibling routing is packed into a few clear lines 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?

For a simple read-only tool with one optional parameter, an output schema, and strong annotations, the description is complete. It covers when to use it, when not to, what it returns, and how it behaves in terms of freshness and filtering. Nothing an agent needs to invoke it correctly is missing.

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

Parameters3/5

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

Schema description coverage is 100% and the single optional language parameter is fully documented in the schema, including the instruction to match the conversation language. The tool description adds no additional parameter-level meaning, so the baseline of 3 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 and resource: 'List all current seasonal offers and packages published on praegant.net.' It clearly distinguishes this tool from siblings by framing it as the date-independent offers listing, while check_availability and render_offers_card are explicitly named 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?

The description gives explicit when-to-use guidance: use when the guest asks about deals, packages, or seasonal specials independent of dates. It also gives a when-not-to-use rule: if the guest already has dates, check_availability covers valid offers and there is no need to call both. It even names the visual alternative render_offers_card.

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

get_ratesGet RatesA
Read-only
Inspect

Get the price level of each apartment for a whole month plus that month's booking rules.

Use when the guest has no exact dates yet ("what does a week in July cost?", "when is it cheapest?"). For each apartment it returns the lowest total price of a real reference stay in that month (usually 7 nights, incl. final cleaning and tourist tax) and the arrival days / minimum stay / closures of the month. Not for exact prices on specific dates — use check_availability for that. Visual version: render_rates_card with the same arguments. Behaviour: read-only, live from the booking system (about 1-2 s, cached 5 min). Returns text plus structuredContent (apartments, periods, weeks, perks, offers).

ParametersJSON Schema
NameRequiredDescriptionDefault
monthNoMonth as '2027-07', 'July', 'Juli 2027'; empty = next month
adultsNoAdults sharing one apartment (1-5)
guestsNoDeprecated alias of adults (clients before 2.2.0); 0 = unused
childrenNoAges of ALL children 0-17, comma-separated, e.g. '8,15'; empty if none. Ages change price and tourist tax (charged from age 17).
languageNoAnswer language: 'de' (default) or 'en' — use the language of the conversation. Text and card are always in the same language.de

Output Schema

ParametersJSON Schema
NameRequiredDescription
monthNoYYYY-MM
perksNo
weeksNoSearched reference stays with all prices
adultsNo
offersNo
statusNook, closed, fully_booked or not_released
periodsNoBooking rules: from, to, closed, min_nights, arrival_weekdays
languageNo
apartmentsNoPer apartment: nr, name, lowest total EUR, nights, check_in/check_out of that reference stay
child_agesNo

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already mark it read-only and non-destructive, and the description adds valuable behavior: live from the booking system, 1-2 seconds latency, 5-minute cache, and returns text plus structuredContent. This goes beyond the annotations and gives the agent realistic operational expectations.

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 compact yet complete: purpose, usage context, exclusion, alternative, behavior, and return format are all covered in a few sentences. Every sentence earns its place and the most important purpose is front-loaded.

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 read-only lookup tool with zero required parameters and an output schema, this description fully covers what the tool does, when to use it, what it returns, and how it behaves operationally. Nothing critical is missing.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all five parameters. The description does not need to add parameter-level meaning, though it does helpfully clarify that the returned price is for a reference stay with final cleaning and tourist tax.

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 states a specific verb and resource: get the price level of each apartment for a whole month plus booking rules. It also clearly distinguishes itself from check_availability and render_rates_card, so an agent can differentiate it from siblings.

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 when to use it ('when the guest has no exact dates yet'), when not to use it ('Not for exact prices on specific dates'), which sibling to use instead (check_availability), and that render_rates_card is the visual version with the same arguments.

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

get_region_infoGet Region InformationA
Read-only
Inspect

Return curated information about Bad Kleinkirchheim and the house for a topic.

Use for "what can we do there?" and house questions: house rules and services (self-catering, no breakfast, bread-roll service, no pets, baby cot/high chair on request, chip access), skiing (winter), hiking, biking and lakes (summer), thermal spas and the in-house sauna (wellness), golf incl. the free green fee and tee-time booking, families, workation, arrival. The Kärnten Card (summer only) and the free green fee are explained exactly. Not for prices or availability (check_availability) and not for apartment facts (get_apartment_details). Behaviour: read-only, static curated content from the property (no web search), instant. Returns text plus structuredContent.topics (topic, lines) and contact details.

ParametersJSON Schema
NameRequiredDescriptionDefault
topicNoOne of house (self-catering, bread rolls, pets, baby cot, chip access), winter, summer, wellness, golf, family, workation, arrival (aliases like 'ski', 'hund', 'breakfast', 'anreise' work); empty = overview
languageNoAnswer language: 'de' (default) or 'en' — use the language of the conversation. Text and card are always in the same language.de

Output Schema

ParametersJSON Schema
NameRequiredDescription
emailNo
phoneNo
topicsNoSections: topic, lines
languageNo

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint/openWorldHint=false, but the description adds genuinely non-structured context: static curated content from the property, no web search, instant response. Slightly redundant given an output schema exists, but the 'no web search' guarantee is behavior an agent cannot infer from 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?

Front-loaded with the core purpose and routing exclusions, but the long inline enumeration of house services and domains is verbose and partially duplicates the schema's topic list. Efficient in intent, mildly over-long in execution.

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?

Output schema exists, so the return-format sentence is bonus rather than necessity; annotations cover safety; both parameters are fully documented in the schema. Nothing an agent needs to call this correctly is missing.

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

Parameters3/5

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

Schema description coverage is 100% and the schema already lists allowed topics, aliases, empty=overview, and the language default/behavior. The description's topic enumeration largely repeats the schema, so it adds little beyond what is already structured. Baseline 3 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?

States a specific verb and resource ('Return curated information about Bad Kleinkirchheim and the house for a topic') and immediately scopes it against siblings by name. An agent can distinguish this from check_availability and get_apartment_details without opening a schema.

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 lists when to use it ('what can we do there?' and house questions, with enumerated topic domains) and when not to ('Not for prices or availability (check_availability) and not for apartment facts (get_apartment_details)'). Both the alternative tools and the selecting condition are named.

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

render_availability_cardShow Availability CardA
Read-only
Inspect

Show the availability result for given dates and party as an interactive card in the chat.

Use after check_availability (or instead of it) when the guest wants to SEE the options: photos, total price with an expandable breakdown, a booking button per apartment, tappable alternative dates. Use check_availability alone when only reasoning over the data or when the client cannot display cards. Behaviour and arguments are identical to check_availability (read-only, live, nothing booked); the result additionally contains small photos and the Google rating. Returns the same text and structuredContent.

ParametersJSON Schema
NameRequiredDescriptionDefault
adultsNoTOTAL number of guests aged 18+ in the whole party — also for groups larger than one apartment (the tool plans the apartments). Guests aged 0-17 go into children.
check_inYesArrival date YYYY-MM-DD, e.g. '2027-06-12'
childrenNoAges of ALL children 0-17, comma-separated, e.g. '8,15'; empty if none. Ages change price and tourist tax (charged from age 17).
languageNoAnswer language: 'de' (default) or 'en' — use the language of the conversation. Text and card are always in the same language.de
check_outYesDeparture date YYYY-MM-DD (after check_in, max. 60 nights)

Output Schema

ParametersJSON Schema
NameRequiredDescription
groupNorooms[] (like apartments, plus adults, child_ages), total, booking_url (all apartments in ONE basket on praegant.net, up to 4 apartments; else null -> enquiry), alternative{total, nrs[], rooms[], booking_url}
perksNokaernten_card, greenfee (bool, for this arrival date)
queryNocheck_in, check_out, nights, adults, child_ages, persons
rulesNook, problems[], min_nights, period{from,to,min_nights,arrival_weekdays 0=Mon}
termsNodeposit_pct, deposit_method, deposit_due_days, balance, card_required, tax_pp_night, tax_min_age, free_cancel_until
offersNoWebsite offers valid during the stay: title, url, price_text
ratingNoGoogle rating, review_count (render tool only)
statusNook: apartments free; group: several apartments needed; rule_violation: arrival/departure day or minimum stay not allowed; closed; fully_booked; not_released: beyond published dates
languageNo
apartmentsNoFree apartments, recommended first, then cheapest: nr, match{recommended, reasons[]}, total (EUR, whole stay+party), breakdown{logis, cleaning, tourist_tax, tax_persons, deposit, balance, free_cancel_until} or null, facts{name, m2, bedrooms, max_guests, url, image, photo}, booking_url
inquiry_urlNoPre-filled non-binding enquiry form
unavailableNoFitting apartments already booked: nr, name
alternativesNoNearest bookable stays: check_in, check_out, nights, from_price, cheapest, apartments[], booking_url
next_arrivalNoEarliest bookable arrival on/after the wish for the same stay length and party (fully booked / closed only)
recommendationNoBest fit for this party: nr, reasons[] (two_bedrooms, cheapest, most_space, best_value, terrace, loggia, balcony), needs_two_bedrooms, comfortable

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare readOnlyHint/destructiveHint/openWorldHint, and the description adds real value on top: it confirms 'live, nothing booked', states that behaviour and arguments are identical to check_availability, and discloses the extra output (small photos, Google rating) plus the fact that text and structuredContent are the same. That is exactly the kind of context annotations cannot carry.

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?

Three tight sentences: what it is, when to use it vs the alternative, then behavioural/output equivalence. The routing decision is front-loaded and no sentence is redundant.

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?

Output schema exists and the description need not explain return values, yet it still usefully notes the card's extra content and the parity with check_availability's text/structuredContent. For a read-only rendering tool with full annotations and full schema coverage, nothing an agent needs is missing.

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

Parameters3/5

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

Schema description coverage is 100% and the schema itself explains adults-vs-children counting, date formats, night limits and language defaults in detail. The description only says arguments are 'identical to check_availability', adding no semantics beyond the schema, so the baseline of 3 applies.

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?

States a specific verb and resource ('Show the availability result ... as an interactive card in the chat') and immediately distinguishes itself from the near-identical sibling check_availability by naming the rendering difference. An agent can pick between the two without opening either schema.

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?

Gives explicit when-to-use ('when the guest wants to SEE the options'), when-not ('only reasoning over the data or when the client cannot display cards'), and names the alternative tool (check_availability) by name. Nothing is left to inference.

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

render_offers_cardShow Offers CardA
Read-only
Inspect

Show the current website offers as an interactive card with photos and links.

Use instead of get_offers when the guest wants to browse the offers visually. Same behaviour (read-only) and result as get_offers, plus a photo per offer.

ParametersJSON Schema
NameRequiredDescriptionDefault
languageNoAnswer language: 'de' (default) or 'en' — use the language of the conversation. Text and card are always in the same language.de

Output Schema

ParametersJSON Schema
NameRequiredDescription
offersNotitle, valid_from, valid_to, price_text, summary, season, url, includes, image
languageNo

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, and the description reinforces this by stating the tool is read-only. It adds useful behavioral context by explaining the result is identical to get_offers plus a photo per offer, and that the output is an interactive card, which goes beyond the structured annotation fields.

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 two concise sentences with no filler. The first sentence states the core purpose, and the second immediately provides usage guidance and sibling differentiation, making it easy to scan.

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 single optional parameter, full schema coverage, read-only annotations, and explicit comparison to get_offers, the description covers everything needed to select and invoke the tool correctly. The presence of an output schema also means the description does not need to explain return values.

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

Parameters3/5

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

The schema has 100% coverage for its single optional parameter, with a clear description of the 'language' field and its default. The description adds no parameter-level details beyond the schema, but the schema already carries the full burden, so a baseline score of 3 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 names a specific verb ('Show'), a concrete resource ('current website offers'), and the output form ('interactive card with photos and links'). It explicitly distinguishes itself from the sibling tool get_offers by the visual presentation, so an agent can tell them apart without opening the schema.

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 says 'Use instead of get_offers when the guest wants to browse the offers visually' and clarifies that behavior and result match get_offers plus a photo. This gives clear selection criteria against the main sibling and leaves no ambiguity about when to invoke it.

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

render_rates_cardShow Rates CardA
Read-only
Inspect

Show a month's prices and booking rules as an interactive card in the chat.

Use instead of get_rates when the guest wants to see the overview; each apartment line can be tapped to check its dates. Use get_rates when only the data is needed. Same arguments, behaviour (read-only, live) and result as get_rates.

ParametersJSON Schema
NameRequiredDescriptionDefault
monthNoMonth as '2027-07', 'July', 'Juli 2027'; empty = next month
adultsNoAdults sharing one apartment (1-5)
guestsNoDeprecated alias of adults (clients before 2.2.0); 0 = unused
childrenNoAges of ALL children 0-17, comma-separated, e.g. '8,15'; empty if none. Ages change price and tourist tax (charged from age 17).
languageNoAnswer language: 'de' (default) or 'en' — use the language of the conversation. Text and card are always in the same language.de

Output Schema

ParametersJSON Schema
NameRequiredDescription
monthNoYYYY-MM
perksNo
weeksNoSearched reference stays with all prices
adultsNo
offersNo
statusNook, closed, fully_booked or not_released
periodsNoBooking rules: from, to, closed, min_nights, arrival_weekdays
languageNo
apartmentsNoPer apartment: nr, name, lowest total EUR, nights, check_in/check_out of that reference stay
child_agesNo

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and destructiveHint, and the description adds useful behavioral context: the tool is 'live', returns the same result as get_rates, and renders an interactive card with tappable apartment lines. It does not repeat the annotation data verbatim, adding value beyond the structured fields, though it does not discuss output details because the output schema covers that.

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 three sentences with no filler. It front-loads the core purpose, immediately gives usage guidance with an explicit alternative, and closes with a concise reference to shared arguments/behavior.

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 100% schema coverage, existing output schema, and annotations that already communicate the read-only safe behavior, the description is complete enough for an agent to select and invoke the tool correctly. It even clarifies the relationship to get_rates, which is the key sibling in this context.

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

Parameters3/5

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

Schema description coverage is 100% and every parameter has detailed documentation with defaults, ranges, and examples. The description only says 'same arguments as get_rates', which adds no new parameter meaning beyond what the schema already provides, so the baseline of 3 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 clearly states the tool's function: showing a month's prices and booking rules as an interactive card in chat. It explicitly distinguishes itself from get_rates by noting when one should be preferred over the other, so an agent can tell the tools apart.

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?

It gives explicit usage direction: use this tool when the guest wants the overview, use get_rates when only data is needed. This directly addresses selection between the two most similar tools and leaves no ambiguity about the primary alternative.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 2 tool updates
    • Changedcheck_availability1 field changed
      • addedOutput schema / properties / next_arrival
        Added value: +{
        +  "description": "Earliest bookable arrival on/after the wish for the same stay length and party (fully booked / closed only)",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
    • Changedrender_availability_card1 field changed
      • addedOutput schema / properties / next_arrival
        Added value: +{
        +  "description": "Earliest bookable arrival on/after the wish for the same stay length and party (fully booked / closed only)",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
  2. 2 tool updates
    • Changedcheck_availability1 field changed
      • changedOutput schema / properties / group / description
        Previous value: -"rooms[] (like apartments, plus adults, child_ages), total, alternative"New value: +"rooms[] (like apartments, plus adults, child_ages), total, booking_url (all apartments in ONE basket on praegant.net, up to 4 apartments; else null -> enquiry), alternative{total, nrs[], rooms[], booking_url}"
    • Changedrender_availability_card1 field changed
      • changedOutput schema / properties / group / description
        Previous value: -"rooms[] (like apartments, plus adults, child_ages), total, alternative"New value: +"rooms[] (like apartments, plus adults, child_ages), total, booking_url (all apartments in ONE basket on praegant.net, up to 4 apartments; else null -> enquiry), alternative{total, nrs[], rooms[], booking_url}"
  3. 2 tool updates
    • Changedcheck_availability2 fields changed
      • changedOutput schema / properties / apartments / description
        Previous value: -"Free apartments, cheapest first: nr, total (EUR, whole stay+party), breakdown{logis, cleaning, tourist_tax, tax_persons, deposit, balance, free_cancel_until} or null, facts{name, m2, bedrooms, max_guests, url, image, photo}, booking_url"New value: +"Free apartments, recommended first, then cheapest: nr, match{recommended, reasons[]}, total (EUR, whole stay+party), breakdown{logis, cleaning, tourist_tax, tax_persons, deposit, balance, free_cancel_until} or null, facts{name, m2, bedrooms, max_guests, url, image, photo}, booking_url"
      • addedOutput schema / properties / recommendation
        Added value: +{
        +  "description": "Best fit for this party: nr, reasons[] (two_bedrooms, cheapest, most_space, best_value, terrace, loggia, balcony), needs_two_bedrooms, comfortable",
        +  "type": [
        +    "object",
        +    "null"
        +  ]
        +}
    • Changedrender_availability_card2 fields changed
      • changedOutput schema / properties / apartments / description
        Previous value: -"Free apartments, cheapest first: nr, total (EUR, whole stay+party), breakdown{logis, cleaning, tourist_tax, tax_persons, deposit, balance, free_cancel_until} or null, facts{name, m2, bedrooms, max_guests, url, image, photo}, booking_url"New value: +"Free apartments, recommended first, then cheapest: nr, match{recommended, reasons[]}, total (EUR, whole stay+party), breakdown{logis, cleaning, tourist_tax, tax_persons, deposit, balance, free_cancel_until} or null, facts{name, m2, bedrooms, max_guests, url, image, photo}, booking_url"
      • addedOutput schema / properties / recommendation
        Added value: +{
        +  "description": "Best fit for this party: nr, reasons[] (two_bedrooms, cheapest, most_space, best_value, terrace, loggia, balcony), needs_two_bedrooms, comfortable",
        +  "type": [
        +    "object",
        +    "null"
        +  ]
        +}
  4. 1 tool update
    • Changedget_region_info2 fields changed
      • changedInput schema / properties / topic / description
        Previous value: -"One of winter, summer, wellness, golf, family, workation, arrival (aliases like 'ski', 'wandern', 'anreise' work); empty = overview"New value: +"One of house (self-catering, bread rolls, pets, baby cot, chip access), winter, summer, wellness, golf, family, workation, arrival (aliases like 'ski', 'hund', 'breakfast', 'anreise' work); empty = overview"
      • addedInput schema / properties / topic / examples
        Added value: +[
        +  "house",
        +  "golf",
        +  "winter"
        +]
  5. 10 tool updates
    • Changedcheck_availability6 fields changed
      • changedInput schema / properties / adults / description
        Previous value: -"TOTAL adults (18+) of the whole party — also for groups larger than one apartment; the tool plans the apartments"New value: +"TOTAL number of guests aged 18+ in the whole party — also for groups larger than one apartment (the tool plans the apartments). Guests aged 0-17 go into children."
      • changedInput schema / properties / check_in / description
        Previous value: -"Arrival date YYYY-MM-DD"New value: +"Arrival date YYYY-MM-DD, e.g. '2027-06-12'"
      • changedInput schema / properties / check_out / description
        Previous value: -"Departure date YYYY-MM-DD"New value: +"Departure date YYYY-MM-DD (after check_in, max. 60 nights)"
      • changedInput schema / properties / children / description
        Previous value: -"Ages of ALL children 0–17, comma-separated, e.g. '8,15'. Empty if none. Ages matter for price and tourist tax."New value: +"Ages of ALL children 0-17, comma-separated, e.g. '8,15'; empty if none. Ages change price and tourist tax (charged from age 17)."
      • changedInput schema / properties / language / description
        Previous value: -"'de' (default) or 'en' — the language of the conversation"New value: +"Answer language: 'de' (default) or 'en' — use the language of the conversation. Text and card are always in the same language."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "description": "Result of check_availability / render_availability_card.",
        +  "properties": {
        +    "alternatives": {
        +      "description": "Nearest bookable stays: check_in, check_out, nights, from_price, cheapest, apartments[], booking_url",
        +      "items": {
        +        "additionalProperties": true,
        +        "type": "object"
        +      },
        +      "type": [
        +        "array",
        +        "null"
        +      ]
        +    },
        +    "apartments": {
        +      "description": "Free apartments, cheapest first: nr, total (EUR, whole stay+party), breakdown{logis, cleaning, tourist_tax, tax_persons, deposit, balance, free_cancel_until} or null, facts{name, m2, bedrooms, max_guests, url, image, photo}, booking_url",
        +      "items": {
        +        "additionalProperties": true,
        +        "type": "object"
        +      },
        +      "type": [
        +        "array",
        +        "null"
        +      ]
        +    },
        +    "group": {
        +      "description": "rooms[] (like apartments, plus adults, child_ages), total, alternative",
        +      "type": [
        +        "object",
        +        "null"
        +      ]
        +    },
        +    "inquiry_url": {
        +      "description": "Pre-filled non-binding enquiry form",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "language": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "offers": {
        +      "description": "Website offers valid during the stay: title, url, price_text",
        +      "items": {
        +        "additionalProperties": true,
        +        "type": "object"
        +      },
        +      "type": [
        +        "array",
        +        "null"
        +      ]
        +    },
        +    "perks": {
        +      "description": "kaernten_card, greenfee (bool, for this arrival date)",
        +      "type": [
        +        "object",
        +        "null"
        +      ]
        +    },
        +    "query": {
        +      "description": "check_in, check_out, nights, adults, child_ages, persons",
        +      "type": [
        +        "object",
        +        "null"
        +      ]
        +    },
        +    "rating": {
        +      "description": "Google rating, review_count (render tool only)",
        +      "type": [
        +        "object",
        +        "null"
        +      ]
        +    },
        +    "rules": {
        +      "description": "ok, problems[], min_nights, period{from,to,min_nights,arrival_weekdays 0=Mon}",
        +      "type": [
        +        "object",
        +        "null"
        +      ]
        +    },
        +    "status": {
        +      "description": "ok: apartments free; group: several apartments needed; rule_violation: arrival/departure day or minimum stay not allowed; closed; fully_booked; not_released: beyond published dates",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "terms": {
        +      "description": "deposit_pct, deposit_method, deposit_due_days, balance, card_required, tax_pp_night, tax_min_age, free_cancel_until",
        +      "type": [
        +        "object",
        +        "null"
        +      ]
        +    },
        +    "unavailable": {
        +      "description": "Fitting apartments already booked: nr, name",
        +      "items": {
        +        "additionalProperties": true,
        +        "type": "object"
        +      },
        +      "type": [
        +        "array",
        +        "null"
        +      ]
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedget_apartment_details3 fields changed
      • changedInput schema / properties / language / description
        Previous value: -"'de' (default) or 'en' — the language of the conversation"New value: +"Answer language: 'de' (default) or 'en' — use the language of the conversation. Text and card are always in the same language."
      • changedInput schema / properties / name / description
        Previous value: -"Apartment number, e.g. '12' or '#16'; empty = all apartments"New value: +"Apartment number such as '12' or '#16'; empty or 'all' = all online-bookable apartments; '17' = Studio #17 (on request only)"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$defs": {
        +    "ApartmentInfo": {
        +      "properties": {
        +        "bedrooms": {
        +          "type": [
        +            "integer",
        +            "null"
        +          ]
        +        },
        +        "description": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "images": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": [
        +            "array",
        +            "null"
        +          ]
        +        },
        +        "m2": {
        +          "type": [
        +            "number",
        +            "null"
        +          ]
        +        },
        +        "max_guests": {
        +          "type": [
        +            "integer",
        +            "null"
        +          ]
        +        },
        +        "name": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "nr": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "on_request": {
        +          "description": "True = not bookable online, enquiry only",
        +          "type": [
        +            "boolean",
        +            "null"
        +          ]
        +        },
        +        "photos": {
        +          "description": "JPEG data URIs (render tool only)",
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": [
        +            "array",
        +            "null"
        +          ]
        +        },
        +        "url": {
        +          "description": "Apartment page, or the enquiry form for on-request apartments",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    }
        +  },
        +  "description": "Result of get_apartment_details / render_apartment_gallery.",
        +  "properties": {
        +    "apartments": {
        +      "items": {
        +        "$ref": "#/$defs/ApartmentInfo"
        +      },
        +      "type": [
        +        "array",
        +        "null"
        +      ]
        +    },
        +    "language": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedget_booking_link7 fields changed
      • changedInput schema / properties / adults / description
        Previous value: -"TOTAL adults (18+) of the whole party — also for groups larger than one apartment; the tool plans the apartments"New value: +"TOTAL number of guests aged 18+ in the whole party — also for groups larger than one apartment (the tool plans the apartments). Guests aged 0-17 go into children."
      • changedInput schema / properties / apartment / description
        Previous value: -"Apartment number, e.g. '12' or '#16'; empty = all apartments"New value: +"Apartment number such as '12' or '#16'; empty or 'all' = all online-bookable apartments; '17' = Studio #17 (on request only)"
      • addedInput schema / properties / check_in / description
        Added value: +"Optional date YYYY-MM-DD; leave empty for the plain booking page"
      • addedInput schema / properties / check_out / description
        Added value: +"Optional date YYYY-MM-DD; leave empty for the plain booking page"
      • changedInput schema / properties / children / description
        Previous value: -"Ages of ALL children 0–17, comma-separated, e.g. '8,15'. Empty if none. Ages matter for price and tourist tax."New value: +"Ages of ALL children 0-17, comma-separated, e.g. '8,15'; empty if none. Ages change price and tourist tax (charged from age 17)."
      • changedInput schema / properties / language / description
        Previous value: -"'de' (default) or 'en' — the language of the conversation"New value: +"Answer language: 'de' (default) or 'en' — use the language of the conversation. Text and card are always in the same language."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "description": "Result of get_booking_link.",
        +  "properties": {
        +    "adults": {
        +      "type": [
        +        "integer",
        +        "null"
        +      ]
        +    },
        +    "booking_url": {
        +      "description": "Booking page on praegant.net, pre-filled when dates are given",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "check_in": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "check_out": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "child_ages": {
        +      "items": {
        +        "type": "integer"
        +      },
        +      "type": [
        +        "array",
        +        "null"
        +      ]
        +    },
        +    "email": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "inquiry_url": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "language": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "phone": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedget_offers2 fields changed
      • changedInput schema / properties / language / description
        Previous value: -"'de' (default) or 'en' — the language of the conversation"New value: +"Answer language: 'de' (default) or 'en' — use the language of the conversation. Text and card are always in the same language."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "description": "Result of get_offers / render_offers_card.",
        +  "properties": {
        +    "language": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "offers": {
        +      "description": "title, valid_from, valid_to, price_text, summary, season, url, includes, image",
        +      "items": {
        +        "additionalProperties": true,
        +        "type": "object"
        +      },
        +      "type": [
        +        "array",
        +        "null"
        +      ]
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedget_rates6 fields changed
      • changedInput schema / properties / adults / description
        Previous value: -"Adults in one apartment"New value: +"Adults sharing one apartment (1-5)"
      • changedInput schema / properties / children / description
        Previous value: -"Ages of ALL children 0–17, comma-separated, e.g. '8,15'. Empty if none. Ages matter for price and tourist tax."New value: +"Ages of ALL children 0-17, comma-separated, e.g. '8,15'; empty if none. Ages change price and tourist tax (charged from age 17)."
      • changedInput schema / properties / guests / description
        Previous value: -"Deprecated alias of adults (clients before 2.2.0)"New value: +"Deprecated alias of adults (clients before 2.2.0); 0 = unused"
      • changedInput schema / properties / language / description
        Previous value: -"'de' (default) or 'en' — the language of the conversation"New value: +"Answer language: 'de' (default) or 'en' — use the language of the conversation. Text and card are always in the same language."
      • changedInput schema / properties / month / description
        Previous value: -"e.g. '2027-07', 'July', 'Juli 2027'; empty = next month"New value: +"Month as '2027-07', 'July', 'Juli 2027'; empty = next month"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "description": "Result of get_rates / render_rates_card.",
        +  "properties": {
        +    "adults": {
        +      "type": [
        +        "integer",
        +        "null"
        +      ]
        +    },
        +    "apartments": {
        +      "description": "Per apartment: nr, name, lowest total EUR, nights, check_in/check_out of that reference stay",
        +      "items": {
        +        "additionalProperties": true,
        +        "type": "object"
        +      },
        +      "type": [
        +        "array",
        +        "null"
        +      ]
        +    },
        +    "child_ages": {
        +      "items": {
        +        "type": "integer"
        +      },
        +      "type": [
        +        "array",
        +        "null"
        +      ]
        +    },
        +    "language": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "month": {
        +      "description": "YYYY-MM",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "offers": {
        +      "items": {
        +        "additionalProperties": true,
        +        "type": "object"
        +      },
        +      "type": [
        +        "array",
        +        "null"
        +      ]
        +    },
        +    "periods": {
        +      "description": "Booking rules: from, to, closed, min_nights, arrival_weekdays",
        +      "items": {
        +        "additionalProperties": true,
        +        "type": "object"
        +      },
        +      "type": [
        +        "array",
        +        "null"
        +      ]
        +    },
        +    "perks": {
        +      "type": [
        +        "object",
        +        "null"
        +      ]
        +    },
        +    "status": {
        +      "description": "ok, closed, fully_booked or not_released",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "weeks": {
        +      "description": "Searched reference stays with all prices",
        +      "items": {
        +        "additionalProperties": true,
        +        "type": "object"
        +      },
        +      "type": [
        +        "array",
        +        "null"
        +      ]
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedget_region_info3 fields changed
      • changedInput schema / properties / language / description
        Previous value: -"'de' (default) or 'en' — the language of the conversation"New value: +"Answer language: 'de' (default) or 'en' — use the language of the conversation. Text and card are always in the same language."
      • changedInput schema / properties / topic / description
        Previous value: -"winter, summer, wellness, golf, family, workation, arrival — empty for an overview"New value: +"One of winter, summer, wellness, golf, family, workation, arrival (aliases like 'ski', 'wandern', 'anreise' work); empty = overview"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "description": "Result of get_region_info.",
        +  "properties": {
        +    "email": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "language": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "phone": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "topics": {
        +      "description": "Sections: topic, lines",
        +      "items": {
        +        "additionalProperties": true,
        +        "type": "object"
        +      },
        +      "type": [
        +        "array",
        +        "null"
        +      ]
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedrender_apartment_gallery3 fields changed
      • changedInput schema / properties / language / description
        Previous value: -"'de' (default) or 'en' — the language of the conversation"New value: +"Answer language: 'de' (default) or 'en' — use the language of the conversation. Text and card are always in the same language."
      • changedInput schema / properties / name / description
        Previous value: -"Apartment number, e.g. '12' or '#16'; empty = all apartments"New value: +"Apartment number such as '12' or '#16'; empty or 'all' = all online-bookable apartments; '17' = Studio #17 (on request only)"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$defs": {
        +    "ApartmentInfo": {
        +      "properties": {
        +        "bedrooms": {
        +          "type": [
        +            "integer",
        +            "null"
        +          ]
        +        },
        +        "description": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "images": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": [
        +            "array",
        +            "null"
        +          ]
        +        },
        +        "m2": {
        +          "type": [
        +            "number",
        +            "null"
        +          ]
        +        },
        +        "max_guests": {
        +          "type": [
        +            "integer",
        +            "null"
        +          ]
        +        },
        +        "name": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "nr": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "on_request": {
        +          "description": "True = not bookable online, enquiry only",
        +          "type": [
        +            "boolean",
        +            "null"
        +          ]
        +        },
        +        "photos": {
        +          "description": "JPEG data URIs (render tool only)",
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": [
        +            "array",
        +            "null"
        +          ]
        +        },
        +        "url": {
        +          "description": "Apartment page, or the enquiry form for on-request apartments",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    }
        +  },
        +  "description": "Result of get_apartment_details / render_apartment_gallery.",
        +  "properties": {
        +    "apartments": {
        +      "items": {
        +        "$ref": "#/$defs/ApartmentInfo"
        +      },
        +      "type": [
        +        "array",
        +        "null"
        +      ]
        +    },
        +    "language": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedrender_availability_card6 fields changed
      • changedInput schema / properties / adults / description
        Previous value: -"TOTAL adults (18+) of the whole party — also for groups larger than one apartment; the tool plans the apartments"New value: +"TOTAL number of guests aged 18+ in the whole party — also for groups larger than one apartment (the tool plans the apartments). Guests aged 0-17 go into children."
      • changedInput schema / properties / check_in / description
        Previous value: -"Arrival date YYYY-MM-DD"New value: +"Arrival date YYYY-MM-DD, e.g. '2027-06-12'"
      • changedInput schema / properties / check_out / description
        Previous value: -"Departure date YYYY-MM-DD"New value: +"Departure date YYYY-MM-DD (after check_in, max. 60 nights)"
      • changedInput schema / properties / children / description
        Previous value: -"Ages of ALL children 0–17, comma-separated, e.g. '8,15'. Empty if none. Ages matter for price and tourist tax."New value: +"Ages of ALL children 0-17, comma-separated, e.g. '8,15'; empty if none. Ages change price and tourist tax (charged from age 17)."
      • changedInput schema / properties / language / description
        Previous value: -"'de' (default) or 'en' — the language of the conversation"New value: +"Answer language: 'de' (default) or 'en' — use the language of the conversation. Text and card are always in the same language."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "description": "Result of check_availability / render_availability_card.",
        +  "properties": {
        +    "alternatives": {
        +      "description": "Nearest bookable stays: check_in, check_out, nights, from_price, cheapest, apartments[], booking_url",
        +      "items": {
        +        "additionalProperties": true,
        +        "type": "object"
        +      },
        +      "type": [
        +        "array",
        +        "null"
        +      ]
        +    },
        +    "apartments": {
        +      "description": "Free apartments, cheapest first: nr, total (EUR, whole stay+party), breakdown{logis, cleaning, tourist_tax, tax_persons, deposit, balance, free_cancel_until} or null, facts{name, m2, bedrooms, max_guests, url, image, photo}, booking_url",
        +      "items": {
        +        "additionalProperties": true,
        +        "type": "object"
        +      },
        +      "type": [
        +        "array",
        +        "null"
        +      ]
        +    },
        +    "group": {
        +      "description": "rooms[] (like apartments, plus adults, child_ages), total, alternative",
        +      "type": [
        +        "object",
        +        "null"
        +      ]
        +    },
        +    "inquiry_url": {
        +      "description": "Pre-filled non-binding enquiry form",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "language": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "offers": {
        +      "description": "Website offers valid during the stay: title, url, price_text",
        +      "items": {
        +        "additionalProperties": true,
        +        "type": "object"
        +      },
        +      "type": [
        +        "array",
        +        "null"
        +      ]
        +    },
        +    "perks": {
        +      "description": "kaernten_card, greenfee (bool, for this arrival date)",
        +      "type": [
        +        "object",
        +        "null"
        +      ]
        +    },
        +    "query": {
        +      "description": "check_in, check_out, nights, adults, child_ages, persons",
        +      "type": [
        +        "object",
        +        "null"
        +      ]
        +    },
        +    "rating": {
        +      "description": "Google rating, review_count (render tool only)",
        +      "type": [
        +        "object",
        +        "null"
        +      ]
        +    },
        +    "rules": {
        +      "description": "ok, problems[], min_nights, period{from,to,min_nights,arrival_weekdays 0=Mon}",
        +      "type": [
        +        "object",
        +        "null"
        +      ]
        +    },
        +    "status": {
        +      "description": "ok: apartments free; group: several apartments needed; rule_violation: arrival/departure day or minimum stay not allowed; closed; fully_booked; not_released: beyond published dates",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "terms": {
        +      "description": "deposit_pct, deposit_method, deposit_due_days, balance, card_required, tax_pp_night, tax_min_age, free_cancel_until",
        +      "type": [
        +        "object",
        +        "null"
        +      ]
        +    },
        +    "unavailable": {
        +      "description": "Fitting apartments already booked: nr, name",
        +      "items": {
        +        "additionalProperties": true,
        +        "type": "object"
        +      },
        +      "type": [
        +        "array",
        +        "null"
        +      ]
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedrender_offers_card2 fields changed
      • changedInput schema / properties / language / description
        Previous value: -"'de' (default) or 'en' — the language of the conversation"New value: +"Answer language: 'de' (default) or 'en' — use the language of the conversation. Text and card are always in the same language."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "description": "Result of get_offers / render_offers_card.",
        +  "properties": {
        +    "language": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "offers": {
        +      "description": "title, valid_from, valid_to, price_text, summary, season, url, includes, image",
        +      "items": {
        +        "additionalProperties": true,
        +        "type": "object"
        +      },
        +      "type": [
        +        "array",
        +        "null"
        +      ]
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedrender_rates_card6 fields changed
      • changedInput schema / properties / adults / description
        Previous value: -"Adults in one apartment"New value: +"Adults sharing one apartment (1-5)"
      • changedInput schema / properties / children / description
        Previous value: -"Ages of ALL children 0–17, comma-separated, e.g. '8,15'. Empty if none. Ages matter for price and tourist tax."New value: +"Ages of ALL children 0-17, comma-separated, e.g. '8,15'; empty if none. Ages change price and tourist tax (charged from age 17)."
      • changedInput schema / properties / guests / description
        Previous value: -"Deprecated alias of adults (clients before 2.2.0)"New value: +"Deprecated alias of adults (clients before 2.2.0); 0 = unused"
      • changedInput schema / properties / language / description
        Previous value: -"'de' (default) or 'en' — the language of the conversation"New value: +"Answer language: 'de' (default) or 'en' — use the language of the conversation. Text and card are always in the same language."
      • changedInput schema / properties / month / description
        Previous value: -"e.g. '2027-07', 'July', 'Juli 2027'; empty = next month"New value: +"Month as '2027-07', 'July', 'Juli 2027'; empty = next month"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "description": "Result of get_rates / render_rates_card.",
        +  "properties": {
        +    "adults": {
        +      "type": [
        +        "integer",
        +        "null"
        +      ]
        +    },
        +    "apartments": {
        +      "description": "Per apartment: nr, name, lowest total EUR, nights, check_in/check_out of that reference stay",
        +      "items": {
        +        "additionalProperties": true,
        +        "type": "object"
        +      },
        +      "type": [
        +        "array",
        +        "null"
        +      ]
        +    },
        +    "child_ages": {
        +      "items": {
        +        "type": "integer"
        +      },
        +      "type": [
        +        "array",
        +        "null"
        +      ]
        +    },
        +    "language": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "month": {
        +      "description": "YYYY-MM",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "offers": {
        +      "items": {
        +        "additionalProperties": true,
        +        "type": "object"
        +      },
        +      "type": [
        +        "array",
        +        "null"
        +      ]
        +    },
        +    "periods": {
        +      "description": "Booking rules: from, to, closed, min_nights, arrival_weekdays",
        +      "items": {
        +        "additionalProperties": true,
        +        "type": "object"
        +      },
        +      "type": [
        +        "array",
        +        "null"
        +      ]
        +    },
        +    "perks": {
        +      "type": [
        +        "object",
        +        "null"
        +      ]
        +    },
        +    "status": {
        +      "description": "ok, closed, fully_booked or not_released",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "weeks": {
        +      "description": "Searched reference stays with all prices",
        +      "items": {
        +        "additionalProperties": true,
        +        "type": "object"
        +      },
        +      "type": [
        +        "array",
        +        "null"
        +      ]
        +    }
        +  },
        +  "type": "object"
        +}
  6. 10 tool updates
    • Changedcheck_availability7 fields changed
      • addedInput schema / properties / adults / description
        Added value: +"TOTAL adults (18+) of the whole party — also for groups larger than one apartment; the tool plans the apartments"
      • addedInput schema / properties / adults / maximum
        Added value: +30
      • addedInput schema / properties / adults / minimum
        Added value: +1
      • addedInput schema / properties / check_in / description
        Added value: +"Arrival date YYYY-MM-DD"
      • addedInput schema / properties / check_out / description
        Added value: +"Departure date YYYY-MM-DD"
      • addedInput schema / properties / children / description
        Added value: +"Ages of ALL children 0–17, comma-separated, e.g. '8,15'. Empty if none. Ages matter for price and tourist tax."
      • addedInput schema / properties / language / description
        Added value: +"'de' (default) or 'en' — the language of the conversation"
    • Changedget_apartment_details2 fields changed
      • addedInput schema / properties / language / description
        Added value: +"'de' (default) or 'en' — the language of the conversation"
      • addedInput schema / properties / name / description
        Added value: +"Apartment number, e.g. '12' or '#16'; empty = all apartments"
    • Changedget_booking_link7 fields changed
      • addedInput schema / properties / adults / description
        Added value: +"TOTAL adults (18+) of the whole party — also for groups larger than one apartment; the tool plans the apartments"
      • addedInput schema / properties / adults / maximum
        Added value: +30
      • addedInput schema / properties / adults / minimum
        Added value: +1
      • addedInput schema / properties / apartment / description
        Added value: +"Apartment number, e.g. '12' or '#16'; empty = all apartments"
      • addedInput schema / properties / children / description
        Added value: +"Ages of ALL children 0–17, comma-separated, e.g. '8,15'. Empty if none. Ages matter for price and tourist tax."
      • addedInput schema / properties / language / description
        Added value: +"'de' (default) or 'en' — the language of the conversation"
      • changedOutput schema / (root)
        Previous value: -{
        -  "properties": {
        -    "result": {
        -      "title": "Result",
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "result"
        -  ],
        -  "title": "get_booking_linkOutput",
        -  "type": "object"
        -}New value: +null
    • Changedget_offers1 field changed
      • addedInput schema / properties / language / description
        Added value: +"'de' (default) or 'en' — the language of the conversation"
    • Changedget_rates8 fields changed
      • addedInput schema / properties / adults
        Added value: +{
        +  "default": 2,
        +  "description": "Adults in one apartment",
        +  "maximum": 5,
        +  "minimum": 1,
        +  "title": "Adults",
        +  "type": "integer"
        +}
      • addedInput schema / properties / children
        Added value: +{
        +  "default": "",
        +  "description": "Ages of ALL children 0–17, comma-separated, e.g. '8,15'. Empty if none. Ages matter for price and tourist tax.",
        +  "title": "Children",
        +  "type": "string"
        +}
      • changedInput schema / properties / guests / default
        Previous value: -2New value: +0
      • addedInput schema / properties / guests / description
        Added value: +"Deprecated alias of adults (clients before 2.2.0)"
      • addedInput schema / properties / guests / maximum
        Added value: +5
      • addedInput schema / properties / guests / minimum
        Added value: +0
      • addedInput schema / properties / language / description
        Added value: +"'de' (default) or 'en' — the language of the conversation"
      • addedInput schema / properties / month / description
        Added value: +"e.g. '2027-07', 'July', 'Juli 2027'; empty = next month"
    • Changedget_region_info3 fields changed
      • addedInput schema / properties / language
        Added value: +{
        +  "default": "de",
        +  "description": "'de' (default) or 'en' — the language of the conversation",
        +  "title": "Language",
        +  "type": "string"
        +}
      • addedInput schema / properties / topic / description
        Added value: +"winter, summer, wellness, golf, family, workation, arrival — empty for an overview"
      • changedOutput schema / (root)
        Previous value: -{
        -  "properties": {
        -    "result": {
        -      "title": "Result",
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "result"
        -  ],
        -  "title": "get_region_infoOutput",
        -  "type": "object"
        -}New value: +null
    • Changedrender_apartment_gallery2 fields changed
      • addedInput schema / properties / language / description
        Added value: +"'de' (default) or 'en' — the language of the conversation"
      • addedInput schema / properties / name / description
        Added value: +"Apartment number, e.g. '12' or '#16'; empty = all apartments"
    • Changedrender_availability_card7 fields changed
      • addedInput schema / properties / adults / description
        Added value: +"TOTAL adults (18+) of the whole party — also for groups larger than one apartment; the tool plans the apartments"
      • addedInput schema / properties / adults / maximum
        Added value: +30
      • addedInput schema / properties / adults / minimum
        Added value: +1
      • addedInput schema / properties / check_in / description
        Added value: +"Arrival date YYYY-MM-DD"
      • addedInput schema / properties / check_out / description
        Added value: +"Departure date YYYY-MM-DD"
      • addedInput schema / properties / children / description
        Added value: +"Ages of ALL children 0–17, comma-separated, e.g. '8,15'. Empty if none. Ages matter for price and tourist tax."
      • addedInput schema / properties / language / description
        Added value: +"'de' (default) or 'en' — the language of the conversation"
    • Changedrender_offers_card1 field changed
      • addedInput schema / properties / language / description
        Added value: +"'de' (default) or 'en' — the language of the conversation"
    • Changedrender_rates_card8 fields changed
      • addedInput schema / properties / adults
        Added value: +{
        +  "default": 2,
        +  "description": "Adults in one apartment",
        +  "maximum": 5,
        +  "minimum": 1,
        +  "title": "Adults",
        +  "type": "integer"
        +}
      • addedInput schema / properties / children
        Added value: +{
        +  "default": "",
        +  "description": "Ages of ALL children 0–17, comma-separated, e.g. '8,15'. Empty if none. Ages matter for price and tourist tax.",
        +  "title": "Children",
        +  "type": "string"
        +}
      • changedInput schema / properties / guests / default
        Previous value: -2New value: +0
      • addedInput schema / properties / guests / description
        Added value: +"Deprecated alias of adults (clients before 2.2.0)"
      • addedInput schema / properties / guests / maximum
        Added value: +5
      • addedInput schema / properties / guests / minimum
        Added value: +0
      • addedInput schema / properties / language / description
        Added value: +"'de' (default) or 'en' — the language of the conversation"
      • addedInput schema / properties / month / description
        Added value: +"e.g. '2027-07', 'July', 'Juli 2027'; empty = next month"
  7. 10 tool updates
    • First observedcheck_availability
    • First observedget_apartment_details
    • First observedget_booking_link
    • First observedget_offers
    • First observedget_rates
    • First observedget_region_info
    • First observedrender_apartment_gallery
    • First observedrender_availability_card
    • First observedrender_offers_card
    • First observedrender_rates_card

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    A
    maintenance
    Vacation rental software. A signed stay offer on the host's own domain. Agents discover a host domain, verify an Ed25519-signed offer (VRP), and send the guest to that domain to book and pay the host. Do not compare hosts or prices. HemmaBo + VRP, 6 runtime tools: 2 HemmaBo tools, 2 host onboarding tools, and 2 VRP verification tools. Not an OTA. Not a marketplace.
    7
    6
    387 npm
    3
    Apache 2.0
  • A
    license
    Not graded
    quality
    C
    maintenance
    A public, read-only server that lets any AI agent or MCP client check vacation-rental prices, availability, day-by-day calendars and booking links for properties in Puerto Viejo de Talamanca, Costa Rica, with no credentials required. It never creates, changes or cancels bookings and never exposes guest or reservation data.
    GPL 3.0
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources