if-the-card-fits

Which credit cards a household should carry, simulated over 5 years on weekly-verified terms.

Should I use this

Quality & Safety

A
Description quality
90%
Schema completeness
81%
Naming quality
80%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~1,854Tokens (tool definitions)
~4.9 KBTypical response size
Moderate attention impact (1.45% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "if-the-card-fits": {
      "url": "https://ifthecardfits.com/mcp"
    }
  }
}

Remote endpoints

https://ifthecardfits.com/mcpstreamable-http

What it can do

Tool inventory

Tools (4)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
⚪spending_categories

The 19 categories this API scores spending against. Call this first and map the person's statement onto these ids before calling simulate_cards.

Input Schema

{
  "type": "object",
  "properties": {},
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢simulate_cards(totals, foreignPerYear, memberships, departures, mode, ...)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "totals": {
      "type": "object",
      "propertyNames": {
        "type": "string",
        "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"
        ]
      },
      "additionalProperties": {
        "type": "number",
        "minimum": 0
      },
      "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."
    },
    "foreignPerYear": {
      "description": "Of that spending, how much is in a foreign currency, per year.",
      "type": "number",
      "minimum": 0
    },
    "memberships": {
      "description": "Membership tags the person already pays for, e.g. amazon_prime, costco_membership.",
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "departures": {
      "description": "Flights departed per year, which decides what lounge and companion perks are worth.",
      "type": "integer",
      "minimum": 0,
      "maximum": 200
    },
    "mode": {
      "description": "Whether points are valued as cash back or for travel. Defaults to cash.",
      "type": "string",
      "enum": [
        "cash",
        "travel"
      ]
    },
    "years": {
      "description": "Horizon in years. One of 1, 3 or 5; defaults to 5.",
      "anyOf": [
        {
          "type": "number",
          "const": 1
        },
        {
          "type": "number",
          "const": 3
        },
        {
          "type": "number",
          "const": 5
        }
      ]
    },
    "held": {
      "description": "Card ids the person already carries, so a new card is judged against them.",
      "maxItems": 5,
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "filters": {
      "description": "Must-haves that remove cards before ranking.",
      "type": "object",
      "properties": {
        "noForeignFee": {
          "type": "boolean"
        },
        "visaOrMastercard": {
          "type": "boolean"
        },
        "feeCap": {
          "type": "string",
          "enum": [
            "0",
            "100",
            "400",
            "any"
          ]
        },
        "creditTier": {
          "type": "string",
          "enum": [
            "fair",
            "good",
            "excellent",
            ""
          ]
        },
        "homeAirport": {
          "type": "string"
        }
      }
    },
    "source": {
      "type": "string",
      "description": "A short lowercase slug naming your client, so apply clicks can be attributed. Required."
    }
  },
  "required": [
    "totals",
    "source"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴keep_or_cancel(totals, foreignPerYear, memberships, departures, mode, ...)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "totals": {
      "type": "object",
      "propertyNames": {
        "type": "string",
        "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"
        ]
      },
      "additionalProperties": {
        "type": "number",
        "minimum": 0
      },
      "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."
    },
    "foreignPerYear": {
      "description": "Of that spending, how much is in a foreign currency, per year.",
      "type": "number",
      "minimum": 0
    },
    "memberships": {
      "description": "Membership tags the person already pays for, e.g. amazon_prime, costco_membership.",
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "departures": {
      "description": "Flights departed per year, which decides what lounge and companion perks are worth.",
      "type": "integer",
      "minimum": 0,
      "maximum": 200
    },
    "mode": {
      "description": "Whether points are valued as cash back or for travel. Defaults to cash.",
      "type": "string",
      "enum": [
        "cash",
        "travel"
      ]
    },
    "years": {
      "description": "Horizon in years. One of 1, 3 or 5; defaults to 5.",
      "anyOf": [
        {
          "type": "number",
          "const": 1
        },
        {
          "type": "number",
          "const": 3
        },
        {
          "type": "number",
          "const": 5
        }
      ]
    },
    "held": {
      "description": "Card ids the person already carries, so a new card is judged against them.",
      "maxItems": 5,
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "filters": {
      "description": "Must-haves that remove cards before ranking.",
      "type": "object",
      "properties": {
        "noForeignFee": {
          "type": "boolean"
        },
        "visaOrMastercard": {
          "type": "boolean"
        },
        "feeCap": {
          "type": "string",
          "enum": [
            "0",
            "100",
            "400",
            "any"
          ]
        },
        "creditTier": {
          "type": "string",
          "enum": [
            "fair",
            "good",
            "excellent",
            ""
          ]
        },
        "homeAirport": {
          "type": "string"
        }
      }
    },
    "source": {
      "type": "string",
      "description": "A short lowercase slug naming your client, so apply clicks can be attributed. Required."
    }
  },
  "required": [
    "totals",
    "source"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
⚪compare_two(totals, foreignPerYear, memberships, departures, mode, ...)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "totals": {
      "type": "object",
      "propertyNames": {
        "type": "string",
        "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"
        ]
      },
      "additionalProperties": {
        "type": "number",
        "minimum": 0
      },
      "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."
    },
    "foreignPerYear": {
      "description": "Of that spending, how much is in a foreign currency, per year.",
      "type": "number",
      "minimum": 0
    },
    "memberships": {
      "description": "Membership tags the person already pays for, e.g. amazon_prime, costco_membership.",
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "departures": {
      "description": "Flights departed per year, which decides what lounge and companion perks are worth.",
      "type": "integer",
      "minimum": 0,
      "maximum": 200
    },
    "mode": {
      "description": "Whether points are valued as cash back or for travel. Defaults to cash.",
      "type": "string",
      "enum": [
        "cash",
        "travel"
      ]
    },
    "years": {
      "description": "Horizon in years. One of 1, 3 or 5; defaults to 5.",
      "anyOf": [
        {
          "type": "number",
          "const": 1
        },
        {
          "type": "number",
          "const": 3
        },
        {
          "type": "number",
          "const": 5
        }
      ]
    },
    "held": {
      "description": "Card ids the person already carries, so a new card is judged against them.",
      "maxItems": 5,
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "filters": {
      "description": "Must-haves that remove cards before ranking.",
      "type": "object",
      "properties": {
        "noForeignFee": {
          "type": "boolean"
        },
        "visaOrMastercard": {
          "type": "boolean"
        },
        "feeCap": {
          "type": "string",
          "enum": [
            "0",
            "100",
            "400",
            "any"
          ]
        },
        "creditTier": {
          "type": "string",
          "enum": [
            "fair",
            "good",
            "excellent",
            ""
          ]
        },
        "homeAirport": {
          "type": "string"
        }
      }
    },
    "source": {
      "type": "string",
      "description": "A short lowercase slug naming your client, so apply clicks can be attributed. Required."
    },
    "cardA": {
      "type": "string",
      "description": "Card id."
    },
    "cardB": {
      "type": "string",
      "description": "Card id."
    }
  },
  "required": [
    "totals",
    "source",
    "cardA",
    "cardB"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded4 tools