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.

Monarch MCP Server

PYPI · MONARCH-MCP-JAMIEW

Query and update Monarch Money accounts, transactions, and budgets

Available components

−20 this week 74 Trust /100

Last scanned (20 hours ago)

Scores higher than 70% of PyPI servers

Category Finance and Payments

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 Security50
  • Malware scan not yet available for this package.Unverified
  • No known CVEs affecting this package version or its production dependencies.Pass
  • Runs hatchling.build at install time, a recognised build step with no custom scripting around it. View diagnostics → Pass
  • 2 of 48 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency97
  • Source repository is publicly reachable at the declared URL. View diagnostics → Pass
  • Cryptographically verified build provenance (signed, bound to jamiew/monarch-mcp). View diagnostics → Pass
  • Clear OSI-approved license (MIT).Pass
  • Actively maintained (last published 1 days ago).Pass
  • Disclosure check failed: no security disclosure policy was found in the source repository. See how to fix → Fail
Schema Quality & AI Usability80
  • 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
  • AI-judged instruction clarity (good).Pass
  • Context-footprint check failed: tool/resource definitions use about 5904 tokens (~128/item across 46 items; 42 tools + 4 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 Management65
  • Stability check failed: the tool surface changed between 0.5.2 and 0.6.0: 0 tool removals, 1 breaking changes, 13 additions. See how to fix → Fail
Tool Coverage71
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 0% of tool parameters carry a description.Fail
  • Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • All 3 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
  • An AI judge read all 43 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a current MCP spec version (2026-07-28).Pass
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.

  • 4 Nov 26 −4

    No change was recorded against any check on this day. Stability & Change Management went from 98 to 65.

  • 3 Nov 26 −15
    • Malware scan: pass → unverified ▼ security
    • Schema quality: 4313 → 5904 ▼ functional
    • MCP protocol: Implements a current MCP spec version (2026-07-28). functional
    • Package version: 0.5.4 → 0.6.0 functional
  • 2 Nov 26 0
    • Package version: 0.5.3 → 0.5.4 functional
  • 1 Nov 26 −1
    • Stability: pass → unverified ▼ security
    • Tool safety: pass → unverified ▼ security
    • Malware scan: pass → unverified ▼ security
    • Stability: pass → fail ▼ security
    • Security disclosure: unverified → fail ▼ functional
    • Capabilities: pass → unverified ▼ functional
    • Tool coverage: 100 → unverified ▼ functional
    • Schema quality: 100 → unverified ▼ functional
    • Package version: 0.5.2 → 0.5.3 functional
  • 31 Oct 26 +15
    • Malware scan: unverified → pass ▲ security
  • 30 Oct 26 0
    • Security disclosure: fail → unverified ▼ functional
  • 29 Oct 26 −15
    • Malware scan: pass → unverified ▼ security
  • 27 Oct 26 +1
    • Stability: 0.97 → pass security
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 4 Nov 2026 · Analysed pypi/monarch-mcp-jamiew@0.6.0

Provenance Verified

A signed build attestation was found and verified, binding this exact artifact to the source repository it claims to come from.

Result Verified
Ecosystem pypi
Reason Verified
Discovered via Registry attestation endpoint
Source repo jamiew/monarch-mcp
Certificate issuer https://token.actions.githubusercontent.com
Certificate SAN https://github.com/jamiew/monarch-mcp/.github/workflows/publish.yml@refs/tags/v0.6.0
Rekor log index 3652734250
Predicate type PyPI publish attestation https://docs.pypi.org/attestations/publish/v1
Subject digest sha256:20f832a66440e92f26ebb87460389d3f586c76a2820b916bbeb1eb4501f265e1

Background: How many MCP packages publish verified provenance →

Install scripts 1 script
Hook Tier Command
build_backend allowlisted hatchling.build

Background: Why install scripts are a supply-chain risk →

Dependencies 48 packages
Packages resolved 48
Stale 1
No linked repository 1
Tree resolution Complete

Background: SBOMs and build attestations, explained →

MCP tools · 42 exposed · ~5,834 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
analyze_spending_patterns ~222

Summarize monthly trends, category expenses, account usage, and budget data. Args: lookback_months: Months before today to include (default: 6). include_forecasting: Include average-based income and expense estimates. verbose: Include full budget details instead of monthly budget totals. Requests one page of up to 2000 transactions, without pagination; analysis can be incomplete for larger periods. Transfers such as card payments are left out of every section and counted in metadata.transfers_excluded (null when categories could not be read). Forecasts average the latest three complete calendar months with transactions, excluding the current month. The confidence label is fixed, not a statistical measure. Failed transaction, category, or budget requests appear in errors; successful analysis sections remain available. metadata.transactions_truncated reports whether more transactions exist (null when unknown). Fetch narrower date ranges with get_transactions for detail.

NameTypeReqDescription
include_forecastingboolean––
lookback_monthsinteger––
verboseboolean––
NameTypeReqDescription
account_usage–––
analysis_period–––
budget_performance–––
category_analysis–––
errorsobject––
forecast–––
metadata–––
monthly_trends–––
verboseboolean––

No examples provided.

create_manual_account ~153

Create a manually tracked account and return its new ID. Args: account_name: Display name for the account. account_type: Monarch account type name, such as loan, other_asset, or other_liability. The accounts://types resource lists valid types and subtypes. account_sub_type: Subtype name within that type, such as mortgage, auto, or line_of_credit. balance: Starting balance. include_in_net_worth: Whether the account counts toward net worth.

NameTypeReqDescription
account_namestringyes–
account_sub_typestringyes–
account_typestringyes–
balancenumberyes–
include_in_net_worthboolean––
NameTypeReqDescription
account–yes–

No examples provided.

create_transaction ~160

Create a manual transaction. Args: amount: Positive for income, negative for an expense. merchant_name: Merchant/payee display name. account_id: Account ID from get_accounts. date: Transaction date in YYYY-MM-DD format. category_id: Required category ID from get_transaction_categories. notes: Optional memo. update_balance: False records the transaction without changing the account balance. True also adjusts the balance, useful for manual accounts. Returns the created transaction details.

NameTypeReqDescription
account_idstringyes–
amountnumberyes–
category_idstringyes–
datestringyes–
merchant_namestringyes–
notes–––
update_balanceboolean––
NameTypeReqDescription
transaction–yes–

No examples provided.

create_transaction_rule ~371

Create an automation rule. A rule needs at least one action and a merchant, statement, or amount criterion. Without one of those three, Monarch ignores later edits to the rule. Criteria (a transaction must match all of them; values in one list are "or"): merchant_criteria: Merchant name text, e.g. [{"operator": "contains", "value": "Corner Deli"}]. original_statement_criteria: Bank statement text, same shape. amount_criteria: {"operator": "gt"|"lt"|"eq", "value": 20} or {"operator": "between", "lower": 10, "upper": 50}. Amounts have no sign. is_expense=True (the default) matches money going out; False matches money coming in. account_ids / category_ids: Only match these accounts or current categories. Actions: set_category_id: Category ID from get_transaction_categories. set_merchant_name: New merchant name (a name, not an ID). add_tag_ids: Tag IDs to add. hide_from_reports: Hide matching transactions from reports. review_status: "needs_review" or "reviewed". apply_to_existing_transactions=True also changes matching past transactions right away. That is hard to undo, so check the criteria with search_transactions first. This tool does not change rule priority.

NameTypeReqDescription
account_ids–––
add_tag_ids–––
amount_criteria–––
apply_to_existing_transactionsboolean––
category_ids–––
hide_from_reports–––
merchant_criteria–––
original_statement_criteria–––
review_status–––
set_category_id–––
set_merchant_name–––
NameTypeReqDescription
applied_to_existing_transactionsbooleanyes–
rule–yes–

No examples provided.

create_transaction_tag ~56

Create a household transaction tag and return it with its new ID. Args: name: Tag name. color: Hex color as #RRGGBB.

NameTypeReqDescription
colorstring––
namestringyes–
NameTypeReqDescription
tag–yes–

No examples provided.

delete_merchant ~73

Delete a merchant; irreversible. Args: merchant_id: Merchant ID from get_merchants. move_to_merchant_id: Optional merchant ID from get_merchants. Moving merges the deleted merchant's transactions into this merchant.

NameTypeReqDescription
merchant_idstringyes–
move_to_merchant_id–––
NameTypeReqDescription
deletedbooleanyes–
merchant_idstringyes–
move_to_merchant_id–yes–

No examples provided.

delete_transaction ~31

Permanently delete a transaction by ID from get_transactions or find_duplicate_transactions.

NameTypeReqDescription
transaction_idstringyes–
NameTypeReqDescription
deletedbooleanyes–
transaction_idstringyes–

No examples provided.

delete_transaction_rule ~48

Delete an automation rule by ID from get_transaction_rules. Transactions the rule already changed keep their current values. Deletion is confirmed by reading the rule list again.

NameTypeReqDescription
rule_idstringyes–
NameTypeReqDescription
deletedbooleanyes–
rule_idstringyes–

No examples provided.

find_duplicate_transactions ~143

Find possible duplicate transactions: same date, amount, statement name, and account. Args: start_date: Inclusive start; ISO or natural language. Defaults to 90 days before end_date. end_date: Inclusive end. Defaults to today. account_id: Optional account ID from get_accounts. Groups are possible duplicates only; review before deleting. Each group lists compact transactions oldest first. Hidden transactions and rows without a statement name are skipped. scan_truncated is true when the range holds more transactions than one scan reads; narrow the dates or account then.

NameTypeReqDescription
account_id–––
end_date–––
start_date–––
NameTypeReqDescription
countintegeryes–
end_datestringyes–
groupsarrayyes–
scan_truncated–yes–
start_datestringyes–
transactions_in_range–yes–

No examples provided.

get_account_history ~131

Get a page of balance history for account_id from get_accounts. Optional YYYY-MM-DD bounds are inclusive; an omitted bound is unbounded. Filtering precedes local paging, preserving Monarch's snapshot order. limit: 1–1000 (default 100); offset: zero-based position after filtering. Follow next_offset until null. total_count counts all matching snapshots. Monarch still returns the full history upstream; the MCP response is bounded.

NameTypeReqDescription
account_idstringyes–
end_date–––
limitinteger––
offsetinteger––
start_date–––
NameTypeReqDescription
account_idstringyes–
countintegeryes–
history–yes–
next_offset–yes–
offsetintegeryes–
total_countintegeryes–

No examples provided.

get_account_holdings ~29

Get investment holdings for an account_id from get_accounts.

NameTypeReqDescription
account_idstringyes–
NameTypeReqDescription
holdings–yes–

No examples provided.

get_accounts ~14

Retrieve all linked financial accounts.

Input schema present but exposes no named parameters.

NameTypeReqDescription
accountsarrayyes–
countintegeryes–

No examples provided.

get_all_holdings ~51

Get holdings grouped by brokerage account, not all asset classes. Fetches accounts, then holdings for each brokerage account concurrently. A failed account request fails the entire call; this is not a single API request.

Input schema present but exposes no named parameters.

NameTypeReqDescription
accountsarrayyes–

No examples provided.

get_budgets ~67

Retrieve budgets for optional start_date/end_date filters. Dates accept ISO strings or natural language such as 'last month'. A missing end defaults to today; a missing start to the first day of the end date's month.

NameTypeReqDescription
end_date–––
start_date–––
NameTypeReqDescription
budgets–yes–
message–––

No examples provided.

get_cashflow ~67

Retrieve cash flow for optional start_date/end_date filters. Dates accept ISO strings or natural language such as 'last month'. A missing end defaults to today; a missing start to the first day of the end date's month.

NameTypeReqDescription
end_date–––
start_date–––
NameTypeReqDescription
cashflow–yes–

No examples provided.

get_complete_financial_overview ~199

Fetch a compact financial overview; verbose=True includes full API details. period is a start date or phrase such as 'this month', 'last month', or 'this year'; the end is always today. 'last month' therefore includes the current month too. Transactions and their summary use one page of up to 500 entries, not the full history. Failed API sections contain errors while successful sections remain. Default: account IDs/names/balances/types, monthly budget totals, cashflow totals, and a transaction summary. Raw transactions/categories are null unless verbose. Use their dedicated tools for details. batch_metadata.transactions_truncated is true if more transactions exist, false for a complete page, null if unknown. Summary income and expenses leave out transfers such as card payments; transfers_excluded counts them, or is null when categories could not be read.

NameTypeReqDescription
periodstring––
verboseboolean––
NameTypeReqDescription
accounts–––
batch_metadata–––
budgets–––
cashflow–––
categories–––
periodstringyes–
transaction_summary–––
transactions–––
verboseboolean––

No examples provided.

get_credit_score_history ~53

Get household credit score snapshots, oldest first. Returns enrolled (whether credit monitoring is set up), users [{id, name}], and snapshots [{date, score, user_id}]; user_id matches a users entry.

Input schema present but exposes no named parameters.

NameTypeReqDescription
countintegeryes–
enrolledbooleanyes–
snapshotsarrayyes–
usersarrayyes–

No examples provided.

get_household_members ~52

List current household members and IDs for transaction ownership. Pending invitations are excluded. Use an ID as owner_user_id in transaction updates, or "" for Shared; a missing/null owner_user_id leaves it unchanged.

Input schema present but exposes no named parameters.

NameTypeReqDescription
countintegeryes–
membersarrayyes–

No examples provided.

get_institutions ~15

Get linked financial institutions.

Input schema present but exposes no named parameters.

NameTypeReqDescription
institutions–yes–

No examples provided.

get_merchants ~133

List a page of merchants with transaction and rule counts. Args: limit: 1–500 (default 100). offset: Zero-based position. Follow next_offset until null. verbose: True returns the full upstream objects. Compact rows: id, name, transaction_count, rule_count, has_active_recurring_streams, can_be_deleted. Merchant IDs feed delete_merchant. total_count is Monarch's merchantCount, which may count a different set than the list; rely on next_offset.

NameTypeReqDescription
limitinteger––
offsetinteger––
verboseboolean––
NameTypeReqDescription
countintegeryes–
merchantsarrayyes–
next_offset–yes–
offsetintegeryes–
total_count–yes–
verbosebooleanyes–

No examples provided.

get_net_worth_history ~125

Get net worth over time: daily totals, or monthly balances per account type. Args: start_date: Inclusive start; ISO or natural language. Defaults to one year ago. end_date: Inclusive end. Defaults to today. by_account_type: False returns daily {date, balance} totals across all accounts. True returns monthly {month, account_type, balance} rows plus account_types with each type's group (asset or liability).

NameTypeReqDescription
by_account_typeboolean––
end_date–––
start_date–––
NameTypeReqDescription
account_types–––
by_account_typebooleanyes–
countintegeryes–
end_datestringyes–
historyarrayyes–
start_datestringyes–

No examples provided.

get_recurring_streams ~157

List every recurring stream (merchant schedule) with its next forecast. Args: active_only: True skips paused streams. include_liabilities: True includes credit-report liability streams such as loans and cards. verbose: True returns the full upstream objects. Compact rows: id, name, merchant {id, name}, frequency, amount, is_approximate, is_active, review_status, recurring_type, base_date, next_date, next_amount, category, category_id, account, account_id. merchant.id and merchant.name feed update_recurring_transaction. Forecasts are expectations, not posted transactions.

NameTypeReqDescription
active_onlyboolean––
include_liabilitiesboolean––
verboseboolean––
NameTypeReqDescription
countintegeryes–
streamsarrayyes–
verbosebooleanyes–

No examples provided.

get_recurring_transactions ~167

Get scheduled recurring occurrences, not the posted transaction history. Dates accept ISO dates or natural language such as "today" or "last month". With neither date, fetch the current calendar month. With only a start, end on that month's last day. With only an end, start on the first day of that period. The recurring.recurringTransactionItems list includes each occurrence's date, amount, account, category, transactionId (when matched), and stream containing the merchant ID, frequency, and expected amount. isPast describes the date, not whether a bill was paid. Use get_transactions(is_recurring=True) for recorded transactions instead. Use get_recurring_streams for the full list of streams.

NameTypeReqDescription
end_date–––
start_date–––
NameTypeReqDescription
recurring–yes–

No examples provided.

get_savings_goals ~112

List savings goals with targets, balances, and progress. Args: include_archived: True also returns archived goals. verbose: True returns the full upstream objects. Compact goals keep whichever of these fields Monarch returns: id, name, type, status, targetAmount, currentBalance, progress, targetDate, plannedMonthlyContribution, forecastedCompletionDate, archivedAt. Goal IDs feed set_savings_goal_budget_amount.

NameTypeReqDescription
include_archivedboolean––
verboseboolean––
NameTypeReqDescription
countintegeryes–
goalsarrayyes–
verbosebooleanyes–

No examples provided.

get_spending_summary ~163

Summarize income, expenses, and net by category, account, or month. Args: start_date: Inclusive start; accepts ISO dates or natural language. end_date: Inclusive end; accepts the same formats. A missing end defaults to today; a missing start to the first day of the end date's month. group_by: 'category', 'account', or 'month'; other values produce one group. Fetches all matching pages. Expenses are positive magnitudes. Transfers (categories in Monarch's transfer group, such as credit card payments) are left out and counted in transfers_excluded. period holds the resolved ISO dates.

