Connect your AI assistant to YNAB. Read-only by default, with reversible opt-in writes.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
We haven't yet run this listing's install command through our automated sandbox check. This isn't a red flag β we're steadily working through the catalog.
π‘ Paste the JSON block into your client's configuration file under mcpServers, then restart the application.
Ask your budget a question. Connect Claude, Codex, Cursor, or any MCP client to YNAB and get answers about your actual money β how the month is going, what is overspent, what your subscriptions really cost.

Read-only by default. The write tools are not registered at all unless you
set YNAB_ALLOW_WRITES=1, so they never appear to the assistant and nothing can
change your budget until you say so. When you do enable them, every write
records the state that preceded it and can be undone.
An MCP server that exposes the YNAB API as tools, then adds enriched tools answering questions the raw API cannot answer in one call β budget health, cleanup queues, spending analysis, recurring charges.
Generate a personal access token at app.ynab.com/settings/developer.
You also need uv, which provides uvx:
Check both work. Nothing to clone β uvx fetches the package and runs it in a
throwaway environment:
smoke validates configuration and tool registration, then exits. It should
print smoke: app created, 62 tools registered.
The two most common paths:
Claude Code β install the plugin, which brings its own MCP config:
Or register the server directly, if you would rather not use a plugin:
Claude Desktop, Cursor, Windsurf, and most others β paste into the client's MCP config file:
YNAB_PLAN_ID is optional but recommended β with it set, you never have to
name a budget in a request. Full per-client instructions, including where each
config file lives and how to keep the token out of it, are in
Client Setup.
Desktop hosts that accept bundles β download the .mcpb file from the
latest release
and open it. The host asks for your token in a form and stores it in your OS
keychain, so there is no config file to edit and no token sitting in plain text.
A checkbox controls whether writes are enabled.
A published image is available for linux/amd64 and linux/arm64. The server
speaks MCP over stdin and stdout, so run it attached with -i. There is no
port to publish:
Or build it yourself from a clone:
If you enable writes, mount a volume for the history β otherwise --rm discards
the record that makes a revert possible:
What's my cash position across all accounts?
If that works, you're set. If it doesn't, see
Troubleshooting β the usual cause is
that the client cannot find uvx on its PATH.
Read-only, works out of the box:
| Ask | Tool it reaches for |
|---|---|
| "How is this month's budget doing?" | overview_month_health |
| "What's my cash position across all accounts?" | overview_cash_position |
| "Which transactions still need a category?" | triage_uncategorized |
| "What's waiting for me to approve?" | triage_unapproved |
| "Which categories are overspent, and by how much?" | analysis_overspent_categories |
| "Which targets won't be funded this month?" | analysis_target_funding_gaps |
| "Are any scheduled transactions at risk?" | analysis_upcoming_scheduled_risks |
| "What have I spent at this payee over the last year?" | bookkeeping_transaction_history |
| "What subscriptions am I actually paying for?" | analysis_recurring_charges |
| "Does this account match the statement, and what's in the way?" | reconcile_preview |
| "Here's the bank CSV β what's missing on each side?" | transactions_match_statement |
| "Are there card holds sitting on my account that never posted?" | triage_pending_imports |
With YNAB_ALLOW_WRITES=1:
Categorize last week's uncategorized transactions, then show me what you changed.
The agent categorizes, and history_list shows every write with the value that
preceded it. history_revert undoes any of them.
Agents work best when they start with overview_available_tools, which returns
the current tool catalog grouped by family. See
Tool Surface for the full map.
Seven prompts ship with the server, and most clients surface them as slash commands β a starting point that does not require reading the tool list first: monthly review, weekly triage, categorize and approve, subscription audit, cash position, review-and-undo, and a multi-month budget audit.
Four resources (ynab://guide/*) carry the YNAB method, the write-safety
rules, guidance on which tool to reach for, and how credit accounts behave. They are fetched on demand, so
they cost nothing until a client asks for them.
| Variable | Required | Description |
|---|---|---|
YNAB_API_KEY | Yes | YNAB personal access token |
YNAB_PLAN_ID | Recommended | Default plan ID, making plan_id optional on most tools |
YNAB_ALLOW_WRITES | No | Register write tools. Unset means read-only |
YNAB_HISTORY_PATH | No | Write history file, default ~/.mcp-server-for-ynab/history.jsonl |
YNAB_RATE_LIMIT_PER_HOUR | No | Client-side request budget, default 190 of YNAB's 200 |
YNAB_RATE_WARN_THRESHOLD | No | Warn when this many requests remain, default 50 |
LOG_LEVEL | No | Logging verbosity, default INFO |
Set these in your MCP client's env block. For local development, copy
.env.example to .env and fill it in.
YNAB allows 200 requests per hour per token, and a single enriched tool can spend several. The server tracks its own usage in a rolling hour and stops just below YNAB's ceiling, so the limit you hit is local and clearly reported rather than a 429 in the middle of a workflow.
No reviews yet β be the first to share how this listing worked for you.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/mcp-server-for-ynab)<a href="https://allmcps.com/mcp/mcp-server-for-ynab"><img src="https://allmcps.com/api/badge/mcp-server-for-ynab?style=directory" alt="MCP Server for YNAB on AllMCPs" /></a>