关于 Lunch Money
LunchMoney MCP 服务让 Claude 等 MCP 客户端访问 LunchMoney 个人理财数据,支持通过对话查询消费、管理预算与分类,并进行交易的增删改查。项目提供 MCP Bundle 安装方式,并支持远程部署。
主要功能
- 01交易、分类、标签与预算的完整增删改查
- 02账户与 Plaid 银行账户的查询与同步
- 03加密货币与余额历史的管理
- 04按筛选条件查询交易并支持批量操作
- 05以 TOON 编码返回结果以减少 token 用量
- 06支持附件上传并可限制读取目录
适用场景
- 01通过对话查询月度消费与预算执行情况
- 02批量整理未分类交易或为交易添加标签
- 03查看净资产与账户余额的历史变化
MCP 相关
该项目是 MCP 服务,向 MCP 客户端暴露 LunchMoney API 的用户、交易、预算、账户等操作作为工具。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
npx -y @akutishevsky/lunchmoney-mcpLUNCHMONEY_API_TOKEN密钥Your LunchMoney API token. Obtain it from https://my.lunchmoney.app/settings/developerLUNCHMONEY_DEBUGSet to 'true' to enable debug logging of API requests and responses to stderr本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
工具
59收录的工具列表 · 更新于 3 周前
此工具无需参数。
详细介绍
LunchMoney MCP 服务
这是一个面向 LunchMoney 的 Model Context Protocol(MCP)服务实现,可通过 LunchMoney 的 API 以编程方式访问个人财务管理功能。也提供 MCP Bundle(.mcpb),便于在 Claude Desktop 中安装。
注意 — v3.0.0 移除了
get_all_crypto。 加密货币工具现在使用 LunchMoney 的 v2 加密货币端点,这些端点将手动持有和同步持有拆分为单独的资源,且没有与 v1 的GET /crypto等效的合并端点。请将get_all_crypto替换为get_all_manual_crypto和get_all_synced_crypto,两者合起来可返回原工具的全部内容,且更多。update_manual_crypto也移除了currency参数。加密货币领域之外没有任何变更;如果你不使用加密货币工具,从 2.x 升级无需采取任何操作。请参阅 CHANGELOG.md。如果你依赖get_all_crypto,请固定使用@akutishevsky/lunchmoney-mcp@^2.2.0。
注意 — v2.0.0 是一个破坏性更新。 此服务现在面向 LunchMoney 的 v2 API(
https://api.lunchmoney.dev/v2,目前处于 alpha 阶段)。它与此服务的 v1.x 版本不向后兼容:工具名称、字段和端点结构均已更改(例如,assets现在是manual_accounts,tags数组现在是tag_ids,交易的asset_id现在是manual_account_id,debit_as_negative开关已移除,预算摘要移至新的/summary端点)。完整列表请参阅 CHANGELOG.md。如果你依赖 v1.x,请固定使用@akutishevsky/lunchmoney-mcp@^1.4.3。
目录
概览
此 MCP 服务可让 AI 助手和其他 MCP 客户端与 LunchMoney 数据交互,从而实现自动化财务洞察、交易管理、预算编制等功能。
功能
全面的工具覆盖
- 用户管理 - 查看用户账户详情
- 分类 - 对分类和分类组进行完整的 CRUD 操作
- 标签 - 对交易标签进行完整的 CRUD 操作
- 交易 - 完整的 CRUD 操作,支持高级筛选、批量更新、批量删除、拆分、分组和文件附件
- 定期项目 - 跟踪和管理定期支出,包括系统建议的项目
- 预算 - 按周期查看预算摘要、设置账户级预算、执行新增或更新,以及删除预算
- 手动账户 - 对手动管理的账户(以前称为“资产”)进行完整的 CRUD 操作
- Plaid 账户 - 列出、获取已连接银行账户的信息,并触发同步
- 加密货币 - 对手动维护的加密货币余额进行完整的 CRUD 操作,读取并刷新已同步的加密货币账户,以及管理支持的加密货币列表
- 余额历史 - 读取、新增或更新及删除手动账户、Plaid 账户、加密货币账户和已删除账户的月度余额历史
主要功能
- 与 LunchMoney API v2(alpha)全面集成
- 使用 TypeScript 和 Zod 验证实现类型安全
- 使用 TOON 编码而非 JSON,提供节省 Token 的响应,减少 AI 对话中的 Token 用量
- 模块化架构,便于扩展
- 使用 stdio 传输的标准 MCP 服务实现
使用方法
安装选项
MCP Bundle(.mcpb)- 推荐
最简单的安装方式是在 Claude Desktop 中安装 MCP Bundle:
- 从 发布页面 下载最新的
.mcpb文件 - 打开 Claude Desktop 并进入 Extensions
- 点击“Install Extension”,然后选择下载的
.mcpb文件 - 根据提示输入 LunchMoney API Token(从 LunchMoney Developer Settings 获取)
- LunchMoney 工具将立即可用
Claude Code CLI
将 LunchMoney MCP 服务添加到 Claude Code:
claude mcp add lunchmoney --transport stdio -e LUNCHMONEY_API_TOKEN=your-api-token-here -- npx -y @akutishevsky/lunchmoney-mcp
启用调试日志:
claude mcp add lunchmoney --transport stdio -e LUNCHMONEY_API_TOKEN=your-api-token-here -e LUNCHMONEY_DEBUG=true -- npx -y @akutishevsky/lunchmoney-mcp
验证是否已添加该服务:
claude mcp list
claude mcp get lunchmoney
Codex CLI
将 LunchMoney MCP 服务添加到 Codex:
codex mcp add lunchmoney --env LUNCHMONEY_API_TOKEN=your-api-token-here -- npx -y @akutishevsky/lunchmoney-mcp
启用调试日志:
codex mcp add lunchmoney --env LUNCHMONEY_API_TOKEN=your-api-token-here --env LUNCHMONEY_DEBUG=true -- npx -y @akutishevsky/lunchmoney-mcp
验证是否已添加该服务:
codex mcp list
codex mcp get lunchmoney
手动配置 MCP
要将此 MCP 服务与任何兼容 MCP 的客户端(例如 Claude Desktop)配合使用,需要将其添加到客户端的配置中。
配置
可以在 MCP 客户端的配置文件中配置此服务。具体位置和格式可能因客户端而异,但通常遵循以下模式:
{
"mcpServers": {
"lunchmoney": {
"command": "npx",
"args": ["@akutishevsky/lunchmoney-mcp"],
"env": {
"LUNCHMONEY_API_TOKEN": "your-api-token-here",
"LUNCHMONEY_DEBUG": "true"
}
}
}
}
注意:
LUNCHMONEY_DEBUG为可选项。将其设置为"true",即可将 API 请求和响应的调试日志输出到 stderr。此选项有助于排查问题。
注意:
LUNCHMONEY_ATTACHMENTS_DIR为可选项。attach_file_to_transaction是唯一会读取本地文件系统的工具;上传前,它始终会验证文件确实为 JPEG、PNG、HEIC、HEIF 或 PDF 格式。将此变量设置为某个目录(例如~/Receipts文件夹),还可将访问范围限制为该目录内的文件;..和指向目录外部的符号链接都会被拒绝。若不设置此变量,服务可读取的任何路径都可以使用。对于本地 stdio 服务,这通常没有问题,但对于远程部署,则不建议这样做。
将 "your-api-token-here" 替换为你从 LunchMoney Developer Settings 获取的 LunchMoney API Token。
常见 MCP 客户端配置位置
不同的 MCP 客户端会将配置存储在不同的位置:
-
Claude Desktop:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json - Linux:
~/.config/Claude/claude_desktop_config.json
- macOS:
-
其他 MCP 客户端:请查阅客户端文档,了解配置文件的位置。
设置步骤
- 找到 MCP 客户端的配置文件(如果不存在,请创建)。
- 将 LunchMoney 服务配置添加到
mcpServers部分。 - 保存文件并重启 MCP 客户端。
- 现在应该可以在客户端中使用 LunchMoney 工具了。
要求
- 系统已安装 Node.js 16+
- 系统 PATH 中包含
npx - 具有适当权限的有效 LunchMoney API 令牌
独立服务
# Run with npx
LUNCHMONEY_API_TOKEN="your-api-token" npx @akutishevsky/lunchmoney-mcp
远程部署
捆绑的 stdio 二进制文件适用于桌面 MCP 客户端,但移动端的 Claude 和 claude.ai 中的自定义连接器功能只支持 HTTP。可通过两种方式远程提供此服务。
即用方案:Cloudflare Workers
lunchmoney-mcp-cloudflare 将此软件包封装为 Cloudflare Worker,并在 MCP 端点前配置 Google 登录和电子邮件允许列表。整个技术栈都能在 Cloudflare 和 Google Cloud 的免费额度内运行,setup.sh 向导会通过一步步的引导完成 KV 创建、OAuth 客户端设置、密钥配置和部署。每位通过身份验证的用户都在自己的 Durable Object 中运行,因此配置单例按用户隔离。
自托管:在自己的主机上使用 HTTP 传输
对于单用户部署,可将 createServer() 接入 StreamableHTTPServerTransport,并通过任意 Node HTTP 框架提供服务。以下是使用 Express 的示例:
import express from "express";
import { createServer } from "@akutishevsky/lunchmoney-mcp/server";
import { initializeConfig } from "@akutishevsky/lunchmoney-mcp/config";
import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js";
initializeConfig(process.env.LUNCHMONEY_API_TOKEN!);
const server = createServer("1.0.0");
const transport = new StreamableHTTPServerTransport({
sessionIdGenerator: () => crypto.randomUUID(),
});
await server.connect(transport);
const app = express();
app.use(express.json());
app.all("/mcp", (req, res) => transport.handleRequest(req, res, req.body));
app.listen(3000);
如果愿意,也可以将 Express 换成 Hono(通过 @hono/node-server)或 Fastify——传输层只需要 Node 的 IncomingMessage 和 ServerResponse。请在 /mcp 前添加自己的身份验证——此软件包不提供传输层身份验证。
在任何远程部署中设置
LUNCHMONEY_ATTACHMENTS_DIR。attach_file_to_transaction会从主机文件系统读取调用方提供的路径。在桌面 stdio 服务上,调用方和文件所有者是同一人,这很正常。一旦服务可通过 HTTP 访问,两者就成了不同的主体;不受限制的读取可能会让远程调用方——或遭到提示词注入的模型——从主机获取文件。请将变量指向专用目录,并确保其中不存放其他内容。无论采用哪种方式,内容类型检查(只上传真实的 JPEG/PNG/HEIC/HEIF/PDF 文件)都会生效,但这只是兜底措施,不能替代上述限制。
多租户警告。 此模式通过一个进程和一个共享 API 令牌为一位用户提供服务。如果要通过单个 Node 进程为多位用户提供服务,就会遇到单租户配置单例的限制;请为每位用户单独派生进程,或使用上面的 Cloudflare 方案(每位用户都会获得独立的 isolate)。
示例提示词
以下是一些可与 LunchMoney MCP 服务搭配使用的示例提示词:
账户概览
- “显示我的 LunchMoney 账户详情”
- “我当前的账户状态是什么?”
类别管理
- “列出我的所有支出类别”
- “创建一个名为‘订阅’的新类别,月度预算为 $100”
- “显示‘餐饮’类别的详情”
- “为我的所有娱乐支出创建一个类别组”
- “删除‘未使用的类别’,并将其交易重新分配到‘杂项’”
交易管理
- “显示我上个月的所有交易”
- “查找过去一周金额超过 $100 的所有交易”
- “在 Amazon 的购物类别中创建一笔金额为 $45.99 的新支出”
- “更新交易 #12345,将金额改为 $50”
- “显示我所有待处理的交易”
- “将这些咖啡店交易归为一组”
预算
- “显示我本月的预算摘要”
- “为本月的杂货类别设置 $500 的预算”
- “移除娱乐类别的预算”
- “每个类别中,我已支出多少,与预算相比是多少?”
手动跟踪账户
- “列出我的所有手动账户”
- “为我的储蓄账户创建一个新手动账户,余额为 $10,000”
- “将我的投资账户余额更新为 $25,000”
- “关闭我的旧信用卡账户”
定期支出
- “显示我所有的定期支出”
- “我有哪些订阅?”
- “列出未来 3 个月的定期项目”
银行集成
- “显示我所有已连接的 Plaid 账户”
- “刷新我的银行账户数据”
- “为我的支票账户触发同步”
加密货币
- “显示我所有的加密货币持仓”
- “将我的 Bitcoin 余额更新为 0.5 BTC”
- “列出我手动跟踪的所有加密资产”
- “添加一个冷钱包持仓,数量为 0.85 BTC,名称为 Ledger Cold Storage”
- “刷新我的 Coinbase 账户并显示更新后的余额”
- “我可以手动跟踪哪些加密货币?”
净资产与余额历史记录
- “显示我的净资产在过去 12 个月的变化”
- “我的储蓄账户在 2026 年 3 月的余额是多少?”
- “将我的汽车在 2026 年 6 月的价值设为 $18,000”
- “清除我旧经纪账户的余额历史记录”
分析与洞察
- “本月我的主要支出类别有哪些?”
- “显示所有标记为 ‘vacation’ 的交易”
- “查找所有咖啡店交易”
- “列出所有需要分类的交易”
可用工具
用户工具
get_user- 获取当前用户详细信息
类别工具
get_all_categories- 列出所有类别(支持format和is_group筛选条件)get_single_category- 获取特定类别或类别组的详细信息create_category- 创建类别或类别组(设置is_group=true并提供children)update_category- 更新属性;会替换类别组中的子项列表delete_category- 删除类别;传入force=true可跳过依赖项检查
标签工具
get_all_tags- 列出所有标签get_single_tag- 根据 ID 获取标签create_tag- 创建新标签update_tag- 更新标签属性delete_tag- 删除标签(使用force可跳过依赖项检查)
交易工具
get_transactions- 列出交易,支持丰富的筛选选项(日期范围、账户、类别、标签、状态、待处理状态、元数据、文件等)get_single_transaction- 获取完整的交易详细信息(始终包含 plaid_metadata、custom_metadata、files,以及拆分/分组父项的子项)create_transactions- 一次调用插入 1–500 笔交易update_transaction- 部分更新一笔交易delete_transaction- 删除一笔交易(不能是拆分/分组交易)update_transactions_bulk- 批量更新 1–500 笔交易delete_transactions_bulk- 按 ID 批量删除 1–500 笔交易create_transaction_group- 根据现有交易创建交易组delete_transaction_group- 取消交易组split_transaction- 将一笔交易拆分为 2–500 笔子交易unsplit_transaction- 撤销之前的拆分attach_file_to_transaction- 上传本地文件(jpeg/png/heic/heif/pdf,≤10MB),并根据文件内容验证类型get_transaction_attachment_url- 获取文件附件的签名下载 URLdelete_transaction_attachment- 删除文件附件
定期项目工具
get_recurring_items- 列出指定日期范围内的定期项目(include_suggested用于系统建议)get_single_recurring_item- 根据 ID 获取定期项目
预算工具
get_budget_summary- 按类别汇总预算(由/summary提供支持);支持切换发生次数、总额和结转资金池get_budget_settings- 账户级预算周期和显示设置upsert_budget- 为某个类别和周期创建或更新预算remove_budget- 移除某个类别和周期的预算
手动账户工具
get_all_manual_accounts- 列出所有手动管理的账户(以前称为“资产”)get_single_manual_account- 根据 ID 获取手动账户create_manual_account- 创建新的手动管理账户update_manual_account- 更新手动账户的属性delete_manual_account- 删除手动账户;还可选择删除其交易记录 / 余额历史记录
Plaid 账户工具
get_all_plaid_accounts- 列出所有已连接的 Plaid 账户get_single_plaid_account- 根据 ID 获取 Plaid 账户trigger_plaid_fetch- 触发从 Plaid 获取最新数据(可按日期范围或账户筛选)
加密货币工具
get_supported_cryptocurrencies- 列出支持手动跟踪的加密货币add_supported_cryptocurrency- 根据 CoinGecko 币种页面 URL,将加密货币添加到支持列表get_all_manual_crypto- 列出所有手动管理的加密货币余额get_single_manual_crypto- 根据 ID 获取单个手动管理的加密货币余额create_manual_crypto- 创建手动管理的加密货币资产update_manual_crypto- 更新手动加密货币余额的名称、显示名称、机构名称或余额delete_manual_crypto- 删除手动加密货币资产(不可撤销)get_all_synced_crypto- 列出已同步的加密货币账户及其嵌套的各币种余额get_single_synced_crypto- 根据 ID 获取单个已同步的加密货币账户get_synced_crypto_balance- 根据币种代码获取已同步加密货币账户中的一笔余额refresh_synced_crypto- 触发已同步加密货币账户的余额刷新
余额历史记录工具
get_balance_history- 获取所有账户的月度余额历史记录(为净资产视图提供数据);可选的start_month/end_month(YYYY-MM)范围筛选get_account_balance_history- 获取单个账户的月度余额历史记录(manual、plaid、crypto_manual或deleted)upsert_account_balance_history- 为单个账户创建或更新月度余额记录(仅限过去的月份;要么全部成功,要么全部失败)delete_account_balance_history- 删除单个账户的所有历史余额记录get_crypto_synced_balance_history- 根据账户 ID + 币种代码获取已同步加密货币持仓的月度余额历史记录upsert_crypto_synced_balance_history- 为已同步加密货币持仓创建或更新月度余额记录delete_crypto_synced_balance_history- 删除已同步加密货币持仓的所有历史余额记录delete_balance_history_entry- 根据 ID 删除单条历史余额记录update_deleted_account_details- 更新已删除账户余额历史记录中显示的详细信息(名称、机构、类型、子类型、掩码)
开发
项目结构
lunchmoney-mcp/
├── src/
│ ├── index.ts # Server entry point
│ ├── config.ts # Configuration management
│ ├── types.ts # TypeScript type definitions
│ └── tools/ # Tool implementations
│ ├── user.ts
│ ├── categories.ts
│ ├── tags.ts
│ ├── transactions.ts
│ ├── recurring-items.ts
│ ├── budgets.ts
│ ├── manual-accounts.ts
│ ├── plaid-accounts.ts
│ ├── crypto.ts
│ └── balance-history.ts
├── build/ # Compiled JavaScript output
├── package.json
├── tsconfig.json
└── README.md
构建
# Build the MCP server
npm run build
# Build MCPB package for distribution
npm run build:mcpb
添加新工具
- 在
src/tools/中创建新文件 - 使用 MCP SDK 实现工具处理程序
- 在
src/index.ts中注册工具 - 如有需要,在
src/types.ts中添加类型
作为库嵌入
该软件包提供了子路径入口,可嵌入自定义传输中(例如,通过 HTTP 提供 MCP 协议服务的 Cloudflare Worker),而不仅限于捆绑的 stdio 二进制文件:
import { createServer } from "@akutishevsky/lunchmoney-mcp/server";
import { initializeConfig } from "@akutishevsky/lunchmoney-mcp/config";
initializeConfig(process.env.LUNCHMONEY_API_TOKEN!);
const server = createServer("1.0.0");
// connect `server` to whatever transport you need
调用任何工具之前,必须先调用 initializeConfig,否则第一个请求会抛出 "Configuration not initialized."。
单租户假设。 配置存放在模块级单例中。在按隔离区运行时中这样做是安全的——每位用户都有自己的隔离区,因此不存在会引发竞争的共享可变状态。对于共享进程的多租户 Node 主机(例如,一个 Express 或 Hono 进程为多个用户提供服务)则不安全:并发调用
initializeConfig会发生竞争,并导致请求间令牌泄漏。这类使用方需要为每位用户单独派生进程,或在公开该软件包之前重构单例。
API 参考
该服务实现了完整的 LunchMoney API v2。如需详细的 API 文档,请参阅:
贡献
欢迎贡献!欢迎提交 Pull Request。
许可证
MIT 许可证
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。