mcpField
E
earnrate

earnrate

本地服务
earnrate.dev其他0今天更新

关于 earnrate

earnrate 是供个人和 AI Agent 在美国信用卡中选择用卡的本地决策工具。它根据钱包中的额度上限、类别和积分估值为商户排列卡片,并说明推荐依据。

主要功能

  1. 01按商户奖励排列钱包中的卡片
  2. 02纳入额度上限、类别和已激活选项
  3. 03按钱包设置估算积分价值
  4. 04展示理由、假设和置信度
  5. 05比较开卡奖励并导入账单

适用场景

  1. 01为计划中的消费选择信用卡
  2. 02跟踪消费上限和开卡奖励进度
  3. 03将账单实际奖励与钱包中的更优选择比较

MCP 相关

本地 stdio MCP 服务提供五种工具,用于推荐卡片、解析商户、查询钱包信息、比较开卡奖励和记录消费。它读取与 CLI 相同的 YAML 钱包文件。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"cwasley-earnrate": {
"command": "npx",
"args": [
"-y",
"earnrate"
],
"env": {
"EARNRATE_WALLET": "<EARNRATE_WALLET>",
"EARNRATE_LLM": "<EARNRATE_LLM>",
"ANTHROPIC_API_KEY": "<ANTHROPIC_API_KEY>"
}
}
}
}
启动命令npx -y earnrate
需要配置的环境变量
EARNRATE_WALLETPath to your wallet file. Default: ~/.earnrate/wallet.yaml
EARNRATE_LLMSet to on to let Claude classify merchants earnrate doesn't know. Off by default.
ANTHROPIC_API_KEY密钥Your own Anthropic key, used only when EARNRATE_LLM is on.

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npmearnrate0.1.1

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

earnrate

CI npm Code: MIT Data: CC BY-NC 4.0

我想要一张幽灵卡:一张始终能从我的卡中选出回报最高的卡。银行卡组织不允许这种卡存在,所以我打造了一个次优方案。

earnrate 是面向个人和 AI Agent 的最佳卡片决策层。 告诉它商户名称,它就会告诉你钱包里哪张卡在该商户消费回报最高,以及原因。它会保留状态(了解你的消费上限和已选类别),会考虑估值,并会透明地说明其假设。它绝不会接触卡号。

  • 在你的机器上运行。无需账户、无遥测、无联盟链接。请参阅隐私页面。
  • 目前仅支持美国卡和美国商户。

状态: 项目尚处早期,但已可使用:包括引擎、CLI、可选的 Claude 商户查询功能和 MCP 服务。请参阅基准测试,了解它与现有选卡 MCP 服务的比较。

试用

需要 Node 24 或更高版本。

npm install -g earnrate
mkdir -p ~/.earnrate
curl -o ~/.earnrate/wallet.yaml https://raw.githubusercontent.com/cwasley/earnrate/main/wallet.example.yaml
earnrate whole foods 80

然后编辑 ~/.earnrate/wallet.yaml,列出你自己的卡片(参见你的钱包)。

Whole Foods Market · $80

Use Blue Cash Preferred: 6% back, about $4.80. High confidence.

  1. Blue Cash Preferred  6%  $4.80
     6% cash back from its "us-supermarkets" rule. ...
  2. Prime Visa           5%  $4.00
     5% cash back from its "whole-foods" rule. Online or in-store.
  3. Amex Gold            4%  $3.20
     4x Amex Membership Rewards from its "us-supermarkets" rule. ...
     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 1.5¢ or more (you value them at 1¢).

Assumes Whole Foods Market codes as supermarkets (MCC 5411).

选项:--online 或 --in-store、--valuation flat|points-heavy、--all、--json、--date、--country。运行 earnrate --help 查看详情。如需将钱包存放在其他位置,请将 EARNRATE_WALLET 设为对应路径。

你的钱包

钱包是一个 YAML 文件,按 ID 列出你的卡片;每个 ID 都是 data/cards/ 中对应卡片的文件名。只需填写卡片即可:

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]

activated 的规则 ID、chosen 的选项槽位,以及可解锁奖励的会员 ID(例如 BofA Rewards 等级对应的 bofa-rewards-premier),都列在各卡片的文件中。货币及其默认值见 data/currencies.yaml。记录 AI Agent 的消费或通过 --apply 导入账单后,消费上限会逐渐填满,并在每个周期重置。

earnrate 尚不了解的商户

earnrate 内置了一份精心整理的商户列表。对于其他商户,它会退回到各卡的基础回报率,并明确说明这一点。传入 --llm(或将 EARNRATE_LLM=on)即可让 Claude 猜测类别:

  • 它会使用你自己的 ANTHROPIC_API_KEY,且只发送你输入的商户文本。金额、卡片和钱包内容都不会离开你的机器。
  • 每个答案都会保存到 ~/.earnrate/merchant-cache.json,因此每个商户只会查询一次。
  • 答案会标明是 Claude 的猜测,展示推理过程,且置信度最高为中等。
  • 精选商户信息绝不会发送给 Claude。
