mcpField
M
Monarch MCP Server

Monarch MCP Server

本地服务
github.com/jamiew金融数据284 周前更新

关于 Monarch MCP Server

Monarch MCP Server 是一个 MCP 服务,让 AI 助手读取和更新 Monarch Money 中的账户、交易和预算。它是 colvint 原始服务的 FastMCP 改写分支,重点在支出分析与工作流集成,而非暴露全部 API 方法。

主要功能

  1. 01交易搜索与批量编辑,逐条返回结果
  2. 02按类别、账户或月份汇总支出
  3. 03一次调用获取财务概览
  4. 04拆分交易与定期交易日程管理
  5. 05MCP 资源与带参数补全的提示词

适用场景

  1. 01按商户或关键词查找交易并批量修改分类
  2. 02比较不同月份的支出趋势与预测
  3. 03通过对话查看账户余额与预算执行情况

MCP 相关

该项目是一个 MCP 服务,向 MCP 客户端暴露 29 个工具,并提供账户、类别、机构等资源以及引导式提示词。

配置

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

mcp.json · 通用配置
{
"mcpServers": {
"jamiew-monarch": {
"command": "uvx",
"args": [
"monarch-mcp-jamiew"
],
"env": {
"MONARCH_EMAIL": "<MONARCH_EMAIL>",
"MONARCH_PASSWORD": "<MONARCH_PASSWORD>",
"MONARCH_MFA_SECRET": "<MONARCH_MFA_SECRET>",
"MONARCH_FORCE_LOGIN": "<MONARCH_FORCE_LOGIN>"
}
}
}
}
启动命令uvx monarch-mcp-jamiew
需要配置的环境变量
MONARCH_EMAILMonarch Money account email
MONARCH_PASSWORD密钥Monarch Money account password
MONARCH_MFA_SECRET密钥TOTP secret for 2FA, not a rotating code
MONARCH_FORCE_LOGINSet to 'true' to skip the cached session

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
pypimonarch-mcp-jamiew0.5.2

工具

29

收录的工具列表 · 更新于 2 周前

此工具无需参数。

详细介绍

Monarch Money MCP 服务

通过 MCP,使用 AI 助手读取并更新你的 Monarch Money 账户、交易和预算。

为什么有这个分支?

这次 FastMCP 重写为 colvint 的原始服务添加了以下工具:

  • 搜索与批量编辑: search_transactions 查找商户或关键词;update_transactions_bulk 并行编辑交易,并给出每项结果。
  • 支出分析: get_spending_summary 按类别、账户或月份汇总总额;analyze_spending_patterns 对比各月情况。
  • 一次调用概览: get_complete_financial_overview 整合账户、预算、现金流、交易和类别。
  • 拆分与定期计划: 读取并替换交易拆分,查看计划内发生项,并编辑商户范围的重复规则。

与原始版本和 keithah 的增强型 Python 分支不同,本服务还提供:

  • 类型化结果: 带 outputSchema 的结构化输出,并提供文本回退。
  • MCP 资源和提示词: 账户/类别/机构资源,按账户划分的持仓/历史记录模板,以及带参数补全的引导式提示词。
  • 助手友好调用: 紧凑的交易/类别记录,自然语言日期,读/写标签,以及批量分析的进度提示。

对比信息核对于 2026 年 9 月 14 日。其他分支在金融工具上有所重叠;增强型 Python 分支暴露了更广泛的库 API。本项目聚焦于分析工作流和 MCP 集成,而不是暴露每一个 API 方法。请参阅工具目录。

设置

安装 uv,然后配置你的 MCP 客户端以运行 uvx monarch-mcp-jamiew。你需要 Monarch 邮箱和密码,以及用于基于 TOTP 的双重验证的 MFA 密钥。

这些功能包含在 0.5.2 中,可通过 PyPI 获取。

标准配置

对于带有 mcpServers 配置的客户端:

