mcpField
M
Money Lover

Money Lover

本地服务
github.com金融数据03 天前更新

关于 Money Lover

moneylover-mcp 是一个非官方 stdio 服务,让 AI Agent 和聊天机器人访问 Money Lover 账户数据。它可读取钱包、分类和交易;修改交易需主动开启,并受服务端限制保护。

主要功能

  1. 01列出钱包、分类和交易
  2. 02按分类汇总支出
  3. 03添加、更新或删除交易
  4. 04要求明确启用写入模式
  5. 05按钱包、金额和频率限制写入

适用场景

  1. 01让 Agent 查看余额和交易
  2. 02汇总指定日期范围的支出
  3. 03启用写入后更正或删除交易

MCP 相关

该服务通过 stdio 与 MCP 客户端通信,并提供读取和交易写入工具。只有设置 MONEYLOVER_ALLOW_WRITE=true 后,写入工具才会执行。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

暂未收录安装方式

我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。

代码仓库
安装包
mcpbmoneylover-mcp-darwin.mcpb
mcpbmoneylover-mcp-linux-x86_64.mcpb
mcpbmoneylover-mcp-linux-aarch64.mcpb
mcpbmoneylover-mcp-windows-x86_64.mcpb

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

moneylover-mcp

CI Security audit OpenSSF Scorecard MCP Registry Glama

一个 MCP 服务,可让 AI Agent 或聊天机器人读取你的 Money Lover 数据;如果你允许,还能添加、更正和删除交易。它通过 stdio 与客户端通信。

免责声明——请阅读。 本项目为非官方项目,与 Money Lover 及其所有者没有关联,也未获得其认可或支持。 “Money Lover”是其所有者的商标,此处仅用于说明本软件连接的服务。 Money Lover 没有公开 API。本工具使用与 Money Lover 网页应用相同的未公开 Web 端点,这些端点是根据公开的开源项目逆向分析得出的。它们可能随时更改或失效,使用这些端点也可能违反 Money Lover 的服务条款(我们无法核实相关条款)。 使用本软件的所有风险均由你自行承担,包括账户受限、数据丢失或错误,以及交易错误的风险。本软件依据 MIT 许可证按“原样”提供,不提供任何形式的担保。请备份数据,并先在临时钱包中试用。

信任模型

在授予此服务访问财务账户的权限前,审阅者应了解以下事项。每项声明均由代码落实,并在 CI 中检查,而非仅停留在文字说明。

声明落实方式
令牌拥有完整访问权限;只读限制由服务强制执行。 Money Lover 不提供受限或只读令牌。写入工具始终会列出,但只有在 MONEYLOVER_ALLOW_WRITE=true 时才会执行操作;启用后,服务端保护机制会限制其行为(安全性)。
网络出口仅连接到 Money Lover:web.moneylover.me 和 oauth.moneylover.me,且仅使用 HTTPS。不进行遥测、不检查更新,也不连接其他主机。端点为编译时常量,无法通过环境变量更改;永远不会跟随重定向。如果源代码中出现其他 URL,tests/egress.rs 会导致检查失败。
凭据保留在本地。 密码仅用于登录,不会存储;令牌保存在权限为 0600 的文件中;不会记录任何机密信息,也不会将其返回给 AI。src/token_store.rs、会隐藏敏感信息的 Debug 实现以及相关测试。
依赖项已锁定并经过审查。全程使用 Cargo.lock 和 --locked;cargo-deny 仅允许 crates.io 来源和宽松许可证,并会在 RustSec 安全公告或已撤回的 crate 出现时失败(每周及变更时检查);GitHub Actions 均固定到提交 SHA;使用 Dependabot。
发布的二进制文件均由此代码库构建。每个发布压缩包都有签名的 SLSA 构建来源证明(gh attestation verify)和一条 SHA256SUMS 记录。
已发布的捆绑包与此代码库及此域名绑定。官方 MCP Registry 中的条目使用经 DNS 验证的命名空间 com.iyongbudiarso/moneylover-mcp;每个 .mcpb 的哈希都记录在该版本的 server.json 中,且每个捆绑包都附带与压缩包相同的构建来源证明。

工具

