Landhaus Apartments Prägant
Server Details
Live availability, rates and offers for Landhaus Apartments Prägant in Bad Kleinkirchheim, Austria.
- Status
- Healthy
- Uptime
- 100.0% over 21 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 10 tools
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.
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.
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.
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 toolscheck_availabilityCheck AvailabilityARead-onlyInspect
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).
| Name | Required | Description | Default |
|---|---|---|---|
| adults | No | 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. | |
| check_in | Yes | Arrival date YYYY-MM-DD, e.g. '2027-06-12' | |
| children | No | 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). | |
| language | No | Answer language: 'de' (default) or 'en' — use the language of the conversation. Text and card are always in the same language. | de |
| check_out | Yes | Departure date YYYY-MM-DD (after check_in, max. 60 nights) |
Output Schema
| Name | Required | Description |
|---|---|---|
| group | No | 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} |
| perks | No | kaernten_card, greenfee (bool, for this arrival date) |
| query | No | check_in, check_out, nights, adults, child_ages, persons |
| rules | No | ok, problems[], min_nights, period{from,to,min_nights,arrival_weekdays 0=Mon} |
| terms | No | deposit_pct, deposit_method, deposit_due_days, balance, card_required, tax_pp_night, tax_min_age, free_cancel_until |
| offers | No | Website offers valid during the stay: title, url, price_text |
| rating | No | Google rating, review_count (render tool only) |
| status | No | 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 |
| language | No | |
| apartments | No | 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 |
| inquiry_url | No | Pre-filled non-binding enquiry form |
| unavailable | No | Fitting apartments already booked: nr, name |
| alternatives | No | Nearest bookable stays: check_in, check_out, nights, from_price, cheapest, apartments[], booking_url |
| next_arrival | No | Earliest bookable arrival on/after the wish for the same stay length and party (fully booked / closed only) |
| recommendation | No | Best fit for this party: nr, reasons[] (two_bedrooms, cheapest, most_space, best_value, terrace, loggia, balcony), needs_two_bedrooms, comfortable |
TDQS
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.
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.
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.
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.
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.
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 DetailsARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Apartment number such as '12' or '#16'; empty or 'all' = all online-bookable apartments; '17' = Studio #17 (on request only) | |
| language | No | Answer language: 'de' (default) or 'en' — use the language of the conversation. Text and card are always in the same language. | de |
Output Schema
| Name | Required | Description |
|---|---|---|
| language | No | |
| apartments | No |
TDQS
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.
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.
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.
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.
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.
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_booking_linkGet Booking LinkARead-onlyInspect
Build a direct booking link on praegant.net, optionally pre-filled with dates, party and apartment.
Use when the guest has decided and just wants the link, or wants to book without a price check. Bookings are always completed by the guest on praegant.net (no commission) — this connector never books, reserves or takes payment by design. check_availability already returns a booking link per free apartment, so call this only when no availability result is at hand. Dates are optional (YYYY-MM-DD); without them the link opens the booking page. Behaviour: read-only, no availability check, instant. Returns text plus structuredContent (booking_url, inquiry_url, phone, email).
| Name | Required | Description | Default |
|---|---|---|---|
| adults | No | 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. | |
| check_in | No | Optional date YYYY-MM-DD; leave empty for the plain booking page | |
| children | No | 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). | |
| language | No | Answer language: 'de' (default) or 'en' — use the language of the conversation. Text and card are always in the same language. | de |
| apartment | No | Apartment number such as '12' or '#16'; empty or 'all' = all online-bookable apartments; '17' = Studio #17 (on request only) | |
| check_out | No | Optional date YYYY-MM-DD; leave empty for the plain booking page |
Output Schema
| Name | Required | Description |
|---|---|---|
| No | ||
| phone | No | |
| adults | No | |
| check_in | No | |
| language | No | |
| check_out | No | |
| child_ages | No | |
| booking_url | No | Booking page on praegant.net, pre-filled when dates are given |
| inquiry_url | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds significant behavioral context beyond the readOnlyHint and destructiveHint annotations: it states the tool is read-only, performs no availability check, is instant, and never books/reserves/takes payment by design. It also specifies the return structure (text plus structuredContent with fields). This exceeds what annotations alone convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with purpose, usage, behavior, and return info clearly front-loaded. It is somewhat verbose but every sentence earns its place, explaining the non-commission model and the alternative tool. Minor redundancy exists (e.g., 'no commission' repeated), so it is not perfectly concise but is appropriately sized for the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (6 params, 0 required, 100% schema coverage, output schema present), the description covers all necessary context: purpose, when to use, behavior, and return format. No critical information is missing for an agent to correctly select and invoke the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% parameter description coverage, so the baseline is 3. The description itself does not add new meaning to parameters beyond reiterating that dates are optional and prefilled; it doesn't expand on the detailed schema descriptions (e.g., adults total for groups, children age handling). Thus it adds minimal value over the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool builds a direct booking link on praegant.net with optional pre-fill, and distinguishes it from check_availability which already returns booking links. It is specific about the resource and action, leaving no ambiguity about what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-to-use guidance is given: use when the guest has decided or wants to book without a price check. It also states when not to use it (when an availability result is at hand) and names the alternative (check_availability). This fully covers selection logic.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_offersGet OffersARead-onlyInspect
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).
| Name | Required | Description | Default |
|---|---|---|---|
| language | No | Answer language: 'de' (default) or 'en' — use the language of the conversation. Text and card are always in the same language. | de |
Output Schema
| Name | Required | Description |
|---|---|---|
| offers | No | title, valid_from, valid_to, price_text, summary, season, url, includes, image |
| language | No |
TDQS
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.
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.
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.
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.
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.
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 RatesARead-onlyInspect
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).
| Name | Required | Description | Default |
|---|---|---|---|
| month | No | Month as '2027-07', 'July', 'Juli 2027'; empty = next month | |
| adults | No | Adults sharing one apartment (1-5) | |
| guests | No | Deprecated alias of adults (clients before 2.2.0); 0 = unused | |
| children | No | 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). | |
| language | No | Answer language: 'de' (default) or 'en' — use the language of the conversation. Text and card are always in the same language. | de |
Output Schema
| Name | Required | Description |
|---|---|---|
| month | No | YYYY-MM |
| perks | No | |
| weeks | No | Searched reference stays with all prices |
| adults | No | |
| offers | No | |
| status | No | ok, closed, fully_booked or not_released |
| periods | No | Booking rules: from, to, closed, min_nights, arrival_weekdays |
| language | No | |
| apartments | No | Per apartment: nr, name, lowest total EUR, nights, check_in/check_out of that reference stay |
| child_ages | No |
TDQS
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.
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.
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.
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.
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.
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 InformationARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| topic | No | 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 | |
| language | No | Answer language: 'de' (default) or 'en' — use the language of the conversation. Text and card are always in the same language. | de |
Output Schema
| Name | Required | Description |
|---|---|---|
| No | ||
| phone | No | |
| topics | No | Sections: topic, lines |
| language | No |
TDQS
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.
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.
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.
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.
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.
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_apartment_galleryShow Apartment GalleryARead-onlyInspect
Show one or all apartments with photos as an interactive gallery card in the chat.
Use instead of get_apartment_details when the guest wants to see the apartments (one apartment: up to 3 swipeable photos; all: one photo each, with buttons to check availability or open the page). Same arguments, behaviour (read-only, no prices) and result as get_apartment_details, plus photos.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Apartment number such as '12' or '#16'; empty or 'all' = all online-bookable apartments; '17' = Studio #17 (on request only) | |
| language | No | Answer language: 'de' (default) or 'en' — use the language of the conversation. Text and card are always in the same language. | de |
Output Schema
| Name | Required | Description |
|---|---|---|
| language | No | |
| apartments | No |
TDQS
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 with 'read-only, no prices.' It adds useful behavioral context beyond annotations: the swipeable photo counts, buttons for availability/page access, and the fact that the result matches get_apartment_details plus photos.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Compact and front-loaded: the first sentence says what the tool does, and the second sentence provides the selection rule. Every sentence earns its place with no redundant detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With a full input schema, an output schema, and safety annotations present, the description adds the missing decision context: when to use it, what the gallery shows, and how it differs from get_apartment_details. Nothing needed for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already fully documents both parameters. The description adds only broad context ('Same arguments') and the one/all semantics, which are already reflected in the schema. This meets the baseline but does not substantially enrich parameter meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Show') plus resource ('one or all apartments with photos') and the output format ('interactive gallery card'). The description explicitly contrasts with get_apartment_details by adding photos, so the tool is clearly differentiated from its siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit routing guidance: 'Use instead of get_apartment_details when the guest wants to see the apartments' and clarifies the one-apartment vs all-apartments photo behavior. This leaves no ambiguity about when to choose this tool over the nearest alternative.
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 CardARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| adults | No | 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. | |
| check_in | Yes | Arrival date YYYY-MM-DD, e.g. '2027-06-12' | |
| children | No | 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). | |
| language | No | Answer language: 'de' (default) or 'en' — use the language of the conversation. Text and card are always in the same language. | de |
| check_out | Yes | Departure date YYYY-MM-DD (after check_in, max. 60 nights) |
Output Schema
| Name | Required | Description |
|---|---|---|
| group | No | 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} |
| perks | No | kaernten_card, greenfee (bool, for this arrival date) |
| query | No | check_in, check_out, nights, adults, child_ages, persons |
| rules | No | ok, problems[], min_nights, period{from,to,min_nights,arrival_weekdays 0=Mon} |
| terms | No | deposit_pct, deposit_method, deposit_due_days, balance, card_required, tax_pp_night, tax_min_age, free_cancel_until |
| offers | No | Website offers valid during the stay: title, url, price_text |
| rating | No | Google rating, review_count (render tool only) |
| status | No | 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 |
| language | No | |
| apartments | No | 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 |
| inquiry_url | No | Pre-filled non-binding enquiry form |
| unavailable | No | Fitting apartments already booked: nr, name |
| alternatives | No | Nearest bookable stays: check_in, check_out, nights, from_price, cheapest, apartments[], booking_url |
| next_arrival | No | Earliest bookable arrival on/after the wish for the same stay length and party (fully booked / closed only) |
| recommendation | No | Best fit for this party: nr, reasons[] (two_bedrooms, cheapest, most_space, best_value, terrace, loggia, balcony), needs_two_bedrooms, comfortable |
TDQS
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.
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.
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.
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.
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.
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 CardARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| language | No | Answer language: 'de' (default) or 'en' — use the language of the conversation. Text and card are always in the same language. | de |
Output Schema
| Name | Required | Description |
|---|---|---|
| offers | No | title, valid_from, valid_to, price_text, summary, season, url, includes, image |
| language | No |
TDQS
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.
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.
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.
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.
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.
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 CardARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| month | No | Month as '2027-07', 'July', 'Juli 2027'; empty = next month | |
| adults | No | Adults sharing one apartment (1-5) | |
| guests | No | Deprecated alias of adults (clients before 2.2.0); 0 = unused | |
| children | No | 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). | |
| language | No | Answer language: 'de' (default) or 'en' — use the language of the conversation. Text and card are always in the same language. | de |
Output Schema
| Name | Required | Description |
|---|---|---|
| month | No | YYYY-MM |
| perks | No | |
| weeks | No | Searched reference stays with all prices |
| adults | No | |
| offers | No | |
| status | No | ok, closed, fully_booked or not_released |
| periods | No | Booking rules: from, to, closed, min_nights, arrival_weekdays |
| language | No | |
| apartments | No | Per apartment: nr, name, lowest total EUR, nights, check_in/check_out of that reference stay |
| child_ages | No |
TDQS
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.
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.
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.
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.
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.
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.
2 tool updates
- Changed
check_availability1 field changed- added
Output schema / properties / next_arrivalAdded value: +{ + "description": "Earliest bookable arrival on/after the wish for the same stay length and party (fully booked / closed only)", + "type": [ + "string", + "null" + ] +}
- Changed
render_availability_card1 field changed- added
Output schema / properties / next_arrivalAdded value: +{ + "description": "Earliest bookable arrival on/after the wish for the same stay length and party (fully booked / closed only)", + "type": [ + "string", + "null" + ] +}
2 tool updates
- Changed
check_availability1 field changed- changed
Output schema / properties / group / descriptionPrevious 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}"
- Changed
render_availability_card1 field changed- changed
Output schema / properties / group / descriptionPrevious 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}"
2 tool updates
- Changed
check_availability2 fields changed- changed
Output schema / properties / apartments / descriptionPrevious 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" - added
Output schema / properties / recommendationAdded 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" + ] +}
- Changed
render_availability_card2 fields changed- changed
Output schema / properties / apartments / descriptionPrevious 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" - added
Output schema / properties / recommendationAdded 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" + ] +}
1 tool update
- Changed
get_region_info2 fields changed- changed
Input schema / properties / topic / descriptionPrevious 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" - added
Input schema / properties / topic / examplesAdded value: +[ + "house", + "golf", + "winter" +]
10 tool updates
- Changed
check_availability6 fields changed- changed
Input schema / properties / adults / descriptionPrevious 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." - changed
Input schema / properties / check_in / descriptionPrevious value: -"Arrival date YYYY-MM-DD"New value: +"Arrival date YYYY-MM-DD, e.g. '2027-06-12'" - changed
Input schema / properties / check_out / descriptionPrevious value: -"Departure date YYYY-MM-DD"New value: +"Departure date YYYY-MM-DD (after check_in, max. 60 nights)" - changed
Input schema / properties / children / descriptionPrevious 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)." - changed
Input schema / properties / language / descriptionPrevious 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." - changed
Output 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" +}
- Changed
get_apartment_details3 fields changed- changed
Input schema / properties / language / descriptionPrevious 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." - changed
Input schema / properties / name / descriptionPrevious 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)" - changed
Output 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" +}
- Changed
get_booking_link7 fields changed- changed
Input schema / properties / adults / descriptionPrevious 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." - changed
Input schema / properties / apartment / descriptionPrevious 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)" - added
Input schema / properties / check_in / descriptionAdded value: +"Optional date YYYY-MM-DD; leave empty for the plain booking page" - added
Input schema / properties / check_out / descriptionAdded value: +"Optional date YYYY-MM-DD; leave empty for the plain booking page" - changed
Input schema / properties / children / descriptionPrevious 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)." - changed
Input schema / properties / language / descriptionPrevious 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." - changed
Output 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" +}
- Changed
get_offers2 fields changed- changed
Input schema / properties / language / descriptionPrevious 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." - changed
Output 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" +}
- Changed
get_rates6 fields changed- changed
Input schema / properties / adults / descriptionPrevious value: -"Adults in one apartment"New value: +"Adults sharing one apartment (1-5)" - changed
Input schema / properties / children / descriptionPrevious 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)." - changed
Input schema / properties / guests / descriptionPrevious value: -"Deprecated alias of adults (clients before 2.2.0)"New value: +"Deprecated alias of adults (clients before 2.2.0); 0 = unused" - changed
Input schema / properties / language / descriptionPrevious 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." - changed
Input schema / properties / month / descriptionPrevious value: -"e.g. '2027-07', 'July', 'Juli 2027'; empty = next month"New value: +"Month as '2027-07', 'July', 'Juli 2027'; empty = next month" - changed
Output 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" +}
- Changed
get_region_info3 fields changed- changed
Input schema / properties / language / descriptionPrevious 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." - changed
Input schema / properties / topic / descriptionPrevious 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" - changed
Output 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" +}
- Changed
render_apartment_gallery3 fields changed- changed
Input schema / properties / language / descriptionPrevious 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." - changed
Input schema / properties / name / descriptionPrevious 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)" - changed
Output 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" +}
- Changed
render_availability_card6 fields changed- changed
Input schema / properties / adults / descriptionPrevious 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." - changed
Input schema / properties / check_in / descriptionPrevious value: -"Arrival date YYYY-MM-DD"New value: +"Arrival date YYYY-MM-DD, e.g. '2027-06-12'" - changed
Input schema / properties / check_out / descriptionPrevious value: -"Departure date YYYY-MM-DD"New value: +"Departure date YYYY-MM-DD (after check_in, max. 60 nights)" - changed
Input schema / properties / children / descriptionPrevious 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)." - changed
Input schema / properties / language / descriptionPrevious 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." - changed
Output 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" +}
- Changed
render_offers_card2 fields changed- changed
Input schema / properties / language / descriptionPrevious 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." - changed
Output 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" +}
- Changed
render_rates_card6 fields changed- changed
Input schema / properties / adults / descriptionPrevious value: -"Adults in one apartment"New value: +"Adults sharing one apartment (1-5)" - changed
Input schema / properties / children / descriptionPrevious 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)." - changed
Input schema / properties / guests / descriptionPrevious value: -"Deprecated alias of adults (clients before 2.2.0)"New value: +"Deprecated alias of adults (clients before 2.2.0); 0 = unused" - changed
Input schema / properties / language / descriptionPrevious 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." - changed
Input schema / properties / month / descriptionPrevious value: -"e.g. '2027-07', 'July', 'Juli 2027'; empty = next month"New value: +"Month as '2027-07', 'July', 'Juli 2027'; empty = next month" - changed
Output 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" +}
10 tool updates
- Changed
check_availability7 fields changed- added
Input schema / properties / adults / descriptionAdded value: +"TOTAL adults (18+) of the whole party — also for groups larger than one apartment; the tool plans the apartments" - added
Input schema / properties / adults / maximumAdded value: +30 - added
Input schema / properties / adults / minimumAdded value: +1 - added
Input schema / properties / check_in / descriptionAdded value: +"Arrival date YYYY-MM-DD" - added
Input schema / properties / check_out / descriptionAdded value: +"Departure date YYYY-MM-DD" - added
Input schema / properties / children / descriptionAdded value: +"Ages of ALL children 0–17, comma-separated, e.g. '8,15'. Empty if none. Ages matter for price and tourist tax." - added
Input schema / properties / language / descriptionAdded value: +"'de' (default) or 'en' — the language of the conversation"
- Changed
get_apartment_details2 fields changed- added
Input schema / properties / language / descriptionAdded value: +"'de' (default) or 'en' — the language of the conversation" - added
Input schema / properties / name / descriptionAdded value: +"Apartment number, e.g. '12' or '#16'; empty = all apartments"
- Changed
get_booking_link7 fields changed- added
Input schema / properties / adults / descriptionAdded value: +"TOTAL adults (18+) of the whole party — also for groups larger than one apartment; the tool plans the apartments" - added
Input schema / properties / adults / maximumAdded value: +30 - added
Input schema / properties / adults / minimumAdded value: +1 - added
Input schema / properties / apartment / descriptionAdded value: +"Apartment number, e.g. '12' or '#16'; empty = all apartments" - added
Input schema / properties / children / descriptionAdded value: +"Ages of ALL children 0–17, comma-separated, e.g. '8,15'. Empty if none. Ages matter for price and tourist tax." - added
Input schema / properties / language / descriptionAdded value: +"'de' (default) or 'en' — the language of the conversation" - changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "title": "Result", - "type": "string" - } - }, - "required": [ - "result" - ], - "title": "get_booking_linkOutput", - "type": "object" -}New value: +null
- Changed
get_offers1 field changed- added
Input schema / properties / language / descriptionAdded value: +"'de' (default) or 'en' — the language of the conversation"
- Changed
get_rates8 fields changed- added
Input schema / properties / adultsAdded value: +{ + "default": 2, + "description": "Adults in one apartment", + "maximum": 5, + "minimum": 1, + "title": "Adults", + "type": "integer" +} - added
Input schema / properties / childrenAdded 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" +} - changed
Input schema / properties / guests / defaultPrevious value: -2New value: +0 - added
Input schema / properties / guests / descriptionAdded value: +"Deprecated alias of adults (clients before 2.2.0)" - added
Input schema / properties / guests / maximumAdded value: +5 - added
Input schema / properties / guests / minimumAdded value: +0 - added
Input schema / properties / language / descriptionAdded value: +"'de' (default) or 'en' — the language of the conversation" - added
Input schema / properties / month / descriptionAdded value: +"e.g. '2027-07', 'July', 'Juli 2027'; empty = next month"
- Changed
get_region_info3 fields changed- added
Input schema / properties / languageAdded value: +{ + "default": "de", + "description": "'de' (default) or 'en' — the language of the conversation", + "title": "Language", + "type": "string" +} - added
Input schema / properties / topic / descriptionAdded value: +"winter, summer, wellness, golf, family, workation, arrival — empty for an overview" - changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "title": "Result", - "type": "string" - } - }, - "required": [ - "result" - ], - "title": "get_region_infoOutput", - "type": "object" -}New value: +null
- Changed
render_apartment_gallery2 fields changed- added
Input schema / properties / language / descriptionAdded value: +"'de' (default) or 'en' — the language of the conversation" - added
Input schema / properties / name / descriptionAdded value: +"Apartment number, e.g. '12' or '#16'; empty = all apartments"
- Changed
render_availability_card7 fields changed- added
Input schema / properties / adults / descriptionAdded value: +"TOTAL adults (18+) of the whole party — also for groups larger than one apartment; the tool plans the apartments" - added
Input schema / properties / adults / maximumAdded value: +30 - added
Input schema / properties / adults / minimumAdded value: +1 - added
Input schema / properties / check_in / descriptionAdded value: +"Arrival date YYYY-MM-DD" - added
Input schema / properties / check_out / descriptionAdded value: +"Departure date YYYY-MM-DD" - added
Input schema / properties / children / descriptionAdded value: +"Ages of ALL children 0–17, comma-separated, e.g. '8,15'. Empty if none. Ages matter for price and tourist tax." - added
Input schema / properties / language / descriptionAdded value: +"'de' (default) or 'en' — the language of the conversation"
- Changed
render_offers_card1 field changed- added
Input schema / properties / language / descriptionAdded value: +"'de' (default) or 'en' — the language of the conversation"
- Changed
render_rates_card8 fields changed- added
Input schema / properties / adultsAdded value: +{ + "default": 2, + "description": "Adults in one apartment", + "maximum": 5, + "minimum": 1, + "title": "Adults", + "type": "integer" +} - added
Input schema / properties / childrenAdded 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" +} - changed
Input schema / properties / guests / defaultPrevious value: -2New value: +0 - added
Input schema / properties / guests / descriptionAdded value: +"Deprecated alias of adults (clients before 2.2.0)" - added
Input schema / properties / guests / maximumAdded value: +5 - added
Input schema / properties / guests / minimumAdded value: +0 - added
Input schema / properties / language / descriptionAdded value: +"'de' (default) or 'en' — the language of the conversation" - added
Input schema / properties / month / descriptionAdded value: +"e.g. '2027-07', 'July', 'Juli 2027'; empty = next month"
10 tool updates
- First observed
check_availability - First observed
get_apartment_details - First observed
get_booking_link - First observed
get_offers - First observed
get_rates - First observed
get_region_info - First observed
render_apartment_gallery - First observed
render_availability_card - First observed
render_offers_card - First observed
render_rates_card
Related MCP Connectors
Live availability, prices and bookings for Hotel Bergsonne Allgäu in Sonthofen, Germany.
Live availability and commission-free booking links for resort La Truite d'Argent, Belgian Ardennes
Live-Verfügbarkeit, Preise und Buchungslinks direkt beim Sporthotel IDEAL Hochgurgl in Tirol.
Find exact, directly bookable hotel rooms and apartments with live availability and prices.
41
Related MCP Servers
- AlicenseAqualityAmaintenanceVacation 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.76387 npm3Apache 2.0
- -
- AlicenseNot gradedqualityCmaintenanceA 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
- FlicenseNot gradedqualityBmaintenanceProvides live hotel room rates, availability, and guest reviews from Agoda, enabling searches by destination and dates, property details, and structured review data.1-
Glama MCP Gateway
Add one secure layer between your agents and this server.