- Overview
- Architecture
- Tool Call Workflow
- Voice Command Examples
- MCP Server Setup
- Available Tools
- Dependencies
The Airbnb MCP Server is a Model Context Protocol (MCP) server that provides AI assistants with the ability to search and analyze Airbnb listings through natural language and voice commands. It integrates with LiveKit for voice interactions and supports both HTTP and STDIO communication protocols.
- π Advanced Airbnb listing search
- π° Price analysis across date ranges
- π Trip budget calculations
- π Listing comparisons
- π€ Voice-enabled interactions via LiveKit
- π οΈ Multiple MCP client support (Claude Desktop, Cursor, etc.)
flowchart TB
subgraph Client["Client Layer"]
Voice["Voice Input (LiveKit)"]
CLI["CLI/Desktop (Claude/Cursor)"]
end
subgraph MCPServer["MCP Server Layer"]
Server["MCP Server (server.py)"]
Tools["Tool Registry"]
end
subgraph ToolLayer["Tool Execution Layer"]
Search["Search Tool"]
Details["Listing Details"]
Price["Price Analyzer"]
Budget["Trip Budget"]
Compare["Compare Listings"]
Filter["Smart Filter"]
end
subgraph Utils["Utility Layer"]
HTTP["HTTP Client"]
DataProc["Data Processing"]
Schemas["Response Schemas"]
end
subgraph External["External Services"]
Airbnb["Airbnb API"]
end
Voice --> Server
CLI --> Server
Server --> Tools
Tools --> Search
Tools --> Details
Tools --> Price
Tools --> Budget
Tools --> Compare
Tools --> Filter
Search --> HTTP
Details --> HTTP
Price --> HTTP
Budget --> HTTP
Compare --> HTTP
Filter --> HTTP
HTTP --> DataProc
DataProc --> Schemas
HTTP --> Airbnb
style Server fill:#4CAF50,stroke:#2E7D32,stroke-width:3px
style Airbnb fill:#FF5A5F,stroke:#C41E3A,stroke-width:2px
style Voice fill:#3B82F6,stroke:#1E40AF,stroke-width:2px
- Handles MCP protocol communication
- Registers and manages available tools
- Routes requests to appropriate tool handlers
- Manages error handling and logging
Individual tools that handle specific Airbnb operations:
search.py- Basic listing searchlisting_details.py- Detailed property informationprice_analyzer.py- Multi-date price comparisontrip_budget.py- Budget calculations with feescompare_listings.py- Side-by-side comparisonssmart_filter.py- Advanced filtering and sorting
http_client.py- HTTP request handlingdata_processing.py- Response parsing and formattingschemas.py- Pydantic data models
- LiveKit agents for voice interaction
- MCP client configurations (Claude, Cursor)
sequenceDiagram
participant User
participant Client as MCP Client
participant Server as MCP Server
participant Tool as Tool Handler
participant API as Airbnb API
User->>Client: "Find Airbnb in Goa for 2 adults"
Client->>Server: MCP Tool Request
Note over Client,Server: {tool: "airbnb_search",<br/>params: {location: "Goa",<br/>adults: 2}}
Server->>Tool: Route to search.py
Tool->>Tool: Validate Parameters
Tool->>API: HTTP GET Request
Note over Tool,API: RapidAPI Headers<br/>Query Parameters
API-->>Tool: JSON Response
Tool->>Tool: Parse & Format Data
Tool->>Tool: Apply Schemas
Tool-->>Server: Structured Results
Server-->>Client: MCP Response
Client-->>User: Display Listings
-
User Input Processing
- Natural language or voice command received
- Client (Claude/Cursor/LiveKit) interprets intent
- Extracts parameters (location, dates, guests)
-
MCP Request Formation
{ "method": "tools/call", "params": { "name": "airbnb_search", "arguments": { "location": "Goa, India", "adults": 2, "checkin": "2025-12-20", "checkout": "2025-12-27" } } } -
Server-Side Processing
- Server validates tool exists
- Routes to appropriate tool handler
- Tool validates parameters against schema
-
API Interaction
# Example from search.py headers = { "X-RapidAPI-Key": RAPIDAPI_KEY, "X-RapidAPI-Host": "airbnb19.p.rapidapi.com" } params = { "query": location, "adults": adults, "checkin": checkin, "checkout": checkout } response = http_client.get(url, headers=headers, params=params)
-
Response Processing
- Parse JSON response
- Apply data transformations
- Format using Pydantic schemas
- Return structured data
-
Client Presentation
- Client receives structured response
- Formats for user (text, voice, or UI)
- Handles errors gracefully
User: "Hey, find me some Airbnbs in Goa for next month"
Agent: [Calls airbnb_search]
"I found 15 listings in Goa. Here are the top options..."
User: "Show me cheaper options under 5000 rupees per night"
Agent: [Calls airbnb_smart_filter with max_price=5000]
"I've filtered to 8 listings under βΉ5,000 per night..."
User: "What about the one near the beach?"
Agent: [Uses context from previous search]
"Let me get details on that beachfront villa..."
User: "Compare prices for Goa between Christmas week and New Year"
Agent: [Calls airbnb_price_analyzer]
"Christmas week (Dec 23-30) averages βΉ8,500/night,
while New Year week (Dec 30-Jan 6) averages βΉ12,000/night.
You'd save βΉ24,500 by choosing Christmas week!"
User: "When's the cheapest time to visit in the next 3 months?"
Agent: [Calls airbnb_price_analyzer with multiple date ranges]
"Based on my analysis, late January shows the lowest prices..."
User: "What's the total cost for that villa for 4 people for a week?"
Agent: [Calls airbnb_trip_budget]
"For 7 nights at βΉ6,000/night:
- Accommodation: βΉ42,000
- Service fee: βΉ6,300
- Taxes: βΉ2,520
Total: βΉ50,820 (βΉ12,705 per person)"
User: "Include cleaning fees in that"
Agent: [Accesses detailed pricing breakdown]
"With the βΉ2,000 cleaning fee, total is βΉ52,820..."
User: "Compare the villa and the apartment we looked at"
Agent: [Calls airbnb_compare_listings]
"Villa:
- Price: βΉ8,000/night, 3 bedrooms
- Rating: 4.8, Pool, Kitchen
Apartment:
- Price: βΉ4,500/night, 2 bedrooms
- Rating: 4.6, Kitchen, No pool
The villa offers better value for groups..."
User: "Which one has better reviews?"
Agent: [Analyzes rating data]
"The villa has a 4.8 rating from 127 reviews..."
User: "Find highly rated places with a pool, sorted by best value"
Agent: [Calls airbnb_smart_filter]
"Filtering for 4.5+ rating, pool amenity, sorted by value..."
User: "Show me only superhosts with instant booking"
Agent: [Applies multiple filters]
"Found 6 superhosts with instant booking available..."
- Python 3.10 or higher
- Git
- RapidAPI Key for Airbnb API
This option sets up only the MCP server for use with Claude Desktop, Cursor, or other MCP clients.
git clone https://github.com/vedantparmar12/airbnb-mcp.git
cd airbnb-mcpFor Windows:
cd mcp-server-airbnb
python -m venv venv
venv\Scripts\activateFor macOS/Linux:
cd mcp-server-airbnb
python3 -m venv venv
source venv/bin/activatepip install -r requirements.txtCreate .env file in mcp-server-airbnb directory:
RAPIDAPI_KEY=your_rapidapi_key_hereGet your RapidAPI key:
- Visit https://rapidapi.com/DataCrawler/api/airbnb19
- Sign up/Login
- Subscribe to free tier
- Copy your API key
python server.pyYou should see:
MCP Server running on stdio transport
Registered 6 tools
This option includes both the MCP server and LiveKit voice integration.
Windows:
git clone https://github.com/vedantparmar12/airbnb-mcp.git
cd airbnb-mcp
# Create venv for MCP server
cd mcp-server-airbnb
python -m venv venv_mcp
venv_mcp\Scripts\activate
pip install -r requirements.txt
deactivate
# Create venv for voice agent
cd ..
python -m venv venv_voice
venv_voice\Scripts\activate
pip install -r requirements.txtmacOS/Linux:
git clone https://github.com/vedantparmar12/airbnb-mcp.git
cd airbnb-mcp
# Create venv for MCP server
cd mcp-server-airbnb
python3 -m venv venv_mcp
source venv_mcp/bin/activate
pip install -r requirements.txt
deactivate
# Create venv for voice agent
cd ..
python3 -m venv venv_voice
source venv_voice/bin/activate
pip install -r requirements.txtCreate .env in root directory:
# API Keys
RAPIDAPI_KEY=your_rapidapi_key_here
OPENAI_API_KEY=your_openai_key_here
# LiveKit Configuration
LIVEKIT_URL=your_livekit_url
LIVEKIT_API_KEY=your_livekit_api_key
LIVEKIT_API_SECRET=your_livekit_api_secret
# Deepgram (for voice)
DEEPGRAM_API_KEY=your_deepgram_keyFor Windows:
Update livekit_mcp_agent.py line ~50:
server = MCPServer(
"airbnb",
"path/to/airbnb-mcp/mcp-server-airbnb/venv_mcp/Scripts/python.exe",
"path/to/airbnb-mcp/mcp-server-airbnb/server.py",
env={"RAPIDAPI_KEY": rapidapi_key}
)For macOS/Linux:
server = MCPServer(
"airbnb",
"path/to/airbnb-mcp/mcp-server-airbnb/venv_mcp/bin/python",
"path/to/airbnb-mcp/mcp-server-airbnb/server.py",
env={"RAPIDAPI_KEY": rapidapi_key}
)# Activate voice environment
source venv_voice/bin/activate # Linux/Mac
# or
venv_voice\Scripts\activate # Windows
# Run agent
python livekit_mcp_agent.py startEdit claude_desktop_config.json:
Windows:
{
"mcpServers": {
"airbnb": {
"command": "C:\\Users\\YourUser\\path\\to\\airbnb-mcp\\mcp-server-airbnb\\venv\\Scripts\\python.exe",
"args": [
"C:\\Users\\YourUser\\path\\to\\airbnb-mcp\\mcp-server-airbnb\\server.py"
],
"env": {
"RAPIDAPI_KEY": "your_rapidapi_key_here"
}
}
}
}macOS/Linux:
{
"mcpServers": {
"airbnb": {
"command": "/Users/youruser/path/to/airbnb-mcp/mcp-server-airbnb/venv/bin/python",
"args": [
"/Users/youruser/path/to/airbnb-mcp/mcp-server-airbnb/server.py"
],
"env": {
"RAPIDAPI_KEY": "your_rapidapi_key_here"
}
}
}
}Add to Cursor's MCP settings (.cursor/mcp_config.json):
{
"mcpServers": {
"airbnb": {
"command": "/absolute/path/to/venv/bin/python",
"args": ["/absolute/path/to/server.py"],
"env": {
"RAPIDAPI_KEY": "your_key_here"
}
}
}
}Basic search for Airbnb listings.
Parameters:
location(required): Location to searchadults(optional): Number of adults (default: 1)children(optional): Number of children (default: 0)checkin(optional): Check-in date (YYYY-MM-DD)checkout(optional): Check-out date (YYYY-MM-DD)limit(optional): Number of results (default: 10)
Example:
{
"location": "Goa, India",
"adults": 2,
"checkin": "2025-12-20",
"checkout": "2025-12-27"
}Get detailed information about a specific listing.
Parameters:
id(required): Airbnb listing IDadults,children,checkin,checkout(optional)
Compare prices across different date ranges.
Parameters:
location(required): Location to searchdate_ranges(required): List of {checkin, checkout} pairsadults,children(optional)
Example:
{
"location": "Goa, India",
"date_ranges": [
{"checkin": "2025-12-23", "checkout": "2025-12-30"},
{"checkin": "2025-12-30", "checkout": "2026-01-06"}
]
}Calculate total trip cost with all fees.
Parameters:
listing_id(required): Listing IDcheckin,checkout(required): Date rangeadults,children(optional)currency(optional): Currency code (default: INR)
Compare 2-5 listings side-by-side.
Parameters:
listing_ids(required): Array of 2-5 listing IDs- Date and guest parameters (optional)
Advanced search with filters and sorting.
Parameters:
location(required)min_price,max_price(optional): Price rangemin_rating(optional): Minimum rating (e.g., 4.5)sort_by(optional): "price", "rating", or "value"- Standard search parameters
httpx>=0.24.0
mcp>=0.9.0
python-dotenv>=1.0.0
livekit-agents
livekit-agents[mcp]
livekit-plugins-openai
livekit-plugins-deepgram
livekit-plugins-silero
livekit-plugins-turn-detector
graph TD
airbnb_mcp[Airbnb MCP]:::main
httpx[httpx]:::core
mcp[mcp]:::core
dotenv[python-dotenv]:::core
livekit[livekit-agents]:::voice
livekit_mcp[livekit-agents-mcp]:::voice
openai[livekit-plugins-openai]:::voice
deepgram[livekit-plugins-deepgram]:::voice
airbnb_mcp --> httpx
airbnb_mcp --> mcp
airbnb_mcp --> dotenv
airbnb_mcp -.optional.-> livekit
airbnb_mcp -.optional.-> livekit_mcp
airbnb_mcp -.optional.-> openai
airbnb_mcp -.optional.-> deepgram
classDef main fill:#4CAF50,stroke:#2E7D32,stroke-width:3px
classDef core fill:#2196F3,stroke:#1565C0,stroke-width:2px
classDef voice fill:#FF9800,stroke:#E65100,stroke-width:2px
-
Import Error: mcp module not found
pip install --upgrade mcp
-
RapidAPI Rate Limit
- Free tier: 50 requests/month
- Upgrade plan or wait for reset
-
Wrong Python Path in Config
- Use absolute paths
- Verify with:
which python(Linux/Mac) orwhere python(Windows)
-
LiveKit Connection Issues
- Check environment variables
- Verify LiveKit server is running
- Confirm API keys are correct
This project is provided as-is for educational and development purposes.
Contributions are welcome! Please:
- Fork the repository
- Create a feature branch
- Make your changes
- Submit a pull request
For issues and questions:
- GitHub Issues: https://github.com/vedantparmar12/airbnb-mcp/issues
- RapidAPI Support: https://rapidapi.com/support
Built with β€οΈ using Model Context Protocol (MCP)