Skip to main content
Glama

Server Details

Search Carnival and Royal Caribbean cruises, compare fare history and find Viator port experiences.

Ownership verified
Status
Healthy
Last Tested
Transport
Streamable HTTP ยท MCP 2025-11-25
URL

TDQS

A4.1/5.0

Scored across 11 tools

Disambiguation4/5

Most tools target clearly distinct phases: search, detail, comparison, history, and presentation. The main risk is overlap between find_port_excursions and present_excursions, and between search_cruises and list_departures, but the descriptions give strong usage boundaries.

Naming Consistency5/5

All tool names use consistent snake_case verb_noun patterns such as search_cruises, get_sailing, list_departures, and present_excursions. The small variation between find and search is contextually clear and does not break predictability.

Tool Count5/5

The 11 tools are well-scoped for cruise research, excursion discovery, and result presentation. Each tool has a distinct role, and the count stays comfortably within a reasonable range.

Completeness4/5

The surface covers the main research lifecycle: term suggestions, cruise search, sailing details, comparison, price history, excursion ports, excursion search/details, and presentation. Missing direct booking or live-availability tools is consistent with the stated research-only scope, though some ancillary gaps remain.

Available Tools

11 tools
compare_sailingsCompare cruisesA
Read-onlyIdempotent
Inspect

Compare two to four distinct sailings and optional exact offer IDs. Defaults to lowest current captured two-adult offer; occupancy is explicit per offer. No live or family quote.

NameRequiredDescriptionDefault
sailingsYes

Output Schema

NameRequiredDescription
kindYes
itemsYes
priceContextYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish that this is a read-only, idempotent, non-destructive operation. The description adds useful behavioral context by saying it defaults to the lowest current captured two-adult offer, that occupancy is explicit per offer, and that live or family quotes are not included.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three short, front-loaded sentences with no wasted text. Constraints, defaults, occupancy behavior, and the live/family exclusion are all communicated efficiently.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a comparison tool with an output schema and read-only annotations, the description covers the key scope, defaults, and limitations. It does not explain error handling for invalid or unavailable offers, but the essential information needed to invoke the tool correctly is present.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description clarifies the top-level sailings parameter as two to four distinct sailings and notes that exact offer IDs are optional. The nested schema already documents sailingId, offerId, cabinClass, and eventSelector in detail, while the description adds selection/default meaning around those fields.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: compare two to four distinct sailings, with optional exact offer IDs. This clearly distinguishes it from single-sailing siblings such as get_sailing and from search-oriented tools like search_cruises.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear usage context: comparison is limited to two to four distinct sailings and uses captured offers by default. It also states an exclusion, 'No live or family quote,' but does not explicitly name alternative sibling tools for those cases.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

find_port_excursionsFind port excursionsA
Read-onlyIdempotent
Inspect

Search Viator on demand only when the user asks for activities or excursions. Use a port ID from list_excursion_ports or get_sailing itinerary.portId. Pass the port visit date, not the cruise departure date. Optional q searches activity keywords such as snorkeling or food tours within that port; preserve it across pagination. Returns suggestions near the port, NOT verified time-ashore matches or live availability. Prices are indicative, may differ for the date/party, and are not cruise fares. Preserve complete affiliate URLs. No reviews or protected unique content. No widget.

NameRequiredDescriptionDefault
qNo
dateNo
pageNo
portIdYes

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false. The description adds meaningful behavioral limits beyond annotations: results are suggestions near the port, not verified time-ashore matches or live availability; prices are indicative and not cruise fares; affiliate URLs must be preserved; reviews/protected content and widgets are excluded.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core action and on-demand condition, and most sentences add concrete constraints. It is a dense single paragraph, and fragments like "No widget" are terse enough to be slightly underspecified rather than maximally clear.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an external search tool with no output schema and no schema parameter descriptions, the definition covers key invocation rules and important output caveats. It still omits explicit response-shape guidance and direct page-parameter behavior, leaving minor gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description must carry parameter meaning. It explains portId provenance, date as the port visit date, and q as activity keyword search preserved across pagination, but page is only indirectly mentioned through pagination and lacks direct semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: "Search Viator" for "activities or excursions" at a port. It also distinguishes the port-ID source siblings list_excursion_ports and get_sailing, though it does not explicitly differentiate this search from get_excursion or present_excursions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit usage conditions: search only on demand when the user asks for activities/excursions. It also names where to get portId, clarifies that date must be the port visit date rather than the cruise departure date, and explains preserving q across pagination.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_excursionExplore an excursionA
Read-onlyIdempotent
Inspect