NameTypeReqDescription
end_date–––
group_bystring––
start_date–––
NameTypeReqDescription
group_bystringyes–
groupsobjectyes–
period–yes–
totals–yes–
transfers_excludedinteger––

No examples provided.

get_transaction_categories ~49

List category IDs and names for lookups and transaction updates. verbose=True preserves full API details, including groups and system flags. Returns categories, count, and verbose.

NameTypeReqDescription
verboseboolean––
NameTypeReqDescription
categoriesarrayyes–
countintegeryes–
verbosebooleanyes–

No examples provided.

get_transaction_details ~165

Get one transaction's split linkage, amount, merchant, and category_id. Compact get_transactions/search_transactions results omit split flags. Verbose results identify split legs with isSplitTransaction but do not expose their parent IDs. This tool returns a leg's parent_transaction_id or a parent's has_split_transactions flag and split_transaction_ids. Use these IDs to fetch details for individual legs; an unsplit transaction or a split leg returns an empty list. Use this before get_transaction_splits or update_transaction_splits when you need the parent ID. transaction_id is the resolved ID returned by Monarch; it may differ from the requested ID when a pending transaction redirects to its posted replacement. Missing transactions raise an error.

NameTypeReqDescription
transaction_idstringyes–
NameTypeReqDescription
amount–yes–
category_id–yes–
has_split_transactionsbooleanyes–
is_split_transactionbooleanyes–
merchant–yes–
parent_transaction_id–yes–
split_transaction_idsarrayyes–
transaction_idstringyes–

