YNAB MCP Server
# YNAB MCP Server
Talk to your finances.
## What is this?
[YNAB (You Need A Budget)](https://ynab.com) is a popular budgeting app that helps you gain control of your money. This MCP server connects AI assistants to your YNAB data, giving you conversational access to:
- Your budgets and accounts
- Transaction history and patterns
- Category balances and spending insights
- Scheduled and recurring transactions
- Creating and managing transactions
- Updating category budgets
- Creating accounts
## Installation
### Via npx (recommended)
No installation required. Configure your Claude client to use npx directly (see below).
### Via npm (global)
```bash
npm install -g ynab-mcp-server
```
### From source
```bash
git clone https://github.com/jeangnc/ynab-mcp-server.git
cd ynab-mcp-server
make install
make build
```
## Configuration
First, set your YNAB API token in your shell profile (`~/.zshrc` or `~/.bashrc`):
```bash
export YNAB_API_TOKEN="your-token-here"
```
### Claude Code
```bash
claude mcp add ynab --scope user --env YNAB_API_TOKEN='${YNAB_API_TOKEN}' -- npx -y ynab-mcp-server
```
### Claude Desktop
Add to `~/.config/claude/claude_desktop_config.json` (Linux) or `~/Library/Application Support/Claude/claude_desktop_config.json` (macOS):
```json
{
"mcpServers": {
"ynab": {
"command": "npx",
"args": ["-y", "ynab-mcp-server"],
"env": {
"YNAB_API_TOKEN": "${YNAB_API_TOKEN}"
}
}
}
}
```
### Manual usage
```bash
YNAB_API_TOKEN=$YNAB_API_TOKEN npx ynab-mcp-server
```
## Available Tools
### Read Tools
| Tool | Description |
|------|-------------|
| `list_budgets` | Get all budgets for the authenticated user. Returns budget names, IDs, and last modified dates. |
| `get_budget` | Get detailed information about a specific budget including accounts, categories, and settings. |
| `list_accounts` | Get all accounts for a budget. Returns account names, types, balances, and status. |
| `get_account` | Get detailed information about a specific account. |
| `list_categories` | Get all categories for a budget, grouped by category group. Includes budgeted amounts and activity. |
| `get_category` | Get detailed information about a specific category including current month data. |
| `list_transactions` | Get transactions for a budget. Supports filtering by date, type, category, payee, and account. |
| `get_transaction` | Get detailed information about a specific transaction. |
| `list_payees` | Get all payees for a budget. |
| `list_scheduled_transactions` | Get all scheduled/recurring transactions for a budget. |
| `list_months` | Get all budget months. Returns month summaries with income, budgeted, and activity totals. |
| `get_month` | Get detailed budget information for a specific month including all category balances. |
### Write Tools
| Tool | Description |
|------|-------------|
| `create_transaction` | Create a new transaction. Amount should be negative for expenses and positive for income. |
| `update_transaction` | Update an existing transaction. Only provide the fields you want to change. |
| `delete_transaction` | Delete an existing transaction. |
| `update_category_budget` | Update the budgeted amount for a category in a specific month. |
| `create_account` | Create a new account in the budget. |
| `get_scheduled_transaction` | Get detailed information about a specific scheduled transaction. |
| `create_scheduled_transaction` | Create a new scheduled/recurring transaction. Date must be in the future (max 5 years). |
| `update_scheduled_transaction` | Update an existing scheduled transaction. Only provide fields you want to change. |
| `delete_scheduled_transaction` | Delete an existing scheduled transaction. |
| `update_payee` | Update a payee's name. The name must be a maximum of 500 characters. |
### History Tools
| Tool | Description |
|------|-------------|
| `list_history` | List recent write operations with their IDs for undo. Operations are listed in reverse chronological order (newest first). |
| `get_history_entry` | Get detailed information about a specific history entry including before/after state. |
| `undo_operation` | Revert a previous write operation by its history entry ID. |
## History & Undo
The server tracks all write operations (transactions, scheduled transactions, category budgets, payees, and accounts) and allows you to undo them.
### How it works
- All write operations are automatically recorded to `~/.ynab-mcp-history.json`
- History persists across server restarts
- Up to 100 operations are retained (oldest are automatically removed)
- Use `list_history` to see recent operations and their IDs
- Use `undo_operation` with an entry ID to revert a change
### Supported undo operations
| Operation | Undo Action |
|-----------|-------------|
| Create transaction | Deletes the created transaction |
| Update transaction | Restores to previous state |
| Delete transaction | Recreates the transaction (new ID) |
| Create scheduled transaction | Deletes the created scheduled transaction |
| Update scheduled transaction | Restores to previous state |
| Delete scheduled transaction | Recreates the scheduled transaction (new ID) |
| Update category budget | Restores previous budgeted amount |
| Update payee | Restores previous name |
| Create account | **Cannot be undone** (YNAB API limitation) |
### Limitations
- **Account creation cannot be undone**: The YNAB API does not support deleting accounts
- **Recreated transactions get new IDs**: When undoing a delete, the transaction is recreated with a new ID
- **External changes**: If data is modified outside the MCP server, undo may fail or produce unexpected results
- **Old history entries**: Very old entries may reference entities that no longer exist
## Makefile Commands
```
make install # Install dependencies
make build # Compile TypeScript
make run # Run compiled server
make dev # Run TypeScript directly
make clean # Remove build artifacts
```
TDQS
Scored across 12 tools
Each tool has a clearly distinct purpose targeting specific resources (e.g., accounts, budgets, categories, months, transactions, payees, scheduled transactions) with no overlap in functionality. The 'get_' tools retrieve detailed information for single items, while 'list_' tools return collections, making them easily distinguishable.
All tool names follow a consistent verb_noun pattern with 'get_' for retrieving single items and 'list_' for retrieving collections, using snake_case throughout. This predictable naming scheme enhances readability and usability for agents.
With 12 tools, the server is well-scoped for a budgeting application, covering key entities like budgets, accounts, categories, months, transactions, and payees. Each tool serves a clear purpose without redundancy, making the count appropriate for the domain.
The tool set provides comprehensive read operations (get and list) for all major resources in YNAB, supporting core budgeting workflows. However, it lacks write operations (e.g., create, update, delete) for transactions, categories, or budgets, which could limit agent functionality for full lifecycle management.