mcpField
B
Benefits City

Benefits City

远程服务
aiagentscity.com金融数据02 周前更新

关于 Benefits City

Benefits City 汇集经过来源核查的美国银行开户和信用卡奖励信息,供消费者和 Agent 查询比较。数据包含条件、到期日期及核验记录,并通过网站、API、CLI 和 MCP 提供。

主要功能

  1. 01按类型、州和金额筛选奖励
  2. 02查询奖励条款与资格条件
  3. 03查找即将到期的优惠
  4. 04比较多项奖励
  5. 05提供来源和核验日期

适用场景

  1. 01筛选无需直接存款的银行开户奖励
  2. 02查看优惠的申请要求和到期日
  3. 03比较多个账户或信用卡奖励

MCP 相关

MCP 服务通过 Streamable HTTP 和 stdio 暴露奖励搜索、详情、到期查询、比较及文档工具;无需 API 密钥。

配置

远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。

服务地址https://aiagentscity.com/benefits/mcp
一键复制安装命令
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。

工具

6
参数类型必填说明
limitinteger否返回结果的最大数量。
querystring否用于匹配银行/发卡机构、产品名称和优惠要求文本的关键词,例如 'Chase'、'Sapphire' 或 'balance transfer'。
statestring否2 位字母的美国州代码,例如 'TX'。全国性优惠始终匹配;地区性优惠仅匹配其适用州。
bonus_typeenum否将结果限定为银行账户、信用卡、储蓄账户或经纪账户的开户奖励。bank_account | credit_card | savings | brokerage
balance_transferboolean否设为 true,仅返回发卡机构声明对转入余额提供 0% 或优惠利率的卡片。结果按优惠期长度排序;如长度相同,则优先手续费较低者——而非按奖励金额排序,因为这些卡不提供开户奖励。
min_bonus_amount_usdnumber否最低奖励金额(USD)。信用卡的奖励金额是积分/里程奖励的预估美元价值。
direct_deposit_requiredboolean否筛选奖励是否要求符合条件的直接存款。

详细介绍

Benefits City — 一个 AI Agent City 项目

经人工核实的美国银行开户奖励和信用卡申请奖励,提供两种方式:

受众界面使用方式
人类服务端渲染的网站:落地页、可筛选浏览、奖励详情页、Agent 文档npm start → /、/bonuses、/bonuses/:id、/agents
AgentMCP 服务 — 通过 Streamable HTTP(POST /mcp)和 stdio 提供 6 个工具npm start → /mcp · npm run mcp
AgentJSON 数据源 + llms.txt/api/bonuses.json、/api/bonuses/:id、/api/stats、/llms.txt
运营者CLI,使用与 MCP 相同的数据和逻辑,JSON 输出到 stdoutnpm run cli -- …

一个数据库,两种一等界面。落地页上的实时统计数据根据真实数据计算,不会过时。

安装与运行

cd ~/workspace/bank-bonus-agent
npm install                    # builds better-sqlite3 (metrics); with --ignore-scripts run `npm rebuild better-sqlite3`
npm run build                  # tsc -> dist/
npm run test                   # tsc + node:test suite (dist/tests)
npm run freshness              # daily source check -> data/review-queue.json (see REFRESH_PLAN.md)
npm start                      # prestart seeds data/bonuses.json, then serves on PORT (default 3000)

实用环境变量:

变量默认值说明
PORT3000监听端口(Railway 会注入自己的端口)
BASE_PATH""挂载到子路径下,例如 /benefits — 所有链接、资源和表单都会相应调整
PUBLIC_URL派生值文档和 llms.txt 使用的规范公开 URL,例如 https://aiagentscity.com/benefits
BONUS_DB_PATHdata/bonuses.json覆盖 JSON 存储位置

其他命令:npm run mcp(stdio MCP 服务)、npm run cli -- …、npm run seed(可重复运行的 upsert)、npm run typecheck。

面向 Agent:通过 MCP 连接

Streamable HTTP — 任何兼容 MCP 的客户端(Claude、Claude Code、Muse 等),无需 API 密钥(参见 /auth.md):

POST {PUBLIC_URL}/mcp

Claude Code,一行命令:

claude mcp add --transport http benefits-city https://aiagentscity.com/benefits/mcp

