YNAB MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| YNAB_ACCESS_TOKEN | Yes | Your YNAB Personal Access Token | |
| YNAB_DEFAULT_BUDGET | No | Default budget ID to use if not specified in API calls |
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": true
} |
| logging | {} |
| prompts | {
"listChanged": true
} |
| resources | {
"subscribe": false,
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| get_planA | Get the plan's name, the months it covers, and its currency and date formats. Use the currency format to write amounts the way the user sees them in YNAB. |
| get_plan_monthB | Get one month of the plan: income, assigned, activity, Ready to Assign, age of money, and each visible category's amounts for that month. |
| list_plan_monthsA | List the plan's months with their totals, newest first. Use this for trends over time: income, assigned, and activity by month, how Ready to Assign changed, and how age of money moved. |
| get_month_categoryA | Get one category's assigned, activity, available, and target for a month. |
| list_accountsA | List the plan's accounts with their balances. Each account includes its transfer_payee_id: use it as the payee of a transaction to transfer money into that account. |
| create_accountA | Create an account that the user tracks by hand, such as cash or a new savings account. The account is not connected to a bank. |
| list_categoriesA | List the plan's categories with this month's amounts and targets. Only returns visible categories. Hidden and deleted categories are excluded. Categories come in the order the plan shows them, group by group. |
| list_category_groupsA | List the plan's category groups with this month's totals. Lighter than list_categories when only the overview by group is needed. |
| create_categoryC | Create a category in a category group, optionally with a target. |
| update_categoryA | Rename a category, change its note, move it to another group, or set its target. Only the fields given change. To change what is assigned to a category, use assign_money or set_assigned. |
| create_category_groupB | Create an empty category group. |
| rename_category_groupC | Rename a category group. |
| assign_moneyA | Assign more money to a category from Ready to Assign, or take some back. This adds to what is already assigned: assigning 100 to a category with 250 assigned leaves 350 assigned. A negative amount returns money to Ready to Assign. Calling this twice assigns twice, so do not retry it blindly after an error; check the category with get_month_category first. For categories with NEED targets that refill each month, the full target is usually assigned every month, whatever is available. |
| set_assignedA | Set exactly how much is assigned to a category in a month. Unlike assign_money, this replaces the assigned amount, so it is safe to retry. Ready to Assign absorbs the difference. |
| move_moneyA | Move assigned money from one category to another within a month. This is how to cover overspending or reallocate: it takes the amount off one category's assigned amount and adds it to the other's. Ready to Assign does not change. If YNAB rejects the second change, the first is put back before the error is reported. |
| list_money_movementsA | List the history of money assigned and moved between categories. Use this to explain why a category's assigned amount changed: each entry says how much moved, from where, to where, and when. |
| list_payeesA | List the plan's payees, sorted by name. Payees are the people and businesses money goes to and comes from. To find a particular payee, find_payee is much faster than paging through this list. Deleted payees are excluded. |
| find_payeeA | Find payees whose names contain a search term, ignoring case. Example queries this tool can answer:
|
| create_payeeA | Create a payee. A new transaction can also create its payee by giving payee_name, so this is only needed to set up a payee before any transaction uses it. |
| rename_payeeA | Rename a payee. Every transaction with this payee shows the new name. |
| list_transactionsA | List transactions, newest first, with filters that can be combined. Example queries this tool can answer:
Filtering by category or payee returns each part of a split transaction as its own row, with parent_transaction_id set. |
| get_transactionA | Get one transaction, including the parts of a split. |
| create_transactionsA | Create one or more transactions in one request. Use this to enter spending from a receipt, record income, enter a transfer between accounts, or add a split transaction. Calling this twice enters the transactions twice. Example entries:
|
| update_transactionsA | Change one or more existing transactions in one request. Each change names a transaction and only the fields to change; every other field stays as it is. This is the tool for reviewing transactions: approve them, categorize them, fix payees, set memos, flag them, or mark them cleared. Example changes:
|
| delete_transactionA | Delete a transaction. Confirm with the user before deleting. |
| import_transactionsA | Ask YNAB to import new transactions from the plan's linked bank accounts now, instead of waiting for its next scheduled import. Imported transactions arrive unapproved. Find them with list_transactions and status="unapproved". |
| list_scheduled_transactionsA | List scheduled transactions, soonest first, with filters that can be combined. Example queries this tool can answer:
|
| get_scheduled_transactionC | Get one scheduled transaction. |
| create_scheduled_transactionC | Schedule a transaction: a bill, a paycheck, or a regular transfer. |
| update_scheduled_transactionA | Change a scheduled transaction. Fields left out do not change. Use this when a bill's amount changes, it moves to another day or account, or it repeats on a new schedule. Split scheduled transactions cannot be changed through YNAB's API. |
| delete_scheduled_transactionA | Delete a scheduled transaction, so it stops happening. Transactions it already entered stay. Confirm with the user before deleting. |
| enter_scheduled_transactionA | Enter a scheduled transaction now, before its date, like YNAB's "Enter Now". Use this when a bill is paid early or a paycheck arrives early. This creates the transaction and moves the schedule to the occurrence after its next one. A schedule that happens only once is deleted. Split scheduled transactions, and those that repeat "twiceAMonth", cannot be entered this way; enter them in YNAB. Calling this twice enters two occurrences. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 32 tools
Tools are organized by resource and action, and near-neighbors are explicitly contrasted: assign_money vs set_assigned vs move_money, list_payees vs find_payee, and get_plan_month vs get_month_category. An agent can reliably distinguish the intended tool from names and descriptions.
Names consistently use snake_case with verb-first patterns such as get_, list_, create_, update_, delete_, and rename_. Pluralization is semantically consistent for batch-oriented transaction tools, and exceptions like set_assigned remain clear.
32 tools is a heavy surface for an MCP server and may strain tool selection, even though the YNAB domain is broad and most tools map to real operations. The set is cohesive and not duplicative, but it sits above the comfortable range.
Core workflows are well covered: transaction and scheduled-transaction lifecycles are complete, money movement is supported, and plan/category/account/payee reads and creates/updates exist. Gaps remain around account/category/payee deletion and some detail lookups, though these may reflect YNAB API limits.