工具功能是否需要写入模式
list_wallets列出钱包及其币种和余额(refresh: true 可获取实时余额)否
list_categories列出收入/支出类别,可查询整个账户或单个钱包否
list_transactions列出指定日期范围内的交易,按时间从新到旧排列(limit 默认为 50,最大为 200)否
summarize_spending按币种分组,汇总指定日期范围内各类别的金额否
add_transaction创建交易;支持 dry_run是
update_transaction修改交易的类别、金额、备注或日期;支持 dry_run是
delete_transaction删除交易;支持 dry_run是

对大模型使用有重要影响的设计选择:

  • 钱包和类别均通过名称指定,而非 ID。匹配区分大小写;如果名称未知或有歧义,会返回列出候选项的错误,而不会猜测。
  • 金额始终为正数。收入或支出由类别决定。如果某个类别名称同时适用于收入和支出(例如“Other”),请传入 type。
  • 金额以十进制字符串返回,不会使用浮点数。
  • 日期格式为 YYYY-MM-DD,采用你配置的时区。每次调用的日期范围最多为 366 天;写入工具接受从一年前到一个月后的日期。
  • update_transaction 和 delete_transaction 需要传入 list_transactions 返回的 id、wallet 和 date(Money Lover 无法仅凭 ID 查找交易)。更新只会修改你传入的字段,其余内容均保持不变,包括照片、位置、事件、人员和“从报告中排除”标记。不支持将交易移至其他钱包:请先删除,再重新添加。转账、债务和贷款与其他交易关联,因此会被拒绝;请在应用中修改。
  • summarize_spending 会跳过标记为“从报告中排除”的交易;list_transactions 仍会列出这些交易,因此两者不会出现不易察觉的结果差异。
  • 如果未指定 wallet,list_transactions 和 summarize_spending 会涵盖所有钱包,包括已归档的钱包和从 Money Lover 总额中排除的钱包。Money Lover 自带的“所有钱包”查询会排除这些钱包,且最多返回 9,999 条记录,因此服务会分别查询这些钱包(达到 9,999 条记录上限时,会逐个查询每个钱包)。这类钱包较多的账户需要更长时间;如果只需要查询一个钱包,请传入 wallet。如果指定范围内单个钱包的交易数量达到或超过 9,999 条,会报错并提示缩短日期范围,而不会静默地返回不完整列表或总额。
  • 写入工具始终会列出,因此客户端及其安全扫描器可以看到所有可用功能;但如果未设置 MONEYLOVER_ALLOW_WRITE=true,所有调用都会在访问网络前被拒绝。有关写入操作的限制,请参阅安全。
  • 钱包和类别会缓存在内存中(默认 5 分钟),因为大型账户的钱包列表可能需要 30 秒以上才能加载。写入交易会清除缓存的余额;如果名称不在缓存中,则会触发一次重新获取(因此可以找到刚创建的钱包);list_wallets 会报告 from_cache,让 Agent 知道余额可能已过时。在 Money Lover 应用中所做的更改,会在缓存过期后显示,或通过 refresh: true 立即获取。

安装

预构建二进制文件(无需 Rust)

从最新发布版本下载适用于你平台的压缩包:

平台压缩包
macOS,Apple Siliconmoneylover-mcp-<version>-aarch64-apple-darwin.tar.gz
macOS,Intelmoneylover-mcp-<version>-x86_64-apple-darwin.tar.gz
Linux x86_64(glibc 2.35+)moneylover-mcp-<version>-x86_64-unknown-linux-gnu.tar.gz
Linux ARM64(glibc 2.35+)moneylover-mcp-<version>-aarch64-unknown-linux-gnu.tar.gz
Windows x86_64moneylover-mcp-<version>-x86_64-pc-windows-msvc.zip

运行前请先验证。每个发布版本都附有 SHA256SUMS,且每个压缩包都带有已签名的构建来源证明,证明它是由此仓库的发布工作流构建的:

shasum -a 256 -c SHA256SUMS --ignore-missing          # Linux: sha256sum --check --ignore-missing SHA256SUMS
gh attestation verify moneylover-mcp-*.tar.gz --repo Iyongbudiarso/moneylover-mcp