Fetch details only for a Viator product the user selected from find_port_excursions. Returns allowed product content and an affiliate booking URL; no reviews, protected content or live availability. Verify meeting point, return timing and availability on Viator.

NameRequiredDescriptionDefault
productCodeYes

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, open-world, and non-destructive behavior. The description adds substantial context by stating what is returned (allowed product content and an affiliate booking URL) and what is not (reviews, protected content, live availability), which is exactly the kind of behavioral detail annotations cannot convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tightly written sentences. The source constraint is front-loaded, the return scope follows, and the verification caveat closes it without repetition or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter, read-only lookup with no output schema, the description covers the important gaps: what it returns, what it excludes, and why certain details must still be confirmed externally on Viator. An agent has enough context to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the semantic load for productCode. It does so by clarifying that the value is a Viator product selected from find_port_excursions, rather than an arbitrary code, though it does not restate the schema's character pattern.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: fetch details for a Viator product. It explicitly distinguishes this from the discovery sibling find_port_excursions and limits scope to a product the user already selected.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Names the prerequisite source: use only after the user selected a product from find_port_excursions. It also tells the agent to verify meeting point, return timing, and availability on Viator, leaving little ambiguity about when this tool is appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_price_historyView cabin price historyA
Read-onlyIdempotent
Inspect

Read one exact captured offer context's price history. contextKey is required from get_sailing offers. Never blends cabins, fares, markets, guest counts or events. Dates select overlapping captured observation spans; maxPoints retains the latest points.

NameRequiredDescriptionDefault
dateToNoInclusive latest observation date (YYYY-MM-DD).
dateFromNoInclusive earliest observation date; includes captured spans that overlap this date.
maxPointsNoRetain latest matching observations, default 100, maximum 200.
sailingIdYesStable sailing ID from search_cruises items[].id or list_departures items[].id.
contextKeyYesExact offers[].contextKey from get_sailing, identifying cabin/fare/occupancy/market/event; never infer or combine contexts.

Output Schema

NameRequiredDescription
kindYes
seriesYes
sailingIdYes
truncatedYes
priceContextYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive, closed-world. The description adds valuable behavioral context beyond them: the strict non-blending guarantee and the fact that dates select overlapping observation spans rather than exact-point matches. Return-value specifics are covered by the output schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences, front-loaded with the read scope and populated with the key constraint (required contextKey) and the two non-obvious semantics (span overlap, latest-point retention). No filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Five params fully documented in schema, output schema exists, annotations cover safety โ€” the description fills the remaining gaps: the hard dependency on get_sailing, the anti-blending rule, and the overlap/retention semantics. An agent has everything needed to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% so the baseline is 3, but the description adds real meaning: it reinforces contextKey's source and strictness and clarifies that dateFrom/dateTo operate on overlapping spans (not point containment) and that maxPoints retains the latest points. This is additive on top of an already complete schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Read one exact captured offer context's price history') with a scoping claim that distinguishes it from siblings โ€” no other sibling deals with price history. An agent can identify the tool and its precision level immediately.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly directs the agent to obtain contextKey from get_sailing offers and warns never to infer or blend contexts, which establishes the prerequisite flow. However, it does not name an alternative when the agent lacks a contextKey (e.g., get_sailing first) as an explicit 'use X instead' route.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_sailingExplore a sailingA
Read-onlyIdempotent
Inspect

Explore a CruiseHops sailing page: itinerary, cabin fares, price-history context and links to the website and official provider. Research only; no widget. Read sailing itinerary, cabin-filtered offers and booking URLs. Amenities and media are omitted by default; request them explicitly only when needed. No live availability or party total is guaranteed.

