关于 myfinance-mcp
myfinance-mcp 是面向个人财务管理的远程 MCP 服务,可通过对话记录收支、导入银行账单并查看预算与净资产。金额统计由服务器使用 SQL 计算,并支持多币种和聊天内交互式面板。
主要功能
- 01对话记录收入与支出
- 02导入 CSV、PDF 和截图账单
- 03管理预算与周期性支出
- 04查询账户余额和净资产
- 05支持 150 多种货币
适用场景
- 01通过对话登记日常消费
- 02批量导入银行交易记录
- 03查看分类预算进度和趋势
- 04汇总账户余额与净资产
MCP 相关
它是供 Claude、ChatGPT、Codex 和 Cursor 等客户端连接的远程 MCP 服务,提供财务记录、查询、导入与管理工具,并在支持 MCP Apps 的客户端中显示交互式面板。
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
https://myfinance-mcp.com/mcpclaude mcp add --transport http alex-odoo-myfinance https://myfinance-mcp.com/mcp{"mcpServers":{"alex-odoo-myfinance":{"type":"http","url":"https://myfinance-mcp.com/mcp"}}}在 Cursor 中打开{"servers":{"alex-odoo-myfinance":{"type":"http","url":"https://myfinance-mcp.com/mcp"}}}在 VS Code 中打开{"mcpServers":{"alex-odoo-myfinance":{"type":"http","url":"https://myfinance-mcp.com/mcp"}}}{"mcpServers":{"alex-odoo-myfinance":{"serverUrl":"https://myfinance-mcp.com/mcp"}}}命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。
工具
详细介绍
MyFinance MCP
一款用于个人理财的远程 MCP 服务,也是 Claude、ChatGPT、Codex 和 Cursor 的 AI 记账工具——通过对话记录开支、拍摄收据照片、导入任意银行的账单(CSV、PDF 或截图),并为你计算预算、趋势和净资产,支持 150 多种货币。
网站: myfinance-mcp.com · Beta 期间免费 · 由 Rteam 构建
快速开始
服务已托管并可直接使用,只需将其连接到你的 MCP 客户端:
https://myfinance-mcp.com/mcp
在 Claude 上: 自定义 → 连接器 → + 添加 → 添加自定义连接器 → 为其命名并粘贴 URL → 继续 → 身份验证:立即登录(如果表单要求填写 OAuth 客户端,请保留 使用 Claude 已发布的身份(推荐);自动注册也可以)→ 添加。切勿选择“使用你自己的 OAuth 客户端”,也不要填写客户端 ID/密钥,否则会导致无法登录。所有 Claude 套餐均可使用(免费版允许添加一个自定义连接器)。
在 ChatGPT 上(网页版): 开启开发者模式(设置 → 应用 → 高级设置),然后选择插件 → + → 添加自定义 MCP 服务(旧版菜单:设置 → 应用 → 创建)→ 粘贴 URL → 选择 OAuth,客户端 ID/密钥留空 → 创建并登录 → 在聊天中输入 @ 即可使用。根据 OpenAI 帮助中心的信息,带有写入操作(记账所需)的自定义 MCP 服务仅适用于 Business、Enterprise 和 Edu;Pro 可只读访问;帮助中心未列出 Free、Go 或 Plus 套餐的开发者模式,因此如果你看不到该选项,请使用 Codex。
在 Cursor 上: 添加到 Cursor,或者在 ~/.cursor/mcp.json 的 mcpServers 下添加 "myfinance": { "url": "https://myfinance-mcp.com/mcp" },然后在自定义设置中点击 MyFinance 旁边的连接。
在 Codex 上(包含在所有 ChatGPT 套餐中,包括免费版):
codex mcp add myfinance --url https://myfinance-mcp.com/mcp
codex mcp login myfinance
首次连接时,你可以使用 Google 登录,或使用发送到你邮箱的一次性验证码登录;首次登录会创建你的 MyFinance 账户。重新连接后,你的数据仍会保留。各客户端的分步指南:myfinance-mcp.com/install。
原因
- 无需应用、无需表单、无需电子表格。 “在 Lidl 买食品杂货花了 24.50 欧元”就是完整的工作流。
- 所有数字均通过 SQL 计算。 数据和计算都由服务端负责;AI 读取计算结果,绝不猜测算术结果。
- 支持 150 多种货币。 交易保留原始货币(使用 ECB 和乌克兰国家银行汇率,并从 2024 年 3 月起为其他所有 ISO 货币提供公开的每日汇率快照);交易日期对应的基础货币汇率会固定保存,因此历史数据不会被改写。
- 支持任意银行,通过账单导入。 上传 CSV/PDF 导出文件或银行应用的截图;一次调用即可导入数百条记录,并通过幂等去重、合并手动记录的重复项和核对总额。ZenMoney 用户也可以改用只读同步。
- 个人与企业账户区分。 账户和交易均可标记实体,并可在各处筛选;导出的 CSV 也包含此标记,方便交给会计师。
- 在聊天中查看仪表板。 预算、趋势、摘要和账户会以交互式面板(MCP Apps)的形式直接显示在对话中。
技术栈
- Bun - 运行时和包管理器
- Express - HTTP 层
- MCP SDK - 基于 Streamable HTTP 的 Model Context Protocol(无状态)
- OAuth 2.1 - PKCE、动态客户端注册和客户端 ID 元数据文档(Claude 已发布的身份);使用 Google 登录或通过邮件发送的一次性验证码登录(两种方式均为可选)
- Prisma + PostgreSQL - 所有金额均使用
numeric,所有统计数据均通过 SQL 聚合计算 - Docker - 单容器部署
MCP 工具
| 工具 | 描述 |
|---|---|
log_expense | 记录一笔消费、账单或收据(负数金额 = 退款) |
log_income | 记录收入:工资、发票、退款、利息 |
log_transfer | 在账户之间转账,支持跨币种;不会计为支出 |
import_transactions | 批量导入账单(每次最多 500 行):按银行参考编号或推导键去重,合并双重记录,检查对账情况;并列出发现的定期付款 |
get_summary | 按类别、商户、月份或周汇总期间数据;提供支出或收入明细、与上一期间的比较,以及任意报告币种;使用 trend_months 查看逐月趋势 |
get_transactions | 列出并筛选交易,支持分页(总数、has_more、offset) |
update_transaction | 修正现有交易的任意字段,包括类型或账户;对某商户的类别修正会被记住 |
delete_transactions | 一次调用即可按 ID 删除一笔或多笔交易 |
get_accounts | 查看所有账户的余额和净资产,并换算为基础货币 |
manage_account | 管理账户:创建、更新、设置余额(将指定日期的实际余额设为基准)、合并(合并到另一个账户并去重)、删除 |
set_budget | 设置每月分类限额或总限额;超出限额的记录或导入操作会提示 |
get_budget_progress | 查看实时预算进度和剩余天数;以仪表板形式呈现 |
get_recurring | 查看订阅、房租和账单:已保存的项目及从记录中发现的项目、月度和年度总额,以及未来 30 天内的待付款项 |
set_recurring | 保存、更改或移除定期付款;对于手动记账的用户,auto_log 会在付款日期自动记录 |
get_settings | 查看已登录账户、基础货币、时区、邮件摘要选项和服务端版本 |
update_settings | 更改基础货币、时区或邮件摘要 |
export_data | profile:以 JSON 格式导出除交易以外的所有数据;transactions:以 CSV 格式导出,每页 2000 行 |
zenmoney | ZenMoney(自动检测国际版和 .ru 后端):paste_token、sync、status、按账户切换、disconnect;只读、增量同步,并保留手动编辑 |
bank | 封闭测试版,仅限受邀账户。 开放银行服务(Enable Banking,欧盟/英国):list_banks、start consent、sync、status、按账户切换、disconnect;连接正常时也会每日自动同步 |
delete_all_data | 永久删除用户资料和所有数据(GDPR 数据清除) |
在 0.18.0 中合并的工具(ping、get_trends、delete_transaction、create_account、update_account、delete_account、merge_accounts、log_balance、export_profile、export_transactions、connect_zenmoney、sync_zenmoney、connect_bank、sync_bank)不再列出,但仍可通过旧名称调用,因此保留旧工具列表的客户端仍能正常工作。
MCP Apps
三个工具会返回交互式仪表板(ui://myfinancemcp/dashboard),并直接显示在支持 MCP Apps 的客户端聊天中:预算环形图(get_budget_progress)、类别摘要和月度趋势(get_summary),以及账户/净资产面板(get_accounts)。支持浅色和深色主题。
安全与隐私
- 收据照片由你的 AI 客户端解析;图片绝不会传到此服务。
- 金额、商家和备注绝不会写入服务日志(盲日志);使用事件会记录工具名称、耗时、错误类别和经过编码的参数值,并关联到账户,账户删除时也会一并删除。
- 使用 OAuth 2.1 和 PKCE、轮换刷新令牌(声明支持
offline_access),并对登录进行速率限制。 - 所有 20 个工具都带有 MCP 注解(标记只读和破坏性操作,并将连接器工具标记为开放世界),客户端可据此正确控制确认流程。
- 银行访问严格为只读:ZenMoney 使用用户自己的 API 令牌;在封闭测试阶段,通过 Enable Banking 获取开放银行授权(银行验证用户身份;我们不会接触凭据)。会话 ID 和令牌均以 AES-256-GCM 加密存储。
- CSV 导出和立即彻底删除都是工具,而非支持工单。
- 托管实例:数据存储在欧盟(Supabase,eu-central-1),与数据库之间使用 TLS,并固定 CA。服务端会将每次查询限制在你的账户范围内;数据库自身的 API 对所有人关闭(行级安全,默认拒绝所有访问)。
- 401 项自动化端到端检查(涵盖公共客户端和机密客户端的完整 OAuth 流程,包括浏览器绑定和受众检查、每个工具、导入去重语义以及 GDPR 删除)是部署的硬性门槛;CI 会在每次推送时运行 lint 和类型检查。
披露政策请参阅 SECURITY.md。
自行托管
采用 MIT 许可;凡是能运行 Bun 和 Postgres 的环境都可以运行。
site/ 中的落地页使用 Switzer 字体,该字体的免费许可不允许再分发,因此仓库中不包含字体文件。如需相同的外观,请从 Fontshare 下载字体,并将 Switzer-Variable.woff2 放入 site/fonts/;若没有该字体,页面会回退到系统字体。MCP 服务不需要该字体。
1. Postgres
任何 PostgreSQL 15+ 均可。Supabase 免费套餐很合适:创建项目并复制 session pooler 连接字符串(IPv4)。
应用架构,然后关闭 Supabase 公共 Data API 对这些表的访问(Prisma 创建表时默认关闭行级安全,而 Supabase 会向任何持有项目 anon key 的人公开所有 public 表)。每次运行新增表的 db push 后,都要重新运行第二条命令:
bun install
bunx prisma db push
psql "$DATABASE_URL" -f prisma/rls.sql
数据库 TLS:Supabase 主机名会自动通过 Supabase 根 CA 验证;对于其他主机,请在 DATABASE_URL 中设置 sslmode=。
2. 环境变量
| 变量 | 描述 |
|---|---|
PORT | 服务端口(默认值为 8788) |
BASE_URL | 服务的公开 URL(OAuth 发行者) |
LEGACY_BASE_URLS | (可选) 同一容器提供服务的旧版公开源,以逗号分隔;绑定到这些源的令牌仍然有效,其 /authorize 会重定向到 BASE_URL |
DATABASE_URL | Postgres 连接字符串 |
MYFINANCE_MCP_EMAIL | 引导用户的邮箱 |
MYFINANCE_MCP_PASSWORD_HASH | 引导用户的密码哈希(见下文) |
GOOGLE_CLIENT_ID | (可选) 用于“使用 Google 继续”的 Google OAuth 客户端 ID |
GOOGLE_CLIENT_SECRET | (可选) Google OAuth 客户端密钥 |
RESEND_API_KEY | (可选) Resend 密钥:用于发送邮箱登录码和注册通知 |
NOTIFY_EMAIL | (可选) 接收注册通知的邮箱 |
FROM_EMAIL | (可选) 已验证的发件人;设置 RESEND_API_KEY 后会启用邮箱登录 |
TELEGRAM_BOT_TOKEN | (可选) 用于发送新用户注册通知的 Telegram 机器人 |
TELEGRAM_CHAT_ID | (可选) 接收通知的聊天 |
TOKEN_ENC_KEY | ZenMoney 和银行连接所必需:64 个十六进制字符(openssl rand -hex 32),用于加密存储的服务提供方令牌 |
EB_APP_ID | (可选) Enable Banking 应用 ID;只有设置此项和密钥后才会启用银行连接 |
EB_PRIVATE_KEY_B64 | (可选) Enable Banking 应用私钥 PEM 的 Base64 编码 |
EB_API_ORIGIN | (可选) Enable Banking API 源,默认值为 https://api.enablebanking.com |
REFRESH_REUSE_GRACE_MS | (可选) 轮换后的刷新令牌继续有效的时长,默认值为 30000(并行刷新) |
AUTO_SYNC_INTERVAL_MS | (可选) 银行自动同步间隔,默认每小时一次(同步超过 20 小时未更新的连接);设为 0 可禁用 |
生成密码哈希:
bun -e "console.log(await Bun.password.hash(process.argv[1]))" 'your-password'
3. 运行
cp .env.example app.env # docker compose reads app.env, not .env
docker compose up -d # uses the included Dockerfile, port 8788
在前面配置 nginx(或任何终止 TLS 的代理),并将 BASE_URL 指向你的域名。site/ 中的静态着陆页为可选项——如果需要,可从同一源提供服务。
开发
bun install
cp .env.example .env # fill in your values
bun run dev # hot reload on :8788
bun run e2e # end-to-end suite (spawns its own server; WRITES to the DATABASE_URL database)
bun run lint
端到端测试套件(359 项检查)覆盖完整的 OAuth 流程(发现、动态注册、客户端 ID 元数据文档、PKCE、刷新令牌轮换、撤销;公开客户端和机密客户端)、每个工具、语句导入去重语义、针对模拟 Diff API 的 ZenMoney 同步,以及 GDPR 数据删除。
API 端点
| 端点 | 描述 |
|---|---|
POST /mcp | MCP 端点(Bearer 身份验证) |
GET /health | 健康检查 |
GET /.well-known/oauth-authorization-server | OAuth 元数据发现 |
GET /.well-known/oauth-protected-resource/mcp | 受保护资源元数据 |
POST /register | 动态客户端注册(客户端也可以使用 https client_id:客户端 ID 元数据文档) |
GET /authorize | OAuth 授权(登录页面) |
POST /token | 令牌交换 |
GET /auth/google | 启动 Google 登录(配置后可用) |
POST /login/email、POST /login/email/verify | 电子邮件登录验证码:发送、验证(配置后可用) |
GET /connect/enablebanking/callback、POST /connect/enablebanking/confirm | 银行授权返回和确认步骤 |
GET /api/stats | 公开的汇总计数(仅计数,不含金额) |
许可证
MIT - Rteam FZE LLC
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。