
Security News
upm Launches as a Fast, Tiny Package Manager Written in TypeScript
upm uses Node.js to deliver fast npm installs in about 250 KB, with a JavaScript API and security defaults.
A comprehensive Model Context Protocol (MCP) server for YNAB (You Need A Budget) that enables AI assistants like Claude Desktop to read your budget, analyze spending patterns, detect subscriptions, and provide personalized financial insights—all through natural conversation.
Traditional YNAB integrations require manual API calls or custom scripting. This MCP server lets you:
| Feature | Description |
|---|---|
| Broad API Coverage | 66 MCP tools spanning the YNAB API endpoints |
| Advanced Analytics | 23 tools for spending analysis, trend detection, and financial insights |
| Read-Only by Default | Write operations require explicit opt-in (YNAB_READ_ONLY=false) |
| Smart Rate Limiting | Token bucket algorithm with 180 req/hour budget (10% safety margin) |
| Intelligent Caching | Reduces API calls for infrequently changing data |
| Type-Safe | Full TypeScript implementation with Zod schema validation |
No installation required—run directly:
npx ynab-mcp
docker run -e YNAB_ACCESS_TOKEN=your_token ghcr.io/auzroz/ynab-mcp:latest
# Clone the repository
git clone https://github.com/auzroz/ynab-mcp.git
cd ynab-mcp
# Install dependencies and build
npm install
npm run build
# Run the server
npm start
The server is configured via environment variables:
| Variable | Required | Description |
|---|---|---|
YNAB_ACCESS_TOKEN | Yes | Your YNAB Personal Access Token |
YNAB_BUDGET_ID | No | Default budget UUID (uses "last-used" if not set) |
YNAB_READ_ONLY | No | Set to false to enable write operations (default: true) |
By default the server speaks stdio (local). Set MCP_TRANSPORT=http to run it
as a remote server over the MCP Streamable HTTP transport at POST /mcp, with a
plain GET /health for load balancers. Each session gets an isolated
client/cache/rate-limiter/audit-log.
| Variable | Description |
|---|---|
MCP_TRANSPORT | stdio (default) or http |
PORT | HTTP port (default 3000) |
ALLOWED_HOSTS / ALLOWED_ORIGINS | Comma-separated allowlists for DNS-rebinding protection |
ENABLE_DNS_REBINDING_PROTECTION | Enable Origin/Host checks (needs an allowlist) |
Multi-user (YNAB OAuth). Configure a YNAB OAuth app + ENCRYPTION_KEY +
PUBLIC_URL and the server becomes an OAuth 2.1 Authorization Server federated to
YNAB: many users connect their own YNAB accounts to one instance, each isolated,
choosing read-only or read-write at consent. See
docs/REMOTE_HOSTING.md for the full deployer guide
(registering the YNAB app, storage, TLS).
Single-user (header auth). If the OAuth variables aren't all set, HTTP mode takes the YNAB token per request via the
X-YNAB-Tokenheader (falling back toYNAB_ACCESS_TOKENfor one user). Serve behind TLS.
MCP_TRANSPORT=http PORT=3000 YNAB_ACCESS_TOKEN=… npm start
# connect an MCP client via the mcp-remote shim:
npx mcp-remote http://localhost:3000/mcp --header "X-YNAB-Token: <your-token>"
Add to your Claude Desktop configuration:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"ynab": {
"command": "npx",
"args": ["ynab-mcp"],
"env": {
"YNAB_ACCESS_TOKEN": "your_token_here"
}
}
}
}
{
"mcpServers": {
"ynab": {
"command": "docker",
"args": [
"run", "-i", "--rm",
"-e", "YNAB_ACCESS_TOKEN",
"ghcr.io/auzroz/ynab-mcp:latest"
],
"env": {
"YNAB_ACCESS_TOKEN": "your_token_here"
}
}
}
}
{
"mcpServers": {
"ynab": {
"command": "node",
"args": ["/path/to/ynab-mcp/dist/index.js"],
"env": {
"YNAB_ACCESS_TOKEN": "your_token_here"
}
}
}
}
Once connected, try asking Claude:
| Question | Tool Used |
|---|---|
| "What's my current net worth?" | ynab_net_worth |
| "How much did I spend on dining out this month?" | ynab_list_category_transactions |
| "What subscriptions do I have?" | ynab_detect_recurring |
| "Is my budget in good shape?" | ynab_budget_health |
| "Where can I cut back on spending?" | ynab_savings_opportunities |
| "Am I on track this month?" | ynab_spending_pace |
| "Compare this month to last month" | ynab_monthly_comparison |
These tools provide AI-powered financial insights beyond basic YNAB functionality:
| Tool | Description |
|---|---|
ynab_detect_recurring | Find subscription patterns and recurring payments |
ynab_spending_analysis | Analyze spending trends by category |
ynab_budget_health | Assess overall budget health with score and alerts |
ynab_savings_opportunities | Identify potential areas to save money |
ynab_budget_vs_actuals | Compare budgeted vs actual spending |
ynab_quick_summary | At-a-glance budget status overview |
ynab_income_expense | Income vs expense breakdown and trends |
ynab_net_worth | Calculate total net worth from all accounts |
ynab_goal_progress | Track goal funding progress with projections |
ynab_spending_by_payee | Analyze spending by merchant/payee |
ynab_unused_categories | Find inactive or unused categories |
ynab_monthly_comparison | Month-over-month spending comparison |
ynab_spending_trends | Multi-month trend analysis with projections |
ynab_cash_flow_forecast | Project future cash flow based on scheduled transactions |
ynab_reconciliation_helper | Help with account reconciliation |
ynab_budget_suggestions | Get budget suggestions based on history |
ynab_overspending_alerts | Quick check for overspent categories |
ynab_transaction_search | Powerful multi-filter transaction search |
ynab_spending_pace | Track daily spending rate vs target |
ynab_category_balances | Quick category balance lookup |
ynab_credit_card_status | Credit card balances vs payment categories |
ynab_age_of_money | Age of money metric with explanation |
ynab_preview_scheduled_transaction | Preview the budget impact of a scheduled transaction |
Coverage of the YNAB API endpoints:
ynab_get_user — Get authenticated user informationynab_list_budgets — List all accessible budgetsynab_get_budget — Get detailed budget informationynab_get_budget_settings — Get budget settings (currency format, etc.)ynab_list_accounts — List all accounts with balancesynab_get_account — Get specific account detailsynab_create_account — Create a new account (write mode)ynab_list_categories — List all category groups and categoriesynab_get_category — Get category detailsynab_get_month_category — Get category budget for specific monthynab_update_category — Update category budgeted amount (write mode)ynab_create_category — Create a new category in a group (write mode)ynab_create_category_group — Create a new category group (write mode)ynab_update_category_group — Rename a category group (write mode)ynab_list_payees — List all payees (merchants/vendors)ynab_get_payee — Get specific payee detailsynab_create_payee — Create a new payee (write mode)ynab_update_payee — Rename a payee (write mode)ynab_list_payee_locations — List all payee locations for mappingynab_get_payee_location — Get specific payee locationynab_list_payee_locations_by_payee — List locations for a specific payeeynab_list_months — List all budget monthsynab_get_month — Get detailed month summary with categoriesynab_list_transactions — List transactions with filtersynab_get_transaction — Get transaction detailsynab_create_transaction — Create a new transaction (write mode)ynab_create_transactions — Bulk create transactions (write mode)ynab_update_transaction — Update a transaction (write mode)ynab_update_transactions — Bulk update transactions (write mode)ynab_delete_transaction — Delete a transaction (write mode)ynab_list_account_transactions — List transactions for a specific accountynab_list_category_transactions — List transactions for a specific categoryynab_list_payee_transactions — List transactions for a specific payeeynab_import_transactions — Trigger import from linked banks (write mode)ynab_list_scheduled_transactions — List scheduled/recurring transactionsynab_get_scheduled_transaction — Get scheduled transaction detailsynab_create_scheduled_transaction — Create a scheduled transaction (write mode)ynab_update_scheduled_transaction — Update a scheduled transaction (write mode)ynab_delete_scheduled_transaction — Delete a scheduled transaction (write mode)ynab_list_money_movements — List moves of funds between categoriesynab_rate_limit_status — Check API rate limit statusynab_audit_log — View write operation audit logynab_health_check — Test API connectivityBeyond raw tool access, the server exposes 7 MCP Prompts — guided workflows
grounded in YNAB's own budgeting methodology (the Four Rules, Age of Money,
True Expenses) that orchestrate several tools into a single review. Any MCP
client that supports the prompts capability can invoke them directly.
| Prompt | What it does |
|---|---|
ynab-pulse-check | Fast daily-style status check |
ynab-monthly-review | Full end-of-month budget review and next month's suggested targets |
ynab-assign-money | Give Every Dollar a Job — allocate unassigned funds |
ynab-true-expenses | Embrace Your True Expenses — plan for irregular/annual costs |
ynab-overspending-triage | Roll With the Punches — find and fix overspending |
ynab-age-of-money | Age Your Money — check cash cushion and credit card float |
ynab-reconcile-cleanup | Weekly hygiene: reconciliation and category cleanup |
See docs/REMOTE_HOSTING.md for details.
Our MCP server gives Claude access to your YNAB budget. Our skills teach Claude YNAB's own best practices — some work standalone, some get sharper when connected. Together, they turn raw budget data into an actual coach.
The skills/ directory has 15 Claude Agent Skills:
7 that orchestrate this MCP server's tools into guided reviews, and 8
standalone coaching skills (getting started, debt payoff, irregular income,
windfalls, emergency funds, and more) that work with or without this server
connected. Every GitHub Release
attaches them as downloadable zips — see skills/README.md
for the full list and install instructions.
# Run with hot reload
npm run dev
# Run tests
npm test
# Run tests in watch mode
npm run test:watch
# Lint code
npm run lint
# Fix lint issues
npm run lint:fix
# Type check only
npm run typecheck
npx @modelcontextprotocol/inspector node dist/index.js
src/
├── index.ts # Entry point (selects stdio or http transport)
├── server.ts # Per-user server + tool registration
├── http.ts # Express app for remote (Streamable HTTP) mode
├── crypto.ts # AES-256-GCM at-rest token encryption
├── config/ # Environment configuration
├── auth/ # Remote OAuth: MCP AS provider, YNAB client, sessions
├── storage/ # Pluggable storage (memory / sqlite / postgres)
├── services/ # Core services
│ ├── ynab-client.ts # YNAB API wrapper with rate limiting
│ ├── rate-limiter.ts # Token bucket rate limiter
│ ├── audit-log.ts # Per-user write audit log
│ └── cache.ts # In-memory TTL cache
├── tools/ # MCP tool implementations
│ ├── user/
│ ├── budgets/
│ ├── accounts/
│ ├── categories/
│ ├── payees/
│ ├── months/
│ ├── transactions/
│ ├── scheduled-transactions/
│ └── analytics/
└── utils/ # Helpers (currency, dates, errors)
| Feature | Description |
|---|---|
| Read-Only Default | Write operations disabled unless YNAB_READ_ONLY=false |
| Token Security | Never commit your YNAB_ACCESS_TOKEN; use environment variables |
| Input Validation | All tool parameters validated with Zod schemas |
| Rate Limiting | Built-in protection against API quota exhaustion |
| Audit Logging | All write operations logged for review |
git checkout -b feature/amazing-feature)npm test && npm run lintgit commit -m 'Add amazing feature')git push origin feature/amazing-feature)This project is licensed under the MIT License - see the LICENSE file for details.
Built with ❤️ for the YNAB community
FAQs
MCP server providing comprehensive YNAB API coverage for Claude integration
We found that ynab-mcp demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.

Security News
upm uses Node.js to deliver fast npm installs in about 250 KB, with a JavaScript API and security defaults.

Company News
Socket is joining the OpenJS Security Stewardship Program to fund Node.js vulnerability research, maintainer remediation, and security releases.

Security News
Two compromised GitHub Actions were re-enabled with malicious tags intact, exposing thousands of downstream repositories to Mini Shai-Hulud.