Monarch Money MCP 服务器 logo

Monarch Money MCP 服务器

Community
robcerda

MCP Server for use with Monarch Money

Publisherrobcerda
Repositorymonarch-mcp-server
LanguagePython
Forks
158
Stars
390
Available tools
0
Transport typestdio
Categories
LicenseMIT
Links
  • Connect tools to AI workflows

    Monarch Money MCP 服务器 exposes MCP capabilities that can be used by compatible AI clients and agents.

  • 0 available tools

    Browse the callable actions below, including names and descriptions when provided by the server.

  • Ready-to-copy setup

    Use the installation snippets to configure this server in your preferred MCP client.

  • Open source signals

    390 stars and 158 forks from the linked repository.

MseeP.ai Security Assessment Badge

Monarch Money MCP Server

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.

🚀 Quick Start

If you plan to use this MCP server locally / on the same computer as Claude Desktop or similar, start with the Local Installation section.

For other deployment scenarios - like containerized deployment or cloud hosting - start with the Containerized Deployment section.

1. Local Installation

  1. Clone this repository:

    bash
    git clone https://github.com/robcerda/monarch-mcp-server.git
    cd monarch-mcp-server
  2. Install dependencies:

    Using uv (recommended):

    bash
    uv sync --locked

    --locked installs exactly what uv.lock pins, verified against the hashes it records, and refuses to re-resolve. Without it, uv sync is free to pick up whatever versions happen to satisfy the ranges today.

    Using pip:

    bash
    pip install -r requirements-lock.txt --require-hashes
    pip install -e . --no-deps

    requirements-lock.txt is generated from uv.lock and pins every transitive dependency with hashes, so --require-hashes gives the pip path the same guarantee as the uv one. --no-deps on the second command stops pip re-resolving what the first command just pinned.

    pip install -r requirements.txt still works and installs exactly the same set. That file is now a one line include of requirements-lock.txt, kept so existing setups and scripts do not break. The pins moved out of it because a root requirements.txt gets resolved as an independent manifest, which had started producing a pinned set that disagreed with uv.lock.

  3. 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

    json
    {
      "mcpServers": {
        "Monarch Money": {
          "command": "/opt/homebrew/bin/uv",
          "args": [
            "run",
            "--locked",
            "--project",
            "/path/to/your/monarch-mcp-server",
            "monarch-mcp-server"
          ]
        }
      }
    }

    Important: Replace /path/to/your/monarch-mcp-server with your actual path!

    uv run --locked --project resolves dependencies from the repo's uv.lock, and monarch-mcp-server is the console script declared in pyproject.toml. --locked matters: without it, a lockfile that has drifted from pyproject.toml is silently re-resolved against PyPI and the recorded hashes stop being enforced. With it, drift is a startup error. Earlier versions of this README used uv run --with 'mcp[cli]', which builds a fresh unpinned environment on every launch and silently picks up whatever the newest release happens to be. That is what broke every install when the MCP SDK published 2.0, and the client only reported it as the server disconnecting. Pinning the launch to the lockfile means a new upstream release cannot change what your server runs.

  4. Restart Claude Desktop