欢迎奖励

如果你正在努力达成某张卡的开卡奖励,请将奖励信息添加到钱包中的该卡条目:

- id: chase-sapphire-preferred
  bonus: { opened: 2026-10-01, spend: 5000, by: 2026-12-31, points: 75000 }

奖励尚未达成期间,只要该卡被商户接受,它就是首选卡;答案会说明还差多少消费额、按时完成所需的每周消费速度、按你的积分估值计算的奖励价值,以及使用该卡相比回报最高的卡所需付出的代价。记录 AI Agent 的消费或通过 --apply 导入账单后,消费额会递增;退款则会递减。达成奖励或截止日期已过后,该卡会恢复正常排名。如果有两项未达成的奖励,则优先处理每日所需消费额更高的一项。

spend、by 和奖励类型(积分奖励用 points,现金返利用 dollars)默认采用 earnrate 已知的卡片公开优惠信息;如果你的优惠不同,请自行设置。

应该办哪张新卡?
earnrate offers --cash

根据你设定的点数价值,按首年价值为你尚未持有的卡片排名:奖励价值减去首年年费。--points、--no-fee 和 --business 可缩小范围。每项优惠都是发卡机构页面上公开的优惠,并像奖励规则一样每周核查;优惠的资格规则列在备注中。优惠可能因个人和申请方式而异,而且只涵盖 earnrate 支持的卡片。没有联盟营销或申请链接。

导入账单

使用你卡片的交易记录下载文件,查看你的消费按 earnrate 推荐卡片能获得多少奖励:

earnrate import activity.csv --card amex-gold
earnrate import gold.csv:amex-gold sapphire.csv:chase-sapphire-preferred

它会汇总每张卡实际获得的奖励,并与钱包中每笔消费的最佳卡片进行比较;列出使用其他卡片可获得最多奖励的商家;还会标出发卡机构对商家的分类与 earnrate 假设不同的情况。为多份账单分别指定对应的卡片,即可生成一份汇总报告。它支持读取 Amex 和 Chase 的交易记录 CSV。请下载 CSV,而不是 PDF 账单:Chase 的 PDF 会在付款凭条中显示完整卡号,而 earnrate 从不处理卡号。

  • 除非传入 --apply,否则这只是一次模拟;传入该参数后,会将当期的额度使用情况记入你的钱包。退款会减少额度使用量。
  • 只读取日期、描述、金额、类别,以及 Chase 账单中的交易类型列。账单本身不会被存储:--apply 会将额度总额以及每笔已记录消费的哈希值写入 ~/.earnrate/imported.json,因此重复导入同一文件不会重复计入。
  • 对于 earnrate 不认识的商家,会使用账单中的类别并标记该行,因为其他发卡机构可能会采用不同的分类方式。
  • --valuation points-heavy 会按转点比例而非你钱包中的价值计算点数,这可能会改变哪张卡最合适。

支持的卡片

共 57 张卡片,均依据发卡机构自己的条款建模,并每周核查:

  • American Express: Gold、Platinum、Blue Cash Preferred、Blue Cash Everyday、Blue Business Plus
  • Chase: Sapphire Preferred、Sapphire Reserve、Freedom Unlimited、Freedom Flex、Ink Business Cash、Ink Business Preferred、Prime Visa
  • Chase 航空和酒店卡: United Gateway、Explorer、Quest、Club、Business、Club Business;Southwest Plus、Premier、Priority、Premier Business、Performance Business;Aeroplan;IHG One Rewards、Premier、Premier Select、Business
  • Citi: Strata Elite、Strata Premier、Double Cash、Custom Cash、My Best Buy Visa、Costco Anywhere Visa(个人和商业);AAdvantage MileUp、Platinum Select、Globe、Executive、Business
  • Capital One: Venture X、Venture、Savor、Kohl's Card、Kohl's Rewards Visa
  • Wells Fargo: Active Cash、Autograph
  • Bank of America: Atmos Rewards Ascent、Summit、Business;Customized Cash Rewards
  • TD Bank: Target Circle Card、Nordstrom 卡、Nordstrom Visa
  • 其他: U.S. Bank Cash+、Bilt Obsidian、SoFi Unlimited 2%

