
TourScanner
io.github.TourScanner-org由 GitHub 账号 TourScanner-org 发布v1.0.0更新于 Oct 30, 2026
Search, check availability and book tours and activities worldwide.
概览
TourScanner 远程 MCP 服务器,让助手搜索全球旅游与活动、查询实时可订情况,并通过 Stripe 结账链接发起预订。
- 可以做什么
- 搜索约百万条来自 14 家供应商的旅游、活动与景点,支持分面筛选和分页
- 查询指定活动与日期的实时可订时段和价格
- 获取票种选项与预订所需问题
- 创建占位并返回 Stripe 结账链接,查询预订状态
- 按活动报告是否可由平台直接预订,还是需转交合作方
- 适用场景
- 适合让助手帮旅客查找某城市的游玩项目、比较实时价格与时段,并准备带支付链接的预订。也适合需要供应商实时可订数据而非静态目录的行程类工具。
- 运行要求
- 需要 TourScanner API 密钥,通过 X-API-Key 请求头发送;密钥需邮件申请、人工发放。服务器为远程端点,无需本地运行时或安装包。需要能访问 TourScanner 主机的网络。
安装
在 SourceWeft 中
- 打开 控制台中的 TourScanner,将其添加到工作区。
- 连接 X-API-Key 凭据。它们会被私密存储,绝不会在公开页面上展示。
- 为需要使用其工具的对话启用该服务。
Web executable,通过 Streamable HTTP。 远程服务在工作区中配置后即可从网页运行时运行。
交给智能体安装
把这段提示词粘贴到 Claude Code、Codex、Cursor 等智能体,或 SourceWeft 对话中。智能体会读取该服务器的安装指南,先向你展示发布者、端点和登录方式,经你同意后再把它添加到你的客户端。密钥不会写进任何命令。
阅读 https://sourceweft.com/mcp/io.github.TourScanner-org%2Ftourscanner/install.md,并按其中说明把这个 MCP 服务器接入我的客户端。修改任何配置之前,先告诉我它的发布者、端点和登录方式,等我确认。不要把 API 密钥写进命令或我会提交的文件;问我密钥应从哪里获取。其他 MCP 客户端
把它添加到你客户端的 mcpServers 配置中。
{
"mcpServers": {
"tourscanner": {
"type": "http",
"url": "https://tourscanner.ai/api/mcp",
"headers": {
"X-API-Key": "<YOUR_API_KEY>"
}
}
}
}README
TourScanner AI guide
How to use the TourScanner API: search tours and activities, check live availability, and book them. It also covers the MCP server, if you want an AI agent to do the same thing.
It's a REST API (JSON over HTTPS, OpenAPI 3.1) for tours, activities and attractions worldwide. The catalog is about a million activities from 14 providers, behind one set of endpoints. This repo is the practical side of the docs: what to call, in what order, and the mistakes that cost people an afternoon.
Reference docs live at tourscanner.ai/docs, and the machine-readable spec is at tourscanner.ai/openapi.json.
Get a key
Keys are issued by hand. Email [email protected] with what you're building and which cities matter to you. Send it in the X-API-Key header on every request. Without one you get a 401.
First request
You get back activities, plus total, page and some facets. Each activity has an id, a name, a rating, and a price of the form { "currency": "EUR", "price": 5400 }.
Prices are integers in minor units, so 5400 is 54.00. This applies to the min_price and max_price filters too.
The booking flow
Five calls, in this order:
GET /api/search/activitiesto find something.POST /api/availability/slotsfor the real slots and prices on a date.POST /api/booking/optionsfor the ticket variants and booking questions.POST /api/booking/holdreserves the slot and returns a StripecheckoutUrl. The card is authorized, not charged.POST /api/booking/confirmafter the customer pays. This confirms with the supplier and captures the payment.
Details and request bodies are in docs/booking.md. A runnable version of steps 1 to 4 is in examples/node/book.mjs.
Examples
Node, Python, Ruby, Go and curl. Each does the same three things: search, check availability, and run the booking flow up to the Stripe link. None needs a package beyond the language's standard library (Node 18 or newer).
Run the Go ones from examples/go. The curl scripts are in examples/curl.
They read your key from TOURSCANNER_API_KEY. Set TOURSCANNER_BASE_URL to point them at a different host. Run book without OPTION_CODE first: it prints the options and stops, so you can pick a code. On the production host a full book run places a real hold and creates a real Stripe checkout.
Missing your language? The API is plain JSON over HTTPS, so any HTTP client works. The OpenAPI spec above will generate a client for most languages.
For AI agents
There's a remote MCP server at https://tourscanner.ai/api/mcp. It exposes 12 tools covering search, availability, checkout links, and booking status. Setup for Claude, Cursor, VS Code and others is in docs/mcp.md.
Things that trip people up
- Cents, not euros. Every price field is in minor units.
productOptionCodecomes frombooking/options. The hold fails without it, and the codes differ per activity.adultsis required inpassengers, and it has to be at least 1.- Phone numbers need the country code, like
+442079460000. Anything else is rejected. - Stripe sessions expire after 30 minutes. After that the hold is released.
- Check availability right before booking. Search results come from our catalog, and slots come live from the supplier. They can disagree.
- Not every provider books in-house. For the others you hand the traveller off to the partner instead. Adding
providers=2,3,7to a search limits it to the ones we book directly. The MCPget_activitytool reports this per activity asbookableByUs. - Rate limits return
429with aRetry-Afterheader. Honor it.
Environments
The production host places real holds and real Stripe checkouts. If you want a sandbox on provider test rails, ask for one when you get your key.
License
MIT for the code in this repo. The catalog content you get from the API is covered by the terms.
来源:README.md,提交 534e327
工具
0版本历史
1- v1.0.0最新Oct 30, 2026
评分
已满足适用检查项的 85%
该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。
- 近 30 天内可连通必需25 分
- 已声明认证方式必需10 分
- 已列出工具15 分
请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。
- 描述必需15 分
- 图标10 分
- 文档15 分
- 许可证10 分