aneduaim avatar

Untap

aneduaim/untap-mcp

Connects Claude or ChatGPT to Untap's UK consumer refund engine via OAuth 2.1. Exposes six tools: add train journeys for Delay Repay checks against National Rail HSP, add flights for UK261/EU261 compensation lookups via AeroDataBox, add TfL contactless batches to detect overcharges and missed Hopper fares, add parking fines for appeal-ground analysis, list all claimable refunds, and delete user data. Each verdict includes a deeplink to the operator's claim form. Reach for this if you're in the UK and want your assistant to spot money you're owed from delayed trains, disrupted flights, botched Oyster taps, or dodgy parking tickets without surrendering bank credentials.

tools
20
transport
HTTP
last updated
Oct 11, 2026

Install

From registry metadata
$ npx add-mcp https://untap.money/api/mcp --name untap-mcp

Run in your terminal. add-mcp asks which agents to add it to (Claude Code, Codex, Cursor and more). Add -g to install it for every project.

Review the command, arguments and environment values before installing. MCP servers run with your local permissions.

Other ways

Claude Code

$ claude mcp add --transport http untap-mcp https://untap.money/api/mcp

Run in your terminal. Add --scope user to make it available in every project.

Tools

Verified live · 20 tools

Verified live against the running server on Nov 6, 2026.

find_money_owedTakes a plain-language description of what happened (a late or cancelled train, a delayed or cancelled flight, a TfL overcharge, a parking ticket, a council tax, water or broadband problem) and returns the UK refund and compensation schemes Untap covers that may apply. For eac...1 params

Takes a plain-language description of what happened (a late or cancelled train, a delayed or cancelled flight, a TfL overcharge, a parking ticket, a council tax, water or broadband problem) and returns the UK refund and compensation schemes Untap covers that may apply. For eac...

Parameters* required
situation*string
What happened, in the person’s own words. For example: "my train from Brighton to Victoria was 40 minutes late on Monday" or "I think my council tax band is wrong".
check_train_delayChecks a late or cancelled train in Great Britain against National Rail’s historic running records and works out Delay Repay. Takes the two stations (names, partial names or three-letter codes), the date and roughly when the train left; the operator, ticket type and price paid...9 params

Checks a late or cancelled train in Great Britain against National Rail’s historic running records and works out Delay Repay. Takes the two stations (names, partial names or three-letter codes), the date and roughly when the train left; the operator, ticket type and price paid...

Parameters* required
date*string
Date of travel. YYYY-MM-DD is best; "25/09/2026", "25 September", "yesterday" and "last Friday" also work.
departure_timevalue
Roughly when the train left the first station, UK time: "08:05", "8am", "around 8". Needed to find the train unless service_id is given.
from*string
Station the person got on at. A name, part of a name or a three-letter code: "Brighton", "Kings Cross", "BTN".
operatorvalue
Train company if known, as the person says it: "Southern", "GWR", "Avanti". Used to narrow the match.
price_paidvalue
What one ticket cost, in pounds: "£24.50", 24.5 or 17 (read as £17.00). For a season ticket, the price of the whole season. Needed for a cash amount; without it the percentage is returned.
service_idvalue
The service_id of a train listed in an earlier result. With it, that train is checked directly.
ticket_typevalue
As printed: "Anytime Return", "Off-Peak Single", "Advance", "Annual Season", "Monthly Season", "Flexi Season". A return halves the single fare the amount is worked from. A season is valued per jour...
ticketsvalue
How many tickets of this price are on the booking, one per passenger. Defaults to 1. The amount is per ticket times this.
to*string
Station the person got off at, in the same forms.
check_flight_compensationWorks out compensation for a delayed or cancelled flight under UK261 or EU261. Takes the flight number and date. What happened comes from flight-status records, which cover about the last year, or from what_happened and arrival_delay_minutes when given. Returns the matched rou...8 params

Works out compensation for a delayed or cancelled flight under UK261 or EU261. Takes the flight number and date. What happened comes from flight-status records, which cover about the last year, or from what_happened and arrival_delay_minutes when given. Returns the matched rou...