{
  "mcpServers": {
    "monarch-money": {
      "command": "uvx",
      "args": ["monarch-mcp-jamiew"],
      "env": {
        "MONARCH_EMAIL": "[email protected]",
        "MONARCH_PASSWORD": "your-password",
        "MONARCH_MFA_SECRET": "your-mfa-secret-key"
      }
    }
  }
}
Claude Desktop

将标准配置中的 monarch-money 条目添加到配置文件的 mcpServers 对象中(如果文件不存在则创建):

  • macOS:~/Library/Application\ Support/Claude/claude_desktop_config.json
  • Windows:%APPDATA%\Claude\claude_desktop_config.json

然后完全退出并重新打开 Claude Desktop。

Claude Code
claude mcp add monarch-money \
  -e [email protected] \
  -e MONARCH_PASSWORD=your-password \
  -e MONARCH_MFA_SECRET=your-mfa-secret-key \
  -- uvx monarch-mcp-jamiew

添加 -s user 使其在所有项目中可用。使用 claude mcp list 进行验证。

Codex CLI
codex mcp add monarch-money \
  --env [email protected] \
  --env MONARCH_PASSWORD=your-password \
  --env MONARCH_MFA_SECRET=your-mfa-secret-key \
  -- uvx monarch-mcp-jamiew

或者将等效的配置块添加到 ~/.codex/config.toml:

[mcp_servers.monarch-money]
command = "uvx"
args = ["monarch-mcp-jamiew"]
env = { MONARCH_EMAIL = "[email protected]", MONARCH_PASSWORD = "your-password", MONARCH_MFA_SECRET = "your-mfa-secret-key" }
.mcp.json(项目范围)

对于 Claude Code 的项目范围,将标准配置保存为项目根目录下的 .mcp.json。不要将包含凭据的文件纳入版本控制。

Hermes

添加到 ~/.hermes/config.yaml 的 mcp_servers: 下,然后执行 /reload-mcp(或重启 Hermes):

mcp_servers:
  monarch-money:
    command: uvx
    args: ["monarch-mcp-jamiew"]
    env:
      MONARCH_EMAIL: "[email protected]"
      MONARCH_PASSWORD: "your-password"
      MONARCH_MFA_SECRET: "your-mfa-secret-key"
OpenClaw

将标准配置添加到 ~/.openclaw/openclaw.json 的 mcpServers 下,然后重启网关。

任何其他 MCP 客户端(Cursor、VS Code、Windsurf、Cline、Zed……)

设置一个本地 stdio MCP 服务,命令为 uvx,参数为 monarch-mcp-jamiew,并使用上述凭据。按照你的客户端的配置格式进行操作。

不确定怎么做?告诉你的 Agent:

从 https://github.com/jamiew/monarch-mcp 安装 Monarch Money MCP 服务。PyPI 包为 monarch-mcp-jamiew,通过 uvx monarch-mcp-jamiew 运行。它需要 MONARCH_EMAIL、MONARCH_PASSWORD 和 MONARCH_MFA_SECRET 来进行基于 TOTP 的 2FA。

从源码安装(开发)

源码安装使用固定的 monarchmoneycommunity commit:

git clone https://github.com/jamiew/monarch-mcp
cd monarch-mcp
uv sync --locked

然后使用绝对路径将你的客户端指向本地副本(通过 which uv 和 pwd 找到它们):

{
  "mcpServers": {
    "monarch-money": {
      "command": "/abs/path/to/uv",
      "args": ["--directory", "/abs/path/to/monarch-mcp", "run", "python", "server.py"],
      "env": {
        "MONARCH_EMAIL": "[email protected]",
        "MONARCH_PASSWORD": "your-password",
        "MONARCH_MFA_SECRET": "your-mfa-secret-key"
      }
    }
  }
}

说明

claude mcp add 和 codex mcp add 命令可能会将凭据保存在 shell 历史记录中。请直接编辑客户端的配置文件以避免此问题,并保护好配置文件。

