Connects Claude to Monarch Money's personal finance platform through the MonarchMoneyCommunity Python library. Exposes tools for retrieving account balances, transaction history, budget data, and cashflow analysis, plus basic transaction management like creating and updating entries. Handles MFA authentication through a one-time terminal setup that persists sessions for weeks. Reach for this when you want to analyze spending patterns, track budgets, or build financial reports directly in Claude conversations without switching between apps or manually exporting data.
A Model Context Protocol (MCP) server for integrating with the Monarch Money personal finance platform. This server provides seamless access to your financial accounts, transactions, budgets, and analytics through Claude Desktop and Claude Code.
My MonarchMoney referral: https://www.monarchmoney.com/referral/ufmn0r83yf?r_source=share
Built with the MonarchMoneyCommunity Python library - An actively maintained community fork of the Monarch Money API with full MFA support.
Clone this repository:
git clone https://github.com/robcerda/monarch-mcp-server.git
cd monarch-mcp-server
Install dependencies:
Using pip:
pip install -r requirements.txt
pip install -e .
Using uv (alternative):
uv sync
Configure Claude Desktop: Add this to your Claude Desktop configuration file:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"Monarch Money": {
"command": "/opt/homebrew/bin/uv",
"args": [
"run",
"--with",
"mcp[cli]",
"--with-editable",
"/path/to/your/monarch-mcp-server",
"mcp",
"run",
"/path/to/your/monarch-mcp-server/src/monarch_mcp_server/server.py"
]
}
}
}
Important: Replace /path/to/your/monarch-mcp-server with your actual path!
Restart Claude Desktop
OR
Configure Claude Code (CLI): Add this to your Claude Code configuration file:
Global (all projects):
macOS/Linux: ~/.claude.json
Windows: %USERPROFILE%\.claude.json
{
"mcpServers": {
"Monarch Money": {
"command": "/opt/homebrew/bin/uv",
"args": [
"run",
"--with",
"mcp[cli]",
"--with-editable",
"/path/to/your/monarch-mcp-server",
"mcp",
"run",
"/path/to/your/monarch-mcp-server/src/monarch_mcp_server/server.py"
]
}
}
}
Project-level (specific directory):
Create .mcp.json in your project directory:
{
"Monarch Money": {
"command": "/opt/homebrew/bin/uv",
"args": [
"run",
"--with",
"mcp[cli]",
"--with-editable",
"/path/to/your/monarch-mcp-server",
"mcp",
"run",
"/path/to/your/monarch-mcp-server/src/monarch_mcp_server/server.py"
]
}
}
If installed via pip instead of uv, use:
{
"command": "python",
"args": ["/path/to/your/monarch-mcp-server/src/monarch_mcp_server/server.py"]
}
Important: Replace /path/to/your/monarch-mcp-server with your actual path!
Restart Claude Code
Important: For security and MFA support, authentication is done outside of Claude.
Open Terminal and run:
Using python:
cd /path/to/your/monarch-mcp-server
python login_setup.py
Using uv:
cd /path/to/your/monarch-mcp-server
uv run python login_setup.py
Follow the prompts:
Once authenticated, use these tools directly in Claude Desktop or Claude Code:
get_accounts - View all your financial accountsget_transactions - Recent transactions with filteringget_budgets - Budget information and spendingget_cashflow - Income/expense analysismonarch_login_with_token to paste a session token from your browser| Tool | Description | Parameters |
|---|---|---|
setup_authentication | Get setup instructions | None |
check_auth_status | Check authentication status | None |
get_accounts | Get all financial accounts | None |
get_transactions | Get transactions with filtering and reconciliation fields | limit, offset, start_date, end_date, account_id, account_ids, category_ids, category_group_ids, tag_ids, search, wide_search, search_scan_limit, has_notes, is_split, is_recurring |
get_budgets | Get budget information | start_date, end_date |
set_budget_amount | Set budget for a category | amount, category_id, category_group_id, start_date, apply_to_future |
get_cashflow | Get cashflow analysis | start_date, end_date |
get_net_worth | Get net worth history | start_date, end_date, account_type |
get_account_balance_history | Get account balance history | account_id |
get_net_worth_by_account_type | Get net worth by account type | start_date, timeframe |
get_account_holdings | Get investment holdings | account_id |
create_transaction | Create new transaction | account_id, amount, description, date, category_id, merchant_name |
update_transaction | Update existing transaction | transaction_id, amount, description, category_id, date |
refresh_accounts | Request account data refresh | account_ids (optional — defaults to all active, visible accounts) |
get_categories | List all transaction categories | None |
get_category_groups | List category groups with categories | None |
get_transactions_needing_review | Get transactions needing review | needs_review, days, uncategorized, no_notes |
set_transaction_category | Set category on a transaction | transaction_id, category_id, mark_reviewed |
update_transaction_notes | Update notes on a transaction | transaction_id, notes |
mark_transaction_reviewed | Mark transaction as reviewed | transaction_id |
bulk_categorize_transactions | Categorize multiple transactions | transaction_ids, category_id |
get_tags | List all tags | None |
set_transaction_tags | Set tags on a transaction | transaction_id, tag_ids |
create_tag | Create a new tag | name, color |
search_transactions | Search transactions with filters | search, category_ids, account_ids, tag_ids, start_date, end_date, min_amount, max_amount |
get_transaction_details | Get details of a transaction | transaction_id |
delete_transaction | Delete a transaction | transaction_id |
get_recurring_transactions | Get recurring transactions | None |
get_transaction_rules | List auto-categorization rules | None |
create_transaction_rule | Create an auto-categorization rule | merchant_criteria_operator, merchant_criteria_value, set_category_id, add_tag_ids, amount_operator, amount_value |
update_transaction_rule | Update an existing rule | rule_id, merchant_criteria_operator, merchant_criteria_value, set_category_id |
delete_transaction_rule | Delete a rule | rule_id |
get_merchant | Get merchant details with recurring stream | merchant_id |
update_merchant | Update merchant name/recurring stream | merchant_id, name, is_recurring, frequency, base_date, amount, is_active |
review_recurring_stream | Set recurring stream review status | stream_id, review_status |
get_transaction_splits | Get splits for a transaction | transaction_id |
split_transaction | Split a transaction into parts | transaction_id, splits (JSON array) |
get_transactions_summary | Get high-level transaction statistics | None |
get_spending_summary | Get spending breakdown by category | start_date, end_date, limit |
Use get_accounts to show me all my financial accounts
Show me my last 50 transactions using get_transactions with limit 50
get_transactions returns a JSON object with tool, args, count, total_count, truncated, search, and data so large agent-tools/<uuid>.txt responses are self-describing. Transaction rows live in data and include original_statement / plaid_description when Monarch provides the underlying Plaid statement text, plus currency, direction, direction_source, transaction_type, category_group, and category_group_id when those values can be derived from Monarch response data. When Monarch's server-side search errors or returns no rows, wide_search scans recent transactions locally across merchant, original statement, description, notes, category, account, and tags.
Use get_budgets to show my current budget status
Set my grocery budget to $600 for this month using set_budget_amount
Set my entertainment budget to $150 and apply it to all future months using set_budget_amount with apply_to_future=true
Show my net worth trend for the past year using get_net_worth
Show me how my savings account balance has changed over time using get_account_balance_history
Show my net worth breakdown by account type using get_net_worth_by_account_type
Get my cashflow for the last 3 months using get_cashflow
Show me all available categories using get_categories
Show me transactions from the last 7 days that need review using get_transactions_needing_review
Categorize these three transactions as "Groceries" using bulk_categorize_transactions
Add the "Tax Deductible" tag to this transaction using set_transaction_tags
Find all Amazon transactions over $50 from the last month using search_transactions
Show me my upcoming recurring transactions using get_recurring_transactions
Create a rule to automatically categorize Amazon transactions as "Shopping" using create_transaction_rule
Split this $100 Costco transaction into $60 for Groceries and $40 for Household using split_transaction
Give me a quick summary of my transactions using get_transactions_summary
Show my spending breakdown by category for last month using get_spending_summary
Update PennyMac's recurring stream to $1,460.93 monthly using update_merchant
Approve the Netflix recurring stream using review_recurring_stream
YYYY-MM-DD format (e.g., "2024-01-15")If you see "Authentication needed" errors:
cd /path/to/your/monarch-mcp-server && python login_setup.py (or uv run python login_setup.py)get_accountsSessions last for weeks, but if expired:
python login_setup.py (or uv run python login_setup.py)'Context' object has no attribute 'elicit'The monarch_login and monarch_login_with_token tools require the MCP Python SDK 1.10.0 or newer (released June 2025). If your environment cached an older mcp install, refresh it:
uv cache clean mcp
Then fully quit and reopen Claude Desktop or Claude Code so it relaunches the server with a fresh resolution. As a fallback while you upgrade, run python login_setup.py from the repo to authenticate via the terminal.
python login_setup.py (or uv run python login_setup.py)get_accounts to see valid account IDsmonarch-mcp-server/
├── src/monarch_mcp_server/
│ ├── __init__.py
│ └── server.py # Main server implementation
├── login_setup.py # Email/password authentication script
├── pyproject.toml # Project configuration
├── requirements.txt # Dependencies
└── README.md # This documentation
.mm/mm_session.pickleSeveral tools mutate your Monarch ledger (create_transaction, update_transaction, delete_transaction, bulk_categorize_transactions, upload_account_balance_history, set_transaction_tags, create_transaction_rule, update_transaction_rule, delete_transaction_rule, split_transaction, set_budget_amount, update_merchant, review_recurring_stream).
Because the LLM can be influenced by data it reads back (a malicious-looking memo or merchant name in a transaction), the safest setup is to configure your MCP client to require manual approval before any mutating tool runs. In Claude Desktop and Claude Code this is the default behavior for unknown tools; keep it that way for the tools listed above rather than allow-listing them.
bulk_categorize_transactions and upload_account_balance_history also accept a dry_run=True argument that returns the planned changes without executing them, useful for previewing a bulk action before approving it.
This MCP server is built on top of the MonarchMoneyCommunity Python library, an actively maintained community fork of the original MonarchMoney library by @hammem. The community fork provides:
Thank you to @hammem for creating and maintaining this essential library!
MIT License
For issues:
check_auth_statuscd /path/to/your/monarch-mcp-server && python login_setup.pyTo update the server:
python login_setup.py