Dida-Hotel-MCP-Global

by dida-ai

Not rated
GitHub

About

Official DIDA Hotel Booking MCP Server for global AI Agents. Search, compare, and book 2M+ hotels worldwide directly inside Cursor, Claude Desktop, Windsurf, and ChatGPT.

Details

Author
dida-ai
Categories
Productivity, Other, Search

Method A: Run viauv(Recommended - Zero Config Setup)

If you have](https://github.com/DIDA-AI/Dida-Hotel-MCP-Global/blob/HEAD/mailto:contact@rollinggo.ai)uvinstalled, run the server instantly:

uv run --with-requirements requirements.txt server.py

Official DIDA Hotel Booking MCP Server for global AI Agents. Search, compare, and book 2M+ hotels worldwide directly inside Cursor, Claude Desktop, Windsurf, and ChatGPT.

RollingGo Hotel MCP — Hotel Search & Booking

🏠Apply Key· 🚀Quick Start· 📚Examples· 💬Support· 🔍Q&A· ✈Powered by Dida· 💰Earn with RollingGo

This is an official MCP server empowers AI Agents to search, compare, and bookover 2 Million hotels globally. Powered by DIDA (14 years, world's #3 travel distribution platform), this server bridges the gap between AI travel recommendations and real-world bookings.

- Transport Protocol:streamable-http
- Pricing: Completely free, no usage limits
- Access Method: Self-service following this documentation; suitable for rapid prototyping and tool development.

RollingGo 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 viacontact@rollinggo.ai.

For Chinese usersor 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. TheDIDA Hotel MCPequips 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 Top3travel B2B platform,14years in the making, fully API-native end-to-end.

Global Hotel Network2,000,000+ properties covering200+countries/regions.500+ suppliers covering every tier, from luxury chains to local boutiques.

Direct Contracts110,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 with40+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

- General-Purpose Agents: Equip any AI agent with native hotel booking. Users can compare, filter, and book—all within a single natural-language conversation.
- AI Travel Planners: Integrate hotel searching directly into natural language itineraries.
- Corporate Travel Assistants: Allow employees to query, compare, and book business travel within Slack, Teams, or custom chat interfaces.
- Transactional Demos: Validate end-to-end AI agent commerce and payment flows without heavy backend integration.

Integrate global hotel search and booking into your AI assistant in under5 minuteswith no coding required.
- Go to the
DIDA Partner Centerand sign up for a free key.
- You will receive an email containing: Credentials for your B2B Partner Center dashboard (to monitor orders, configure markup, and track earnings).

Recommended clients: Claude CLI, Codex, and Cursor. Other MCP-compatible clients (such as Kiro, Doubao, etc.) can be configured similarly.

{ "mcpServers": { "Dida-Hotel": { "url": "https://mcp.rollinggo.ai/mcp", "type": "http", "headers": { "Authorization": "Bearer YOUR_API_KEY" } } } }
claude mcp add \ --transport http \ --header "Authorization: Bearer YOUR_API_KEY" \ Dida-Hotel \ https://mcp.rollinggo.ai/mcp

Config file location:.codex/config.jsonin 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.jsonin 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" } } } }

ReplaceYOUR_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 thesearchHotelsTool 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:

{ "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"] } ] }

The server registers 3 core tools to handle the complete search-to-book lifecycle:

Find hotels by location, date, price, star rating, and tags.

- Input Parameters:

- 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, max20.
- checkInParam(object, optional): Check-in related parameters.
- filterOptions(object, optional): Filter parameters.
- hotelTags(object, optional): Tag / brand / budget filters.

- 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).

- distanceInMeter(number, optional): Straight-line distance from POI in meters. Defaults to2000when a POI is used.
- starRatings(number[], optional): Star rating range, defaults to[0.0, 5.0], step0.5.

- 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.

- Input Parameters:

- hotelId(number, optional): Hotel ID. Mutually exclusive withname; if both are provided,hotelIdtakes 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.

- 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 tocheckInDate + 1day if empty, malformed, or not after check-in.

- 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.

- 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. TheroomRatePlansarray 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": "{...}" } }

- Brand & Ratings
- Specialty Highlights
- Core Amenities
- Family & Kids
- Service Details
- Service & Dining
- Transportation & Payment
- Views & Room Types
- Hotel Type
- Pricing

{ "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
- Check if the JSON configuration format is correct
- Confirm thaturlandtypeare correct
- Confirm that the API Key in theAuthorizationheader is correct
- Restart the client (changes only take effect after restart)

Q2: Returns 401 UnauthorizedInvalid or incorrectly formatted API Key:
- The API Key should start withmcp_
- InAuthorization: Bearer YOUR_API_KEY, there must be a space after Bearer
- Make sure there are no extra spaces or line breaks in the API Key

Q3: Returns 400 Bad RequestCommon when calling directly with cURL. Check that the Accept header is included:

-H "Accept: application/json, text/event-stream"

- Check ifplaceandplaceTypematch (e.g., "Shanghai Bund" should be paired with "Attraction")
- Relax filter criteria (remove star rating / tag restrictions)
- Confirm thatcheckInDateis not in the past

Q5: Prices don't match actual ratesSearch results show reference prices; real-time prices may vary. Currently, only queries are supported — online booking is not yet available.

- 📧Email:york.lu@dida.com
- 🐛Issues: Submit issues or feature requests on
GitHub Issues.
- 💬Discord Community: Join our
Discord Serveror scan the QR code below to connect with other developers, discuss integrations, and get real-time support from the DIDA team.

🌟 Dida Hotel MCP (OAuth) v2.3 Major Update

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 onboardingcontact@rollinggo.ai.

- getHotelSearchTags— Get all enabled hotel filter tags
- searchHotels— Search global hotel list by conditions
- getHotelDetail— Get available room types and pricing for a hotel
- hotelPriceConfirm— Lock real-time final retail price for selected room

- createHotelBookingWithPaymentURL— RemovedalipayUrlSceneparameter; unifiedbookingResult.paymentUrlto generic checkout
- searchHotelOrders— Output simplified to 9 core fields (orderNo,hotelName,roomName,orderStatus,totalPrice, etc.) for list view; full detail moved to dedicated tool

- getHotelOrderDetail— Query full structured order details byorderNo, includinghotelConfirmationNo, guest list, bed type, contact phones, coordinates, payment/cancellation deadlines, and policy flags

- hotelConfirmationNo— Hotel-side real confirmation number for front-desk lookup
- stayInfo.bedTypeStr— Human-readable bed type description (e.g.,"1 King Bed (1.8m)")
- stayInfo.guestNames— Official pinyin/English guest name list for verification
- priceInfo.paymentDeadline— Payment deadline timestamp (YYYY-MM-DD HH:mm:ss) for countdown alerts
- policyInfo.freeCancelDeadline— Free cancellation deadline timestamp for refund window checks
- policyInfo.isCancelable— Whether free cancellation is still available at the current moment

Tool count:7 total (up from 6 in v2.2) — 1 new, 2 modified, 4 unchanged.

Method A: Run viauv(Recommended - Zero Config Setup)

If you haveuvinstalled, run the server instantly:

uv run --with-requirements requirements.txt server.py
No reviews yet — be the first

Sign in to leave a review

Use Google, GitHub, or an email account so ratings stay tied to real people.

Email sign in

No reviews posted yet.