获取你的 MFA 密钥
  1. 前往 Monarch Money 设置并启用 2FA
  2. 当显示二维码时,寻找“无法扫描?”或“手动输入”
  3. 复制 TOTP 密钥,而不是不断变化的六位验证码
  4. 将其用作你的 MONARCH_MFA_SECRET

工具

该服务公开以下 29 个工具。

工具描述
get_accounts列出账户及其余额
get_transactions按日期/账户/类别以及待处理/已入账筛选交易
search_transactions按商户名称或关键词搜索,可选仅待处理/已入账
get_transaction_categories类别列表(默认精简)
get_transaction_rules按优先级顺序分页浏览精简的自动化规则
create_transaction_rule创建匹配商户、对账单文本或金额的规则
update_transaction_rule编辑规则,并可选地对历史交易运行它
delete_transaction_rule删除规则;它已更改的交易保持不变
get_household_members家庭成员及其 ID,用于更新归属
create_transaction创建手动交易
update_transaction更新交易字段或分配归属
update_transactions_bulk更新字段或归属,并返回每项的成功/失败
get_transaction_splits读取某笔交易的分拆
get_transaction_details解析分拆父项和分项 ID;返回分拆标志、类别 ID 和解析后的交易 ID
update_transaction_splits替换所有分拆;空列表会移除它们
get_budgets预算数据和支出分析
get_cashflow收入与支出分析
get_account_holdings某账户的投资持仓(需要 account_id)
get_all_holdings按券商账户分组的持仓;不包括其他账户类型
get_account_history分页的余额历史,日期边界为包含式且在本地应用
get_institutions已关联的金融机构
get_recurring_transactions日期范围内的定期发生项
update_recurring_transaction更改某商户的定期计划
set_budget_amount设置某预算类别的金额
create_manual_account创建手动跟踪的账户
refresh_accounts触发账户数据刷新
get_spending_summary按类别、账户或月份汇总的支出
get_complete_financial_overview精简的账户、交易、预算和现金流摘要;完整部分需选择启用
analyze_spending_patterns月度趋势和预测,附带精简预算和明确的上游错误

对待处理交易使用 is_pending=True,对已入账交易使用 False;省略则两者都包括。单个和批量更新都接受来自 get_household_members 的 owner_user_id。空字符串设置为共享归属;省略/null 则保持归属不变。分配会覆盖继承的归属。使用 verbose=True 检查 ownedByUser;更新响应不包含它。

规则默认每页 25 条(最多 100);历史默认 100(最多 1,000)。使用 limit、offset 和返回的 next_offset 继续;total_count 涵盖所有匹配记录。规则详情在 verbose=True 时仍然可用。

规则可以设置类别、商户名称、标签或审核状态。它还可以从报告中隐藏交易。每条规则必须查找商户名称、对账单文本或金额。Monarch 会忽略对不满足此条件的规则的编辑。

编辑规则时,你省略的任何内容都保持不变。要清除某个值,传入 [] 或 ""。Monarch 在每次编辑时替换整条规则,因此服务会返回包含你更改的完整规则。这样可以保留工具无法编辑的设置,例如归属、目标和分拆。

apply_to_existing_transactions=True 还会更改匹配的历史交易。这很难撤销,所以先用 search_transactions 检查匹配项。

概览和支出分析默认使用精简摘要;verbose=True 会恢复完整部分。交易样本分别上限为 500 和 2,000,即使在 verbose 模式下也是如此。在将总数视为完整之前,检查 batch_metadata.transactions_truncated;null 表示上游计数不可用。

定期交易

get_recurring_transactions(start_date, end_date) 返回的是预测,而非已入账的历史记录。 日期接受 ISO 格式或自然语言。不提供日期则选择本月;提供一个日期时, 缺失的边界将从该日期所在月份补齐。

返回的 occurrence 包含 stream、账户、分类,以及在可用时匹配的 transactionId。 isPast 并不意味着已支付。使用 get_transactions(is_recurring=True) 获取已记录的交易;不要将预测和已入账的匹配项重复计算。