No examples provided.

get_transaction_rules ~123

Read a page of automation rules in priority order, without modifying them. limit: 1–100 (default 25); offset: zero-based position. Follow next_offset until null; count is this page and total_count is all rules. Paging is local. Compact results omit null/empty object fields and GraphQL type labels, but preserve false, zero, and active criteria/actions. verbose=True returns the full upstream objects for the requested page.

NameTypeReqDescription
limitinteger––
offsetinteger––
verboseboolean––
NameTypeReqDescription
countintegeryes–
next_offset–yes–
offsetintegeryes–
rulesarrayyes–
total_countintegeryes–
verbosebooleanyes–

No examples provided.

get_transaction_splits ~64

Get split legs for transaction_id from get_transactions or search_transactions. Returns transaction_id, has_split_transactions, and splits with each leg's amount, category, merchant, and notes. An unsplit transaction has an empty list.

NameTypeReqDescription
transaction_idstringyes–
NameTypeReqDescription
has_split_transactionsbooleanyes–
splitsarrayyes–
transaction_idstringyes–

No examples provided.

get_transaction_tags ~38

List household transaction tags: id, name, color, transaction_count. Tag IDs feed set_transaction_tags and the tag_ids filter of get_transactions.

Input schema present but exposes no named parameters.

NameTypeReqDescription
countintegeryes–
tagsarrayyes–