Parameters* required
arrival_delay_minutesvalue
How late the flight arrived at the gate, in minutes, if the person knows. Compensation turns on arrival, not departure.
cancellation_notice_daysvalue
For a cancellation: how many days before departure the airline told the person. 14 or more means no compensation.
date*string
Date the flight was due to depart, local time. YYYY-MM-DD is best.
flight_number*string
Airline code and number, as on the booking: "BA2551", "U2 8123".
from_airportvalue
Three-letter departure airport code, if known: "LGW". Helps pick the right flight on multi-stop numbers.
price_paidvalue
Optional, in pounds: "£180" or 180. Not used for the amount, which is fixed in law, but needed to save the claim to an account.
to_airportvalue
Three-letter arrival airport code, if known: "BCN".
what_happenedvalue
What happened, if known. When left out, Untap looks it up in flight-status records.
check_tfl_journeysChecks Transport for London contactless or Oyster journeys for overcharges: incomplete journeys (no touch out, so the maximum fare was charged) and missed Hopper fares. Takes journey rows from a journey history, or the text of the CSV download from a TfL account. PDFs and imag...2 params

Checks Transport for London contactless or Oyster journeys for overcharges: incomplete journeys (no touch out, so the maximum fare was charged) and missed Hopper fares. Takes journey rows from a journey history, or the text of the CSV download from a TfL account. PDFs and imag...

Parameters* required
csv_textvalue
The text of the CSV journey history downloaded from a TfL account. Takes priority over journeys.
journeysvalue
Journey rows from a TfL contactless or Oyster journey history. Used when csv_text is not given.
get_delay_repay_rulesReturns one train operator’s Delay Repay rules: the delay at which it starts paying, each payout tier, the claim deadline, the link to its claim form, any automatic or one-click scheme, and the date the rules were last checked against the operator’s own page. Accepts the opera...1 params

Returns one train operator’s Delay Repay rules: the delay at which it starts paying, each payout tier, the claim deadline, the link to its claim form, any automatic or one-click scheme, and the date the rules were last checked against the operator’s own page. Accepts the opera...

Parameters* required
operator*string
Train company name as people say it: "Avanti", "GWR", "Southern", "LNER", or a two-letter operator code.
get_claim_instructionsReturns how to submit one train, flight or TfL compensation claim on the company’s own form. Takes the claim type and the train operator or airline, with the journey date, ticket type, where it was booked and the airports as optional extras. Returns the eligibility rules for t...7 params

Returns how to submit one train, flight or TfL compensation claim on the company’s own form. Takes the claim type and the train operator or airline, with the journey date, ticket type, where it was booked and the airports as optional extras. Returns the eligibility rules for t...

Parameters* required
arrival_airportvalue
Three-letter arrival airport code, such as "LHR".
booked_viavalue
Where the ticket was bought: from the operator or airline itself, from a ticket retailer such as Trainline, through a travel agent, or as part of a package holiday.
claim_type*string
What the claim is for: a late or cancelled train, a delayed or cancelled flight, denied boarding, a TfL incomplete journey or another TfL overcharge.one of train_delay · train_cancellation · flight_delay · flight_cancellation · denied_boarding · tfl_incomplete_journey
companyvalue
The train operator or airline, by name or code as people say it: "Southern", "LNER", "easyJet", "BA", "U2". Not needed for TfL.
departure_airportvalue
Three-letter departure airport code, such as "CDG". Decides whether UK261 or EU261 applies, and with the arrival airport, the distance band.
journey_datevalue
Date of travel, YYYY-MM-DD. With it, the result gives the last day to claim as a date.
ticket_typevalue
Ticket type as printed, such as "Anytime Return", "Advance Single" or "Season". Decides the rail return-ticket rule.
scan_for_claimsReads up to 25 emails (sender, subject, date and plain-text body) and picks out the ones that point to a train, flight or TfL claim: booking confirmations, delay and cancellation notices, airline schedule changes and denied boarding, TfL incomplete journey and maximum fare ema...1 params

Reads up to 25 emails (sender, subject, date and plain-text body) and picks out the ones that point to a train, flight or TfL claim: booking confirmations, delay and cancellation notices, airline schedule changes and denied boarding, TfL incomplete journey and maximum fare ema...

Parameters* required
emails*array
Up to 25 emails, each with its sender, subject, date and plain-text body.
save_claimSaves the result of a train, flight or TfL check to the person’s Untap account, so it appears on their dashboard with its deadline. Accepts the save_claim arguments returned by a check, with the price paid added where the check listed it as missing. The verdict is worked out a...4 params

