Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

com.pulsemcp/monarch-money

NPM · MONARCH-MONEY-MCP-SERVER · SCANNED SEP 21

MCP server for Monarch Money — account, transaction, and budget management.

0 this week 79 Trust /100
Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →

Supply Chain Security98
  • No malware found by supply-chain analysis.Pass
  • No known CVEs affecting this package version or its production dependencies.Pass
  • No install/post-install scripts declared.Pass
  • 31 of 96 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency45
Schema Quality & AI Usability61
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 7274 tokens (~316/item across 23 items; 23 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management97
  • Stability observed for 29 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage91
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 74% of tool parameters carry a description.Partial
Tool Safety75
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • 0 of 3 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "delete_transaction" implies "delete" and declares no destructiveHint at all, which the MCP spec reads as destructive by default. See how to fix → Fail
  • An AI judge read all 23 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Install

How do I install the com.pulsemcp/monarch-money MCP server?

com.pulsemcp/monarch-money runs locally as an npm package, launched with npx -y monarch-money-mcp-server. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

npm · monarch-money-mcp-server

# add to Claude Code
claude mcp add com-pulsemcp-monarch-money -- npx -y monarch-money-mcp-server
// .cursor/mcp.json
{
  "mcpServers": {
    "com-pulsemcp-monarch-money": {
      "command": "npx",
      "args": [
        "-y",
        "monarch-money-mcp-server"
      ]
    }
  }
}
// .vscode/mcp.json
{
  "servers": {
    "com-pulsemcp-monarch-money": {
      "command": "npx",
      "args": [
        "-y",
        "monarch-money-mcp-server"
      ]
    }
  }
}
# add to Codex CLI
codex mcp add com-pulsemcp-monarch-money -- npx -y monarch-money-mcp-server
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "com-pulsemcp-monarch-money": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "monarch-money-mcp-server"
      ],
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add com-pulsemcp-monarch-money --command npx --arg -y --arg monarch-money-mcp-server
# ~/.hermes/config.yaml
mcp_servers:
  com-pulsemcp-monarch-money:
    command: "npx"
    args: ["-y", "monarch-money-mcp-server"]
// ~/.netclaw/config/netclaw.json
{
  "McpServers": {
    "com-pulsemcp-monarch-money": {
      "Transport": "stdio",
      "Command": "npx",
      "Arguments": [
        "-y",
        "monarch-money-mcp-server"
      ]
    }
  }
}
# add to Vellum
assistant mcp add com-pulsemcp-monarch-money -t stdio -c npx -a -y monarch-money-mcp-server
// mcp.json
{
  "mcpServers": {
    "com-pulsemcp-monarch-money": {
      "command": "npx",
      "args": [
        "-y",
        "monarch-money-mcp-server"
      ]
    }
  }
}
Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 21 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 93 to 97. That category is still filling its 30-day observation window: 28 days of observed history at the previous scan, 29 at this one. The score rises as the window fills, whether or not the server changes.

  • 19 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 87 to 90. That category is still filling its 30-day observation window: 26 days of observed history at the previous scan, 27 at this one. The score rises as the window fills, whether or not the server changes.

  • 17 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 80 to 83. That category is still filling its 30-day observation window: 24 days of observed history at the previous scan, 25 at this one. The score rises as the window fills, whether or not the server changes.

  • 16 Sept 26 −3
    • Stability: pass → 0.80 functional
  • 15 Sept 26 0
    • Stability: 0.97 → pass security
  • 14 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 93 to 97. That category is still filling its 30-day observation window: 28 days of observed history at the previous scan, 29 at this one. The score rises as the window fills, whether or not the server changes.

  • 12 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 87 to 90. That category is still filling its 30-day observation window: 26 days of observed history at the previous scan, 27 at this one. The score rises as the window fills, whether or not the server changes.

  • 10 Sept 26 −2
    • Stability: pass → 0.83 functional
Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 21 Sept 2026 · Analysed npm/monarch-money-mcp-server@0.0.13

