I'm an AI travel planning assistant developer. For the past six months, I've been working on one thing: making an LLM agent understand a user saying "Taking my parents to Tokyo for 3 nights, budget $1,200, need hotel recommendations" and automatically completing hotel search, comparison, recommendation, and booking.
The biggest blocker isn't that the LLM isn't smart enough β it's that the LLM doesn't know what hotels near Shinjuku cost today, whether rooms are available this weekend, or the difference between a Hilton and a Hyatt. The LLM's knowledge freezes at training time. That's why nearly every "AI + travel" project eventually converges on the same thing: connecting the LLM to an interface that delivers real-time travel data.
Example 1: Agent multi-turn dialogue with tool calls (natural language β real hotel results)
`[User]: I want to take my family to Tokyo next week, 2 adults 1 child,
looking for 5-star hotels near Shinjuku, budget under $200/night,
preferably with breakfast and family-friendly. Compare 3 options.
[Agent]
β Step 1: Parse β city=Tokyo, area=Shinjuku, nights=3, stars=5,
budgetβ€$200, tags=breakfast+family
β Step 2: Call hotel-tags β get valid tag dictionary
β Step 3: Call search-hotels β pull candidate list
β Step 4: Call hotel-detail for top 3 β room types/cancellation
β Step 5: Score by location + budget + tag match + cancellation
β Step 6: Output 3 comparison cards
[Agent Response]
ββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β 1. Hilton Tokyo Otemetti βββββ β
β π 380m from Shinjuku Station π° $185/night β
β π·οΈ Family-friendly Β· Indoor pool Β· Breakfast Β· β
β Free cancel until 6:00 PM β
β β
β
β
β
β
(Best location / free cancellation) β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β 2. Park Hyatt Tokyo βββββ β
β π 220m from Shinjuku π° $220/night β
β π·οΈ Family-friendly Β· Outdoor pool Β· Breakfast β
β β
β
β
β
β (Best experience / 10% over budget) β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β 3. Grand Hyatt Tokyo βββββ β
β π 1.2km from Shinjuku π° $165/night β
β π·οΈ Family-friendly Β· Breakfast Β· Moderate cancel β
β β
β
β
β
β (Best value / short taxi to station) β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββ`
Example 2: MCP config panel
`{
"mcpServers": {
"rollinggo-hotel": {
"type": "streamable-http",
"url": "https://mcp.rollinggo.ai/mcp",
"headers": {
"Authorization": "Bearer mcp_xxx_your_key_here"
},
"timeout": 30000
}
}
}`
End-to-end latency from natural language to real hotel data: 4.2 seconds (including model inference + two MCP calls + filtering).
streamable-http, not legacy sse or polling http. Filtered out solutions using custom RPC.
RollingGo Hotel MCP, backed by Dida Holdings, was the only option meeting all three.
GitHub: https://github.com/DIDA-AI/Dida-RollingGo-Hotel-MCP-Global
Get your free API key: https://global.rollinggo.store/
Hotel MCP tools:
| Tool | Purpose | Key Parameters | Agent Friendliness |
|---|---|---|---|
| search-hotels | Search by location/stars/budget/tags | place, star-ratings, preferred-tag, max-price-per-night | β β β β β Few required params, defaults provided |
| hotel-detail | Real-time room types & prices | hotel-id, check-in-date, check-out-date, adult-count | β β β β β Returns room types + cancellation + inventory |
| hotel-tags | Tag dictionary | None | β β β β β Call before searching to avoid guessing |
Key highlight:search-hotels accepts origin-query β the user's raw natural language. The agent doesn't need to decompose "I want a poolside family hotel near Shinjuku" into 6 parameters. Just pass it through.
A complete "user asks β agent recommends" flow:
`# Extracted from Claude Desktop call logs
user_query = "Family trip to Tokyo 3 days, 2 adults 1 child, Shinjuku 5-star hotels"
cities = mcp_call("rollinggo-hotel", "search-airports",
{"keyword": "Tokyo"})
candidates = mcp_call("rollinggo-hotel", "search-hotels", {
"origin-query": user_query,
"place": "Shinjuku",
"place-type": "attraction",
"check-in-date": "2026-07-04",
"stay-nights": 3,
"star-ratings": "5.0,5.0",
"preferred-tag": "family-friendly,breakfast",
"max-price-per-night": 200,
"size": 10
})
for hotel in candidates["hotels"][:3]:
detail = mcp_call("rollinggo-hotel", "hotel-detail", {
"hotel-id": hotel["hotelId"],
"check-in-date": "2026-07-04",
"check-out-date": "2026-07-07",
"adult-count": 2,
"room-count": 1
})
enrich(hotel, detail)
ranked = llm_rank(candidates, weights={"location": 0.4, "price": 0.3,
"tags": 0.2, "cancellation": 0.1})
return format_cards(ranked[:3])`
Key observation: MCP gives the agent "external senses." Without MCP, the agent hallucinates hotel names (often wrong or outdated). With MCP, output transforms from "hallucination" to "real data + real prices + real inventory."
Step 1: Apply for API key at global.rollinggo.store β instant, no enterprise credentials.
Step 2: Verify key:
`npx --yes rollinggo@latest hotel-tags --api-key mcp_xxx_yourkey`
Step 3: Write MCP config (Claude Desktop / Cursor / Codex):
`{
"mcpServers": {
"rollinggo-hotel": {
"type": "streamable-http",
"url": "https://mcp.rollinggo.ai/mcp",
"headers": {
"Authorization": "Bearer mcp_xxx_your_key_here"
},
"timeout": 30000
}
}
}`
Step 4: Restart agent workspace. Verify tools appear.
Step 5: Test with natural language:
`Find 5-star hotels near Shinjuku, Tokyo, with breakfast,
check-in next week for 3 nights, budget $200/night.`
| Dimension | Self-build OTA | Outsourcing | B2B Vendor | RollingGo MCP |
|---|---|---|---|---|
| Startup cost | Not open to individuals | $7β22K | $14β29K | $0 |
| Startup time | β | 2β4 weeks | 4β8 weeks | 0.5β2 days |
| Ongoing cost | High | Medium | Medium-High | Very low |
| Individual accessible | β | β οΈ (budget) | β | β |
| Cross-domain (hotel+flight) | Self-build needed | Two projects | Depends on vendor | β |
Result: 3 hours to connect Hotel + Flight MCP, total cost $0. Stable across 5 cities, 20+ hotel candidates, 3 flight routes over 15 days.