Search 18,000+ privately owned holiday homes on Ferienhausmiete.de: exact stay prices, availability
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Suggest holiday regions by (partial) name, typo-tolerant. Names are matched in the response language, with German (the native names, e.g. "Seenplatte") always accepted as well. Returns region ids usable as regionId in search_accommodations, with accommodation counts.
Search text; honest 2-char minimum, no silent truncation
Restrict to one region hierarchy level (1..8); omit for any
Maximum suggestions
Language the user is writing in (de, en, fr, pl, it, es, nl, hr); defaults to de. Selects the language of names and texts in the response and the language region names are matched in — pass it on every call.
Suggest holiday regions by (partial) name, typo-tolerant. Names are matched in the response language, with German (the native names, e.g. "Seenplatte") always accepted as well. Returns region ids usable as regionId in search_accommodations, with accommodation counts.
| Argument | Type | Description |
|---|---|---|
| level | integer | Restrict to one region hierarchy level (1..8); omit for any |
| limit | integer | Maximum suggestions |
| query* | string | Search text; honest 2-char minimum, no silent truncation |
| locale | string | Language the user is writing in (de, en, fr, pl, it, es, nl, hr); defaults to de. Selects the language of names and texts in the response and the language region names are matched in — pass it on every call. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"query"
],
"properties": {
"level": {
"type": "integer",
"maximum": 8,
"minimum": 1,
"description": "Restrict to one region hierarchy level (1..8); omit for any"
},
"limit": {
"type": "integer",
"default": 12,
"maximum": 20,
"minimum": 1,
"description": "Maximum suggestions"
},
"query": {
"type": "string",
"maxLength": 100,
"minLength": 2,
"description": "Search text; honest 2-char minimum, no silent truncation"
},
"locale": {
"enum": [
"de",
"en",
"fr",
"pl",
"it",
"es",
"nl",
"hr"
],
"type": "string",
"default": "de",
"description": "Language the user is writing in (de, en, fr, pl, it, es, nl, hr); defaults to de. Selects the language of names and texts in the response and the language region names are matched in — pass it on every call."
}
}
}Full localized detail of one accommodation: description, location with coordinates, capacity, rating, feature codes, image gallery, base price, and `url` (the listing page on the website of the locale).
| Argument | Type | Description |
|---|---|---|
| id* | integer | Accommodation id (from search results) |
| locale | string | Language the user is writing in (de, en, fr, pl, it, es, nl, hr); defaults to de. Selects the language of names and texts in the response and the language region names are matched in — pass it on every call. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"id"
],
"properties": {
"id": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1,
"description": "Accommodation id (from search results)"
},
"locale": {
"enum": [
"de",
"en",
"fr",
"pl",
"it",
"es",
"nl",
"hr"
],
"type": "string",
"default": "de",
"description": "Language the user is writing in (de, en, fr, pl, it, es, nl, hr); defaults to de. Selects the language of names and texts in the response and the language region names are matched in — pass it on every call."
}
}
}Per-day availability for one accommodation: bookable days, arrival/departure flags, minimum stay, nightly price and discounts. Window defaults to today and is capped at 24 months.
| Argument | Type | Description |
|---|---|---|
| id* | integer | Accommodation id (from search results) |
| to | string | Window end (YYYY-MM-DD) |
| from | string | Window start (YYYY-MM-DD), defaults to today |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"id"
],
"properties": {
"id": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1,
"description": "Accommodation id (from search results)"
},
"to": {
"type": "string",
"format": "date",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
"description": "Window end (YYYY-MM-DD)"
},
"from": {
"type": "string",
"format": "date",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
"description": "Window start (YYYY-MM-DD), defaults to today"
}
}
}Paginated holiday accommodation search over directly bookable/inquirable own inventory (externally managed listings are not exposed). Filter by region (regionId from autocomplete_regions), a radius around a point (lat/lng/radiusKm — use the coordinates of the place the user names; results then carry distanceKm and can be sorted by distance) or a map bounding box (neLat/neLng/swLat/swLng); these three are mutually exclusive. Travel dates (arrival/departure, both together; add bookableOnly to drop stays below the minimum stay), persons (a minimum: beds ≥ persons — add personsMax to exclude oversized houses; optional adults split for families — children can use extra-children slots), bedrooms, bathrooms, livingSpaceMin (m²), minReviews, price range per night, feature codes (e.g. swimming_pool, wifi, pets_allowed), accommodation types and offers. Sort: relevance (default), rating (best first; website formula, a single 5.0 review outranks many 4.8s — use minReviews), persons, bedrooms, living_area, distance (radius searches). Every result carries `url` (the listing page on the website of the locale) and, on dated searches, `stayUrl` with dates and guests pre-filled — give these to the user as the link. `location.place` is the actual town; `location.region` is the (marketing) region it is listed under. Dated searches include a stayPrice per result: the exact total for the stay incl. mandatory costs and discounts (kind "total"; "min_stay" when the stay is below the minimum), or "from"/"on_request" where only the static basePrice or no price is available. `approximate: true` means some nights were priced from the owner's base price; the website confirms the final total.
| Argument | Type | Description |
|---|---|---|
| lat | number | Search centre latitude |
| lng | number | Search centre longitude |
| page | integer |
| sort | string |
| neLat | number | Bounding box north-east latitude |
| neLng | number | Bounding box north-east longitude |
| query | string | Keyword search over names and descriptions in the response language and the German originals |
| swLat | number | Bounding box south-west latitude |
| swLng | number | Bounding box south-west longitude |
| types | array |
| adults | integer | Adults among persons; when below persons, objects may host the remainder as extra children (website guests widget parity) |
| locale | string | Language the user is writing in (de, en, fr, pl, it, es, nl, hr); defaults to de. Selects the language of names and texts in the response and the language region names are matched in — pass it on every call. |
| offers | array |
| arrival | string |
| perPage | integer |
| persons | integer | Minimum sleeping places (beds ≥ persons); combine with personsMax to cap size |
| bedrooms | integer |
| features | array |
| priceMax | number | Omit for unbounded — no sentinel values |
| priceMin | number | Per night with dates, base price without |
| radiusKm | number | Radius around the centre in km (as the crow flies), max 300 |
| regionId | integer | Region to search in (from /regions/autocomplete); omit to search everywhere |
| bathrooms | integer |
| departure | string |
| minReviews | integer | Only accommodations with at least this many visible reviews |
| personsMax | integer | Maximum sleeping places (beds ≤ personsMax); excludes oversized houses |
| bookableOnly | string | Dated searches only: keep only stays that meet the minimum stay (drops stayPrice.kind "min_stay" results) |
| livingSpaceMin | number | Minimum living space in m² |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"lat": {
"type": "number",
"maximum": 90,
"minimum": -90,
"description": "Search centre latitude"
},
"lng": {
"type": "number",
"maximum": 180,
"minimum": -180,
"description": "Search centre longitude"
},
"page": {
"type": "integer",
"default": 1,
"maximum": 9007199254740991,
"minimum": 1
},
"sort": {
"enum": [
"relevance",
"rating",
"persons",
"bedrooms",
"living_area",
"distance"
],
"type": "string",
"default": "relevance"
},
"neLat": {
"type": "number",
"maximum": 90,
"minimum": -90,
"description": "Bounding box north-east latitude"
},
"neLng": {
"type": "number",
"maximum": 180,
"minimum": -180,
"description": "Bounding box north-east longitude"
},
"query": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "Keyword search over names and descriptions in the response language and the German originals"
},
"swLat": {
"type": "number",
"maximum": 90,
"minimum": -90,
"description": "Bounding box south-west latitude"
},
"swLng": {
"type": "number",
"maximum": 180,
"minimum": -180,
"description": "Bounding box south-west longitude"
},
"types": {
"type": "array",
"items": {
"enum": [
"holiday_home",
"holiday_apartment",
"bed_and_breakfast",
"castle",
"hut",
"hotel",
"boarding_house",
"houseboat"
],
"type": "string"
}
},
"adults": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1,
"description": "Adults among persons; when below persons, objects may host the remainder as extra children (website guests widget parity)"
},
"locale": {
"enum": [
"de",
"en",
"fr",
"pl",
"it",
"es",
"nl",
"hr"
],
"type": "string",
"default": "de",
"description": "Language the user is writing in (de, en, fr, pl, it, es, nl, hr); defaults to de. Selects the language of names and texts in the response and the language region names are matched in — pass it on every call."
},
"offers": {
"type": "array",
"items": {
"enum": [
"special_offer",
"last_minute",
"early_booking",
"best_price",
"weekly_discount",
"monthly_discount"
],
"type": "string"
}
},
"arrival": {
"type": "string",
"format": "date",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
},
"perPage": {
"type": "integer",
"default": 25,
"maximum": 50,
"minimum": 1
},
"persons": {
"type": "integer",
"maximum": 50,
"minimum": 1,
"description": "Minimum sleeping places (beds ≥ persons); combine with personsMax to cap size"
},
"bedrooms": {
"type": "integer",
"maximum": 50,
"minimum": 0
},
"features": {
"type": "array",
"items": {
"enum": [
"relaxing_holiday",
"family_holiday",
"farm_holiday",
"holiday_resort",
"golfing_holiday",
"cultural_holiday",
"romantic_holiday",
"singles_holiday",
"skiing_holiday",
"sport_holiday",
"beach_holiday",
"city_trip",
"hiking_holiday",
"dog_friendly",
"mountain_holiday",
"seaside_holiday",
"lakeside_holiday",
"sea_view",
"group_accommodation",
"countryside_holiday",
"lake_view",
"fireplace",
"air_conditioning",
"sauna",
"whirlpool",
"heating",
"dishwasher",
"tv",
"washing_machine",
"crib",
"wifi",
"fishing",
"climbing",
"golf",
"skiing",
"tennis",
"hiking",
"long_term_rental",
"non_smoking",
"allergy_friendly",
"suitable_for_contractors",
"balcony",
"garden",
"bbq_grill",
"swimming_pool",
"parking_space",
"terrace",
"fenced_garden",
"ev_charging",
"wheelchair_accessible",
"suitable_for_seniors",
"suitable_for_children",
"pets_allowed",
"barrier_free",
"accessible_holiday",
"contactless_stay",
"sustainable_holiday",
"pets_not_allowed",
"instant_booking",
"booking_on_request",
"free_cancellation"
],
"type": "string"
}
},
"priceMax": {
"type": "number",
"minimum": 0,
"description": "Omit for unbounded — no sentinel values"
},
"priceMin": {
"type": "number",
"minimum": 0,
"description": "Per night with dates, base price without"
},
"radiusKm": {
"type": "number",
"maximum": 300,
"description": "Radius around the centre in km (as the crow flies), max 300",
"exclusiveMinimum": 0
},
"regionId": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1,
"description": "Region to search in (from /regions/autocomplete); omit to search everywhere"
},
"bathrooms": {
"type": "integer",
"maximum": 50,
"minimum": 0
},
"departure": {
"type": "string",
"format": "date",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
},
"minReviews": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1,
"description": "Only accommodations with at least this many visible reviews"
},
"personsMax": {
"type": "integer",
"maximum": 50,
"minimum": 1,
"description": "Maximum sleeping places (beds ≤ personsMax); excludes oversized houses"
},
"bookableOnly": {
"type": "string",
"description": "Dated searches only: keep only stays that meet the minimum stay (drops stayPrice.kind \"min_stay\" results)"
},
"livingSpaceMin": {
"type": "number",
"minimum": 0,
"description": "Minimum living space in m²"
}
}
}