NameRequiredDescriptionDefault
offerIdNoExact current available two-adult offer ID from get_sailing offers[].id; must belong to this sailing/event.
sailingIdYesStable sailing ID from search_cruises items[].id or list_departures items[].id.
cabinClassNoNormalized cabin class: inside, oceanview, balcony, suite, or other, as captured on the offer.
includeMediaNoDefault false. Set true only when media is requested.
eventSelectorNoExact source eventSelector from a search result or offer; empty string is a valid standard event.
includeAmenitiesNoDefault false. Set true only when the user asks about on-board facilities or opens the amenities section.

Output Schema

NameRequiredDescription
kindYes
shipYes
mediaYes
offersYes
sailingYes
itineraryYes
selectionYes
priceContextYes

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive, closed-world, so the safety profile is fully covered. The description adds genuinely useful behavior: amenities and media are omitted by default, and no live availability or party total is guaranteed. That is real value, but it does not disclose response shape or pagination/limits, keeping it at a solid 3-4 borderline; the default-omission semantics push it to 3.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action and resource, then the constraints. Four short sentences with no filler, though the fragment style ('Research only; no widget.') is terse enough that it reads as telegraphic rather than fully polished.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, the description needn't explain return values, and rich annotations cover the safety profile. It closes the remaining gaps an agent would care about (default-omitted content, no guaranteed live availability), leaving only minor omissions around limits or error behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so every parameter including offerId provenance, cabinClass normalization, and the includeMedia/includeAmenities defaults is already documented in the schema. The description only restates the opt-in behavior for amenities/media, adding no syntax or provenance detail beyond the structured fields.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Explore a CruiseHops sailing page') and enumerates what it returns: itinerary, cabin fares, price-history context, links. It implicitly contrasts with a widget-based sibling via 'Research only; no widget', but never names compare_sailings or get_price_history, so sibling differentiation is partial.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Research only; no widget' establishes a clear usage context and rules out the presentation path, and the sentence on amenities/media tells the agent when to enable optional includes. It stops short of naming explicit alternatives for overlapping needs like price history or comparison.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_departuresExplore departure datesA
Read-onlyIdempotent
Inspect

List bounded, paginated unique dated sailings for a public ship-itinerary group ID. Preserves cabin/date filters; older event-specific group IDs remain supported.

NameRequiredDescriptionDefault
qNoFree-text cruise search; use suggest_cruise_terms to resolve precise entity names.
pageNoOne-based result page; default 1.
shipNoSource-native ship ID from items[].ship.id, not a suggestion term ID. Prefer terms for names.
sortNo
viewNoDefault groups combines departures for each ship itinerary; sailings returns one row per unique dated sailing. Event-specific fares remain available within each sailing.
termsNoStable term IDs from suggest_cruise_terms; prefer these for entity-name filtering.
dateToNoInclusive latest departure date (YYYY-MM-DD).
sourceNoSource ID: carnival or royal_caribbean.
amenityNoExact captured amenity name from get_sailing ship.amenities[].name.
groupIdYesPublic ship-itinerary group ID from search_cruises items[].groupId; this is not a sailing ID. Older event-specific group IDs remain supported.
dateFromNoInclusive earliest departure date (YYYY-MM-DD).
pageSizeNoItems per page, 1โ€“50; default 3.
returnByNoInclusive latest disembarkation date, YYYY-MM-DD; excludes unknown return dates. This deadline never expands with dateFlexDays.
nightsMaxNoMaximum nights, inclusive. Prefer nightsMin/nightsMax for cruise trip lengths; legacy durationMin/durationMax are days-only.
nightsMinNoMinimum nights. Uses advertised nights, otherwise calendar nights between captured departure and return dates. Unknown durations cannot match.
roundtripNo
cabinClassNoNormalized cabin class: inside, oceanview, balcony, suite, or other, as captured on the offer.
destinationNoShared destination suggestion ID or destination label. Umbrella destinations such as Caribbean include mapped subregions across cruise lines. Specific regions remain strict; generic Caribbean does not imply Eastern Caribbean. Prefer suggest_cruise_terms to resolve names.
durationMaxNoMaximum normalized duration in days, not advertised nights.
durationMinNoMinimum normalized duration in days, not advertised nights.
visitedPortNoVisited port selection: shared port suggestion ID or source-native items[].visitedPorts[].id. Reviewed equivalent ports match across cruise lines; source still restricts the line.
dateFlexDaysNoOptional departure flexibility, 0โ€“30 days before dateFrom and after dateTo. Requires both dates when positive. Exact matches stay in items; outside-window options are separate dateAlternatives. All other filters remain strict. Use only when the user permits flexible dates.
departurePortNoDeparture port selection: shared port suggestion ID or source-native items[].departurePort.id. Reviewed equivalent ports match across cruise lines; source still restricts the line. Different embarkation ports remain distinct.
priceMaxCentsNoMaximum captured USD cents per person for two guests; 50000 means USD 500/person. Not a party total.
departureTermsNoPort IDs from suggest_cruise_terms, matching departure only (OR within this list). General terms ports also match visited ports. Other filters still apply.
includeUnavailableNo

