内容
# rocketmoney-mcp
一款 **只读** 的 [模型上下文协议](https://modelcontextprotocol.io) 服务器,用于 [Rocket Money](https://www.rocketmoney.com)。它允许 MCP 客户端(Claude Desktop、claude.ai 等)浏览您的账户、交易、支出、预算、净资产和订阅,以便您可以 *与助手讨论您的财务状况*。
它执行 **无写操作** — 每个工具都注释为 `readOnlyHint`,服务器永远不会修改您的 Rocket Money 账户中的任何内容。
## 工具列表
| 工具 | 返回内容 |
| --- | --- |
| `session_status` | Rocket Money 会话是否已认证 |
| `list_accounts` | 每个关联机构 + 账户及当前余额 |
| `get_account` | 一个账户的详细信息:余额、信用额度、负债/年利率、余额历史 |
| `net_worth` | 净资产分为现金 / 储蓄 / 投资 / 债务,并附趋势 |
| `spending_summary` | 本月与上月支出 + 收入,按类别划分 |
| `budgets` | 过去四个月的收入和按类别划分的支出 |
| `subscriptions` | 活跃的定期收费及预计下次账单 |
| `upcoming_bills` | 未来 N 天内的即将到来的收费 |
| `search_transactions` | 按商家文本和/或日期搜索交易 |
| `category_transactions` | 本月内某一类别的交易 |
所有金额均以美元返回。
## 身份验证工作原理
Rocket Money 没有第三方 OAuth,因此此服务器重用您自己的网络会话。您从登录的 `app.rocketmoney.com` 浏览器标签页中获取 `tb.auth0.sid` cookie,并将其粘贴到服务器的 `/auth` 页面。服务器保留一个 **旋转 cookie 库**(Rocket Money 每次响应都会重新颁发 cookie,滚动 TTL 约为 3 小时 48 分钟),并运行一个保持活动状态的循环。由于没有离线刷新令牌,因此当会话最终过期时,您需要重新粘贴一个新鲜的 cookie。
cookie 仅在运行此服务器的机器上存在,并且仅发送到 Rocket Money 自己的 API。
## 端点
| 路径 | 用途 |
| --- | --- |
| `POST /mcp` | MCP 流式 HTTP 传输(无状态) |
| `GET /auth` | 粘贴 cookie 会话页面 |
| `POST /auth/submit` | 会话接收 |
| `GET /healthz` | 健康检查 |
## 本地运行
```bash
npm install
npm run build
ROCKETMONEY_STATE_DIR=./.state PORT=8080 node dist/index.js
# 打开 http://localhost:8080/auth 并粘贴您的 cookie
```
### 环境
| 变量 | 默认值 | 用途 |
| --- | --- | --- |
| `PORT` | `8080` | HTTP 端口 |
| `ROCKETMONEY_STATE_DIR` | `/data/rocketmoney` | 旋转会话保存的位置 |
| `ROCKETMONEY_KEEPALIVE_MS` | `7200000` | 保持活动状态的间隔(2 小时) |
| `ROCKETMONEY_WEB_CLIENT_VERSION` | 捕获默认值 | `x-truebill-web-client-version` 头部 |
## 部署
设计为在身份验证网关后面运行(例如 Cloudflare Access / OAuth 前门),因此 `/mcp` 和 `/auth` 端点永远不会在未经身份验证的情况下暴露 — 服务器本身持有实时财务会话,因此不能公开访问。
## 注意事项
- 如果工具返回 `PersistedQueryNotFound`,Rocket Money 旋转了一个 GraphQL 查询哈希;从新的 HAR 中重新捕获它并在 `src/rm/client.ts` 中更新 `PERSISTED`。
- 不隶属于或得到 Rocket Money / Rocket Companies 的认可。
## 许可证
MIT