Monarch Money MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| MONARCH_EMAIL | Yes | Your Monarch Money email address | |
| MONARCH_PASSWORD | Yes | Your Monarch Money password | |
| MONARCH_MFA_SECRET | Yes | Your Monarch Money MFA secret key (TOTP) | |
| MONARCH_FORCE_LOGIN | No | Set to 'true' to force a fresh login, bypassing cached session | false |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| completions | {} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| get_accountsA | Retrieve all linked financial accounts. |
| get_transactionsA | 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 Key Transaction Fields: Core Identifiers: - id: Unique transaction ID (required for updates) - date: Transaction date (YYYY-MM-DD format) - amount: Transaction amount (negative = expense, positive = income) Returns: JSON string containing transaction list Common Filter Examples: - Unreviewed transactions: has_notes=False, needs_review=True - Split transactions: is_split=True - Transactions with receipts: has_attachments=True - Manual transactions: synced_from_institution=False |
| search_transactionsA | 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 |
| get_budgetsA | 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 |
| get_cashflowA | 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 |
| get_transaction_categoriesA | 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 |
| create_transactionA | 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 |
| update_transactionA | 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 Returns: JSON string with updated transaction details Common Use Cases: - Change merchant: merchant_name="Starbucks" - Add note: notes="Business expense" - Recategorize: category_id="cat_groceries_123" - Mark for review: needs_review=True - Clear notes: notes="" |
| update_transactions_bulkA | 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 |
| get_transaction_splitsA | 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).
|
| update_transaction_splitsA | 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. |
| get_account_holdingsA | Get investment portfolio data (holdings) for a brokerage account. Args: account_id: ID of the investment/brokerage account to fetch holdings for. |
| get_account_historyC | Get historical account balance data. |
| get_institutionsA | Get linked financial institutions. |
| get_recurring_transactionsA | Get scheduled recurring transactions. |
| set_budget_amountA | Set budget amount for a category. |
| create_manual_accountC | Create a manually tracked account. |
| get_spending_summaryB | 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' |
| refresh_accountsB | Request a refresh of all account data from financial institutions. |
| get_complete_financial_overviewA | 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.) |
| analyze_spending_patternsB | Intelligent spending pattern analysis with trend forecasting. Combines multiple data sources to provide deep spending insights including:
Args: lookback_months: Number of months to analyze (default 6) include_forecasting: Whether to include spending forecasts |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| analyze_spending | Generate a prompt template for analyzing spending patterns. Args: period: Time period to analyze (e.g., "this month", "last 3 months", "2024") category: Optional category to focus on (e.g., "Food & Dining", "Shopping") |
| budget_review | Generate a prompt template for reviewing budget performance. Args: month: Which month to review ("current", "last", or "YYYY-MM" format) |
| financial_health_check | Generate a comprehensive financial health assessment prompt. This prompt guides a thorough review of accounts, spending, and budgets. |
| transaction_categorization_help | Generate a prompt to help categorize a transaction. Args: description: The transaction description or merchant name |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| list_categories_resource | List all transaction categories available in Monarch Money. Returns a JSON array of category objects with id, name, group, and icon. This is read-only reference data useful for understanding available categories before creating or updating transactions. |
| list_accounts_resource | List all linked financial accounts in Monarch Money. Returns a JSON array of account objects including checking, savings, credit cards, investments, and other account types with their balances and institution information. |
| list_institutions_resource | List all connected financial institutions in Monarch Money. Returns a JSON array of institution objects showing which banks, brokerages, and other financial institutions are connected to the account. |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/jamiew/monarch-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server