Skip to main content
Glama
jamiew

Monarch Money MCP Server

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
MONARCH_EMAILYesYour Monarch Money email address
MONARCH_PASSWORDYesYour Monarch Money password
MONARCH_MFA_SECRETYesYour Monarch Money MFA secret key (TOTP)
MONARCH_FORCE_LOGINNoSet to 'true' to force a fresh login, bypassing cached sessionfalse

Capabilities

Features and capabilities supported by this server

CapabilityDetails
tools
{
  "listChanged": false
}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}
completions
{}
experimental
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
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

    - 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 timestamp)
        • updatedAt (ISO timestamp)
        • __typename (GraphQL metadata)
        • Full nested objects with all their fields

    Use verbose=False for most queries to reduce token usage.
    Use verbose=True when you need: timestamps, split info, attachment details,
    or are updating transactions (need full context).

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)

Merchant Information:
    IMPORTANT: Monarch normalizes merchant names for cleaner UI
    - merchant.name: User-facing display name shown in Monarch UI (normalized/cleaned)
        Example: "Chipotle" for all Chipotle locations
    - plaidName: Original bank statement text from Plaid/institution (raw data)
        Example: "CHIPOTLE 4963", "CHIPOTLE MEX GR ONLINE", "CHIPOTLE 1879"
        Use this to see location numbers or original descriptors
    - Multiple transactions from different locations share the same merchant.name
    - Use plaidName to distinguish between specific locations/variants

Categorization:
    - category.id: Category ID (for filtering/updates)
    - category.name: Category display name (e.g., "Restaurants & Bars")
    - tags: List of tag objects applied to transaction

Account Info:
    - account.id: Account ID where transaction occurred
    - account.displayName: Account name (e.g., "Main Credit Card")

Status Flags:
    - pending: True if transaction hasn't cleared yet
    - needsReview: True if flagged for user review
    - reviewStatus: "needs_review", "reviewed", or null
    - hideFromReports: True if hidden from budget/reports

Transaction Types:
    - isSplitTransaction: True if split into multiple categories
    - isRecurring: True if part of a recurring series

User Annotations:
    NOTE: These are different fields with different purposes
    - 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
    - attachments: List of receipt/document attachments

Metadata (verbose mode only):
    - createdAt: When transaction was first imported
    - updatedAt: Last modification timestamp
    - __typename: GraphQL type information

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

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: Use separate attachment API

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:

  • 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

Prompts

Interactive templates invoked by user choice

NameDescription
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

NameDescription
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