解压后,将 moneylover-mcp 放到 PATH 中的某个位置。这些二进制文件未经 Apple 或 Microsoft 证书签名。在 macOS 上,通过浏览器下载的文件会被 Gatekeeper 拦截;验证后,可使用 xattr -d com.apple.quarantine moneylover-mcp 放行。在 Windows 上,SmartScreen 可能会要求确认。

MCPB 捆绑包(适用于 Claude Desktop 和其他 MCPB 客户端)

支持 MCP Bundles 的客户端可以改为将服务作为扩展安装。从最新发布版本下载适用于你平台的 .mcpb 文件并打开,或将该文件提供给客户端:

平台捆绑包
macOS(Apple Silicon 和 Intel)moneylover-mcp-darwin.mcpb
Linux x86_64moneylover-mcp-linux-x86_64.mcpb
Linux ARM64moneylover-mcp-linux-aarch64.mcpb
Windows x86_64moneylover-mcp-windows-x86_64.mcpb

每个平台都有一个单独的捆绑包,因为捆绑包只包含一个可执行文件,而 MCPB 无法根据 CPU 架构选择可执行文件;macOS 捆绑包包含一个通用二进制文件。

客户端要求配置时,你可以输入 Money Lover 邮箱和密码(客户端会将密码保存在操作系统钥匙串中,服务会将其换成令牌,与 login 的处理方式完全相同),也可以将两项留空,然后使用预构建二进制文件运行一次 moneylover-mcp login——扩展会重复使用已保存的令牌。除非在扩展设置中启用,否则添加交易功能会保持关闭。

同一批捆绑包也列在官方 MCP Registry 中,名称为 com.iyongbudiarso/moneylover-mcp,并通过 iyongbudiarso.com 上的 v=MCPv1; … TXT 记录完成验证。支持 Registry 的客户端会检查每次下载的文件是否与其中记录的 SHA-256 值一致。这能证明条目的发布者身份,但不代表代码安全。请查看信任模型和源代码。

从源代码构建

你需要安装 Rust 工具链(1.89 或更高版本)。

cargo install --locked --git https://github.com/Iyongbudiarso/moneylover-mcp
# or, from a checkout:
cargo build --locked --release   # binary: target/release/moneylover-mcp

--locked 会使用 Cargo.lock 中的确切依赖版本进行构建;CI 会使用 cargo deny 审核这些依赖,而不是使用 crates.io 上最新的版本。

登录

请只在终端中登录一次。密码会在隐藏提示下输入,且绝不会保存;只会保存由此生成的令牌:

moneylover-mcp login

配置

所有配置均通过环境变量进行。

变量默认值含义
MONEYLOVER_TIMEZONEAsia/Jakarta日期使用的 IANA 时区
MONEYLOVER_ALLOW_WRITEfalse设置为 true,以启用 add_transaction、update_transaction 和 delete_transaction
MONEYLOVER_WRITE_WALLETS–以逗号分隔的钱包名称;设置后,写入操作仅针对这些钱包
MONEYLOVER_MAX_AMOUNT–设置后,超过此金额的操作将被拒绝
MONEYLOVER_MAX_WRITES_PER_HOUR20每滚动小时内新增、更新和删除操作的合计次数(1-1000)
MONEYLOVER_TOKEN_PATH~/.config/moneylover-mcp/token.json令牌的存储位置。必须是绝对路径
MONEYLOVER_CACHE_SECS300钱包和类别的缓存时长(设为 0 可禁用缓存)
MONEYLOVER_TIMEOUT_SECS45每个请求的超时时间(1-300)。Money Lover 的服务器可能响应较慢
MONEYLOVER_LOGinfo日志筛选级别。日志仅输出到 stderr
MONEYLOVER_EMAIL、MONEYLOVER_PASSWORD–仅用于无法运行 login 的无头环境;见下文
身份验证说明
  • 仅支持邮箱 + 密码账户。通过 Google、Facebook 或 Apple 登录创建的账户没有密码,无法通过此方式登录。
  • 一个 Money Lover 账户大约允许使用5 台设备,每次全新登录都会占用一个名额。服务器会将令牌存储在 token.json 中并刷新令牌(刷新不会占用名额)。多个 MCP 客户端可以安全地共用同一个令牌文件;访问操作会通过锁文件进行串行化。
  • 如果令牌无法再刷新,请重新运行 moneylover-mcp login。
  • moneylover-mcp logout 会删除本地令牌,并立即停止正在运行的服务器。令牌本身在过期前仍会在 Money Lover 中保持有效;如需撤销,请在 Money Lover 应用中移除该设备。无论哪种情况,共用该令牌文件的所有服务器都会停止,直到你再次运行 moneylover-mcp login;它绝不会在后台静默重新登录。
  • 密码错误时,每次服务器启动只会尝试一次,不会循环重试。