Saves the result of a train, flight or TfL check to the person’s Untap account, so it appears on their dashboard with its deadline. Accepts the save_claim arguments returned by a check, with the price paid added where the check listed it as missing. The verdict is worked out a...

Parameters* required
category*string
Which kind of check the claim came from.one of train · flight · tfl
flightvalue
For category "flight": the flight, in the shape a flight check returns in save_claim.arguments.flight, with ticket_price_pence set.
tflvalue
For category "tfl": the journeys, in the shape a TfL check returns in save_claim.arguments.tfl.
trainvalue
For category "train": the train booking, in the shape a train check returns in save_claim.arguments.train, with ticket_price_pence set.
save_commuteSaves or updates one direction of a usual train journey (a commute) in the person’s Untap account: stations, usual departure time, travel days and day-ticket fare. An outward and a homeward journey are two separate routes. Saving the same route and time again updates it. Nothi...8 params

Saves or updates one direction of a usual train journey (a commute) in the person’s Untap account: stations, usual departure time, travel days and day-ticket fare. An outward and a homeward journey are two separate routes. Saving the same route and time again updates it. Nothi...

Parameters* required
commute_idvalue
The id of an existing commute in this account, to update or restore it. When left out, a new route is saved.
departure_time*string
Usual UK departure time, for example 08:05 or 8am.
from*string
Departure station name or three-letter code.
labelvalue
Optional short name such as Morning commute.
ticket_price_pencevalue
Usual day-ticket price in pence, £24.50=2450. Optional, for when the fare is known and stays the same. A day-ticket price, not a weekly or monthly season price.
ticket_typestring
Day ticket type. For return, the price is the whole return fare. Season tickets are not supported by saved commutes.one of single · returndefault: single
to*string
Arrival station name or three-letter code.
weekdaysarray
Usual travel days: Monday=1 through Sunday=7. Informational only; no automatic checks.
list_commutesLists the person’s saved train routes with their ids, usual times, days and fares. Makes no National Rail lookups. Requires sign-in to Untap.1 params

Lists the person’s saved train routes with their ids, usual times, days and fares. Makes no National Rail lookups. Requires sign-in to Untap.

Parameters* required
include_stoppedboolean
Include stopped routes so they can be restored.default: false
stop_commuteHides a saved train route from the active list. The route is kept and can be restored by saving it again with its commute_id. No claims or bookings change. Requires sign-in to Untap.1 params

Hides a saved train route from the active list. The route is kept and can be restored by saving it again with its commute_id. No claims or bookings change. Requires sign-in to Untap.

Parameters* required
commute_id*string
The id of a saved commute. The route is kept and can be restored.
check_commuteChecks a saved train route against National Rail’s running records for one travel date and works out Delay Repay: the matched train, the delay, the amount, the deadline and a claim pack. When several trains match, the result lists them, each with a service_id. A saved route do...3 params

Checks a saved train route against National Rail’s running records for one travel date and works out Delay Repay: the matched train, the delay, the amount, the deadline and a claim pack. When several trains match, the result lists them, each with a service_id. A saved route do...

Parameters* required
commute_id*string
The id of a saved commute.
date*string
The travel date to check, preferably YYYY-MM-DD. "yesterday" also works.
service_idvalue
The service_id of a train listed in an earlier result. With it, that train is checked directly.
list_my_claimsLists the claims in the person’s Untap account with amounts, deadlines, the verdict and their progress (not sent, sent, paid, rejected or archived). By default it shows claims that are still open; include_closed adds paid, rejected and archived ones. Requires sign-in to Untap.3 params

Lists the claims in the person’s Untap account with amounts, deadlines, the verdict and their progress (not sent, sent, paid, rejected or archived). By default it shows claims that are still open; include_closed adds paid, rejected and archived ones. Requires sign-in to Untap.

Parameters* required
categoryvalue
Restricts the list to one category. When left out, all categories are listed.
include_closedboolean
Also show claims marked paid, rejected or archived, and ones with nothing to claim.default: false
limitinteger
Most rows to return. Defaults to 25.default: 25
update_claim_statusRecords progress on a claim in the person’s Untap account: sent (submitted to the operator or airline), paid (with the amount received, if known), rejected, or archived. Takes the claim_id given when the claim was saved or listed. This updates Untap’s record only; it does not...4 params

Records progress on a claim in the person’s Untap account: sent (submitted to the operator or airline), paid (with the amount received, if known), rejected, or archived. Takes the claim_id given when the claim was saved or listed. This updates Untap’s record only; it does not...