Output Schema

NameRequiredDescription
kindYes
pageYes
itemsYes
totalYes
groupIdYes
pageSizeYes
priceContextYes
dateAlternativesNo

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already establish read-only, idempotent, non-destructive, and closed-world behavior. The description adds useful behavioral context: results are bounded and paginated, cabin/date filters are preserved, and legacy event-specific group IDs are supported.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two concise sentences with no wasted text. The core purpose is front-loaded, followed by the relevant filter and legacy-support caveat.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 26-parameter tool, the description is short, but the schema has 88% description coverage and an output schema exists. The description covers the core contract and legacy behavior, leaving detailed parameter semantics to the well-documented schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is high at 88%, so the schema already documents most parameters in detail. The description only mentions cabin/date filter preservation and the group ID scope, adding little parameter meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'List bounded, paginated unique dated sailings' scoped to a public ship-itinerary group ID. It is clear what the tool does, though it does not explicitly distinguish itself from siblings like search_cruises or compare_sailings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the required group ID and the note that older event-specific group IDs remain supported, but the description does not explicitly say when to use this tool instead of search_cruises, compare_sailings, or get_sailing. The schema adds that groupId comes from search_cruises, but the description itself provides only indirect guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_excursion_portsExplore excursion portsA
Read-onlyIdempotent
Inspect

List local cruise ports and whether excursion searches are supported. No Viator product request. Use the returned port ID for find_port_excursions.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive, and closed-world behavior, so the safety profile needs no restating. The description's 'No Viator product request' adds genuine context about the absence of an external product call, consistent with openWorldHint=false, and it discloses what the result contains beyond a bare ID list.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the resource and purpose before the follow-up instruction. Nothing is padded or restated from the title or annotations.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no parameters and no output schema, the description must carry the return-value information itself, and it does: ports with a supported/unsupported flag plus the ID to use downstream. For a trivial lookup tool this leaves no meaningful gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is nothing for the description to disambiguate, and the 100% coverage baseline applies. The description does not need to explain inputs and correctly spends its words on output and follow-up instead.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List local cruise ports') plus the flag it returns ('whether excursion searches are supported'), and adds a scoping note ('No Viator product request'). It is clearly distinguishable from the excursion-search siblings, though it does not differentiate itself from other list_* tools such as list_departures.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes the agent forward: 'Use the returned port ID for find_port_excursions' tells the caller this is a prerequisite lookup step rather than the search itself. No when-not-to-use condition is given, but the intended sequence is unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

present_cruisesYour CruiseHops shortlistA
Read-onlyIdempotent
Inspect

Present the final shortlist of one to three selected sailings in ONE interactive widget. Call once after research, preserving exact offer IDs, cabin classes and event selectors. Research tools do not render widgets. Do not repeat all widget details in prose.

NameRequiredDescriptionDefault
sailingsYes

Output Schema

NameRequiredDescription
kindYes
itemsYes
priceContextYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds useful behavioral context beyond the annotations: it renders one interactive widget, should be called once, and replaces prose repetition of widget details. The annotations already establish that this is read-only, idempotent, and non-destructive. It does not need to explain return values because an output schema exists.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core action and resource, followed by timing, ID-preservation, and prose guidance. Every sentence is relevant, and there is no wasted wording.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the annotations, output schema, and simple one-parameter structure, the description is nearly complete for correct invocation. It covers purpose, timing, widget behavior, and preservation requirements, though it could explicitly mention the required sailingId field.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description partially compensates for the low schema description coverage by naming exact offer IDs, cabin classes, event selectors, and the one-to-three limit. However, it does not mention the required sailingId field or other schema-level constraints. It adds meaningful preservation guidance but leaves gaps that the schema must cover.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: presenting the final shortlist of one to three selected sailings in one interactive widget. It clearly distinguishes this final presentation step from research tools, which do not render widgets. An agent can identify the tool's role without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear timing guidance: call once after research, with one to three selected sailings. It also says research tools do not render widgets, which implicitly routes research calls elsewhere. It does not name specific sibling alternatives or explicitly state when not to call it, so it falls just 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.