No examples provided.

get_transactions ~527

Fetch one page of transactions. Args: limit: Maximum transactions to request (default: 100). offset: Transactions to skip for pagination. start_date: Inclusive start; accepts ISO dates, 'last month', or '30 days ago'. Without end_date, the end defaults to today. end_date: Inclusive end, with the same date formats. Without start_date, the start defaults to the first day of the end date's month. account_id: Account ID from get_accounts. category_id: Category ID from get_transaction_categories. tag_ids: Comma-separated tag IDs. has_attachments: True for transactions with attachments, False for those without. has_notes: True for transactions with notes, False for those without. hidden_from_reports: True for hidden transactions, False for visible ones. is_split: True for split transactions, False for non-split transactions. is_recurring: True for recurring transactions, False for non-recurring ones. is_pending: True for pending transactions, False for posted transactions. needs_review: True for transactions flagged for review, False for reviewed ones. verbose: False returns compact fields; True preserves the full API objects. Boolean filters default to None (no restriction). Results contain transactions, count (this page), total_count (all matches; null if Monarch omits it), and next_offset (null when no more pages). Pass next_offset as offset for the next page. Compact fields: id, date, amount, merchant, plaidName, category, categoryId, account, needsReview; pending appears only when true, notes only when nonempty, tags (tag names) only when the transaction has tags. Amounts are negative for expenses and positive for income. Use id for updates. merchant is the display name; plaidName preserves the original statement text. category and account are names, not nested objects. Verbose results retain nested merchant/category/account objects and upstream fields such as hideFromReports, reviewStat…

