关于 Ledgr
Ledgr 是面向希望自行托管财务数据的个人财务应用,可同步银行账户并管理预算、投资和报表。内置 MCP 服务让 AI 助手能够查询及更新财务信息。
主要功能
- 01Plaid 或 SimpleFIN 银行同步
- 02交易自动分类
- 03分类月度预算
- 04投资组合追踪
- 05账单识别与财务报表
- 06内置 AI 聊天与 MCP 服务
适用场景
- 01查看某月各类别支出
- 02跟踪预算与投资组合
- 03生成收入、支出和净资产报告
MCP 相关
Ledgr 提供内置 MCP 服务,向兼容客户端开放账户、交易、预算、报表、投资和账单等查询及操作工具。访问由 OAuth 读取、写入和同步权限控制。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
docker run -i --rm -e DATABASE_URL -e MCP_ENABLED -e LEDGR_DATA_DIR -e LEDGR_URL -e BETTER_AUTH_URL ghcr.io/kentaniguchi-r/ledgr:0.3.4DATABASE_URL密钥PostgreSQL connection string (Ledgr needs its own Postgres; docker-compose.yml in the repo provides one)MCP_ENABLEDTurns on the /api/mcp endpoint (off by default)LEDGR_DATA_DIRDirectory where generated secrets are persistedLEDGR_URLPublic base URL of this instance; used as the OAuth issuer and MCP resource identifierBETTER_AUTH_URL密钥Base URL for sign-in; must match LEDGR_URL本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
ghcr.io/kentaniguchi-r/ledgr:0.3.4Streamable HTTP工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
Ledgr 通过 Plaid 或 SimpleFIN 连接你的银行账户,自动同步并分类交易,提供预算、投资追踪、账单检测和财务报告——所有功能都运行在你自己的服务器上,数据也由你自己掌控。
它还提供 MCP 服务,因此你可以通过自然对话,让 Claude 等 AI 助手查询你的财务状况。
You: "How much did I spend on dining out last month?"
Claude: Based on your transactions, you spent $342.18 on dining out in April...
通过 MCP 在 Claude Code 中查询你的财务状况
功能
- 自动同步银行数据 — 通过 Plaid 连接 12,000 多家银行(实时 Webhook 同步或定时轮询);如果不想使用 Plaid 开发者账户,也可以通过 SimpleFIN 连接
- 智能分类 — 四级处理流程:你的规则 > 商户默认分类 > Plaid 分类 > AI 兜底
- 预算 — 按类别设置月度预算,实时追踪进度
- 投资追踪 — 投资组合持仓、业绩历史和资产配置明细,自动从 Plaid 或 SimpleFIN 同步
- 定期账单检测 — 自动识别订阅和定期扣款
- 财务报告 — 追踪支出、收入、净资产和类别趋势
- AI Agent 接口(MCP) — 通过 Claude Code、Claude Desktop、Cursor 或任何 MCP 客户端查询你的财务状况
- 应用内 AI 聊天 — 直接在仪表盘中询问财务相关问题
- 自带 AI API 密钥(BYOK) — 使用你自己的 API 密钥(OpenAI、Anthropic、Google 或本地模型)进行聊天和分类
- CSV/OFX/QFX 导入和 CSV 导出 — 支持 Plaid 未覆盖的账户,也可用于导出你的数据
- 自托管 — 使用 Docker Compose 和 PostgreSQL,数据绝不会离开你的服务器
按类别设置月度预算,并对照实际支出追踪进度
支出、收入、现金流、趋势和净资产报告
需要安装 Docker 和 Docker Compose。
curl -fsSL https://raw.githubusercontent.com/KenTaniguchi-R/ledgr/main/scripts/install.sh | sh
这会创建一个 ledgr/ 目录,下载 docker-compose.yml,并启动应用。
想先查看操作步骤?
mkdir ledgr && cd ledgr
curl -O https://raw.githubusercontent.com/KenTaniguchi-R/ledgr/main/docker-compose.yml
docker compose up -d
访问 http://localhost:4200,创建账户,然后开始探索。
首次启动时,Ledgr 会生成一个加密密钥和会话密钥,并将它们存储在应用数据卷中。请将该数据卷(或 /data/encryption-key 文件)与数据库一同备份——如果丢失密钥,就无法访问 Plaid 和 SimpleFIN 令牌等加密数据。想自行管理密钥?请在 .env 文件中设置 ENCRYPTION_KEY(参见配置),该设置优先级更高。
在
.env中添加 Plaid 密钥即可启用银行同步——请参见下文的连接银行(也可以不添加密钥,改用 SimpleFIN)。即使两者都不使用,也可以通过 CSV 导入使用应用。
连接银行
- 在 dashboard.plaid.com 注册,并从 Developers > Keys 获取
client_id和密钥 - 将它们添加到与
docker-compose.yml同级的.env文件中(如果没有该文件,请从.env.example开始):PLAID_CLIENT_ID=your_client_id PLAID_SECRET=your_secret PLAID_ENV=production # or sandbox for fake data - 重启:
docker compose restart - 在应用中,前往 Accounts > Link Bank,通过 Plaid 连接
Plaid 的免费试用方案包含 10 个生产环境连接和不限量的沙盒访问权限。之后,Launch 方案按使用量付费,无需签订合约。还没有 Plaid 密钥?应用仍可正常使用——通过 CSV 导入交易,之后再添加 Plaid。
通过 Plaid 连接 12,000 多家银行
或通过 SimpleFIN 连接
SimpleFIN 开箱即用——无需开发者账户,也无需修改 .env。
- 获取 SimpleFIN Bridge 账户,并从你的桥接服务提供商处生成 Setup Token
- 在应用中,前往 Accounts > Link Bank,选择 SimpleFIN 选项
- 粘贴 Setup Token 以完成连接
SimpleFIN 不支持 Webhook,因此账户按每日计划同步(SCHEDULER_SIMPLEFIN_SYNC_CRON,参见配置),而非实时同步。投资持仓的同步方式与 Plaid 相同。
连接 AI Agent
Ledgr 内置了 MCP 服务,并支持插件。
首先,在 .env 中启用 MCP 端点,然后重启:
MCP_ENABLED=true
然后选择你的工具:
Claude Code
/plugin marketplace add KenTaniguchi-R/ledgr
/plugin install ledgr@ledgr
Codex CLI
codex plugin marketplace add KenTaniguchi-R/ledgr
OpenCode — 添加到 opencode.json:
{
"$schema": "https://opencode.ai/config.json",
"plugin": ["ledgr"]
}
OpenClaw
openclaw plugins install ledgr --marketplace KenTaniguchi-R/ledgr
Hermes
hermes plugins install KenTaniguchi-R/ledgr
其他 MCP 客户端(Cursor、Windsurf、Cline 等)
将任意兼容 MCP 的客户端指向你的 Ledgr 实例:
http://localhost:4200/api/mcp
首次连接时,Ledgr 会将你重定向到 OAuth 流程,以授权访问。
| 工具 | 描述 |
|---|---|
list_accounts | 已关联的银行账户和余额 |
get_account_summary | 按账户类型汇总余额 |
get_transactions | 搜索和筛选交易 |
update_transaction_category | 重新设置交易类别 |
mark_transaction_transfer | 将交易标记为转账或取消转账标记 |
get_budget | 某月的预算进度 |
set_budget_category | 设置某个类别的预算金额 |
list_categories | 支出类别 |
get_spending_report | 指定日期范围内的支出明细 |
get_income_vs_expense | 收入与支出趋势 |
get_net_worth_history | 净资产随时间的变化 |
get_holdings | 投资组合持仓 |
get_portfolio_summary | 投资组合价值和配置 |
get_upcoming_bills | 定期交易和账单 |
get_dashboard_summary | 财务概览 |
show_financial_dashboard | 交互式仪表板小组件 |
sync_accounts | 触发银行同步 |
读取、写入和同步工具受 OAuth 权限范围(ledgr:read、ledgr:write、ledgr:sync)控制,你需要在授权时授予这些权限。
示例提示词:
- “我这个月在食品杂货上花了多少钱?”
- “显示我的预算状态”
- “我有哪些定期账单?”
- “生成第一季度的支出报告”
- “同步我的账户并显示余额”
对比
| Ledgr | Actual Budget | Firefly III | |
|---|---|---|---|
| 自动银行同步 | Plaid(12,000+ 家银行)或 SimpleFIN | SimpleFIN(美国/加拿大)、GoCardless(欧盟/英国) | SimpleFIN、GoCardless、Spectre(通过 Data Importer) |
| 内置 MCP 服务 | 是 | -- | -- |
| AI 分类 | 是(BYOK) | -- | -- |
| 投资跟踪 | 是 | -- | -- |
| 可自托管 | 是 | 是 | 是 |
| 数据库 | PostgreSQL | SQLite | MySQL/Postgres |
| 许可证 | AGPL-3.0 | MIT | AGPL-3.0 |
更新
docker compose pull
docker compose up -d
迁移会在容器启动时自动运行。
配置
| 变量 | 必需 | 默认值 | 描述 |
|---|---|---|---|
ENCRYPTION_KEY | 否 | 自动生成 | 加密 Plaid 令牌和 API 密钥。首次启动时生成,并保存在应用数据卷中;可使用 openssl rand -hex 32 设置自己的密钥 |
BETTER_AUTH_SECRET | 否 | 自动生成 | 会话密钥,保存在应用数据卷中。可使用 openssl rand -base64 32 设置自己的密钥 |
PORT | 否 | 4200 | 应用的主机端口 |
POSTGRES_PASSWORD | 否 | ledgr | 数据库密码(在生产环境中请修改) |
PLAID_CLIENT_ID | 否 | -- | Plaid 客户端 ID |
PLAID_SECRET | 否 | -- | Plaid 密钥 |
PLAID_ENV | 否 | production | production 或 sandbox |
PLAID_SYNC_MODE | 否 | poll | poll(定时)或 webhook(实时) |
PLAID_WEBHOOK_URL | 否 | -- | Plaid webhook 的公开 URL(webhook 模式) |
SCHEDULER_SIMPLEFIN_SYNC_CRON | 否 | 45 4 * * * | 每日 SimpleFIN 账户同步(不支持 webhook,因此这是唯一的同步触发方式) |
AI_PROVIDER | 否 | -- | openai、anthropic、google、openrouter 或 custom |
AI_API_KEY | 否 | -- | 用于 AI 聊天和分类的服务提供商 API 密钥 |
MCP_ENABLED | 否 | false | 为 AI Agent 启用 MCP 端点 |
所有选项请参阅 .env.example。
开发
**如果你要自托管 Ledgr,请使用上面的快速开始。**以下说明面向贡献者。
前提条件
设置
git clone https://github.com/KenTaniguchi-R/ledgr.git
cd ledgr
pnpm install
cp .env.example .env # Fill in ENCRYPTION_KEY
pnpm dev:setup # Start DB + migrate + dev server
如需从源代码在 Docker 中运行完整应用(而非拉取预构建镜像):
docker compose -f docker-compose.yml -f docker-compose.dev.yml up -d
命令
pnpm dev # Dev server (Turbopack)
pnpm test # Unit + integration tests
pnpm test:e2e # Playwright E2E tests
pnpm lint # ESLint
pnpm typecheck # Type checking
pnpm db:studio # Drizzle Studio (DB browser)
技术栈
| 层 | 选择 |
|---|---|
| 框架 | Next.js 16(App Router) |
| 语言 | TypeScript |
| UI | shadcn/ui + Tailwind CSS 4 |
| 图表 | Recharts 3 |
| 数据库 | PostgreSQL 18(通过 Drizzle ORM) |
| 身份验证 | Better Auth |
| 银行同步 | Plaid Node SDK、SimpleFIN |
| AI | Vercel AI SDK(BYOK) |
| MCP | Model Context Protocol SDK |
| 测试 | Vitest + Playwright + Stryker |
路线图
- Plaid Webhook 支持(实时同步)
- AI 聊天助手(应用内)
- OFX/QFX 导入
- SimpleFIN 银行同步(Plaid 替代方案)
- 自动检测账户间转账
- 适配移动设备的 UI
- 多币种支持
- 自定义报告生成器
- 目标跟踪(储蓄目标、还清债务)
- 定期预算模板
请参阅 Issues,了解当前正在进行的工作。
安全
安全对财务应用至关重要。如果您发现漏洞,请不要公开提交 Issue。 请参阅 SECURITY.md,了解负责任地披露漏洞的说明。
有关 Ledgr 如何处理您的数据的详情,请参阅 PRIVACY.md。
贡献
欢迎贡献!请先提交 Issue,讨论您希望进行的更改。设置和工作流详情请参阅 CONTRIBUTING.md。
- Fork 此仓库
- 创建分支(
git checkout -b feat/my-feature) - 提交更改
- 推送并创建 Pull Request
许可证
AGPL-3.0 — 您可以自由自托管。如果您修改并分发此服务端,必须以开源方式发布您的更改。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。