客户端配置示例

不要在配置中填写密码:请先运行 moneylover-mcp login。

{
  "mcpServers": {
    "moneylover": {
      "command": "/path/to/moneylover-mcp",
      "env": {
        "MONEYLOVER_TIMEZONE": "Asia/Jakarta"
      }
    }
  }
}

在 Zed 中,将相同内容放在 settings.json 的 context_servers 下:

{
  "context_servers": {
    "moneylover": {
      "command": "/path/to/moneylover-mcp",
      "env": { "MONEYLOVER_TIMEZONE": "Asia/Jakarta" }
    }
  }
}

如需允许 Agent 记录、更正和删除交易,请主动启用并限制其操作范围:

"env": {
  "MONEYLOVER_ALLOW_WRITE": "true",
  "MONEYLOVER_WRITE_WALLETS": "Cash",
  "MONEYLOVER_MAX_AMOUNT": "2000000"
}

无头服务器(例如容器或运行聊天机器人的 VPS)可以改为传入 MONEYLOVER_EMAIL 和 MONEYLOVER_PASSWORD;请使用平台的密钥存储,而不要将它们放在仓库中的文件里。

安全

不要提交包含凭据的 MCP 客户端配置文件。 Zed 的 settings.json 和 类似文件经常会出现在公开的 dotfiles 仓库中。

服务端保护账户安全的措施:

  • 凭据。 密码仅用于登录,不会被存储。令牌保存在 token.json 中,该文件在权限为 0700 的目录中以 0600 权限创建;如果其他用户可以读取令牌文件,服务端会将其权限收紧为 0600,若无法做到则拒绝使用。密码、令牌和 Authorization 标头绝不会出现在日志或工具输出中。在 Windows 上,文件权限取决于用户配置文件的默认权限。
  • 网络。 仅使用 HTTPS,证书通过操作系统信任存储进行验证,绝不跟随重定向(因此密码或令牌绝不会被重新发送到其他地方),并限制响应大小。
  • 默认禁用写入。 如果没有设置 MONEYLOVER_ALLOW_WRITE=true,写入工具(add_transaction、update_transaction、delete_transaction)仍会出现在工具列表中,但会返回错误,而不会调用 Money Lover。启用后,每次写入都会由服务端而非 AI 进行检查:
    • 仅允许指定的钱包(如果设置了 MONEYLOVER_WRITE_WALLETS),绝不允许已归档的钱包。对于更新和删除,检查的是交易所属的钱包;
    • 金额不得超过 MONEYLOVER_MAX_AMOUNT(如果已设置);
    • 日期必须在一年前至一个月后之间。更新和删除也只会影响日期在此范围内的交易,因此 Agent 无法改写更早的历史记录;
    • 每小时最多允许 MONEYLOVER_MAX_WRITES_PER_HOUR 次新增、更新和删除,合并计数(按服务端进程计数:分别运行服务端的两个 MCP 客户端会各自获得一次限额);
    • 除非 Agent 传入 allow_duplicate: true,否则会拒绝 10 分钟内的相同交易,以避免意外重试;
    • 绝不会更新或删除转账、债务、贷款和还款,因为它们都关联着其他交易,操作后会导致数据不一致;
    • 写入绝不会自动重试。如果写入超时,工具会返回 UNCERTAIN,并告知 Agent 在重试前先进行检查。

