Airbnb MCP
Server Details
Airbnb stays worldwide: search by place, dates, guests with total prices and links; listing details.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 2 tools
airbnb_search returns a ranked list of stays for a place/date query, while airbnb_listing returns full detail for a single known id — complementary, non-overlapping operations. The search description explicitly hands off to airbnb_listing ('Pass a listing's `id` to airbnb_listing for amenities, house rules and the host'), removing any doubt about which to call.
Both tools follow the same airbnb_<noun> convention with snake_case and no stray casing or verb-style drift. The pattern is predictable and immediately signals the resource being addressed.
Two tools is on the thin side, but for a read-only Airbnb scraper the search-plus-detail pair does cover the two essential operations. There is no room for adjacent reads (reviews, host's other listings, calendar/availability) that a user of this domain would plausibly expect.
The pair covers the full browse-then-inspect workflow with rich detail: pricing with dates, availability, amenities, house rules, host, photos and pagination hints. Gaps are minor but real — no way to fetch guest reviews or a host's other listings, and availability can only be probed via dated searches rather than a calendar.
Available Tools
2 toolsairbnb_listingGet one Airbnb listingAInspect
Full details of one Airbnb listing: name, type, capacity, bedrooms/beds/baths, sleeping arrangements, amenities (and notable ones missing), description (trimmed), house rules with check-in/check-out times, the host (name, Superhost, company or individual, years hosting, response rate — no contact details), the rating with its categories, approximate location, highlights and photos. With checkin/checkout it also returns the price for that stay and guests — the TOTAL incl. all fees (price), price_per_night, price_before_discount, price_breakdown — and available: false when the listing cannot be booked for those dates or that many guests (the note says why). Without dates there is no price (Airbnb prices only dated stays). Scraped live from airbnb.pl (typically ~1 s via direct fetch; ~10 s when it falls back to an unblocker). Two requests with dates (the page, then a dated search around it for the price). Result: { source, fetchedAt, query, page_url, listing: { id, url, name, kind, room_type, property_type, summary, overview, capacity, bedrooms, beds, baths, location: { name, lat, lng, approximate }, rating, review_count, rating_categories, guest_favorite, is_new, host: { name, superhost, verified, business, years_hosting, rating, review_count, response_rate, response_time, about }, description, checkin_from, checkin_until, checkout_by, house_rules, additional_rules, sleeping: [{ room, beds }], amenities, amenities_not_included, highlights, photos, stay, guests, available, free_cancellation, price_basis, price, price_per_night, price_per_month, price_before_discount, nights, currency, price_text, price_breakdown }, note? }. Text fields are Airbnb's Polish wording.
| Name | Required | Description | Default |
|---|---|---|---|
| pets | No | Pets (limits results to pet-friendly stays). Default 0. | |
| adults | No | Adults (13+). Default 2. | |
| checkin | No | Arrival date, YYYY-MM-DD (from today to about two years ahead). Pass together with checkout; omit both for Airbnb's own suggested dates. | |
| infants | No | Infants under 2 (not counted as guests). Default 0. | |
| listing | Yes | The listing: its `id` from airbnb_search (e.g. '49891381') or its link from any Airbnb domain (https://www.airbnb.pl/rooms/49891381, https://www.airbnb.com/rooms/49891381). | |
| checkout | No | Departure date, YYYY-MM-DD, after checkin (at most 365 nights; 28+ nights are quoted per month). | |
| children | No | Children aged 2–12. adults + children ≤ 16. Default 0. | |
| currency | No | 3-letter ISO currency for prices, e.g. 'PLN' (default), 'EUR', 'USD', 'GBP'. | |
| no_cache | No | Force a fresh fetch and bypass this server's result cache (5 min). Default false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden and does so: it discloses live scraping from airbnb.pl, latency (~1 s direct, ~10 s via unblocker fallback), that dated calls issue two requests, that host contact details are deliberately omitted, that Polish wording is returned, and what `available: false` means with the note explaining why. This is exactly the behavioral context an agent needs before calling.
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?
Purpose and pricing behavior are correctly front-loaded, but the single-sentence 'Result: { ... }' dump of every nested field is a dense run-on wall of text that is hard to scan. The content is largely justified (there is no output schema), yet the delivery is unstructured enough to slow an agent down.
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 9-parameter, no-annotation, no-output-schema tool, the description covers purpose, cost/latency, request count, output shape, availability semantics, and known limitations (language, no price without dates, no host contacts). Nothing material is missing for correct invocation.
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 coverage is 100%, so the baseline is 3, but the description adds meaning the schema does not: it ties checkin/checkout and the guest counts to concrete output effects (total price incl. fees, price_per_night, price_before_discount, availability). It does not explain the interplay of adults/children/infants or the no_cache caching semantics beyond what the schema already says.
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?
Opens with a specific verb+resource ('Full details of one Airbnb listing') and immediately enumerates the facets returned, which cleanly separates it from the sibling airbnb_search (which finds listings rather than detailing one). An agent can pick between the two 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?
States the key conditional: 'With checkin/checkout it also returns the price... Without dates there is no price (Airbnb prices only dated stays)', which tells the agent when the tool is and isn't useful for pricing. The relationship to airbnb_search is only implied here (the ID sourcing is spelled out in the schema, not the description), so the when-to-use-vs-alternative guidance isn't fully explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
airbnb_searchSearch Airbnb staysAInspect
Search places to stay on Airbnb — apartments, houses, rooms, cabins, villas and hotels — in any city, region or country, for given dates and guests: price for the stay, rating and review count, Guest favourite / Superhost badges, beds and baths, coordinates, photos and a link that opens the same stay. Filter by room type, minimum bedrooms and total price. One page is up to 18 stays; page 2–15 for more (Airbnb caps a search at 270). Pass a listing's id to airbnb_listing for amenities, house rules and the host. Scraped live from airbnb.pl (typically ~1 s via direct fetch; ~10 s when it falls back to an unblocker). WITH checkin + checkout, price is the TOTAL for the whole stay for the given guests, all fees and taxes included (Airbnb's EU total-price display), in currency; price_per_night = price ÷ nights; price_before_discount is the struck-through total when discounted; price_breakdown lists Airbnb's own lines (e.g. '2 noce x 245,00 zł' → 490, 'Podatki' → 8). Stays of 28+ nights are quoted per month: price null, price_per_month set. WITHOUT dates, Airbnb prices each listing for its own suggested stay (its stay, usually ~5 nights soon), so prices are not comparable and not a quote — a note says so; pass dates to quote a trip. Only stays bookable for the given dates are listed. Result shape: { source, fetchedAt, query, search_url, place: { query, place_id, resolved, city, region, country }, stay: { checkin, checkout, nights } | null, guests: { adults, children, infants, pets }, currency, total_count, page, total_pages, count, listings: [...], note? } — the list key is listings; total_count is Airbnb's count of matches (more than it lets you page through). Each listing: { id, url, name, kind, city, details, bedrooms, beds, baths, host_type, rating, review_count, is_new, guest_favorite, superhost, badges, free_cancellation, stay, price_basis, price, price_per_night, price_per_month, price_before_discount, nights, currency, price_text, price_breakdown, lat, lng, photos }. rating is 0–5; kind/city/details/price_text are Airbnb's Polish wording (e.g. kind 'Mieszkanie' = apartment, 'Pokój' = room, 'Dom' = house); host_type is business | private; coordinates are approximate (Airbnb blurs them). An empty match answers count: 0 with a note saying why and what to change — that is a successful result, not an error.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Results page, 1-based (18 stays per page, at most 15 pages). Default 1. | |
| pets | No | Pets (limits results to pet-friendly stays). Default 0. | |
| place | Yes | Where to stay — a city, region, area or country, as you would type it into Airbnb: 'Zakopane', 'Kraków', 'Mazury', 'Lisbon, Portugal', 'Tuscany'. Add the country to disambiguate. Latin script (diacritics are fine). | |
| adults | No | Adults (13+). Default 2. | |
| checkin | No | Arrival date, YYYY-MM-DD (from today to about two years ahead). Pass together with checkout; omit both for Airbnb's own suggested dates. | |
| infants | No | Infants under 2 (not counted as guests). Default 0. | |
| checkout | No | Departure date, YYYY-MM-DD, after checkin (at most 365 nights; 28+ nights are quoted per month). | |
| children | No | Children aged 2–12. adults + children ≤ 16. Default 0. | |
| currency | No | 3-letter ISO currency for prices, e.g. 'PLN' (default), 'EUR', 'USD', 'GBP'. | |
| no_cache | No | Force a fresh fetch and bypass this server's result cache (5 min). Default false. | |
| price_max | No | Maximum total price for the whole stay incl. fees, whole units of `currency` (needs dates). | |
| price_min | No | Minimum total price for the whole stay incl. fees, whole units of `currency` (needs dates). | |
| room_type | No | Only 'entire_home' (the whole place to yourself) or only 'private_room'. Default: any. | |
| min_bedrooms | No | At least this many bedrooms. |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | |
| page | Yes | |
| stay | No | |
| count | Yes | |
| place | Yes | |
| query | Yes | |
| guests | No | |
| source | Yes | |
| currency | No | |
| listings | Yes | |
| fetchedAt | Yes | |
| search_url | Yes | |
| total_count | No | |
| total_pages | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so: discloses the data source (scraped live from airbnb.pl), latency profile (~1 s direct fetch, ~10 s via unblocker fallback), the 270-result / 15-page cap, the 5-minute cache implied by no_cache, currency/price-basis semantics, 28+ night monthly quoting, approximate blurred coordinates, and Polish-language field values.
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 purpose and key caveats, and most sentences earn their place, but the long enumeration of the full result object and per-listing field list is largely redundant given an output schema exists. It is dense and information-rich but would benefit from trimming the return-shape prose.
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 14-parameter scraping tool with no annotations, it covers pricing basis, pagination limits, caching, latency, language quirks, failure semantics and sibling handoff. Nothing an agent needs to call it correctly or interpret results 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 coverage is 100%, so baseline is 3, but the description adds genuine meaning beyond the schema: `price` is the all-in total for the stay for the given guests, `price_per_night` = price ÷ nights, `price_before_discount` is the struck-through total, `page` caps at 270 results across 15 pages. It doesn't restate per-parameter constraints (guests caps, date formats) that the schema already covers, which 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 (search places to stay on Airbnb) plus property types and geographic scope, and explicitly separates itself from airbnb_listing ('Pass a listing's `id` to airbnb_listing for amenities, house rules and the host'). An agent can route between the two siblings 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?
Gives explicit when-tos and when-nots: pass checkin+checkout to get a comparable quoted total, omit both to get Airbnb's suggested-stay prices which are 'not comparable and not a quote'; use `page` 2–15 for more results; use airbnb_listing for amenities. It even explains that an empty match is a successful result with guidance, not an error.
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
- First observed
airbnb_listing - First observed
airbnb_search
Related MCP Connectors
Airbnb listings by city or room link: price for dates, ratings, amenities, host, location, photos.
Searchable directory of Airbnb listings — discover properties and retrieve direct Airbnb links.
Airbnb stays by location and dates, and full listing details, as structured JSON.
Public Airbnb listings with numeric prices, ratings, photos and automatic price splitting.
Related MCP Servers
- AlicenseBqualityDmaintenanceEnables searching for Airbnb listings and retrieving detailed accommodation information with direct links to Airbnb pages.21MIT
- AlicenseBqualityBmaintenanceEnables Airbnb searches with location, date, guest, price, and property type filters, and retrieval of detailed listing information such as amenities, house rules, and direct booking links.22,609 npmMIT
- AlicenseCqualityDmaintenanceEnables searching Airbnb listings with advanced filtering (location, dates, guests, price) and retrieval of detailed property information including amenities, policies, and booking links.42,609 npm2MIT
- AlicenseNot gradedqualityDmaintenanceEnables users to search Airbnb listings using natural language, including flexible dates, guest counts, price range, property type, and amenities. It provides listing summaries and details but does not handle bookings.GPL 3.0
Glama MCP Gateway
Add one secure layer between your agents and this server.