present_excursionsExplore port experiencesA
Read-onlyIdempotent
Inspect

Open ONE interactive port-experience browser when the user wants excursions, tours or activities. Omit portId to let the user choose a port without calling Viator. Supply a supported local portId and optional visit date and activity keywords q to show matching experiences. This makes a fresh on-demand search; use the returned data as the current result. Preserve requested filters. Do not fetch details for every result. Users can change ports, dates, keywords and pages, inspect one selected experience and open Viator booking links. Suggestions are not verified to fit time ashore; no live availability. Use only on an experience request, never automatically for every cruise search.

NameRequiredDescriptionDefault
qNo
dateNo
pageNo
portIdNo

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond annotations, it discloses that the call makes a fresh on-demand search, that suggestions are not verified to fit time ashore, and that there is no live availability. It also explains that users can change filters and open Viator booking links, and warns not to fetch details for every result. This is strong behavioral context for an interactive, read-only browser tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core action and follows with useful constraints. Some UI workflow detail, such as users changing ports, dates, keywords and pages, is helpful but slightly verbose for a tool description.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex interactive tool, it covers when to call, filter behavior, safety warnings, and user-facing interactions. However, with no output schema, it does not describe the returned data shape, and it does not state where to obtain a supported portId.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description compensates for most parameters: it explains portId omission and supported local values, optional visit date, and activity keywords q. The page parameter is only implied through 'pages', so pagination semantics are not fully explicit.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

It uses a specific verb and resource: 'Open ONE interactive port-experience browser' for excursions, tours or activities. This clearly distinguishes the presentation/browser action from data-fetching siblings like find_port_excursions and get_excursion, and the first sentence is front-loaded.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear usage conditions: use only on an experience request, never automatically for every cruise search, and omit portId to let the user choose a port without calling Viator. It also says not to fetch details for every result. It does not explicitly name sibling alternatives such as find_port_excursions or get_excursion, so it falls short of the highest tier.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_cruisesFind cruisesA
Read-onlyIdempotent
Inspect

Find cruise recommendations and deals on CruiseHops across Carnival and Royal Caribbean by destination, departure port, dates, cabin and budget. Returns sailing links for further exploration on CruiseHops. Research only; no widget. Default three choices. Do not add cabin or budget constraints the user did not give. Search captured cruise sailings using typed filters. Prices are USD cents per person for two guests, not live or family quotes. Filter before grouping and choosing lowest cabin price. Use term IDs from suggest_cruise_terms for precise names.