发现入口:/server.json(MCP 注册表清单,也位于 /.well-known/mcp.json)、/.well-known/agent.json、/.well-known/mcp/server-card.json(根据实时工具列表生成)、/openapi.json(OpenAPI 3.1)、/auth.md、/llms.txt、/skill.md(也作为 skill://benefits-city/benefits-city/SKILL.md MCP 资源提供)、/docs(/agents 的别名)以及 /changelog(另有 /changelog.json、/feed.xml;数据位于 changelog/changelog.json)。

与 MCP 工具功能一致的 REST 接口:GET /api/search、/api/expiring、/api/compare?ids=a,b、/api/bonuses/:id、/api/bonuses.json、/api/stats — 使用相同的筛选条件和公开数据格式,错误格式为 {"error":{"type","message","code?","param?"}}(400 会指出错误参数;未知或已过期的 ID 返回 404)。

Claude Code / Claude Desktop 配置(通过 mcp-remote):

{
  "mcpServers": {
    "benefits-city": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "https://aiagentscity.com/benefits/mcp"]
    }
  }
}

本地 stdio(可自托管):运行 npm run build 后执行 node dist/mcp-server.js。

Agent 交互示例:

# Which checking bonuses pay $400+ and don't require direct deposit?
search_bonuses({ "bonus_type": "bank_account", "min_bonus_amount_usd": 400,
                 "direct_deposit_required": false })

# Full terms for one offer
get_bonus({ "id": "chase-total-checking-400" })

# What's expiring in the next 2 weeks?
expiring_soon({ "days": 14 })

# Head-to-head
compare_bonuses({ "ids": ["bmo-checking-600", "sofi-checking-savings-400"] })

也可通过 shell 使用(通过管道传输时,请直接使用 node dist/cli.js — npm run 会打印横幅):

node dist/cli.js search --type bank_account --state TX --min 300 --pretty
node dist/cli.js get chase-total-checking-400 --pretty
node dist/cli.js expiring --days 30
node dist/cli.js compare bmo-checking-600 sofi-checking-savings-400

通过 HTTP:

curl localhost:3000/api/bonuses.json | jq '.[].id'
curl localhost:3000/api/bonuses/us-bank-smartly-checking-450
curl localhost:3000/api/stats | jq '{total_offers, total_bonus_usd}'
curl localhost:3000/llms.txt

工具契约

工具输入输出
search_bonusesbonus_type?(bank_account|credit_card|savings|brokerage)、state?(2 位字母代码;全国范围始终匹配)、min_bonus_amount_usd?、direct_deposit_required?、query?(银行/产品子字符串)、limit?(1–100,默认值为 25)奖励记录数组,按奖励金额从高到低排列
get_bonusid完整记录,或带类型的 not_found 错误
expiring_soondays?(1–365,默认值为 30)记录中注明的到期日期在指定时间范围内的记录,按到期时间从近到远排列。不包含未注明到期日期的优惠
compare_bonusesids(2–4 个){ bonuses: [...], summary: { highest_bonus_usd, earliest_expiry } },或列出未知 id 的带类型 not_found 错误
benefits_api_docs—Markdown 文档:工具、字段、排序保证、错误格式
benefits_examples—可运行的示例调用 {title, tool, arguments}

MCP/CLI/数据源返回的每条记录均由 toPublic()(src/links.ts)处理:不会公开原始 affiliate_url;使用方会获得 apply_url(我们的 /go/:id 跟踪链接)、 sponsored(布尔值)和 disclosure_url。排序按奖励金额降序(金额相同时按 id 排序),且 绝不会受到佣金影响(由测试强制保证)。不会返回已过期的优惠。 错误使用 {"error":{"type","message","code?","param?"}} 格式。

工具定义位于 src/mcp-tools.ts,由 stdio 服务和 Streamable HTTP 传输共用,以确保契约不会出现偏差。(无状态 HTTP 遵循 SDK 模式:每个请求创建一个全新的服务和传输。)

数据架构(每条记录)

