dgalarza/ynab-mcp-dgalarza
If you are the rightful owner of ynab-mcp-dgalarza and would like to certify it and/or have it hosted online, please leave a comment on the right or send an email to dayong@mcphub.com.
MCP server for YNAB (You Need A Budget) integration, enabling AI assistants to help manage your budget.
YNAB MCP Server
MCP server for YNAB (You Need A Budget) integration, enabling AI assistants to help manage your budget.
Setup
- Install dependencies with
uv:
uv sync
-
Get your YNAB Personal Access Token:
- Go to https://app.ynab.com/settings/developer
- Create a new Personal Access Token
- Copy the token
-
Create
.envfile:
cp .env.example .env
- Add your token to
.env:
YNAB_ACCESS_TOKEN=your_token_here
Running the Server
uv run python -m ynab_mcp
Installing in Claude Code
Add to your Claude Code configuration:
claude mcp add ynab -- uv --directory /path/to/ynab-mcp run python -m ynab_mcp
Or add to .claude.json manually in the mcpServers section:
{
"ynab": {
"type": "stdio",
"command": "uv",
"args": ["--directory", "/home/your-user/Code/ynab-mcp", "run", "python", "-m", "ynab_mcp"],
"env": {}
}
}
Available Tools
Health & Diagnostics
health_check- Check server health and YNAB API connectivity
Account Management
get_accounts- Get all accounts for a budget
Category & Budget Management
get_category- Get a single category with full details including goal informationget_categories- Get all categories for a budget (lightweight list)get_budget_summary- Get budget summary for a specific monthupdate_category- Update category properties (name, note, group, or goal target)update_category_budget- Update the budgeted amount for a category in a specific monthmove_category_funds- Move funds from one category to another
Transaction Management
get_transaction- Get a single transaction with full details including subtransactionsget_transactions- Get transactions with pagination and filtering (date range, account, category, limit, page)search_transactions- Search transactions by text in payee name or memocreate_transaction- Create a new transactionupdate_transaction- Update an existing transaction (⚠️ cannot add/modify splits on existing transactions)get_unapproved_transactions- Get all unapproved transactions that need review
Split Transaction Management
create_split_transaction- Create a new transaction split across multiple categoriesprepare_split_for_matching- Split an existing imported transaction by creating a matching split for manual reconciliation in YNAB UI
Scheduled Transactions
get_scheduled_transactions- List all scheduled transactionscreate_scheduled_transaction- Create future/recurring transactionsdelete_scheduled_transaction- Delete scheduled transactions
Analytics & Reporting
get_category_spending_summary- Get spending summary with optional terminal graph visualizationcompare_spending_by_year- Year-over-year spending comparison with optional graph
Features
Robust Error Handling
- Custom exception classes for different error types
- Automatic retry logic with exponential backoff
- Rate limit detection and handling (respects Retry-After headers)
- Comprehensive logging (configurable via
LOG_LEVELenvironment variable)
Performance & Reliability
- HTTP connection pooling for better performance
- Input validation on all parameters
- Timeout configuration (30s default)
- Milliunits conversion handled automatically
Split Transaction Support
Split transactions allow you to allocate a single transaction across multiple categories (e.g., splitting a grocery store purchase into "Groceries" and "Household Items").
Creating New Split Transactions:
create_split_transaction(
budget_id="last-used",
account_id="account-id",
date="2025-10-06",
amount=-80.00,
subtransactions='[{"amount": -50.00, "category_id": "groceries-id", "memo": "Food"}, {"amount": -30.00, "category_id": "household-id", "memo": "Supplies"}]'
)
Splitting Existing Imported Transactions:
Due to YNAB API limitations, you cannot directly modify an existing transaction to add splits. Instead, use prepare_split_for_matching:
- Call
prepare_split_for_matchingwith the existing transaction ID and desired splits - The tool fetches the original transaction details and creates a new unapproved split transaction
- Go to YNAB (web or mobile) and manually match the two transactions
- YNAB merges them into one split transaction, preserving the bank import connection
Important Limitations:
- Cannot add or update subtransactions on existing transactions via the API
- Cannot convert a regular transaction into a split transaction directly
- Once created, subtransactions cannot be modified via the API
- Split transaction dates and amounts cannot be changed after creation
Analytics & Visualization
- Server-side spending aggregation to reduce context usage
- Optional terminal-based graph visualization using termgraph
- Year-over-year spending comparisons
- Monthly spending summaries
Configuration
Environment Variables
YNAB_ACCESS_TOKEN(required) - Your YNAB Personal Access TokenLOG_LEVEL(optional) - Logging level (DEBUG, INFO, WARNING, ERROR, default: INFO)
Troubleshooting
MCP Server Not Connecting
- Run the health check tool:
health_check - Check that
YNAB_ACCESS_TOKENis set in your.envfile - Verify the token is valid at https://app.ynab.com/settings/developer
- Check logs with
LOG_LEVEL=DEBUG
Rate Limit Errors
The YNAB API has a rate limit of 200 requests per hour. The server automatically:
- Detects 429 (rate limit) responses
- Retries with exponential backoff
- Respects
Retry-Afterheaders
If you consistently hit rate limits, consider:
- Using analytics tools (
get_category_spending_summary,compare_spending_by_year) instead of fetching all transactions - Reducing the frequency of requests
- Caching results when possible
Large Response Sizes
For queries spanning long time periods, use:
get_category_spending_summary- Returns aggregated summary instead of all transactionscompare_spending_by_year- Returns year-over-year totals instead of individual transactions- Pagination with
get_transactions(uselimitandpageparameters)
Development
Running Tests
Install dev dependencies:
uv sync --extra dev
Run tests:
uv run pytest tests/ -v
Code Quality
The codebase includes:
- Input validation on all parameters
- Custom exception classes for proper error handling
- Comprehensive logging
- Type hints with
from __future__ import annotations - Connection pooling for HTTP requests
- Automatic retry logic for transient failures