NameRequiredDescriptionDefault
qNoFree-text cruise search; use suggest_cruise_terms to resolve precise entity names.
pageNoOne-based result page; default 1.
shipNoSource-native ship ID from items[].ship.id, not a suggestion term ID. Prefer terms for names.
sortNo
viewNoDefault groups combines departures for each ship itinerary; sailings returns one row per unique dated sailing. Event-specific fares remain available within each sailing.
termsNoStable term IDs from suggest_cruise_terms; prefer these for entity-name filtering.
dateToNoInclusive latest departure date (YYYY-MM-DD).
sourceNoSource ID: carnival or royal_caribbean.
amenityNoExact captured amenity name from get_sailing ship.amenities[].name.
dateFromNoInclusive earliest departure date (YYYY-MM-DD).
pageSizeNoItems per page, 1โ€“50; default 3.
returnByNoInclusive latest disembarkation date, YYYY-MM-DD; excludes unknown return dates. This deadline never expands with dateFlexDays.
nightsMaxNoMaximum nights, inclusive. Prefer nightsMin/nightsMax for cruise trip lengths; legacy durationMin/durationMax are days-only.
nightsMinNoMinimum nights. Uses advertised nights, otherwise calendar nights between captured departure and return dates. Unknown durations cannot match.
roundtripNo
cabinClassNoNormalized cabin class: inside, oceanview, balcony, suite, or other, as captured on the offer.
destinationNoShared destination suggestion ID or destination label. Umbrella destinations such as Caribbean include mapped subregions across cruise lines. Specific regions remain strict; generic Caribbean does not imply Eastern Caribbean. Prefer suggest_cruise_terms to resolve names.
durationMaxNoMaximum normalized duration in days, not advertised nights.
durationMinNoMinimum normalized duration in days, not advertised nights.
visitedPortNoVisited port selection: shared port suggestion ID or source-native items[].visitedPorts[].id. Reviewed equivalent ports match across cruise lines; source still restricts the line.
dateFlexDaysNoOptional departure flexibility, 0โ€“30 days before dateFrom and after dateTo. Requires both dates when positive. Exact matches stay in items; outside-window options are separate dateAlternatives. All other filters remain strict. Use only when the user permits flexible dates.
departurePortNoDeparture port selection: shared port suggestion ID or source-native items[].departurePort.id. Reviewed equivalent ports match across cruise lines; source still restricts the line. Different embarkation ports remain distinct.
priceMaxCentsNoMaximum captured USD cents per person for two guests; 50000 means USD 500/person. Not a party total.
departureTermsNoPort IDs from suggest_cruise_terms, matching departure only (OR within this list). General terms ports also match visited ports. Other filters still apply.
includeUnavailableNo

Output Schema

NameRequiredDescription
kindYes
pageYes
viewYes
itemsYes
totalYes
pageSizeYes
recoveryNo
priceContextYes
selectedTermsYes
totalSailingsYes
dateAlternativesNo
selectedDepartureTermsNo

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile, and the description adds meaningful behavioral context: results are captured cruise sailings rather than live quotes, prices are USD cents per person for two guests, and filtering should occur before grouping or choosing lowest cabin price. It does not mention rate limits or pagination behavior, but those are not central to the tool's safety profile.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core purpose and constraints, and most sentences carry actionable information. It is slightly dense and includes a bit of repetition between 'Find cruise recommendations' and 'Search captured cruise sailings,' but it remains efficient for a 25-parameter search tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complex 25-parameter schema, output schema, and helpful annotations, the description provides enough context to call the tool correctly. It covers the research-only nature, default result count, user-constraint caution, term ID usage, and price semantics. It could go further by naming when to use this versus compare_sailings or list_departures, but it is broadly complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is high at 88%, so the schema already documents most parameters. The description still adds value by emphasizing term IDs from suggest_cruise_terms for precise entity names and by warning not to add cabin or budget constraints the user did not provide. It also clarifies price interpretation, though that is already present in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a clear verb and resource: find cruise recommendations and deals on CruiseHops across Carnival and Royal Caribbean, filtered by destination, departure port, dates, cabin, and budget. It also clarifies that it searches captured cruise sailings and returns sailing links, but it does not explicitly distinguish itself from siblings such as compare_sailings or list_departures.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides useful usage context: research only, no widget, default three choices, and do not add cabin or budget constraints the user did not give. It also directs agents to use term IDs from suggest_cruise_terms for precise names. However, it does not explicitly state when to choose this tool over alternatives like compare_sailings or present_cruises.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

suggest_cruise_termsFind ships and destinationsB
Read-onlyIdempotent
Inspect

Suggest matching ship, port, destination and cruise line names, including suffix words. Returns stable term IDs for search filters.