id(kebab-case) · bank_or_issuer · product_name · bonus_type(bank_account | credit_card | savings | brokerage) · bonus_amount_usd(银行账户:公布的奖励;信用卡:积分/里程奖励的预估美元价值——估值依据注明在 requirements 中) · bonus_points · annual_fee_usd · requirements[](通俗易懂的资格条件步骤) · min_deposit_usd · direct_deposit_required · expiry_date(YYYY-MM-DD,null = 未注明截止日期) · states_available("nationwide" 或州代码数组) · application_url · source_url(确认当前条款的来源) · last_verified_date · verification(issuer_page = 已获取发行方自己的页面;aggregator_consensus = 至少 3 个可靠的列表信息一致;另含 verified_at 和 sources[]) · status(active | expired | needs_review) · offer_history[] · eligibility(结构化,可为 null) · affiliate_url(仅作输入——供 /go/:id 使用,绝不公开)。

“今天”指美国东部时区的日历日期:有效期至 9/30 的优惠会在东部时间 9/30 全天提供。

初始数据来源

共 33 条记录(15 条银行账户、17 条信用卡、1 条储蓄)。基础数据集于 2026-09-20 在线核实;在 2026-09-30(D-1518),对即将到期且影响最大的记录进行了 再次核实,从发行方页面新增了 4 条优惠,并有意排除无法核实的说法。 每条记录都包含 source_url、verification 和 last_verified_date;没有任何内容是捏造的。 详见 REFRESH_PLAN.md。

已知注意事项:Chase 和 Wells Fargo 没有找到官方优惠页面的原文 URL,因此 application_url 指向确认条款的页面;BMO 的记录在两个 URL 字段中都使用了 Doctor of Credit 页面。之后可替换为真实的银行 URL/联盟链接。

刻意保留为占位内容的部分

  • application_url = 官方申请页面,而非联盟链接。 用户自行注册银行的联盟计划;获批后替换 URL(src/site.ts 中标记为 AFFILIATE_PLACEHOLDER;还要更新披露页面的“当前状态”部分)。
  • 刷新仅检测并提交审核,不会自动发布。 npm run freshness 会将已过期、已变更或金额不匹配的优惠报告到审核队列;由人工或 Agent 编辑 seed-data/ — 参见 REFRESH_PLAN.md。
  • 单节点 JSON 存储(data/bonuses.json,原子写入)。目前的规模下足够;如果将来出现并发写入者,则迁移到 Postgres/SQLite。

部署

此应用已适配 Railway(start 脚本、遵循 PORT、engines: node >= 20、一个原生依赖项(better-sqlite3,预构建二进制文件)、prestart 会填充数据库)。它通过反向代理部署在 aiagentscity.com/benefits,使用 BASE_PATH=/benefits。简明步骤: RAILWAY_DEPLOY.md。

目录结构

src/
  web-server.ts   site + feeds + /mcp (Streamable HTTP) + /api/stats  [npm start]
  site.ts         server-rendered pages: landing, browse, detail, agents, about/disclosure/contact
  stats.ts        live stats computed from the real data
  mcp-tools.ts    MCP tool definitions (shared by stdio + HTTP)
  mcp-server.ts   MCP server (stdio) — `npm run mcp`
  cli.ts          operator CLI (JSON on stdout)
  db.ts           JSON data store + query functions (search/get/expiring/list)
  compare.ts      shared compare logic (MCP + CLI)
  seed.ts         seed loader (validates, upserts AND prunes: seed-data/*.json is the source of truth)
  types.ts        Bonus schema types
  links.ts        apply-URL resolution, toPublic() shaping, disclosure wording
  meta.ts         version constants, server.json + auth.md builders
  freshness.ts    pure source-page classifier (blocked is not dead)
  freshness-cli.ts  daily check runner -> data/review-queue.json (`--canary` proves it can go red)
  tests/          node:test suite (npm run test)
skill/            product skill served over MCP (skill://benefits-city/benefits-city/SKILL.md)
seed-data/        researched offers (bank-account, credit-card, savings, brokerage JSON files)
data/             bonuses.json (generated by npm run seed / prestart; gitignored)
public/assets/    site.css (no build step)
public/llms.txt   static reference copy (server generates the live one per-host)
screenshots/      headless-Chromium captures of the pages
REFRESH_PLAN.md   how the feed stays fresh
RAILWAY_DEPLOY.md foolproof Railway + reverse-proxy steps

评论

支持 Markdown

第一次接触 MCP?

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

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