Endpoints: 28,729MCP servers: 18,413Payout addresses: 2,070Paid calls: 1,523Letters: 13Defects: 1,322counted 3 min ago
teppi

Server definition

Hash
sha256:e6b06ceafbc6e2b59bc00e0e0c01117f721f7b57ed7636581cd0224d197d5165
What it is
What a remote MCP server returned when asked what it offers: 11 tools

The blob, as servednamed by its sha256

{ "instructions": "You are FlatHunt's Berlin housing co-pilot: a sharp, warm, decisive friend who helps people actually find and rent furnished apartments, studios, private rooms, and shared rooms in Berlin. Guide the user from a vague need to a verified shortlist and an informed next step. Do not dump listings or let a provider link substitute for explaining a recommendation. Search, get_listing, compare, and the listings widget work without login. Save listing and create_alert require the user to be signed in (OAuth). Tone: expert friend who knows Berlin housing. Be specific, opinionated when helpful, never vague. Match the user's language. Keep replies scannable (short paragraphs, bullets for options). Celebrate good finds briefly; never hype a weak match. Never sound helpless or bureaucratic. Personalization (use conversation history + tools, never invent preferences): - Remember and reuse stated constraints: budget, rooms, move-in date, must-have amenities, commute goals, vibe (quiet / nightlife / family / students), and areas already discussed. - When authenticated, call list_saved_listings and list_alerts early if relevant — use them as taste signals; reference them naturally. - If preferences conflict with inventory, say so and propose the best trade-offs (budget bump, adjacent Ortsteil, later availableFrom). - Ask at most 1–3 clarifying questions when a search would be guesswork. Prefer searching with sensible defaults over interrogation. Filters and soft criteria: - One precise search_listings with backend filters ≫ paging then hand-filtering. Put every hard constraint in that one call (limit max 20). Paginate only when meta.totalPages > 1 and the user asks for more — never page to drop small flats or wrong districts. - Structured filters: priceMin/priceMax, squareMetersMin/squareMetersMax, rooms[] (exact OR) or roomsMin/roomsMax, bedroomsMin, areas (list_areas ids — district polygons) OR lat+lng+radiusKm (nearby; never mix geo modes), availableFrom/availableTo (YYYY-MM-DD), personsMaxMin (2 for couples / 1 solo), depositMax, amenityTags (AND — e.g. wifi,parking; canonical snake_case only; never invent wiFi/hasWifi), petsAllowed, smokingAllowed, registrationPossible / anmeldungLikely, schufaRequired / noSchufaRequired / noSchufaLikely, studentsFriendly / onlyStudentsAllowed, providers, sortBy (rank|price|squareMeters|createdAt|availableFrom) + sortOrder. - Phrase map: \"from 40 m²\" → squareMetersMin=40; \"with Wi-Fi and parking\" → amenityTags=[\"wifi\",\"parking\"]; \"with Anmeldung\" → anmeldungLikely; \"no Schufa\" → noSchufaLikely; \"cheaper first\" → sortBy=price,sortOrder=asc. - Prefer amenityTags for known equipment (wifi, parking, wheelchair, dishwasher, washing_machine, elevator, balcony, … — full catalog snake_case). Policy flags (petsAllowed, …) stay booleans — never put them in amenityTags. Soft criteria WITHOUT a known tag: soft-filter from returned data. - Soft-filter workflow: 1) search_listings with hard + structured filters (incl. amenityTags when applicable). 2) On hits: amenityTags for filters/icons; amenitiesUnknown / buildingAmenitiesUnknown as plain text; also labels and title. 3) Verify promising ids with get_listing / compare_listings — inspect amenity tags/unknown, description, utilitiesIncluded, nearbyDistances, policy flags, personsMax, stay months. 4) Confidence: confirmed (tags/flags) > mentioned (description/title) > unknown. 5) Unknown ≠ absent — say it is not stated and confirm on the provider page. Never invent. 6) Only after checking enough candidates, say the soft criterion could not be verified; then offer create_alert on the hard/structured filters and keep helping. Berlin neighbourhood advice: - Give concrete area guidance (vibe, typical price tier, who it suits, commute trade-offs) as local context — not as FlatHunt inventory facts. - Never invent listing prices, availability, or amenities. Listing facts come only from tools. - District by name → list_areas → match name/slug → disambiguate Bezirk vs Ortsteil → pass ONLY returned ids. NEVER guess area IDs (berlin:bezirk:{slug} / berlin:ortsteil:{slug}). - Reuse ids already resolved in this conversation. If stock is thin, suggest 1–2 adjacent Ortsteile (with ids from list_areas) and explain why. Tool playbook (speed-to-verified-shortlist): 1. Resolve areas with list_areas when needed. 2. search_listings (limit=20) with all hard filters in one call; paginate only when the user wants more pages (meta.totalPages > 1), not to hand-filter size/district. 3. Soft-verify amenities via amenityTags / amenitiesUnknown / title / description as above. 4. render_listings_widget with the best 3–6 verified options (not an unranked dump). After a search, pass alertCriteria + short human name in the user's language. 5. compare_listings when choosing between 2–4 options; then recommend a winner. 6. get_listing when the user digs into one option. 7. Offer save_listing for strong likes; offer create_alert when inventory is thin or the hunt continues — never leave them without a next step. 8. Alert/widget names: short, human, user's language — never \"Alert\". Presentation after every search / widget / compare: - ALWAYS write a standalone textual summary. Widgets may not render on other devices/sessions — never rely on \"see the cards above\". - Lead with totals (shown vs checked vs total matches when known), then 1–3 strongest picks with WHY they fit (including soft-criteria confidence: confirmed / mentioned / unknown). - For each displayed listing include: area/location, monthly price, rooms, floor area, available-from, provider, soft-amenity confidence when relevant, and a clickable trackingUrl (prefer over detailsUrl). Describe the link action accurately: viewing a provider page is not automatically an application or confirmed booking. - End with ONE clear next step: open the top pick, save, widen search, or create an alert. Provider hand-off policy: - Use provider guidance to prevent bad recommendations, not to replace current listing facts. - Before ranking, account for any user-stated tenant status, need for an in-person viewing or Anmeldung, occupancy/couple/pet constraints, stay length, move-in budget, and available documents/guarantor. - Monthly rent is not necessarily the total move-in cost. Separate rent, deposit, platform/service fee, administration/cleaning charges, utilities and taxes when known; never infer an unstated amount. - A request, enquiry, pre-authorization, acceptance and signed contract are different stages. Describe only the stage the returned data or provider rules support. - Listing, checkout and contract terms override this summary. If an exact fee, refund, document, eligibility or deadline matters, verify the current official source or tell the user exactly what to confirm before paying. - If provider guidance conflicts with FlatHunt data or appears uncertain, state the uncertainty and send the user to the provider listing/help page. Never invent or silently resolve the conflict. - Surface only the 1–2 provider caveats that could change the user's decision. Share an official link when the caveat is material or the user asks; do not dump policy text into every result. - Amber (amber): Student-accommodation focused; do not promise eligibility to a non-student without checking the property. Expect proof of study/acceptance, identity and financial or guarantor documents. An enquiry or booking form is not a confirmed booking; viewing/video requests depend on the property manager. Check property-specific fees, deposit and cancellation terms before payment. Official sources: https://help.amberstudent.com/portal/en/kb/articles/booking-process | https://help.amberstudent.com/portal/en/kb/articles/what-documents-do-i-need | https://help.amberstudent.com/portal/en/kb/articles/how-to-find-the-right-room | https://amberstudent.com/terms - Uniplaces (uniplaces): Uniplaces is open to everyone, including students, expats and professionals; do not describe the provider itself as student-only. A specific listing may still impose its own tenant rules, which must be respected. Booking is normally remote; landlord contact details arrive after acceptance. The service fee is shown before the request, some landlords add separate administration charges, and cancellation conditions vary by listing. Official sources: https://www.uniplaces.com/help/tenants/getting-started/what-is-uniplaces-and-how-does-it-work/ | https://www.uniplaces.com/help/tenants/what-is-the-uniplaces-service-fee/ | https://www.uniplaces.com/help/tenants/payments-and-fees/what-is-the-admin-fee/ | https://www.uniplaces.com/help/tenants/cancellations/what-is-the-uniplaces-cancellation-policy/ - HousingAnywhere (housing-anywhere): Pre-booking in-person viewings are not supported by the platform; the user can message the landlord and request extra photos, video, a floor plan or draft contract. A booking request can become financially binding when accepted. First-month rent and a platform fee are paid through the platform; deposit or other landlord charges may be separate. Keep communication and payment on-platform and check required documents and the listing's cancellation policy. Official sources: https://answers.housinganywhere.com/en/articles/2185365-can-i-view-the-accommodation-in-person-before-booking | https://answers.housinganywhere.com/en/articles/2268990-how-do-i-rent-a-place-on-housinganywhere | https://answers.housinganywhere.com/en/articles/2498541-how-much-do-i-have-to-pay-when-i-book | https://answers.housinganywhere.com/en/articles/2185219-cancellation-policies-for-tenants - Spacest (spacest): The process is digital and visits are not normally arranged. The exact service fee appears after dates are entered; administration, registration, cleaning, utilities and deposit may be separate. The first month and service fee are authorized before acceptance and charged only after acceptance. Anmeldung, utilities, occupancy/couple rules and cancellation terms must be checked on the listing and in the request. Official sources: https://spacest.com/how-works | https://spacest.com/terms-and-conditions - Wunderflats (wunderflats): Booking is designed to be digital and most properties do not offer physical or virtual viewings, although a landlord may exceptionally agree. A request is not final until the landlord accepts and the required verification/payment steps are complete. Rent, deposit, final cleaning and any tenant service fee are distinct costs. Promise Anmeldung only when the listing confirms a Wohnungsgeberbestätigung. Official sources: https://wunderflats.com/en/help/post/75000054552 | https://wunderflats.com/en/help/post/75000054566 | https://wunderflats.com/en/help/post/75000054492 | https://wunderflats.com/en/help/post/75000054497 - Urban Ground (urban-ground): A booking payment can temporarily hold a property and is credited toward rent; documents are reviewed before the rental contract and the deposit is handled separately. Visits may be scheduled where offered. Document requirements depend on employment/student status and time in Germany. Do not equate 'no rental commission' with no extra costs: utilities, cleaning or short-stay tax treatment can still vary. Registration paperwork follows move-in/handover. Official sources: https://urbanground.de/en-GB/faq - Blueground (blueground): Treat this as a managed/direct booking flow rather than a marketplace enquiry. The checkout, booking confirmation and city-specific guest agreement control the final total and terms. Deposit, utilities, cleaning/service/card or other charges, cancellation and early termination can vary; partner-managed homes may follow different rules. Never promise a viewing or Anmeldung unless the listing or Blueground confirms it. Official sources: https://www.theblueground.com/contracts/ber/terms | https://www.theblueground.com/terms Honesty boundaries: - FlatHunt does not guarantee availability. Prices and terms are set by providers and may change. - Never call a provider universally student-only, viewing-friendly, commission-free, Anmeldung- eligible or refundable unless the current listing and provider terms support that exact claim. - Never invent listing ids, prices, photos, URLs, or amenities. - Do not dump raw JSON or internal fields. Keep content compact and decision-oriented.", "tools": [ { "description": "Return normalized detail fields for 2–10 FlatHunt listings by numeric id in one read-only response. Includes prices, location, amenities, rental-policy flags, capacity, description, utilities, nearby distances, provider and tracking URLs for side-by-side comparison.", "inputSchema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "properties": { "listingIds": { "description": "Between 2 and 10 unique listing ids.", "items": { "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxItems": 10, "minItems": 2, "type": "array" } }, "required": [ "listingIds" ], "type": "object" }, "name": "compare_listings", "outputSchema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "additionalProperties": false, "properties": { "listings": { "items": { "additionalProperties": false, "properties": { "address": { "type": "string" }, "amenitiesUnknown": { "items": { "type": "string" }, "type": "array" }, "amenityTags": { "items": { "type": "string" }, "type": "array" }, "anmeldungLikely": { "type": "boolean" }, "area": { "type": "string" }, "areaSquareMeters": { "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "availableFrom": { "type": "string" }, "availableTo": { "type": "string" }, "bathrooms": { "type": "number" }, "bedrooms": { "type": "number" }, "buildingAmenitiesUnknown": { "items": { "type": "string" }, "type": "array" }, "buildingAmenityTags": { "items": { "type": "string" }, "type": "array" }, "childrenAllowed": { "type": "boolean" }, "couplesAllowed": { "type": "boolean" }, "deposit": { "type": "number" }, "depositFormatted": { "type": "string" }, "description": { "type": "string" }, "detailsUrl": { "type": "string" }, "floor": { "type": "string" }, "furnished": { "type": "string" }, "guarantorRequired": { "type": "boolean" }, "housingType": { "type": "string" }, "id": { "type": "number" }, "images": { "items": { "additionalProperties": false, "properties": { "alt": { "type": "string" }, "height": { "type": "number" }, "thumbnailUrl": { "type": "string" }, "url": { "type": "string" }, "width": { "type": "number" } }, "required": [ "url" ], "type": "object" }, "type": "array" }, "labels": { "items": { "type": "string" }, "type": "array" }, "lat": { "type": "number" }, "lng": { "type": "number" }, "location": { "type": "string" }, "maxAge": { "type": "number" }, "maxStayMonths": { "type": "number" }, "minAge": { "type": "number" }, "minStayMonths": { "type": "number" }, "nearbyDistances": { "items": { "additionalProperties": false, "properties": { "distance": { "type": "string" }, "place": { "type": "string" } }, "required": [ "place", "distance" ], "type": "object" }, "type": "array" }, "noDeposit": { "type": "boolean" }, "noSchufaLikely": { "type": "boolean" }, "noSchufaRequired": { "type": "boolean" }, "onlyStudentsAllowed": { "type": "boolean" }, "partyAllowed": { "type": "boolean" }, "personsMax": { "type": "number" }, "petsAllowed": { "type": "boolean" }, "postCode": { "type": "string" }, "preferredGender": { "type": "string" }, "price": { "type": "number" }, "priceFormatted": { "type": "string" }, "propertySubtype": { "type": "string" }, "provider": { "additionalProperties": false, "properties": { "id": { "type": "string" }, "logoUrl": { "type": "string" }, "name": { "type": "string" } }, "required": [ "id", "name" ], "type": "object" }, "registrationPossible": { "type": "boolean" }, "roomType": { "enum": [ "private", "shared" ], "type": "string" }, "rooms": { "type": [ "number", "string" ] }, "saved": { "type": "boolean" }, "schufaRequired": { "type": "boolean" }, "smokingAllowed": { "type": "boolean" }, "studentsFriendly": { "type": "boolean" }, "title": { "type": "string" }, "trackingUrl": { "type": "string" }, "utilitiesCost": { "type": "number" }, "utilitiesIncluded": { "items": { "type": "string" }, "type": "array" }, "virtualTourUrl": { "type": "string" } }, "required": [ "id", "title" ], "type": "object" }, "type": "array" } }, "required": [ "listings" ], "type": "object" } }, { "description": "Create a saved search alert so FlatHunt notifies the user about new matching Berlin listings. Accepts housing, price, size, rooms, availability, canonical area ids, amenity and rental-policy filters. Email notifications are enabled by default; Telegram too when the user has linked Telegram on FlatHunt. Requires the alerts.write scope.", "inputSchema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "properties": { "amenityTags": { "description": "Canonical amenity tags (AND). Backend filters listings that have ALL of these tags. Catalog (snake_case only): wifi, parking, bike_parking, wheelchair, dishwasher, washing_machine, dryer, elevator, balcony, desk, tv, oven, heating, furnished, fridge, microwave, cooktop, coffee_machine, iron, hair_dryer, closet, wardrobe, bed, bathtub, shower, garden, basement, air_conditioning, parking_street, workspace, fitness, concierge, laundry, pets_friendly. Do not invent aliases (wiFi, hasWifi, Waschmaschine).", "items": { "minLength": 1, "type": "string" }, "maxItems": 10, "type": "array" }, "anmeldungLikely": { "description": "true = Anmeldung likely (broader). Prefer for \"with Anmeldung\" unless the user needs a hard guarantee.", "type": "boolean" }, "areas": { "description": "Canonical Berlin area IDs from list_areas (e.g. berlin:ortsteil:prenzlauer-berg). Up to 20 IDs; multiple IDs are combined with OR. District / Ortsteil mode — do not mix with lat/lng/radiusKm. When the user names an area, call list_areas first. Pass only canonical IDs returned by list_areas. Never construct, translate, normalize, or guess IDs.", "items": { "type": "string" }, "maxItems": 20, "type": "array" }, "availableFrom": { "description": "Available from / not earlier than (YYYY-MM-DD), e.g. \"2026-08-01\".", "pattern": "^\\d{4}-\\d{2}-\\d{2}$", "type": "string" }, "availableTo": { "description": "Available until / not later than (YYYY-MM-DD).", "pattern": "^\\d{4}-\\d{2}-\\d{2}$", "type": "string" }, "bedroomsMin": { "description": "Minimum number of bedrooms (from provider extra data when available).", "minimum": 0, "type": "number" }, "depositMax": { "description": "Maximum deposit (Kaution) in EUR.", "minimum": 0, "type": "number" }, "housingType": { "description": "Type of housing. Studios map to apartment; room includes both private and shared rooms unless roomType narrows it.", "enum": [ "room", "apartment" ], "type": "string" }, "lat": { "description": "Latitude for nearby search; must be provided with lng (+ radiusKm). Do not mix with areas.", "type": "number" }, "lng": { "description": "Longitude for nearby search; must be provided with lat (+ radiusKm). Do not mix with areas.", "type": "number" }, "name": { "description": "Optional short label for the saved search (max 120 characters). If omitted, FlatHunt derives a concise label from housing type, budget and location filters.", "maxLength": 120, "minLength": 1, "type": "string" }, "noSchufaLikely": { "description": "true = Schufa likely not required (broader). Prefer for \"without Schufa\".", "type": "boolean" }, "noSchufaRequired": { "description": "true = Schufa explicitly not required (strict).", "type": "boolean" }, "onlyStudentsAllowed": { "description": "true = students-only listings.", "type": "boolean" }, "personsMaxMin": { "description": "Minimum capacity (personsMax). Use 2 for couples, 1 for solo — filters listings that can accommodate at least this many people.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "petsAllowed": { "description": "true = pets explicitly allowed.", "type": "boolean" }, "postCode": { "description": "Exact Berlin post code (PLZ), e.g. 10115.", "type": "string" }, "priceMax": { "description": "Maximum monthly price in EUR.", "minimum": 0, "type": "number" }, "priceMin": { "description": "Minimum monthly price in EUR.", "minimum": 0, "type": "number" }, "providers": { "description": "Restrict to specific housing providers (ids from the providers catalog).", "items": { "type": "string" }, "maxItems": 10, "type": "array" }, "radiusKm": { "description": "Search radius in km around lat/lng (min 0.1, max 25). Nearby mode — do not mix with areas.", "maximum": 25, "minimum": 0.1, "type": "number" }, "registrationPossible": { "description": "true = Anmeldung / registration explicitly possible (strict).", "type": "boolean" }, "roomType": { "description": "Room occupancy: private = one private bedroom in shared housing; shared = a bed in a shared bedroom. Omit to include both. housingType=room remains the broad backwards-compatible filter.", "enum": [ "private", "shared" ], "type": "string" }, "rooms": { "description": "Exact room counts (OR). Allowed values only: \"studio\", \"1\", \"2\", …, \"10\" (strings, not numbers). Prefer over roomsMin/roomsMax for \"1–2 rooms\": [\"1\",\"2\"] or [\"studio\",\"1\"].", "items": { "enum": [ "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "studio" ], "type": "string" }, "maxItems": 10, "type": "array" }, "roomsMax": { "description": "Maximum rooms. Prefer rooms[] for exact OR lists.", "minimum": 0, "type": "number" }, "roomsMin": { "description": "Minimum rooms (studio = 0). Prefer rooms[] for exact OR lists.", "minimum": 0, "type": "number" }, "schufaRequired": { "description": "true = Schufa required.", "type": "boolean" }, "smokingAllowed": { "description": "false = non-smokers only / smoking not allowed.", "type": "boolean" }, "sortBy": { "description": "Sort field (default rank). sortOrder is ignored when sortBy=rank. Cheaper first → price+asc; larger area → squareMeters+desc.", "enum": [ "rank", "price", "squareMeters", "createdAt", "availableFrom" ], "type": "string" }, "sortOrder": { "description": "Sort direction (default desc). Ignored when sortBy=rank.", "enum": [ "asc", "desc" ], "type": "string" }, "squareMetersMax": { "description": "Maximum living area in m².", "minimum": 0, "type": "number" }, "squareMetersMin": { "description": "Minimum living area in m². \"from 40 m²\" → 40. Filter on the backend — do not paginate to drop small listings.", "minimum": 0, "type": "number" }, "studentsFriendly": { "description": "true = student-oriented housing (broader).", "type": "boolean" } }, "type": "object" }, "name": "create_alert", "outputSchema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "additionalProperties": false, "properties": { "alert": { "additionalProperties": false, "properties": { "createdAt": { "type": "string" }, "id": { "type": "number" }, "name": { "type": "string" } }, "required": [ "id" ], "type": "object" } }, "required": [ "alert" ], "type": "object" } }, { "description": "Delete one or more of the current user's saved search alerts by numeric id. This is destructive and cannot be undone. Accepts 1–10 ids per call and requires alerts.write.", "inputSchema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "properties": { "alertId": { "description": "Deprecated single-id form; use alertIds: [id] instead.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "alertIds": { "description": "Between 1 and 10 alert ids to delete. Preferred for one or many.", "items": { "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxItems": 10, "minItems": 1, "type": "array" } }, "type": "object" }, "name": "delete_alert", "outputSchema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "additionalProperties": false, "properties": { "alertIds": { "items": { "type": "number" }, "type": "array" }, "deleted": { "type": "boolean" } }, "required": [ "deleted", "alertIds" ], "type": "object" } }, { "description": "Get detailed information about a single FlatHunt listing in Berlin by its numeric id. Returns its description, amenities, rental-policy flags, capacity, stay terms, utilities, nearby distances, media, provider and tracking URLs. Availability and provider terms may change.", "inputSchema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "properties": { "listingId": { "description": "Numeric FlatHunt listing id.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" } }, "required": [ "listingId" ], "type": "object" }, "name": "get_listing", "outputSchema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "additionalProperties": false, "properties": { "listing": { "additionalProperties": false, "properties": { "address": { "type": "string" }, "amenitiesUnknown": { "items": { "type": "string" }, "type": "array" }, "amenityTags": { "items": { "type": "string" }, "type": "array" }, "anmeldungLikely": { "type": "boolean" }, "area": { "type": "string" }, "areaSquareMeters": { "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "availableFrom": { "type": "string" }, "availableTo": { "type": "string" }, "bathrooms": { "type": "number" }, "bedrooms": { "type": "number" }, "buildingAmenitiesUnknown": { "items": { "type": "string" }, "type": "array" }, "buildingAmenityTags": { "items": { "type": "string" }, "type": "array" }, "childrenAllowed": { "type": "boolean" }, "couplesAllowed": { "type": "boolean" }, "deposit": { "type": "number" }, "depositFormatted": { "type": "string" }, "description": { "type": "string" }, "detailsUrl": { "type": "string" }, "floor": { "type": "string" }, "furnished": { "type": "string" }, "guarantorRequired": { "type": "boolean" }, "housingType": { "type": "string" }, "id": { "type": "number" }, "images": { "items": { "additionalProperties": false, "properties": { "alt": { "type": "string" }, "height": { "type": "number" }, "thumbnailUrl": { "type": "string" }, "url": { "type": "string" }, "width": { "type": "number" } }, "required": [ "url" ], "type": "object" }, "type": "array" }, "labels": { "items": { "type": "string" }, "type": "array" }, "lat": { "type": "number" }, "lng": { "type": "number" }, "location": { "type": "string" }, "maxAge": { "type": "number" }, "maxStayMonths": { "type": "number" }, "minAge": { "type": "number" }, "minStayMonths": { "type": "number" }, "nearbyDistances": { "items": { "additionalProperties": false, "properties": { "distance": { "type": "string" }, "place": { "type": "string" } }, "required": [ "place", "distance" ], "type": "object" }, "type": "array" }, "noDeposit": { "type": "boolean" }, "noSchufaLikely": { "type": "boolean" }, "noSchufaRequired": { "type": "boolean" }, "onlyStudentsAllowed": { "type": "boolean" }, "partyAllowed": { "type": "boolean" }, "personsMax": { "type": "number" }, "petsAllowed": { "type": "boolean" }, "postCode": { "type": "string" }, "preferredGender": { "type": "string" }, "price": { "type": "number" }, "priceFormatted": { "type": "string" }, "propertySubtype": { "type": "string" }, "provider": { "additionalProperties": false, "properties": { "id": { "type": "string" }, "logoUrl": { "type": "string" }, "name": { "type": "string" } }, "required": [ "id", "name" ], "type": "object" }, "registrationPossible": { "type": "boolean" }, "roomType": { "enum": [ "private", "shared" ], "type": "string" }, "rooms": { "type": [ "number", "string" ] }, "saved": { "type": "boolean" }, "schufaRequired": { "type": "boolean" }, "smokingAllowed": { "type": "boolean" }, "studentsFriendly": { "type": "boolean" }, "title": { "type": "string" }, "trackingUrl": { "type": "string" }, "utilitiesCost": { "type": "number" }, "utilitiesIncluded": { "items": { "type": "string" }, "type": "array" }, "virtualTourUrl": { "type": "string" } }, "required": [ "id", "title" ], "type": "object" } }, "required": [ "listing" ], "type": "object" } }, { "description": "List the current user's saved search alerts on FlatHunt, including each alert's numeric id, name and creation time when available. Requires alerts.read.", "inputSchema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "properties": {}, "type": "object" }, "name": "list_alerts", "outputSchema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "additionalProperties": false, "properties": { "alerts": { "items": { "additionalProperties": false, "properties": { "createdAt": { "type": "string" }, "id": { "type": "number" }, "name": { "type": "string" } }, "required": [ "id" ], "type": "object" }, "type": "array" } }, "required": [ "alerts" ], "type": "object" } }, { "description": "List supported Berlin districts (Bezirke) and neighbourhoods (Ortsteile) with canonical FlatHunt ids. Returns id, name, slug, type and parent area information, with optional name and type filtering. Mitte exists both as a whole Bezirk (berlin:bezirk:mitte) and as a smaller Ortsteil (berlin:ortsteil:mitte). Charlottenburg is an Ortsteil; the parent Bezirk is Charlottenburg-Wilmersdorf.", "inputSchema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "properties": { "query": { "description": "Optional case-insensitive substring filter on area name or slug. Omit to return the full catalog (109 areas).", "type": "string" }, "type": { "description": "Optional filter by area type.", "enum": [ "bezirk", "ortsteil" ], "type": "string" } }, "type": "object" }, "name": "list_areas", "outputSchema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "additionalProperties": false, "properties": { "areas": { "items": { "additionalProperties": false, "properties": { "id": { "type": "string" }, "name": { "type": "string" }, "parentAreaId": { "type": [ "string", "null" ] }, "parentName": { "type": "string" }, "slug": { "type": "string" }, "type": { "enum": [ "bezirk", "ortsteil" ], "type": "string" } }, "required": [ "id", "name", "slug", "type" ], "type": "object" }, "type": "array" }, "catalogVersion": { "type": "string" }, "total": { "maximum": 9007199254740991, "minimum": 0, "type": "integer" } }, "required": [ "areas", "total", "catalogVersion" ], "type": "object" } }, { "description": "List the current user's saved (favorited) FlatHunt listings. Requires the favorites.read scope.", "inputSchema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "properties": {}, "type": "object" }, "name": "list_saved_listings", "outputSchema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "additionalProperties": false, "properties": { "savedListings": { "items": { "additionalProperties": false, "properties": { "listing": { "additionalProperties": false, "properties": { "amenitiesUnknown": { "items": { "type": "string" }, "type": "array" }, "amenityTags": { "items": { "type": "string" }, "type": "array" }, "anmeldungLikely": { "type": "boolean" }, "area": { "type": "string" }, "areaSquareMeters": { "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "availableFrom": { "type": "string" }, "availableTo": { "type": "string" }, "bathrooms": { "type": "number" }, "bedrooms": { "type": "number" }, "buildingAmenitiesUnknown": { "items": { "type": "string" }, "type": "array" }, "buildingAmenityTags": { "items": { "type": "string" }, "type": "array" }, "childrenAllowed": { "type": "boolean" }, "couplesAllowed": { "type": "boolean" }, "deposit": { "type": "number" }, "depositFormatted": { "type": "string" }, "detailsUrl": { "type": "string" }, "floor": { "type": "string" }, "furnished": { "type": "string" }, "guarantorRequired": { "type": "boolean" }, "housingType": { "type": "string" }, "id": { "type": "number" }, "images": { "items": { "additionalProperties": false, "properties": { "alt": { "type": "string" }, "height": { "type": "number" }, "thumbnailUrl": { "type": "string" }, "url": { "type": "string" }, "width": { "type": "number" } }, "required": [ "url" ], "type": "object" }, "type": "array" }, "labels": { "items": { "type": "string" }, "type": "array" }, "location": { "type": "string" }, "maxAge": { "type": "number" }, "maxStayMonths": { "type": "number" }, "minAge": { "type": "number" }, "minStayMonths": { "type": "number" }, "noDeposit": { "type": "boolean" }, "noSchufaLikely": { "type": "boolean" }, "noSchufaRequired": { "type": "boolean" }, "onlyStudentsAllowed": { "type": "boolean" }, "partyAllowed": { "type": "boolean" }, "personsMax": { "type": "number" }, "petsAllowed": { "type": "boolean" }, "postCode": { "type": "string" }, "preferredGender": { "type": "string" }, "price": { "type": "number" }, "priceFormatted": { "type": "string" }, "propertySubtype": { "type": "string" }, "provider": { "additionalProperties": false, "properties": { "id": { "type": "string" }, "logoUrl": { "type": "string" }, "name": { "type": "string" } }, "required": [ "id", "name" ], "type": "object" }, "registrationPossible": { "type": "boolean" }, "roomType": { "enum": [ "private", "shared" ], "type": "string" }, "rooms": { "type": [ "number", "string" ] }, "schufaRequired": { "type": "boolean" }, "smokingAllowed": { "type": "boolean" }, "studentsFriendly": { "type": "boolean" }, "title": { "type": "string" }, "trackingUrl": { "type": "string" } }, "required": [ "id", "title" ], "type": "object" }, "listingId": { "type": "number" }, "savedAt": { "type": "string" } }, "required": [ "listingId" ], "type": "object" }, "type": "array" } }, "required": [ "savedListings" ], "type": "object" } }, { "description": "Remove a listing from the current user's saved (favorited) listings by its numeric id. Requires the favorites.write scope.", "inputSchema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "properties": { "listingId": { "description": "Numeric id of the listing to remove.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" } }, "required": [ "listingId" ], "type": "object" }, "name": "remove_saved_listing", "outputSchema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "additionalProperties": false, "properties": { "listingId": { "type": "number" }, "removed": { "type": "boolean" } }, "required": [ "removed", "listingId" ], "type": "object" } }, { "description": "Return UI-ready cards and an interactive MCP Apps gallery for 1–10 FlatHunt listing ids. The tool refreshes current listing data and displays images, provider, price, availability and listing actions. Optional alertCriteria adds a saved-search control for the represented filters.", "inputSchema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "properties": { "alertCriteria": { "description": "Optional saved-search criteria represented by this result set. Every nested field is optional. Pagination and sort fields are not accepted.", "properties": { "amenityTags": { "description": "Optional. Canonical amenity tags (AND) from the search, e.g. wifi, parking, washing_machine.", "items": { "type": "string" }, "type": "array" }, "anmeldungLikely": { "description": "Optional. Anmeldung-likely filter from the search.", "type": "boolean" }, "areas": { "description": "Optional. Canonical area ids from list_areas used in the search.", "items": { "type": "string" }, "type": "array" }, "availableFrom": { "description": "Optional. Available-from date (YYYY-MM-DD) from the search.", "pattern": "^\\d{4}-\\d{2}-\\d{2}$", "type": "string" }, "availableTo": { "description": "Optional. Available-to date (YYYY-MM-DD) from the search.", "pattern": "^\\d{4}-\\d{2}-\\d{2}$", "type": "string" }, "bedroomsMin": { "description": "Optional. Minimum bedrooms from the search.", "minimum": 0, "type": "number" }, "depositMax": { "description": "Optional. Maximum deposit EUR from the search.", "minimum": 0, "type": "number" }, "housingType": { "description": "Optional. Same housingType as the preceding search_listings call.", "enum": [ "room", "apartment" ], "type": "string" }, "lat": { "description": "Optional. Nearby-search latitude (with lng).", "type": "number" }, "lng": { "description": "Optional. Nearby-search longitude (with lat).", "type": "number" }, "name": { "description": "Optional. Short saved-search label in the user's language so Save search uses a meaningful name (not a generic default).", "maxLength": 120, "minLength": 1, "type": "string" }, "noSchufaLikely": { "description": "Optional. No-Schufa-likely filter from the search.", "type": "boolean" }, "noSchufaRequired": { "description": "Optional. No-Schufa-required filter from the search.", "type": "boolean" }, "onlyStudentsAllowed": { "description": "Optional. Students-only filter from the search.", "type": "boolean" }, "personsMaxMin": { "description": "Optional. Minimum capacity from the search.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "petsAllowed": { "description": "Optional. Pets filter from the search.", "type": "boolean" }, "postCode": { "description": "Optional. Exact Berlin PLZ from the search.", "type": "string" }, "priceMax": { "description": "Optional. Maximum monthly price in EUR from the search.", "minimum": 0, "type": "number" }, "priceMin": { "description": "Optional. Minimum monthly price in EUR from the search.", "minimum": 0, "type": "number" }, "providers": { "description": "Optional. Provider ids from the search.", "items": { "type": "string" }, "type": "array" }, "radiusKm": { "description": "Optional. Nearby-search radius in km.", "exclusiveMinimum": 0, "type": "number" }, "registrationPossible": { "description": "Optional. Anmeldung/registration filter from the search.", "type": "boolean" }, "roomType": { "description": "Optional. Same roomType as the preceding search_listings call.", "enum": [ "private", "shared" ], "type": "string" }, "rooms": { "description": "Optional. Exact room counts from the search. Allowed: \"studio\", \"1\"…\"10\" (strings only).", "items": { "enum": [ "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "studio" ], "type": "string" }, "type": "array" }, "roomsMax": { "description": "Optional. Maximum rooms from the search.", "minimum": 0, "type": "number" }, "roomsMin": { "description": "Optional. Minimum rooms from the search (studio = 0).", "minimum": 0, "type": "number" }, "schufaRequired": { "description": "Optional. Schufa-required filter from the search.", "type": "boolean" }, "smokingAllowed": { "description": "Optional. Smoking filter from the search.", "type": "boolean" }, "squareMetersMax": { "description": "Optional. Maximum living area m² from the search.", "minimum": 0, "type": "number" }, "squareMetersMin": { "description": "Optional. Minimum living area m² from the search.", "minimum": 0, "type": "number" }, "studentsFriendly": { "description": "Optional. Students-friendly filter from the search.", "type": "boolean" } }, "type": "object" }, "listingIds": { "description": "Between 1 and 10 unique FlatHunt listing ids.", "items": { "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "maxItems": 10, "minItems": 1, "type": "array" } }, "required": [ "listingIds" ], "type": "object" }, "name": "render_listings_widget", "outputSchema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "additionalProperties": false, "properties": { "alertCriteria": { "additionalProperties": false, "description": "Optional object. If present, include only the filter keys used in the preceding search_listings call — every nested field is optional; omit unused keys. Never require all fields. Do not include page, limit, sortBy, or sortOrder.", "properties": { "amenityTags": { "description": "Optional. Canonical amenity tags (AND) from the search, e.g. wifi, parking, washing_machine.", "items": { "type": "string" }, "type": "array" }, "anmeldungLikely": { "description": "Optional. Anmeldung-likely filter from the search.", "type": "boolean" }, "areas": { "description": "Optional. Canonical area ids from list_areas used in the search.", "items": { "type": "string" }, "type": "array" }, "availableFrom": { "description": "Optional. Available-from date (YYYY-MM-DD) from the search.", "pattern": "^\\d{4}-\\d{2}-\\d{2}$", "type": "string" }, "availableTo": { "description": "Optional. Available-to date (YYYY-MM-DD) from the search.", "pattern": "^\\d{4}-\\d{2}-\\d{2}$", "type": "string" }, "bedroomsMin": { "description": "Optional. Minimum bedrooms from the search.", "minimum": 0, "type": "number" }, "depositMax": { "description": "Optional. Maximum deposit EUR from the search.", "minimum": 0, "type": "number" }, "housingType": { "description": "Optional. Same housingType as the preceding search_listings call.", "enum": [ "room", "apartment" ], "type": "string" }, "lat": { "description": "Optional. Nearby-search latitude (with lng).", "type": "number" }, "lng": { "description": "Optional. Nearby-search longitude (with lat).", "type": "number" }, "name": { "description": "Optional. Short saved-search label in the user's language so Save search uses a meaningful name (not a generic default).", "maxLength": 120, "minLength": 1, "type": "string" }, "noSchufaLikely": { "description": "Optional. No-Schufa-likely filter from the search.", "type": "boolean" }, "noSchufaRequired": { "description": "Optional. No-Schufa-required filter from the search.", "type": "boolean" }, "onlyStudentsAllowed": { "description": "Optional. Students-only filter from the search.", "type": "boolean" }, "personsMaxMin": { "description": "Optional. Minimum capacity from the search.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "petsAllowed": { "description": "Optional. Pets filter from the search.", "type": "boolean" }, "postCode": { "description": "Optional. Exact Berlin PLZ from the search.", "type": "string" }, "priceMax": { "description": "Optional. Maximum monthly price in EUR from the search.", "minimum": 0, "type": "number" }, "priceMin": { "description": "Optional. Minimum monthly price in EUR from the search.", "minimum": 0, "type": "number" }, "providers": { "description": "Optional. Provider ids from the search.", "items": { "type": "string" }, "type": "array" }, "radiusKm": { "description": "Optional. Nearby-search radius in km.", "exclusiveMinimum": 0, "type": "number" }, "registrationPossible": { "description": "Optional. Anmeldung/registration filter from the search.", "type": "boolean" }, "roomType": { "description": "Optional. Same roomType as the preceding search_listings call.", "enum": [ "private", "shared" ], "type": "string" }, "rooms": { "description": "Optional. Exact room counts from the search. Allowed: \"studio\", \"1\"…\"10\" (strings only).", "items": { "enum": [ "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "studio" ], "type": "string" }, "type": "array" }, "roomsMax": { "description": "Optional. Maximum rooms from the search.", "minimum": 0, "type": "number" }, "roomsMin": { "description": "Optional. Minimum rooms from the search (studio = 0).", "minimum": 0, "type": "number" }, "schufaRequired": { "description": "Optional. Schufa-required filter from the search.", "type": "boolean" }, "smokingAllowed": { "description": "Optional. Smoking filter from the search.", "type": "boolean" }, "squareMetersMax": { "description": "Optional. Maximum living area m² from the search.", "minimum": 0, "type": "number" }, "squareMetersMin": { "description": "Optional. Minimum living area m² from the search.", "minimum": 0, "type": "number" }, "studentsFriendly": { "description": "Optional. Students-friendly filter from the search.", "type": "boolean" } }, "type": "object" }, "listings": { "items": { "additionalProperties": false, "properties": { "address": { "type": "string" }, "amenities": { "items": { "additionalProperties": false, "properties": { "icon": { "type": "string" }, "id": { "type": "string" }, "label": { "type": "string" }, "tone": { "enum": [ "neutral", "positive" ], "type": "string" } }, "required": [ "id", "label", "tone" ], "type": "object" }, "type": "array" }, "amenitiesMoreCount": { "maximum": 9007199254740991, "minimum": 0, "type": "integer" }, "area": { "type": "string" }, "areaSquareMeters": { "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "available": { "type": "boolean" }, "availableFrom": { "type": "string" }, "availableFromFormatted": { "type": "string" }, "availableTo": { "type": "string" }, "bathrooms": { "type": "number" }, "bedrooms": { "type": "number" }, "deposit": { "type": "number" }, "depositFormatted": { "type": "string" }, "detailsUrl": { "type": "string" }, "housingType": { "type": "string" }, "id": { "type": "number" }, "images": { "items": { "additionalProperties": false, "properties": { "alt": { "type": "string" }, "height": { "type": "number" }, "thumbnailUrl": { "type": "string" }, "url": { "type": "string" }, "width": { "type": "number" } }, "required": [ "url" ], "type": "object" }, "type": "array" }, "labels": { "items": { "type": "string" }, "type": "array" }, "noDeposit": { "type": "boolean" }, "personsMax": { "type": "number" }, "petsAllowed": { "type": "boolean" }, "price": { "type": "number" }, "priceFormatted": { "type": "string" }, "provider": { "additionalProperties": false, "properties": { "id": { "type": "string" }, "logoUrl": { "type": "string" }, "name": { "type": "string" } }, "required": [ "id", "name" ], "type": "object" }, "registrationPossible": { "type": "boolean" }, "roomType": { "enum": [ "private", "shared" ], "type": "string" }, "rooms": { "type": [ "number", "string" ] }, "saved": { "type": "boolean" }, "title": { "type": "string" }, "trackingUrl": { "type": "string" } }, "required": [ "id", "available", "images", "amenities", "amenitiesMoreCount" ], "type": "object" }, "type": "array" } }, "required": [ "listings" ], "type": "object" } }, { "description": "Save (favorite) a FlatHunt listing for the current user by its numeric id. Requires the favorites.write scope. Ownership and duplicate handling are enforced by FlatHunt.", "inputSchema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "properties": { "listingId": { "description": "Numeric id of the listing to save.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" } }, "required": [ "listingId" ], "type": "object" }, "name": "save_listing", "outputSchema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "additionalProperties": false, "properties": { "listingId": { "type": "number" }, "saved": { "type": "boolean" } }, "required": [ "saved", "listingId" ], "type": "object" } }, { "description": "Search current furnished apartments, studios, private rooms and shared rooms in Berlin through FlatHunt. Supports price, size, rooms, bedrooms, canonical area ids or nearby coordinates, availability dates, capacity, deposit, providers, amenity tags, rental-policy flags, sorting and pagination up to 20 results. Returns normalized listing summaries and pagination metadata. Availability, prices and provider terms may change.", "inputSchema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "properties": { "amenityTags": { "description": "Canonical amenity tags (AND). Backend filters listings that have ALL of these tags. Catalog (snake_case only): wifi, parking, bike_parking, wheelchair, dishwasher, washing_machine, dryer, elevator, balcony, desk, tv, oven, heating, furnished, fridge, microwave, cooktop, coffee_machine, iron, hair_dryer, closet, wardrobe, bed, bathtub, shower, garden, basement, air_conditioning, parking_street, workspace, fitness, concierge, laundry, pets_friendly. Do not invent aliases (wiFi, hasWifi, Waschmaschine).", "items": { "minLength": 1, "type": "string" }, "maxItems": 10, "type": "array" }, "anmeldungLikely": { "description": "true = Anmeldung likely (broader). Prefer for \"with Anmeldung\" unless the user needs a hard guarantee.", "type": "boolean" }, "areas": { "description": "Canonical Berlin area IDs from list_areas (e.g. berlin:ortsteil:prenzlauer-berg). Up to 20 IDs; multiple IDs are combined with OR. District / Ortsteil mode — do not mix with lat/lng/radiusKm. When the user names an area, call list_areas first. Pass only canonical IDs returned by list_areas. Never construct, translate, normalize, or guess IDs.", "items": { "type": "string" }, "maxItems": 20, "type": "array" }, "availableFrom": { "description": "Available from / not earlier than (YYYY-MM-DD), e.g. \"2026-08-01\".", "pattern": "^\\d{4}-\\d{2}-\\d{2}$", "type": "string" }, "availableTo": { "description": "Available until / not later than (YYYY-MM-DD).", "pattern": "^\\d{4}-\\d{2}-\\d{2}$", "type": "string" }, "bedroomsMin": { "description": "Minimum number of bedrooms (from provider extra data when available).", "minimum": 0, "type": "number" }, "depositMax": { "description": "Maximum deposit (Kaution) in EUR.", "minimum": 0, "type": "number" }, "housingType": { "description": "Type of housing. Studios map to apartment; room includes both private and shared rooms unless roomType narrows it.", "enum": [ "room", "apartment" ], "type": "string" }, "lat": { "description": "Latitude for nearby search; must be provided with lng (+ radiusKm). Do not mix with areas.", "type": "number" }, "limit": { "description": "Results per page (default 10, max 20).", "exclusiveMinimum": 0, "maximum": 20, "type": "integer" }, "lng": { "description": "Longitude for nearby search; must be provided with lat (+ radiusKm). Do not mix with areas.", "type": "number" }, "noSchufaLikely": { "description": "true = Schufa likely not required (broader). Prefer for \"without Schufa\".", "type": "boolean" }, "noSchufaRequired": { "description": "true = Schufa explicitly not required (strict).", "type": "boolean" }, "onlyStudentsAllowed": { "description": "true = students-only listings.", "type": "boolean" }, "page": { "description": "Page number (default 1).", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "personsMaxMin": { "description": "Minimum capacity (personsMax). Use 2 for couples, 1 for solo — filters listings that can accommodate at least this many people.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "petsAllowed": { "description": "true = pets explicitly allowed.", "type": "boolean" }, "postCode": { "description": "Exact Berlin post code (PLZ), e.g. 10115.", "type": "string" }, "priceMax": { "description": "Maximum monthly price in EUR.", "minimum": 0, "type": "number" }, "priceMin": { "description": "Minimum monthly price in EUR.", "minimum": 0, "type": "number" }, "providers": { "description": "Restrict to specific housing providers (ids from the providers catalog).", "items": { "type": "string" }, "maxItems": 10, "type": "array" }, "radiusKm": { "description": "Search radius in km around lat/lng (min 0.1, max 25). Nearby mode — do not mix with areas.", "maximum": 25, "minimum": 0.1, "type": "number" }, "registrationPossible": { "description": "true = Anmeldung / registration explicitly possible (strict).", "type": "boolean" }, "roomType": { "description": "Room occupancy: private = one private bedroom in shared housing; shared = a bed in a shared bedroom. Omit to include both. housingType=room remains the broad backwards-compatible filter.", "enum": [ "private", "shared" ], "type": "string" }, "rooms": { "description": "Exact room counts (OR). Allowed values only: \"studio\", \"1\", \"2\", …, \"10\" (strings, not numbers). Prefer over roomsMin/roomsMax for \"1–2 rooms\": [\"1\",\"2\"] or [\"studio\",\"1\"].", "items": { "enum": [ "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "studio" ], "type": "string" }, "maxItems": 10, "type": "array" }, "roomsMax": { "description": "Maximum rooms. Prefer rooms[] for exact OR lists.", "minimum": 0, "type": "number" }, "roomsMin": { "description": "Minimum rooms (studio = 0). Prefer rooms[] for exact OR lists.", "minimum": 0, "type": "number" }, "schufaRequired": { "description": "true = Schufa required.", "type": "boolean" }, "smokingAllowed": { "description": "false = non-smokers only / smoking not allowed.", "type": "boolean" }, "sortBy": { "description": "Sort field (default rank). sortOrder is ignored when sortBy=rank. Cheaper first → price+asc; larger area → squareMeters+desc.", "enum": [ "rank", "price", "squareMeters", "createdAt", "availableFrom" ], "type": "string" }, "sortOrder": { "description": "Sort direction (default desc). Ignored when sortBy=rank.", "enum": [ "asc", "desc" ], "type": "string" }, "squareMetersMax": { "description": "Maximum living area in m².", "minimum": 0, "type": "number" }, "squareMetersMin": { "description": "Minimum living area in m². \"from 40 m²\" → 40. Filter on the backend — do not paginate to drop small listings.", "minimum": 0, "type": "number" }, "studentsFriendly": { "description": "true = student-oriented housing (broader).", "type": "boolean" } }, "type": "object" }, "name": "search_listings", "outputSchema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "additionalProperties": false, "properties": { "listings": { "items": { "additionalProperties": false, "properties": { "amenitiesUnknown": { "items": { "type": "string" }, "type": "array" }, "amenityTags": { "items": { "type": "string" }, "type": "array" }, "anmeldungLikely": { "type": "boolean" }, "area": { "type": "string" }, "areaSquareMeters": { "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "availableFrom": { "type": "string" }, "availableTo": { "type": "string" }, "bathrooms": { "type": "number" }, "bedrooms": { "type": "number" }, "buildingAmenitiesUnknown": { "items": { "type": "string" }, "type": "array" }, "buildingAmenityTags": { "items": { "type": "string" }, "type": "array" }, "childrenAllowed": { "type": "boolean" }, "couplesAllowed": { "type": "boolean" }, "deposit": { "type": "number" }, "depositFormatted": { "type": "string" }, "detailsUrl": { "type": "string" }, "floor": { "type": "string" }, "furnished": { "type": "string" }, "guarantorRequired": { "type": "boolean" }, "housingType": { "type": "string" }, "id": { "type": "number" }, "images": { "items": { "additionalProperties": false, "properties": { "alt": { "type": "string" }, "height": { "type": "number" }, "thumbnailUrl": { "type": "string" }, "url": { "type": "string" }, "width": { "type": "number" } }, "required": [ "url" ], "type": "object" }, "type": "array" }, "labels": { "items": { "type": "string" }, "type": "array" }, "location": { "type": "string" }, "maxAge": { "type": "number" }, "maxStayMonths": { "type": "number" }, "minAge": { "type": "number" }, "minStayMonths": { "type": "number" }, "noDeposit": { "type": "boolean" }, "noSchufaLikely": { "type": "boolean" }, "noSchufaRequired": { "type": "boolean" }, "onlyStudentsAllowed": { "type": "boolean" }, "partyAllowed": { "type": "boolean" }, "personsMax": { "type": "number" }, "petsAllowed": { "type": "boolean" }, "postCode": { "type": "string" }, "preferredGender": { "type": "string" }, "price": { "type": "number" }, "priceFormatted": { "type": "string" }, "propertySubtype": { "type": "string" }, "provider": { "additionalProperties": false, "properties": { "id": { "type": "string" }, "logoUrl": { "type": "string" }, "name": { "type": "string" } }, "required": [ "id", "name" ], "type": "object" }, "registrationPossible": { "type": "boolean" }, "roomType": { "enum": [ "private", "shared" ], "type": "string" }, "rooms": { "type": [ "number", "string" ] }, "schufaRequired": { "type": "boolean" }, "smokingAllowed": { "type": "boolean" }, "studentsFriendly": { "type": "boolean" }, "title": { "type": "string" }, "trackingUrl": { "type": "string" } }, "required": [ "id", "title" ], "type": "object" }, "type": "array" }, "pagination": { "additionalProperties": false, "properties": { "limit": { "type": "number" }, "page": { "type": "number" }, "total": { "type": "number" }, "totalPages": { "type": "number" } }, "required": [ "page", "limit", "total", "totalPages" ], "type": "object" } }, "required": [ "listings", "pagination" ], "type": "object" } } ] }
Verify it yourselfcurl -s https://api.teppi.xyz/v1/evidence/sha256:e6b06ceafbc6e2b59bc00e0e0c01117f721f7b57ed7636581cd0224d197d5165 | sha256sum