Skip to main content

MCP server for Monarch Money personal finance

Project description

Monarch Money MCP Server

An MCP server for Monarch Money — gives AI assistants like Claude access to your financial accounts, transactions, budgets, and more.

Originally forked from @colvint/monarch-money-mcp but has diverged significantly with a full rewrite, many new features, and a modern FastMCP architecture.

Built with the MonarchMoney Python library by @hammem — a fantastic unofficial API for Monarch Money with full MFA support. We currently use the community fork by @bradleyseanf which tracks the latest Monarch Money API changes.

Features

  • 19 tools covering accounts, transactions, budgets, cashflow, investments, categories, goals, net worth, recurring transactions, and more
  • MCP resources for quick access to categories, accounts, and institutions
  • MCP prompts for guided financial analysis workflows
  • Smart output formatting — compact transaction format reduces token usage by ~80%
  • Natural language dates — "last month", "30 days ago", "this year" all work
  • Batch operations — parallel multi-account queries, bulk transaction updates
  • Spending analysis — multi-month trend analysis with category/account breakdowns
  • Tool annotations — proper read/write metadata for MCP clients

Setup

1. Install dependencies

cd /path/to/monarch-mcp
uv sync

2. Configure your MCP client

Add to your .mcp.json (Claude Desktop, Claude Code, etc.):

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

Use absolute paths — find yours with which uv and pwd.

3. Get your MFA secret

  1. Go to Monarch Money settings and enable 2FA
  2. When shown the QR code, look for "Can't scan?" or "Enter manually"
  3. Copy the secret key (a string like T5SPVJIBRNPNNINFSH5W7RFVF2XYADYX)
  4. Use this as your MONARCH_MFA_SECRET

Tools

Tool Description
get_accounts List accounts with balances
get_transactions Transactions with date/account/category filtering
search_transactions Search by merchant name or keyword
get_transaction_categories Category list (compact by default)
create_transaction Create a manual transaction
update_transaction Update a single transaction
update_transactions_bulk Update multiple transactions in parallel
get_budgets Budget data and spending analysis
get_cashflow Income and expense analysis
get_account_holdings Investment holdings
get_account_history Account balance history
get_institutions Linked financial institutions
get_recurring_transactions Recurring transaction detection
set_budget_amount Set a budget category amount
create_manual_account Create a manually-tracked account
refresh_accounts Trigger account data refresh
get_complete_financial_overview Combined 5-API call in parallel
analyze_spending_patterns Multi-month trend analysis
get_usage_analytics Tool usage stats and optimization tips

Transaction format

By default, transactions return a compact format with the fields that matter:

{
  "id": "123456789012345678",
  "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 and notes are included only when present. Set verbose=True on any tool for the full API response with all metadata.

Session management

Sessions are cached in a .mm directory for faster subsequent logins. If you hit auth issues:

  • Delete .mm/session.pickle to clear the cached session
  • Set MONARCH_FORCE_LOGIN=true in your env config to force a fresh login
  • Make sure your system clock is accurate (required for TOTP)

Development

Local setup

Create a .env file (git-ignored):

MONARCH_EMAIL="your-email@example.com"
MONARCH_PASSWORD="your-password"
MONARCH_MFA_SECRET="YOUR_TOTP_SECRET_KEY"

Tests

uv run pytest tests/ -v                          # unit tests (no creds needed)
uv run pytest tests/test_integration.py -v        # integration tests (needs .env)
uv run scripts/health_check.py                    # quick API connectivity check

CI checks

Run all checks locally (same as GitHub Actions CI):

uv run python scripts/ci.py

Log analysis

Tools for measuring and optimizing token usage across MCP sessions:

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

Security

Warning: Monarch Money does not provide an official API. This server uses unofficial API access that requires your actual account credentials. Use with appropriate caution.

  • Your credentials have full account access — treat them like passwords
  • The MFA secret (TOTP key) provides ongoing access
  • Session files in .mm/ contain auth tokens — keep them secure
  • Never commit .env or .mcp.json files to version control
  • This is an unofficial API — Monarch Money could change or restrict access at any time

Credits

This project started as a fork of colvint/monarch-money-mcp by @colvint. Thanks for the original implementation!

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

monarch_mcp_jamiew-0.3.1.tar.gz (25.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

monarch_mcp_jamiew-0.3.1-py3-none-any.whl (25.1 kB view details)

Uploaded Python 3

File details

Details for the file monarch_mcp_jamiew-0.3.1.tar.gz.

File metadata

  • Download URL: monarch_mcp_jamiew-0.3.1.tar.gz
  • Upload date:
  • Size: 25.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for monarch_mcp_jamiew-0.3.1.tar.gz
Algorithm Hash digest
SHA256 2a5658c0d6159440060f9447ffcd36e024b3165602d9f8f98198ff008fbfb297
MD5 5a68b50e2f7e5529868e8409b62da9e1
BLAKE2b-256 5aca363333788c61fd37afa941c70e44e907e202a415a705f5a4fe51c55019b2

See more details on using hashes here.

Provenance

The following attestation bundles were made for monarch_mcp_jamiew-0.3.1.tar.gz:

Publisher: publish.yml on jamiew/monarch-mcp

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file monarch_mcp_jamiew-0.3.1-py3-none-any.whl.

File metadata

File hashes

Hashes for monarch_mcp_jamiew-0.3.1-py3-none-any.whl
Algorithm Hash digest
SHA256 ecb014e1b853ca6040efff51bb089b99142cdd8e8868463647b168944ea1564d
MD5 0197ceb38356be49be605cae77c5ef21
BLAKE2b-256 80cffd7dae56e2ed3ed106bd7a9adaae54738e16666ae0bded358a2702a48692

See more details on using hashes here.

Provenance

The following attestation bundles were made for monarch_mcp_jamiew-0.3.1-py3-none-any.whl:

Publisher: publish.yml on jamiew/monarch-mcp

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page