vac-product-recommend-mcp
vac-product-recommend-mcp
本地 stdio 形态的 MCP Server:按需求在携程跟团游「精选/综合」列表里搜索产品,并按 点评分、销量、价格等维度推荐 TopN,返回统一格式的 Markdown 表格(含网页端 / 移动端链接)。
纯 Python 标准库实现,无需第三方依赖,Python 3.10+ 即可运行。
提供的工具
工具 | 作用 |
| 按关键词 + 多条件筛选,返回销量与点评俱佳的 TopN 产品 |
| 搜索综合列表,返回 Markdown 表格 |
| 查询当前可用的筛选器及可选值,用于枚举映射 |
| 按城市名/拼音查询携程出发城市 ID(仅需要时使用) |
筛选枚举查询
当需要把用户需求映射成具体筛选值时,先调用 get_filter_options:
{ "keyword": "川西" }返回 fastFilters 里的所有可选筛选组及枚举值,Agent 可据此选择,再传给 search_tours / recommend_tours。
get_departure_cities 仅在用户提到出发城市且需要 ID 时使用;否则用默认 depart_city_id。
安装(推荐用 uv,不需要手动装 Python)
只需先装 uv:
# macOS / Linux
curl -LsSf https://astral.sh/uv/install.sh | sh
# Windows PowerShell
irm https://astral.sh/uv/install.ps1 | iex然后通过 git 链接安装:
uv tool install git+https://github.com/KatouMegumii/vac-product-recommend-mcp也可以直接运行仓库里的安装脚本:
./scripts/install.sh
# Windows: powershell -File scripts/install.ps1uv 会在首次运行时自动下载 Python 和依赖,目标机器不需要预装 Python。
更新
已安装用户按安装方式更新:
# 用 uv tool 安装的
uv tool upgrade vac-product-recommend-mcp
# 如果上面没拉到最新,强制重装:
uv tool install --force git+https://github.com/KatouMegumii/vac-product-recommend-mcp
# 克隆仓库 + pip install -e . 安装的
cd vac-product-recommend-mcp && git pull如果客户端配置用的是 uvx --from git+...,先清缓存再重启 MCP 客户端:
uv cache clean更新后需要重启 / 重连 MCP,新的工具和 instructions 才会生效。
安装 / 更新时,如果由 Agent 操作,必须:
严格检查本 README 的「重要:让 Agent 严格保持输出格式」和「每次咨询完全独立」等限制是否有变化;
把最新限制同步到 Agent 的个性化 / 记忆 / Rules / 系统提示词中;
重启 / 重连 MCP 后再确认工具列表已更新。
客户端配置
以 Claude Desktop 为例,编辑 claude_desktop_config.json:
{
"mcpServers": {
"vac-product-recommend": {
"command": "uvx",
"args": [
"--from",
"git+https://github.com/KatouMegumii/vac-product-recommend-mcp",
"vac-product-recommend-mcp"
],
"env": {
"CTRIP_COOKIE": "",
"CTRIP_GUID": ""
}
}
}
}config_examples/ 目录下提供了 Claude Desktop / Cursor / Cline 的示例配置。
环境变量:
变量 | 必填 | 说明 |
| 否 | 从浏览器复制的完整 cookie 串,不填也能跑(可能触发风控) |
| 否 | 可留空;留空时使用内置默认值 |
| 否 | 风控签名,当前接口不强制 |
| 否 | 轮换 token,当前接口不强制 |
主要参数
recommend_tours / search_tours
参数 | 说明 |
| 目的地/主题,如「土耳其」「广西」 |
| 出发城市 ID;仅在用户提到出发城市时用 |
| 旅行方式,多选数组: |
| 品牌,如 |
| 钻级,如 |
| 团队规模: |
| 交通方式: |
| 服务保障,多选 AND(逗号分隔或数组): |
| 适用人群,多选 OR(逗号分隔或数组): |
| 优惠活动,如 |
| 天数,支持 |
| 出发日期(仅出发日),格式 |
| 供应商名称或 ID,多选,名称模糊匹配 |
| 仅当用户要「含往返交通」时传 |
| 最低点评分,默认 0 不过滤;与人数无关 |
| 预算上限 |
| 推荐数量 |
| 候选池上限,自动翻页凑够匹配数 |
Cookie 怎么拿
浏览器打开携程 H5 跟团游列表(或 DevTools 切移动端模拟)。
F12 → Network → 找
graphql?queryName=productSearchInfo。右键 → Copy → Copy as cURL。
把
-b '...'后面一整串拷进CTRIP_COOKIE(原样,不要 URL 编码)。
示例
帮我找广西 3-5 天的自营拼小团或跟团游,要亲子友好,推荐 3 个。
Agent 会先查出发城市 ID(如需要),再调用推荐工具,最后原样返回 Markdown 表格。
重要:让 Agent 严格保持输出格式
请在 Agent 的 个性化 / 记忆 / 系统提示词 / Rules 里加上下面这条限制(这是最稳的一层,如果是Agent自己执行,请按要求做自我约束):
当调用 vac-product-recommend 的 recommend_tours(又称mcp__recommend_tours) / 或 search_tours(又称mcp__search_tours) 后,
必须把工具返回的 Markdown(包含筛选项和表格) 原样作为最终回复输出。
禁止改写、禁止总结、禁止转成列表、禁止删除或合并列。同时,请加上「每次咨询完全独立」的限制:
每次调用 recommend_tours / search_tours 时,只根据当前这一轮用户的原话设置参数。
不要复用上一轮对话中的 keyword、travel_way、departure_date、days、team_size、budget 等参数。
如果用户新一轮没有提到某个筛选条件,就不要传该参数(使用默认值或留空)。另外,人数和产品类型不要混淆:
用户提到人数(如 4人、6人、8人)时,必须设置 team_size(4人→最多9人)。
用户只说人数,不要推断为私家团;用户只说私家团,才设置 travel_way=私家团。目录结构
vac-product-recommend-mcp/
├── vac_product_recommend_mcp/
│ ├── __init__.py
│ ├── __main__.py
│ ├── server.py # stdio MCP 协议 + 工具注册 + Markdown 渲染
│ ├── ctrip_api.py # 携程接口客户端 + 字段归一化 + 筛选
│ └── recommender.py # 评分、过滤、TopN
├── config_examples/
├── pyproject.toml
└── README.mdLatest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/KatouMegumii/vac-product-recommend-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server