商店卡(Target、Kohl's、Nordstrom)只会在对应商店中被推荐。航空和酒店卡只计算卡片本身提供的奖励,不计算会员无论采用何种支付方式都能获得的计划积分;行李、免费住宿、贵宾室等福利也不计入。

目前格式尚无法表达的内容(例如 Bilt 的房租奖励、Citi Nights)会在相应卡片的文件中列为 todo:,而不是凭空推测。

发现奖励比例有误,或希望添加某张卡?请附上发卡机构官网页面的链接提交问题。

在 AI Agent 中使用(MCP)

earnrate mcp 会通过 stdio 将 earnrate 作为本地 MCP 服务运行,并提供五个工具:

  • best_card_for_purchase:推荐使用哪张卡,并说明理由
  • resolve_merchant:说明如何识别商户
  • list_wallet:列出你的卡片、本周期剩余额度、已选类别和开卡奖励进度
  • compare_welcome_offers:列出你尚未持有的卡片中,最佳的公开开卡优惠
  • record_purchase:将消费计入钱包文件中的额度和任何尚未结束的开卡奖励,同时保留你的注释

对于 earnrate 不认识的商户,调用模型可以传入 category(例如 grocery.supermarket)。它仅用于未知商户,并会在回答中标注。命令行使用相同的参数:--category。

要将它添加到 Claude Code:

claude mcp add --scope user earnrate -- npx -y earnrate mcp

其他 MCP 客户端也可以在配置中使用相同的命令:

{
  "mcpServers": {
    "earnrate": { "command": "npx", "args": ["-y", "earnrate", "mcp"] }
  }
}

它读取与命令行相同的钱包文件(~/.earnrate/wallet.yaml,或在服务的 env 中设置 EARNRATE_WALLET)。

工作原理

merchant text
  → resolve    category, channel, and the assumption behind them
  → evaluate   every rule on every card: network, dates, caps, picks, activations
  → value      your cents per point, with pooling
  → rank       winner, runner-ups, flip points, warnings, confidence
  • 卡片条款是数据,而非代码。 每张卡片都是一个包含规则的 YAML 文件(类别、返利率、额度上限、渠道、日期、激活、所需会员资格),并使用 Zod 进行验证。每条规则都附有一段来自发卡机构自有页面的简短引文,缺少引文时测试会失败。引擎没有针对特定卡片的分支。
  • 商户会被解析为类别,并说明背后的假设。 回答会注明“Whole Foods 按超市编码(MCC 5411)”;对于可能有多种编码方式的场所(例如体育场或酒店内的餐厅),会以中等置信度返回,并列出其他可能性。对于未知商户,会采用基础返利率;也可以选择启用、缓存并标注 Claude 的猜测。
  • 引擎是纯函数且具有确定性。 给定一笔消费、一个日期和一个钱包,它会根据网络受理情况、日期范围、已用额度(消费跨越额度上限时会拆分计算)、季度类别选择和激活状态检查每条规则,然后根据你设定的每点价值计算积分价值,包括积分合并计算(如果你同时持有 Sapphire 和 Freedom Unlimited,Freedom Unlimited 的积分就按 Sapphire 积分的价值计算)。回答中还会显示并列结果、亚军胜出的积分估值,以及过期数据。
  • 修改钱包时会保留文件内容。 记录消费时只会重写发生变化的数字,因此 YAML 中的注释和格式都能保留。
  • 漂移检测。 每周运行一次 GitHub Action,在无头浏览器中打开各发卡机构的页面,检查每段引文是否仍然存在,并在条款变更时创建 issue。它只存储发卡机构文本的哈希值。
  • 端到端测试。 测试包括根据发卡机构条款编写的黄金用例、CLI 快照测试、通过真实 stdio 完成的 MCP 往返测试、打包并安装 npm 包的安装测试,以及检查已提交文件中不含卡号。CI 会在每次推送时运行所有测试。

代码使用 TypeScript 编写,由 Node 24 直接运行(src/);引擎位于 src/engine/,商户解析位于 src/merchants/,CLI 和 MCP 服务则是在它们之上的轻量封装。

保持卡片数据最新

data/cards/ 中的每条规则都附有一段来自发卡机构自有页面的简短引文。在此仓库的克隆版本中,yarn check-sources 会在无头浏览器中打开各发卡机构页面,并报告:

  • 页面上已找不到对应引文的规则,通常意味着规则已变更
  • 自上次基线以来新增或消失的返利条目,例如新增福利

GitHub Action 每周一运行该检查;如果发现变更,就会创建名为“Card source changes”的 issue。更新卡片文件后,运行 yarn check-sources --update 记录新的基线。部分发卡机构会阻止共享服务器上的无头浏览器访问;这些页面会标记为“couldn't check”,在本地运行命令即可检查。首次运行需要执行 yarn playwright install chromium。

参与 earnrate 开发

git clone https://github.com/cwasley/earnrate.git && cd earnrate
yarn install
yarn earnrate whole foods 80   # runs src/ directly, no build
yarn validate                  # typecheck, lint, format check and tests

提交拉取请求前,请参阅 CONTRIBUTING.md。

许可

  • 代码(data/ 之外的所有内容)采用 MIT 许可。
  • 数据(data/ 下的卡片规则、商户、类别和货币)采用 CC BY-NC 4.0 许可。可免费用于个人和非商业用途,但需注明出处。
  • **商业使用数据需要获得许可。**这包括通过你自己的 API 或 MCP 服务提供数据,或将其用于付费产品。请联系 [email protected]。

以上并非法律建议,而是本着诚信制定的安排。

earnrate 不提供财务建议。发卡机构可能会更改条款,每个答案都会注明所依据的规则,因此大额消费前请查看卡片发卡机构的页面(文件中有链接)。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。