moneylover-kit
非官方的 钱的情人 客户端、CLI和MCP服务器。全 交易CRUD,贷款和文档化API -从您的电子邮件和密码, 没有别的东西可以设置。
与Money Lover或Finsify无关。Money Lover没有公共API;这 与自己的应用程序使用的相同端点进行通信。
为什么存在这个
其他Money Lover客户端可以创建和读取交易。他们都不能 更新 或者 删除 一,因为连线格式是一个完全替换- a 天真编辑默默地擦除人物、事件、排除报告标志 并且提醒贴在行上。这将重建实时的每个写入 行,因此编辑只更改您要求它更改的内容。
它还记录了花费实时时间来解决的部分:为什么是错误的 类别id挂起两分钟而不是错误,为什么空结果没有 一个空的账户,以及为什么登录两次会让你退出自己的手机。 看到 文档/ traps.md.
安装
npm install -g @notsuhas/moneylover-kit # or npx @notsuhas/moneylover-kit
要从源代码运行它,请克隆并构建
npm install -g github:notsuhas/moneylover-kit 做 不 工作,因为NPM
在准备git依赖时跳过devDependencies,并且没有编译器
构建:
git clone https://github.com/notsuhas/moneylover-kit && cd moneylover-kit
npm ci && npm run build && npm install -g .
然后设置你的证书:
export MONEYLOVER_EMAIL="[email protected]"
export MONEYLOVER_PASSWORD="…"
命令行界面
moneylover login # once — mints and caches a token
moneylover wallets # names and balances
moneylover categories # what you can write to
moneylover list --note coffee --from 2026-01-01 --limit 10
moneylover add --wallet Cash --category Groceries --amount -480 --note "DMart"
moneylover edit <id> --note "DMart, cleaning supplies"
moneylover rm <id>
钱包和类别:
moneylover add-wallet --name Travel --currency 11
moneylover add-category --name Supplements --all-wallets --parent "Health"
moneylover edit-category --category Supplements --name Vitamins
moneylover rm-category --category Vitamins
--all-wallets 和 --parent 需要 --backend mobile:一个跨越的类别
每个钱包,或者在另一个钱包下面,都生活在一个web API没有的层中
模型。
数量是 签署: -480 是花, 4500 是获得。金钱爱好者商店
类别的方向而不是数量,所以这是一个不一致的标志
这一分类被拒绝,而不是悄然纠正。
--json 在任何命令上给出机器可读的输出。
贷款
Money Lover用自己的四种系统分类来追踪人们之间的金钱往来。 这样一来,应用程序的债务视图就能看到你记录的内容:
moneylover lend --person Sam --amount 5000 --wallet Savings
moneylover collect --person Sam --amount 3000 --wallet Current --parent-id ORIGINAL_LOAN_ID
moneylover lending
person lent collected outstanding you owe
Sam 5000.00 3000.00 2000.00 0.00
Jordan 800.00 800.00 0.00 450.00
钱包是一条腿,所以从一个账户贷款,然后还到另一个账户
不同的一个是正常的-余额被跟踪到 人,而不是。
帐户。 borrow 和 repay 是你所欠钱的镜子。集合和
需要还款 --parent-id 指向最初的贷款或债务。分裂一个
必要时跨原件付款;独立偏移量被拒绝,因为
他们打开应用程序的原始记录。
MCP服务器
两个传输。两者都暴露了相同的工具: list_wallets, list_categories,
list_events, search_transactions, add_transaction, edit_transaction,
delete_transaction, record_lending, lending_summary.
管理钱包、分类和活动是可选的,在两个标志后面:
MONEYLOVER_MCP_ALLOW_STRUCTURE=1 用于创建和编辑它们,以及
MONEYLOVER_MCP_ALLOW_DELETE=1 用于 delete_wallet 和 delete_category. 一个
Rename可以输入;删除钱包会获取其中的每笔交易
这两个API都没有撤消,这就是为什么它是自己的开关。
本地,用于克劳德桌面/光标 -添加到您的MCP配置:
{
"mcpServers": {
"moneylover": {
"command": "npx",
"args": ["-y", "-p", "@notsuhas/moneylover-kit", "moneylover-mcp"],
"env": {
"MONEYLOVER_EMAIL": "[email protected]",
"MONEYLOVER_PASSWORD": "…"
}
}
}
}
远程,通过HTTP -在某个地方运行它并指向一个客户端
MCP_TOKEN=$(openssl rand -hex 32) moneylover-mcp-http # POST /mcp, GET /health
它拒绝在没有的情况下启动 MCP_TOKEN. 这个端点可以创建和删除
真实账户的交易;未经身份验证的端口永远不是正确的
违约。
在码头工人 ——一个 Dockerfile 和 compose.yaml 都在回购中:
cp .env.example .env # email, password, and an MCP_TOKEN
docker compose up -d # POST localhost:8790/mcp
在…上装某事 /config,与撰写文件一样。这就是
令牌缓存存在,如果没有它,每次重新启动都会花费一个帐户的时间
设备槽。
完整的设置说明,包括如何阻止代理执行某些操作 不可逆转的: 文档/ mcp.md.
图书馆
import { createClient } from "@notsuhas/moneylover-kit";
const ml = createClient();
await ml.wallets();
await ml.transactions({ note: "coffee", from: "2026-01-01" });
await ml.addTransaction({
wallet: "Cash",
category: "Groceries",
amount: -480,
});
await ml.lending("Sam");
CLI和MCP服务器都是薄薄的一层,所以它们不能这样做 图书馆做不到的任何事。
一次移动会话
当配置Android OAuth客户端时,每个正常的读取和事务 或类别编写使用移动API。钱包余额的推导完全为 应用程序派生它们:将同步的行以整数小单位求和并排除 future-dated事务。结果匹配了每个钱包的web API Live 11,239行帐户。
钱包过滤新鲜搜索和普通收据重复检查/读回
获取受影响钱包的最新完整快照,使用Android
应用程序的 account_id 请求过滤器。收据余额重复使用经过验证的钱包
快照。此快速路径不使用交叉调用TTL或增量游标,因此
外部编辑和删除在下一次操作中仍然可见。
全账户审计和关联贷款/债务验证保留完整的 和解。中断拉重新开始;部分页面 永远不要成为一个完整的快照。钱包范围内的读取不能取代其他读取 钱包。
启用移动:
export MONEYLOVER_MOBILE_CLIENT="…"
export MONEYLOVER_MOBILE_SECRET="…"
这些是Android应用程序自己的凭证,硬编码在它的每个副本中。他们 不是你的秘密,但它们不在这里公布——一个可搜索的公众 复制是让他们轮换的原因,这会破坏每个非官方客户 一次。 文档/ api.md 解释如何获得它们。
没有这两个价值,客户端显然是失败的;它永远不会落在网上
登录。 --backend web 仍然是一个明确的诊断逃生舱口。钱包
创建、重命名和删除也使用移动同步协议。
使用 MONEYLOVER_MOBILE_TOKEN 如果您直接提供令牌。通常情况下,
缓存的旋转刷新令牌更安全,因为它可以自我更新。
在你开始之前要知道一件事
Money Lover账户只允许少量设备同时持有代币 目前是五个,而且每次登录都会注册另一个。 没有东西被踢 当你达到极限时关闭;相反, 下一个 登录被拒绝,提示“Maximum。 已达到设备限制。请退出以继续。”所以你不会丢失数据 完全失去登录的能力,包括在更换的手机上,直到你 从您仍然拥有的设备注销。
这就缓存了你的令牌 ~/.config/moneylover-kit/ 并更新它
不需要注册另一个设备,所以服务维护自己没有
进一步的登录。移动路由是非标准的:Android应用程序发送一个空路由
身体 oauth.moneylover.me/refresh-token 使用刷新令牌为Bearer
身份验证。
集 MONEYLOVER_ACCESS_TOKEN 直接提供令牌而不登录。
环境
MONEYLOVER_EMAIL · MONEYLOVER_PASSWORD | 凭证 |
MONEYLOVER_ACCESS_TOKEN | 使用此令牌,永远不要登录 |
MONEYLOVER_BACKEND | 力 web 或者 mobile |
MONEYLOVER_MOBILE_CLIENT · MONEYLOVER_MOBILE_SECRET | 移动后端需要 |
MONEYLOVER_CONFIG_DIR | 令牌缓存在哪里 |
MCP_TOKEN · MCP_PORT · MCP_HOST | HTTP MCP传输 |
MONEYLOVER_MCP_ALLOW_STRUCTURE | MCP:钱包/类别/事件写入 |
MONEYLOVER_MCP_ALLOW_DELETE | MCP:删除钱包/类别 |
文档
- 文档/ api.md -两个api:验证,端点,项目形状
- 文档/ traps.md ——所有需要花一天时间才能完成的事情
- 文档/ mcp.md -将MCP服务器连接到客户端
- 规范/ - OpenAPI规范的web API,加上观察到的模式
贡献
看到 CONTRIBUTING.md. npm run verify 运行类型检查,lint,
格式化和代码库健康门。
执照
麻省理工学院。用在你自己的账户上。
交易时间
编写工具接受可选 dateTime 而不是 date例如:
"2026-10-19T11:10:00+09:00" 日本时间11:10打印的收据使用一个
完整的ISO时间戳,带秒和任选其一 Z 或显式的UTC偏移量。不
发送两个字段。只有日期的调用保持它们现有的行为;省略字段
在编辑保存节省的时间。对应的CLI是
--date-time '2026-10-19T11:10:00+09:00'. MCP事务结果包括
dateTime 当时间戳可用时。
NPM可信发布设置
发布工作流使用GitHub OIDC而不是 NPM_TOKEN. 配置一个
在这个GitHub库的npm包上安装可信的发布者
release.yml,允许直接发布,不受环境限制。
保持 repository.url 与存储库保持一致。新配置的发布者
必须在两天内完成成功发布,否则NPM将过期。
如果在包读取工作时发布返回E404,请检查包是否受信任 替换令牌之前的发布服务器配置和存储库元数据。通过 CI没有验证npm发布授权;验证发布作业本身。
持久的MCP读取
MCP读取工具现在返回本地SQLite快照与显式 sync 元数据。
通过 fresh: true 查看审计或最新的上游状态。一个陈旧的阅读开始了。
背景和解;收据写入和验证总是使用新的API
读取。这减少了提供者的重复调用,而不会带来网络延迟。
要求节点为22.13+。看到 MCP缓存 对于迁移,响应
形状变化、恢复和私有体积要求。