monarch-mcp
The Monarch Money MCP Server connects to the Monarch Money personal finance platform, providing secure read-only financial analysis by default, with optional write capabilities requiring explicit opt-in (--enable-write flag or Claude Desktop toggle).
Authentication & Setup
Browser-based login with MFA support; tokens stored securely in OS keychain
Check auth status, get setup instructions, and debug keyring/session issues
Accounts
Retrieve all financial accounts, investment holdings, historical balance snapshots, and daily balances
Get net worth snapshots by account type and daily aggregate net value
List connected institutions and valid account types/sub-types
Request data refresh from financial institutions
Transactions
Retrieve transactions with rich filtering (date range, account, category, tag, search text, recurring, splits, attachments, notes, etc.)
Get details on specific transactions, split breakdowns, and recurring transactions
Get aggregate statistics (count, sum, average, income, expenses)
Tags & Categories
List all transaction tags, categories, and category groups
Budgets & Cashflow
View budgets for a date range and set budget amounts per category
Analyze cashflow (income vs. expenses) and get summary with savings rate
Other
View subscription status and credit score history
Write Operations (opt-in required)
Create, update, and delete manual accounts, transactions, tags, and categories
Update transaction splits and assign/remove tags on transactions
Monarch Money MCP Server
A Model Context Protocol (MCP) server for integrating with the Monarch Money personal finance platform through Claude Desktop.
Overview
Secure by design — browser-based login, token stored in OS keychain (never in config files or env vars)
Safe by default — read-only mode prevents accidental changes; write tools require explicit opt-in
Comprehensive — 44 tools covering accounts, transactions, splits, budgets, cashflow, tags, categories, transaction rules, recurring merchants, and credit history
Easy to install — Claude Desktop extension (
.mcpb),uvx, orpip
Two operating modes:
The server starts in read-only mode by default. Write tools are hidden and blocked until you explicitly opt in.
Read-only (default) | Write mode | |
View accounts, transactions, budgets | Yes | Yes |
Analyze cashflow, spending, net worth | Yes | Yes |
Create transactions, tags, categories, rules | No | Yes |
Update accounts, budgets, splits | No | Yes |
Delete transactions, tags, accounts | No | Yes |
Related MCP server: Monarch Money MCP Server
Quick Start
Installation
Option 1: Claude Desktop Extension (.mcpb) — Recommended for Claude Desktop
Enables toggling write mode on/off directly from the Claude Desktop app.
Download the latest
.mcpbfrom ReleasesIn Claude Desktop: Settings > Extensions > Advanced Settings > Install Extensions — select the
.mcpbfileRestart Claude Desktop
To enable write tools: Settings > Extensions > Monarch Money MCP Server > Configure — toggle "Enable write tools" and click Save.
Option 2: uvx (no install required) — Recommended for agents (e.g. Claude Code or Cursor)
Also works with Claude Desktop, but write mode cannot be toggled from the app — set it in the config instead.
Add to your MCP config file:
{
"mcpServers": {
"Monarch Money": {
"command": "uvx",
"args": ["monarch-mcp"]
}
}
}To enable write tools:
{
"mcpServers": {
"Monarch Money": {
"command": "uvx",
"args": ["monarch-mcp", "--enable-write"]
}
}
}Option 3: pip install — Recommended for local installation and venv
pip install monarch-mcpContributors: See docs/releasing.md for the release process, version scheme, and pre-release testing via TestPyPI.
Add to your MCP config using the full path to your Python interpreter:
{
"mcpServers": {
"Monarch Money": {
"command": "/path/to/bin/python3",
"args": ["-m", "monarch_mcp"]
}
}
}To enable write tools, add "--enable-write" to args.
Option 4: Clone and install — Recommended for development
git clone https://github.com/vargahis/monarch-mcp.git
cd monarch-mcp
pip install -e .Then add to your MCP config using the Python interpreter from your dev environment:
{
"mcpServers": {
"Monarch Money": {
"command": "/path/to/bin/python3",
"args": ["-m", "monarch_mcp"]
}
}
}To enable write tools, add "--enable-write" to args.
Authentication
Authentication happens automatically in your browser the first time the MCP server starts without a saved session.
Start (or restart) Claude Desktop
The server detects that no token exists and opens a login page in your browser
Enter your Monarch Money email and password
Provide your 2FA code if you have MFA enabled
Once authenticated, the token is saved to your system keyring — you're all set
Key details:
Credentials are entered in your browser only — never through Claude Desktop
Token stored in the OS keyring — persists across restarts, lasts weeks/months
Expired sessions re-authenticate automatically — the browser login re-triggers on the next tool call
MFA fully supported
Fallback: run
python login_setup.pyin a terminal for headless environments
For technical details on the auth architecture, see docs/authentication.md.
Usage Examples
Show me all my financial accountsWhat were my last 50 transactions?How's my budget looking this month?Analyze my cashflow for the last 3 monthsCreate a tag called "Business Expenses" in redAvailable Tools
Tool | Description | Mode |
Auth | ||
| Get setup instructions | read |
| Check authentication status | read |
| Debug keyring issues | read |
Accounts | ||
| Get all financial accounts | read |
| Get investment holdings | read |
| Get historical balance data | read |
| Get daily balances | read |
| Net worth by account type | read |
| Daily aggregate net value | read |
| Get connected institutions | read |
| Get valid account types | read |
| Request account data refresh | read |
| Create manual account | write |
| Update account settings | write |
| Delete an account | write |
Transactions | ||
| Get transactions with filtering (date, account, category, tag, search, needs_review, and more) | read |
| Get full transaction detail | read |
| Aggregate transaction stats | read |
| Get split information | read |
| Get recurring transactions | read |
| Search recent transactions for a merchant and return distinct IDs | read |
| Create new transaction | write |
| Update existing transaction (clear notes with | write |
| Delete a transaction | write |
| Create/modify/delete splits | write |
| Mark/unmark a merchant as recurring, update its frequency/amount, or deactivate it — | write |
Tags | ||
| Get all tags | read |
| Create new tag | write |
| Delete a tag | write |
| Set tags on a transaction | write |
Categories | ||
| Get all categories | read |
| Get category groups | read |
| Create a category | write |
| Delete a category | write |
Rules | ||
| List every transaction rule with its criteria, actions, and recent application stats | read |
| Create a transaction rule with full criteria + actions (category, tags, merchant, amount, splits…) | write |
| Update a rule by id; merges overrides onto the current rule (handles Monarch's REPLACE semantics) | write |
| Delete a rule by ID | write |
Budgets & Cashflow | ||
| Get budget information | read |
| Get cashflow analysis | read |
| Get cashflow summary | read |
| Set budget for category | write |
Other | ||
| Get subscription status | read |
| Get credit score history | read |
Testing
This project has two complementary test surfaces:
1. Mocked unit tests (the quality gate) — fast, offline, no Monarch connection. These run in CI and must stay green:
uv run pytest tests/The Monarch client is mocked, so these never touch a real account. Live e2e tests (below) are deselected by default.
2. Live end-to-end (e2e) integration tests — exercise the MCP tools against a real Monarch account to verify they handle the live API robustly (adversarial/edge inputs, server-side error paths). They are opt-in and never run in CI:
MONARCH_LIVE_TESTS=1 uv run pytest tests/integration -m integrationPrerequisites: a stored keyring token (run python login_setup.py once), or MONARCH_EMAIL /
MONARCH_PASSWORD in the environment. Without these, the suite skips. The tests create and delete
data prefixed with MCP-Test- and self-clean (a post-suite sweep removes any residue). See
tests/integration/README.md for details and safety notes.
There is also a separate agent test skill (
.claude/skills/test-monarch-mcp/) that drives an AI agent to verify it calls the tools correctly — distinct from the two pytest suites above.
🙏 Acknowledgments
Forked from @robcerda's monarch-mcp-server, maintained by vargahis.
Built on the monarchmoneycommunity Python library.
Thanks to:
@robcerda for the original MCP server
@hammem for the original monarchmoney library
@bradleyseanf for the community fork
License
MIT License
Available Tools
25 toolscheck_auth_statusA
Check if already authenticated with Monarch Money.
Inputs: no named parameters. Returns: result
debug_session_loadingC
Debug keyring session loading issues.
Inputs: no named parameters. Returns: result
get_account_historyC
Get historical balance snapshots for an account.
Args: account_id: The ID of the account
Inputs: account_id (required). Returns: result
get_account_holdingsC
Get investment holdings for a specific account.
Args: account_id: The ID of the investment account
Inputs: account_id (required). Returns: result
get_accountsA
Get all financial accounts from Monarch Money.
Inputs: no named parameters. Returns: result
get_account_snapshots_by_typeA
Get net value snapshots grouped by account type.
Args: start_date: Start date in YYYY-MM-DD format timeframe: Aggregation period - "month" or "year"
Inputs: start_date (required), timeframe (required). Returns: result
get_account_type_optionsA
Get available account types and sub-types for creating manual accounts.
Inputs: no named parameters. Returns: result
get_aggregate_snapshotsA
Get daily aggregate net value of all accounts.
Args: start_date: Start date in YYYY-MM-DD format end_date: End date in YYYY-MM-DD format account_type: Filter by account type (optional)
Inputs: start_date, end_date, account_type. Returns: result
get_budgetsB
Get budget information from Monarch Money.
Args: start_date: Start date in YYYY-MM-DD format (default: last month) end_date: End date in YYYY-MM-DD format (default: next month) use_v2_goals: Whether to use v2 goals format (default: True)
Inputs: start_date, end_date, use_v2_goals. Returns: result
get_cashflowB
Get cashflow analysis from Monarch Money.
Args: start_date: Start date in YYYY-MM-DD format (requires end_date; defaults to current month) end_date: End date in YYYY-MM-DD format (requires start_date; defaults to current month)
Inputs: start_date, end_date. Returns: result
get_cashflow_summaryA
Get cashflow summary (income, expenses, savings, savings rate).
Args: limit: Number of records to retrieve (default: 100) start_date: Start date in YYYY-MM-DD format (requires end_date) end_date: End date in YYYY-MM-DD format (requires start_date)
Inputs: limit, start_date, end_date. Returns: result
get_credit_historyA
Get credit score history and related details.
Inputs: no named parameters. Returns: result
get_institutionsA
Get all connected financial institutions and their connection status.
Inputs: no named parameters. Returns: result
get_recent_account_balancesB
Get daily balance for all accounts from a start date.
Args: start_date: Start date in YYYY-MM-DD format (optional)
Inputs: start_date. Returns: result
get_recurring_transactionsC
Get recurring transactions from Monarch Money.
Args: start_date: Start date in YYYY-MM-DD format (requires end_date) end_date: End date in YYYY-MM-DD format (requires start_date)
Inputs: start_date, end_date. Returns: result
get_subscription_detailsB
Get Monarch Money subscription status and details.
Inputs: no named parameters. Returns: result
get_transaction_categoriesA
Get all transaction categories from Monarch Money.
Inputs: no named parameters. Returns: result
get_transaction_category_groupsA
Get all transaction category groups from Monarch Money.
Inputs: no named parameters. Returns: result
get_transaction_detailsA
Get detailed information about a specific transaction.
Args: transaction_id: The ID of the transaction redirect_posted: Whether to redirect to posted transaction (default: True)
Inputs: transaction_id (required), redirect_posted. Returns: result
get_transactionsA
Get transactions from Monarch Money.
Args: limit: Number of transactions to retrieve (default: 100) offset: Number of transactions to skip (default: 0) start_date: Start date in YYYY-MM-DD format (requires end_date) end_date: End date in YYYY-MM-DD format (requires start_date) account_id: Specific account ID to filter by (shorthand for account_ids with one ID) search: Free text search query category_ids: List of category IDs to filter by account_ids: List of account IDs to filter by (cannot use with account_id) tag_ids: List of tag IDs to filter by has_attachments: Filter transactions with/without attachments has_notes: Filter transactions with/without notes hidden_from_reports: Filter transactions hidden/visible in reports is_split: Filter split/unsplit transactions is_recurring: Filter recurring/non-recurring transactions synced_from_institution: Filter synced/manual transactions needs_review: Filter transactions that need review
Inputs: limit, offset, start_date, end_date, +12 more. Returns: result
get_transaction_splitsB
Get split information for a transaction.
Args: transaction_id: The ID of the transaction
Inputs: transaction_id (required). Returns: result
get_transactions_summaryB
Get aggregate transaction summary (count, sum, avg, max, income, expenses).
Inputs: no named parameters. Returns: result
get_transaction_tagsA
Get all transaction tags from Monarch Money.
Inputs: no named parameters. Returns: result
refresh_accountsB
Request account data refresh from financial institutions.
Inputs: no named parameters. Returns: result
setup_authenticationA
Get instructions for setting up secure authentication with Monarch Money.
Inputs: no named parameters. Returns: result
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 25 tools
Each tool targets a distinct aspect of Monarch Money (accounts, transactions, budgets, cashflow, credit, institutions, auth). Even with many transaction-related tools, they differ in scope (e.g., get_transactions vs get_transaction_details vs get_transaction_splits) and have clear parameter distinctions, leaving no ambiguity.
All tool names use snake_case and follow a verb_noun pattern, which is consistent. However, the verbs vary: most use 'get_', but there are also 'check_', 'debug_', 'setup_', and 'refresh_'. This minor inconsistency prevents a perfect score.
With 25 tools, the server is on the larger side but covers many facets of personal finance (accounts, transactions, budgets, cashflow, credit, institutions). Each tool serves a clear purpose, and the count feels justified for the domain, though slightly heavy.
The tool set is heavily read-focused, lacking any create, update, or delete operations for core entities like accounts, transactions, or budgets. This is a significant gap for agents that need to manage finances, leaving the surface incomplete for typical CRUD workflows.
Maintenance
Related MCP Connectors
Ask Claude about your income and spending, and import bank statements. No bank login.
Read-only access to your own bank, card and brokerage accounts for Claude, ChatGPT and other AI agents: balances, transactions, spending, subscriptions, cashflow and investment holdings. It can never move money.
Personal finance, bank account, and shared memory connector for Claude, ChatGPT, Gemini Spark & more
Ask your AI about your own accounts, debts, budgets and goals. OAuth sign-in, read-only by default.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables AI assistants to access and analyze MonarchMoney personal finance data through natural language queries. Provides comprehensive financial insights including account balances, transaction analysis, budget tracking, and spending patterns with enterprise-grade security.11MIT
- AlicenseAqualityDmaintenanceEnables integration with Monarch Money to query financial data, analyze spending patterns, track budgets, and get personalized financial insights through conversational AI with Claude Desktop.113ISC
- AlicenseNot gradedqualityDmaintenanceProvides read-only access to Monarch Money financial data, enabling AI assistants to analyze transactions, budgets, and cashflow.4MIT
- AlicenseNot gradedqualityBmaintenanceInteractive UI for Monarch Money inside claude.ai, running on Monarch's official OAuth. Provides interactive widgets for transactions, spending, and accounts with inline editing and broad data-tool coverage.MIT