Dida-Hotel-MCP-Global
Servidor MCP oficial de reservas de hotel DIDA para agentes de IA globales. Busca, compara y reserva más de 2 millones de hoteles en todo el mundo directamente desde Cursor, Claude Desktop, Windsurf y ChatGPT.
Documentación
RollingGo Hotel MCP — Búsqueda y Reserva de Hoteles
🏠 Aplicar Clave · 🚀 Inicio Rápido · 📚 Ejemplos · 💬 Soporte · 🔍 Preguntas y Respuestas · ✈ Desarrollado por Dida · 💰Gana con RollingGo
Este es un servidor MCP oficial que permite a los Agentes de IA buscar, comparar y reservar más de 2 millones de hoteles a nivel mundial. Impulsado por DIDA (14 años, la plataforma de distribución de viajes #3 del mundo), este servidor cierra la brecha entre las recomendaciones de viaje de la IA y las reservas reales.
| Servicio | Endpoint | Herramientas Disponibles | Autenticación |
|---|---|---|---|
| Hotel MCP | https://mcp.rollinggo.ai/mcp | searchHotels, getHotelDetail, getHotelSearchTags | Authorization: Bearer <YOUR_API_KEY> |
- Protocolo de Transporte:
streamable-http - Precio: Completamente gratuito, sin límites de uso
- Método de Acceso: Autoservicio siguiendo esta documentación; adecuado para prototipado rápido y desarrollo de herramientas.
RollingGo MCP también ofrece un flujo de Código de Autorización OAuth 2.0, que proporciona 7 herramientas, incluyendo getHotelSearchTags, searchHotels, getHotelDetail, hotelPriceConfirm, searchHotelOrders y más. Este modo está diseñado para una integración profunda con aplicaciones de producción de nivel empresarial y requiere contacto comercial a través de contact@rollinggo.ai.
Para usuarios chinos o flujos de trabajo dirigidos principalmente al mercado de China continental y sistemas de pago Alipay, consulte esta versión: Dida-hotel-MCP-CN
🌟 ¿Por qué DIDA Hotel MCP?
Los agentes de IA tradicionales solo pueden recomendar hoteles basándose en conjuntos de datos de entrenamiento estáticos. El DIDA Hotel MCP equipa a su agente LLM con capacidades transaccionales directas y en tiempo real:
✅ Tarifas en Vivo e Inventario Reservable — Verificación de precios con latencia cero; cada resultado es reservable al instante.
✅ Cadena de Suministro — La plataforma B2B de viajes Top 3 del mundo, con 14 años de trayectoria, completamente nativa de API de extremo a extremo.
✅ Red Hotelera Global — 2,000,000+ propiedades que cubren 200+ países/regiones. 500+ proveedores que cubren todos los niveles, desde cadenas de lujo hasta boutiques locales.
✅ Contratos Directos — 110,000+ hoteles conectados directamente con sincronización de precios e inventario en vivo.
✅ Ventaja de Precio en el Origen — Precios por encima de las OTA; tarifas competitivas en destinos populares.
✅ Listo para Agentes — Funciona con 40+ agentes líderes: Cursor, Claude Code, Codex, Windsurf, Copilot y más.
✅ Gane Ingresos en Cada Llamada MCP — Establezca márgenes específicos por país, gane comisiones en cada reserva completada y realice un seguimiento de sus pedidos, ganancias y pagos en tiempo real. Retiros flexibles tanto para empresas como para desarrolladores individuales.
🎯 ¿Para quién es?
• Empresas o desarrolladores individuales que construyen Agentes de IA
• Desarrolladores que buscan integrar capacidades de reserva de hoteles en Clientes MCP
• Desarrolladores que crean agentes de planificación de viajes, gestión de viajes de negocios, OTA y servicios de estilo de vida
• Equipos de producto que buscan validar bucles de transacciones comerciales de Agentes de IA
• Personas con necesidades de búsqueda de hoteles, comparación de precios y alertas de caída de precios******
🎯 Casos de Uso
- Agentes de Propósito General: Equipe cualquier agente de IA con reserva de hoteles nativa. Los usuarios pueden comparar, filtrar y reservar, todo dentro de una sola conversación en lenguaje natural.
- Planificadores de Viaje con IA: Integre la búsqueda de hoteles directamente en itinerarios de lenguaje natural.
- Asistentes de Viajes Corporativos: Permita que los empleados consulten, comparen y reserven viajes de negocios dentro de Slack, Teams o interfaces de chat personalizadas.
- Demostraciones Transaccionales: Valide flujos de comercio y pago de agentes de IA de extremo a extremo sin una integración de backend pesada.
🚀 Inicio Rápido
Integre la búsqueda y reserva de hoteles globales en su asistente de IA en menos de 5 minutos sin necesidad de programación.
Paso 1: Obtenga su Clave de API de Desarrollador
- Vaya al Centro de Socios DIDA y regístrese para obtener una clave gratuita.
- Recibirá un correo electrónico que contiene: Credenciales para su panel del Centro de Socios B2B (para monitorear pedidos, configurar márgenes y realizar un seguimiento de las ganancias).
Paso 2: Conéctese a su Agente
Clientes recomendados: Claude CLI, Codex y Cursor. Otros clientes compatibles con MCP (como Kiro, Doubao, etc.) se pueden configurar de manera similar.
Claude CLI
Cree .mcp.json en la raíz de su proyecto:
{
"mcpServers": {
"Dida-Hotel": {
"url": "https://mcp.rollinggo.ai/mcp",
"type": "http",
"headers": {
"Authorization": "Bearer YOUR_API_KEY"
}
}
}
}
O agregue directamente a través de la línea de comandos:
claude mcp add \
--transport http \
--header "Authorization: Bearer YOUR_API_KEY" \
Dida-Hotel \
https://mcp.rollinggo.ai/mcp
Codex
Ubicación del archivo de configuración: .codex/config.json en la raíz del proyecto, o globalmente en ~/.codex/config.json
{
"mcpServers": {
"Dida-Hotel": {
"url": "https://mcp.rollinggo.ai/mcp",
"type": "streamable-http",
"headers": {
"Authorization": "Bearer YOUR_API_KEY"
}
}
}
}
Cursor
Ubicación del archivo de configuración: .cursor/mcp.json en la raíz del proyecto, o globalmente en ~/.cursor/mcp.json
{
"mcpServers": {
"Dida-Hotel": {
"url": "https://mcp.rollinggo.ai/mcp",
"type": "streamable-http",
"headers": {
"Authorization": "Bearer YOUR_API_KEY"
}
}
}
}
Reemplace
YOUR_API_KEYcon su Clave de API real.
Pruebe Directamente con cURL
Nota: cURL debe incluir
-H "Accept: application/json, text/event-stream", de lo contrario el servidor devolverá un error 400.
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
}'
Paso 3: Su Primera Llamada MCP
Una vez configurado, simplemente dígale a su asistente de IA:
"Encuéntrame un hotel de cinco estrellas cerca del Bund de Shanghái para una estancia que comience pasado mañana."
La IA llamará automáticamente a la Herramienta searchHotels y devolverá una lista de hoteles.
Ejemplo de Búsqueda de Hoteles
{
"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
}
Paso 4: Ver Resultados y Datos de Ejemplo
Resultados de Búsqueda de Hoteles (Datos Reales)
Buscando "hotel de cinco estrellas en el Bund de Shanghái", 2 noches, devuelve:
| Hotel | Estrellas | Precio Más Bajo/Noche | Distancia al Bund |
|---|---|---|---|
| Fairmont Peace Hotel Shanghai | ⭐⭐⭐⭐⭐ | $648 | 124m |
| The Peninsula Shanghai | ⭐⭐⭐⭐⭐ | $940 | 252m |
Ejemplo de Respuesta JSON Esperada
{
"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"]
}
]
}
🔧 Herramientas Disponibles
Documentación Oficial | Herramientas Dida MCP
El servidor registra 3 herramientas principales para manejar el ciclo de vida completo de búsqueda a reserva:
1) searchHotels
Encuentre hoteles por ubicación, fecha, precio, calificación de estrellas y etiquetas.
- Parámetros de Entrada:
originQuery(string, obligatorio): Solicitud de texto sin procesar del usuario (p. ej., "Encuentra hoteles boutique en Tokio por menos de $200").place(string, obligatorio): Destino específico, atracción o nombre de aeropuerto.placeType(string, obligatorio): Tipo de ubicación (city,airport,point_of_interest,hotel, etc.). Valores admitidos:city,airport,point_of_interest,train_station,subway_station,hotel,district/county,detailed address.countryCode(string, opcional): Código de país ISO 3166-1 alfa-2, p. ej.CN,US.size(number, opcional, predeterminado:5): Número de hoteles a devolver, máximo20.checkInParam(object, opcional): Parámetros relacionados con el check-in.filterOptions(object, opcional): Parámetros de filtro.hotelTags(object, opcional): Filtros de etiqueta / marca / presupuesto.
🔎 Ver Parámetros de Entrada Detallados (checkInParam, filterOptions, hotelTags)
Campos de checkInParam:
adultCount(number, opcional, predeterminado:2): Adultos por habitación.checkInDate(string, opcional, formato:YYYY-MM-DD): Fecha de check-in. Si se omite, está en el pasado o tiene un formato incorrecto, se establece por defecto en mañana.stayNights(number, opcional, predeterminado:1): Número de noches (máximo 28).
Campos de filterOptions:
distanceInMeter(number, opcional): Distancia en línea recta desde el POI en metros. Se establece por defecto en2000cuando se utiliza un POI.starRatings(number[], opcional): Rango de calificación de estrellas, predeterminado a[0.0, 5.0], paso0.5.
Campos de hotelTags:
requiredTags(string[], opcional): Etiquetas requeridas (restricción estricta).preferredBrands(string[], opcional): Marcas preferidas.maxPricePerNight(number, opcional): Presupuesto máximo por noche (CNY).
📄 Ver Ejemplo de Esquema JSON de Respuesta
{
"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"]
}
]
}
Nota:
pricees un objeto, no un número. Los campos pueden faltar o sernulldependiendo de la ciudad/fuente de suministro.
2) getHotelDetail
Obtenga tipos de habitación en tiempo real, precios dinámicos, inventario y políticas de cancelación para un hotel seleccionado.
- Parámetros de Entrada:
hotelId(number, opcional): ID del hotel. Mutuamente excluyente conname; si se proporcionan ambos,hotelIdtiene prioridad.name(string, opcional): Nombre del hotel (coincidencia aproximada).dateParam(object, opcional): Parámetros de fecha de check-in / check-out.occupancyParam(object, opcional): Parámetros de número de huéspedes y número de habitaciones.localeParam(object, opcional): Parámetros de país y moneda.
🔎 Ver Parámetros de Entrada Detallados (dateParam, occupancyParam, localeParam)
Campos de dateParam:
checkInDate(string, opcional, formato:YYYY-MM-DD): Fecha de check-in. Se establece por defecto en mañana si está vacía, tiene un formato incorrecto o está en el pasado.checkOutDate(string, opcional, formato:YYYY-MM-DD): Fecha de check-out. Se establece por defecto en el díacheckInDate + 1si está vacía, tiene un formato incorrecto o no es posterior al check-in.
Campos de occupancyParam:
adultCount(number, opcional, predeterminado:2): Adultos por habitación.childCount(number, opcional, predeterminado:0): Niños por habitación.childAgeDetails(number[], opcional): Edades de los niños, p. ej.[3, 5].roomCount(number, opcional, predeterminado:1): Número de habitaciones.
Campos de localeParam:
countryCode(string, opcional, predeterminado:US): Código de país ISO 3166-1 alfa-2.currency(string, opcional, predeterminado:USD): Código de moneda.
📄 Ver Ejemplo de Esquema JSON de Respuesta
{
"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
}
]
}
Nota: En caso de error, la respuesta puede contener un mensaje de error (p. ej., "No se pudo obtener el precio, inténtelo de nuevo más tarde") o campos de error estructurados. La matriz
roomRatePlanspuede ser larga; considere paginar o limitar la visualización en el lado del cliente.
3) getHotelSearchTags
Recupere metadatos que contengan todos los nombres de etiquetas filtrables (p. ej., "WiFi Gratis", "Gimnasio", "Apto para Niños") para refinar el filtrado de búsqueda. Adecuado para almacenamiento en caché local y mapeo de intenciones en el lado del cliente.
📄 Ver Ejemplo de Esquema JSON de Respuesta
{
"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": "{...}"
}
}
Categorías de etiquetas comunes:
- Marca y Calificaciones
- Destacados Especiales
- Servicios Principales
- Familia y Niños
- Detalles del Servicio
- Servicio y Restauración
- Transporte y Pago
- Vistas y Tipos de Habitación
- Tipo de Hotel
- Precios
📚 Ejemplos de Uso
Ejemplo 1: Búsqueda por Ciudad
{
"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
}
Ejemplo 2: Con Etiquetas y Restricciones de Presupuesto
{
"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
}
Ejemplo 3: Consultar Tipos de Habitación y Precios de Hoteles
{
"hotelId": 43615,
"dateParam": {
"checkInDate": "2026-03-05",
"checkOutDate": "2026-03-06"
},
"occupancyParam": {
"adultCount": 2,
"roomCount": 1
},
"localeParam": {
"currency": "CNY",
"countryCode": "CN"
}
}
💬 Preguntas y Respuestas
🔍Guía de Solución de Problemas
Preguntas y Respuestas
P1: El cliente no muestra la Herramienta después de la configuración
- Verifique si el formato de configuración JSON es correcto
- Confirme que
urlytypeson correctos - Confirme que la Clave de API en el encabezado
Authorizationes correcta - Reinicie el cliente (los cambios solo surten efecto después de reiniciar)
P2: Devuelve 401 No autorizado
Clave de API inválida o con formato incorrecto: - La clave de API debe comenzar con
mcp_ - En
Authorization: Bearer YOUR_API_KEY, debe haber un espacio después de Bearer - Asegúrate de que no haya espacios adicionales ni saltos de línea en la clave de API
P3: Devuelve 400 Solicitud incorrecta
Común al llamar directamente con cURL. Verifica que el encabezado Accept esté incluido:
-H "Accept: application/json, text/event-stream"
P4: searchHotels devuelve resultados vacíos
- Verifica si
placeyplaceTypecoinciden (por ejemplo, "Shanghai Bund" debe emparejarse con "Attraction") - Relaja los criterios de filtro (elimina restricciones de calificación por estrellas / etiquetas)
- Confirma que
checkInDateno esté en el pasado
P5: Los precios no coinciden con las tarifas reales
Los resultados de búsqueda muestran precios de referencia; los precios en tiempo real pueden variar. Actualmente, solo se admiten consultas; la reserva en línea aún no está disponible.
💬 Soporte
- 📧 Correo electrónico: york.lu@dida.com
- 🐛 Problemas: Envía problemas o solicitudes de funciones en Problemas de GitHub.
- 💬 Comunidad de Discord: Únete a nuestro Servidor de Discord o escanea el código QR a continuación para conectarte con otros desarrolladores, discutir integraciones y obtener soporte en tiempo real del equipo de DIDA.
🌟 Actualización importante de Dida Hotel MCP (OAuth) v2.3
v2.3 optimiza la estructura de consulta de pedidos y agrega múltiples campos de detalle de pedidos para ayudar a los Agentes a manejar mejor los escenarios de check-in, pago y cancelación. Nota: Esta actualización se aplica solo a la versión de integración OAuth, no a la versión de clave de API documentada aquí. La versión OAuth requiere incorporación comercial contact@rollinggo.ai.
Qué cambió
Herramientas sin cambios (4)
getHotelSearchTags— Obtener todas las etiquetas de filtro de hotel habilitadassearchHotels— Buscar lista global de hoteles por condicionesgetHotelDetail— Obtener tipos de habitación disponibles y precios para un hotelhotelPriceConfirm— Bloquear el precio minorista final en tiempo real para la habitación seleccionada
Herramientas modificadas (2)
createHotelBookingWithPaymentURL— Se eliminó el parámetroalipayUrlScene; se unificóbookingResult.paymentUrla checkout genéricosearchHotelOrders— Salida simplificada a 9 campos principales (orderNo,hotelName,roomName,orderStatus,totalPrice, etc.) para vista de lista; el detalle completo se movió a una herramienta dedicada
Nuevas herramientas (1)
getHotelOrderDetail— Consultar detalles completos de pedido estructurado pororderNo, incluyendohotelConfirmationNo, lista de huéspedes, tipo de cama, teléfonos de contacto, coordenadas, plazos de pago/cancelación y banderas de política
Nuevos campos
hotelConfirmationNo— Número de confirmación real del lado del hotel para búsqueda en recepciónstayInfo.bedTypeStr— Descripción legible del tipo de cama (por ejemplo,"1 King Bed (1.8m)")stayInfo.guestNames— Lista oficial de nombres de huéspedes en pinyin/inglés para verificaciónpriceInfo.paymentDeadline— Marca de tiempo del plazo de pago (YYYY-MM-DD HH:mm:ss) para alertas de cuenta regresivapolicyInfo.freeCancelDeadline— Marca de tiempo del plazo de cancelación gratuita para verificar la ventana de reembolsopolicyInfo.isCancelable— Si la cancelación gratuita aún está disponible en el momento actual
Conteo de herramientas: 7 en total (aumentó de 6 en v2.2) — 1 nueva, 2 modificadas, 4 sin cambios.
Apéndice
🔣 Si deseas implementación local
Método A: Ejecutar mediante uv (Recomendado - Configuración cero)
Si tienes uv instalado, ejecuta el servidor al instante:
uv run --with-requirements requirements.txt server.py
Método B: Configuración estándar de Python
# 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
El servidor local se ejecutará en http://localhost:8000/mcp, reenviando automáticamente las solicitudes a los nodos seguros de la API global de DIDA.
🔑 Seguridad y Encabezados
- El servidor local reenvía solicitudes a la API global segura de DIDA.
- Siempre proporciona tu clave de API en los encabezados. Las claves deben comenzar con
mcp_. - Encabezado requerido:
Authorization: Bearer mcp_your_key_here
📜 Licencia
Este proyecto está licenciado bajo la Licencia MIT - consulta el archivo LICENSE para más detalles.
Hecho con ❤️ por el equipo de DIDA