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 |
Capabilities
Features and capabilities supported by this server
| 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_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
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