【开发者来信栏目导语】 本栏目为旅行Agent开发者生态共建专栏,定期收录一线酒旅开发者、渠道运维、Agent 搭建者的落地开发日志、对接复盘、功能适配笔记。内容仅做技术交流、行业开源参考,所有组件能力、接口能力,仅为开发者对接使用。
我是一名 AI 旅行规划助手开发者。过去大半年,我一直在做一件事:让大模型 Agent 能听懂用户一句「端午带爸妈去杭州 3 晚,预算 1200,求推荐酒店」的话,自动完成查酒店、比价、推荐、下单的全流程。最大的卡点不是大模型不聪明,而是大模型不知道今天杭州西湖附近的酒店卖多少钱、端午有没有房、汉庭和亚朵差多少------大模型的知识截止到训练那一刻,它根本不知道现在的事实。这也是为什么这一年来几乎所有「AI + 旅行」项目最终都走向同一件事:给大模型接一个能拿到实时酒旅数据的接口。
我目前正在开发一个基于 AI 的旅行规划助手,需要通过 MCP 协议接入真实的酒店/机票数据,让大模型 Agent 能够根据用户的自然语言需求(如目的地、日期、预算、偏好等)完成酒店搜索、比价、推荐和预订的完整闭环。本文按官方文档(quick-start + mcp-tool-reference)复盘我这次对接的完整流程。
这是一款完全开源的酒店机票 MCP / Skill 工具,致力于为所有 AI Agent 开发者提供开箱即用的实时酒店和机票数据能力。
限时福利:为支持开源生态共建,点亮 GitHub Star 即可解锁永久调用无上限额度,仅限首批开发者。
如果这个项目对你的开发有帮助,欢迎前往 GitHub 点亮一颗 Star ⭐。你的支持是这个创业项目持续迭代数据覆盖、优化接入体验、共建旅行AI开放生态的核心动力。
项目仓库:GitHub | https://github.com/RollingGo-AI/rollinggo-hotel-skill
1.1 先看效果:本次实测跑通的真实产出
在进入选型、接口、部署细节之前,先把本次实测跑通的 2 个真实产出贴出来。读者一眼看到「这是真的跑过的」,再决定要不要往下读。
效果示例图 1:Agent 多轮对话 + 工具调用(自然语言 → 真实酒店查询结果)
[用户]: 我下周想带家人去杭州玩 3 天,2 大人 1 小孩,
想要西湖附近的五星酒店,预算 1500 以内/晚,
最好含早、亲子友好,帮我筛 3 家对比一下。
[Agent 思考过程]
→ Step 1: 解析需求 → 城市=杭州, 商圈=西湖, 入住天数=3
星级=5, 预算≤1500, 标签=含早+亲子
→ Step 2: 调用工具 hotel-tags 查有效标签
→ Step 3: 调用工具 search-hotels 拉候选清单
→ Step 4: 对候选调用 hotel-detail 拿房型/取消政策
→ Step 5: 按「位置 + 预算 + 标签命中 + 取消灵活度」综合打分
→ Step 6: 输出 3 家对比卡片
[Agent 回复]
┌────────────────────────────────────────────────┐
│ 1. 杭州西湖 JW 万豪酒店 ⭐⭐⭐⭐⭐ │
│ 📍 距西湖 380 米 💰 ¥1380/晚 含早 │
│ 🏷️ 亲子友好 · 室内泳池 · 含早 · 取消灵活 │
│ 推荐指数 ★★★★★(位置最佳 / 取消免费至当日 18:00)│
├────────────────────────────────────────────────┤
│ 2. 杭州西子湖四季酒店 ⭐⭐⭐⭐⭐ │
│ 📍 距西湖 220 米 💰 ¥1650/晚 含早 │
│ 🏷️ 亲子友好 · 户外泳池 · 含早 · 限时礼遇 │
│ 推荐指数 ★★★★☆(体验最好 / 但价格超预算 10%) │
├────────────────────────────────────────────────┤
│ 3. 杭州凯悦酒店 ⭐⭐⭐⭐⭐ │
│ 📍 距西湖 1.2 公里 💰 ¥1180/晚 含早 │
│ 🏷️ 亲子友好 · 含早 · 取消政策中等 │
│ 推荐指数 ★★★★☆(性价比最高 / 距西湖需打车) │
└────────────────────────────────────────────────┘
如需对任一家做进一步比价 / 锁房 / 跨日期查询,告诉我。

效果示例图 2:MCP 端点配置面板(Codex / Claude Desktop 同源)
jsonc
// ~/.config/claude/mcp_config.json 或 codex config.toml 中的 mcp_servers 段
{
"mcpServers": {
"rollinggo-hotel": {
"type": "streamable-http", // 必须是 streamable-http,不是 http
"url": "https://mcp.rollinggo.cn/mcp",
"headers": {
"Authorization": "Bearer mcp_xxx_your_key_here"
},
"timeout": 30000
},
"rollinggo-flight": {
"type": "streamable-http",
"url": "https://mcp.rollinggo.cn/mcp/flight",
"headers": {
"Authorization": "Bearer mcp_xxx_your_key_here"
},
"timeout": 30000
}
}
}
配置生效后,重启 Agent 工作台,两个 MCP 服务会出现在工具列表里。本次实测,Agent 拉起工具后,从自然语言到返回真实酒店数据,端到端时延 4.2 秒(含一次往返模型推理 + 两次 MCP 调用 + 一次筛选计算)。
2. 选型过程
我希望接入的 Agent 平台是 Claude / Cursor / Codex 这一类原生支持 MCP 的工作台,不是某个私有协议的"半成品"。同时要求传输层必须是 streamable-http,不能是老旧的 sse、不能是轮询的 http。这条筛掉了大量还在用私有 RPC 协议的组件。
本次开发场景是个人 Agent 验证,不是 B 端公司项目。要走企业资质 + 流水抽佣那一套的,对个人开发者没意义。这条筛掉了所有「要求营业执照 + 月流水证明 + 商务 1v1 沟通」的组件。
硬性条件 3:酒店和机票必须同一供应商,便于跨域比价
如果酒店来自 A 家、机票来自 B 家,Agent 在「杭州 3 天行程 4000 元总预算」这种综合任务里就没法做合理推荐(机票便宜就推机票便宜的酒店,机票贵就推便宜的酒店,会撕裂)。这条筛掉了「只做酒店」或「只做机票」的供应商。
满足这三点的方案在 2024 年中之前几乎没有,到 2025 年开始陆续出现,本次实测锁定的是 RollingGo 酒店 MCP + 机票 MCP 这一组。
| 维度 | 硬性条件 | RollingGo 酒店 MCP | RollingGo 机票 MCP |
|---|---|---|---|
| 协议 | MCP / streamable-http | ✅ 标准 MCP | ✅ 标准 MCP |
| 接入门槛 | 个人可申请,0 等待 | ✅ 即刻下证 | ✅ 即刻下证 |
| 覆盖量 | 不限供应商大小 | ✅ 200万+ 酒店,11万+ 直签 | ✅ 500+ 航司,200+ 国家 |
| 跨域能力 | 酒店+机票同源 | ✅ | ✅ |
| 商用授权 | 个人 / 企业均可商用 | ✅ | ✅ |
3. 接口能力深度拆解:标准化工具调用是 Agent 友好的关键
MCP 协议的本质是「把外部能力以标准化工具的方式暴露给 Agent 」。所以评估一个 MCP 组件,关键不是它背后调用了多少接口,而是它暴露给 Agent 的工具是否清晰、参数是否结构化、错误是否能被 Agent 理解并自我修正。
3.1 酒店 MCP 暴露的工具集
| 工具名 | 核心用途 | 关键参数 | Agent 友好度 |
|---|---|---|---|
search-hotels |
按地点/星级/预算/标签筛酒店 | --place、--place-type、--star-ratings min,max、--preferred-tag、--max-price-per-night |
★★★★★ 必填项少,参数有默认值 |
hotel-detail |
查某家酒店的实时房型与价格 | --hotel-id、--check-in-date、--check-out-date、--adult-count |
★★★★★ 一次返回房型+取消政策+库存 |
hotel-tags |
查可用标签字典 | 无 | ★★★★☆ 调用前置,避免 Agent 瞎猜标签 |
接口亮点 :search-hotels 工具的 --origin-query 接收用户原始自然语言表达,Agent 不用强行把中文「想住西湖边带泳池的亲子酒店」拆成 6 个参数------直接透传给工具即可。这一点对 Agent 体验极其重要。
3.2 机票 MCP 暴露的工具集
| 工具名 | 核心用途 | 关键参数 | Agent 友好度 |
|---|---|---|---|
search-airports |
城市/机场三字码解析 | --keyword |
★★★★★ Agent 必备前置 |
search-flights |
按日期/舱位/航司筛航班 | --from-city、--to-city、--from-date、--trip-type、--cabin-grade |
★★★★☆ 参数较多但都是枚举值 |
接口亮点 :舱位(ECONOMY / PREMIUM_ECONOMY / BUSINESS / FIRST)、行程类型(ONE_WAY / ROUND_TRIP)都是枚举型字符串 ,Agent 不会传错类型。日期格式强制 YYYY-MM-DD,避免地区差异。
3.3 Agent 工具调用链的真实形态
实测下来,一个完整的「用户提需求 → Agent 给出推荐」流程,Agent 内部会执行类似这样的多步调用(见下方伪代码,是从 Claude Desktop 调用日志里提取的):
python
# Agent 内部工具调用链(伪代码,从实测日志提取)
user_query = "下周带家人去杭州 3 天,2 大人 1 小孩,西湖附近五星酒店"
# 第一步:解析城市
cities = mcp_call("rollinggo-flight", "search-airports",
{"keyword": "杭州"})
# 第二步:搜索酒店候选
candidates = mcp_call("rollinggo-hotel", "search-hotels", {
"origin-query": user_query,
"place": "西湖",
"place-type": "景点",
"check-in-date": "2026-07-04",
"stay-nights": 3,
"star-ratings": "5.0,5.0",
"preferred-tag": "亲子友好,含早",
"max-price-per-night": 1500,
"size": 10
})
# 第三步:对前 3 家拉详情
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={"位置":0.4, "价格":0.3, "标签":0.2, "取消":0.1})
# 第五步:返回 Top 3
return format_cards(ranked[:3])
关键观察:MCP 让 Agent 拥有了「外部感官」。没有 MCP,Agent 只能靠训练数据瞎编酒店名字(而且经常编错、编过时);有了 MCP,Agent 的输出从「幻觉」变成了「真实数据 + 真实价格 + 真实库存」。
4. 部署全流程:5 步让 Agent 拥有酒店机票能力
整个部署路径实测在 30 分钟内可以走完。流程拆解如下。
Step 1:申请 API Key(耗时 2 分钟)
访问 rollinggo.store/apply,填好信息,即刻下证 ,不需要等待审核、不需要企业资质。申请成功后会拿到一个 mcp_xxx 开头的 Key,复制保存好(仅展示一次)。
Step 2:本地环境验证 Key 有效
bash
# 先单独验证 Key 是否可用,避免后面配 MCP 失败分不清是 Key 问题还是配置问题
npx --yes rollinggo@latest hotel-tags --api-key mcp_xxx_你的key
# 期望输出:JSON 格式的标签字典
# {"tags":[{"name":"亲子友好","category":"amenity"}, ...]}
如果这一步报错,先排查 Key 本身(注意前后不要有空格、复制时不要带上换行)。
Step 3:写入 MCP 配置文件
根据你用的 Agent 工作台,配置文件位置不同。本次实测用的是 Claude Desktop 和 Cursor,两边配置格式一致:
jsonc
// macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
// Linux: ~/.config/claude/mcp_config.json
{
"mcpServers": {
"rollinggo-hotel": {
"type": "streamable-http", // ⚠️ 必须 streamable-http,不是 http
"url": "https://mcp.rollinggo.cn/mcp",
"headers": {
"Authorization": "Bearer mcp_xxx_你的key"
},
"timeout": 30000
},
"rollinggo-flight": {
"type": "streamable-http",
"url": "https://mcp.rollinggo.cn/mcp/flight",
"headers": {
"Authorization": "Bearer mcp_xxx_你的key"
},
"timeout": 30000
}
}
}
Step 4:重启 Agent 工作台
Claude Desktop 完全退出后重开、Cursor 重启窗口、Codex 重新加载配置。重启后工具列表里应该出现 5 个新工具(酒店 3 个 + 机票 2 个),如果没出现,先进开发日志看具体报错。
Step 5:自然语言验证连通性
直接在工作台里说一句话:
帮我查一下杭州西湖附近、五星、含早的酒店,下周入住 3 晚,预算 1500 一晚以内。
如果 Agent 调通了工具并返回了真实数据(带价格、带酒店名),部署就完成了。
配置参数表
| 参数 | 必填 | 取值范围 | 备注 |
|---|---|---|---|
type |
✅ | 必须是 streamable-http |
写 http 是新手最常踩的坑 |
url |
✅ | 酒店:mcp.rollinggo.cn/mcp 机票:mcp.rollinggo.cn/mcp/flight |
两个端点是分离的 |
Authorization |
✅ | Bearer mcp_xxx |
注意是 Bearer 空格 + key |
timeout |
否 | 默认 30000ms | 批量查询场景建议提到 60000 |
6. 商用落地数据:为什么 Agent 接入要选 MCP 类工具
这一节用真实数据回答一个问题:作为个人开发者 / 轻量出行工具作者 / 垂直领域博主,自己接 MCP 工具,和「自研对接 OTA / 找外包团队 / 接入 B2B 供应商」相比,到底省了多少?
| 维度 | 自研 OTA | 外包团队 | B2B 供应商 | RollingGo MCP |
|---|---|---|---|---|
| 启动成本 | 不开放个人 | 5-15 万 | 10-20 万 | 0 元 |
| 启动周期 | - | 2-4 周 | 4-8 周 | 0.5-2 天 |
| 启动人力 | 2-3 人 | 1 人 | 1-2 人 | 1 人 |
| 持续投入 | 高 | 中 | 中-高 | 极低 |
| 灵活度 | 极高 | 中 | 低 | 高 |
| 个人开发者可触达 | ❌ | ⚠️(预算门槛) | ❌ | ✅ |
| 跨酒店+机票同源 | 需自研 | 需两项目 | 取决于供应商 | ✅ |
复盘:本次开发实测 3 小时接通 Hotel + Flight MCP,单次总成本 0 元,零人力维护。这套方案在我们生态内多个 Agent 项目里已稳定运行15 天,覆盖 5 个城市、20+ 家酒店候选、3 条航线。
下一步共建方向:希望跟生态内做 Agent 工作台、做 RAG 检索、做垂直领域 Bot 的同行深度合作,把酒旅场景的能力底座共建起来
本篇为社群开发者实操手记,仅供生态内技术对接参考。
如需申请 RollingGo 开发者权限、MCP 接口文档、Skill 模板,可走官方生态共建通道申领。
如果你也对旅行 AI 感兴趣,欢迎在评论区聊聊你最想用 AI Agent 解决什么旅行场景的问题?
本文收录于 RollingGo 酒旅开发者社群 | 执笔:生态共建开发者