NameTypeReqDescription
account_id–––
category_id–––
end_date–––
has_attachments–––
has_notes–––
hidden_from_reports–––
is_pending–––
is_recurring–––
is_split–––
limitinteger––
needs_review–––
offsetinteger––
start_date–––
tag_ids–––
verboseboolean––
NameTypeReqDescription
countintegeryes–
next_offset–––
total_count–––
transactionsarrayyes–
verbosebooleanyes–

No examples provided.

refresh_accounts ~22

Request an institution refresh for all accounts; do not wait for completion.

Input schema present but exposes no named parameters.

NameTypeReqDescription
result–yes–

No examples provided.

search_transactions ~406

Search one page of transactions using Monarch's text search. Args: query: Nonempty search text for Monarch's transaction search. limit: Maximum transactions to request (default: 500). offset: Transactions to skip for pagination. start_date: Inclusive start, accepting ISO dates or natural language. Without end_date, the end defaults to today. end_date: Inclusive end. Without start_date, the start defaults to the first day of the end date's month. account_id: Account ID from get_accounts. category_id: Category ID from get_transaction_categories. tag_ids: Comma-separated tag IDs. has_attachments: Filter by attachment presence. has_notes: Filter by notes presence. hidden_from_reports: True for hidden transactions, False for visible ones. is_split: Filter by split status. is_recurring: Filter by recurring status. is_pending: True for pending transactions, False for posted transactions. needs_review: True for transactions flagged for review, False for reviewed ones. verbose: False uses get_transactions' compact fields; True keeps full API objects. Boolean filters default to None (no restriction). Returns matching transactions, search_metadata with the query, this page's result_count, and applied filters, plus total_count (all matches; null if Monarch omits it) and next_offset (null when no more pages). Pass next_offset as offset for the next page.

