YNAB

by klauern

1 Not rated yet
GitHub

About

Integrates with YNAB API to enable personal finance management, including viewing account balances, creating transactions, and accessing budget data for financial planning and analysis.

Details

Repository
klauern/mcp-ynab

Explore

Setting up with Highlight

This MCP is not yet compatible with Highlight’s one-click setup. However, you can still use it with Highlight by following these steps:

  1. Download and install Highlight from highlightai.com/download
  2. Navigate to the plugins tab and select "Add Custom Plugin"
  3. Configure the plugin with the settings below
    Plugin Name YNAB
    Command (node, npx, python, etc.) npx
    Arguments
    • Argument 1 -y
    • Argument 2 @highlight/mcp-server

    Please refer to the README for specific instructions on how to obtain API keys or other required environment variables.

  4. Enable "Start Automatically" if you want the plugin to start when Highlight launches

From the repository

The project is managed with uv and
Task. All Python commands in this repo go through
uv run.

uv sync                  # install dependencies
task install             # install the mcp-ynab CLI into the venv

search

Discover available YNAB operations without live API access.

execute

Run a short Python snippet against the live YNAB API.

ping

Health check the server.

get_preferences

Inspect server preferences.

set_preference

Update preferences such as mutation or escape-hatch settings.

set_api_key

Store a YNAB API key in the OS keychain.

clear_api_key

Remove the stored YNAB API key.

set_preferred_budget_id

Cache a preferred budget ID for default-targeted calls.

get_budgets

List all budgets in markdown.

get_accounts

List accounts in a budget, grouped by type with summary.

get_account_balance

Return a single account's current balance in dollars.

get_transactions

Recent transactions for an account; optional `since_date`.

get_transactions_needing_attention

Filter for uncategorized / unapproved transactions.

get_categories

All categories in a budget grouped by category group.

create_transaction

Create a new transaction in YNAB.

categorize_transaction

Assign a category to an existing transaction.

cache_categories

Cache a budget's category list locally.

return [t for t in spec if "transaction" in t["name"]]


Execute a query:
python

return await ynab.read.get_budgets()


To access all ~34 direct YNAB tools, set the escape-hatch preference:
text
set_preference: code_mode_replace_tools = false

By default, the public MCP tool surface is intentionally small:

| Tool | Purpose |
| ---- | ------- |
| search | Discover available YNAB operations without live API access |
| execute | Run a short Python snippet against the live YNAB API |
| ping | Health check the server |
| get_preferences | Inspect server preferences |
| set_preference | Update preferences such as mutation or escape-hatch settings |
| set_api_key | Store a YNAB API key in the OS keychain |
| clear_api_key | Remove the stored YNAB API key |
| set_preferred_budget_id | Cache a preferred budget ID for default-targeted calls |

Use search to discover operations:

python
return [
{"name": tool["name"], "description": tool["description"]}
for tool in spec
if "category" in tool["name"]
]

Then call the operation through execute:

python
categories = await ynab.read.get_categories()
return [
{"name": category.name, "balance": category.balance}
for group in categories
for category in group.categories[:LIMIT]
]

Mutating operations live under ynab.write. and require
code_mode_mutations_enabled=true:

python
result = await ynab.write.bulk_categorize(assignments=assignments)
return result
``

The underlying direct tools still exist in the internal FastMCP registry so
Code Mode can dispatch through
ynab.read.
, generate stubs, and build the
search catalog. They are hidden from the public tool list by default. Set
code_mode_replace_tools=false to restore the full direct-tool surface as an
escape hatch.

Representative internal direct tools include:

Read-only internal tools

| Tool | Purpose |
| ---- | ------- |
|
get_budgets | List all budgets in markdown |
|
get_accounts | List accounts in a budget, grouped by type with summary |
|
get_account_balance | Return a single account's current balance in dollars |
|
get_transactions | Recent transactions for an account; optional since_date |
|
get_transactions_needing_attention | Filter for uncategorized / unapproved transactions |
|
get_categories | All categories in a budget grouped by category group |

Mutating internal tools

| Tool | Purpose |
| ---- | ------- |
|
create_transaction | Create a new transaction in YNAB |
|
categorize_transaction | Assign a category to an existing transaction |
|
set_preferred_budget_id | Cache a preferred budget ID for default-targeted tools |
|
cache_categories | Cache a budget's category list locally |

For account transfers and credit-card payments, use the destination account's
transfer payee ID as
payee_id when creating or updating a transaction. The
get_payees tool lists transfer payees with their Transfer Account ID.
Do not pass a
Transfer : ... value as payee_name; YNAB rejects or treats
that as a regular payee instead of creating a linked transfer.

Resources

- ynab://preferences/budget_id — currently preferred budget ID
-
ynab://categories/{budget_id} — cached categories for a budget
-
ynab://code-mode/stubs — generated Python stubs for Code Mode
-
ynab://code-mode/examples` — curated Code Mode snippets

Claude Desktop / Cursor

Paste into your MCP client config file to install this server.

{
    "mcpServers": {
        "ynab": {
            "env": {},
            "args": [
                "-y",
                "@highlight/mcp-server"
            ],
            "command": "npx"
        }
    }
}

Linux

{
    "env": [],
    "args": [
        "-y",
        "@highlight/mcp-server"
    ],
    "command": "npx"
}

Macos

{
    "env": [],
    "args": [
        "-y",
        "@highlight/mcp-server"
    ],
    "command": "npx"
}

Windows

{
    "env": [],
    "args": [
        "/c",
        "npx",
        "-y",
        "@highlight/mcp-server"
    ],
    "command": "cmd"
}

mcp-ynab

A Model Context Protocol server for the
YNAB (You Need A Budget) API. Lets MCP clients (Claude
Desktop, Claude Code, custom agents) read your budgets, accounts, and
transactions, and create or recategorize transactions through structured tools.

Install

The project is managed with uv and
Task. All Python commands in this repo go through
uv run.

uv sync                  # install dependencies
task install             # install the mcp-ynab CLI into the venv

Configure

Set your YNAB Personal Access Token in the environment (or in a .env file at
the repo root):

export YNAB_API_KEY=your-personal-access-token

Get a token at <https://app.ynab.com/settings/developer>.

Quickstart

1. Set your API key

Code Mode is the default surface — it requires your YNAB API key:
export YNAB_API_KEY="your-key-here"
Or store it in your OS keychain (the server reads it automatically).

2. Use Code Mode

By default the server exposes two tools: search (discover available operations) and execute (run a snippet against the live YNAB API).

Discover tools:
```python

No reviews yet — be the first

Sign in to leave a review

Use Google, GitHub, or an email account so ratings stay tied to real people.

Email sign in

No reviews posted yet.