Parameters* required
amount_received_pencevalue
For paid: the amount actually received, in pence. £12.40 = 1240.
claim_id*string
The claim_id given when the claim was saved or listed.
notevalue
Optional short note, such as the operator’s reference or the reason given for a refusal.
status*string
sent: submitted to the operator or airline. paid: money received. rejected: the claim was refused. archived: hide it without an outcome.one of sent · paid · rejected · archived
add_train_journeyAdds a UK train booking to the person’s Untap account and works out Delay Repay for it. One booking per call, with each journey in legs (one for a single, two for a return, in travel order). Untap checks National Rail’s Historical Service Performance records for each journey;...5 params

Adds a UK train booking to the person’s Untap account and works out Delay Repay for it. One booking per call, with each journey in legs (one for a single, two for a return, in travel order). Untap checks National Rail’s Historical Service Performance records for each journey;...

Parameters* required
booking_reference*string
Booking reference if available, otherwise null.
legs*array
Each journey on this booking, in travel order: one for a single, two for a return (outward first), more for a multi-stop booking. Untap works out Delay Repay for each journey and adds them up.
season_typevalue
Season tickets only: how long the season runs. The operator divides the season price into single journeys (for example annual 464, monthly 40, weekly 10, flexi 16) and pays a share of one journey....
ticket_price_pence*integer
Total fare paid in pence for the whole booking. £62.00 = 6200.
ticket_type*string
Ticket type as printed. For "return" and "open_return" the single fare is half the price paid; for "season" the amount is a share of one journey value (see season_type); every other type uses the f...one of single · return · open_return · advance · anytime · off_peak
add_flightAdds a flight to the person’s Untap account and returns the UK261 or EU261 verdict, the amount and the airline’s claim link. For past flights Untap checks AeroDataBox flight-status records; the status, delay and actual arrival fields are optional, and when left out Untap looks...12 params

Adds a flight to the person’s Untap account and returns the UK261 or EU261 verdict, the amount and the airline’s claim link. For past flights Untap checks AeroDataBox flight-status records; the status, delay and actual arrival fields are optional, and when left out Untap looks...

Parameters* required
actual_arrivalstring
Optional. Actual arrival as an ISO 8601 datetime, if known.
airline_iata*string
Two-letter IATA airline code, e.g. "BA" for British Airways, "U2" for easyJet.
arrival_iata*string
Three-letter IATA arrival airport code, e.g. "BCN".
booking_reference*string
PNR / airline booking reference if available, otherwise null.
delay_minutesvalue
Optional. Arrival delay in minutes, if known.
departure_iata*string
Three-letter IATA departure airport code, e.g. "LHR".
flight_number*string
Flight number including the airline prefix, e.g. "BA2551".
passenger_name*string
Passenger name as printed on the ticket, or null if not visible.
scheduled_arrival*string
Scheduled arrival as ISO 8601 datetime.
scheduled_departure*string
Scheduled departure as ISO 8601 datetime.
statusvalue
Optional. What happened to the flight, if known. When left out, Untap looks the flight up in AeroDataBox flight-status records.
ticket_price_pence*integer
Total fare paid in pence.
add_tfl_journeysAdds TfL contactless journeys to the person’s Untap account, up to 500 rows per call, and checks everything they have saved for incomplete journeys, missed Hopper fares and other overcharges. Each row carries flags for an incomplete journey, a revenue-inspection maximum fare,...4 params

Adds TfL contactless journeys to the person’s Untap account, up to 500 rows per call, and checks everything they have saved for incomplete journeys, missed Hopper fares and other overcharges. Each row carries flags for an incomplete journey, a revenue-inspection maximum fare,...

Parameters* required
card_last4*string
Last 4 digits of the contactless card, if shown.
journeys*array
Every journey on the statement. Up to 500 per call.
period_end*string
Statement period end date YYYY-MM-DD.
period_start*string
Statement period start date YYYY-MM-DD.
add_parking_fineAdds a UK parking ticket (a council PCN or a private parking charge) to the person’s Untap account and runs Untap’s appeal-grounds engine. Returns the grounds that may apply, how confident the match is, the appeal route and deadline. Grounds are matched against the contraventi...17 params

Adds a UK parking ticket (a council PCN or a private parking charge) to the person’s Untap account and runs Untap’s appeal-grounds engine. Returns the grounds that may apply, how confident the match is, the appeal route and deadline. Grounds are matched against the contraventi...

