viator-mcp
This server is an MCP connector to the Viator Partner API (read-only) that lets you search tours/activities, get product details, availability, attractions, destinations, and reference data from Claude or any MCP client.
Search products with structured filters (destination, tags, price, dates, rating, duration, flags), sorting, paging, and compact summaries.
Get full product details by product code: descriptions, inclusions/exclusions, itinerary, options, cancellation policy, review summary, booking URL.
Free-text search across products, attractions, and destinations (e.g. "colosseum underground tour").
Search attractions by destination and get attraction details (hours, reviews, linked product codes).
Check availability schedules for a product: seasons, days, start times, unavailable dates, and per-option age-band pricing.
List destinations and resolve location references (meeting/pickup points, IDs) with names, addresses, coordinates.
Get exchange rates between supported currencies to convert supplier-currency prices.
List product tags for filtering, with parent-tag hierarchy and localized names.
Health check tool to verify API key resolution and authentication status.
All tools are read-only; product URLs include affiliate campaign tracking when desired.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@viator-mcpsearch for food tours in Rome"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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
{
"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).
Related MCP server: Rezdy Agent MCP Server
Tools
Area | Tools |
Products |
|
Search |
|
Attractions |
|
Availability |
|
Reference |
|
Health |
|
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 |
| yes | Viator Partner API key (sent as |
| no | API host (default production; set |
| no |
|
| no | Seconds to cache identical reads (default |
| no | Seconds to cache reference data — destinations, tags, locations, exchange rates (default |
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 bundleThe API surface this server is coded against is pinned in docs/VIATOR-API.md.
License
MIT
Available Tools
11 toolsvt_get_attractionARead-only
Get details for one Viator attraction by id — name, destination, opening hours, review summary, mapped product codes, and the attraction URL.
| Name | Required | Description | Default |
|---|---|---|---|
| view | No | Response shape: "compact" (default) drops fields the response already carries elsewhere; "full" returns every field this server understands. compact strips image/avatar URLs from the response; "full" returns Viator's payload untouched. No field projection on this tool — every other field comes back as Viator sent it. | |
| attraction_id | Yes | Viator attraction id | |
| campaign_value | No | Affiliate campaign tracking id — appended to the productUrl/attractionUrl/destinationUrl Viator returns |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the read-only nature is covered. The description adds the list of returned fields, which is helpful behavioral context, but it does not disclose any additional behavior such as rate limits, error handling, or response format beyond what annotations already imply. With annotations covering the safety profile, this is adequate but not enriched.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, tightly written sentence that front-loads the core purpose and lists the key return fields without redundancy. Every word earns its place; there is no fluff or unnecessary detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple getter with one required parameter and read-only annotations, the description is complete. It lists the return fields, the schema documents all parameters, and the openWorldHint annotation covers unexpected fields. Nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% — all three parameters (attraction_id, view, campaign_value) have descriptions in the schema. The tool description itself does not add any parameter-specific meaning beyond what the schema provides, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get' and the resource 'details for one Viator attraction by id', and enumerates the specific fields returned (name, destination, opening hours, review summary, mapped product codes, and the attraction URL). It distinguishes itself from sibling search tools by emphasizing 'by id', making it unmistakably a single-resource getter.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'by id' strongly implies the tool is used when the attraction id is already known, as opposed to search tools like vt_search_attractions. However, it does not explicitly state when not to use it or name alternatives, but the context is clear enough for an agent to infer the appropriate use case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vt_get_availability_scheduleARead-only
Get the availability schedule and pricing for a Viator product — seasons, days of week, start times, unavailable dates, and per-age-band pricing for every product option. NOTE: prices are in the SUPPLIER's currency (see the currency field); convert with vt_get_exchange_rates.
| Name | Required | Description | Default |
|---|---|---|---|
| view | No | Response shape: "compact" (default) drops fields the response already carries elsewhere; "full" returns every field this server understands. compact strips image/avatar URLs from the response; "full" returns Viator's payload untouched. No field projection on this tool — every other field comes back as Viator sent it. | |
| product_code | Yes | Viator product code, e.g. 5010SYDNEY |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, covering the safety profile. The description adds non-obvious behavioral context by warning that prices are in the supplier's currency and pointing to the currency field and conversion tool, which an agent would not infer from annotations alone. No contradiction exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single information-dense sentence with a short, targeted note for the currency caveat. It front-loads the resource and avoids repeating schema details, so every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only lookup with two well-documented parameters, the description conveys the key return dimensions, the currency caveat, and the conversion path. Since there is no output schema, this level of detail is sufficient for an agent to know what to expect and how to handle prices.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: both product_code and view already have detailed descriptions. The description restates some response-level concepts like per-age-band pricing but adds no new parameter-level meaning beyond what the schema provides, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Get') and a specific resource ('availability schedule and pricing for a Viator product'), then names the concrete data dimensions returned: seasons, days of week, start times, unavailable dates, and per-age-band pricing. This clearly distinguishes the tool from sibling search/product/tag tools without requiring the agent to inspect schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The intended use is reasonably implied by the phrase 'availability schedule and pricing for a Viator product,' but there is no explicit when-to-use guidance or named alternative. The only cross-tool note directs the agent to vt_get_exchange_rates for currency conversion, which is useful but does not help choose this tool over siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vt_get_exchange_ratesARead-only
Get exchange rates between currencies Viator supports — needed to convert supplier-currency prices from vt_get_availability_schedule. Reference data — cached.
| Name | Required | Description | Default |
|---|---|---|---|
| view | No | Response shape: "compact" (default) drops fields the response already carries elsewhere; "full" returns every field this server understands. compact strips image/avatar URLs from the response; "full" returns Viator's payload untouched. No field projection on this tool — every other field comes back as Viator sent it. | |
| source_currencies | No | Source currency codes (e.g. ["EUR"]) | |
| target_currencies | No | Target currency codes (e.g. ["USD"]) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true. The description adds value with 'Reference data — cached', which discloses that rates are cached reference data rather than live quotes, informing expectations about freshness. This is a useful behavioral addition beyond the structured annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short, telegraphic sentences front-load the purpose, then add the integration hint and caching note. There is no filler; every clause either clarifies scope or gives behavioral context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With only three well-documented parameters, read-only/open-world annotations, and no output schema, the description covers the essential 'why' (price conversion after availability schedule) and 'what to expect' (cached reference data). The only minor gap is the absence of a note about default behavior when source/target arrays are omitted, but the schema's clarity keeps this from being a substantial shortfall.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: the view parameter has a detailed response-shape explanation, and source_currencies/target_currencies both provide enum lists and examples. The description itself adds no parameter-level detail, but the schema fully documents the parameters, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Get exchange rates between currencies Viator supports'. It also ties the purpose to a concrete downstream use case ('needed to convert supplier-currency prices from vt_get_availability_schedule'), which distinguishes it clearly from every sibling tool, all of which are about products, attractions, destinations, or health.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells the agent when this tool is needed: after vt_get_availability_schedule, to convert supplier-currency prices. While it doesn't list alternatives or when-not-to-use conditions, no sibling appears to offer exchange rates, so the provided context is a clear and sufficient directive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vt_get_locationsARead-only
Resolve Viator location references (e.g. "LOC-...", meeting points, pickup points from product details) to names, addresses, and coordinates. Up to 500 references per call. Reference data — cached.
| Name | Required | Description | Default |
|---|---|---|---|
| view | No | Response shape: "compact" (default) drops fields the response already carries elsewhere; "full" returns every field this server understands. compact strips image/avatar URLs from the response; "full" returns Viator's payload untouched. No field projection on this tool — every other field comes back as Viator sent it. | |
| location_refs | Yes | Location reference ids from product content (max 500) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, lowering the burden on the description. The description adds useful behavioral context: a 500-reference batch ceiling and the fact that reference data is cached. This helps an agent anticipate limits and stability without contradicting annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence with no filler. The primary verb and resource are front-loaded, examples are compact, and the batch limit and caching note each earn their place in under the same clause.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter read-only lookup tool, the description covers inputs, outputs, and key constraints. The view parameter semantics are fully handled by the schema, and the output categories are stated in the description. It is nearly complete, missing only minor details like error or empty-result behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema fully documents both parameters. The description adds helpful examples of valid references and the output shape, but it does not substantially extend what the schema already states. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Resolve'), a clear resource ('Viator location references'), and the expected output ('names, addresses, and coordinates'). The examples ('LOC-...', meeting points, pickup points) make the tool's role unmistakable and distinguish it from product search or attraction search siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'from product details' and the concrete examples make the intended use case clear: when you have Viator location reference IDs and need human-readable details. It does not explicitly name alternatives or exclusion criteria, but the context is strong enough for an agent to choose this tool confidently.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vt_get_productARead-only
Get full details for one Viator product by product code — description, inclusions/exclusions, itinerary, product options, cancellation policy, booking URL, review summary.
| Name | Required | Description | Default |
|---|---|---|---|
| view | No | Response shape: "compact" (default) drops fields the response already carries elsewhere; "full" returns every field this server understands. compact strips image/avatar URLs from the response; "full" returns Viator's payload untouched. No field projection on this tool — every other field comes back as Viator sent it. | |
| product_code | Yes | Viator product code, e.g. 5010SYDNEY | |
| campaign_value | No | Affiliate campaign tracking id — appended to the productUrl/attractionUrl/destinationUrl Viator returns |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, covering safety. The description adds value by listing exactly what fields the tool returns (description, inclusions/exclusions, itinerary, etc.), which is behaviorally useful. It does not mention error cases or edge behavior, but with annotations covering the safety profile, this is a minor gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, information-dense sentence that front-loads the core purpose and enumerates the return content. There is zero waste; every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple get-by-code tool with thorough schema documentation and read-only/open-world annotations, the description covers the key return fields. It does not describe output structure (no output schema), but the field list gives the agent enough to know what to expect. No critical usage detail is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%: all three parameters (product_code, view, campaign_value) have detailed descriptions, including the view enum's explanation of compact vs. full. The description itself adds no parameter information beyond what the schema already provides, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Get'), a precise resource ('one Viator product'), and the key identifier ('by product code'), and enumerates the returned content (description, inclusions/exclusions, itinerary, options, cancellation policy, booking URL, review summary). This clearly differentiates it from sibling search/list tools like vt_search_products or vt_get_attraction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description strongly implies usage context: you need a product code to fetch details, which is distinct from search tools that find products. It does not explicitly name alternatives or state when not to use it, but the wording 'Get full details for one Viator product by product code' gives clear context without exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vt_healthcheckVerify credentials and upstream reachabilityARead-onlyIdempotent
Resolves the credential the way real tools do, then makes one authenticated request to api.viator.com. Reports which source supplied the credential, whether api.viator.com accepted it, the round-trip time, and a plain-English hint distinguishing 'no credential' from 'credential rejected' from 'a api.viator.com-side problem'. Read-only; never returns the credential itself. Call this when a real tool fails and you want to know which hop broke.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint. The description goes well beyond these by explaining exactly how the credential is resolved, that exactly one authenticated request is made, what metrics are reported, and that the credential itself is never returned. This gives an agent a clear model of the tool's runtime behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences with no filler: the first explains the mechanism, the second enumerates the reported outputs, and the third covers safety and usage. It is front-loaded, specific, and every sentence adds operational value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only diagnostic tool with no output schema, the description fully covers what an agent needs: behavior, return contents, safety (never returns credential), and when to call it. The sibling context and annotations cover the remaining operational constraints.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the schema provides nothing to document and the baseline is 4. The description does not need to explain parameters; it instead explains what the no-input call returns, which is the relevant semantic content for this tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific diagnostic verb ('healthcheck', 'resolves the credential ... makes one authenticated request') and clearly distinguishes this from the data-fetching sibling tools like vt_search_products and vt_get_product. It identifies the target resource (api.viator.com) and the exact outputs reported, leaving no ambiguity about what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives an explicit trigger: 'Call this when a real tool fails and you want to know which hop broke.' This clearly positions it as a diagnostic fallback relative to the sibling tools. It does not name specific alternatives or state when not to use it, but the usage context is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vt_list_destinationsARead-only
List every Viator destination (cities, regions, countries) with ids, parent hierarchy, IATA codes, time zones, and coordinates. Use the destinationId with vt_search_products / vt_search_attractions. Reference data — cached.
| Name | Required | Description | Default |
|---|---|---|---|
| view | No | Response shape: "compact" (default) drops fields the response already carries elsewhere; "full" returns every field this server understands. compact strips image/avatar URLs from the response; "full" returns Viator's payload untouched. No field projection on this tool — every other field comes back as Viator sent it. | |
| campaign_value | No | Affiliate campaign tracking id — appended to the productUrl/attractionUrl/destinationUrl Viator returns |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint; the description adds that the data is cached reference data and that the list is comprehensive ('every ... destination'), helping the agent judge freshness and scope. It does not mention pagination or response volume, but for a read-only cached list the added context is a meaningful improvement over annotations alone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, each earning its place: purpose and returned fields, downstream usage, and cached-reference status. No filler, no restatement of schema fields, and no redundant phrasing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no required parameters, no output schema, and full schema coverage, the description conveys what fields are returned, how to consume the output (destinationId), and that the data is cached. The only notable omission is volume/pagination guidance, which is minor for a cached reference-data listing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the schema already explains view's compact/full behavior and campaign_value's URL-appending effect. The description itself adds no parameter-level detail beyond the downstream destinationId usage, so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List'), a precise resource ('every Viator destination'), and enumerates the returned fields (ids, parent hierarchy, IATA codes, time zones, coordinates). It also states the downstream use of destinationId, but it does not explicitly differentiate from the similar-sounding sibling vt_get_locations, so differentiation is implicit rather than explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear usage context: this is cached reference data whose destinationId is meant to be consumed by vt_search_products / vt_search_attractions. It does not state when not to use it or compare it against a lookup alternative, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vt_list_product_tagsARead-only
List all Viator product tags (tag id → names in every locale, with parent-tag hierarchy). Use tag ids to filter vt_search_products. Reference data — cached.
| Name | Required | Description | Default |
|---|---|---|---|
| view | No | Response shape: "compact" (default) drops fields the response already carries elsewhere; "full" returns every field this server understands. compact strips image/avatar URLs from the response; "full" returns Viator's payload untouched. No field projection on this tool — every other field comes back as Viator sent it. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true. The description adds behavioral context beyond annotations by noting that the data is cached, that it returns every locale, and that it includes a parent-tag hierarchy. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler. The core action and response shape are front-loaded, followed by the primary usage guidance and a short cached-data note. Every clause adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list tool with one optional parameter and no output schema, the description covers the action, response contents, relationship to sibling tools, and data freshness. Nothing essential for an agent to select and invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single optional parameter `view` has its own detailed description explaining compact vs full response shapes. The tool description does not add parameter-level detail, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'List all Viator product tags', and details the exact response shape: tag id → names in every locale, plus parent-tag hierarchy. This clearly distinguishes it from sibling search tools like vt_search_products and vt_list_destinations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states the intended use case: 'Use tag ids to filter vt_search_products.' It also signals that this is reference data and cached, which informs when to call it. It does not explicitly list when not to use it or alternative tools, but the context is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vt_search_attractionsARead-only
List attractions (landmarks, museums, points of interest) in a Viator destination, including the product codes mapped to each attraction. Use vt_list_destinations to find destination ids.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | Sort key (default: DEFAULT) | |
| view | No | Response shape: "compact" (default) drops fields the response already carries elsewhere; "full" returns every field this server understands. compact strips image/avatar URLs from the response; "full" returns Viator's payload untouched. No field projection on this tool — every other field comes back as Viator sent it. | |
| count | No | Results per page (max 30; default 10) | |
| start | No | 1-based index of the first result | |
| campaign_value | No | Affiliate campaign tracking id — appended to the productUrl/attractionUrl/destinationUrl Viator returns | |
| destination_id | Yes | Destination id (from vt_list_destinations) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety and openness profile is covered. The description adds only the product-code detail, not behavioral traits such as pagination behavior or result limits, but with annotations present the bar is lower.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences: the first front-loads the tool's purpose and payload, the second provides the essential prerequisite. No filler or repetition of schema content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
All required invocation details are present: the required destination_id is explained, the response includes product codes, and paging/sort parameters are self-documenting in the schema. Since there is no output schema, a bit more return-shape detail would make it fully complete, but the current description is sufficient for a straightforward listing call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers all six parameters with descriptions, including defaults, ranges, and the source of destination_id, so the description doesn't need to add much. It reinforces destination_id's origin but adds no new parameter-level meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('List') and resource ('attractions in a Viator destination'), with examples of what counts as an attraction and a distinctive detail: product codes mapped to each attraction. This clearly differentiates it from sibling tools like vt_get_attraction or vt_search_products.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a direct prerequisite: 'Use vt_list_destinations to find destination ids.' It doesn't explicitly state when not to use the tool or compare against alternatives like vt_search_freetext, but the context for using it is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vt_search_freetextARead-only
Free-text search across Viator products, attractions, and destinations (e.g. "colosseum underground tour"). The fastest way to find things when you don't have a destination id yet.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | Product sort key | |
| view | No | Response shape: "compact" (default) drops fields the response already carries elsewhere; "full" returns every field this server understands. compact (default) projects the PRODUCT results down to their product code, title, from-price and currency, rating, review count, duration, confirmation type, flags, booking URL and cover image and strips image/avatar URLs from the attraction and destination results; "full" returns Viator's payload untouched. | |
| count | No | Results per page per type (max 50; default 10) | |
| order | No | Sort direction | |
| start | No | 1-based index of the first result (per type) | |
| currency | No | Currency for request/response prices (default USD) | USD |
| end_date | No | Only products operating on/before this date (YYYY-MM-DD) | |
| max_price | No | Maximum product from-price (in currency) | |
| min_price | No | Minimum product from-price (in currency) | |
| min_rating | No | Minimum average traveler rating (0-5) | |
| start_date | No | Only products operating on/after this date (YYYY-MM-DD) | |
| destination | No | Restrict product results to a destination id | |
| search_term | Yes | Free-text search term | |
| search_types | No | Which result types to return (default: PRODUCTS only) | |
| campaign_value | No | Affiliate campaign tracking id — appended to the productUrl/attractionUrl/destinationUrl Viator returns |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safe-read and external-data profile is covered. The description adds that results span three entity types and frames the call as the 'fastest' lookup, but says nothing about pagination per type, result shape, or auth/campaign behavior beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero waste, with the scope statement front-loaded ahead of the usage hint. The example query is compact and useful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only search tool with a fully documented 15-parameter schema and no output schema, the description covers the essential what and when. It could note that results are paginated per entity type, but the schema and count's 'per type' wording largely carry that, leaving only a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and every one of the 15 parameters is documented in the schema, so the schema carries the semantics. The description only illustrates the search_term with an example and adds nothing about sort, view, date, price, or type filters — the baseline 3 for full coverage applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (search), the resource span (products, attractions, destinations), and the modality (free-text) with a concrete example query. The clause 'when you don't have a destination id yet' implicitly distinguishes it from the destination-scoped siblings like vt_search_products and vt_search_attractions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear when-to-use context: use this as the fastest entry point before a destination id is known. It stops short of naming the alternative tools (vt_search_products, vt_search_attractions) or stating explicit exclusions, so it is strong but not fully routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vt_search_productsARead-only
Search Viator tours, activities and experiences with structured filters (destination, tags, price, dates, rating, duration). Returns product summaries with pricing and booking URLs. Use vt_list_destinations to find destination ids and vt_list_product_tags for tag ids.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | Sort key (default: DEFAULT — Viator relevance) | |
| tags | No | Tag ids products must match (from vt_list_product_tags) | |
| view | 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. | |
| count | No | Results per page (max 50; default 10) | |
| flags | No | Product flags, e.g. FREE_CANCELLATION, LIKELY_TO_SELL_OUT, PRIVATE_TOUR | |
| order | No | Sort direction | |
| start | No | 1-based index of the first result to return | |
| currency | No | Currency for request/response prices (default USD) | USD |
| end_date | No | Only products operating on/before this date (YYYY-MM-DD) | |
| max_rating | No | Maximum average traveler rating (0-5) | |
| min_rating | No | Minimum average traveler rating (0-5) | |
| start_date | No | Only products operating on/after this date (YYYY-MM-DD) | |
| destination | No | Destination id (from vt_list_destinations), e.g. "732" for Paris | |
| lowest_price | No | Minimum from-price (in currency) | |
| highest_price | No | Maximum from-price (in currency) | |
| campaign_value | No | Affiliate campaign tracking id — appended to the productUrl/attractionUrl/destinationUrl Viator returns | |
| max_duration_minutes | No | Maximum product duration in minutes | |
| min_duration_minutes | No | Minimum product duration in minutes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds the return shape ("product summaries with pricing and booking URLs"), which is useful context beyond the annotations, but says nothing about pagination semantics, rate limits, or auth. With annotations doing the heavy lifting, this is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences: what it searches and how, what it returns, and which tools supply the id inputs. Purpose and return value are front-loaded and nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully discloses that results are product summaries with pricing and booking URLs. All 18 parameters are documented in the schema, and the two id-source tools are named. The only gap is pagination behavior for the start/count pair, which is minor given the schema documents both.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% across all 18 parameters, including enums for sort/order/view/currency, so the schema fully documents syntax and constraints. The description only restates the filter categories at a high level (destination, tags, price, dates, rating, duration) and adds no semantics the schema lacks. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (search) and resource (Viator tours, activities, experiences) and enumerates the filter dimensions (destination, tags, price, dates, rating, duration). The phrase "structured filters" plus the two named helper tools distinguishes it from the sibling vt_search_freetext without requiring the schema to be opened.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description routes the agent to vt_list_destinations and vt_list_product_tags for required id values, which is genuine prerequisite guidance. However, it never states when to prefer this structured search over vt_search_freetext, nor any conditions under which this tool is the wrong choice. Usage is implied by the filter list rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
2 tool updates
v2.1.9- Changed
vt_search_freetext6 fields changed- added
Input schema / properties / end_date / formatAdded value: +"date" - added
Input schema / properties / end_date / patternAdded value: +"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$" - added
Input schema / properties / max_price / minimumAdded value: +0 - added
Input schema / properties / min_price / minimumAdded value: +0 - added
Input schema / properties / start_date / formatAdded value: +"date" - added
Input schema / properties / start_date / patternAdded value: +"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
- Changed
vt_search_products9 fields changed- added
Input schema / properties / end_date / formatAdded value: +"date" - added
Input schema / properties / end_date / patternAdded value: +"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$" - added
Input schema / properties / highest_price / minimumAdded value: +0 - added
Input schema / properties / lowest_price / minimumAdded value: +0 - changed
Input schema / properties / max_duration_minutes / minimumPrevious value: --9007199254740991New value: +0 - changed
Input schema / properties / min_duration_minutes / minimumPrevious value: --9007199254740991New value: +0 - added
Input schema / properties / start_date / formatAdded value: +"date" - added
Input schema / properties / start_date / patternAdded value: +"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$" - changed
Input schema / properties / view / descriptionPrevious value: -"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 raw response if Viator's shape drifts; \"full\" returns Viator's payload untouched."New value: +"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."
11 tool updates
v2.0.0- Changed
vt_get_attraction1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
vt_get_availability_schedule1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
vt_get_exchange_rates1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
vt_get_locations1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
vt_get_product1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
vt_healthcheck1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
vt_list_destinations1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
vt_list_product_tags1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
vt_search_attractions1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
vt_search_freetext1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
vt_search_products1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
11 tool updates
v1.2.1- Changed
vt_get_attraction1 field changed- added
Input schema / properties / viewAdded value: +{ + "description": "Response shape: \"compact\" (default) drops fields the response already carries elsewhere; \"full\" returns every field this server understands. compact strips image/avatar URLs from the response; \"full\" returns Viator's payload untouched. No field projection on this tool — every other field comes back as Viator sent it.", + "enum": [ + "compact", + "full" + ], + "type": "string" +}
- Changed
vt_get_availability_schedule1 field changed- added
Input schema / properties / viewAdded value: +{ + "description": "Response shape: \"compact\" (default) drops fields the response already carries elsewhere; \"full\" returns every field this server understands. compact strips image/avatar URLs from the response; \"full\" returns Viator's payload untouched. No field projection on this tool — every other field comes back as Viator sent it.", + "enum": [ + "compact", + "full" + ], + "type": "string" +}
- Changed
vt_get_exchange_rates1 field changed- added
Input schema / properties / viewAdded value: +{ + "description": "Response shape: \"compact\" (default) drops fields the response already carries elsewhere; \"full\" returns every field this server understands. compact strips image/avatar URLs from the response; \"full\" returns Viator's payload untouched. No field projection on this tool — every other field comes back as Viator sent it.", + "enum": [ + "compact", + "full" + ], + "type": "string" +}
- Changed
vt_get_locations1 field changed- added
Input schema / properties / viewAdded value: +{ + "description": "Response shape: \"compact\" (default) drops fields the response already carries elsewhere; \"full\" returns every field this server understands. compact strips image/avatar URLs from the response; \"full\" returns Viator's payload untouched. No field projection on this tool — every other field comes back as Viator sent it.", + "enum": [ + "compact", + "full" + ], + "type": "string" +}
- Changed
vt_get_product1 field changed- added
Input schema / properties / viewAdded value: +{ + "description": "Response shape: \"compact\" (default) drops fields the response already carries elsewhere; \"full\" returns every field this server understands. compact strips image/avatar URLs from the response; \"full\" returns Viator's payload untouched. No field projection on this tool — every other field comes back as Viator sent it.", + "enum": [ + "compact", + "full" + ], + "type": "string" +}
- Added
vt_healthcheck - Changed
vt_list_destinations1 field changed- added
Input schema / properties / viewAdded value: +{ + "description": "Response shape: \"compact\" (default) drops fields the response already carries elsewhere; \"full\" returns every field this server understands. compact strips image/avatar URLs from the response; \"full\" returns Viator's payload untouched. No field projection on this tool — every other field comes back as Viator sent it.", + "enum": [ + "compact", + "full" + ], + "type": "string" +}
- Changed
vt_list_product_tags1 field changed- added
Input schema / properties / viewAdded value: +{ + "description": "Response shape: \"compact\" (default) drops fields the response already carries elsewhere; \"full\" returns every field this server understands. compact strips image/avatar URLs from the response; \"full\" returns Viator's payload untouched. No field projection on this tool — every other field comes back as Viator sent it.", + "enum": [ + "compact", + "full" + ], + "type": "string" +}
- Changed
vt_search_attractions1 field changed- added
Input schema / properties / viewAdded value: +{ + "description": "Response shape: \"compact\" (default) drops fields the response already carries elsewhere; \"full\" returns every field this server understands. compact strips image/avatar URLs from the response; \"full\" returns Viator's payload untouched. No field projection on this tool — every other field comes back as Viator sent it.", + "enum": [ + "compact", + "full" + ], + "type": "string" +}
- Changed
vt_search_freetext2 fields changed- removed
Input schema / properties / compactRemoved value: -{ - "default": false, - "description": "Return slim product summaries instead of full records", - "type": "boolean" -} - added
Input schema / properties / viewAdded value: +{ + "description": "Response shape: \"compact\" (default) drops fields the response already carries elsewhere; \"full\" returns every field this server understands. compact (default) projects the PRODUCT results down to their product code, title, from-price and currency, rating, review count, duration, confirmation type, flags, booking URL and cover image and strips image/avatar URLs from the attraction and destination results; \"full\" returns Viator's payload untouched.", + "enum": [ + "compact", + "full" + ], + "type": "string" +}
- Changed
vt_search_products2 fields changed- removed
Input schema / properties / compactRemoved value: -{ - "default": false, - "description": "Return a slim summary per product (code, title, price, rating, URL) instead of full records", - "type": "boolean" -} - added
Input schema / properties / viewAdded value: +{ + "description": "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 raw response if Viator's shape drifts; \"full\" returns Viator's payload untouched.", + "enum": [ + "compact", + "full" + ], + "type": "string" +}
10 tool updates
v1.0.5- First observed
vt_get_attraction - First observed
vt_get_availability_schedule - First observed
vt_get_exchange_rates - First observed
vt_get_locations - First observed
vt_get_product - First observed
vt_list_destinations - First observed
vt_list_product_tags - First observed
vt_search_attractions - First observed
vt_search_freetext - First observed
vt_search_products
TDQS
Scored across 11 tools
Each tool targets a distinct resource+action: structured search (vt_search_products) vs free-text (vt_search_freetext), list/get pairs for products, attractions, tags, and destinations, plus availability, locations, exchange rates, and healthcheck. Descriptions actively cross-reference each other (e.g. pointing to vt_list_destinations for ids), making boundaries crystal clear.
All 11 tools use a uniform vt_ prefix with a consistent verb_noun pattern (search_*, get_*, list_*). The only near-deviation is vt_healthcheck, which is still readable and follows the prefix convention.
11 tools is well-scoped for a travel discovery API: search, detail lookups, reference data, and a diagnostic tool. Each tool earns its place without redundancy.
The discovery surface is comprehensive: search, product/attraction detail, availability/pricing, tags, destinations, location resolution, exchange rates, and healthcheck. It lacks booking/checkout operations, but as a read-only discovery set it covers the core workflows with no dead ends.
Maintenance
Related MCP Connectors
Hotel booking MCP server. Search, book, and manage reservations across 250K+ properties worldwide.
Official MCP server for MAQAMI, a hotel and flight booking platform with 3M+ hotels. Search live hotel rates and flights, look up places, airports and hotel details, then prebook and book. Remote Streamable HTTP endpoint, no API key required.
AI marketplace — flights, tours, activities, transport & more via MCP. No auth required.
Flight search MCP server providing search, pagination, and itinerary details for AI assistants.
Related MCP Servers
- AlicenseBqualityDmaintenanceThis MCP server provides access to TripAdvisor data for planning vacations, enabling users to search for and get details about locations, attractions, restaurants, and hotels through an interactive planning experience.42Apache 2.0
- FlicenseBqualityFmaintenanceAn MCP server for integrating with the Rezdy Agent API to manage travel marketplace products and bookings. It enables travel agents to search availability, process payments, and manage customer relationships using natural language.162-
- FlicenseNot gradedqualityDmaintenanceMCP server for travel program search, comparison, and booking via Yourttoo API, optimized for LLMs with token-saving responses.-
- AlicenseNot gradedqualityBmaintenanceMCP server for the Travelpayouts (Aviasales) API. It provides 13 tools for flight search, price calendars, hotel search, and airport/airline/city lookup.57 npmMIT