viator-mcp
# viator-mcp
[](https://www.npmjs.com/package/@chrischall/viator-mcp)
MCP server for the **Viator Partner API** (v2) — search tours, activities and experiences for Claude. Search the catalog with structured filters or free text, get product details and availability schedules, browse attractions and destinations, all over stdio.
> Developed and maintained by AI (Claude Code). Use at your own discretion.
## Quick start
```json
{
"mcpServers": {
"viator": {
"command": "npx",
"args": ["-y", "@chrischall/viator-mcp"],
"env": { "VIATOR_API_KEY": "your-viator-partner-api-key" }
}
}
}
```
Get a key by signing up as a Viator affiliate at [partnerresources.viator.com](https://partnerresources.viator.com/) — the **Basic Access** tier is free. This server targets that tier: read-only search/content/availability; no booking endpoints (product results carry a `productUrl` for booking on viator.com, tagged with your affiliate id).
## Tools
| Area | Tools |
| --- | --- |
| Products | `vt_search_products`, `vt_get_product`, `vt_list_product_tags` |
| Search | `vt_search_freetext` |
| Attractions | `vt_search_attractions`, `vt_get_attraction` |
| Availability | `vt_get_availability_schedule` |
| Reference | `vt_list_destinations`, `vt_get_locations`, `vt_get_exchange_rates` |
| Health | `vt_healthcheck` — is this connector working? Reports whether VIATOR_API_KEY resolved, whether Viator accepted it, and what to fix. Start here when another tool fails: an empty result can mean "no products" or "never authenticated". |
All tools are read-only. `vt_search_products` and `vt_search_freetext` accept `compact: true` for slim summaries (code, title, price, rating, booking URL) instead of full records.
## Environment
| Variable | Required | Description |
| --- | --- | --- |
| `VIATOR_API_KEY` | yes | Viator Partner API key (sent as `exp-api-key`) |
| `VIATOR_API_BASE_URL` | no | API host (default production; set `https://api.sandbox.viator.com/partner` for a sandbox key) |
| `VIATOR_LANGUAGE` | no | `Accept-Language` for response text (default `en-US`) |
| `VIATOR_CACHE_TTL` | no | Seconds to cache identical reads (default `60`; `0` disables) |
| `VIATOR_STATIC_CACHE_TTL` | no | Seconds to cache reference data — destinations, tags, locations, exchange rates (default `3600`) |
Viator rate-limits per endpoint on a rolling 10-second window and answers 429/503 with `Retry-After`; the client honors it (one retry) and the response cache absorbs repeated identical calls.
## Development
```bash
npm install
npm test # vitest; no real network calls
npm run build # tsc + esbuild bundle
```
The API surface this server is coded against is pinned in [docs/VIATOR-API.md](docs/VIATOR-API.md).
## License
MIT
TDQS
Scored across 11 tools
Each tool targets a distinct resource or action—products, attractions, destinations, tags, locations, availability, exchange rates—and the structured vs. free-text search split is clearly explained. Cross-references in descriptions make it easy for an agent to choose the right tool without confusion.
All tools share the vt_ prefix and mostly follow a verb_noun pattern with search/get/list. Minor deviations like vt_search_freetext and the one-word vt_healthcheck keep it from being perfectly consistent, but the overall naming is predictable and readable.
Eleven tools is well-scoped for a Viator discovery server: search, details, reference data, availability, exchange rates, and diagnostics each earn their place. There is no significant redundancy or padding.
The set covers the full read-side workflow: destination/tag discovery, product and attraction search, detail retrieval, availability and pricing, currency conversion, and location resolution. Booking is intentionally not included, with booking URLs provided instead, so there are no obvious dead ends.