Provenance No attestation

The registry publishes no build provenance for this version, so there is nothing to verify.

Result No attestation
Ecosystem npm

Background: How many MCP packages publish verified provenance →

Dependencies 96 packages
Packages resolved 96
Stale 31
Tree resolution Complete

Background: SBOMs and build attestations, explained →

MCP tools · 23 exposed · ~7,274 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
check_authentication ~389

Check whether the Monarch Money MCP server has a valid session, and return setup instructions when it does not. When authenticated, returns: ```json { "authenticated": true, "email": "you@example.com", "id": "user_123", "name": "Your Name", "sessionPath": "/home/you/.monarch-money-mcp/session.enc", "obtainedAt": "2026-01-15T12:34:56.000Z" } ``` When not authenticated, returns a multi-line string explaining the four ways to authenticate the server: 1. **Env-var token (simplest, headless)** — Set `MONARCH_SESSION_TOKEN=<token>` in the server's environment. Useful for sandboxed or unattended deployments. 2. **Env-var email + password** — Set `MONARCH_EMAIL` and `MONARCH_PASSWORD`. The server runs Monarch's REST login at startup. The first time from a new install Monarch sends an email OTP — read the code, set `MONARCH_EMAIL_OTP=<code>`, and restart. Set `MONARCH_TOTP=<code>` if your account has 2FA enabled. 3. **Login script (interactive)** — Run `npm run login` from the server package directory. 4. **Pass an existing token via tool** — Call `monarch_login_with_token` with a token you obtained another way. Once authenticated, the session persists across restarts. The encryption key is derived from `MONARCH_SESSION_PASSPHRASE` when set, otherwise from the host + user — making the encrypted file machine-bound by default. **Use cases:** - Confirm the server is ready before running other tools - Diagnose auth errors from other tools - Discover where the encrypted session file lives on disk - Get setup instructions for a fresh install

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

create_tag ~236

Create a new transaction tag. Returns the created tag ({ id, name, color, order }); Monarch assigns `order` server-side. Both `name` and `color` are required. `color` is a hex string like the ones returned by `get_tags` (e.g. `#19d2a5`, `#ff8800`) — call `get_tags` first if you need to match an existing palette. Example call: ```json { "name": "Reimbursable", "color": "#19d2a5" } ``` Example response: ```json { "id": "tag_new", "name": "Reimbursable", "color": "#19d2a5", "order": 7 } ``` **Use cases:** - Add a tag you'll then assign to transactions via `update_transaction` (`tagIds`) - Set up a tagging scheme without leaving the assistant

NameTypeReqDescription
colorstringyesHex color like #19d2a5 (6-digit, matches get_tags).
namestringyesDisplay name for the new tag.

No output schema declared.

No examples provided.

create_transaction ~228

Create a manual transaction. Use this for cash spending or other transactions Monarch can't import automatically. The amount sign matters: negative = expense (money out), positive = income (money in). Example response: ```json { "id": "tx_new123", "amount": -12.50, "date": "2026-01-20", "account": { "id": "acc_chk", "displayName": "Checking" }, "merchant": { "id": "m_new", "name": "Coffee Shop" } } ``` **Use cases:** - Log cash spending Monarch can't see - Backfill a missing transaction - Add a one-off income event (gift, refund, side income)

NameTypeReqDescription
accountIdstringyesAccount UUID.
amountnumberyesAmount; negative for expenses, positive for income.
categoryIdstringyesCategory UUID (required by Monarch).
datestringyesTransaction date (YYYY-MM-DD).
merchantNamestringyes
notesstring

No output schema declared.

No examples provided.

create_transaction_rule ~535

