Skip to main content
Glama

Check compensation

check_compensation
Read-onlyIdempotent

Assess one disrupted flight under EU261/UK261: works out which scheme applies (or none), route distance and band, whether fixed compensation is due and how much (EUR/GBP), care rights, the stated reason's effect, and next steps. Use for 'what am I owed for my flight?'. Do NOT use to write the claim; use generate_claim_letter.

Input Schema

NameRequiredDescriptionDefault
arrivalYesFinal arrival airport 3-letter IATA code, case-insensitive, e.g. JFK
reroutedNoFor cancellations: true if the airline re-routed you on another flight. Default false.
departureYesDeparture airport 3-letter IATA code, case-insensitive, e.g. LHR
disruptedYesWhat happened: delayed (arrived late) or cancelled.
distance_kmNoOverride the computed great-circle distance in km, e.g. 5540. Both airports must still be known IATA codes.
notice_daysNoFor cancellations: days of notice the airline gave before departure, e.g. 3. 14+ days means no fixed compensation. Default 0.
carrier_countryNoOperating airline's 2-letter country code, e.g. DE for Lufthansa, US for United. Needed for flights arriving into the EU/UK from outside.
reason_categoryNoCause the airline gave: weather, atc, security, political, strike_atc (third-party strike) are exempt; technical, strike_airline, other are not; crew is case-by-case. Default unknown.
arrival_delay_hoursNoHours late at the final destination, e.g. 4.5. Drives delay compensation (>= 3h) and care. Default 0.
reroute_arrival_delay_hoursNoFor re-routed cancellations: hours the replacement arrived after the original schedule, e.g. 2. Default 0.

Output Schema

