FlightFix MCP
FlightFix provides MCP tools for AI assistants to check EU261/UK261 flight compensation eligibility, calculate payouts based on distance, list passenger rights, determine claim deadlines, and draft formal claim letters for users to send to airlines themselves.
Endpoint and access
No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.
https://flight-fix.magicteams.ai/mcpWhat its tools do
5 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.
Checks and signals
Each line is separate evidence, not a trust score.
- Passed Endpoint answered the live check ·
- Availability 1 of 1 checks passed in 30 days
What you can do with it
- Assess one disrupted flight under EU261/UK261 to determine compensation eligibility and amount
- Draft a formal EU261/UK261 compensation claim letter with legal basis and amount
- List passenger rights for a disruption including refund, re-routing, and care by band
- Give claim-deadline guidance and evidence checklist for a flight under EU261 or UK261
Source and maintenance
- Maintenance checked
Protocol and capabilities
- Server
- flight-fix 1.0.0
- MCP protocol negotiated in check
- 2025-11-25
- Tools
- 5 advertised
- Resources
- Not advertised
- Resource templates
- Not advertised
- Prompts
- Not advertised
{
"tools": {
"listChanged": false
}
}Server-provided instructions
Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.
Tools
5 advertised
check_compensation — Check compensation
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.
{
"type": "object",
"required": [
"departure",
"arrival",
"disrupted"
],
"properties": {
"arrival": {
"type": "string",
"description": "Final arrival airport 3-letter IATA code, case-insensitive, e.g. JFK"
},
"rerouted": {
"type": "boolean",
"description": "For cancellations: true if the airline re-routed you on another flight. Default false."
},
"departure": {
"type": "string",
"description": "Departure airport 3-letter IATA code, case-insensitive, e.g. LHR"
},
"disrupted": {
"enum": [
"delayed",
"cancelled"
],
"type": "string",
"description": "What happened: delayed (arrived late) or cancelled."
},
"distance_km": {
"type": "number",
"description": "Override the computed great-circle distance in km, e.g. 5540. Both airports must still be known IATA codes.",
"exclusiveMinimum": 0
},
"notice_days": {
"type": "number",
"minimum": 0,
"description": "For cancellations: days of notice the airline gave before departure, e.g. 3. 14+ days means no fixed compensation. Default 0."
},
"carrier_country": {
"type": "string",
"description": "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."
},
"reason_category": {
"enum": [
"unknown",
"weather",
"atc",
"security",
"political",
"strike_atc",
"strike_airline",
"technical",
"crew",
"other"
],
"type": "string",
"description": "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."
},
"arrival_delay_hours": {
"type": "number",
"minimum": 0,
"description": "Hours late at the final destination, e.g. 4.5. Drives delay compensation (>= 3h) and care. Default 0."
},
"reroute_arrival_delay_hours": {
"type": "number",
"minimum": 0,
"description": "For re-routed cancellations: hours the replacement arrived after the original schedule, e.g. 2. Default 0."
}
}
}{
"type": "object",
"required": [
"scheme",
"jurisdiction_reason",
"route",
"distance_km",
"band",
"compensation",
"care_rights",
"reason",
"next_steps",
"disclaimer"
],
"properties": {
"band": {
"enum": [
"short",
"medium",
"long"
],
"type": "string",
"description": "Distance band: short <=1500 km, medium <=3500 km, long beyond."
},
"route": {
"type": "object",
"required": [
"departure",
"arrival"
],
"properties": {
"arrival": {
"type": "string",
"description": "Arrival as 'IATA (City, Country)'."
},
"departure": {
"type": "string",
"description": "Departure as 'IATA (City, Country)'."
},
"arrival_country": {
"type": "string",
"description": "Arrival ISO country code."
},
"departure_country": {
"type": "string",
"description": "Departure ISO country code."
}
},
"description": "Resolved airports and countries."
},
"reason": {
"type": "object",
"required": [
"category",
"exempt",
"note"
],
"properties": {
"note": {
"type": "string",
"description": "Explanation with case-law pointers."
},
"exempt": {
"anyOf": [
{
"type": "boolean"
},
{
"enum": [
"possibly",
"unknown"
],
"type": "string"
}
],
"description": "Whether it exempts the airline: true, false, 'possibly' or 'unknown'."
},
"category": {
"type": "string",
"description": "Reason category assessed."
}
},
"description": "Assessment of the disruption cause."
},
"scheme": {
"enum": [
"EU261",
"UK261",
"none"
],
"type": "string",
"description": "Passenger-rights scheme that applies to this route."
},
"disclaimer": {
"type": "string",
"description": "Not-legal-advice disclaimer to show the user."
},
"next_steps": {
"type": "array",
"items": {
"type": "string"
},
"description": "Recommended next actions in order."
},
"care_rights": {
"type": "object",
"required": [
"due",
"items",
"note"
],
"properties": {
"due": {
"type": "boolean",
"description": "Whether EU261/UK261 care is owed for this disruption (always false when no scheme applies)."
},
"note": {
"type": "string",
"description": "When care starts for this band, or why no scheme care applies."
},
"items": {
"type": "array",
"items": {
"type": "string"
},
"description": "Care items owed (empty when not due)."
}
},
"description": "Duty-of-care entitlements (meals, hotel, calls)."
},
"distance_km": {
"type": "number",
"description": "Route distance in km used for the band."
},
"compensation": {
"type": "object",
"required": [
"eligible",
"amount",
"currency",
"note"
],
"properties": {
"note": {
"type": "string",
"description": "Explanation of the outcome."
},
"amount": {
"type": [
"number",
"null"
],
"description": "Amount due, or null when none."
},
"currency": {
"enum": [
"EUR",
"GBP",
null
],
"type": [
"string",
"null"
],
"description": "EUR for EU261, GBP for UK261, null when no scheme."
},
"eligible": {
"anyOf": [
{
"type": "boolean"
},
{
"enum": [
"possibly"
],
"type": "string"
}
],
"description": "true, false, or 'possibly' when the reason is unknown or crew-related."
}
},
"description": "Fixed-compensation outcome."
},
"jurisdiction_reason": {
"type": "string",
"description": "Why that scheme does or does not apply."
}
}
}{
"title": "Check compensation",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}compensation_table — Compensation table
Return the general EU261/UK261 reference: compensation amounts per distance band (EUR and GBP), when care starts, the main eligibility rules and claim time limits. Use when the user asks how the rules work or what the amounts are. Do NOT use to assess a specific flight; use check_compensation.
{
"type": "object",
"required": [],
"properties": {}
}{
"type": "object",
"required": [
"rules",
"eligibility_summary",
"claim_windows",
"disclaimer"
],
"properties": {
"rules": {
"type": "array",
"items": {
"type": "object",
"required": [
"band",
"distance",
"eu_eur",
"uk_gbp",
"care_from"
],
"properties": {
"band": {
"type": "string",
"description": "Band name: short, medium or long."
},
"eu_eur": {
"type": "number",
"description": "EU261 amount in EUR."
},
"uk_gbp": {
"type": "number",
"description": "UK261 amount in GBP."
},
"distance": {
"type": "string",
"description": "Distance range in words."
},
"care_from": {
"type": "string",
"description": "Delay at which care starts."
}
}
},
"description": "Compensation amounts per distance band."
},
"disclaimer": {
"type": "string",
"description": "Not-legal-advice disclaimer to show the user."
},
"claim_windows": {
"type": "string",
"description": "Time limits for filing claims (EU and UK)."
},
"eligibility_summary": {
"type": "array",
"items": {
"type": "string"
},
"description": "Key eligibility rules, one per entry."
}
}
}{
"title": "Compensation table",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}disruption_rights — Disruption rights
List passenger rights for a disruption: first works out whether EU261/UK261 covers the route (as check_compensation does), then gives refund/re-routing, care by band, 5-hour refund, notice-based cancellation compensation rules, denied boarding and escalation. If no scheme applies, gives general guidance only. Does not compute money owed; use check_compensation.
{
"type": "object",
"required": [
"departure",
"arrival",
"disrupted"
],
"properties": {
"arrival": {
"type": "string",
"description": "Arrival airport 3-letter IATA code, case-insensitive, e.g. FCO"
},
"departure": {
"type": "string",
"description": "Departure airport 3-letter IATA code, case-insensitive, e.g. CDG"
},
"disrupted": {
"enum": [
"delayed",
"cancelled",
"denied_boarding"
],
"type": "string",
"description": "What happened: delayed, cancelled, or denied_boarding (bumped/overbooked)."
},
"notice_days": {
"type": "number",
"minimum": 0,
"description": "For cancellations: days of notice given, e.g. 3. 14+ days means no fixed compensation (refund/re-routing and care still apply); under 14 sets the re-routing conditions."
},
"carrier_country": {
"type": "string",
"description": "Operating airline's 2-letter country code, e.g. DE. Needed for flights arriving into the EU/UK from outside."
},
"arrival_delay_hours": {
"type": "number",
"minimum": 0,
"description": "For delays: hours late, e.g. 5. At 5h+ the refund option is added. Default 0."
}
}
}{
"type": "object",
"required": [
"disrupted",
"distance_km",
"band",
"entitled_rights",
"complaint_path",
"disclaimer"
],
"properties": {
"band": {
"enum": [
"short",
"medium",
"long",
"unknown"
],
"type": "string",
"description": "Distance band, or 'unknown' if an airport is not recognised."
},
"scheme": {
"enum": [
"EU261",
"UK261",
"none",
"unknown"
],
"type": "string",
"description": "Scheme covering the route; none = EU261/UK261 do not apply (general guidance only); unknown = airport not recognised."
},
"disrupted": {
"type": "string",
"description": "Disruption type that was assessed."
},
"disclaimer": {
"type": "string",
"description": "Not-legal-advice disclaimer to show the user."
},
"distance_km": {
"type": [
"number",
"null"
],
"description": "Route distance in km, or null if an airport is unknown."
},
"complaint_path": {
"type": "array",
"items": {
"type": "string"
},
"description": "Escalation steps from airline to regulator to court."
},
"entitled_rights": {
"type": "array",
"items": {
"type": "string"
},
"description": "Rights that apply under the scheme, or general guidance when no scheme applies, one per entry."
},
"jurisdiction_reason": {
"type": "string",
"description": "Why that scheme does or does not apply."
}
}
}{
"title": "Disruption rights",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}claim_timeline — Claim timeline
Give claim-deadline guidance for a flight under EU261 or UK261: a recommended act-by date (flight date + 12 months), the legal time-limit guidance, and an evidence checklist. Use for 'how long do I have to claim?'. Do NOT use to check eligibility; use check_compensation.
{
"type": "object",
"required": [
"flight_date",
"scheme"
],
"properties": {
"scheme": {
"enum": [
"EU261",
"UK261"
],
"type": "string",
"description": "EU261 (EU/EEA departure or EU carrier) or UK261 (UK departure or UK carrier); check_compensation tells you which."
},
"flight_date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Date of the disrupted flight, YYYY-MM-DD, e.g. 2026-09-01"
}
}
}{
"type": "object",
"required": [
"flight_date",
"scheme",
"recommended_action_by",
"window_guidance",
"evidence_checklist",
"disclaimer"
],
"properties": {
"scheme": {
"type": "string",
"description": "Scheme the guidance is for."
},
"disclaimer": {
"type": "string",
"description": "Not-legal-advice disclaimer to show the user."
},
"flight_date": {
"type": "string",
"description": "Flight date as given, YYYY-MM-DD."
},
"window_guidance": {
"type": "string",
"description": "Legal time-limit guidance for the scheme."
},
"evidence_checklist": {
"type": "array",
"items": {
"type": "string"
},
"description": "Evidence to gather, one per entry."
},
"recommended_action_by": {
"type": "string",
"description": "Suggested claim-by date (flight + 12 months), YYYY-MM-DD."
}
}
}{
"title": "Claim timeline",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}generate_claim_letter — Generate claim letter
Draft a formal EU261/UK261 compensation claim letter (subject, legal basis, amount, 14-day payment request, escalation notice) for the passenger to send themselves, plus sending tips. Nothing is sent. Use after check_compensation and pass its amount. Do NOT use to check eligibility; use check_compensation.
{
"type": "object",
"required": [
"passenger_name",
"airline_name",
"flight_number",
"flight_date",
"departure",
"arrival"
],
"properties": {
"scheme": {
"enum": [
"EU261",
"UK261"
],
"type": "string",
"description": "Legal basis. Default: UK261 if departing the UK, else EU261 (without claimed_amount, worked out from the route; errors if neither applies)."
},
"arrival": {
"type": "string",
"description": "Arrival airport 3-letter IATA code, case-insensitive, e.g. JFK"
},
"currency": {
"enum": [
"EUR",
"GBP"
],
"type": "string",
"description": "Currency of the claim. Default GBP for UK261, EUR for EU261."
},
"departure": {
"type": "string",
"description": "Departure airport 3-letter IATA code, case-insensitive, e.g. LHR"
},
"flight_date": {
"type": "string",
"minLength": 1,
"description": "Scheduled flight date, YYYY-MM-DD, e.g. 2026-09-01"
},
"airline_name": {
"type": "string",
"minLength": 1,
"description": "Operating airline, e.g. \"British Airways\""
},
"flight_number": {
"type": "string",
"minLength": 1,
"description": "Flight number, e.g. BA117"
},
"claimed_amount": {
"type": "number",
"minimum": 0,
"description": "Amount claimed, e.g. 600. If omitted, computed from the route like check_compensation (EUR 250/400/600 or GBP 220/350/520 by distance); required if an airport is unknown."
},
"passenger_name": {
"type": "string",
"minLength": 1,
"description": "Passenger's full name as on the booking, e.g. \"Jane Smith\""
},
"incident_summary": {
"type": "string",
"description": "One sentence on what happened, e.g. \"the flight arrived 4 hours late due to a technical fault\". Default generic wording."
},
"booking_reference": {
"type": "string",
"description": "Booking/PNR reference, e.g. ABC123. Optional."
}
}
}{
"type": "object",
"required": [
"subject",
"scheme",
"claimed_amount",
"letter",
"sending_tips",
"disclaimer"
],
"properties": {
"letter": {
"type": "string",
"description": "Full letter text, ready to copy and send."
},
"scheme": {
"enum": [
"EU261",
"UK261"
],
"type": "string",
"description": "Legal basis used in the letter."
},
"subject": {
"type": "string",
"description": "Suggested email or letter subject line."
},
"disclaimer": {
"type": "string",
"description": "Not-legal-advice disclaimer to show the user."
},
"sending_tips": {
"type": "array",
"items": {
"type": "string"
},
"description": "Practical tips for sending and follow-up."
},
"claimed_amount": {
"type": "object",
"required": [
"value",
"currency"
],
"properties": {
"value": {
"type": "number",
"description": "Amount claimed."
},
"currency": {
"type": "string",
"description": "EUR or GBP."
}
},
"description": "Amount and currency claimed."
}
}
}{
"title": "Generate claim letter",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}Prompts
Not advertised
Resources
Not advertised
30-day availability
Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.
- Successful checks
- 1 of 1 (100%)
- Average latency
- 217 ms
- 95th percentile latency
- 217 ms
Maintenance history
Public check and source-refresh events. Editorial and ownership records remain private.
- · probe · passed · 217 ms · metadata changed · 5 tool(s)
Connect from your client
Each snippet registers the same endpoint; pick the client you use.
Claude Code
claude mcp add --transport http flightfix-mcp https://flight-fix.magicteams.ai/mcpCodex
codex mcp add flightfix-mcp --url https://flight-fix.magicteams.ai/mcpCursor
{
"mcpServers": {
"flightfix-mcp": {
"url": "https://flight-fix.magicteams.ai/mcp"
}
}
}Cline
{
"mcpServers": {
"flightfix-mcp": {
"type": "streamableHttp",
"url": "https://flight-fix.magicteams.ai/mcp",
"disabled": false
}
}
}VS Code
{
"servers": {
"flightfix-mcp": {
"type": "http",
"url": "https://flight-fix.magicteams.ai/mcp"
}
}
}Gemini CLI
gemini mcp add --transport http flightfix-mcp https://flight-fix.magicteams.ai/mcpClaude Desktop
https://flight-fix.magicteams.ai/mcpWindsurf
{
"mcpServers": {
"flightfix-mcp": {
"serverUrl": "https://flight-fix.magicteams.ai/mcp"
}
}
}Let your agent find its tools
Find servers like FlightFix MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.