OR

  1. Configure Claude Code (CLI): Add this to your Claude Code configuration file:

    Global (all projects):

    macOS/Linux: ~/.claude.json

    Windows: %USERPROFILE%\.claude.json

    json
    {
      "mcpServers": {
        "Monarch Money": {
          "command": "/opt/homebrew/bin/uv",
          "args": [
            "run",
            "--locked",
            "--project",
            "/path/to/your/monarch-mcp-server",
            "monarch-mcp-server"
          ]
        }
      }
    }

    Project-level (specific directory):

    Create .mcp.json in your project directory:

    json
    {
      "Monarch Money": {
        "command": "/opt/homebrew/bin/uv",
        "args": [
          "run",
          "--locked",
          "--project",
          "/path/to/your/monarch-mcp-server",
          "monarch-mcp-server"
        ]
      }
    }

    If installed via pip instead of uv, use:

    json
    {
      "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!

  2. Restart Claude Code

2. One-Time Authentication Setup

Important: For security and MFA support, authentication is done outside of Claude.

Open a terminal and run:

bash
cd /path/to/your/monarch-mcp-server
uv run python login_setup.py        # or: python login_setup.py

The script offers three login paths:

Option 1 (recommended): Session cookies from your browser

Long-lived sessions, supports SSO accounts, and sidesteps Cloudflare CAPTCHA gates on programmatic login. Steps:

  1. Log in to https://app.monarch.com in Chrome or Firefox.

  2. Open DevTools (F12) → Network tab.

  3. Click any request whose Name starts with graphql (or any request to api.monarch.com).

  4. Scroll to Request Headers, find the cookie: header, and copy the full value.

  5. Save it to the cookie file for your platform (recommended), then re-run the script — it reads the file automatically:

    macOS / Linux — ~/.config/monarch-mcp/cookie.txt (respects $XDG_CONFIG_HOME):

    bash
    mkdir -p ~/.config/monarch-mcp
    # paste the cookie value into the file with your editor, then:
    chmod 600 ~/.config/monarch-mcp/cookie.txt

    Windows — %APPDATA%\monarch-mcp\cookie.txt:

    powershell
    New-Item -ItemType Directory -Force "$env:APPDATA\monarch-mcp" | Out-Null
    notepad "$env:APPDATA\monarch-mcp\cookie.txt"   # paste the cookie value, save, close

    Files under your user profile are already ACL-restricted to your account on Windows; no chmod equivalent is needed for typical single-user machines.

    To use a different location on any platform, set the MONARCH_MCP_COOKIE_FILE environment variable to the full path.

    Alternatively, paste the value at the interactive prompt — but note that POSIX terminals silently truncate pasted input at the canonical-mode buffer limit (MAX_CANON, 1024 bytes on macOS/Linux), and real Monarch cookie headers are usually longer than that, so the prompt path fails with a confusing auth error for most users. The cookie file has no length limit and survives repo updates.

The script verifies the cookies against the live API before saving them to your system keyring. The cookie file is only read at setup time; the running MCP server uses the keyring session.

Option 2: Email and password

Standard interactive login. The script handles:

  • Email verification codes (Monarch may send one for a new device session even when MFA is off).
  • TOTP MFA codes if you have MFA enabled.
  • Cloudflare CAPTCHA detection: if Monarch blocks programmatic login, the script tells you to switch to option 1.

The resulting long-lived session token is saved to your system keyring.

Option 3: Legacy session token paste

Kept for users with an existing token captured before the May 2026 API change. Monarch may no longer accept token-only auth on the GraphQL endpoint; if the verification call returns 401, fall back to option 1.

3. Start Using

Once authenticated, use these tools directly in Claude Desktop or Claude Code:

  • get_accounts - View all your financial accounts
  • get_transactions - Recent transactions with filtering
  • get_budgets - Budget information and spending
  • get_cashflow - Income/expense analysis

Containerized Deployment

The Docker image uses Astral's uv/Python 3.12 slim base, installs from uv.lock, and defaults to HTTP on 0.0.0.0:8000 inside the container.

Build the image

bash
docker build -t monarch-mcp-server .

Authenticate

Authenticate once using a persistent session volume:

bash
docker run --rm -it \
  -v monarch-session:/home/app/.monarch-mcp-server \
  monarch-mcp-server python login_setup.py

The login script supports a cookie file for browser-cookie authentication. To use it, also mount your cookie file at /tmp/monarch-cookie.txt:ro and set MONARCH_MCP_COOKIE_FILE=/tmp/monarch-cookie.txt for the login container.

The file must be readable by the container's uid 10001, which conflicts with the chmod 600 advised for the local flow: a 0600 file owned by your host user is not readable by uid 10001 inside the container. For the container login, either chown 10001 cookie.txt and keep it at 0600, or run the login container with --user $(id -u) so it reads the file as you. Do not widen it to 0644. Delete the file once the login has succeeded.

Once saved, the session volume is sufficient for normal server launches.

[!IMPORTANT] The session is stored unencrypted in that volume. This differs from a local install, and the difference is easy to miss.

On macOS and Windows the session goes to the system keyring. A container has no keyring backend, so storage falls back to a file. That file is encrypted at rest only on Windows, through DPAPI, so in a Linux container it holds your Monarch session in plaintext. Permissions are as tight as a file can be, mode 0600 inside a 0700 directory owned by uid 10001, but file permissions do not help against anyone who can reach the volume from outside the container.

Treat monarch-session as a secret. It can be read by root on the Docker host, by any user in the docker group, by any other container that mounts the same volume, by docker cp and docker exec, and by anything that backs up /var/lib/docker. A Monarch session grants full read and write access to your accounts and does not expire on its own, so a copy of this volume is a lasting credential. Back it up only to somewhere you would keep a password, and delete the volume with docker volume rm monarch-session when you are done with it.

The cookie file described below is the same kind of secret. Delete it once the login has succeeded; it is only needed for that one run.

Start the HTTP server

Reuse the session volume when starting the server:

bash
$ docker run -d --name monarch-mcp --restart unless-stopped \
  -p 127.0.0.1:8000:8000 \
  -v monarch-session:/home/app/.monarch-mcp-server \
  monarch-mcp-server

Connect your MCP client to http://127.0.0.1:8000/mcp using Streamable HTTP. See HTTP transport configuration for all settings.

Connect from another machine

[!WARNING] This MCP server is not multi-user or multi-account. All connected clients share the same session and permissions. Ensure that you understand the security implications before exposing the server to a network.

To connect from another machine, put the container behind an authenticated HTTPS reverse proxy or a private network with access controls, publish the port on the appropriate interface, and allow the hostname used by the client:

bash
docker run -d --name monarch-mcp --restart unless-stopped \
  -p 127.0.0.1:8000:8000 \
  -e MONARCH_MCP_ALLOWED_HOSTS=mcp.example.com \
  -v monarch-session:/home/app/.monarch-mcp-server \
  monarch-mcp-server

Here a reverse proxy on the Docker host forwards https://mcp.example.com/mcp to http://127.0.0.1:8000/mcp, preserving the public Host header.

The proxy must support streaming responses without buffering. For direct access on a private network, allow the client's Host value including the port, such as server.lan:8000.

Let me stress this point: This is a single-account server! All connected clients share the same saved Monarch session and permissions, including enabled write tools. Basic Host/origin checks protect against DNS rebinding; they do not authenticate callers. Use one server and session volume per Monarch account if you need to.

Use STDIO instead

To run the Docker image over STDIO instead:

bash
docker run --rm -i \
  -e MONARCH_MCP_TRANSPORT=stdio \
  -v monarch-session:/home/app/.monarch-mcp-server \
  monarch-mcp-server

HTTP Transport Configuration

The server supports MCP Streamable HTTP at /mcp but only when explicitly selected:

bash
uv run --locked monarch-mcp-server --transport http --host 127.0.0.1 --port 8000

Connect an MCP client using Streamable HTTP to http://127.0.0.1:8000/mcp.

SettingCLI flagEnvironment variableDefault outside Docker
Transport--transportMONARCH_MCP_TRANSPORTstdio (http aliases streamable-http)
Listen address--hostMONARCH_MCP_HOST127.0.0.1
Listen port--portMONARCH_MCP_PORT8000
Additional allowed Host headers--allowed-host (repeatable)MONARCH_MCP_ALLOWED_HOSTS (comma-separated)None; loopback hosts are always allowed
Additional allowed browser Origins--allowed-origin (repeatable)MONARCH_MCP_ALLOWED_ORIGINS (comma-separated)None; HTTP loopback origins are always allowed

CLI flags override their environment settings. Host entries include the port when clients send one; server.lan:* allows any port. Origin entries include the scheme, for example https://client.example.com. Clients without an Origin header are supported. Browser clients may additionally require CORS handling at the reverse proxy.

Meta Muse

Works great with Meta Muse, Meta's AI assistant, alongside Claude Desktop and Claude Code. Muse speaks MCP, so it connects the same way as any other client: give it the stdio launch command from the installation section, or point it at the Streamable HTTP endpoint if you are running the container.

Using Muse? Ask it to install this server from this repo. Muse can handle the install and register the server with itself, but authentication is a step only you can do: run login_setup.py once and paste a browser cookie, or enter your password and MFA. After that, ask Muse to list your Monarch accounts to confirm it is working.

Check out Muse, your personal AI agent. Redeem my code in Settings within 48 hours of joining and we'll both get 1 billion Muse tokens.

Code: O63W0U

https://muse.ai/join

✨ Features

📊 Account Management

  • Get Accounts: View all linked financial accounts with balances and institution info
  • Get Account Holdings: See securities and investments in investment accounts
  • Refresh Accounts: Request real-time data updates from financial institutions

💰 Transaction Access

  • Get Transactions: Fetch transaction data with filtering by date, account, and pagination
  • Create Transaction: Add new transactions to accounts
  • Update Transaction: Modify existing transactions (amount, description, category, date)

🏷️ Category Management

  • Get Categories: List all transaction categories with groups, icons, and metadata
  • Get Category Groups: View category groups with their associated categories

📋 Transaction Review

  • Get Transactions Needing Review: Find transactions that need attention (uncategorized, no notes, flagged)
  • Set Transaction Category: Assign a category to a transaction
  • Update Transaction Notes: Add or update notes on transactions (great for receipt links)
  • Mark Transaction Reviewed: Clear the needs_review flag on transactions

📦 Bulk Operations

  • Bulk Categorize Transactions: Apply a category to multiple transactions at once

🔖 Tag Management

  • Get Tags: List all available tags with colors and usage counts
  • Set Transaction Tags: Apply tags to a transaction
  • Create Tag: Create a new tag with custom name and color

🔍 Advanced Search

  • Search Transactions: Comprehensive search with filters for merchant, category, account, tags, date ranges, and amounts
  • Get Transaction Details: Retrieve complete details for a single transaction
  • Delete Transaction: Remove a transaction
  • Get Recurring Transactions: View upcoming recurring transactions

🤖 Transaction Rules (Auto-Categorization)

  • Get Transaction Rules: List all auto-categorization rules
  • Create Transaction Rule: Create rules with merchant/amount conditions to auto-categorize
  • Update Transaction Rule: Modify existing rules
  • Delete Transaction Rule: Remove a rule

🔄 Merchant & Recurring Stream Management

  • Get Merchant: View a merchant's details including recurring transaction stream configuration
  • Update Merchant: Modify a merchant's name and/or recurring stream settings (frequency, amount, base date)
  • Review Recurring Stream: Accept, ignore, or reset recurring transaction streams detected by Monarch

✂️ Transaction Splits

  • Get Transaction Splits: View how a transaction has been split into parts
  • Split Transaction: Divide a single transaction into multiple parts with different categories or merchants

💵 Budget Management

  • Get Budgets: Access budget information including spent amounts and remaining balances by category
  • Set Budget Amount: Create or modify budget amounts for any category or category group

📈 Net Worth Tracking

  • Get Net Worth: Track total net worth over time with daily snapshots and trend analysis
  • Get Account Balance History: View historical balance data for any account
  • Get Net Worth by Account Type: See net worth breakdown across account types (checking, savings, investments, etc.)

📊 Financial Analysis

  • Get Cashflow: Analyze financial cashflow over specified date ranges with income/expense breakdowns
  • Get Transactions Summary: Quick high-level statistics about your transactions
  • Get Spending Summary: Spending breakdown by category with totals

🔐 Secure Authentication

  • One-Time Setup: Authenticate once, use for weeks/months
  • Email OTP Support: Handles Monarch's email verification flow for new devices/sessions
  • MFA Support: Full support for two-factor authentication
  • SSO/Google sign-in: Use monarch_login_with_token to paste a session token from your browser
  • Session Persistence: No need to re-authenticate frequently
  • Secure: Credentials never pass through Claude

🛠️ Available Tools

All 58 registered tools. Required parameters are listed first, optional ones are marked with a trailing question mark. This table is generated from the live tool registry and the functions' signatures, so it does not drift.

ToolDescriptionParameters
add_transaction_tagAdd a tag to a transaction, preserving any tags already on ittransaction_id, tag_id
bulk_categorize_transactionsApply the same category to multiple transactions at oncetransaction_ids, category_id, mark_reviewed?, dry_run?
categorize_transactionAssign a category to a transactiontransaction_id, category_id
check_auth_statusReport the stored session and its auth modeNone
create_transactionCreate a new transaction in Monarch Moneydate, account_id, amount, merchant_name, category_id, notes?, update_balance?
create_transaction_categoryCreate a new transaction categorygroup_id, transaction_category_name, icon?, rollover_enabled?, rollover_type?
create_transaction_ruleCreate a new transaction auto-categorization rulemerchant_criteria_operator?, merchant_criteria_value?, merchant_criteria_values?, merchant_criteria?, original_statement_operator?, original_statement_values?, original_statement_criteria?, use_original_statement?, amount_operator?, amount_value?, amount_lower?, amount_upper?, amount_is_expense?, set_category_id?, set_merchant_name?, add_tag_ids?, link_goal_id?, hide_from_reports?, review_status?, account_ids?, category_ids?, apply_to_existing?
create_transaction_tagCreate a new transaction tagname, color
debug_session_loadingDiagnose session loading problemsNone
delete_transactionDelete a transaction from Monarch Moneytransaction_id
delete_transaction_ruleDelete a transaction rulerule_id
get_account_balance_historyGet historical balance data for a specific accountaccount_id
get_account_holdingsGet investment holdings for a specific accountaccount_id
get_account_sync_healthReport the health of each linked institution connectionstale_after_days?
get_accountsGet all financial accounts from Monarch MoneyNone
get_budgetsGet budget information from Monarch Moneystart_date?, end_date?
get_cashflowGet cashflow analysis from Monarch Moneystart_date?, end_date?
get_cashflow_by_monthGet spending trends over time, broken down by category and monthstart_date, end_date
get_category_detailsGet a single category's details including budget amounts for a monthcategory_id, month?
get_debt_paydownGet the debt paydown plan and the accounts feeding itmethod?
get_goal_contributionsShow a goal's budgeted contributions, broken down by funding accountgoal_id, month?
get_goalsList Monarch savings and debt-paydown goalsNone
get_merchantGet a merchant's details including recurring transaction stream configurationmerchant_id
get_net_worthGet net worth history over timestart_date?, end_date?, account_type?
get_net_worth_by_account_typeGet net worth breakdown by account type over timestart_date, timeframe?
get_recurring_transactionsGet upcoming recurring transactionsstart_date?, end_date?
get_spending_summaryGet a spending summary broken down by category, category group, and merchantstart_date?, end_date?
get_transaction_categoriesGet all available transaction categories from Monarch MoneyNone
get_transaction_category_groupsGet all transaction category groups (parent groupings for categories)None
get_transaction_detailsGet full details for a specific transactiontransaction_id
get_transaction_rulesGet all transaction auto-categorization rules from Monarch MoneyNone
get_transaction_splitsGet the splits for a transactiontransaction_id
get_transaction_tagsGet all available transaction tags from Monarch MoneyNone
get_transactionsGet transactions from Monarch Moneylimit?, offset?, start_date?, end_date?, account_id?, search?, category_ids?, category_group_ids?, account_ids?, tag_ids?, has_notes?, is_split?, is_recurring?, wide_search?, search_scan_limit?
get_transactions_needing_reviewGet transactions that need review based on various criterianeeds_review?, days?, uncategorized_only?, without_notes_only?, limit?, offset?, account_id?
get_transactions_summaryGet a high-level summary of transactionsNone
mark_transaction_reviewedMark a transaction as reviewed (clears the needs_review flag)transaction_id
monarch_loginSign in via a secure form in the client UINone
monarch_login_with_tokenSign in with a browser copied session tokenNone
monarch_logoutClear the stored session and drop the cached clientNone

Installation

TypingMind
Prerequisites:

Node.js 18+

{
  "mcpServers": {
    "robcerda-monarch-mcp-server": {
      "command": "",
      "args": []
    }
  }
}

Use Monarch Money MCP 服务器 MCP with multiple AI models

TypingMind connects MCP tools at the workspace level, so once Monarch Money MCP 服务器 is connected, you can use it with different AI models in TypingMind instead of setting it up separately for each model. This MCP runs locally through the TypingMind MCP connector on your device.

Setup guide to use the local connector

Use this when the MCP server needs access to local files, apps, or private resources on your computer.

1

Open the MCP settings

In TypingMind, go to Settings, Advanced Settings, then Model Context Protocol and choose Setup Connector.

  1. Open TypingMind in your browser.
  2. Click the Settings icon.
  3. Go to Advanced Settings.
  4. Open the Model Context Protocol section.
  5. Click Setup Connector and choose This Device.
TypingMind MCP connector setup screen with This Device selected
2

Run the connector command

Choose This Device, copy the command from TypingMind, and run it in Terminal. Keep the process running while you use MCP.

  1. Copy the setup command shown by TypingMind.
  2. Open Terminal on macOS or Windows Terminal on Windows.
  3. Paste and run the command.
  4. Approve the package install if Terminal asks you to proceed.
  5. Keep the Terminal window running while using MCP tools.
3

Add Monarch Money MCP 服务器 as a server

When the connector status is Ready, click Edit Servers and paste the MCP server configuration.

  1. Wait until the connector status shows Ready.
  2. Click Edit Servers.
  3. Paste the Monarch Money MCP 服务器 MCP server configuration.
  4. Save the server list.
  5. Refresh if you want to confirm the connector is still ready.
TypingMind MCP settings showing active server and Edit Servers button
{
  "mcpServers": {
    "robcerda-monarch-mcp-server": {
      "command": "npx",
      "args": [
        "-y",
        "monarch-mcp-server"
      ]
    }
  }
}
4

Use it across models

Save the server list, open Plugins, enable the Monarch Money MCP 服务器 MCP tools, then select any supported AI model in TypingMind and use the tools in chat or assign them to an AI agent.

  1. Open the Plugins page in TypingMind.
  2. Enable the Monarch Money MCP 服务器 MCP tools.
  3. Start a chat and choose the AI model you want to use.
  4. Use the MCP tools in chat or assign them to an AI agent.
  5. Switch to another AI model whenever needed without reconnecting MCP.
TypingMind chat using enabled MCP tools with a selected AI model
Can you use Monarch Money MCP 服务器 to help me with this task?
Monarch Money MCP 服务器
Sure. I read it.
Here is what I found using Monarch Money MCP 服务器.

Frequently asked questions

What is the Monarch Money MCP 服务器 MCP server used for?

Monarch Money MCP 服务器 is an MCP server that lets compatible AI clients connect to external tools and context. In TypingMind, you can add this MCP server once and make its tools available in your AI workspace.

Can I use Monarch Money MCP 服务器 MCP with multiple AI models in TypingMind?

Yes. TypingMind connects MCP tools at the workspace level, so you can use Monarch Money MCP 服务器 with different AI models such as Claude, ChatGPT, Gemini, or other models you have configured in TypingMind without setting up the MCP server separately for each model.

Why use Monarch Money MCP 服务器 MCP with TypingMind?

TypingMind is one of the best frontends for LLM chat because it brings multiple AI models, prompts, plugins, AI agents, API keys, and MCP tools into one workspace. With Monarch Money MCP 服务器 connected, you can use its MCP tools across your preferred models while keeping your chat workflow organized in TypingMind.

How do I connect Monarch Money MCP 服务器 MCP to TypingMind?

Monarch Money MCP 服务器 runs through the TypingMind local MCP connector. This is best when the MCP server needs access to local files, desktop apps, command-line tools, or private resources on your computer.

What tools does Monarch Money MCP 服务器 MCP provide in TypingMind?

Monarch Money MCP 服务器 exposes MCP capabilities that can be enabled from the TypingMind Plugins page and used in chat or assigned to AI agents.

Do I need to share my API keys with TypingMind to use Monarch Money MCP 服务器 MCP?

No. TypingMind is local-first and lets you keep your model providers, API keys, prompts, and MCP configuration under your control. If Monarch Money MCP 服务器 requires authentication, add the required headers, OAuth settings, or local configuration for that MCP server when you create the connection.

Related MCP Servers

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