Which credit cards a household should carry, simulated over 5 years on weekly-verified terms.
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.
Two named cards head to head on the person's own spending: which one pays more, and by how much a year. Use this when they are choosing between two specific cards. For 'what should I get', use simulate_cards instead.
Card id.
Card id.
A short lowercase slug naming your client, so apply clicks can be attributed. Required.
A year's card spending in dollars, by category. Map the person's statement onto these categories with the spending_categories tool first. At least 4 categories must have spending and no single one may exceed 70% of the total, so send the whole picture rather than one category.
Card ids the person already carries, so a new card is judged against them.
Whether points are valued as cash back or for travel. Defaults to cash.
Horizon in years. One of 1, 3 or 5; defaults to 5.
Must-haves that remove cards before ranking.
Flights departed per year, which decides what lounge and companion perks are worth.
Membership tags the person already pays for, e.g. amazon_prime, costco_membership.
Of that spending, how much is in a foreign currency, per year.
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Two named cards head to head on the person's own spending: which one pays more, and by how much a year. Use this when they are choosing between two specific cards. For 'what should I get', use simulate_cards instead.
| Argument | Type | Description |
|---|---|---|
| held | array | Card ids the person already carries, so a new card is judged against them. |
| mode | string | Whether points are valued as cash back or for travel. Defaults to cash. |
| cardA* | string | Card id. |
| cardB* | string | Card id. |
| years | any | Horizon in years. One of 1, 3 or 5; defaults to 5. |
| source* | string | A short lowercase slug naming your client, so apply clicks can be attributed. Required. |
| totals* | object | A year's card spending in dollars, by category. Map the person's statement onto these categories with the spending_categories tool first. At least 4 categories must have spending and no single one may exceed 70% of the total, so send the whole picture rather than one category. |
| filters | object | Must-haves that remove cards before ranking. |
| departures | integer | Flights departed per year, which decides what lounge and companion perks are worth. |
| memberships | array | Membership tags the person already pays for, e.g. amazon_prime, costco_membership. |
| foreignPerYear | number | Of that spending, how much is in a foreign currency, per year. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"totals",
"source",
"cardA",
"cardB"
],
"properties": {
"held": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 5,
"description": "Card ids the person already carries, so a new card is judged against them."
},
"mode": {
"enum": [
"cash",
"travel"
],
"type": "string",
"description": "Whether points are valued as cash back or for travel. Defaults to cash."
},
"cardA": {
"type": "string",
"description": "Card id."
},
"cardB": {
"type": "string",
"description": "Card id."
},
"years": {
"anyOf": [
{
"type": "number",
"const": 1
},
{
"type": "number",
"const": 3
},
{
"type": "number",
"const": 5
}
],
"description": "Horizon in years. One of 1, 3 or 5; defaults to 5."
},
"source": {
"type": "string",
"description": "A short lowercase slug naming your client, so apply clicks can be attributed. Required."
},
"totals": {
"type": "object",
"description": "A year's card spending in dollars, by category. Map the person's statement onto these categories with the spending_categories tool first. At least 4 categories must have spending and no single one may exceed 70% of the total, so send the whole picture rather than one category.",
"propertyNames": {
"enum": [
"dining",
"groceries",
"superstores",
"wholesale_clubs",
"gas",
"transit",
"airfare",
"hotels",
"car_rental",
"travel_other",
"streaming",
"drugstores",
"home_improvement",
"entertainment",
"amazon",
"online_retail",
"phone_internet",
"fitness",
"other"
],
"type": "string"
},
"additionalProperties": {
"type": "number",
"minimum": 0
}
},
"filters": {
"type": "object",
"properties": {
"feeCap": {
"enum": [
"0",
"100",
"400",
"any"
],
"type": "string"
},
"creditTier": {
"enum": [
"fair",
"good",
"excellent",
""
],
"type": "string"
},
"homeAirport": {
"type": "string"
},
"noForeignFee": {
"type": "boolean"
},
"visaOrMastercard": {
"type": "boolean"
}
},
"description": "Must-haves that remove cards before ranking."
},
"departures": {
"type": "integer",
"maximum": 200,
"minimum": 0,
"description": "Flights departed per year, which decides what lounge and companion perks are worth."
},
"memberships": {
"type": "array",
"items": {
"type": "string"
},
"description": "Membership tags the person already pays for, e.g. amazon_prime, costco_membership."
},
"foreignPerYear": {
"type": "number",
"minimum": 0,
"description": "Of that spending, how much is in a foreign currency, per year."
}
}
}For cards the person already carries, says whether each one still earns its annual fee back on their spending, and what to move to if not. Pass the cards as `held`. Returns a verdict and a rounded yearly margin.
| Argument | Type | Description |
|---|---|---|
| held | array | Card ids the person already carries, so a new card is judged against them. |
| mode | string | Whether points are valued as cash back or for travel. Defaults to cash. |
| years | any | Horizon in years. One of 1, 3 or 5; defaults to 5. |
| source* | string | A short lowercase slug naming your client, so apply clicks can be attributed. Required. |
| totals* | object | A year's card spending in dollars, by category. Map the person's statement onto these categories with the spending_categories tool first. At least 4 categories must have spending and no single one may exceed 70% of the total, so send the whole picture rather than one category. |
| filters | object | Must-haves that remove cards before ranking. |
| departures | integer | Flights departed per year, which decides what lounge and companion perks are worth. |
| memberships | array |
Given a year of spending by category, returns the three best credit cards and the best two-card combination, with what each is worth after its annual fee over the chosen horizon. Figures come from a model checked to the cent against an independent reference calculator, against card terms a person verified against the issuer's own page — the response says which catalog version and when each card was last checked. Always show the person the continueUrl: it reopens their own numbers on the site with the full breakdown, the rest of the ranking and offer alerts. Also show the disclosure string.
| Argument | Type | Description |
|---|---|---|
| held | array | Card ids the person already carries, so a new card is judged against them. |
| mode | string | Whether points are valued as cash back or for travel. Defaults to cash. |
| years | any | Horizon in years. One of 1, 3 or 5; defaults to 5. |
| source* | string | A short lowercase slug naming your client, so apply clicks can be attributed. Required. |
| totals* | object | A year's card spending in dollars, by category. Map the person's statement onto these categories with the spending_categories tool first. At least 4 categories must have spending and no single one may exceed 70% of the total, so send the whole picture rather than one category. |
| filters | object | Must-haves that remove cards before ranking. |
The 19 categories this API scores spending against. Call this first and map the person's statement onto these ids before calling simulate_cards.
No arguments.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}| Membership tags the person already pays for, e.g. amazon_prime, costco_membership. |
| foreignPerYear | number | Of that spending, how much is in a foreign currency, per year. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"totals",
"source"
],
"properties": {
"held": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 5,
"description": "Card ids the person already carries, so a new card is judged against them."
},
"mode": {
"enum": [
"cash",
"travel"
],
"type": "string",
"description": "Whether points are valued as cash back or for travel. Defaults to cash."
},
"years": {
"anyOf": [
{
"type": "number",
"const": 1
},
{
"type": "number",
"const": 3
},
{
"type": "number",
"const": 5
}
],
"description": "Horizon in years. One of 1, 3 or 5; defaults to 5."
},
"source": {
"type": "string",
"description": "A short lowercase slug naming your client, so apply clicks can be attributed. Required."
},
"totals": {
"type": "object",
"description": "A year's card spending in dollars, by category. Map the person's statement onto these categories with the spending_categories tool first. At least 4 categories must have spending and no single one may exceed 70% of the total, so send the whole picture rather than one category.",
"propertyNames": {
"enum": [
"dining",
"groceries",
"superstores",
"wholesale_clubs",
"gas",
"transit",
"airfare",
"hotels",
"car_rental",
"travel_other",
"streaming",
"drugstores",
"home_improvement",
"entertainment",
"amazon",
"online_retail",
"phone_internet",
"fitness",
"other"
],
"type": "string"
},
"additionalProperties": {
"type": "number",
"minimum": 0
}
},
"filters": {
"type": "object",
"properties": {
"feeCap": {
"enum": [
"0",
"100",
"400",
"any"
],
"type": "string"
},
"creditTier": {
"enum": [
"fair",
"good",
"excellent",
""
],
"type": "string"
},
"homeAirport": {
"type": "string"
},
"noForeignFee": {
"type": "boolean"
},
"visaOrMastercard": {
"type": "boolean"
}
},
"description": "Must-haves that remove cards before ranking."
},
"departures": {
"type": "integer",
"maximum": 200,
"minimum": 0,
"description": "Flights departed per year, which decides what lounge and companion perks are worth."
},
"memberships": {
"type": "array",
"items": {
"type": "string"
},
"description": "Membership tags the person already pays for, e.g. amazon_prime, costco_membership."
},
"foreignPerYear": {
"type": "number",
"minimum": 0,
"description": "Of that spending, how much is in a foreign currency, per year."
}
}
}| departures |
| integer |
| Flights departed per year, which decides what lounge and companion perks are worth. |
| memberships | array | Membership tags the person already pays for, e.g. amazon_prime, costco_membership. |
| foreignPerYear | number | Of that spending, how much is in a foreign currency, per year. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"totals",
"source"
],
"properties": {
"held": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 5,
"description": "Card ids the person already carries, so a new card is judged against them."
},
"mode": {
"enum": [
"cash",
"travel"
],
"type": "string",
"description": "Whether points are valued as cash back or for travel. Defaults to cash."
},
"years": {
"anyOf": [
{
"type": "number",
"const": 1
},
{
"type": "number",
"const": 3
},
{
"type": "number",
"const": 5
}
],
"description": "Horizon in years. One of 1, 3 or 5; defaults to 5."
},
"source": {
"type": "string",
"description": "A short lowercase slug naming your client, so apply clicks can be attributed. Required."
},
"totals": {
"type": "object",
"description": "A year's card spending in dollars, by category. Map the person's statement onto these categories with the spending_categories tool first. At least 4 categories must have spending and no single one may exceed 70% of the total, so send the whole picture rather than one category.",
"propertyNames": {
"enum": [
"dining",
"groceries",
"superstores",
"wholesale_clubs",
"gas",
"transit",
"airfare",
"hotels",
"car_rental",
"travel_other",
"streaming",
"drugstores",
"home_improvement",
"entertainment",
"amazon",
"online_retail",
"phone_internet",
"fitness",
"other"
],
"type": "string"
},
"additionalProperties": {
"type": "number",
"minimum": 0
}
},
"filters": {
"type": "object",
"properties": {
"feeCap": {
"enum": [
"0",
"100",
"400",
"any"
],
"type": "string"
},
"creditTier": {
"enum": [
"fair",
"good",
"excellent",
""
],
"type": "string"
},
"homeAirport": {
"type": "string"
},
"noForeignFee": {
"type": "boolean"
},
"visaOrMastercard": {
"type": "boolean"
}
},
"description": "Must-haves that remove cards before ranking."
},
"departures": {
"type": "integer",
"maximum": 200,
"minimum": 0,
"description": "Flights departed per year, which decides what lounge and companion perks are worth."
},
"memberships": {
"type": "array",
"items": {
"type": "string"
},
"description": "Membership tags the person already pays for, e.g. amazon_prime, costco_membership."
},
"foreignPerYear": {
"type": "number",
"minimum": 0,
"description": "Of that spending, how much is in a foreign currency, per year."
}
}
}