update_recurring_transaction 更改的是商户级别的计划,而非单个 occurrence。 使用 stream.merchant.id,而非 stream.id 或 transactionId,并传入当前商户 名称以避免重命名。只传入需要更改的设置:frequency、base_date、 amount、is_recurring 或 is_active。省略的设置保持不变。 使用 Monarch 的频率和有符号金额。这不会取消订阅、 转移资金或创建已入账交易。

交易格式

get_transactions 和 search_transactions 默认返回精简记录:

{
  "id": "txn_123",
  "date": "2025-03-15",
  "amount": -12.50,
  "merchant": "Corner Deli",
  "plaidName": "CORNER DELI NYC",
  "category": "Restaurants & Bars",
  "categoryId": "cat_001",
  "account": "Main Credit Card",
  "needsReview": true
}

pending 仅在为 true 时出现;notes 仅在非空时出现。在 get_transactions 或 search_transactions 上设置 verbose=True 可获取完整交易详情,或在 get_transaction_categories 上设置以获取完整分类详情。

会话管理

会话会缓存于 ~/.monarch-mcp/ 中,以便后续登录更快(可通过 MONARCH_SESSION_DIR 环境变量覆盖该位置)。如果你遇到认证问题:

  • 删除 ~/.monarch-mcp/session.pickle 以清除缓存的会话
  • 在你的环境配置中设置 MONARCH_FORCE_LOGIN=true 以强制重新登录
  • 确保你的系统时钟准确(TOTP 需要)

开发

本地设置

如需进行实时检查,请创建一个 .env 文件(已被 git 忽略),并使用 uv --env-file 显式加载它:

MONARCH_EMAIL="[email protected]"
MONARCH_PASSWORD="your-password"
MONARCH_MFA_SECRET="YOUR_TOTP_SECRET_KEY"
测试
uv run pytest tests/ -v                          # offline; live tests are skipped
MONARCH_RUN_INTEGRATION=true uv run --env-file .env pytest tests/test_integration.py -v
uv run --env-file .env scripts/health_check.py    # live API connectivity check

集成测试共享一次全新登录,以避免 MFA 重用和登录限流。它们从不自行加载 .env,也不读取或写入已保存的会话。

CI 检查

运行与 CI 相同的检查:

uv run python scripts/ci.py
发布

使用 /release 来更新 pyproject.toml、提交、打标签 vX.Y.Z、推送并创建 GitHub release。发布工作流通过 OIDC 发布到 PyPI 和 MCP Registry,并根据标签设置 server.json 的版本。

日志分析

衡量工具调用次数和输出大小:

uv run scripts/analyze_logs.py                    # full report
uv run scripts/analyze_logs.py --json             # JSON output
uv run scripts/eval_session.py snapshot           # mark log position
# ... use tools in Claude ...
uv run scripts/eval_session.py analyze            # analyze new entries

安全

警告: 此服务使用非官方的 Monarch Money API 访问方式。你的凭据会授予完整的账户访问权限,包括写入权限。

  • 该服务在本地运行,并将请求的财务数据返回给你的 MCP 客户端。请审查客户端的隐私设置和工具审批。
  • 保护好你的密码和 MFA 密钥。TOTP 密钥可支持持续生成验证码。
  • ~/.monarch-mcp/ 中的会话文件包含认证令牌。请保护好它们以及任何自定义的 MONARCH_SESSION_DIR。
  • 日志可能包含财务输入值和错误详情。分享前请先审查。
  • 绝不要提交包含凭据的 .env、.mcp.json 或客户端配置文件。
  • Monarch Money 可能随时更改或限制非官方 API 访问。

致谢

Fork 自 colvint/monarch-money-mcp。API 访问使用 bradleyseanf/monarchmoneycommunity,基于 hammem/monarchmoney。源码安装会固定某个 commit;PyPI 安装使用已发布的库。

贡献者:@caseypugh(交易拆分)、@seanperkins(支出摘要分页)、@rajatbhagat(设置文档)、@samyk(交易规则)以及 @prerak-proof(交易详情)。

评论

支持 Markdown

第一次接触 MCP?

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

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