rightcard-mcp
RightCard MCP helps agents pick the best credit card for a purchase using verified, two-source reward data.
best_card: Given card IDs and a store or category, returns which card earns the most today, with honest rates and caveats (merchant-code traps, rotating activation, ties).
lookup_merchant: Look up how a store is categorized and whether category bonuses usually won't post there (e.g., Costco, Walmart).
search_cards: Find credit card IDs by card or issuer name, with verified cards first and unverified cards flagged.
card: Get one card's verified earning rates, base rate, annual fee, rotating windows, and choose-your-category configuration.
rotating_calendar: See live and upcoming rotating 5% category windows and permanent merchant benefits, optionally filtered by card.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@rightcard-mcpI have Amex Gold, Freedom Flex and Citi Double Cash. Which card earns most at Costco?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
RightCard MCP
The card-selection oracle for agents: which of your credit cards should pay here? Answers come from RightCard's bank-published, two-source-verified reward data — the same data the RightCard iOS app uses.
No bank login. No account. Nothing stored. You pass card ids and a store name; you get an answer.
Honest by construction: merchant-code caveats (Costco is a warehouse club, so the grocery bonus won't post), rotating quarters with activation flags, ties named, points valued per program.
Cash value by default;
valuation: "points"for conservative travel values.
Use it
Hosted (stateless Streamable HTTP):
https://mcp.rightcard.ai/mcpLocal (stdio, nothing leaves your machine except a read of the public catalog):
npx rightcard-mcpClaude Desktop / Claude Code / Cursor config:
{ "mcpServers": { "rightcard": { "command": "npx", "args": ["-y", "rightcard-mcp"] } } }Related MCP server: Blackwell Bank Card Hub MCP
Tools
tool | what it answers |
| which of the given cards earns most at a store or category, today, with caveats |
| how a store is coded (category, merchant type, MCC-trap caveat) |
| find card ids by name/issuer; verified first, unverified flagged |
| one card's verified rates, rotating windows, choose-your-category spec |
| live + upcoming rotating windows and permanent merchant benefits |
Try: "I have the Amex Gold, Freedom Flex and Citi Double Cash. Which one at Costco?"
Parity with the app
src/engine.ts is a port of the iOS app's Swift engine. fixtures/engine_golden.json holds
3,100+ answers produced by the Swift code over the real catalog and merchant directory;
npm test fails if the port disagrees on any of them. Offers (a user's personal bank offers)
are deliberately not part of this server — they live on the phone.
Privacy
The hosted server logs request counts only. No identifiers, no cookies, no storage. Full policy: https://rightcard.ai/privacy
Available Tools
5 toolsbest_cardBest card for a store or categoryAInspect
Which of the given cards earns the most at a store (merchant) or for a spend category, today. Returns the card, the honest rate, why, and caveats (merchant-code traps, activation, ties). Base rates + rotating bonuses + built-in card benefits only; a user's personal bank offers live on their phone and are not consulted here.
| Name | Required | Description | Default |
|---|---|---|---|
| on | No | Date (YYYY-MM-DD, UTC) for rotating windows; defaults to today. | |
| wallet | Yes | Card ids the person holds (from search_cards). | |
| category | No | Spend category when there is no specific store. | |
| merchant | No | Store name, e.g. 'Costco', 'Whole Foods', 'Uber'. Use this OR category. | |
| valuation | No | 'cash' counts every point at 1¢ (default). 'points' values points per program at conservative travel values. | cash |
| chosen_categories | No | For choose-your-category cards (Citi Custom Cash, BofA Customized, Venmo): card id → the categories the person set. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states the output: the card, the honest rate, why, and caveats including merchant-code traps, activation, and ties. It also discloses what data sources are included and excluded. It does not describe the exact return envelope or edge-case behavior, but it provides substantial behavioral context for a query-style tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three tight sentences with zero filler. The core purpose is front-loaded in sentence one, return contents and caveats in sentence two, and exclusions in sentence three. Every sentence earns its place and nothing repeats schema content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given six parameters, nested objects, no output schema, and no annotations, the description covers purpose, returned contents, caveat types, and scope exclusions. The schema covers parameter formats and enums. The main gaps are that the exact response structure is unspecified and the conflict behavior when both merchant and category are supplied is left implicit, but the combined description and schema are sufficient for a competent agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all six parameters including wallet, merchant/category, on, valuation, and chosen_categories. The description reinforces the merchant-vs-category idea and 'given cards' from wallet, but adds little semantic detail beyond what the schema provides. This matches the baseline-3 case where structured schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a concrete question: 'Which of the given cards earns the most at a store (merchant) or for a spend category, today.' It specifies the verb (compare/rank), the resource (given cards), and the scope (store or category). It also distinguishes itself from siblings like search_cards and lookup_merchant by focusing on selecting the best earn rate rather than retrieving card data or merchant metadata.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly bounds when the tool is valid: it only considers base rates, rotating bonuses, and built-in card benefits, and explicitly says personal bank offers are not consulted. This implicitly tells an agent not to use it when a user's personalized banking offers are in play. However, it never names sibling tools or states when to prefer them, so the guidance is strong on scope but not fully explicit on alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cardA card's verified ratesBInspect
Everything RightCard knows about one card: rates by category, base rate, currency, annual fee, verification status, live rotating windows, and the choose-your-category spec if it has one.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It transparently lists the returned content categories, which helps set expectations, but it doesn't disclose what happens for unknown card IDs, whether the data is read-only, or how verification/live windows behave. It's reasonable but not fully transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence with a clear subject and a colon-delimited list of covered data points. It front-loads the core purpose and wastes no words, though the list is somewhat long.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter lookup tool with no output schema, the description covers the main information an agent needs: the input is a card id and the output is the full card knowledge. The lack of usage guidance and handling of edge cases prevents a perfect score, but the core invocation context is clear.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has a single id parameter with no description (0% coverage), so the description must compensate. It implies id identifies a card ('about one card'), but it doesn't clarify the id format, source, or behavior for invalid ids. The description adds minimal meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource (one card) and the tool's purpose: returning all known card data including rates, fees, and rotating windows. It doesn't explicitly distinguish itself from siblings like best_card or search_cards, but its focus on a single card's full data profile is sufficiently distinct for an agent to infer its role.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus its siblings. It doesn't mention search_cards for finding cards, best_card for ranking cards, or rotating_calendar for rotating windows, leaving the agent to infer the appropriate context from the resource name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lookup_merchantHow a store is codedBInspect
The store's reward category as RightCard's directory files it, its merchant type, and the merchant-code caveat when a category bonus usually will not post there (superstores like Walmart/Target, warehouse clubs like Costco/Sam's). Same ranking the app uses.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral burden. It does disclose useful context: the data is 'as RightCard's directory files it' and uses 'the same ranking the app uses,' plus a caveat about stores like Walmart/Target and Costco/Sam's. However, it does not describe matching behavior, response shape, or failure handling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded with the core output fields. The caveat and examples are useful and add clarity without bloat. The title is somewhat redundant but does not harm the overall structure.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter lookup with no output schema or annotations, the description covers the main return data and an important edge-case caveat. However, it omits practical invocation details such as how the store name should be provided, whether matching is exact or fuzzy, and what happens for unknown stores. This leaves an agent with some reasonable but not fully certain ground.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has one parameter, 'name', with 0% description coverage, so the description must compensate. It implies the input is a store name by saying 'The store's...' and giving examples like Walmart/Target, but it never explicitly says 'pass the store name' or describes acceptable formats. This is only partial compensation for the missing schema documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states what information the tool provides: the store's reward category, merchant type, and merchant-code caveat. It is not a tautology and the resource (store merchant coding) is evident. However, it does not explicitly differentiate itself from sibling tools like search_cards or best_card.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies that the tool is used to look up a store's coding details, but it gives no explicit guidance on when to choose this tool over alternatives. There is no mention of exclusions, prerequisites, or comparison with sibling tools. The agent must infer usage entirely from the tool name and title.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rotating_calendarRotating 5% windowsAInspect
Live and upcoming rotating-category windows (Freedom Flex, Discover it, Citi Dividend…) and permanent merchant benefits, from the same verified data as the app. Optionally filter by card id.
| Name | Required | Description | Default |
|---|---|---|---|
| card_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It usefully states the data is live/upcoming, permanent, and from the same verified data as the app, implying a read-only lookup. However, it does not mention output format, authentication needs, or limitations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one tight sentence that front-loads the main content, gives illustrative examples, and adds a credibility note about verified data. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with one optional parameter and no output schema, the description provides enough scope for an agent to call it correctly. Minor gaps remain around expected return structure and date formatting, but the tool's low complexity keeps these from being critical.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides zero description for card_id, so the description must compensate. It does so by explicitly stating the parameter is an optional filter, which is the core semantic needed. It does not define what a card id looks like or where to obtain one, but the single optional parameter makes this adequate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource: live/upcoming rotating-category windows and permanent merchant benefits, with concrete card examples. It lacks an explicit verb like 'list' or 'retrieve,' but the intent is unambiguous from the content.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool versus siblings like lookup_merchant or search_cards. The phrase 'Optionally filter by card id' addresses parameter usage, not tool selection, so the agent gets no routing help.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_cardsFind card idsAInspect
Search RightCard's catalog by card or issuer name to get the ids to pass into best_card. Verified cards first; unverified cards are flagged, never hidden.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes | ||
| issuer | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden. It adds meaningful behavior: verified cards are ordered first, unverified cards are flagged rather than removed. This goes beyond the schema and gives the agent useful expectations about result ordering and filtering policy.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler. The first sentence states the core function and purpose; the second adds a concise but important behavioral rule. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple 3-parameter search tool, the description covers purpose, search scope, result ordering, and the intended use of the output ids. It doesn't describe exact return shape, but 'get the ids' sufficiently conveys the output for this context, especially given the minimal parameter schema and no nested objects.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It clarifies that searching can be done by card or issuer name and that returned ids are intended for best_card, which adds meaning to query/issuer. However, it does not explain the limit parameter or fully disambiguate which parameter handles card vs issuer names, leaving a partial gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Search'), a clear resource ('RightCard's catalog'), and the downstream purpose ('to get the ids to pass into best_card'). This makes the tool's role obvious and distinguishes it from best_card, which consumes those ids.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly implies when to use this tool (before best_card, to resolve card/issuer names to ids), and it gives concrete search criteria. It doesn't explicitly contrast sibling tools or state when not to use it, but the context is strong enough for an agent to route correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
5 tool updates
v0.1.0- First observed
best_card - First observed
card - First observed
lookup_merchant - First observed
rotating_calendar - First observed
search_cards
TDQS
Scored across 5 tools
Each tool has a clear, distinct purpose: best_card compares cards, lookup_merchant provides merchant category info, search_cards finds card IDs, card gives detailed card data, and rotating_calendar lists rotating offers. There is no overlap or ambiguity between them.
All tool names use snake_case and are readable. Most follow verb_noun pattern (lookup_merchant, search_cards) but 'card' and 'rotating_calendar' differ slightly; still, the style is consistent and predictable.
With 5 tools, the server is well-scoped for its purpose of card rewards recommendations. Each tool is necessary and not redundant, fitting comfortably in the ideal 3-15 range.
The domain of finding the best card for a merchant or category is fully covered: search for cards, retrieve card details, check merchant categories, compare cards, and consult rotating offers. There are no obvious missing operations for this specific use case.
Maintenance
Related MCP Connectors
Search, compare and estimate rewards across US credit cards. Verified fees, APRs and bonuses.
AI credit card advisor - search cards, compare portfolios, and optimize rewards
Miles' public credit-card catalog: facts, transfer partners, valuations. Keyless, read-only.
Search live credit card merchant offers across Amex, Chase, Citi, PayPal, Rakuten, Capital One.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceProvides tools to fetch and analyze credit card data with filtering options for banks, categories, and user personas. It also offers access to educational guides to assist in making informed financial recommendations.-
- FlicenseNot gradedqualityDmaintenanceEnables users to explore and manage banking card features including product discovery, comparison, eligibility checks, spend insights, merchant offers, travel notices, card controls, and digital wallet provisioning.-
- FlicenseNot gradedqualityDmaintenanceEnables searching and comparing live credit card merchant offers (cash back, points, statement credits) across Amex, Chase, Citi, PayPal, Rakuten, and Capital One from any AI agent.-

CatalogAPI MCP Serverofficial
AlicenseNot gradedqualityCmaintenanceProvides read-only access to the CatalogAPI global rewards and gift card API, enabling assistants to answer questions about reward coverage, catalog contents, and integration via live data.MIT