NameTypeReqDescription
account_id–––
category_id–––
end_date–––
has_attachments–––
has_notes–––
hidden_from_reports–––
is_pending–––
is_recurring–––
is_split–––
limitinteger––
needs_review–––
offsetinteger––
querystringyes–
start_date–––
tag_ids–––
verboseboolean––
NameTypeReqDescription
next_offset–––
search_metadata–yes–
total_count–––
transactionsarrayyes–

No examples provided.

set_budget_amount ~109

Set a category's monthly budget amount. Args: category_id: Category ID from get_transaction_categories. amount: Budget amount; 0 clears the budget for that month. month: Any date in the target month; ISO or natural language. Defaults to the current month. apply_to_future: True also applies the amount to later months.

NameTypeReqDescription
amountnumberyes–
apply_to_futureboolean––
category_idstringyes–
month–––
NameTypeReqDescription
amountnumberyes–
apply_to_futurebooleanyes–
category_idstringyes–
monthstringyes–
result–yes–

No examples provided.

set_savings_goal_budget_amount ~109

Set a savings goal's planned monthly contribution. Args: goal_id: Goal ID from get_savings_goals. amount: Planned contribution for the month. month: Any date in the target month; ISO or natural language. Defaults to the current month. apply_to_future: True also applies the amount to later months.

NameTypeReqDescription
amountnumberyes–
apply_to_futureboolean––
goal_idstringyes–
month–––
NameTypeReqDescription
amountnumberyes–
apply_to_futurebooleanyes–
goal_idstringyes–
monthstringyes–

No examples provided.

set_transaction_tags ~74

Replace all tags on a transaction; [] removes every tag. Returns the resulting tag IDs. Args: transaction_id: Transaction ID from get_transactions or search_transactions. tag_ids: The complete tag list, as IDs from get_transaction_tags.

NameTypeReqDescription
tag_idsarrayyes–
transaction_idstringyes–
NameTypeReqDescription
tag_idsarrayyes–
transaction_idstringyes–

No examples provided.

update_account ~157

Update an account's settings, leaving omitted fields unchanged. Args: account_id: Account ID from get_accounts. name: New display name. balance: New balance; meant for manual accounts, since synced accounts refresh theirs. include_in_net_worth: Whether the account counts toward net worth. hide_from_summary_list: Whether to hide the account from the accounts list. hide_transactions_from_reports: Whether to exclude its transactions from budgets and reports. Provide at least one change. Returns the compact updated account.

NameTypeReqDescription
account_idstringyes–
balance–––
hide_from_summary_list–––
hide_transactions_from_reports–––
include_in_net_worth–––
name–––
NameTypeReqDescription
account–yes–

No examples provided.

update_recurring_transaction ~194

Change a merchant's recurring schedule, not an individual transaction. This affects the merchant-wide recurrence. Get merchant_id from an occurrence's stream.merchant.id, not stream.id or transactionId. Pass the current merchant_name to avoid renaming the merchant. Omitted settings stay unchanged; provide at least one. is_recurring enables or removes recurrence; is_active pauses or resumes a schedule. frequency is Monarch's string (for example, "monthly"). base_date is the schedule's anchor date and accepts the same date formats as get_recurring_transactions. amount uses Monarch's signed amount, as returned by the existing stream. This does not create posted transactions or move money.

NameTypeReqDescription
amount–––
base_date–––
frequency–––
is_active–––
is_recurring–––
merchant_idstringyes–
merchant_namestringyes–
NameTypeReqDescription
merchant–yes–

No examples provided.

update_transaction ~303

Update a transaction, leaving omitted fields unchanged. Args: transaction_id: Transaction ID from get_transactions or search_transactions. amount: New nonzero amount. Monarch's client cannot set an amount of 0. merchant_name: New display name, not the read-only plaidName statement text. The API ignores empty names. category_id: New category ID from get_transaction_categories. date: New date in YYYY-MM-DD format. notes: Memo, separate from the merchant name; "" clears it. goal_id: Savings goal ID; "" clears the association. hide_from_reports: Whether to hide the transaction from reports. needs_review: Whether to flag the transaction for review. owner_user_id: Member ID from get_household_members; "" makes it Shared. Omitted/null leaves ownership unchanged. Read verbose transactions to verify ownership; the update response does not include the owner. Returns updated transaction details. This tool cannot change the transaction ID, account, pending status, attachments, or timestamps. Use update_transaction_splits to change splits and update_recurring_transaction to change a merchant's recurring schedule.

NameTypeReqDescription
amount–––
category_id–––
date–––
goal_id–––
hide_from_reports–––
merchant_name–––
needs_review–––
notes–––
owner_user_id–––
transaction_idstringyes–
NameTypeReqDescription
transaction–yes–

No examples provided.

update_transaction_rule ~277

Edit a rule, and optionally run it on existing transactions. Get rule_id from get_transaction_rules. Arguments you leave out keep their current value. To clear a value, pass [] for a list or "" for set_category_id, set_merchant_name, or review_status. clear_amount_criteria removes the amount criterion. A list replaces the whole old list. Shapes match create_transaction_rule. Monarch replaces the whole rule on update. So this reads the rule first and sends it back with your changes, which keeps settings this tool can't edit, such as owners, goals, and splits. The edited rule must keep at least one action and a merchant, statement, or amount criterion. apply_to_existing_transactions=True runs the rule on matching past transactions, even with no other changes. That is hard to undo.

NameTypeReqDescription
account_ids–––
add_tag_ids–––
amount_criteria–––
apply_to_existing_transactionsboolean––
category_ids–––
clear_amount_criteriaboolean––
hide_from_reports–––
merchant_criteria–––
original_statement_criteria–––
review_status–––
rule_idstringyes–
set_category_id–––
set_merchant_name–––
NameTypeReqDescription
applied_to_existing_transactionsbooleanyes–
rule–yes–

No examples provided.

update_transaction_splits ~212

Replace a transaction's entire set of splits, or remove all splits with []. Args: transaction_id: Parent transaction ID. For a split leg from list/search, resolve parent_transaction_id with get_transaction_details first. splits: Complete replacement list. Each leg accepts: - amount (required): Negative for expenses, positive for income. Amounts must sum to the parent's amount or Monarch rejects the update. - category_id: Category ID for the leg. - merchant_name: Display name; defaults to the parent merchant. - notes: Per-leg memo. Example for a -100.00 parent transaction: [{"amount": -70.00, "category_id": "cat_groceries", "notes": "Food"}, {"amount": -30.00, "category_id": "cat_household"}] Returns transaction_id, has_split_transactions, resulting splits, and a summary.

NameTypeReqDescription
splitsarrayyes–
transaction_idstringyes–
NameTypeReqDescription
has_split_transactionsbooleanyes–
messagestringyes–
splitsarrayyes–
transaction_idstringyes–

No examples provided.

update_transactions_bulk ~213

Update transactions concurrently, returning per-item results and counts. Args: updates: JSON array encoded as a string. Each item requires a nonempty transaction_id and accepts amount, merchant_name, category_id, date (YYYY-MM-DD), notes, goal_id, hide_from_reports, needs_review, and owner_user_id. Fields have the same meaning as update_transaction; omitted/null fields stay unchanged. Empty notes or goal_id clears that value; empty owner_user_id makes the transaction Shared. Items reject unknown fields and wrong types without coercion; amounts must be finite nonzero numbers and flags must be booleans. Invalid items fail individually; valid items still run. The batch is not atomic and does not roll back successes. Example: [{"transaction_id": "txn_123", "category_id": "cat_456", "notes": ""}, {"transaction_id": "txn_789", "needs_review": false}]

NameTypeReqDescription
updatesstringyes–
NameTypeReqDescription
message–––
resultsarrayyes–
summary–yes–

No examples provided.

Install

How do I install the Monarch MCP Server server?

Monarch MCP Server runs locally as a PyPI package, launched with uvx monarch-mcp-jamiew. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

pypi · monarch-mcp-jamiew

# add to Claude Code
claude mcp add jamiew-monarch-mcp -- uvx monarch-mcp-jamiew
Common questions

What is the Monarch MCP Server server?

Monarch MCP Server is listed in the public MCP registry as io.github.jamiew/monarch-mcp. Query and update Monarch Money accounts, transactions, and budgets. This page covers its PyPI package (monarch-mcp-jamiew).

Is the Monarch MCP Server server safe to use?

Monarch MCP Server scores 74 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 4 November 2026. Its build provenance is signed and verified. 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 Monarch MCP Server server expose?

Monarch MCP Server exposes 42 tools: get_accounts, get_transactions, search_transactions, get_budgets, get_cashflow, and 37 more. Their descriptions and schemas cost roughly 5,834 tokens of context every time the server is loaded.

Is the Monarch MCP Server server still maintained?

Monarch MCP Server is still listed as active in the MCP registry. We last reached this channel on 4 November 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 Monarch MCP Server server under?

Monarch MCP Server declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.