Are you the author? Sign in to claim
Official DIDA Hotel Booking MCP Server. 14-year travel tech data stack, 2M+ hotels at wholesale rates, 40+ LLM compatibl
🏠 Apply Key · 🚀 Quick Start · 📚 Examples · 💬 Support · 🔍 Q&A · ✈ About Dida · 💰Earn with Dida
This is an official MCP server empowers AI Agents to search, compare, and book over 2 Million hotels globally. Powered by DIDA (Asia's #1 and world's #3 B2B travel platform), this server bridges the gap between AI travel recommendations and real-world bookings.
| Service | Endpoint | Available Tools | Authentication |
|---|---|---|---|
| Hotel MCP | https://mcp.rollinggo.ai/mcp | searchHotels, getHotelDetail, getHotelSearchTags | Authorization: Bearer <YOUR_API_KEY> |
streamable-httpDida MCP also offers an OAuth 2.0 Authorization Code flow, providing 7 tools including getHotelSearchTags, searchHotels, getHotelDetail, hotelPriceConfirm, searchHotelOrders, and more. This mode is designed for deep integration with enterprise-grade production applications and requires a business contact via contact@rollinggo.ai.
For Chinese users or workflows primarily targeting the mainland China market and Alipay payment systems, please refer to this version: Dida-hotel-MCP-CN
Traditional AI agents can only recommend hotels based on static training datasets. The DIDA Hotel MCP equips your LLM agent with direct, real-time transactional capabilities:
✅ Live Rates & Bookable Inventory — Zero-latency price verification; every result is instantly bookable.
✅ Supply Chain — The world's Top 3 travel B2B platform, 14 years in the making, fully API-native end-to-end.
✅ Global Hotel Network — 2,000,000+ properties across every major destination. 500+ suppliers covering every tier, from luxury chains to local boutiques.
✅ Direct Contracts — 110,000+ directly connected hotels with live price and inventory sync.
✅ Price Edge at Source — Priced upstream of OTAs; sharp rates on hot spots.
✅ Agent-Ready — Works with 40+ leading agents: Cursor, Claude Code, Codex, Windsurf, Copilot, and more.
✅ Earn your Revenue on Every MCP Call — Set country-specific markups, earn commission on every completed booking, and track your orders, earnings, and payouts in real time. Flexible withdrawals for both businesses and individual developers.
• Companies or individual developers building AI Agents
• Developers looking to integrate hotel booking capabilities into MCP Clients
• Developers building travel planning, business travel management, OTA, and lifestyle service agents
• Product teams seeking to validate AI Agent commercial transaction loops
• Individuals with needs for hotel search, price comparison, and price drop alerts******
Integrate global hotel search and booking into your AI assistant in under 5 minutes with no coding required.
Recommended clients: Claude CLI, Codex, and Cursor. Other MCP-compatible clients (such as Kiro, Doubao, etc.) can be configured similarly.
Create .mcp.json in your project root:
{
"mcpServers": {
"Dida-Hotel": {
"url": "https://mcp.rollinggo.ai/mcp",
"type": "http",
"headers": {
"Authorization": "Bearer YOUR_API_KEY"
}
}
}
}
Or add directly via the command line:
claude mcp add \
--transport http \
--header "Authorization: Bearer YOUR_API_KEY" \
Dida-Hotel \
https://mcp.rollinggo.ai/mcp
Config file location: .codex/config.json in the project root, or globally at ~/.codex/config.json
{
"mcpServers": {
"Dida-Hotel": {
"url": "https://mcp.rollinggo.ai/mcp",
"type": "streamable-http",
"headers": {
"Authorization": "Bearer YOUR_API_KEY"
}
}
}
}
Config file location: .cursor/mcp.json in the project root, or globally at ~/.cursor/mcp.json
{
"mcpServers": {
"Dida-Hotel": {
"url": "https://mcp.rollinggo.ai/mcp",
"type": "streamable-http",
"headers": {
"Authorization": "Bearer YOUR_API_KEY"
}
}
}
}
Replace
YOUR_API_KEYwith your actual API Key.
Note: cURL must include
-H "Accept: application/json, text/event-stream", otherwise the server will return a 400 error.
curl -X POST https://mcp.rollinggo.ai/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-H "Authorization: Bearer YOUR_API_KEY" \
-d '{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "searchHotels",
"arguments": {
"originQuery": "Shanghai Bund five-star hotel",
"place": "Shanghai Bund",
"placeType": "Attraction",
"checkInParam": {
"checkInDate": "2026-06-01",
"stayNights": 2
},
"filterOptions": {
"starRatings": [5.0]
},
"size": 3
}
},
"id": 1
}'
Once configured, simply tell your AI assistant:
"Find me a five-star hotel near the Shanghai Bund for a stay starting the day after tomorrow."
The AI will automatically call the searchHotels Tool and return a list of hotels.
{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "searchHotels",
"arguments": {
"originQuery": "Shanghai Bund five-star hotel",
"place": "Shanghai Bund",
"placeType": "Attraction",
"checkInParam": {
"checkInDate": "2026-06-01",
"stayNights": 2
},
"filterOptions": {
"starRatings": [5.0]
},
"size": 3
}
},
"id": 1
}
Searching for "Shanghai Bund five-star hotel", 2 nights, returns:
| Hotel | Stars | Lowest Price/Night | Distance to Bund |
|---|---|---|---|
| Fairmont Peace Hotel Shanghai | ⭐⭐⭐⭐⭐ | $648 | 124m |
| The Peninsula Shanghai | ⭐⭐⭐⭐⭐ | $940 | 252m |
{
"message": "Hotel search successful",
"hotelInformationList": [
{
"hotelId": 29529,
"bookingUrl": "https://rollinggo.ai/pages/hotel/detail/index?...",
"name": "Fairmont Peace Hotel on the Bund",
"address": "No. 20 Nanjing East Road",
"starRating": 5.0,
"price": {
"message": "Price query successful. Lowest price: 648, Currency: USD",
"hasPrice": true,
"currency": "USD",
"lowestPrice": 648.0
},
"hotelAmenities": ["Bar", "Gym", "Pool", "SPA", "Parking", "WIFI"],
"tags": ["SPA Service", "Resort Hotel", "Sports-Friendly Hotel"]
}
]
}
Official Docs | Dida MCP Tools
The server registers 3 core tools to handle the complete search-to-book lifecycle:
Find hotels by location, date, price, star rating, and tags.
originQuery (string, required): User's raw text request (e.g., "Find boutique hotels in Tokyo under $200").place (string, required): Specific destination, attraction, or airport name.placeType (string, required): Location type (city, airport, point_of_interest, hotel, etc.). Supported values: city, airport, point_of_interest, train_station, subway_station, hotel, district/county, detailed address.countryCode (string, optional): ISO 3166-1 alpha-2 country code, e.g. CN, US.size (number, optional, default: 5): Number of hotels to return, max 20.checkInParam (object, optional): Check-in related parameters.filterOptions (object, optional): Filter parameters.hotelTags (object, optional): Tag / brand / budget filters.checkInParam fields:
adultCount (number, optional, default: 2): Adults per room.checkInDate (string, optional, format: YYYY-MM-DD): Check-in date. If omitted, in the past, or malformed, defaults to tomorrow.stayNights (number, optional, default: 1): Number of nights (max 28).filterOptions fields:
distanceInMeter (number, optional): Straight-line distance from POI in meters. Defaults to 2000 when a POI is used.starRatings (number[], optional): Star rating range, defaults to [0.0, 5.0], step 0.5.hotelTags fields:
requiredTags (string[], optional): Required tags (hard constraint).preferredBrands (string[], optional): Preferred brands.maxPricePerNight (number, optional): Max budget per night (CNY).{
"message": "Hotel search succeeded",
"hotelInformationList": [
{
"hotelId": 43615,
"bookingUrl": "https://rollinggo.ai/pages/hotel/detail/index?...",
"name": "Sunworld Dynasty Hotel Beijing",
"brand": null,
"address": "50 Wangfujing Street",
"destinationId": "6140156",
"latitude": 39.917748,
"longitude": 116.412249,
"distanceInMeters": 205,
"starRating": 5.0,
"price": {
"message": "Price found, lowest: 626.0, currency: CNY",
"hasPrice": true,
"currency": "CNY",
"lowestPrice": 626.0
},
"areaCode": "CN",
"description": "...",
"imageUrl": "https://image-cdn.RollingGo.com/...",
"hotelAmenities": ["24h Front Desk", "WiFi"],
"score": 1.0,
"tags": ["Near Shopping Mall", "Free WiFi"]
}
]
}
Note:
priceis an object, not a number. Fields may be missing ornulldepending on city/supply source.
Fetch real-time room types, dynamic pricing, inventory, and cancellation policies for a selected hotel.
hotelId (number, optional): Hotel ID. Mutually exclusive with name; if both are provided, hotelId takes priority.name (string, optional): Hotel name (fuzzy match).dateParam (object, optional): Check-in / check-out date parameters.occupancyParam (object, optional): Guest count and room count parameters.localeParam (object, optional): Country and currency parameters.dateParam fields:
checkInDate (string, optional, format: YYYY-MM-DD): Check-in date. Defaults to tomorrow if empty, malformed, or in the past.checkOutDate (string, optional, format: YYYY-MM-DD): Check-out date. Defaults to checkInDate + 1 day if empty, malformed, or not after check-in.occupancyParam fields:
adultCount (number, optional, default: 2): Adults per room.childCount (number, optional, default: 0): Children per room.childAgeDetails (number[], optional): Child ages, e.g. [3, 5].roomCount (number, optional, default: 1): Number of rooms.localeParam fields:
countryCode (string, optional, default: US): ISO 3166-1 alpha-2 country code.currency (string, optional, default: USD): Currency code.{
"success": true,
"errorMessage": null,
"hotelId": 43615,
"bookingUrl": "https://rollinggo.ai/pages/hotel/detail/index?...",
"name": "Sunworld Dynasty Hotel Beijing",
"checkIn": "2026-03-05",
"checkOut": "2026-03-06",
"roomRatePlans": [
{
"roomTypeId": 4984714,
"roomName": "Superior Room",
"roomNameCn": "高级客房",
"ratePlanId": "7012072001634754626",
"ratePlanName": "Superior Room King Bed, 1 King Bed",
"bedType": 73,
"bedTypeDescription": "Unknown",
"currency": "CNY",
"totalPrice": 0,
"totalSalesRate": null,
"inventoryCount": null,
"isOnRequest": null,
"recommendIndex": null,
"cancellationPolicies": [
{
"fromDate": "2026-03-02T10:00:00+08:00",
"toDate": null,
"amount": 634,
"percent": null,
"type": null,
"description": null
}
],
"includedFees": null,
"excludedFees": null,
"metadata": null
}
]
}
Note: On failure, the response may contain an error message (e.g. "Failed to fetch pricing, please retry later") or structured error fields. The
roomRatePlansarray can be long — consider paginating or limiting display on the client side.
Retrieve metadata containing all filterable tag names (e.g., "Free WiFi", "Gym", "Kid-Friendly") to refine search filtering. Suitable for local caching and client-side intent mapping.
{
"tags": [
{
"name": "Free WiFi",
"category": "Core Amenities",
"description": "Provides free WiFi"
}
],
"usageGuide": {
"tagUsage": "Place tag names into hotelTags.preferredTags (preference), requiredTags (hard requirement), or excludedTags (exclusion)",
"exampleRequest": "{...}"
}
}
Common tag categories:
{
"originQuery": "Find 4-star+ hotels in Beijing for 2 nights",
"place": "Beijing",
"placeType": "city",
"checkInParam": {
"checkInDate": "2026-03-01",
"stayNights": 2
},
"filterOptions": {
"starRatings": [4.0, 5.0]
},
"size": 5
}
{
"originQuery": "Find quality hotels in Beijing with free WiFi, budget under 1000 per night",
"place": "Beijing",
"placeType": "city",
"hotelTags": {
"requiredTags": ["Free WiFi"],
"maxPricePerNight": 1000
},
"size": 5
}
{
"hotelId": 43615,
"dateParam": {
"checkInDate": "2026-03-05",
"checkOutDate": "2026-03-06"
},
"occupancyParam": {
"adultCount": 2,
"roomCount": 1
},
"localeParam": {
"currency": "CNY",
"countryCode": "CN"
}
}
Q1: The client doesn't show the Tool after configuration
url and type are correctAuthorization header is correctQ2: Returns 401 Unauthorized Invalid or incorrectly formatted API Key:
mcp_Authorization: Bearer YOUR_API_KEY, there must be a space after BearerQ3: Returns 400 Bad Request Common when calling directly with cURL. Check that the Accept header is included:
-H "Accept: application/json, text/event-stream"
Q4: searchHotels returns empty results
place and placeType match (e.g., "Shanghai Bund" should be paired with "Attraction")checkInDate is not in the pastQ5: Prices don't match actual rates Search results show reference prices; real-time prices may vary. Currently, only queries are supported — online booking is not yet available.
v2.3 optimizes the order query structure and adds multiple order detail fields to help Agents better handle check-in, payment, and cancellation scenarios. Note: This update applies to the OAuth integration version only, not the API Key version documented herein. The OAuth version requires business onboarding contact@rollinggo.ai.
getHotelSearchTags — Get all enabled hotel filter tagssearchHotels — Search global hotel list by conditionsgetHotelDetail — Get available room types and pricing for a hotelhotelPriceConfirm — Lock real-time final retail price for selected roomcreateHotelBookingWithPaymentURL — Removed alipayUrlScene parameter; unified bookingResult.paymentUrl to generic checkoutsearchHotelOrders — Output simplified to 9 core fields (orderNo, hotelName, roomName, orderStatus, totalPrice, etc.) for list view; full detail moved to dedicated toolgetHotelOrderDetail — Query full structured order details by orderNo, including hotelConfirmationNo, guest list, bed type, contact phones, coordinates, payment/cancellation deadlines, and policy flagshotelConfirmationNo — Hotel-side real confirmation number for front-desk lookupstayInfo.bedTypeStr — Human-readable bed type description (e.g., "1 King Bed (1.8m)")stayInfo.guestNames — Official pinyin/English guest name list for verificationpriceInfo.paymentDeadline — Payment deadline timestamp (YYYY-MM-DD HH:mm:ss) for countdown alertspolicyInfo.freeCancelDeadline — Free cancellation deadline timestamp for refund window checkspolicyInfo.isCancelable — Whether free cancellation is still available at the current momentTool count: 7 total (up from 6 in v2.2) — 1 new, 2 modified, 4 unchanged.
uv (Recommended - Zero Config Setup)If you have uv installed, run the server instantly:
uv run --with-requirements requirements.txt server.py
# Clone the repository
git clone https://github.com/DIDA-AI/dida_hotel_mcp_global.git
cd dida_hotel_mcp_global
# Setup virtual environment
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
# Install dependencies and run
pip install -r requirements.txt
python server.py
The local server will run on http://localhost:8000/mcp, automatically forwarding requests to the secure DIDA global API nodes.
mcp_.Authorization: Bearer mcp_your_key_hereThis project is licensed under the MIT License - see the LICENSE file for details.
Made with ❤️ by the DIDA Team
Run Claude Code as an MCP server so any agent can delegate coding tasks to it
Browser automation using accessibility snapshots instead of screenshots
Google's universal MCP server supporting PostgreSQL, MySQL, MongoDB, Redis, and 10+ databases
Official GitHub integration for repos, issues, PRs, and CI/CD workflows