Skip to main content
Glama

Compare cruises

compare_sailings
Read-onlyIdempotent

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.

Input Schema

NameRequiredDescriptionDefault
sailingsYes

Output Schema

NameRequiredDescriptionDefault
kindYes
itemsYes
priceContextYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedOutput schema / properties / items / items / properties / selectedOffer / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "availability": {
      -        "type": "string"
      -      },
      -      "bookingUrl": {
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "cabinClass": {
      -        "type": "string"
      -      },
      -      "contextKey": {
      -        "type": "string"
      -      },
      -      "eventSelector": {
      -        "type": "string"
      -      },
      -      "fareCode": {
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "firstSeenAt": {
      -        "type": "string"
      -      },
      -      "guestCount": {
      -        "type": "number"
      -      },
      -      "id": {
      -        "type": "string"
      -      },
      -      "isCurrent": {
      -        "type": "boolean"
      -      },
      -      "lastCheckedAt": {
      -        "type": "string"
      -      },
      -      "market": {
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "observedAt": {
      -        "type": "string"
      -      },
      -      "passengerTypes": {
      -        "items": {
      -          "type": "string"
      -        },
      -        "type": "array"
      -      },
      -      "price": {
      -        "anyOf": [
      -          {
      -            "additionalProperties": false,
      -            "properties": {
      -              "amountCents": {
      -                "maximum": 9007199254740991,
      -                "minimum": -9007199254740991,
      -                "type": "integer"
      -              },
      -              "basis": {
      -                "const": "per_person",
      -                "type": "string"
      -              },
      -              "cabinClass": {
      -                "type": "string"
      -              },
      -              "currency": {
      -                "const": "USD",
      -                "type": "string"
      -              },
      -              "firstSeenAt": {
      -                "type": "string"
      -              },
      -              "lastCheckedAt": {
      -                "type": "string"
      -              },
      -              "observedAt": {
      -                "type": "string"
      -              }
      -            },
      -            "required": [
      -              "amountCents",
      -              "currency",
      -              "basis",
      -              "observedAt",
      -              "cabinClass"
      -            ],
      -            "type": "object"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ]
      -      },
      -      "revisionId": {
      -        "type": "string"
      -      },
      -      "sourceName": {
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "contextKey",
      -      "firstSeenAt",
      -      "lastCheckedAt",
      -      "isCurrent",
      -      "id",
      -      "revisionId",
      -      "cabinClass",
      -      "sourceName",
      -      "availability",
      -      "price",
      -      "observedAt",
      -      "bookingUrl",
      -      "eventSelector",
      -      "guestCount",
      -      "passengerTypes",
      -      "fareCode",
      -      "market"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "availability": {
      +        "type": "string"
      +      },
      +      "bookingUrl": {
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "cabinClass": {
      +        "type": "string"
      +      },
      +      "contextKey": {
      +        "type": "string"
      +      },
      +      "eventSelector": {
      +        "type": "string"
      +      },
      +      "fareCode": {
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "firstSeenAt": {
      +        "type": "string"
      +      },
      +      "guestCount": {
      +        "type": [
      +          "number",
      +          "null"
      +        ]
      +      },
      +      "id": {
      +        "type": "string"
      +      },
      +      "isCurrent": {
      +        "type": "boolean"
      +      },
      +      "lastCheckedAt": {
      +        "type": "string"
      +      },
      +      "market": {
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "nativePrice": {
      +        "anyOf": [
      +          {
      +            "additionalProperties": false,
      +            "properties": {
      +              "amount": {
      +                "type": "string"
      +              },
      +              "basis": {
      +                "type": "string"
      +              },
      +              "currency": {
      +                "type": "string"
      +              },
      +              "interpretationVerified": {
      +                "type": "boolean"
      +              },
      +              "qualifier": {
      +                "type": "string"
      +              }
      +            },
      +            "required": [
      +              "amount",
      +              "currency",
      +              "basis"
      +            ],
      +            "type": "object"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ]
      +      },
      +      "observedAt": {
      +        "type": "string"
      +      },
      +      "passengerTypes": {
      +        "items": {
      +          "type": "string"
      +        },
      +        "type": "array"
      +      },
      +      "price": {
      +        "anyOf": [
      +          {
      +            "additionalProperties": false,
      +            "properties": {
      +              "amountCents": {
      +                "maximum": 9007199254740991,
      +                "minimum": -9007199254740991,
      +                "type": "integer"
      +              },
      +              "basis": {
      +                "const": "per_person",
      +                "type": "string"
      +              },
      +              "cabinClass": {
      +                "type": "string"
      +              },
      +              "currency": {
      +                "const": "USD",
      +                "type": "string"
      +              },
      +              "firstSeenAt": {
      +                "type": "string"
      +              },
      +              "lastCheckedAt": {
      +                "type": "string"
      +              },
      +              "observedAt": {
      +                "type": "string"
      +              }
      +            },
      +            "required": [
      +              "amountCents",
      +              "currency",
      +              "basis",
      +              "observedAt",
      +              "cabinClass"
      +            ],
      +            "type": "object"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ]
      +      },
      +      "revisionId": {
      +        "type": "string"
      +      },
      +      "sourceName": {
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "contextKey",
      +      "firstSeenAt",
      +      "lastCheckedAt",
      +      "isCurrent",
      +      "id",
      +      "revisionId",
      +      "cabinClass",
      +      "sourceName",
      +      "availability",
      +      "price",
      +      "observedAt",
      +      "bookingUrl",
      +      "eventSelector",
      +      "guestCount",
      +      "passengerTypes",
      +      "fareCode",
      +      "market"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
  2. First observed

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is covered; the description adds substantive behavior beyond that — that prices are 'captured' rather than live, that occupancy must be explicit per offer, and that only two-adult quotes are in scope. It doesn't contradict the annotations, though it omits how stale the captured offers may be.

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?

Three short sentences, front-loaded with the cardinality constraint and no filler. The compressed phrasing ('lowest current captured two-adult offer') is dense enough to require a second read, which keeps it off a 5.

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?

An output schema exists, so return values need no explanation, and annotations carry the safety profile. What remains — input bounds, default offer selection, occupancy semantics, and the live/family exclusion — is all present, giving an agent enough to call it correctly.

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?

Reported schema coverage is 0% at the visible level, so the description has to compensate; it does so partially by stating the 2–4 bounding and that offer IDs are optional and must be exact. However it says nothing about how sailingId, cabinClass, or eventSelector should be supplied, and 'occupancy is explicit per offer' describes output semantics rather than an input the agent controls.

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 verb 'compare' plus the resource 'sailings' with a cardinality bound (two to four) is specific and distinguishes it from the sibling read tools like get_sailing or search_cruises, which fetch rather than compare. It never explicitly names those siblings as alternatives, so it stops short of a 5.

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 real usage context: comparison defaults to the lowest current captured two-adult offer, occupancy is per offer, and it will not serve live or family quotes. That last clause is an explicit when-not condition, but no alternative tool is named for the live/family case, leaving part of the routing to inference.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources