关于 Saybooks
Saybooks 是面向家庭和企业的开源 ERP,让 Agent 与用户通过同一套命令、规则和审计记录操作。其 MCP 工具覆盖对账单、账单、贷款、发票和库存等记账领域,并设有权限声明和仅限人工审批的关卡。
主要功能
- 01涵盖记账与业务的十四个模块
- 02界面与 Agent 共用命令和规则
- 03写入记录操作者及原因
- 04基于角色的权限与人工专属操作
- 05核对对账单并保留行来源
适用场景
- 01跟踪家庭账户、账单和贷款
- 02将银行对账单与记录核对
- 03管理发票、订单和库存
- 04准备期间或纳税年度记录
MCP 相关
Saybooks 通过 Streamable HTTP 上的 MCP 或本地 stdio 服务提供按模块划分的工具。客户端可连接工作区,可用工具由配置的模块决定。
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
https://saybooks.io/mcpclaude mcp add --transport http alviso-saybooks https://saybooks.io/mcp{"mcpServers":{"alviso-saybooks":{"type":"http","url":"https://saybooks.io/mcp"}}}在 Cursor 中打开{"servers":{"alviso-saybooks":{"type":"http","url":"https://saybooks.io/mcp"}}}在 VS Code 中打开{"mcpServers":{"alviso-saybooks":{"type":"http","url":"https://saybooks.io/mcp"}}}{"mcpServers":{"alviso-saybooks":{"serverUrl":"https://saybooks.io/mcp"}}}命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。
工具
详细介绍
Saybooks
可以与你对话的书籍。始终保持书籍本色。
Saybooks 是一个开源 ERP,Agent 和界面属于同一个系统:一套命令注册表、一套规则手册、一条审计记录。让 Claude 导入卡账单、开具发票或发货,也可以直接点击按钮:执行的是同一条命令,遵循同一套规则,并记录相同的操作人和原因。
适用于家庭:saybooks.io/personal。把银行和信用卡账单交给 Agent,它就会管理账户、信用卡、抵押贷款和汽车贷款、账单与收据,并生成年度税务汇总。无需银行数据流,也无需银行密码:只有当账单中的行项目加总后与印刷的余额一致时,才会录入账单。支持任何银行、任何货币。查看一个虚构家庭,无需注册;连接 https://saybooks.io/mcp/household,或观看五集系列视频。
在线体验:saybooks.io。无需注册即可试用演示版,也可以使用 Google 登录并选择账簿包含的模块。将 https://saybooks.io/mcp 添加为连接器,即可连接 Claude(使用 OAuth,无需粘贴密钥);同一套账簿也会以普通页面的形式显示在浏览器中。
观看:Saybooks 流程演示,五段简短视频,均基于演示账簿实时录制:采购订单与收货、库存价值、月末结账、银行对账和销售税。
目前共有十四个模块,每个模块都以规范为先,并配有可执行的一致性测试场景:
| 模块 | 适用对象 | 保留内容 |
|---|---|---|
| solo(开票) | 自由职业者 | 客户、带链接和 PDF 的发票、收款、未结款项;支持任意币种和你的税务方案 |
| o2c(订单到收款) | 小型企业 | 报价、订单、发货、发票、应收款,以及 Agent 无法绕过的信用审核关卡 |
| crm | 小型企业 | 营销活动、客户、带来源信息的联系人、缺口、销售管道;由 Agent 撰写、由人发送的外联草稿;带来源信息和日历的活动 |
| prospect | 任何拥有购买名单的人 | CRM 前的暂存区:Agent 整理并评估名单行,只有人才能将其转入 CRM |
| jobhunt | 求职者 | 职位发布、申请、面试、招聘人员、防重复机制,以及一个下一步行动 |
| p2p(采购) | 采购库存的小型企业 | 按供应商价格创建的采购订单、与订单对应的收货记录,以及在人员批准付款前通过三方匹配审核的供应商账单 |
| inventory(库存) | 持有库存的小型企业 | 记录每次库存变动、移动平均成本、每次发货的成本和利润率、带原因的盘点,以及与账簿相符的库存价值 |
| purchases(个人财务) | 任何人 | 账户和净资产、账户间转账、信用卡应付金额、利息和退款、预期账单、自动付款和到期款项、已报销的工作支出、税务标签和年度信息;由 Agent 读取的银行和信用卡对账单及收据:带来源信息的行、审核、订阅、支出 |
| bankrec(银行对账) | 会计师会问“银行账能对上吗?”的任何人 | 每份对账单与账簿逐项核对、与已记录付款匹配的存款、明确标记的在途项目,以及由人员签署的确认 |
| loans(个人财务、贷款) | 有房贷或车贷的任何人 | 贷款方提供的数字、每笔付款拆分为本金、利息和托管款、欠款金额和还清时间、每年的利息,以及与贷款方数据的核对 |
| salestax(销售税) | 收取销售税并申报的任何人 | 根据开票和贷项信息生成的月度或季度申报表、由人员记录的申报、付款,以及相符的负债 |
| gl(月末结账) | 任何需要结账的人 | 结账清单、借贷平衡且可冲销的调整分录、停止变动的已结期间,以及在下一个开放期间进行的更正 |
| bridge(账簿) | 有会计师的任何人 | 移交至 QuickBooks、Xero 或普通 CSV:一次性映射对方的科目表、导出一个期间,并记录导出了哪些内容以及截至何时 |
| core | 每个空间 | 客户、商品、公司资料、搜索、审计、设置 |
为什么要构建它
“对话式 ERP”通常是指在一个不了解 Agent 存在的系统上加装聊天层。Saybooks 反其道而行:每项业务操作都只声明一次,其他所有内容都从该声明派生而来:
| 派生内容 | 目的 |
|---|---|
| MCP 工具(名称、原则、JSON Schema、注释) | Agent 看到的内容与 UI 能执行的操作完全一致 |
| UI 表单(字段、控件、验证) | 人看到的内容与 Agent 能执行的操作完全一致 |
| 守卫评估 | 灰显按钮的工具提示、抛出的拒绝信息和 Agent 的回答是同一句话,并由测试断言 |
| 审计记录 | 来自任一界面的每次写入都会进入同一日志,并记录操作者和原因;拒绝操作也包括在内 |
注册表之外的任何内容都不能调用处理程序。点击和工具调用都会经过相同的命令、相同的守卫和相同的事务。两种界面不会出现偏差,因为它们都不是手动编写的;如果有人尝试这样做,test/contract.test.js 就会导致构建失败。
Agent 优先,而非解析器优先:涉及文件时(例如对账单、收据),由 Agent 读取文件并交付读取结果;模块会检查控制总额、保留每一行的来源信息,并拒绝无法核对一致的内容。无需维护银行解析器。
内容
src/registry.js declare once; derive tools, forms, guards, audit; enforce
src/workspace.js a SQLite database per space (per person, per sandbox)
src/members.js capability-token identity: named members with roles
src/oauth.js OAuth 2.0 front door for MCP clients (DCR, client-id metadata documents)
src/mcp-http.js MCP over streamable HTTP; one tool list per space's modules
src/document.js the invoice document: one PDF renderer, previewed as its own pages
src/modules/core, o2c, crm, prospect, jobhunt, solo, purchases, bridge
specs/<area>/spec.md the area spec: calibration, entities, invariants, read models
specs/<area>/scenarios/ executable conformance scenarios (refusals are contract)
src/conformance.js replays scenarios through the real registry; keeps evidence
server.js workbench + hosted demo + MCP + OAuth (all one registry)
mcp-server.js stdio MCP for local development
test/contract.test.js the 24-gate contract (see below)
test/smoke.mjs every workbench view and detail panel rendered in headless Chrome
test/local/ plain-language scripts run against a local model, checked in the database
访问控制:每条命令都声明一个权限标签;设有四种角色(所有者 / 控制者 / 文员 / 查看者);在注册表的关键节点执行权限检查;拒绝请求时会以一句话说明理由,并记录日志。通过成员密钥连接的 Agent 是该成员的代理:使用该成员的姓名和权限。每次写入都必须附带原因;读取操作从不记录日志。
资金在任何地方都以整数最小货币单位表示,并注明币种;金额合计按币种分别计算,不会跨币种汇总。绝不凭空捏造信息:缺少金额、日期或姓名时会询问,绝不猜测。
24 项门槛契约
每个模块——无论现有还是未来的——都必须满足以下要求:MCP/UI 一致 · 命名空间前缀 · 每次写入都遵循准则 · 声明防护条件 · 表所有权(不得跨模块写入)· 工具预算 · 模块挂载 · 一句话规则 · 审计行为 · 夹具重放 · 规范符合性(实现声称支持某个领域时,必须映射该领域的每项操作并通过所有场景)· 权限(未设置权限的命令不得发布)· 规范版本(模块实现其操作文件声明的版本)· 仅限人工操作(某个字段或整个操作必须由人完成;无论角色如何,Agent 都会被拒绝执行)· 入口(暂存行由 Agent 审核,且只能由人批准)· 声明门槛(活动可以宣称什么由人设定,编辑时会进行约束)· 账单(只有人可以批准付款;付款发生后才记录,并关联与之匹配的对账单行)。
最终目标是针对同一领域提供相互竞争的实现,并通过重放相同的场景文件进行认证——规范以操作而非命令为准,因此任何符合规范的模块都能运行这些操作。
运行
npm install
npm test # the 24 gates
npm run smoke # every workbench view and panel, in headless Chrome
npm run local -- --model <id> --script plain-invoicing --instructions off # a local model, plain prompts
npm run demo # a full quote-to-cash run, human and agent interleaved
npm start # workbench on http://127.0.0.1:8140
npm run mcp # stdio MCP server (OTC_WORKSPACE=you)
注册 Claude Code 会话:claude mcp add saybooks-local -e SAYBOOKS_WORKSPACE=$USER -- node <path>/mcp-server.js
本地模型
Saybooks 是一个普通的 MCP 服务,因此本机上的模型可以记账,且不会有任何内容离开本机。在配备 32 GB 内存的笔记本电脑上,使用 LM Studio 中的 Gemma 4 26B A4B 进行了测试:仅凭普通语句、不加引导,即可完成完整的发票流程和对账单流程。在 LM Studio 的 mcp.json 中:
{ "mcpServers": { "saybooks": {
"command": "/usr/local/bin/node",
"args": ["/path/to/saybooks/mcp-server.js"],
"env": { "SAYBOOKS_WORKSPACE": "main", "SAYBOOKS_MODULES": "core,solo", "SAYBOOKS_ACTOR": "gemma-4" }
} } }
SAYBOOKS_MODULES 用于选择模型可见的工具(core,solo 有 35 个工具;core,purchases 有 60 个;全部十四个模块共有 236 个工具,对小型模型来说太多了)。加载模型时使用一个并发槽位。相关耗时,以及为此对工具进行的六项修复,详见 saybooks.io/notes/local-models;用于测量性能的纯语言测试框架可通过 npm run local 运行。
坦诚说明限制
每张发票可以使用任意币种,但币种之间不进行换算(总额按币种分别计算);每个空间仅支持一家公司;没有税务引擎(税率会按行记录并冻结;税务判定由集成负责);不执行任何对外操作:Saybooks 不会给客户发邮件、扣款或预订货运,只记录已发生的事情。账本交接会为 QuickBooks Online 和 Xero 写入导入文件;不会通过它们的 API 发布数据。各领域的延期事项清单及原因,见 specs/ 下的规范。
许可证
AGPL-3.0-only。版权所有 (C) 2026 Peter Varga。 如果你将修改后的 Saybooks 作为服务运行,就要分享你的修改——这就是约定。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。