YNAB MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| YNAB_OP_PATH | No | 1Password secret reference for your API token. | |
| YNAB_API_TOKEN | No | Personal access token from YNAB Developer Settings. | |
| YNAB_BUDGET_ID | No | Default budget ID. If omitted, uses 'last-used'. | |
| YNAB_ALLOW_WRITES | No | Set to '1' to register write tools. | |
| YNAB_API_TOKEN_FILE | No | Path to a file containing the token. Used only when YNAB_API_TOKEN is unset. | |
| YNAB_HTTP_TIMEOUT_MS | No | Per-request timeout. Defaults to '30000'. | |
| YNAB_RATE_LIMIT_BURST | No | Maximum burst size. Defaults to '10'. | |
| YNAB_MAX_RESPONSE_BYTES | No | Maximum direct-fetch response size. Defaults to '8388608'. | |
| YNAB_RATE_LIMIT_PER_HOUR | No | Client-side rate limiter. Defaults to '190'. |
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| get_userA | Get the authenticated user |
| list_budgetsA | List all budgets. Use a budget ID from the results in other tools, or omit budgetId to use the last-used budget. |
| get_budgetA | Get a budget summary including name, currency format, and account/category/payee counts |
| get_budget_settingsA | Get budget settings (currency format, date format) |
| list_accountsA | List all accounts in a budget |
| get_accountA | Get details for a specific account |
| list_categoriesA | List all category groups and their categories |
| get_categoryB | Get a specific category |
| get_month_categoryB | Get category budget for a specific month |
| list_payeesB | List all payees |
| get_payeeA | Get a specific payee |
| list_payee_locationsA | List all payee locations (GPS coordinates where transactions occurred) |
| get_payee_locationC | Get a specific payee location |
| get_payee_locations_by_payeeB | Get all locations for a specific payee |
| list_monthsB | List all budget months |
| get_monthA | Get budget month detail with per-category breakdown |
| list_money_movementsB | List all money movements (budget re-allocations between categories) |
| get_money_movements_by_monthB | Get money movements for a specific month |
| list_money_movement_groupsA | List all money movement groups (batches of related money movements) |
| get_money_movement_groups_by_monthA | Get money movement groups for a specific month |
| get_transactionsA | Get transactions with optional filters. Use type='unapproved' or type='uncategorized' to filter. Optionally filter by account, category, payee, or month. Each returned transaction includes 'import_payee_name_original' — the raw merchant string from the bank import (e.g. 'AplPay LS ONION RIVEMONTPELIER VT') — which encodes processor flag, merchant name (often longer than the cleaned payee_name), and city+state. This is the primary disambiguation field when payee_name is truncated or ambiguous. Note: large date ranges (6+ months on a busy budget) can return 50KB+ of data; narrow with categoryId/payeeId/month filters when possible. |
| get_transactionA | Get a single transaction by ID. Automatically handles composite scheduled-transaction IDs (e.g. uuid_YYYY-MM-DD): the date suffix is stripped before the lookup. If a composite ID's underlying matched transaction has been deleted, falls back to returning the active scheduled-transaction template wrapped in a marker shape { resource_type: 'scheduled_transaction', reason: 'composite_id_with_no_matched_transaction', scheduled_transaction, requested_id } so callers can distinguish the two return shapes. Non-composite IDs preserve strict behavior: a 404 still surfaces as resource_not_found. |
| list_scheduled_transactionsA | List all scheduled (recurring) transactions. NOTE: only manually-created recurring entries appear here — auto-imported recurring charges (subscriptions, utilities, insurance) are NOT included. Use prior-month transaction history to identify recurring charge timing instead. |
| get_scheduled_transactionB | Get a specific scheduled transaction |
| search_categoriesA | Search categories by partial name match (case-insensitive). Useful for finding category IDs when you only know part of the name. |
| search_payeesA | Search payees by partial name match (case-insensitive). Useful for finding payee IDs. |
| review_unapprovedA | Get all unapproved transactions grouped by status: those already categorized (ready to approve) and those still uncategorized (need category first). Each transaction includes a 'flags' array: manually_entered (not bank-imported), match_broken (matched reference is stale — the |
| get_overspent_categoriesA | Get all categories with a negative balance for a given month. Use this to find prior-month overspends that are silently reducing the current month's Ready to Assign. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
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/oliverames/ynab-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server