Skip to main content
Glama

Airbnb Search & Listings - Desktop Extension (DXT)

A comprehensive Desktop Extension for searching Airbnb listings with advanced filtering capabilities and detailed property information retrieval. Built as a Model Context Protocol (MCP) server packaged in the Desktop Extension (DXT) format for easy installation and use with compatible AI applications.

Features

🔍 Advanced Search Capabilities

  • Location-based search with support for cities, states, and regions

  • Google Maps Place ID integration for precise location targeting

  • Date filtering with check-in and check-out date support

  • Guest configuration including adults, children, infants, and pets

  • Price range filtering with minimum and maximum price constraints

  • Pagination support for browsing through large result sets

🏠 Detailed Property Information

  • Comprehensive listing details including amenities, policies, and highlights

  • Location information with coordinates and neighborhood details

  • House rules and policies for informed booking decisions

  • Property descriptions and key features

  • Direct links to Airbnb listings for easy booking

🛡️ Security & Compliance

  • Robots.txt compliance with configurable override for testing

  • Request timeout management to prevent hanging requests

  • Enhanced error handling with detailed logging

  • Rate limiting awareness and respectful API usage

  • Secure configuration through DXT user settings

Related MCP server: Airbnb MCP Server

Installation

For Claude Desktop

This extension is packaged as a Desktop Extension (DXT) file. To install:

  1. Download the .dxt file from the releases page

  2. Open your compatible AI application (e.g., Claude Desktop)

  3. Install the extension through the application's extension manager

  4. Configure the extension settings as needed

For Cursor, etc.

Before starting make sure Node.js is installed on your desktop for npx to work.

  1. Go to: Cursor Settings > Tools & Integrations > New MCP Server

  2. Add one the following to your mcp.json:

    {
      "mcpServers": {
        "airbnb": {
          "command": "npx",
          "args": [
            "-y",
            "@openbnb/mcp-server-airbnb"
          ]
        }
      }
    }

    To ignore robots.txt for all requests, use this version with --ignore-robots-txt args

    {
      "mcpServers": {
        "airbnb": {
          "command": "npx",
          "args": [
            "-y",
            "@openbnb/mcp-server-airbnb",
            "--ignore-robots-txt"
          ]
        }
      }
    }
  3. Restart.

Configuration

The extension provides the following user-configurable options:

Ignore robots.txt

  • Type: Boolean (checkbox)

  • Default: false

  • Description: Bypass robots.txt restrictions when making requests to Airbnb

  • Recommendation: Keep disabled unless needed for testing purposes

Tools

Search for Airbnb listings with comprehensive filtering options.

Parameters:

  • location (required): Location to search (e.g., "San Francisco, CA")

  • placeId (optional): Google Maps Place ID (overrides location)

  • checkin (optional): Check-in date in YYYY-MM-DD format

  • checkout (optional): Check-out date in YYYY-MM-DD format

  • adults (optional): Number of adults (default: 1)

  • children (optional): Number of children (default: 0)

  • infants (optional): Number of infants (default: 0)

  • pets (optional): Number of pets (default: 0)

  • minPrice (optional): Minimum price per night

  • maxPrice (optional): Maximum price per night

  • cursor (optional): Pagination cursor for browsing results

  • ignoreRobotsText (optional): Override robots.txt for this request

Returns:

  • Search results with property details, pricing, and direct links

  • Pagination information for browsing additional results

  • Search URL for reference

airbnb_listing_details

Get detailed information about a specific Airbnb listing.

Parameters:

  • id (required): Airbnb listing ID

  • checkin (optional): Check-in date in YYYY-MM-DD format

  • checkout (optional): Check-out date in YYYY-MM-DD format

  • adults (optional): Number of adults (default: 1)

  • children (optional): Number of children (default: 0)

  • infants (optional): Number of infants (default: 0)

  • pets (optional): Number of pets (default: 0)

  • ignoreRobotsText (optional): Override robots.txt for this request

Returns:

  • Detailed property information including:

    • Location details with coordinates

    • Amenities and facilities

    • House rules and policies

    • Property highlights and descriptions

    • Direct link to the listing

Technical Details