Create a transaction rule that auto-classifies imported transactions. A rule has **criteria** (what it matches) and **actions** (what it does to matches). Supply at least one criterion and at least one action. Criteria: - `merchantCriteria` — array of { operator, value } matchers against the merchant name (e.g. operator `contains`). - `merchantCriteriaUseOriginalStatement` — match against the raw bank statement text instead of the cleaned merchant name. - `amountCriteria` — single { operator, value, isExpense } matcher (e.g. operator `gte`). - `categoryIds` / `accountIds` — only match transactions already in these categories / accounts (use `get_categories` / `get_accounts` for ids). Actions: - `setCategoryAction` — category id to assign to matches (a bare id string, NOT an array; use `get_categories`). - `setHideFromReportsAction` — hide matching transactions from reports. - `addTagsAction` — tag ids to add to matches (use `get_tags`). Set `applyToExistingTransactions: true` to retroactively run the rule against transactions you already have. Monarch does not echo the created rule back, so this returns the **full refreshed rule list** — find the new rule (and its id, for later edits) there. Example: "When the merchant contains 'Whole Foods', categorize as Groceries": ```json { "merchantCriteria": [{ "operator": "contains", "value": "Whole Foods" }], "setCategoryAction": "cat_groceries", "applyToExistingTransactions": true } ``` **Use cases:** - Auto-categorize a recurring merchant - Auto-hide transfers from reports - Auto-tag a class of spending

NameTypeReqDescription
accountIdsarrayOnly match transactions in these account ids.
addTagsActionarrayAction: tag ids to add to matching transactions.
amountCriteriaobjectSingle amount matcher (criteria).
applyToExistingTransactionsbooleanRetroactively apply the rule to existing transactions.
categoryIdsarrayOnly match transactions already in these category ids.
merchantCriteriaarrayMerchant-name matchers (criteria).
merchantCriteriaUseOriginalStatementbooleanMatch the raw statement text instead of the cleaned merchant.
setCategoryActionstringAction: category id to assign to matches (single id string).
setHideFromReportsActionbooleanAction: hide matching transactions from reports.

No output schema declared.

No examples provided.

delete_tag ~132

