Skip to main content
Glama

Compare destinations

compare_destinations
Read-only

Put 2-8 named destinations side by side on the same snapshot, each with the stats current_vs_history reports (last measurement, median, min, share of TRACKED DAYS that were dearer). Numbers are for the WHOLE party, not per person, and percentages are over observed days rather than the calendar span. Rows come back in the order you asked for - it does not rank, and gives no verdict; use find_opportunities to rank. A destination that yields no row is returned under excluded with the reason.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
railNooptional (default both): restrict to one rail
partyNooptional (default '2-2'): '<adults>-<children>', the same A-C shape the price streams are keyed on
destinationsYes2-8 destination slugs; the answer keeps this order
min_history_daysNooptional (default 30): rails measured for fewer days are listed under 'excluded'

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "anyOf": [
      +    {
      +      "properties": {
      +        "comparison": {
      +          "items": {
      +            "properties": {
      +              "arrivals": {
      +                "description": "arrival airports RECORDED; covers_all_published_prices is false",
      +                "type": "object"
      +              },
      +              "destination": {
      +                "type": "string"
      +              },
      +              "generated": {
      +                "type": "string"
      +              },
      +              "latest_stale_after_days": {
      +                "description": "this rail's own freshness boundary, in days after measured.to",
      +                "type": "number"
      +              },
      +              "measured": {
      +                "properties": {
      +                  "days": {
      +                    "type": "integer"
      +                  },
      +                  "from": {
      +                    "type": "string"
      +                  },
      +                  "to": {
      +                    "type": "string"
      +                  }
      +                },
      +                "required": [
      +                  "days",
      +                  "from",
      +                  "to"
      +                ],
      +                "type": "object"
      +              },
      +              "origins": {
      +                "description": "departure-airport CLUSTER; covers_all_published_prices is false",
      +                "type": "object"
      +              },
      +              "party": {
      +                "properties": {
      +                  "adults": {
      +                    "type": "integer"
      +                  },
      +                  "children": {
      +                    "type": "integer"
      +                  }
      +                },
      +                "required": [
      +                  "adults",
      +                  "children"
      +                ],
      +                "type": "object"
      +              },
      +              "price_covers": {
      +                "description": "what the money buys - airfare only, or a package as offered",
      +                "type": "object"
      +              },
      +              "rail": {
      +                "enum": [
      +                  "flight",
      +                  "package"
      +                ],
      +                "type": "string"
      +              },
      +              "regime_breaks": {
      +                "description": "[from, to] date spans where the series was not comparable",
      +                "type": "array"
      +              },
      +              "resort": {
      +                "type": "string"
      +              },
      +              "resort_key": {
      +                "type": "string"
      +              },
      +              "searched": {
      +                "description": "the search mode (and fixed dates, where there are any) the series was collected under",
      +                "type": "object"
      +              },
      +              "stats": {
      +                "properties": {
      +                  "basis": {
      +                    "type": "string"
      +                  },
      +                  "cheaper_than_pct": {
      +                    "type": [
      +                      "number",
      +                      "null"
      +                    ]
      +                  },
      +                  "is_series_max": {
      +                    "type": "boolean"
      +                  },
      +                  "is_series_min": {
      +                    "type": "boolean"
      +                  },
      +                  "latest": {
      +                    "type": [
      +                      "number",
      +                      "null"
      +                    ]
      +                  },
      +                  "median": {
      +                    "type": [
      +                      "number",
      +                      "null"
      +                    ]
      +                  },
      +                  "min": {
      +                    "type": [
      +                      "number",
      +                      "null"
      +                    ]
      +                  }
      +                },
      +                "required": [
      +                  "basis"
      +                ],
      +                "type": "object"
      +              },
      +              "title": {
      +                "properties": {
      +                  "cs": {
      +                    "type": "string"
      +                  },
      +                  "en": {
      +                    "type": "string"
      +                  }
      +                },
      +                "required": [
      +                  "cs",
      +                  "en"
      +                ],
      +                "type": "object"
      +              },
      +              "url": {
      +                "type": "string"
      +              }
      +            },
      +            "required": [
      +              "destination",
      +              "title",
      +              "url",
      +              "generated",
      +              "rail",
      +              "party",
      +              "price_covers",
      +              "measured",
      +              "stats"
      +            ],
      +            "type": "object"
      +          },
      +          "type": "array"
      +        },
      +        "comparison_rows": {
      +          "description": "rows, not destinations - a dual-rail destination contributes two",
      +          "type": "integer"
      +        },
      +        "currency": {
      +          "type": "string"
      +        },
      +        "disclaimer": {
      +          "type": "string"
      +        },
      +        "excluded": {
      +          "items": {
      +            "properties": {
      +              "destination": {
      +                "type": "string"
      +              },
      +              "generated": {
      +                "type": "string"
      +              },
      +              "measured": {
      +                "properties": {
      +                  "days": {
      +                    "type": "integer"
      +                  },
      +                  "from": {
      +                    "type": "string"
      +                  },
      +                  "to": {
      +                    "type": "string"
      +                  }
      +                },
      +                "required": [
      +                  "days",
      +                  "from",
      +                  "to"
      +                ],
      +                "type": "object"
      +              },
      +              "party": {
      +                "type": "string"
      +              },
      +              "rail": {
      +                "enum": [
      +                  "flight",
      +                  "package",
      +                  "both"
      +                ],
      +                "type": "string"
      +              },
      +              "reason": {
      +                "type": "string"
      +              },
      +              "resort_key": {
      +                "type": "string"
      +              }
      +            },
      +            "required": [
      +              "destination",
      +              "reason"
      +            ],
      +            "type": "object"
      +          },
      +          "type": "array"
      +        },
      +        "generated": {
      +          "description": "the OLDEST `generated` among the rows and dated exclusions",
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "license": {
      +          "properties": {
      +            "attribution": {
      +              "type": "string"
      +            },
      +            "id": {
      +              "type": "string"
      +            },
      +            "url": {
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "id",
      +            "url",
      +            "attribution"
      +          ],
      +          "type": "object"
      +        },
      +        "min_history_days": {
      +          "type": "integer"
      +        },
      +        "party": {
      +          "type": "string"
      +        },
      +        "rail": {
      +          "enum": [
      +            "flight",
      +            "package",
      +            "both"
      +          ],
      +          "type": "string"
      +        },
      +        "schema": {
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "schema",
      +        "generated",
      +        "party",
      +        "rail",
      +        "min_history_days",
      +        "comparison_rows",
      +        "comparison",
      +        "excluded",
      +        "disclaimer"
      +      ],
      +      "type": "object"
      +    },
      +    {
      +      "description": "tool-level failure, returned with isError: true",
      +      "properties": {
      +        "error": {
      +          "additionalProperties": true,
      +          "properties": {
      +            "code": {
      +              "type": "string"
      +            },
      +            "message": {
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "code",
      +            "message"
      +          ],
      +          "type": "object"
      +        }
      +      },
      +      "required": [
      +        "error"
      +      ],
      +      "type": "object"
      +    }
      +  ],
      +  "type": "object"
      +}
  2. Added

TDQS

A4.7/5.0
Behavior5/5

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

Annotations provide readOnlyHint=true and destructiveHint=false, so safety is covered. Beyond that, the description discloses substantial behavioral traits: results are for the WHOLE party not per person, percentages are over observed days rather than calendar span, rows preserve request order, no ranking or verdict is given, and missing destinations appear under 'excluded' with a reason. No contradiction 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.

Conciseness5/5

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

Four sentences, each carrying unique operational meaning: scope, interpretation caveats, ordering/ranking behavior, and failure handling. The core purpose is front-loaded and no sentence is redundant filler, though 'does not rank' and 'gives no verdict' are slightly overlapping.

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 comparison tool with an output schema, the description is complete: it covers input constraints (2-8 destinations), output shape (requested order plus excluded with reasons), aggregation semantics (whole party, observed days), and routing to alternatives. Nothing an agent needs to call it correctly or interpret its results is missing.

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 100%, so the baseline is 3. The description adds value beyond the schema by clarifying the party parameter's interpretation ('Numbers are for the WHOLE party, not per person') and reinforcing the destinations order guarantee. The min_history_days exclusion behavior is already in the schema, so the marginal addition is moderate rather than large.

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+resource: 'Put 2-8 named destinations side by side on the same snapshot' with a precise stat list. It also distinguishes itself from siblings by naming what it is not ('does not rank') and referencing current_vs_history as the source of its stats, so an agent can separate it from find_opportunities and list_destinations without opening schemas.

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 context on when this tool fits: multi-destination side-by-side comparison with specific stats, and explicitly routes ranking tasks elsewhere ('use find_opportunities to rank'). It does not explicitly say 'use current_vs_history for a single destination,' but the framing of 'the stats current_vs_history reports' implies it is the multi-destination aggregation of that tool. One explicit exclusion and one implied alternative.

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