Architecture

  • Runtime: Node.js 18+

  • Protocol: Model Context Protocol (MCP) via stdio transport

  • Format: Desktop Extension (DXT) v0.1

  • Dependencies: Minimal external dependencies for security and reliability

Error Handling

  • Comprehensive error logging with timestamps

  • Graceful degradation when Airbnb's page structure changes

  • Timeout protection for network requests

  • Detailed error messages for troubleshooting

Security Measures

  • Robots.txt compliance by default

  • Request timeout limits

  • Input validation and sanitization

  • Secure environment variable handling

  • No sensitive data storage

Performance

  • Efficient HTML parsing with Cheerio

  • Request caching where appropriate

  • Minimal memory footprint

  • Fast startup and response times

Compatibility

  • Platforms: macOS, Windows, Linux

  • Node.js: 18.0.0 or higher

  • Claude Desktop: 0.10.0 or higher

  • Other MCP clients: Compatible with any MCP-supporting application

Development

Building from Source

# Install dependencies
npm install

# Build the project
npm run build

# Watch for changes during development
npm run watch

Testing

The extension can be tested by running the MCP server directly:

# Run with robots.txt compliance (default)
node dist/index.js

# Run with robots.txt ignored (for testing)
node dist/index.js --ignore-robots-txt
  • Respect Airbnb's Terms of Service: This extension is for legitimate research and booking assistance

  • Robots.txt Compliance: The extension respects robots.txt by default

  • Rate Limiting: Be mindful of request frequency to avoid overwhelming Airbnb's servers

  • Data Usage: Only extract publicly available information for legitimate purposes

Support

  • Issues: Report bugs and feature requests on GitHub Issues

  • Documentation: Additional documentation available in the repository

  • Community: Join discussions about MCP and DXT development

License

MIT License - see LICENSE file for details.

Contributing

Contributions are welcome! Please read the contributing guidelines and submit pull requests for any improvements.


Note: This extension is not affiliated with Airbnb, Inc. It is an independent tool designed to help users search and analyze publicly available Airbnb listings.

Available Tools

4 tools
airbnb_listing_detailsC

Get detailed information about a specific Airbnb listing. Provide direct links to the user

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe Airbnb listing ID
checkinNoCheck-in date (YYYY-MM-DD)
checkoutNoCheck-out date (YYYY-MM-DD)
adultsNoNumber of adults
childrenNoNumber of children
infantsNoNumber of infants
petsNoNumber of pets
ignoreRobotsTextNoIgnore robots.txt rules for this request

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description bears full responsibility for disclosing behavior. It mentions that direct links are provided, but does not disclose side effects, whether the operation is read-only, permission requirements, error behavior, or any other behavioral traits. This is a significant gap for a tool expected to be called autonomously.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise at two sentences and the primary purpose is front-loaded. The second sentence about providing direct links is an added behavior, which is useful but could be integrated more seamlessly. No wasted words, though the structure could be tightened.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 8 parameters, no output schema, and no annotations, the description is not complete. It does not explain what 'detailed information' includes, how the optional parameters influence results, or what the expected response format looks like. An agent would have to guess many details about invocation and results.

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

Parameters3/5

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

All 8 parameters have descriptions in the schema (100% coverage), so the baseline of 3 applies. The tool description itself adds no additional meaning beyond what the schema already provides; it does not explain how parameters like pets, adults, or checkin/checkout dates affect the returned details or links.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves detailed information for a specific Airbnb listing and identifies that direct links are provided. It distinguishes implicitly from the sibling airbnb_search by focusing on a specific listing rather than searching, though it does not explicitly name the sibling.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given on when to use this tool versus airbnb_search. There is no mention of prerequisites (such as having a listing ID) or scenarios that would favor this tool over the search sibling. The description leaves usage entirely to inference.

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

analyzeListingPhotosC

Analyze photos from an Airbnb listing

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesAirbnb listing ID

TDQS

C2.6/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden for behavioral disclosure. It states the tool analyzes photos but doesn't describe what the analysis entails (e.g., returns scores, detects objects), potential side effects (e.g., rate limits, data processing), or output format. This is a significant gap for a tool with no structured behavioral hints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that directly states the tool's function without unnecessary words. It is appropriately sized for a simple tool, though it could be more front-loaded with key details like analysis type. There's no wasted text, earning a high score for conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has no annotations, no output schema, and a simple input schema, the description is incomplete. It doesn't explain what the analysis returns, how results are structured, or any behavioral traits like error handling. For a tool that presumably performs non-trivial photo analysis, this leaves critical gaps in understanding its operation.

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

Parameters3/5

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

The schema description coverage is 100%, with the single parameter 'id' documented as 'Airbnb listing ID'. The description doesn't add any meaning beyond this, such as format examples or constraints. Since the schema does the heavy lifting, the baseline score of 3 is appropriate, though no extra value is added.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states the action ('analyze') and resource ('photos from an Airbnb listing'), which provides a basic understanding of purpose. However, it lacks specificity about what analysis is performed (e.g., quality assessment, content detection) and doesn't distinguish from sibling tools like 'getListingPhotos' that might retrieve photos without analysis. This makes it vague but not tautological.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives. The description doesn't mention prerequisites, context (e.g., after fetching listing details), or comparisons to siblings like 'airbnb_listing_details' or 'getListingPhotos'. This leaves the agent without direction on appropriate usage scenarios.

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

getListingPhotosC

Extract photo URLs from an Airbnb listing

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesAirbnb listing ID

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden for behavioral disclosure. It states what the tool does but doesn't describe how it behaves: no information on rate limits, authentication needs, error handling, or what happens if the listing ID is invalid. For a tool with zero annotation coverage, this is a significant gap in transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that directly states the tool's function without unnecessary words. It's appropriately sized for a simple tool and front-loads the core purpose immediately.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no annotations and no output schema, the description is incomplete. It doesn't explain what the output looks like (e.g., format of extracted URLs, whether it's a list or structured data), nor does it cover behavioral aspects like error conditions. Given the lack of structured data, the description should provide more context to be fully helpful.

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

Parameters3/5

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

The schema description coverage is 100%, with the single parameter 'id' clearly documented as 'Airbnb listing ID'. The description doesn't add any parameter details beyond what the schema provides, so it meets the baseline for high schema coverage but doesn't enhance understanding of parameter usage or constraints.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('Extract') and resource ('photo URLs from an Airbnb listing'), making the purpose immediately understandable. However, it doesn't explicitly differentiate from sibling tools like 'analyzeListingPhotos' which might involve more complex photo analysis rather than just URL extraction.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives like 'airbnb_listing_details' (which might include photos) or 'analyzeListingPhotos'. It doesn't mention prerequisites, constraints, or typical use cases, leaving the agent to infer usage context.

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

Tool Schema Changelog

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

  1. 4 tool updates
    • First observedairbnb_listing_details
    • First observedairbnb_search
    • First observedanalyzeListingPhotos
    • First observedgetListingPhotos

TDQS

C2.6/5.0

Scored across 4 tools

Disambiguation3/5

The tools have some overlap that could cause confusion, particularly between 'analyzeListingPhotos' and 'getListingPhotos' which both handle listing photos but with different purposes (analysis vs. extraction). However, 'airbnb_listing_details' and 'airbnb_search' are clearly distinct for specific listing retrieval and general search, respectively, and descriptions help clarify the photo-related tools.

Naming Consistency2/5

Naming is inconsistent with mixed conventions: 'airbnb_listing_details' and 'airbnb_search' use snake_case with a prefix, while 'analyzeListingPhotos' and 'getListingPhotos' use camelCase without the prefix. This lack of a predictable pattern across all tools makes the set less coherent and harder for agents to navigate intuitively.

Tool Count3/5

With 4 tools, the count is borderline for the server's purpose of Airbnb search and listings. It feels thin, as core operations like booking, user reviews, or price updates are missing, but it covers basic search and listing details, which might be sufficient for a limited scope. A typical server in this domain would benefit from more tools to handle a fuller lifecycle.

Completeness2/5

There are significant gaps in the tool surface for the Airbnb domain. While search and listing details are covered, essential operations like booking a listing, managing reservations, accessing user reviews, or updating pricing are missing. This incompleteness will likely cause agent failures when trying to perform common tasks beyond basic lookup and photo analysis.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers