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 · SCANNED SEP 20

Access Monarch financial data — accounts, transactions, budgets, and more

Available components

0 this week 66 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 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 native-build step with no shell scripting around it. View diagnostics → Pass
  • 3 of 49 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency45
Schema Quality & AI Usability79
  • 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 3760 tokens (~156/item across 24 items; 21 tools + 3 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 Management83
  • Stability observed for 25 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
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
  • We read all 21 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
  • An AI judge read all 22 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 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
// .cursor/mcp.json
{
  "mcpServers": {
    "jamiew-monarch-mcp": {
      "command": "uvx",
      "args": [
        "monarch-mcp-jamiew"
      ]
    }
  }
}
// .vscode/mcp.json
{
  "servers": {
    "jamiew-monarch-mcp": {
      "command": "uvx",
      "args": [
        "monarch-mcp-jamiew"
      ]
    }
  }
}
# add to Codex CLI
codex mcp add jamiew-monarch-mcp -- uvx monarch-mcp-jamiew
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "jamiew-monarch-mcp": {
      "type": "local",
      "command": [
        "uvx",
        "monarch-mcp-jamiew"
      ],
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add jamiew-monarch-mcp --command uvx --arg monarch-mcp-jamiew
# ~/.hermes/config.yaml
mcp_servers:
  jamiew-monarch-mcp:
    command: "uvx"
    args: ["monarch-mcp-jamiew"]
// ~/.netclaw/config/netclaw.json
{
  "McpServers": {
    "jamiew-monarch-mcp": {
      "Transport": "stdio",
      "Command": "uvx",
      "Arguments": [
        "monarch-mcp-jamiew"
      ]
    }
  }
}
# add to Vellum
assistant mcp add jamiew-monarch-mcp -t stdio -c uvx -a monarch-mcp-jamiew
// mcp.json
{
  "mcpServers": {
    "jamiew-monarch-mcp": {
      "command": "uvx",
      "args": [
        "monarch-mcp-jamiew"
      ]
    }
  }
}
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.

  • 20 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.

  • 19 Sept 26 −3
    • Stability: pass → 0.80 functional
  • 18 Sept 26 +1
    • Stability: 0.97 → pass security
  • 15 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.

  • 13 Sept 26 −14
    • Malware scan: pass → unverified security
  • 12 Sept 26 +12
    • Malware scan: unverified → pass security
    • Stability: pass → 0.80 functional
  • 11 Sept 26 +1
    • Stability: 0.97 → pass security
  • 10 Sept 26 −15
    • Malware scan: pass → unverified 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 20 Sept 2026 · Analysed pypi/monarch-mcp-jamiew@0.4.0

Provenance No attestation

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

Result No attestation
Ecosystem pypi

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 49 packages
Packages resolved 49
Stale 3
Tree resolution Complete

Background: SBOMs and build attestations, explained →

MCP tools · 21 exposed · ~3,622 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 ~101

Intelligent spending pattern analysis with trend forecasting. Combines multiple data sources to provide deep spending insights including: - Monthly spending trends by category - Account usage patterns - Budget performance analysis - Predictive spending forecasts Args: lookback_months: Number of months to analyze (default 6) include_forecasting: Whether to include spending forecasts

NameTypeReqDescription
include_forecastingboolean
lookback_monthsinteger
NameTypeReqDescription
account_usage
analysis_period
budget_performance
category_analysis
forecast
metadata
monthly_trends

No examples provided.

create_manual_account ~38

Create a manually tracked account.

NameTypeReqDescription
account_namestringyes
account_typestringyes
balancenumberyes
NameTypeReqDescription
accountyes

No examples provided.

create_transaction ~218

Create a new manual transaction. Args: amount: Transaction amount (positive for income, negative for expense) merchant_name: Name of the merchant/payee (e.g., "Starbucks", "Monthly Rent") account_id: ID of the account for this transaction date: Transaction date in YYYY-MM-DD format category_id: ID of the category to assign (required for new transactions) notes: Optional notes/memo for this transaction update_balance: Whether to update account balance when creating this transaction (default: False) - False: Transaction is recorded but doesn't affect account balance (typical for synced accounts) - True: Adjusts account balance by transaction amount (useful for manual accounts) Returns: JSON string with created transaction details

NameTypeReqDescription
account_idstringyes
amountnumberyes
category_idstringyes
datestringyes
merchant_namestringyes
notes
update_balanceboolean
NameTypeReqDescription
transactionyes

No examples provided.

get_account_history ~35

Get historical account balance data.

NameTypeReqDescription
account_idstringyes
end_date
start_date
NameTypeReqDescription
account_idstringyes
historyyes

No examples provided.

get_account_holdings ~50

Get investment portfolio data (holdings) for a brokerage account. Args: account_id: ID of the investment/brokerage account to fetch holdings for.

NameTypeReqDescription
account_idstringyes
NameTypeReqDescription
holdingsyes

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_budgets ~79

Retrieve budget information with flexible date filtering. Args: start_date: Filter budgets from this date onwards. Supports natural language like 'last month', 'this year' end_date: Filter budgets up to this date. Supports natural language Returns: JSON string containing budget information

NameTypeReqDescription
end_date
start_date
NameTypeReqDescription
budgetsyes
message

No examples provided.

get_cashflow ~82

Analyze cashflow data with flexible date filtering. Args: start_date: Filter cashflow from this date onwards. Supports natural language like 'last month', 'this year' end_date: Filter cashflow up to this date. Supports natural language Returns: JSON string containing cashflow analysis

NameTypeReqDescription
end_date
start_date
NameTypeReqDescription
cashflowyes

No examples provided.

get_complete_financial_overview ~84

Get complete financial overview in a single call - accounts, transactions, budgets, cashflow. This intelligent batch tool combines multiple API calls to provide comprehensive financial analysis, reducing round-trips and providing deeper insights. Args: period: Time period for analysis ("this month", "last month", "this year", etc.)

NameTypeReqDescription
periodstring
NameTypeReqDescription
accounts
batch_metadata
budgets
cashflow
categories
periodstringyes
transaction_summary
transactions

No examples provided.

get_institutions ~15

Get linked financial institutions.

Input schema present but exposes no named parameters.

NameTypeReqDescription
institutionsyes

No examples provided.

get_recurring_transactions ~15

Get scheduled recurring transactions.

Input schema present but exposes no named parameters.

NameTypeReqDescription
recurringyes

No examples provided.

get_spending_summary ~83

Get intelligent spending summary with aggregations. Args: start_date: Start date (supports natural language like 'last month') end_date: End date (supports natural language) group_by: Group spending by 'category', 'account', or 'month'

NameTypeReqDescription
end_date
group_bystring
start_date
NameTypeReqDescription
group_bystringyes
groupsobjectyes
periodyes
totalsyes

No examples provided.

get_transaction_categories ~94

List all transaction categories. Args: verbose: Output format control (default: False) - False: Returns compact format with just {id, name} per category (~80% smaller). Ideal for category lookups when mapping names to IDs. - True: Returns full category details including group, order, timestamps, system flags. Returns: JSON string containing category list

NameTypeReqDescription
verboseboolean
NameTypeReqDescription
categoriesarrayyes
countintegeryes
verbosebooleanyes

No examples provided.

get_transaction_splits ~125

Get the split legs of a transaction. Splitting lets a single transaction be divided across multiple categories (e.g. a Target run that is part groceries, part household). This returns the current split legs, if any. Args: transaction_id: ID of the transaction to inspect Returns: The transaction id, whether it currently has splits, and the list of split legs (each with its own amount, category, merchant, and notes). ``splits`` is empty for an un-split transaction.

NameTypeReqDescription
transaction_idstringyes
NameTypeReqDescription
has_split_transactionsbooleanyes
splitsarrayyes
transaction_idstringyes

No examples provided.

get_transactions ~1,110

Fetch transactions with flexible date filtering and smart output formatting. Args: limit: Maximum number of transactions to return (default: 100, max: 1000) offset: Number of transactions to skip for pagination (default: 0) start_date: Filter transactions from this date onwards. Supports natural language like 'last month', 'yesterday', '30 days ago' NOTE: If you provide start_date without end_date, end_date will auto-default to 'today' end_date: Filter transactions up to this date. Supports natural language NOTE: If you provide end_date without start_date, start_date will auto-default to 'this month' account_id: Filter by specific account ID (converted to list internally) category_id: Filter by specific category ID (converted to list internally) tag_ids: Comma-separated tag IDs to filter by (e.g., "tag1,tag2") has_attachments: Filter to transactions with (True) or without (False) attachments has_notes: Filter to transactions with (True) or without (False) notes hidden_from_reports: Include hidden transactions (True), exclude them (False), or show all (None) is_split: Filter to split transactions only (True) or non-split (False) is_recurring: Filter to recurring transactions only (True) or non-recurring (False) verbose: Output format control (default: False) - False (compact mode): Returns essential fields only (~80% smaller) Fields included: id, date, amount, merchant, plaidName, category, account, pending, needsReview, notes - True (verbose mode): Returns ALL fields including: Essential fields (same as compact) PLUS: • hideFromReports (bool) • reviewStatus (str: "needs_review" | "reviewed" | null) • isSplitTransaction (bool) • isRecurring (bool) • attachments (list of attachment objects) • tags (list of tag objects) • createdAt (ISO…

NameTypeReqDescription
account_id
category_id
end_date
has_attachments
has_notes
hidden_from_reports
is_recurring
is_split
limitinteger
offsetinteger
start_date
tag_ids
verboseboolean
NameTypeReqDescription
countintegeryes
transactionsarrayyes
verbosebooleanyes

No examples provided.

refresh_accounts ~19

Request a refresh of all account data from financial institutions.

Input schema present but exposes no named parameters.

NameTypeReqDescription
resultyes

No examples provided.

search_transactions ~326

Search transactions by text using Monarch Money's built-in search. Searches merchant names, descriptions, notes, and other fields. Accepts all the same filters as get_transactions plus a search query. Returns compact results by default (use verbose=True for full details). Args: query: Search term to find in transactions limit: Maximum transactions to return (default: 500, max: 1000) offset: Number of transactions to skip for pagination start_date: Filter from this date (supports natural language like 'last month') end_date: Filter to this date (supports natural language) account_id: Filter by specific account ID category_id: Filter by specific category ID tag_ids: Comma-separated tag IDs to filter by has_attachments: Filter by attachment presence has_notes: Filter by notes presence hidden_from_reports: Filter by report visibility is_split: Filter split transactions is_recurring: Filter recurring transactions verbose: False=compact fields, True=all fields Returns: JSON with search_metadata and matching transactions

NameTypeReqDescription
account_id
category_id
end_date
has_attachments
has_notes
hidden_from_reports
is_recurring
is_split
limitinteger
offsetinteger
querystringyes
start_date
tag_ids
verboseboolean
NameTypeReqDescription
search_metadatayes
transactionsarrayyes

No examples provided.

set_budget_amount ~31

Set budget amount for a category.

NameTypeReqDescription
amountnumberyes
category_idstringyes
NameTypeReqDescription
amountnumberyes
category_idstringyes
resultyes

No examples provided.

update_transaction ~555

Update an existing transaction. Args: transaction_id: ID of the transaction to update (required) amount: New transaction amount merchant_name: New merchant display name shown in Monarch UI - This updates the user-facing name (merchant.name field) - Does NOT change plaidName (original bank statement text, read-only) - Empty strings are ignored by the API - Example: Change "AMZN Mktp US" to "Amazon" category_id: ID of the new category to assign date: New transaction date in YYYY-MM-DD format notes: User notes/memo for this transaction (separate from merchant name) NOTE: This is different from merchant_name - notes: Free-form user memo/annotation (e.g., "Business lunch with client") - merchant_name: The merchant's display name (e.g., "Olive Garden") - Both are editable, but serve different purposes in the UI - Use empty string "" to clear existing notes goal_id: ID of savings goal to associate with this transaction - Use empty string "" to clear goal association hide_from_reports: Whether to hide this transaction from reports/analytics needs_review: Flag transaction as needing review Field Editability: Editable Fields (can be updated): - amount: Transaction amount - merchant_name: User-facing merchant display name - category_id: Category assignment - date: Transaction date - notes: User memo/notes - goal_id: Goal association - hide_from_reports: Visibility in reports - needs_review: Review flag Read-Only Fields (cannot be updated): - id: Transaction ID (immutable) - plaidName: Original bank statement text (from institution) - account: Account where transaction occurred - pending: Pending status (controlled by institution) - createdAt: Creation timestamp - isSplitTransaction: Split status (use separate split API) - attachments…

NameTypeReqDescription
amount
category_id
date
goal_id
hide_from_reports
merchant_name
needs_review
notes
transaction_idstringyes
NameTypeReqDescription
transactionyes

No examples provided.

update_transaction_splits ~308

Create, replace, or remove the splits on a transaction. This is a full replacement: the splits you pass become the transaction's complete set of split legs, replacing any that exist. Pass an empty list to remove all splits and restore the transaction to a single un-split entry. Args: transaction_id: ID of the transaction to split (required) splits: The complete set of split legs. Each leg has: - amount (required): Leg amount, using the parent's sign convention (expenses negative, income positive). All leg amounts MUST sum to the parent transaction's amount or Monarch rejects the update. - category_id (optional): Category for this leg - merchant_name (optional): Merchant display name for this leg; defaults to the parent merchant when omitted - notes (optional): Per-leg memo Pass an empty list to delete all existing splits. Example: Split a -100.00 transaction into groceries and household: transaction_id="txn_123" splits=[ {"amount": -70.00, "category_id": "cat_groceries", "notes": "Food"}, {"amount": -30.00, "category_id": "cat_household"}, ] Returns: The transaction id, whether it now has splits, the resulting split legs, and a human-readable summary message.

NameTypeReqDescription
splitsarrayyes
transaction_idstringyes
NameTypeReqDescription
has_split_transactionsbooleanyes
messagestringyes
splitsarrayyes
transaction_idstringyes

No examples provided.

update_transactions_bulk ~240

Update multiple transactions in a single call to save round-trips. This is much more efficient than calling update_transaction multiple times. Updates are executed in parallel for maximum performance. Args: updates: JSON string containing list of transaction updates. Each update should have: - transaction_id (required): ID of transaction to update - amount (optional): New amount - merchant_name (optional): New merchant display name - category_id (optional): New category ID - date (optional): New date in YYYY-MM-DD format - notes (optional): New notes - goal_id (optional): Goal ID or empty string to clear - hide_from_reports (optional): Boolean visibility flag - needs_review (optional): Boolean review flag Example: [ {"transaction_id": "123", "category_id": "cat_456", "notes": "Updated"}, {"transaction_id": "789", "merchant_name": "Starbucks", "needs_review": false} ] Returns: JSON with results for each transaction including successes and any failures

NameTypeReqDescription
updatesstringyes
NameTypeReqDescription
message
resultsarrayyes
summaryyes

No examples provided.

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. Access Monarch financial data, accounts, transactions, budgets, and more. This page covers its PyPI package (monarch-mcp-jamiew).

Is the Monarch MCP Server server safe to use?

Monarch MCP Server scores 66 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 20 September 2026. 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 21 tools: get_accounts, get_transactions, search_transactions, get_budgets, get_cashflow, and 16 more. Their descriptions and schemas cost roughly 3,622 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 20 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 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.