NameRequiredDescriptionDefault
bandYesDistance band: short <=1500 km, medium <=3500 km, long beyond.
routeYesResolved airports and countries.
reasonYesAssessment of the disruption cause.
schemeYesPassenger-rights scheme that applies to this route.
disclaimerYesNot-legal-advice disclaimer to show the user.
next_stepsYesRecommended next actions in order.
care_rightsYesDuty-of-care entitlements (meals, hotel, calls).
distance_kmYesRoute distance in km used for the band.
compensationYesFixed-compensation outcome.
jurisdiction_reasonYesWhy that scheme does or does not apply.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • changedOutput schema / properties / care_rights / properties / due / description
      Previous value: -"Whether care is owed for this disruption."New value: +"Whether EU261/UK261 care is owed for this disruption (always false when no scheme applies)."
    • changedOutput schema / properties / care_rights / properties / note / description
      Previous value: -"When care starts for this band."New value: +"When care starts for this band, or why no scheme care applies."
  2. Changed15 schema fields changed
    • changedInput schema / properties / arrival / description
      Previous value: -"Arrival airport IATA code, e.g. JFK"New value: +"Final arrival airport 3-letter IATA code, case-insensitive, e.g. JFK"
    • changedInput schema / properties / arrival_delay_hours / description
      Previous value: -"Arrival delay in hours, as a number"New value: +"Hours late at the final destination, e.g. 4.5. Drives delay compensation (>= 3h) and care. Default 0."
    • addedInput schema / properties / arrival_delay_hours / minimum
      Added value: +0
    • changedInput schema / properties / carrier_country / description
      Previous value: -"Carrier's country code, e.g. DE"New value: +"Operating airline's 2-letter country code, e.g. DE for Lufthansa, US for United. Needed for flights arriving into the EU/UK from outside."
    • changedInput schema / properties / departure / description
      Previous value: -"Departure airport IATA code, e.g. LHR"New value: +"Departure airport 3-letter IATA code, case-insensitive, e.g. LHR"
    • changedInput schema / properties / disrupted / description
      Previous value: -"Flight identifier for the disrupted flight"New value: +"What happened: delayed (arrived late) or cancelled."
    • changedInput schema / properties / distance_km / description
      Previous value: -"Flight distance in kilometers, as a number"New value: +"Override the computed great-circle distance in km, e.g. 5540. Both airports must still be known IATA codes."
    • addedInput schema / properties / distance_km / exclusiveMinimum
      Added value: +0
    • changedInput schema / properties / notice_days / description
      Previous value: -"Number of days notice given for the disruption"New value: +"For cancellations: days of notice the airline gave before departure, e.g. 3. 14+ days means no fixed compensation. Default 0."
    • addedInput schema / properties / notice_days / minimum
      Added value: +0
    • changedInput schema / properties / reason_category / description
      Previous value: -"Category of disruption reason, e.g. technical, weather"New value: +"Cause the airline gave: weather, atc, security, political, strike_atc (third-party strike) are exempt; technical, strike_airline, other are not; crew is case-by-case. Default unknown."
    • changedInput schema / properties / reroute_arrival_delay_hours / description
      Previous value: -"Arrival delay in hours for the rerouted flight, as a number"New value: +"For re-routed cancellations: hours the replacement arrived after the original schedule, e.g. 2. Default 0."
    • addedInput schema / properties / reroute_arrival_delay_hours / minimum
      Added value: +0
    • changedInput schema / properties / rerouted / description
      Previous value: -"True if the flight was rerouted, false otherwise"New value: +"For cancellations: true if the airline re-routed you on another flight. Default false."
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "properties": {
      +    "band": {
      +      "description": "Distance band: short <=1500 km, medium <=3500 km, long beyond.",
      +      "enum": [
      +        "short",
      +        "medium",
      +        "long"
      +      ],
      +      "type": "string"
      +    },
      +    "care_rights": {
      +      "description": "Duty-of-care entitlements (meals, hotel, calls).",
      +      "properties": {
      +        "due": {
      +          "description": "Whether care is owed for this disruption.",
      +          "type": "boolean"
      +        },
      +        "items": {
      +          "description": "Care items owed (empty when not due).",
      +          "items": {
      +            "type": "string"
      +          },
      +          "type": "array"
      +        },
      +        "note": {
      +          "description": "When care starts for this band.",
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "due",
      +        "items",
      +        "note"
      +      ],
      +      "type": "object"
      +    },
      +    "compensation": {
      +      "description": "Fixed-compensation outcome.",
      +      "properties": {
      +        "amount": {
      +          "description": "Amount due, or null when none.",
      +          "type": [
      +            "number",
      +            "null"
      +          ]
      +        },
      +        "currency": {
      +          "description": "EUR for EU261, GBP for UK261, null when no scheme.",
      +          "enum": [
      +            "EUR",
      +            "GBP",
      +            null
      +          ],
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "eligible": {
      +          "anyOf": [
      +            {
      +              "type": "boolean"
      +            },
      +            {
      +              "enum": [
      +                "possibly"
      +              ],
      +              "type": "string"
      +            }
      +          ],
      +          "description": "true, false, or 'possibly' when the reason is unknown or crew-related."
      +        },
      +        "note": {
      +          "description": "Explanation of the outcome.",
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "eligible",
      +        "amount",
      +        "currency",
      +        "note"
      +      ],
      +      "type": "object"
      +    },
      +    "disclaimer": {
      +      "description": "Not-legal-advice disclaimer to show the user.",
      +      "type": "string"
      +    },
      +    "distance_km": {
      +      "description": "Route distance in km used for the band.",
      +      "type": "number"
      +    },
      +    "jurisdiction_reason": {
      +      "description": "Why that scheme does or does not apply.",
      +      "type": "string"
      +    },
      +    "next_steps": {
      +      "description": "Recommended next actions in order.",
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    "reason": {
      +      "description": "Assessment of the disruption cause.",
      +      "properties": {
      +        "category": {
      +          "description": "Reason category assessed.",
      +          "type": "string"
      +        },
      +        "exempt": {
      +          "anyOf": [
      +            {
      +              "type": "boolean"
      +            },
      +            {
      +              "enum": [
      +                "possibly",
      +                "unknown"
      +              ],
      +              "type": "string"
      +            }
      +          ],
      +          "description": "Whether it exempts the airline: true, false, 'possibly' or 'unknown'."
      +        },
      +        "note": {
      +          "description": "Explanation with case-law pointers.",
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "category",
      +        "exempt",
      +        "note"
      +      ],
      +      "type": "object"
      +    },
      +    "route": {
      +      "description": "Resolved airports and countries.",
      +      "properties": {
      +        "arrival": {
      +          "description": "Arrival as 'IATA (City, Country)'.",
      +          "type": "string"
      +        },
      +        "arrival_country": {
      +          "description": "Arrival ISO country code.",
      +          "type": "string"
      +        },
      +        "departure": {
      +          "description": "Departure as 'IATA (City, Country)'.",
      +          "type": "string"
      +        },
      +        "departure_country": {
      +          "description": "Departure ISO country code.",
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "departure",
      +        "arrival"
      +      ],
      +      "type": "object"
      +    },
      +    "scheme": {
      +      "description": "Passenger-rights scheme that applies to this route.",
      +      "enum": [
      +        "EU261",
      +        "UK261",
      +        "none"
      +      ],
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "scheme",
      +    "jurisdiction_reason",
      +    "route",
      +    "distance_km",
      +    "band",
      +    "compensation",
      +    "care_rights",
      +    "reason",
      +    "next_steps",
      +    "disclaimer"
      +  ],
      +  "type": "object"
      +}
  3. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -{
      -  "properties": {
      -    "compensation_amount": {
      -      "description": "The amount of compensation in EUR, if eligible.",
      -      "type": "number"
      -    },
      -    "compensation_currency": {
      -      "description": "The currency of the compensation amount.",
      -      "type": "string"
      -    },
      -    "distance_km": {
      -      "description": "The distance between the departure and arrival airports in kilometers.",
      -      "type": "number"
      -    },
      -    "eligible": {
      -      "description": "Indicates whether the passenger is eligible for compensation.",
      -      "type": "boolean"
      -    },
      -    "reason": {
      -      "description": "The reason for the compensation amount or ineligibility.",
      -      "type": "string"
      -    }
      -  },
      -  "required": [
      -    "eligible",
      -    "compensation_amount",
      -    "compensation_currency",
      -    "reason",
      -    "distance_km"
      -  ],
      -  "type": "object"
      -}New value: +null
  4. Changed7 schema fields changed
    • addedInput schema / properties / arrival_delay_hours / description
      Added value: +"Arrival delay in hours, as a number"
    • addedInput schema / properties / disrupted / description
      Added value: +"Flight identifier for the disrupted flight"
    • addedInput schema / properties / distance_km / description
      Added value: +"Flight distance in kilometers, as a number"
    • addedInput schema / properties / notice_days / description
      Added value: +"Number of days notice given for the disruption"
    • addedInput schema / properties / reason_category / description
      Added value: +"Category of disruption reason, e.g. technical, weather"
    • addedInput schema / properties / reroute_arrival_delay_hours / description
      Added value: +"Arrival delay in hours for the rerouted flight, as a number"
    • addedInput schema / properties / rerouted / description
      Added value: +"True if the flight was rerouted, false otherwise"
  5. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "properties": {
      +    "compensation_amount": {
      +      "description": "The amount of compensation in EUR, if eligible.",
      +      "type": "number"
      +    },
      +    "compensation_currency": {
      +      "description": "The currency of the compensation amount.",
      +      "type": "string"
      +    },
      +    "distance_km": {
      +      "description": "The distance between the departure and arrival airports in kilometers.",
      +      "type": "number"
      +    },
      +    "eligible": {
      +      "description": "Indicates whether the passenger is eligible for compensation.",
      +      "type": "boolean"
      +    },
      +    "reason": {
      +      "description": "The reason for the compensation amount or ineligibility.",
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "eligible",
      +    "compensation_amount",
      +    "compensation_currency",
      +    "reason",
      +    "distance_km"
      +  ],
      +  "type": "object"
      +}
  6. First observed

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, non-destructive and closed-world, so the safety profile is fully covered and the bar is low. The description earns credit by disclosing the decision content — including the notable 'or none' outcome (no scheme applies), the reason-category effect, and that it emits care rights and next steps. It does not mention jurisdiction/auth prerequisites or performance characteristics, but for a deterministic computation tool that is acceptable.

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?

Front-loaded with the verb and scope, then the output enumeration, then the usage trigger and the exclusion — a strict value ordering. The long output list is dense but each item is a distinct deliverable an agent needs, so nothing reads as 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?

An output schema exists, so the description is not obliged to explain returns, yet it still summarizes them usefully for selection. Ten parameters are fully covered by the schema, three are required, the tool is a safe read, and the sibling routing is stated. Nothing an agent needs to call this correctly is missing.

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% and the schema itself is unusually well annotated (enum meanings, exemptions per reason category, IATA code format, defaults), so the schema carries the entire parameter burden. The description alludes to distance/band and reason effects but adds no syntax, format or default detail beyond the schema. Baseline 3 is the correct score when structured fields do the heavy lifting.

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?

Specific verb ('assess') plus a tightly bounded resource ('one disrupted flight under EU261/UK261'), and it enumerates the concrete outputs it derives — applicable scheme, distance band, fixed compensation and currency, care rights, reason effect, next steps. It also differentiates itself from the claim-writing sibling by name, so an agent can place it among claim_timeline, compensation_table and disruption_rights without opening a schema.

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?

Gives an explicit trigger phrase ('what am I owed for my flight?'), an explicit prohibition ('Do NOT use to write the claim') and names the correct alternative (generate_claim_letter). That is the when / when-not / alternative triad in two sentences. The only unstated overlap is against compensation_table and disruption_rights, which is a minor omission given the core routing decision is settled.

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