Use points or pay cash? Cents-per-point verdicts, transfer partners, award prices, lounges.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Typical saver award prices (one-way) by program, market and cabin from a researched table, plus known sweet spots. Use when live award search is unavailable, to shortlist programs, or to judge whether a live price is good. Prices are estimates with an as_of date; dynamic programs vary.
us_ = from the US, eu_ = from Europe. *_north_asia = Japan/Korea/China/HK/Taiwan; eu_middle_east includes North and Central Africa; eu_africa = southern Africa
Program slugs to look up; empty array = all programs with a price for this market
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
claude mcp add --transport http points-or-cash https://pointsorcash.app/mcp
Typical saver award prices (one-way) by program, market and cabin from a researched table, plus known sweet spots. Use when live award search is unavailable, to shortlist programs, or to judge whether a live price is good. Prices are estimates with an as_of date; dynamic programs vary.
| Argument | Type | Description |
|---|---|---|
| cabin* | string | |
| market* | string | us_ = from the US, eu_ = from Europe. *_north_asia = Japan/Korea/China/HK/Taiwan; eu_middle_east includes North and Central Africa; eu_africa = southern Africa |
| programs* | array | Program slugs to look up; empty array = all programs with a price for this market |
{
"type": "object",
"required": [
"market",
"cabin",
"programs"
],
"properties": {
"cabin": {
"enum": [
"economy",
"premium",
"business",
"first"
],
"type": "string"
},
"market": {
"enum": [
"us_domestic",
"us_europe",
"us_japan_north_asia",
"us_southeast_asia",
"us_middle_east_india",
"us_south_america",
"us_hawaii",
"us_caribbean_mexico",
"eu_europe",
"eu_north_america",
"eu_caribbean_mexico",
"eu_south_america",
"eu_middle_east",
"eu_africa",
"eu_india",
"eu_southeast_asia",
"eu_north_asia",
"eu_australia"
],
"type": "string",
"description": "us_ = from the US, eu_ = from Europe. *_north_asia = Japan/Korea/China/HK/Taiwan; eu_middle_east includes North and Central Africa; eu_africa = southern Africa"
},
"programs": {
"type": "array",
"items": {
"type": "string"
},
"description": "Program slugs to look up; empty array = all programs with a price for this market"
}
},
"additionalProperties": false
}Earn rates for crypto-cashback and flat-cashback cards (Coinbase One Card, Gemini, Crypto.com, Fold, Robinhood Gold, Citi Double Cash, Wells Fargo Active Cash and more): rate on airfare, hotels, travel portals and everything else, fees, caps and how rewards pay out. Use when the traveler pays cash with one of these cards, to value the cash option (cash back earned) and to pass cash_back_pct to points_value.
| Argument | Type | Description |
|---|---|---|
| cards* | array | Card slugs or names, e.g. ["coinbase_one_card"]; empty array = all cards |
{
"type": "object",
"required": [
"cards"
],
"properties": {
"cards": {
"type": "array",
"items": {
"type": "string"
},
"description": "Card slugs or names, e.g. [\"coinbase_one_card\"]; empty array = all cards"
}
},
"additionalProperties": false
}Airport lounges for a journey: the lounges at each airport (origin, connections, destination) and which ones the traveler can use with their cards, plus access rules by ticket and status (business class, oneworld/Star Alliance/SkyTeam elite). Covers 214 airports, including Brussels and the main European and Asian hubs, with access by ticket, status, Priority Pass and cards by issuing country. Use it when planning the full journey, after the flights are decided or when the traveler asks about lounges. Card rules change often; the data has an as_of date and verified flags.
| Argument | Type | Description |
|---|---|---|
| cards* | array | Lounge-relevant cards the traveler holds, as slugs. US-issued: amex_platinum, amex_business_platinum, amex_centurion_card, chase_sapphire_reserve, capital_one_venture_x, citi_strata_elite, citi_aadvantage_executive, united_club_infinite, delta_reserve, bilt_palladium, priority_pass_network. Issued elsewhere: amex_platinum_be, amex_platinum_uk, amex_platinum_de, amex_platinum_nl, amex_platinum_fr, amex_platinum_au, revolut_ultra_be, bnp_fortis_mc_world_elite, belfius_private_mc_world_elite. Ask where a card was issued if it matters. Empty if unknown. |
| airports* | array | IATA codes in travel order, e.g. ["SFO","SEA","HND"] |
{
"type": "object",
"required": [
"airports",
"cards"
],
"properties": {
"cards": {
"type": "array",
"items": {
"type": "string"
},
"description": "Lounge-relevant cards the traveler holds, as slugs. US-issued: amex_platinum, amex_business_platinum, amex_centurion_card, chase_sapphire_reserve, capital_one_venture_x, citi_strata_elite, citi_aadvantage_executive, united_club_infinite, delta_reserve, bilt_palladium, priority_pass_network. Issued elsewhere: amex_platinum_be, amex_platinum_uk, amex_platinum_de, amex_platinum_nl, amex_platinum_fr, amex_platinum_au, revolut_ultra_be, bnp_fortis_mc_world_elite, belfius_private_mc_world_elite. Ask where a card was issued if it matters. Empty if unknown."
},
"airports": {
"type": "array",
"items": {
"type": "string"
},
"description": "IATA codes in travel order, e.g. [\"SFO\",\"SEA\",\"HND\"]"
}
},
"additionalProperties": false
}Exact cents-per-point for an award vs the cash fare, in the trip currency: (cash − award fees − what paying cash would earn) ÷ points × 100. When the award is paid by transferring bank points, pass bank + program: it applies the traveler's transfer ratio (e.g. Belgian Amex to Flying Blue is 2:1) and any active bonus, and judges the value per bank point spent. Call it for every award you compare, rather than doing the maths yourself.
| Argument | Type | Description |
|---|---|---|
| options* | array | |
| currency* | string | Currency of all prices, e.g. "EUR", "USD", "GBP". Cash fare and award fees must be in the same currency; convert first if they differ. |
| cash_back_pct* | any | Cash/crypto back % the traveler would earn paying cash (e.g. 4 for a 4% card). Null if unknown. |
| points_per_unit_paying_cash* | any | Card points earned per dollar/euro on the cash fare (e.g. 5 for Amex Platinum on flights). Null if unknown. |
{
"type": "object",
"required": [
"currency",
"options",
"cash_back_pct",
"points_per_unit_paying_cash"
],
"properties": {
"options": {
"type": "array",
"items": {
"type": "object",
"required": [
"label",
"cash_price",
"miles",
"award_fees",
"bank",
"program",
"bank_points",
"miles_earned_paying_cash"
],
"properties": {
"bank": {
"anyOf": [
{
"enum": [
"amex_mr",
"chase_ur",
"capital_one",
"citi_ty",
"bilt",
"wells_fargo",
"us_bank",
"amex_mr_be",
"amex_mr_nl",
"amex_mr_uk",
"amex_mr_fr",
"amex_mr_de",
"revolut_eu",
"revolut_uk",
"amex_mr_es",
"amex_mr_it",
"amex_mr_se",
"amex_mr_ch",
"amex_mr_ca",
"rbc_avion_ca",
"amex_mr_au",
"anz_au",
"westpac_au",
"nab_au",
"cba_au",
"dbs_sg",
"uob_sg",
"citi_sg",
"hsbc_sg",
"amex_mr_sg",
"hsbc_hk",
"citi_hk",
"amex_mr_hk",
"scb_hk",
"hdfc_in",
"axis_in",
"amex_mr_in",
"icici_in",
"enbd_ae",
"amex_mr_ae",
"mashreq_ae",
"fab_ae"
],
"type": "string"
},
{
"type": "null"
}
],
"description": "Bank currency transferred to pay for it (same keys as transfer_options, e.g. amex_mr_be), or null if the miles are already in the program"
},
"label": {
"type": "string",
"description": "e.g. \"Flying Blue business, 60k + €500\""
},
"miles": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Miles/points the award costs in the airline or hotel program",
"exclusiveMinimum": 0
},
"program": {
"type": [
"string",
"null"
],
"description": "Program slug the miles are in, e.g. \"flyingblue\", \"avios_ba\", \"aeroplan\"; needed with bank"
},
"award_fees": {
"type": "number",
"minimum": 0,
"description": "Taxes, fees and surcharges paid on the award"
},
"cash_price": {
"type": "number",
"description": "Cash fare for the same flight",
"exclusiveMinimum": 0
},
"bank_points": {
"anyOf": [
{
"type": "integer",
"maximum": 9007199254740991,
"exclusiveMinimum": 0
},
{
"type": "null"
}
],
"description": "Bank points spent if you already know it (overrides the ratio lookup); else null"
},
"miles_earned_paying_cash": {
"anyOf": [
{
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0
},
{
"type": "null"
}
],
"description": "Airline miles the cash ticket would earn (award tickets usually earn none); null if unknown"
}
},
"additionalProperties": false
}
},
"currency": {
"type": "string",
"maxLength": 3,
"minLength": 3,
"description": "Currency of all prices, e.g. \"EUR\", \"USD\", \"GBP\". Cash fare and award fees must be in the same currency; convert first if they differ."
},
"cash_back_pct": {
"anyOf": [
{
"type": "number",
"maximum": 10,
"minimum": 0
},
{
"type": "null"
}
],
"description": "Cash/crypto back % the traveler would earn paying cash (e.g. 4 for a 4% card). Null if unknown."
},
"points_per_unit_paying_cash": {
"anyOf": [
{
"type": "number",
"maximum": 10,
"minimum": 0
},
{
"type": "null"
}
],
"description": "Card points earned per dollar/euro on the cash fare (e.g. 5 for Amex Platinum on flights). Null if unknown."
}
},
"additionalProperties": false
}Which of the traveler's bank points can become miles/points in a target loyalty program, at what ratio, and how many they would end up with. Based on a researched transfer-partner table (has an as_of date; ratios change and transfer bonuses are not included). Pass the traveler's balances.
| Argument | Type | Description |
|---|---|---|
| balances* | array | The traveler's bank point balances, e.g. [{"bank":"amex_mr","points":250000}]. amex_mr means a US-issued Amex; for an Amex issued elsewhere use the country key (amex_mr_be/_nl/_uk/_fr/_de/_es/_it/_se/_ch/_ca/_au/_sg/_hk/_in/_ae: different partners and ratios). Also Revolut RevPoints (revolut_eu, revolut_uk) and local banks (rbc_avion_ca, anz_au, westpac_au, nab_au, cba_au, dbs_sg, uob_sg, citi_sg, hsbc_sg, hsbc_hk, citi_hk, scb_hk, hdfc_in, axis_in, icici_in, enbd_ae, mashreq_ae, fab_ae). Ask which country issued the card if unclear. |
| miles_needed* | any | Miles the award costs, to check whether the balances cover it; null if unknown |
| target_programs* | array | Program slugs, e.g. ["aeroplan","flyingblue","virginatlantic","ana","hyatt"]. Empty array = list every partner reachable from the balances. |
{
"type": "object",
"required": [
"target_programs",
"balances",
"miles_needed"
],
"properties": {
"balances": {
"type": "array",
"items": {
"type": "object",
"required": [
"bank",
"points"
],
"properties": {
"bank": {
"enum": [
"amex_mr",
"chase_ur",
"capital_one",
"citi_ty",
"bilt",
"wells_fargo",
"us_bank",
"amex_mr_be",
"amex_mr_nl",
"amex_mr_uk",
"amex_mr_fr",
"amex_mr_de",
"revolut_eu",
"revolut_uk",
"amex_mr_es",
"amex_mr_it",
"amex_mr_se",
"amex_mr_ch",
"amex_mr_ca",
"rbc_avion_ca",
"amex_mr_au",
"anz_au",
"westpac_au",
"nab_au",
"cba_au",
"dbs_sg",
"uob_sg",
"citi_sg",
"hsbc_sg",
"amex_mr_sg",
"hsbc_hk",
"citi_hk",
"amex_mr_hk",
"scb_hk",
"hdfc_in",
"axis_in",
"amex_mr_in",
"icici_in",
"enbd_ae",
"amex_mr_ae",
"mashreq_ae",
"fab_ae"
],
"type": "string"
},
"points": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0
}
},
"additionalProperties": false
},
"description": "The traveler's bank point balances, e.g. [{\"bank\":\"amex_mr\",\"points\":250000}]. amex_mr means a US-issued Amex; for an Amex issued elsewhere use the country key (amex_mr_be/_nl/_uk/_fr/_de/_es/_it/_se/_ch/_ca/_au/_sg/_hk/_in/_ae: different partners and ratios). Also Revolut RevPoints (revolut_eu, revolut_uk) and local banks (rbc_avion_ca, anz_au, westpac_au, nab_au, cba_au, dbs_sg, uob_sg, citi_sg, hsbc_sg, hsbc_hk, citi_hk, scb_hk, hdfc_in, axis_in, icici_in, enbd_ae, mashreq_ae, fab_ae). Ask which country issued the card if unclear."
},
"miles_needed": {
"anyOf": [
{
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
{
"type": "null"
}
],
"description": "Miles the award costs, to check whether the balances cover it; null if unknown"
},
"target_programs": {
"type": "array",
"items": {
"type": "string"
},
"description": "Program slugs, e.g. [\"aeroplan\",\"flyingblue\",\"virginatlantic\",\"ana\",\"hyatt\"]. Empty array = list every partner reachable from the balances."
}
},
"additionalProperties": false
}We read every tool's name, description and inputs the way the model will, looking for instructions hidden from you. A clean result means no warning signs, not a guarantee. Scanned Nov 3, 2026.