用途
Ledgerline 是一个本地优先的个人财务管道,旨在让 AI 代理在无需将数据交给任何第三方的情况下,以只读方式访问个人财务信息。它通过一个 SQLite 文件在本地存储所有数据,不依赖云服务。
主要能力
- 银行导出导入:支持导入银行网站下载的 CSV、OFX、QFX 格式文件。导入器自动去重,支持重复导入和重叠导出范围而不产生重复记录。
- 银行同步:通过 SimpleFIN Bridge(付费服务)连接银行账户,获取只读交易流。Ledgerline 从不接触银行凭证,也无法移动资金。首次同步时会提示将每个银行账户映射到本地标签。
- 定期付款检测:自动识别周期性扣款和订阅。
- AI 代理访问(MCP):作为本地 stdio MCP 服务器运行,暴露只读工具,包括:数据新鲜度、交易搜索、支出汇总、周期对比、账户余额、即将到来的支付,以及受限 SQL 查询。此外还有少量本地元数据写入工具,支持从聊天中完成日常维护,例如:“我刚报名了一个每月 850 美元的课程,跟踪它”、“我取消了 Netflix”、“这笔消费是商务旅行,不是餐饮”、“将这张卡标记为商务”。
- 精确计算:所有金额使用整数分,按货币分别汇总,绝不混合。
- 本地元数据:账户上下文(个人/商务/混合/未知、所属实体、商务用途百分比、自由备注)持久化在 SQLite 中,并随每个 MCP 结果传递。
使用方式
90 秒演示
仅需安装 uv。运行 ledgerline demo 会生成六个月的虚构交易数据,并打印可复制粘贴的一行命令,将 MCP 服务器连接到 Codex 或 Claude Code。然后可以询问:“接下来有哪些定期扣款?”或“为什么上个月这么贵?”演示拒绝写入已有交易的数据库。评估完成后,删除 data/ledgerline.db 即可重新开始。
真实数据快速开始
- 银行同步:在 https://bridge.simplefin.org 注册 SimpleFIN Bridge,关联银行,在账户页面创建新应用获取一次性设置令牌。运行
ledgerline connect存储访问 URL 在~/.config/ledgerline/simplefin.env(仅所有者可读)。首次同步会提示映射账户。 - 文件导入:从银行网站下载 CSV/OFX/QFX 导出文件,运行
ledgerline ingest <文件>。数据库位于data/ledgerline.db(已 gitignore),可用--db或LEDGERLINE_DB覆盖。
无需 API 密钥,两个可选嵌入 LLM 命令(categorize、ask)从环境读取 ANTHROPIC_API_KEY,其他一切无需密钥。
AI 代理访问(推荐)
运行本地 MCP 服务器。重启客户端后,可以询问:“一月份我在餐饮上花了多少?”或“接下来有哪些定期扣款?”从代码检出运行时,将命令指向 /path/to/ledgerline/.venv/bin/ledgerline-mcp 而非 uvx。
通过 AI 代理设置
除人类专属步骤外(SimpleFIN 注册、关联银行、创建设置令牌),其他步骤均可非交互执行。人类只需将一次性设置令牌交给代理。令牌单次使用,connect 后失效。最终访问 URL 仅存于本地磁盘,从不进入模型上下文。
适用场景
- 希望 AI 代理帮助分析个人财务,但不愿将数据上传到云端的用户。
- 需要精确、只读的财务查询接口供 AI 代理使用的开发者。
- 希望本地管理交易记录、检测订阅和定期扣款,并通过自然语言与数据交互的场景。
限制
- 银行同步依赖 SimpleFIN Bridge(付费服务),且需该服务支持您的银行;不支持的机构可继续使用文件导入,混合模式受支持。
- MCP 路径无需 Anthropic API 密钥,代理自行完成分类;但内嵌的
categorize和ask命令需要ANTHROPIC_API_KEY。 refresh_data工具从 SimpleFIN 拉取频率限制为每小时最多一次。- 跨来源去重匹配原始描述字符串,仅在两个来源导出相同描述时有效(同一机构的 OFX/SimpleFIN 通常如此)。
run_sql只允许单条 SELECT/WITH 语句,有 200 行上限、5 秒超时等安全限制。- 账户号码在解析时丢弃,模型无法看到;数据库文件删除后所有痕迹消失。
安全不变量
- 数据文件(
data/、*.db、*.csv、*.ofx、*.qfx、.env、analysis/、*.ipynb)从首次提交即被 gitignore。 - OFX 读取器和 SimpleFIN 连接器在解析时丢弃
ACCTID/BANKID类字段,仅用短标签标识账户。 run_sql使用只读连接(mode=roURI)、单语句 SELECT/WITH、关键字黑名单、SQLite 授权器拒绝除读取外的一切操作、200 行上限、5 秒时间限制、语句/结果大小限制。字面量和注释在关键字扫描前剥离。- SimpleFIN 访问 URL 仅从环境变量或 0600 配置文件读取,要求 HTTPS,拒绝 HTTP 重定向。
- 新数据库文件以 0600 权限创建。
ANTHROPIC_API_KEY仅从环境变量读取。
贡献银行配置
如果银行 CSV 无法自动检测,可在 ledgerline/ingest/profiles.py 的 PROFILES 中添加一个字典(约 10 行)。OFX/QFX 无需配置。请包含虚构的 CSV 测试夹具和验证符号约定的测试。