About viator-mcp
viator-mcp connects Claude to the Viator Partner API for read-only discovery of tours, activities, and travel information. It supports structured and free-text searches, with product availability and destination details.
Key features
- 01Search products with structured filters
- 02Search by free text
- 03Retrieve product details and availability
- 04Browse attractions and destinations
- 05Look up locations and exchange rates
Use cases
- 01Find tours matching search criteria
- 02Check a product's details and availability
- 03Explore attractions in a destination
- 04Retrieve destination or currency reference data
MCP support
Exposes read-only Viator Partner API searches and reference data as MCP tools. It does not provide booking endpoints; product results include a booking URL.
Configuration
Local server config is the same for every client. Copy it into your client’s MCP config file.
npx -y @chrischall/viator-mcpVIATOR_API_KEYSecretViator Partner API key (exp-api-key) — free Basic Access affiliate signup at partnerresources.viator.comVIATOR_API_BASE_URLAPI host (default production; set https://api.sandbox.viator.com/partner for a sandbox key)VIATOR_LANGUAGEAccept-Language for response text, e.g. en-US, es, fr, de, ja (default en-US)VIATOR_CACHE_TTLSeconds to cache identical read responses (default 60; 0 disables)VIATOR_STATIC_CACHE_TTLSeconds to cache reference data — destinations, tags, locations, rates (default 3600; 0 disables)Local servers need a runtime on your machine (e.g. Node.js 18+). Config file locations differ by client; see your client’s docs.
Tools
11Saved tool list · updated 2w ago
| Parameter | Type | Required | Description |
|---|---|---|---|
| sort | enum | No | Sort key (default: DEFAULT — Viator relevance)DEFAULT | PRICE | TRAVELER_RATING | ITINERARY_DURATION | DATE_ADDED |
| tags | array | No | Tag ids products must match (from vt_list_product_tags) |
| view | enum | No | Response shape: "compact" (default) drops fields the response already carries elsewhere; "full" returns every field this server understands. compact (default) projects each result down to its product code, title, from-price and currency, rating, review count, duration, confirmation type, flags, booking URL and cover image, falling back to the media-stripped raw response if Viator's shape drifts; "full" returns Viator's payload untouched.compact | full |
| count | integer | No | Results per page (max 50; default 10) |
| flags | array | No | Product flags, e.g. FREE_CANCELLATION, LIKELY_TO_SELL_OUT, PRIVATE_TOUR |
| order | enum | No | Sort directionASCENDING | DESCENDING |
| start | integer | No | 1-based index of the first result to return |
| currency | enum | No | Currency for request/response prices (default USD)AED | ARS | AUD | BRL | CAD | CHF | CLP | CNY | COP | DKK | EUR | FJD | GBP | HKD | IDR | ILS | INR | ISK | JPY | KRW | MXN | MYR | NOK | NZD | PEN | PHP | PLN | RUB | SEK | SGD | THB | TRY | TWD | USD | VND | ZAR |
| end_date | string | No | Only products operating on/before this date (YYYY-MM-DD) |
| max_rating | number | No | Maximum average traveler rating (0-5) |
| min_rating | number | No | Minimum average traveler rating (0-5) |
| start_date | string | No | Only products operating on/after this date (YYYY-MM-DD) |
| destination | string | No | Destination id (from vt_list_destinations), e.g. "732" for Paris |
| lowest_price | number | No | Minimum from-price (in currency) |
| highest_price | number | No | Maximum from-price (in currency) |
| campaign_value | string | No | Affiliate campaign tracking id — appended to the productUrl/attractionUrl/destinationUrl Viator returns |
| max_duration_minutes | integer | No | Maximum product duration in minutes |
| min_duration_minutes | integer | No | Minimum product duration in minutes |
Details
From the project READMEviator-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
{
"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 — 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
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.
License
MIT
Comments
New to MCP?
From what the protocol is to installing your first server, these answers cover most first questions.
An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.