Parameters* required
amount_pence*integer
Full charge amount in pence. £65 = 6500.
appeal_url*value
Direct https URL on the notice for online appeals, or null if none.
contravention_code*string
Council contravention code, e.g. "01", "12", "MR11". Null for private tickets.
contravention_date*string
Date the contravention allegedly occurred, ISO 8601 date.
contravention_description*string
Full text of the alleged contravention as printed on the notice.
discount_deadline*string
ISO date by which the discount applies, or null if not stated.
discounted_amount_pence*value
Reduced amount in pence if paid promptly (usually 50% within 14 or 21 days). Null if none stated.
full_deadline*string
Last date on the notice for paying the full amount or lodging an appeal, as an ISO date.
has_windscreen_notice*boolean
True if a paper notice was placed on the windscreen. False if it arrived in the post only.
issued_date*string
Date the notice was issued or served, ISO 8601 date.
issuer_name*string
Issuer name as written, e.g. "London Borough of Camden" or "ParkingEye Ltd".
issuer_type*string
Council = local authority issued under TMA 2004. Private = on private land by a parking operator (BPA or IPC member).one of council · private
keeper_notice_served_date*string
Private only: date the Notice to Keeper was served.
location*string
Street or car park name where the contravention allegedly occurred.
observed_notes*array
Short phrases from the notice or the person’s account that may support an appeal, such as unclear signs, a broken machine or a few minutes over. The appeal-grounds engine matches against these; wit...
pcn_reference*string
PCN or notice reference number printed on the document.
vehicle_registration*string
Vehicle registration mark, or null if not shown.
list_savingsLists the savings rows in the person’s Untap account, filtered by category and status. Each row has the verdict status (claimable, pending_check, not_eligible and so on) and user_progress, what the person has recorded since: none, submitted (sent), received (paid) or archived....3 params

Lists the savings rows in the person’s Untap account, filtered by category and status. Each row has the verdict status (claimable, pending_check, not_eligible and so on) and user_progress, what the person has recorded since: none, submitted (sent), received (paid) or archived....

Parameters* required
category*value
Restrict to a single category, or null for all categories.
limitinteger
Maximum number of savings rows to return. Defaults to 25, capped at 100.default: 25
status*value
Restrict to a single status, or null for all.
delete_my_dataDeletes every booking, statement, saved commute and claim in the person’s Untap account, in two steps. A call with confirm=false deletes nothing and returns a summary of what would be deleted, with a confirmation_token valid for 5 minutes. A call with confirm=true and that tok...2 params

Deletes every booking, statement, saved commute and claim in the person’s Untap account, in two steps. A call with confirm=false deletes nothing and returns a summary of what would be deleted, with a confirmation_token valid for 5 minutes. A call with confirm=true and that tok...

Parameters* required
confirmboolean
false returns a preview of what would be deleted and a confirmation_token, and deletes nothing. true deletes, and works only with an unexpired confirmation_token from a preview.default: false
confirmation_tokenstring
The confirmation_token from a preview. Required when confirm is true; each token works once.

Sponsors

Readme

Untap for AI assistants

Check whether you are owed money for a delayed train, a disrupted flight, a TfL overcharge or a UK parking ticket, and get the operator's own claim link.

Untap checks UK refunds and compensation from delayed trains, disrupted flights, TfL journey charges and parking notices. Public checks return the applicable rules, amount, deadline and claim guidance. Sign in to save claims, track progress and check saved train commutes for dates you request. You submit claims directly to the operator or airline. Untap never files a claim for you.

Every package here is a thin wrapper around the same hosted MCP server, plus Untap's skills:

https://untap.money/api/mcp

Tools live on the server, so they update in every assistant without a new package. Version 1.3.4.

Install

Claude Code

/plugin marketplace add aneduaim/untap-mcp
/plugin install untap@untap

Claude (web, desktop and Cowork): go to Customize, Plugins, Add, Add marketplace and paste https://github.com/aneduaim/untap-mcp. Install Untap, then connect it from the plugin's Connectors tab. You can also add https://untap.money/api/mcp as a custom connector.


View the full README on GitHub

Details

Repository
github.com/aneduaim/untap-mcp
Website
untap.money/connect
Transport
HTTP
Registry
MCP registry, active
Tools verified
Nov 6, 2026