NameRequiredDescriptionDefault
qYes
pageNoOne-based result page; default 1.
shipNoSource-native ship ID from items[].ship.id, not a suggestion term ID. Prefer terms for names.
sortNo
viewNoDefault groups combines departures for each ship itinerary; sailings returns one row per unique dated sailing. Event-specific fares remain available within each sailing.
limitNo
termsNoStable term IDs from suggest_cruise_terms; prefer these for entity-name filtering.
cursorNo
dateToNoInclusive latest departure date (YYYY-MM-DD).
sourceNoSource ID: carnival or royal_caribbean.
amenityNoExact captured amenity name from get_sailing ship.amenities[].name.
dateFromNoInclusive earliest departure date (YYYY-MM-DD).
pageSizeNoItems per page, 1โ€“50; default 3.
returnByNoInclusive latest disembarkation date, YYYY-MM-DD; excludes unknown return dates. This deadline never expands with dateFlexDays.
nightsMaxNoMaximum nights, inclusive. Prefer nightsMin/nightsMax for cruise trip lengths; legacy durationMin/durationMax are days-only.
nightsMinNoMinimum nights. Uses advertised nights, otherwise calendar nights between captured departure and return dates. Unknown durations cannot match.
roundtripNo
cabinClassNoNormalized cabin class: inside, oceanview, balcony, suite, or other, as captured on the offer.
destinationNoShared destination suggestion ID or destination label. Umbrella destinations such as Caribbean include mapped subregions across cruise lines. Specific regions remain strict; generic Caribbean does not imply Eastern Caribbean. Prefer suggest_cruise_terms to resolve names.
durationMaxNoMaximum normalized duration in days, not advertised nights.
durationMinNoMinimum normalized duration in days, not advertised nights.
visitedPortNoVisited port selection: shared port suggestion ID or source-native items[].visitedPorts[].id. Reviewed equivalent ports match across cruise lines; source still restricts the line.
dateFlexDaysNoOptional departure flexibility, 0โ€“30 days before dateFrom and after dateTo. Requires both dates when positive. Exact matches stay in items; outside-window options are separate dateAlternatives. All other filters remain strict. Use only when the user permits flexible dates.
departurePortNoDeparture port selection: shared port suggestion ID or source-native items[].departurePort.id. Reviewed equivalent ports match across cruise lines; source still restricts the line. Different embarkation ports remain distinct.
priceMaxCentsNoMaximum captured USD cents per person for two guests; 50000 means USD 500/person. Not a party total.
departureTermsNoPort IDs from suggest_cruise_terms, matching departure only (OR within this list). General terms ports also match visited ports. Other filters still apply.
includeUnavailableNo

Output Schema

NameRequiredDescription
kindYes
itemsYes
totalYes
nextCursorYes

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so safety is covered. The description adds useful behavior by mentioning suffix-word matching and stable term ID returns, but it does not explain matching behavior, limits, empty-result behavior, or pagination beyond what the schema provides.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no wasted text. It front-loads the core purpose and follows with the return/usage detail, which is efficient and appropriately sized.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a 27-parameter tool, and the description does not explain how the many optional filter parameters affect suggestions or why a suggestion endpoint accepts date, price, cabin, and itinerary filters. The output schema reduces the need to describe return values, but the gap between the simple description and the complex input schema leaves important context unstated.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 78%, so most parameters already have meaning in the schema and the baseline expectation is schema-driven. The description does not explain any parameter, including the required 'q', so it fails to add meaning beyond the schema, though the schema itself carries substantial parameter documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource set: 'Suggest matching ship, port, destination and cruise line names' and adds that it returns stable term IDs. It is clearer than a generic search tool, but it does not explicitly distinguish itself from siblings such as search_cruises or list_departures.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'Returns stable term IDs for search filters' implies the intended downstream use, but the description gives no explicit when-to-use guidance, exclusions, or named alternatives among the sibling tools. Usage is inferable 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.

  1. 11 tool updates
    • First observedcompare_sailings
    • First observedfind_port_excursions
    • First observedget_excursion
    • First observedget_price_history
    • First observedget_sailing
    • First observedlist_departures
    • First observedlist_excursion_ports
    • First observedpresent_cruises
    • First observedpresent_excursions
    • First observedsearch_cruises
    • First observedsuggest_cruise_terms

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI assistants to search upcoming sailings by ship, line, port, region, date, length and fare, view day-by-day itineraries, track each sailing's weekly fare history, measure monthly ship capacity and berths at a port, and read the weekly Cruise Price Index. All tools are read-only and return structured JSON behind OAuth sign-in or an API key.
    MIT
  • A
    license
    Not graded
    quality
    F
    maintenance
    Search 70,000+ cruise voyages, 678 ships, and 62 cruise lines worldwide. No API key needed, no installation required โ€” just paste the URL. Includes RAG-powered knowledge search for ship dining, facilities, cabins, and port guides. 30 languages supported.
    3
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Enables real-time flight fare searches across date ranges and multiple destinations, with historical price insights and booking links. Provides one-way and round-trip search tools through MCP.
    4
    1
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources