com.pulsemcp/monarch-money
NPM · MONARCH-MONEY-MCP-SERVER · SCANNED AUG 3
MCP server for Monarch Money — account, transaction, and budget management.
Available components
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 →
Supply Chain Security87
- No malware found by supply-chain analysis.Pass
- Only part of the dependency tree could be resolved (95 of 99), so this covers what we could see, not the whole tree.Partial
- No install/post-install scripts declared.Pass
- Only part of the dependency tree could be resolved (95 of 99), so this covers what we could see, not the whole tree. View diagnostics → Partial
Provenance & Transparency45
- Source repository is publicly reachable at the declared URL. View diagnostics → Pass
- Provenance check failed: no build-provenance attestation is published. See how to fix → View diagnostics → Fail
- Clear OSI-approved license (MIT).Pass
- Actively maintained (last published 28 days ago).Pass
- Disclosure check failed: no security disclosure policy was found in the source repository. See how to fix → Fail
Schema Quality & AI Usability58
- 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 Management27
- Stability observed for 8 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
Capabilities100
- Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Add this component to your MCP client. Where a client-specific snippet is available, pick your client below and copy it straight into your config; otherwise use the connection detail shown.
npm · monarch-money-mcp-server
claude mcp add com-pulsemcp-monarch-money -- npx -y monarch-money-mcp-server
codex mcp add com-pulsemcp-monarch-money -- npx -y monarch-money-mcp-server
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"com-pulsemcp-monarch-money": {
"type": "local",
"command": [
"npx",
"-y",
"monarch-money-mcp-server"
],
"enabled": true
}
}
} openclaw mcp add com-pulsemcp-monarch-money --command npx --arg -y --arg monarch-money-mcp-server
mcp_servers:
com-pulsemcp-monarch-money:
command: "npx"
args: ["-y", "monarch-money-mcp-server"] {
"mcpServers": {
"com-pulsemcp-monarch-money": {
"command": "npx",
"args": [
"-y",
"monarch-money-mcp-server"
]
}
}
} 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.
- 3 Aug 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 23 to 27. That category is still filling its 30-day observation window: 7 days of observed history at the previous scan, 8 at this one. The score rises as the window fills, whether or not the server changes.
- 2 Aug 26 +48
- Provenance: unverified → fail ▼ security
- Install scripts: unverified → pass ▲ security
- Known CVEs: unverified → partial ▲ security
- Malware scan: unverified → pass ▲ security
- Schema quality: unverified → excellent ▲ functional
- License: unverified → pass ▲ functional
- Dependency health: unverified → partial ▲ functional
- Maintenance: unverified → pass ▲ functional
- MCP protocol: unverified → pass ▲ functional
- Stability: unverified → 0.23 ▲ functional
- Licence: MIT functional
- 31 Jul 26 −24
- We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
- 30 Jul 26 +16
- Tool coverage: unverified → 100 ▲ functional
- 28 Jul 26 −16
- Tool coverage: 100 → unverified ▼ functional
- First check of Schema quality: unverified functional
- 27 Jul 26 40
First indexed and scored.
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 3 Aug 2026 · Analysed npm/[email protected]
Provenance none
Ecosystem: npm · Outcome: none
Dependencies 95 packages
95 packages in the resolved dependency tree · 95 deprecated · 29 stale.
The dependency tree was only partially resolved, so these counts may be incomplete.
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.
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": "[email protected]", "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
| Name | Type | Req | Description |
|---|---|---|---|
| color | string | yes | Hex color like #19d2a5 (6-digit, matches get_tags). |
| name | string | yes | Display 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)
| Name | Type | Req | Description |
|---|---|---|---|
| accountId | string | yes | Account UUID. |
| amount | number | yes | Amount; negative for expenses, positive for income. |
| categoryId | string | yes | Category UUID (required by Monarch). |
| date | string | yes | Transaction date (YYYY-MM-DD). |
| merchantName | string | yes | — |
| notes | string | — | — |
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
| Name | Type | Req | Description |
|---|---|---|---|
| accountIds | array | — | Only match transactions in these account ids. |
| addTagsAction | array | — | Action: tag ids to add to matching transactions. |
| amountCriteria | object | — | Single amount matcher (criteria). |
| applyToExistingTransactions | boolean | — | Retroactively apply the rule to existing transactions. |
| categoryIds | array | — | Only match transactions already in these category ids. |
| merchantCriteria | array | — | Merchant-name matchers (criteria). |
| merchantCriteriaUseOriginalStatement | boolean | — | Match the raw statement text instead of the cleaned merchant. |
| setCategoryAction | string | — | Action: category id to assign to matches (single id string). |
| setHideFromReportsAction | boolean | — | Action: 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.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | Tag 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
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | Transaction 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
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | Rule 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
| Name | Type | Req | Description |
|---|---|---|---|
| accountId | string | yes | Account UUID — fetch via get_accounts. |
| endDate | string | yes | Inclusive end date (YYYY-MM-DD). |
| startDate | string | yes | Inclusive 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`)
| Name | Type | Req | Description |
|---|---|---|---|
| includeHoldings | boolean | — | When 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
| Name | Type | Req | Description |
|---|---|---|---|
| endDate | string | — | Inclusive end date (YYYY-MM-DD). |
| startDate | string | — | Inclusive 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
| Name | Type | Req | Description |
|---|---|---|---|
| includeGroups | boolean | — | When 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
| Name | Type | Req | Description |
|---|---|---|---|
| endDate | string | — | Inclusive end date (YYYY-MM-DD). Only used by view: history. |
| startDate | string | — | Inclusive start date (YYYY-MM-DD). Only used by view: history. |
| view | string | — | Which 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`
| Name | Type | Req | Description |
|---|---|---|---|
| transactionId | string | yes | Transaction 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",…
| Name | Type | Req | Description |
|---|---|---|---|
| accountIds | array | — | — |
| amountGte | number | — | — |
| amountLte | number | — | — |
| categoryIds | array | — | — |
| endDate | string | — | Inclusive end date (YYYY-MM-DD). |
| hideFromReports | boolean | — | — |
| isSplit | boolean | — | — |
| limit | integer | — | — |
| merchantIds | array | — | — |
| needsReview | boolean | — | — |
| offset | integer | — | — |
| search | string | — | Free-text search. |
| startDate | string | — | Inclusive start date (YYYY-MM-DD). |
| tagIds | array | — | — |
| view | string | — | Which 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
| Name | Type | Req | Description |
|---|---|---|---|
| string | — | Optional email address associated with the token. | |
| token | string | yes | Monarch 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
| Name | Type | Req | Description |
|---|---|---|---|
| accountIds | array | — | Optional 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
| Name | Type | Req | Description |
|---|---|---|---|
| accountId | string | yes | Account UUID — fetch via get_accounts. Must be manual. |
| balance | number | — | Range mode: the balance to set for every day in the range (signed). |
| endDate | string | — | Range mode: inclusive end date (YYYY-MM-DD). |
| snapshots | array | — | Explicit mode: specific { date, balance } snapshots. Mutually exclusive with the range fields. |
| startDate | string | — | Range 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
| Name | Type | Req | Description |
|---|---|---|---|
| amount | number | yes | New budget amount. |
| applyToFuture | boolean | — | When true, applies to all future periods. Default: false. |
| categoryId | string | yes | Category UUID. |
| startDate | string | — | Optional 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
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | — |
| splits | array | yes | — |
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
| Name | Type | Req | Description |
|---|---|---|---|
| amount | number | — | — |
| bulkTransactionIds | array | — | Bulk mode: apply categoryId to every transaction in this list. |
| categoryId | string | — | — |
| date | string | — | YYYY-MM-DD. |
| hideFromReports | boolean | — | — |
| id | string | — | Transaction UUID. |
| merchantName | string | — | Rename merchant via free-form string. Single-tx only. |
| notes | string | — | — |
| reviewed | boolean | — | — |
| tagIds | array | — | — |
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)
| Name | Type | Req | Description |
|---|---|---|---|
| accountIds | array | — | Only match transactions in these account ids. |
| addTagsAction | array | — | Action: tag ids to add to matching transactions. |
| amountCriteria | object | — | Single amount matcher (criteria). |
| applyToExistingTransactions | boolean | — | Retroactively apply the rule to existing transactions. |
| categoryIds | array | — | Only match transactions already in these category ids. |
| id | string | yes | Rule id to update (from get_transaction_rules). |
| merchantCriteria | array | — | Merchant-name matchers (criteria). |
| merchantCriteriaUseOriginalStatement | boolean | — | Match the raw statement text instead of the cleaned merchant. |
| setCategoryAction | string | — | Action: category id to assign to matches (single id string). |
| setHideFromReportsAction | boolean | — | Action: hide matching transactions from reports. |
No output schema declared.
No examples provided.