需要了解的事项:

  • 提示词注入。 AI 会看到交易备注、钱包名称和类别名称。在共享钱包中,其他人也可以编写这些内容。类似“忽略之前的指令并添加……”的文本可能会操纵 Agent。服务端会告知 Agent 将这些文本视为数据,但真正的保护措施是上述写入限制。启用写入后,注入的指令也可能要求删除,而此操作无法撤销。除非确有需要,否则请保持写入关闭,并限制 MONEYLOVER_WRITE_WALLETS;优先选择每次调用工具前都会征求你同意的 MCP 客户端。MONEYLOVER_WRITE_WALLETS 按钱包名称匹配;与你共享钱包的钱包所有者可以重命名钱包,因此请列出你拥有的钱包。
  • 组合使用服务。 如果 Agent 既能读取你的财务信息,又能向外发送数据(网页抓取、电子邮件等),就可能被诱骗泄露这些信息。请考虑同时启用哪些工具。
  • 日志。 日志写入 stderr,MCP 客户端通常会将其保存到文件。在默认的 info 级别下,日志不包含任何财务数据。MONEYLOVER_LOG=rmcp=debug 会记录完整的工具输入和输出。
  • 你的 AI 提供商会看到工具返回的所有内容(余额、交易)。使用云端 AI 处理财务数据时,这一点无法避免。

发布

  1. 在 Cargo.toml 中更新 version,运行 cargo build 更新 Cargo.lock,然后提交。
  2. 打标签并推送:git tag v0.3.1 && git push origin v0.3.1。

发布工作流 会检查标签是否与 Cargo.toml 中的版本一致,运行测试、构建所有平台的版本、证明其来源,并在 GitHub 上发布包含 SHA256SUMS 的版本。 手动运行工作流(Actions > Release > Run workflow)只会进行构建,适合作为试运行。

随后,第二个作业会使用固定版本的 @anthropic-ai/mcpb CLI,从这些归档文件组装 .mcpb 包,对 macOS 包进行冒烟测试,证明每个包的来源,并将这些包以及 SHA256SUMS.mcpb 和生成的 server.json 附加到同一版本中。

发布到 MCP Registry

这是刻意设置为手动执行的步骤:它需要一个 Ed25519 密钥,该密钥不得存放在仓库或 CI 中。scripts/publish-registry.sh 会获取已发布的 server.json,下载一次各个包并按 SHA-256 缓存;如果注册表令牌已过期(有效期为 5 分钟),则登录;重新检查每个哈希值;执行发布;最后通过注册表 API 确认新版本:

brew install mcp-publisher          # the registry's CLI, once
scripts/publish-registry.sh v0.4.0            # ~20 s cold, ~2 s warm
scripts/publish-registry.sh v0.4.0 --dry-run  # download + verify only

如果该版本已列出,脚本会立即停止,不会下载任何内容。包会缓存在 ~/.cache/mcp-publisher/<owner>__<repo>/<tag>/ 中,因此重新运行无需额外操作。

首次运行时,以及轮换密钥后,脚本头部会说明如何生成密钥,并将公钥部分放入顶级域名的 TXT 记录中;现在登录操作已包含在脚本中。

需要注意两点:已发布的版本不可变,因此应更新版本号,而不是重新构建标签;重新构建标签会生成不同的包字节(ZIP 时间戳不同),因此应在发布工作流运行后再发布注册表条目,且不要为已发布的标签重新运行工作流。

开发

cargo test                      # unit + end-to-end tests against a mocked Money Lover
cargo clippy --all-targets

实时测试会调用真实 API,默认跳过。先运行 moneylover-mcp login(或 cargo run -- login),然后:

cargo test --test live live_read_only -- --ignored --nocapture      # read only

# Optional write test: needs a wallet named exactly "MCP Test"
MONEYLOVER_LIVE_WRITE=1 MONEYLOVER_LIVE_CATEGORY="<an expense category in that wallet>" \
  cargo test --test live live_write -- --ignored --nocapture

之后请在 Money Lover 应用中删除测试交易。

对面向 Agent 的接口进行静态分析

snyk-agent-scan 会检查 AI 客户端实际看到的内容——工具描述、提示词注入面,以及硬编码的密钥。它不属于 CI 的一部分,因为它需要 Snyk 令牌,并会将工具名称和描述上传到 api.snyk.io,因此需要时请手动运行:

SNYK_TOKEN=… uvx [email protected] scan --ci \
  --dangerously-run-mcp-servers --suppress-mcpserver-io=true mcp.json

根据你的常规客户端配置生成 mcp.json(格式为常见的 {"mcpServers": {…}}),如果其中包含凭据,请勿提交。

许可证

MIT。请参阅 LICENSE。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。