Open-source B2B and marketplace ecommerce; new stores include an MCP server for AI agents.
earnrate
Overview
Description from the maker (original English)
Which credit card earns the most at a merchant, from your cards or every card, and why.
PopNx MCP’s three pillars
These three are never merged into one score: opinions, measurements and popularity are different things.
- User voiceiNo reviews yetReviews open together with accounts in a later step
- Our basic checksi3 of 3 passedChecked from public information; code not scanned yet
- UsageiNot measured yet★ –
What you can do with it
We have not written a plain-language summary for this one yet. Below are the facts we read from the registry.
- Connection: Computer or cloud
- Transport: stdio, Streamable HTTP
- Category: Online shops & payments
- You need to fill in: ANTHROPIC_API_KEY
Install
Pick the AI app you use, then copy the settings.
Before you install
- Basic checks: 3 of 3 passed
- Runs on the maker’s server: what you ask it goes through their server.
- You fill in yourself:
EARNRATE_WALLET,EARNRATE_LLM,EARNRATE_LLM_MODEL,EARNRATE_LLM_MAX_CALLS,EARNRATE_MERCHANT_CACHE,EARNRATE_MISSED_MERCHANTS,ANTHROPIC_API_KEY
Values marked secret are keys to your account. Never share them or paste them into a chat.
You need
- Runs in the cloudNothing to install; it connects over the internet
- npmNode.js installed (for the npx command)
Which app do you use?
Pick your app above. We remember it, so next time the button says “Install in …”.
Works in Claude on the web, desktop and mobile:
- Open Settings → Connectors
- Press Add custom connector
- Paste the address below and press Add
- If it asks you to sign in, sign in with the maker
https://mcp.earnrate.devOr run it on your computer
Open Claude Desktop → Settings → Developer → Edit Config, and paste this into claude_desktop_config.json
{
"mcpServers": {
"earnrate": {
"command": "npx",
"args": [
"-y",
"earnrate",
"mcp"
],
"env": {
"EARNRATE_WALLET": "your-value",
"EARNRATE_LLM": "your-value",
"EARNRATE_LLM_MODEL": "your-value",
"EARNRATE_LLM_MAX_CALLS": "your-value",
"EARNRATE_MERCHANT_CACHE": "your-value",
"EARNRATE_MISSED_MERCHANTS": "your-value",
"ANTHROPIC_API_KEY": "your-value"
}
}
}
}Run this in your terminal
claude mcp add --transport http earnrate https://mcp.earnrate.devOr run it on your computer
claude mcp add earnrate --env EARNRATE_WALLET=your-value --env EARNRATE_LLM=your-value --env EARNRATE_LLM_MODEL=your-value --env EARNRATE_LLM_MAX_CALLS=your-value --env EARNRATE_MERCHANT_CACHE=your-value --env EARNRATE_MISSED_MERCHANTS=your-value --env ANTHROPIC_API_KEY=your-value -- npx -y earnrate mcpFill in the empty values before running it.
Or copy the settings yourself
Paste into .cursor/mcp.json in your project, or ~/.cursor/mcp.json
{
"mcpServers": {
"earnrate": {
"url": "https://mcp.earnrate.dev"
}
}
}Or run it on your computer
Or copy the settings yourself
Paste into .cursor/mcp.json in your project, or ~/.cursor/mcp.json
{
"mcpServers": {
"earnrate": {
"command": "npx",
"args": [
"-y",
"earnrate",
"mcp"
],
"env": {
"EARNRATE_WALLET": "your-value",
"EARNRATE_LLM": "your-value",
"EARNRATE_LLM_MODEL": "your-value",
"EARNRATE_LLM_MAX_CALLS": "your-value",
"EARNRATE_MERCHANT_CACHE": "your-value",
"EARNRATE_MISSED_MERCHANTS": "your-value",
"ANTHROPIC_API_KEY": "your-value"
}
}
}
}Your browser asks to open the app, then the app shows the settings and asks you to confirm. Key values are left empty for you to fill in.
Or copy the settings yourself
Paste into .vscode/mcp.json in your project
{
"servers": {
"earnrate": {
"type": "http",
"url": "https://mcp.earnrate.dev"
}
}
}Or run it on your computer
Or copy the settings yourself
Paste into .vscode/mcp.json in your project
{
"servers": {
"earnrate": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"earnrate",
"mcp"
],
"env": {
"EARNRATE_WALLET": "your-value",
"EARNRATE_LLM": "your-value",
"EARNRATE_LLM_MODEL": "your-value",
"EARNRATE_LLM_MAX_CALLS": "your-value",
"EARNRATE_MERCHANT_CACHE": "your-value",
"EARNRATE_MISSED_MERCHANTS": "your-value",
"ANTHROPIC_API_KEY": "your-value"
}
}
}
}Your browser asks to open the app, then the app shows the settings and asks you to confirm. Key values are left empty for you to fill in.
ChatGPT connects only to servers on the internet:
- Open ChatGPT on the web → Settings → Connectors (Apps)
- Press Create or Add (some plans need Developer mode under Advanced first)
- Paste the address below, give it a name and save
- If it asks you to sign in, sign in with the maker
https://mcp.earnrate.devMenu names can differ slightly by plan and over time.
Your choice stays on this device in a cookie; no account needed.
Values you fill in
EARNRATE_WALLETenvPath to your wallet file. Default: ~/.earnrate/wallet.yamlEARNRATE_LLMenvSet to on to let Claude classify merchants earnrate doesn't know. Off by default.EARNRATE_LLM_MODELenvThe Claude model for merchant lookups, when EARNRATE_LLM is on.EARNRATE_LLM_MAX_CALLSenvMost Claude merchant lookups per session, when EARNRATE_LLM is on.EARNRATE_MERCHANT_CACHEenvWhere Claude's merchant answers are saved. Default: ~/.earnrate/merchant-cache.jsonEARNRATE_MISSED_MERCHANTSenvWhere stores earnrate didn't recognize are listed. Default: ~/.earnrate/missed-merchants.json; off keeps no list.- Your own Anthropic key, used only when EARNRATE_LLM is on.
These settings are generated from the maker’s registry entry. If the README says otherwise, follow the README.
What it can do
The server asks you to sign in before it lists its tools.
Basic checksi
We check information anyone can see; we have not read the code. Checks that do not apply are left out of the count. · Checked Nov 7, 2026
- ✓ Pass
Maker matches the repo
The registry name was verified with the GitHub account cwasley, which owns the repo
- … Not checked yet
Still maintained
We have not read this repo from GitHub yet
- … Not checked yet
Has a licence
We have not read this repo from GitHub yet
- ✓ Pass
Endpoint responds
Responded in 139 ms (HTTP 401)
- ✓ Pass
Sign-in with OAuth
Declares OAuth sign-in, so your AI app can take you to log in
- … Not checked yet
No hidden instructions in tool descriptions
Not checked yet; we read the tool list when we check the endpoint
Compared with others in Online shops & paymentsi
- More stars than 0% of the other 1753 servers in this category
- Published to the registry more recently than 100% of the other 1753 servers in this category
- Basic checks equal to or better than 100% of the other 1753 servers in this category
Compared with every active server in this category in the registry. Stars count only when the publisher owns the repo.
Common questions
Is earnrate safe?
It passed 3 of 3 applicable basic checks. We have not read the code. Before adding a key or token, see what access the server asks for and use a key with only the permissions you need.
What keys or codes does it need?
You need to fill in: ANTHROPIC_API_KEY
Does it run on my computer or in the cloud?
Either way works: install it on your computer or connect to the cloud version.
Is it still maintained?
The GitHub repo last changed –, and the latest version (0.2.16) reached the registry today.
Which apps can use it?
Apps that support MCP, such as Claude Desktop, Claude Code, Cursor and VS Code. It connects by URL, so apps that accept remote MCP servers work too, such as ChatGPT in developer mode.
What can I use instead?
In the same category: Spree Commerce: open-source B2B and marketplace ecommerce, Stripe MCP, MCP Cn Commerce
Alternatives
Servers in the same category from other makers, sorted by stars.
Reading a card:★ GitHub starsiThree pillars: reviews · checks · usageiUpdated = latest version published to the registryi
Stripe MCP
Stripe’s official server lets AI view and manage customers, products, payments and invoices. Connect to Stripe’s cloud and sign in with OAuth.
MCP Cn Commerce
8 read-only MCP platform entries; support is operation-specific; merchant live acceptance pending
README from the maker
Open the README
Copied from the maker’s repo as written. PopNx MCP has not reviewed or endorsed it. HTML, images and scripts are removed. Links lead off this site.
earnrate
I wanted a ghost card: one card that always charges the best of my cards. The card networks won't allow one, so I built the next best thing.
earnrate is the best-card decision layer for people and AI agents. Give it a merchant, and it tells you which credit card earns the most there, from your own cards or from every card it knows, and why. Save your cards and it tracks your caps and chosen categories. It's valuation-aware and transparent about its assumptions. It never sees a card number.
- Runs on your machine, in your browser at earnrate.dev (which you can add to your phone's Home Screen and use offline), or in Claude as a connector at
https://mcp.earnrate.dev, with nothing to install. No account and no affiliate links; the hosted server counts requests by tool name, nothing about what you ask. See the privacy page. - U.S. cards and U.S. merchants, for now.
Status: early, and it works: the engine, CLI, optional Claude merchant lookup, MCP server and the hosted Claude connector. See the benchmark (run 2026-11-03) for how it compares to an existing card-picking MCP server.
Try it
Needs Node 22 or later.
npm install -g earnrate
earnrate restaurants # the best cards earnrate knows, no setup earnrate trader joes --cards amex-gold,chase-prime-visa # just these cards earnrate whole foods 80 # add an amount to see the dollars back
You never have to enter your cards: with none, every answer covers every card earnrate knows. To have earnrate remember yours, track caps and welcome bonuses, and give a cheat sheet for your own wallet, save them:
earnrate cards sapphire # find your cards' IDs
earnrate add chase-sapphire-preferred earnrate add amex-gold earnrate whole foods 80
Adding a card tells you anything else it needs to earn correctly, such as the categories you picked on Cash+, Amazon Prime for Prime Visa's 5%, or which rotating categories you've activated. earnrate update and earnrate memberships set those. Memberships and point values (earnrate values) can be saved without any cards, and every answer uses them. Using an AI assistant instead? Add earnrate to it and ask; name your cards or save them there.
With the example wallet, it prints:
Whole Foods Market · $80
Use Blue Cash Preferred: 6% back, about $4.80. High confidence.
- Blue Cash Preferred 6% $4.80 6% cash back on supermarkets. ...
- Prime Visa 5% $4.00 5% cash back on Whole Foods Market, with Amazon Prime. ...
- Amex Gold 4% $3.20 4x Amex Membership Rewards on supermarkets. ... Valued at 1¢ per point: 4% back.
- 6 more cards (--all lists them)
Amex Gold beats Blue Cash Preferred here if Amex Membership Rewards (MR) points are worth more than 1.5¢ (you value them at 1¢).
Assumes Whole Foods Market codes as supermarkets (MCC 5411). Values points at: Amex Membership Rewards (MR) at 1¢, SoFi Member Rewards at 1¢, Chase Ultimate Rewards (UR) at 1¢.
Options: --online or --in-store, --valuation flat|points-heavy, --all, --json, --date, --country. Run earnrate --help for details. To keep the wallet somewhere else, set EARNRATE_WALLET to its path.
earnrate cheatsheet prints the card to use for each everyday kind of purchase this quarter (groceries, dining, gas, Amazon, Costco, travel, streaming, drugstores, everything else), with your caps, picks and activations as they are now. --cards uses cards you name instead, and --every-card picks from every card to show what's worth getting. It's also in the My wallet tab on earnrate.dev.
earnrate todo lists what your saved cards need this quarter, soonest first: bonuses to activate (with Chase's deadline), categories to pick, caps running low and welcome bonuses to finish. --ics earnrate.ics also writes the dates as a calendar file with reminders. My wallet on earnrate.dev shows the same list as "To do now", with an "Add the dates to your calendar" button.
earnrate missed lists the stores earnrate didn't recognize when you asked here, most asked about first. They're kept only on your computer; open an issue to suggest one for the data.
Your wallet
The wallet is a YAML file (~/.earnrate/wallet.yaml) listing your cards by ID, which is each card's file name in data/cards/. earnrate add, update, remove, memberships and values write it for you and keep your comments, or you can edit it by hand. Only the cards are required:
version: 1 # the file's format; earnrate writes it
valuations: UR: 1.5 # cents per point; leave out to use earnrate's defaults memberships: [amazon-prime] # unlocks Prime Visa's 5% cards:
- id: chase-sapphire-preferred
- id: chase-prime-visa
- id: chase-freedom-flex activated: [q4-2026-grocery] # rotating 5% categories you've activated
- id: usbank-cash-plus chosen: # categories you picked for the quarter period: 2026-Q4 picks: five-percent: [tv-internet-streaming, movie-theaters] two-percent: [gas-ev-charging]
Rule IDs for activated and the choice slots for chosen are in each card's file; membership IDs (such as bofa-rewards-premier for a BofA Rewards tier) are in data/memberships.yaml, and earnrate memberships lists them. earnrate values UR=1.5 saves what a program's points are worth to you; every answer uses it. Add costco if you have a Costco membership: Costco Anywhere needs one, and spending answers count its $65 a year unless you have it, hold the card or spend at Costco. Currencies and their default values are in data/currencies.yaml. Spending caps fill up as you record purchases from an AI assistant or import a statement with --apply, and reset with each period.
Merchants earnrate doesn't know
earnrate ships with a curated list of merchants. For anything else it falls back to each card's base rate and says so. Pass --llm (or set EARNRATE_LLM=on) to have Claude guess the category instead:
- It uses your own
ANTHROPIC_API_KEYand sends only the merchant text you typed. Amounts, cards and wallet contents never leave your machine. - Each answer is saved in
~/.earnrate/merchant-cache.json, so a merchant is only looked up once. - The answer is labeled as Claude's guess, shows its reasoning, and is never higher than medium confidence.
- Curated merchants never reach Claude.
Welcome bonuses
When you're working toward a card's sign-up bonus, tell earnrate when the account opened:
earnrate update chase-sapphire-preferred --bonus-opened 2026-10-01 --bonus-spent 400
Or tell your AI assistant ("I opened my Sapphire Preferred on October 1"), or check "I'm working on this card's welcome bonus" in My wallet on earnrate.dev. --no-bonus stops tracking it. In the wallet file it looks like this:
- id: chase-sapphire-preferred
bonus: { opened: 2026-10-01, spend: 5000, by: 2026-12-31, points: 75000 }
While the bonus is open and you're behind an even pace to the deadline, that card wins wherever it's accepted, and the answer says how much is left, the weekly pace to finish on time, what the bonus is worth at your point values, and what using it costs compared with your best earner. On pace, it's the pick only where it earns as much as your best card, and it's mentioned where it comes within a point; otherwise your best card wins. Spend counts up as you record purchases from an AI assistant or import a statement with --apply; refunds count down. Once it's met or the deadline passes, the card goes back to the normal ranking. With two open bonuses, one behind pace comes first, then the one needing more spend per day.
spend, by and the reward (points, or dollars for cash back) default to the card's published offer once earnrate has one; set them when your offer was different.
First-year rates
Some cards earn more for a stretch after the account opens: Discover it Cash Back's Cashback Match doubles every rate for the first 365 days, and BofA Customized Cash pays 6% in its choice category for the first year. earnrate uses them only for purchases inside that window, so it needs the opening date:
earnrate update discover-it-cash-back --opened 2026-03-04
In the wallet file that's opened: 2026-03-04 on the card; a tracked welcome bonus's opened counts too. Without a date, earnrate never assumes the card is new: it ranks it at its standard rates and says when a first-year rate would change the answer. The to-do list says when a first-year rate ends this quarter.
Paying abroad
Many cards charge a foreign transaction fee, often 3%, on every purchase outside the U.S., which can wipe out what they earn. Give the country with --country (two letters, like FR) and earnrate ranks each card after its fee, says what a card with a fee nets, and points out cards that earn extra abroad:
earnrate restaurants --country GB
earnrate best groceries --country JP # every card earnrate knows
Each card's fee comes from its issuer's rates-and-fees table, and earnrate cards shows it. The cheat sheet has an "Abroad" line, on earnrate.dev a "Paying outside the U.S." box does the same, and in Claude, mention where you're paying.
Spend bonuses
Some cards pay a bonus once a year after you spend a set amount on them, like the IHG One Rewards cards' "10,000 bonus points after you spend $15,000 on purchases each calendar year". earnrate cards ihg lists each card's, with what it pays besides points (status, Elite Night Credits, free nights). Only the points are valued.
Every purchase on the card counts. Once earnrate knows how much you've spent on the card this year, an answer adds the bonus points to the purchase that reaches the total and says so, and earnrate todo lists a bonus once you're at least 75% of the way there. Without that tracking, a spend bonus never changes an answer: earnrate doesn't guess at spending it wasn't told about. Spending counts up as you record purchases from an AI assistant or import a statement with --apply. You can also set it in the card's settings on earnrate.dev, or in the wallet file:
- id: chase-ihg-one-rewards-premier
milestone_usage: spend-15k: { period: '2026', spent: 11200 } # spend-40k counts the same purchases
earnrate simulate adds a bonus's points to a card's yearly rewards when the year's spending on it reaches the total.
Store credits
Some cards give dollars back for spending at a named store, up to a limit each period: Amex Platinum's $75 a quarter at lululemon, Amex Gold's $7 a month at Dunkin', Blue Cash Preferred's $10 a month on Disney+, Hulu or ESPN subscriptions. The purchase still earns the card's rate; the credit comes on top. Asking about the store with no cards saved lists the cards with a credit there first, "With a store credit", in dollars ("$75 back each quarter, then 1x Amex Membership Rewards"), then the usual ranking by rate. A search for a kind of purchase ("clothing") doesn't.
With a saved wallet, a credit counts only once you mark it enrolled (these all need enrolling with the issuer), and only while some is left this period. Given an amount, its dollars count toward that card's return and can make it the pick; without one, the answer shows what's left. Reco
Only the beginning is shown; read the rest in the repo