Delete a transaction tag by id. Removes the tag from the workspace and unassigns it from any transactions that carried it. Returns `{ deleted, errors }`. `deleted` is confirmed by re-reading the tag list after the mutation (Monarch's raw `deleted` flag is not trusted). Example call: ```json { "id": "tag_old" } ``` **Use cases:** - Remove a stale or accidentally-created tag - Clean up tags left behind by earlier automation Use `get_tags` to look up the tag id first.

NameTypeReqDescription
idstringyesTag id to delete.

No output schema declared.

No examples provided.

delete_transaction ~68

Permanently delete a transaction. This action cannot be undone. Example response: ```json { "deleted": true, "errors": [] } ``` **Use cases:** - Remove a duplicate manual entry - Delete a transaction created by mistake

NameTypeReqDescription
idstringyesTransaction UUID.

No output schema declared.

No examples provided.

delete_transaction_rule ~102

Permanently delete a transaction rule by id (from `get_transaction_rules`). This action cannot be undone. Existing transactions the rule already classified are not reverted. Example response: ```json { "deleted": true, "errors": [] } ``` **Use cases:** - Remove a rule that mis-categorizes transactions - Clean up a rule that is no longer needed

NameTypeReqDescription
idstringyesRule id to delete (from get_transaction_rules).

No output schema declared.

No examples provided.

get_account_balance_history ~175

Daily balance snapshots for a single account over a date range. Useful for charting a balance curve, computing average balance, or spotting a sudden drop. Example response: ```json [ { "date": "2026-01-01", "balance": 4321.55 }, { "date": "2026-01-02", "balance": 4180.22 } ] ``` **Use cases:** - Plot a per-account balance chart - Compute month-over-month balance change for one account - Investigate a specific date when a balance dropped unexpectedly

NameTypeReqDescription
accountIdstringyesAccount UUID — fetch via get_accounts.
endDatestringyesInclusive end date (YYYY-MM-DD).
startDatestringyesInclusive start date (YYYY-MM-DD).

No output schema declared.

No examples provided.

get_accounts ~356

List every account connected to the Monarch Money workspace, including assets and liabilities. Returns balance, type/subtype, hidden/sync flags, last update time, and the linked institution. Use this as the starting point for nearly every read operation — most other tools take an account id you'll find here. Set `includeHoldings: true` to attach investment holdings (ticker, quantity, value, cost basis) to each account that tracks them. Holdings are an extra GraphQL request per account, so omit the flag when you only need balances. Example response (with `includeHoldings: true`): ```json [ { "id": "acc_123", "displayName": "Vanguard Brokerage", "currentBalance": 84210.55, "displayBalance": 84210.55, "isAsset": true, "type": { "name": "brokerage", "display": "Brokerage" }, "institution": { "id": "inst_42", "name": "Vanguard" }, "holdings": [ { "id": "h_1", "ticker": "VTI", "name": "Vanguard Total Stock Market", "quantity": 312.5, "costBasis": 65000, "value": 78912.5 } ] } ] ``` **Use cases:** - Discover account ids for use with other tools - Render a "connected accounts" overview - Compute total balance per institution - Pull holdings for portfolio analysis (with `includeHoldings: true`)

NameTypeReqDescription
includeHoldingsbooleanWhen true, attach investment holdings to each account. Default: false.

No output schema declared.

No examples provided.

get_budgets ~239

List per-category planned budget amounts across one or more months. Each row pairs a category with its planned amount for a single month — multi-month windows return one row per (category, month). Date arguments take the year-month portion of the YYYY-MM-DD value; the day is ignored. Omit both dates to get the current month's budgets. Example response: ```json [ { "categoryId": "cat_food", "categoryName": "Groceries", "amount": 600, "month": "2026-01-01" }, { "categoryId": "cat_dine", "categoryName": "Dining", "amount": 250, "month": "2026-01-01" } ] ``` **Use cases:** - Show "what is my budget for X?" for each category - Audit current-period budget allocations before adjusting - Pull a historical period's budget for retrospective analysis

NameTypeReqDescription
endDatestringInclusive end date (YYYY-MM-DD).
startDatestringInclusive start date (YYYY-MM-DD).

No output schema declared.

No examples provided.

get_categories ~349

List every category configured on the workspace, with its parent group and "system category" flag (system categories are predefined by Monarch and can't be renamed). Set `includeGroups: true` to also return the top-level category groups (Income, Expense, Transfer, etc.) — useful for rendering a grouped picker. The shape becomes `{ categories, groups }` instead of a bare array. Example response (default): ```json [ { "id": "cat_food", "name": "Groceries", "isSystemCategory": false, "group": { "id": "grp_exp", "name": "Expense" } }, { "id": "cat_dine", "name": "Dining", "isSystemCategory": false, "group": { "id": "grp_exp", "name": "Expense" } } ] ``` Example response (`includeGroups: true`): ```json { "categories": [ { "id": "cat_food", "name": "Groceries", "group": { "id": "grp_exp", "name": "Expense" } } ], "groups": [ { "id": "grp_exp", "name": "Expense" }, { "id": "grp_inc", "name": "Income" } ] } ``` **Use cases:** - Discover category ids for use with `update_transaction` or `set_budget_amount` - Render a grouped category picker (with `includeGroups: true`) - Identify which categories are system-defined vs. user-defined

NameTypeReqDescription
includeGroupsbooleanWhen true, return both categories and category groups. Default: false.

No output schema declared.

No examples provided.

get_net_worth ~441

Net worth view, returned in two flavors: - Default (`view: "history"`): time series of net worth (and assets/liabilities) over a date range. Omit both dates to fetch the full history Monarch has on file. - `view: "by_type"`: current net worth grouped by account type (e.g., depository, brokerage, credit, loan), synthesized client-side from `get_accounts`. Use for "how is my net worth distributed?" style questions. Date params are ignored in this view. Example response (`view: "history"`): ```json [ { "date": "2026-01-01", "netWorth": 124300, "assets": 162400, "liabilities": -38100 }, { "date": "2026-01-02", "netWorth": 124910, "assets": 163100, "liabilities": -38190 } ] ``` Example response (`view: "by_type"`): ```json [ { "type": "Brokerage", "balance": 84210.55 }, { "type": "Checking", "balance": 4321.55 }, { "type": "Credit Card", "balance": -1245.10 } ] ``` **View enum:** - `history` (default): time series across the full date range - `by_type`: grouped current snapshot by account type **Use cases:** - Plot a net worth chart over the last year - Show "what is my net worth made of?" using `view: "by_type"` - Pull a specific window (`startDate`/`endDate`) for a quarterly review - Compare assets vs. liabilities at the start and end of a period

NameTypeReqDescription
endDatestringInclusive end date (YYYY-MM-DD). Only used by view: history.
startDatestringInclusive start date (YYYY-MM-DD). Only used by view: history.
viewstringWhich net-worth view to return. Default: history (time series).

No output schema declared.

No examples provided.

get_tags ~151

List all transaction tags configured on the workspace, with name, color, and display order. Example response: ```json [ { "id": "tag_personal", "name": "Personal", "color": "#ff8800", "order": 1 }, { "id": "tag_work", "name": "Work", "color": "#0088ff", "order": 2 } ] ``` **Use cases:** - Discover tag ids for use with `update_transaction` (`tagIds`) - Render a tag picker - Look up an existing tag's id before deleting it with `delete_tag`, or its `color` format before calling `create_tag`

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

get_transaction_details ~259

Fetch a single transaction by id, including its splits (if any). Use after get_transactions (`view: "list"`) to drill into a specific row. Example response: ```json { "id": "tx_abc", "amount": -42.18, "date": "2026-01-15", "merchant": { "id": "m_1", "name": "Whole Foods" }, "category": { "id": "cat_food", "name": "Groceries" }, "splits": [ { "id": "split_1", "amount": -32.18, "category": { "id": "cat_food", "name": "Groceries" } }, { "id": "split_2", "amount": -10.00, "category": { "id": "cat_house", "name": "Household" } } ] } ``` **Use cases:** - Inspect splits of a parent transaction - Show notes / tags / review state for one specific transaction - Verify a transaction id before calling `update_transaction` or `delete_transaction`

NameTypeReqDescription
transactionIdstringyesTransaction UUID.

No output schema declared.

No examples provided.

get_transaction_rules ~332

List every transaction rule configured on the workspace. Rules auto-classify imported transactions based on merchant/amount/account criteria. Example response: ```json [ { "id": "rule_1", "order": 1, "merchantCriteria": [{ "operator": "contains", "value": "Whole Foods" }], "amountCriteria": { "operator": "gte", "value": 50, "isExpense": true }, "categoryIds": ["cat_food"], "accountIds": ["acc_chk"], "setCategoryAction": { "id": "cat_groceries", "name": "Groceries" }, "setHideFromReportsAction": false, "addTagsAction": [{ "id": "tag_food", "name": "Food" }], "lastAppliedAt": "2026-04-12T18:22:01Z" } ] ``` The action fields are echoed back in read shape: `setCategoryAction` as the assigned category object and `addTagsAction` as the added tag objects. When you write a rule (create/update), those same fields take a bare category-id string and an array of tag-id strings respectively. **Use cases:** - Audit existing auto-categorization rules - Inspect a rule's match criteria, actions, and last-run time - Read a rule's full state before editing it (`update_transaction_rule` replaces the whole rule) To change rules, use `create_transaction_rule`, `update_transaction_rule`, and `delete_transaction_rule`.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

get_transactions ~1,009

Query transactions in five different shapes — pick the one that matches what you actually want to know. **View enum:** - `list` (default) — paged list of transactions with filters. Returns `{ totalCount, results }`. Use this for "show me all transactions matching X." - `summary` — aggregate totals (count, total income, total expense, average) over a date range. Fast top-line view. Requires `startDate` + `endDate`. - `cashflow` — income / expense / savings / savings rate over a date range. Requires `startDate` + `endDate`. - `by_category` — total spend per category over a date range. One row per category with the total amount. Requires `startDate` + `endDate`. - `recurring` — forecast occurrences of recurring transactions Monarch has detected (subscriptions, payroll, rent). Each row carries the stream's name, frequency, expected date, and amount. Defaults to the next 90 days when `startDate`/`endDate` are omitted. Filter parameters (`accountIds`, `categoryIds`, `tagIds`, `merchantIds`, `search`, `amountGte`, `amountLte`, `needsReview`, `hideFromReports`, `isSplit`, `limit`, `offset`) only apply when `view: "list"`. Other views ignore them. Example response (`view: "list"`): ```json { "totalCount": 421, "results": [ { "id": "tx_abc", "amount": -42.18, "date": "2026-01-15", "merchant": { "id": "m_1", "name": "Whole Foods" }, "category": { "id": "cat_food", "name": "Groceries" }, "account": { "id": "acc_chk", "displayName": "Checking" }, "needsReview": false } ] } ``` Example response (`view: "summary"`): ```json { "count": 421, "totalIncome": 8420.00, "totalExpense": -5210.18, "averageTransaction": 7.62 } ``` Example response (`view: "cashflow"`): ```json { "startDate": "2026-01-01", "endDate": "2026-01-31", "income": 8420.00, "expense": -5210.18, "savings": 3209.82, "savingsRate": 0.381 } ``` Example response (`view: "by_category"`): ```json [ { "categoryId": "cat_food", "categoryName": "Groceries",…

NameTypeReqDescription
accountIdsarray
amountGtenumber
amountLtenumber
categoryIdsarray
endDatestringInclusive end date (YYYY-MM-DD).
hideFromReportsboolean
isSplitboolean
limitinteger
merchantIdsarray
needsReviewboolean
offsetinteger
searchstringFree-text search.
startDatestringInclusive start date (YYYY-MM-DD).
tagIdsarray
viewstringWhich view to return. Default: list.

No output schema declared.

No examples provided.

monarch_login_with_token ~224

Save a pre-obtained Monarch Money session token to encrypted on-disk storage. The token is written to `~/.monarch-money-mcp/session.enc` (or `MONARCH_STATE_DIR/session.enc` when set), encrypted with AES-256-GCM. Once saved, all other tools will pick it up automatically — no env var configuration needed. This tool is for users who already have a valid session token. Most users should run the login script (`npm run login`) instead, which performs the email/password/TOTP exchange for you. The tool will validate the token by calling Monarch's `me` endpoint before saving. An invalid token returns an error and is not persisted. **Use cases:** - Migrate a token captured from a browser session into the server - Restore access after a session expiry without re-running the login script - Rotate the on-disk token to a freshly issued one

NameTypeReqDescription
emailstringOptional email address associated with the token.
tokenstringyesMonarch Money session token (a JWT-like string).

No output schema declared.

No examples provided.

refresh_accounts ~130

Force a sync against the upstream financial institutions for the given accounts (or all accounts when omitted). This is a long-running operation on Monarch's side — the tool returns immediately once the sync is enqueued. Example response: ```json { "enqueued": true, "accounts": "all", "errors": [] } ``` **Use cases:** - Pull the latest balances before generating a report - Recover from a stuck or stale account sync - Force a refresh after manually fixing institution credentials

NameTypeReqDescription
accountIdsarrayOptional list of account UUIDs. Omit to refresh all.

No output schema declared.

No examples provided.

set_account_balance_history ~493

Set the recorded daily balance history for a (manual) account. This edits the balance chart / snapshots you see in Monarch — NOT a transaction, and NOT just the single "current balance". **How Monarch stores this:** balances are per-day snapshots. Monarch has no GraphQL mutation for dated balances; this tool drives Monarch's "Upload Balance History" importer under the hood (upload a date,balance CSV → parse → poll to completion). Writes are a **per-date UPSERT**: every date you specify is set/created; dates you don't specify are left unchanged. Only works on manual accounts (synced accounts get their history from the institution). Provide the account plus **either** mode: - **Range mode** — `startDate` + `endDate` + `balance`: sets the SAME balance for every day from start to end (inclusive). Use this to backfill a flat value across a window. - **Explicit mode** — `snapshots`: an array of `{ date, balance }` to set specific days to specific values. Balances are signed (negative for liabilities). Read the result back with `get_account_balance_history` to confirm. Example (range): ```json { "accountId": "acc_123", "startDate": "2026-05-28", "endDate": "2026-07-06", "balance": 237000 } ``` Example response: ```json { "accountId": "acc_123", "updatedCount": 40, "startDate": "2026-05-28", "endDate": "2026-07-06", "status": "completed" } ``` **Use cases:** - Backfill a manual account's balance to a fixed value across a date range - Correct specific days' recorded balances - Seed balance history for a newly created manual account

NameTypeReqDescription
accountIdstringyesAccount UUID — fetch via get_accounts. Must be manual.
balancenumberRange mode: the balance to set for every day in the range (signed).
endDatestringRange mode: inclusive end date (YYYY-MM-DD).
snapshotsarrayExplicit mode: specific { date, balance } snapshots. Mutually exclusive with the range fields.
startDatestringRange mode: inclusive start date (YYYY-MM-DD).

No output schema declared.

No examples provided.

set_budget_amount ~257

Set the planned budget amount for a category for a single month. Pass `applyToFuture: true` to roll the change forward to all subsequent months; otherwise the change applies only to the month containing `startDate` (or the current month if `startDate` is omitted). Returns the request echoed back along with the new `budgetItemId` — Monarch's mutation is intentionally minimal and doesn't surface the post-update Budget shape. Example response: ```json { "budgetItemId": "bi_abc123", "categoryId": "cat_food", "amount": 650, "startDate": "2026-01-01", "applyToFuture": false } ``` **Use cases:** - Bump a category's budget after recategorizing transactions - Apply a new budget across all future months (`applyToFuture: true`) - Adjust a one-off month's budget without touching ongoing settings

NameTypeReqDescription
amountnumberyesNew budget amount.
applyToFuturebooleanWhen true, applies to all future periods. Default: false.
categoryIdstringyesCategory UUID.
startDatestringOptional period start (YYYY-MM-DD).

No output schema declared.

No examples provided.

split_transaction ~167

Split a single transaction into multiple categorized parts. The split amounts must sum to the parent transaction's amount. Replaces any existing splits. Returns the new child split transactions (id + amount). Use `get_transactions` with `isSplit: true` if you need richer details on the split children. Example response: ```json [ { "id": "split_1", "amount": -32.18 }, { "id": "split_2", "amount": -10.00 } ] ``` **Use cases:** - Split a Costco run into "Groceries" and "Household" - Allocate a shared dinner across multiple categories - Break out the tip from a restaurant charge

NameTypeReqDescription
idstringyes
splitsarrayyes

No output schema declared.

No examples provided.

update_transaction ~473

Update fields on a transaction. Single tool that consolidates the per-field "setter" operations. Provide `id` plus any subset of: - `amount`, `date`, `categoryId` — patch the core fields - `merchantName` — rename the merchant via free-form string (Monarch may auto-create a new merchant for unknown names; reassigning to an existing merchant by id is not supported) - `notes` — replace the notes (pass an empty string to clear) - `hideFromReports` — toggle the "hide from reports" flag - `reviewed` — true marks the transaction reviewed; false puts it back in the review queue - `tagIds` — full replace of the tag set (pass `[]` to remove all tags) Omitted fields are left unchanged. The tool calls multiple Monarch endpoints under the hood (the GraphQL API has separate mutations for tags and review state) and rolls them up into one logical update. Example response (the patched transaction, post-update): ```json { "id": "tx_abc", "amount": -42.18, "notes": "Reviewed and recategorized", "needsReview": false, "category": { "id": "cat_food", "name": "Groceries" }, "tags": [{ "id": "tag_personal", "name": "Personal" }] } ``` **Use cases:** - Recategorize a transaction - Replace the tag set on a transaction - Mark a transaction reviewed and update its notes in one call - Hide a transfer from reports - Bulk-recategorize: provide `bulkTransactionIds` + `categoryId` to apply one category to many transactions in one call

NameTypeReqDescription
amountnumber
bulkTransactionIdsarrayBulk mode: apply categoryId to every transaction in this list.
categoryIdstring
datestringYYYY-MM-DD.
hideFromReportsboolean
idstringTransaction UUID.
merchantNamestringRename merchant via free-form string. Single-tx only.
notesstring
reviewedboolean
tagIdsarray

No output schema declared.

No examples provided.

update_transaction_rule ~529

Update an existing transaction rule. Provide the rule `id` (from `get_transaction_rules`) plus the rule's complete desired criteria and actions. **This is a FULL REPLACE, not a patch.** The fields you send define the rule's entire new state — any criterion or action you omit is REMOVED from the rule. You must re-supply at least one criterion (`merchantCriteria`, `amountCriteria`, `categoryIds`, or `accountIds`) AND at least one action (`setCategoryAction`, `setHideFromReportsAction`, or `addTagsAction`) on every call. Accepts the same criteria/action fields as `create_transaction_rule`. **Safe workflow:** call `get_transaction_rules` first, take the rule's current criteria and actions, apply your change to that full state, and send the whole thing back. Sending only the one field you want to change will wipe out everything else on the rule. Returns the full refreshed rule list (Monarch does not echo the updated rule back). Only the rule named by `id` is affected — sibling rules are untouched. Example (a rule that matched "Whole Foods" → Groceries, now repointed to Dining while keeping its merchant criterion): ```json { "id": "rule_1", "merchantCriteria": [{ "operator": "contains", "value": "Whole Foods" }], "setCategoryAction": "cat_dining" } ``` **Use cases:** - Repoint a rule to a different category (re-supplying its criteria) - Tighten or loosen a rule's match criteria (re-supplying its actions) - Toggle a rule's hide-from-reports action (re-supplying its criteria)

NameTypeReqDescription
accountIdsarrayOnly match transactions in these account ids.
addTagsActionarrayAction: tag ids to add to matching transactions.
amountCriteriaobjectSingle amount matcher (criteria).
applyToExistingTransactionsbooleanRetroactively apply the rule to existing transactions.
categoryIdsarrayOnly match transactions already in these category ids.
idstringyesRule id to update (from get_transaction_rules).
merchantCriteriaarrayMerchant-name matchers (criteria).
merchantCriteriaUseOriginalStatementbooleanMatch the raw statement text instead of the cleaned merchant.
setCategoryActionstringAction: category id to assign to matches (single id string).
setHideFromReportsActionbooleanAction: hide matching transactions from reports.

No output schema declared.

No examples provided.

Common questions

What is the com.pulsemcp/monarch-money MCP server?

com.pulsemcp/monarch-money is an MCP server listed in the public MCP registry as com.pulsemcp/monarch-money. MCP server for Monarch Money, account, transaction, and budget management. This page covers its npm package (monarch-money-mcp-server).

Is the com.pulsemcp/monarch-money MCP server safe to use?

com.pulsemcp/monarch-money scores 79 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 21 September 2026. It declares no install or post-install scripts. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the com.pulsemcp/monarch-money MCP server expose?

com.pulsemcp/monarch-money exposes 23 tools: check_authentication, monarch_login_with_token, get_accounts, get_account_balance_history, set_account_balance_history, and 18 more. Their descriptions and schemas cost roughly 7,274 tokens of context every time the server is loaded.

Is the com.pulsemcp/monarch-money MCP server still maintained?

com.pulsemcp/monarch-money is still listed as active in the MCP registry. We last reached this channel on 21 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

What licence is the com.pulsemcp/monarch-money MCP server under?

com.pulsemcp/monarch-money declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.