{
  "serverInfo": {
    "name": "MoneyMatter Finance Tracker",
    "version": "1.0.0",
    "title": "MoneyMatter — Personal Finance MCP Server",
    "description": "OAuth-secured read/write access to your MoneyMatter financial data: accounts, transactions (including splits, refunds, transfers, and groups), budgets, subscriptions, transaction automations (rules engine), categories, tags, cash flow, balance history, spending analytics, and investment portfolios (holdings, cash balances, and investment transactions). Supports creating, editing, and deleting records when the corresponding scopes are granted. Enables natural-language queries and automation of your personal finances.",
    "website": "https://moneymatter.app",
    "documentation": "https://moneymatter.app/llms-full.txt",
    "vendor": {
      "name": "MoneyMatter",
      "url": "https://moneymatter.app"
    },
    "icons": [
      {
        "src": "https://moneymatter.app/favicon.svg",
        "type": "image/svg+xml"
      },
      {
        "src": "https://moneymatter.app/web-app-manifest-512x512.png",
        "type": "image/png",
        "sizes": "512x512"
      }
    ],
    "license": "AGPL-3.0-only",
    "sourceCode": "https://github.com/letehaha/moneymatter"
  },
  "transport": {
    "type": "streamable-http",
    "url": "https://mcp.moneymatter.app/mcp"
  },
  "capabilities": {
    "tools": {},
    "prompts": {},
    "logging": {}
  },
  "authentication": {
    "oauth2": {
      "authorizationServer": "https://api.moneymatter.app/api/v1/auth",
      "metadata": "https://moneymatter.app/.well-known/oauth-authorization-server",
      "protectedResourceMetadata": "https://moneymatter.app/.well-known/oauth-protected-resource",
      "scopes": ["finance:read", "finance:write", "finance:delete", "profile:read", "offline_access"]
    }
  },
  "tools": [
    {
      "name": "get_user_profile",
      "description": "Retrieve the authenticated user's profile (name, email, default currency)."
    },
    {
      "name": "get_accounts",
      "description": "List the user's financial accounts with balances, types, and currencies."
    },
    {
      "name": "search_transactions",
      "description": "Search and filter transactions across accounts by date, category, tag, amount, or merchant."
    },
    {
      "name": "get_categories",
      "description": "List spending and income categories, including custom user-defined categories."
    },
    {
      "name": "get_tags",
      "description": "List transaction tags used to annotate spending."
    },
    {
      "name": "get_budgets",
      "description": "Retrieve active and historical budgets with progress and overspending details."
    },
    {
      "name": "create_budget",
      "description": "Create a new budget with an optional spending limit, date range, and linked categories."
    },
    {
      "name": "update_budget",
      "description": "Update an existing budget's name, date range, spending limit, or linked categories."
    },
    {
      "name": "delete_budget",
      "description": "Permanently delete a budget and all its transaction links."
    },
    {
      "name": "archive_budget",
      "description": "Archive or restore a budget (sets status to archived or active)."
    },
    {
      "name": "add_transactions_to_budget",
      "description": "Manually link transactions to a manual-type budget."
    },
    {
      "name": "remove_transactions_from_budget",
      "description": "Unlink transactions from a budget without deleting them."
    },
    {
      "name": "get_budget_spending_stats",
      "description": "Spending breakdown by category and time-series of expense vs income for a budget."
    },
    {
      "name": "get_spending_by_categories",
      "description": "Aggregate spending by category over a specified date range."
    },
    {
      "name": "get_cash_flow",
      "description": "Summarize income vs expenses over a specified date range."
    },
    {
      "name": "get_balance_history",
      "description": "Time-series of account balances for a given range and granularity."
    },
    {
      "name": "get_expenses_for_period",
      "description": "Summarize expenses for a given time period with breakdowns."
    },
    {
      "name": "get_portfolios",
      "description": "List the user's investment portfolios with type, enabled state, and metadata."
    },
    {
      "name": "get_portfolio_summary",
      "description": "Portfolio-level aggregates: total value, cost basis, realized and unrealized gains, and cash balances in the user's base currency."
    },
    {
      "name": "get_portfolio_holdings",
      "description": "Positions held in a portfolio with market value, cost basis, and realized/unrealized gains. Includes embedded security details."
    },
    {
      "name": "get_portfolio_balances",
      "description": "Cash balances held in a portfolio, broken down per currency (original and base-currency equivalents)."
    },
    {
      "name": "get_investment_transactions",
      "description": "Investment transaction history (buy, sell, dividend, transfer, tax, fee) with security and portfolio details."
    },
    {
      "name": "search_securities",
      "description": "Search for securities by ticker or company name. Returns securityId needed for create_investment_transaction."
    },
    {
      "name": "create_portfolio",
      "description": "Create a new investment portfolio (requires finance:write scope)."
    },
    {
      "name": "update_portfolio",
      "description": "Update portfolio name, type, description, or enabled state (requires finance:write scope)."
    },
    {
      "name": "delete_portfolio",
      "description": "Permanently delete a portfolio and optionally all its data (requires finance:delete scope)."
    },
    {
      "name": "create_investment_transaction",
      "description": "Record a new investment transaction (buy, sell, dividend, fee, etc.) in a portfolio (requires finance:write scope)."
    },
    {
      "name": "update_investment_transaction",
      "description": "Update an existing investment transaction's category, date, quantity, price, or fees (requires finance:write scope)."
    },
    {
      "name": "delete_investment_transaction",
      "description": "Permanently delete an investment transaction and recalculate affected holding (requires finance:delete scope)."
    },
    {
      "name": "link_transaction_to_portfolio",
      "description": "Link an existing transaction to a portfolio as a cash transfer (expense = cash in, income = cash out) (requires finance:write scope)."
    },
    {
      "name": "unlink_transaction_from_portfolio",
      "description": "Remove a transaction's portfolio link, reversing the portfolio cash balance change (requires finance:write scope)."
    },
    {
      "name": "transfer_account_to_portfolio",
      "description": "Move cash from a regular account into a portfolio, creating the expense transaction (requires finance:write scope)."
    },
    {
      "name": "transfer_portfolio_to_account",
      "description": "Withdraw portfolio cash into a regular account, creating the income transaction (requires finance:write scope)."
    },
    {
      "name": "create_portfolio_cash_transaction",
      "description": "Record a direct portfolio cash deposit or withdrawal with no linked account transaction (requires finance:write scope)."
    },
    {
      "name": "list_portfolio_transfers",
      "description": "Cash movement history of a portfolio: transfers, deposits/withdrawals, linked transactions, and currency exchanges."
    },
    {
      "name": "adjust_account_balance",
      "description": "Set an account to a specific balance by creating an adjustment transaction for the difference."
    },
    {
      "name": "archive_account",
      "description": "Archive or unarchive a user account, with full side-effect handling (group removal, subscription unlinking)."
    },
    {
      "name": "get_transaction_groups",
      "description": "List all transaction groups with aggregate counts and date ranges, or with full embedded transactions."
    },
    {
      "name": "create_transaction_group",
      "description": "Create a new transaction group bundling related transactions (e.g. a split bill). Requires finance:write scope."
    },
    {
      "name": "update_transaction_group",
      "description": "Update the name or note of an existing transaction group. Requires finance:write scope."
    },
    {
      "name": "delete_transaction_group",
      "description": "Permanently delete a transaction group (transactions themselves are kept). Requires finance:delete scope."
    },
    {
      "name": "add_transactions_to_group",
      "description": "Add transactions to an existing transaction group. Requires finance:write scope."
    },
    {
      "name": "remove_transactions_from_group",
      "description": "Remove transactions from a group, optionally dissolving it if too few remain. Requires finance:write scope."
    },
    {
      "name": "get_subscriptions",
      "description": "List all subscriptions and recurring bills with frequency, expected amount, and linked transaction count."
    },
    {
      "name": "get_subscription_by_id",
      "description": "Retrieve a single subscription with all linked transactions and the computed next expected payment date."
    },
    {
      "name": "create_subscription",
      "description": "Create a new subscription, recurring bill, or installment plan — an expense by default, or a recurring income (e.g. salary) via transactionType. Requires finance:write scope."
    },
    {
      "name": "update_subscription",
      "description": "Update fields on an existing subscription or bill. Requires finance:write scope."
    },
    {
      "name": "delete_subscription",
      "description": "Permanently delete a subscription and its transaction links. Requires finance:delete scope."
    },
    {
      "name": "toggle_subscription_active",
      "description": "Activate or deactivate a subscription to include or exclude it from upcoming payment calculations. Requires finance:write scope."
    },
    {
      "name": "detect_subscription_candidates",
      "description": "Scan past 12 months of transactions to detect recurring payment patterns. Cached for 1 hour. Requires finance:write scope."
    },
    {
      "name": "list_subscription_candidates",
      "description": "List auto-detected subscription candidates sorted by confidence score."
    },
    {
      "name": "dismiss_subscription_candidate",
      "description": "Dismiss a pending subscription candidate so it no longer appears in the list. Requires finance:write scope."
    },
    {
      "name": "link_transactions_to_subscription",
      "description": "Link transactions to a subscription to mark them as payment instances. Requires finance:write scope."
    },
    {
      "name": "unlink_transactions_from_subscription",
      "description": "Unlink transactions from a subscription without deleting them. Requires finance:write scope."
    },
    {
      "name": "get_upcoming_subscription_payments",
      "description": "List upcoming subscription payments sorted by next expected payment date."
    },
    {
      "name": "get_subscriptions_summary",
      "description": "Aggregate summary across all active subscriptions, split by direction: estimated monthly and projected yearly cost from expense subscriptions, expected monthly income from income subscriptions, and active counts as { expense, income }, all in the user's base currency."
    },
    {
      "name": "create_transaction",
      "description": "Create a new income, expense, or transfer transaction with optional splits, tags, category, and original (foreign-currency) amount."
    },
    {
      "name": "create_attachment_upload_url",
      "description": "Returns a short-lived URL and headers for uploading receipt/invoice files (JPEG, PNG, WebP, PDF) to a transaction over HTTP. Requires finance:write scope."
    },
    {
      "name": "update_transaction",
      "description": "Update an existing transaction's amount, date, category, tags, note, splits, or original (foreign-currency) amount. Requires finance:write scope."
    },
    {
      "name": "delete_transaction",
      "description": "Permanently delete a transaction. For transfers, both sides are deleted. Requires finance:delete scope."
    },
    {
      "name": "bulk_update_transactions",
      "description": "Update multiple transactions at once — set category, note, or add/replace/remove tags. Requires finance:write scope."
    },
    {
      "name": "split_transaction",
      "description": "Split a transaction across multiple categories; amounts must sum to the transaction total. Requires finance:write scope."
    },
    {
      "name": "delete_split",
      "description": "Delete a single split from a transaction by its split ID. Requires finance:delete scope."
    },
    {
      "name": "link_transfer",
      "description": "Link two existing transactions as a transfer pair (opposite types, different accounts). Requires finance:write scope."
    },
    {
      "name": "unlink_transfer",
      "description": "Unlink a transfer pair by transferId; both transactions become independent entries. Requires finance:write scope."
    },
    {
      "name": "link_refund",
      "description": "Mark an existing transaction as a refund of another transaction. Requires finance:write scope."
    },
    {
      "name": "unlink_refund",
      "description": "Remove a refund link between two transactions. Requires finance:write scope."
    },
    {
      "name": "assign_tags_to_transaction",
      "description": "Assign one or more tags to a transaction; already-assigned tags are silently skipped. Requires finance:write scope."
    },
    {
      "name": "remove_tags_from_transaction",
      "description": "Remove tags from one or more transactions. Requires finance:write scope."
    },
    {
      "name": "create_category",
      "description": "Create a new transaction category, optionally nested under a parent. Requires finance:write scope."
    },
    {
      "name": "update_category",
      "description": "Rename, recolor, or change the icon of a category. Requires finance:write scope."
    },
    {
      "name": "delete_category",
      "description": "Permanently delete a category; supply replaceWithCategoryId to reassign linked transactions. Requires finance:delete scope."
    },
    {
      "name": "create_tag",
      "description": "Create a new tag that can be assigned to transactions. Requires finance:write scope."
    },
    {
      "name": "update_tag",
      "description": "Rename, recolor, or update the description of a tag. Requires finance:write scope."
    },
    {
      "name": "delete_tag",
      "description": "Permanently delete a tag and unlink it from all transactions. Requires finance:delete scope."
    },
    {
      "name": "get_payees",
      "description": "List Payees (merchants/counterparties) for the user, optionally filtered by a substring query. Returns Payee id, name, defaultCategoryId, and aggregated stats (transactionCount, netFlowRef, top category, last seen)."
    },
    {
      "name": "get_payee",
      "description": "Fetch a single Payee with aliases and computed stats. Useful when the user references a merchant by id and wants its full record."
    },
    {
      "name": "create_payee",
      "description": "Create a Payee (merchant/counterparty) for the user. Use when the user wants to register a new merchant before linking transactions. Requires finance:write scope."
    },
    {
      "name": "update_payee",
      "description": "Rename a Payee or set/clear its defaultCategoryId. Renaming preserves the previous canonical name as an alias so historical matches still resolve. Requires finance:write scope."
    },
    {
      "name": "merge_payees",
      "description": "Merge a source Payee into a target Payee. Transactions and aliases move to the target; the target wins silently on defaultCategoryId conflict; the source is deleted. Requires finance:delete scope."
    },
    {
      "name": "delete_payee",
      "description": "Delete a Payee. Linked transactions retain their categoryId but their payeeId is set to null. Requires finance:delete scope."
    },
    {
      "name": "get_transaction_automations",
      "description": "List the user's transaction automation rules with their evaluation order (position), enabled state, match counts, and pausedReason when a referenced record was deleted."
    },
    {
      "name": "preview_transaction_automation",
      "description": "Dry-run a set of automation conditions against up to the last 1000 eligible existing transactions and return matchedCount, scannedCount, and up to 5 sample matches. Nothing is modified."
    },
    {
      "name": "create_transaction_automation",
      "description": "Create a transaction automation rule that sets a category, tags, payee, or note on newly synced or imported bank transactions that match its conditions. Requires finance:write scope."
    },
    {
      "name": "update_transaction_automation",
      "description": "Update the name, enabled state, conditions, or actions of an automation rule. Re-validates referenced records and clears pausedReason. Requires finance:write scope."
    },
    {
      "name": "delete_transaction_automation",
      "description": "Permanently delete a transaction automation rule. Transactions it already changed keep their values. Requires finance:delete scope."
    },
    {
      "name": "reorder_transaction_automations",
      "description": "Set the top-to-bottom evaluation order of the automation rules. Requires the full current id set. Requires finance:write scope."
    },
    {
      "name": "list_venture_platforms",
      "description": "List the user's venture investment platforms with their default fee fractions (entry fee, mgmt fee, carry, hurdle)."
    },
    {
      "name": "get_venture_platform",
      "description": "Retrieve a single venture platform by id, including its default fee fractions."
    },
    {
      "name": "create_venture_platform",
      "description": "Create a venture investment platform (syndicator, fund manager) with default fees that auto-apply to new deals. Requires finance:write scope."
    },
    {
      "name": "update_venture_platform",
      "description": "Update a venture platform's name, website, description, or default fees. Does not change fees on existing deals. Requires finance:write scope."
    },
    {
      "name": "delete_venture_platform",
      "description": "Delete a venture platform; deals referencing it have their platformId cleared. Supports soft-delete or hard-delete via force. Requires finance:delete scope."
    },
    {
      "name": "list_venture_deals",
      "description": "List the user's venture deals (illiquid private investments) with status, platform, currency, principal, fees, and dates."
    },
    {
      "name": "get_venture_deal",
      "description": "Retrieve a single venture deal by id with platform and currency; optionally embed its event history."
    },
    {
      "name": "get_venture_deal_metrics",
      "description": "Compute aggregated metrics for a venture deal: cost basis, current value, distributions, P&L, TVPI, DPI, and IRR (as of an optional date)."
    },
    {
      "name": "create_venture_deal",
      "description": "Create a venture deal. Snapshots platform fees by default. Optionally creates the initial_investment event in the same operation. Requires finance:write scope."
    },
    {
      "name": "update_venture_deal",
      "description": "Update a venture deal. Terms (principal, fees, dates, currency) are locked once events exist. Requires finance:write scope."
    },
    {
      "name": "delete_venture_deal",
      "description": "Delete a venture deal; cascade-deletes its events. Linked bank transactions are unlinked and restored. Requires finance:delete scope."
    },
    {
      "name": "list_venture_events",
      "description": "List events for a venture deal in chronological order, with their amounts, cash-flow modes, and linked bank transactions."
    },
    {
      "name": "get_venture_event",
      "description": "Retrieve a single venture event by id, including its linked bank transactions."
    },
    {
      "name": "create_venture_event",
      "description": "Record an event on a venture deal (initial_investment must come first). Auto-computes carry on distributions and exits. Requires finance:write scope."
    },
    {
      "name": "update_venture_event",
      "description": "Update a venture event. Manual gpCarry/lpNet values set override flags; resetOverrides=true re-runs auto-compute. Requires finance:write scope."
    },
    {
      "name": "delete_venture_event",
      "description": "Delete a venture event; unlinks bank transactions first. Cannot delete initial_investment while other events exist. Requires finance:delete scope."
    }
  ],
  "prompts": [
    {
      "name": "financial_data_guide",
      "description": "Guide for working with MoneyMatter's financial data, including data model and common query patterns."
    }
  ]
}
