Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Description from the maker (original English)
Connect your AI assistant to YNAB. Read-only by default, with reversible opt-in writes.
These three are never merged into one score: opinions, measurements and popularity are different things.
We have not written a plain-language summary for this one yet. Below are the facts we read from the registry.
Pick the AI app you use, then copy the settings.
YNAB_API_KEY, YNAB_PLAN_ID, YNAB_ALLOW_WRITESValues marked secret are keys to your account. Never share them or paste them into a chat.
You need
Which app do you use?
Pick your app above. We remember it, so next time the button says “Install in …”.
Open Claude Desktop → Settings → Developer → Edit Config, and paste this into claude_desktop_config.json
{
"mcpServers": {
"for-ynab": {
"command": "uvx",
"args": [
"mcp-server-for-ynab"
],
"env": {
"YNAB_API_KEY": "your-value",
"YNAB_PLAN_ID": "your-value",
"YNAB_ALLOW_WRITES": "your-value"
}
}
}
}Run this in your terminal
claude mcp add for-ynab --env YNAB_API_KEY=your-value --env YNAB_PLAN_ID=your-value --env YNAB_ALLOW_WRITES=your-value -- uvx mcp-server-for-ynabFill in the empty values before running it.
Paste into .cursor/mcp.json in your project, or ~/.cursor/mcp.json
{
"mcpServers": {
"for-ynab": {
"command": "uvx",
"args": [
"mcp-server-for-ynab"
],
"env": {
"YNAB_API_KEY": "your-value",
"YNAB_PLAN_ID": "your-value",
"YNAB_ALLOW_WRITES": "your-value"
}
}
}
}Your browser asks to open the app, then the app shows the settings and asks you to confirm. Key values are left empty for you to fill in.
Paste into .vscode/mcp.json in your project
{
"servers": {
"for-ynab": {
"type": "stdio",
"command": "uvx",
"args": [
"mcp-server-for-ynab"
],
"env": {
"YNAB_API_KEY": "your-value",
"YNAB_PLAN_ID": "your-value",
"YNAB_ALLOW_WRITES": "your-value"
}
}
}
}Your browser asks to open the app, then the app shows the settings and asks you to confirm. Key values are left empty for you to fill in.
This one runs on your computer, and ChatGPT can only connect to servers on the internet. Pick another app.
Your choice stays on this device in a cookie; no account needed.
YNAB_PLAN_ID envYNAB_ALLOW_WRITES envThese settings are generated from the maker’s registry entry. If the README says otherwise, follow the README.
Runs on your computer; the tool list appears in your AI app after you install it.
We check information anyone can see; we have not read the code. Checks that do not apply are left out of the count. · Checked Nov 7, 2026
The registry name was verified with the GitHub account hs737, which owns the repo
We have not read this repo from GitHub yet
We have not read this repo from GitHub yet
This one runs on your computer; there is no internet endpoint
Runs on your computer and uses local settings instead
Runs on your computer; we can only read tool lists from internet endpoints
Compared with every active server in this category in the registry. Stars count only when the publisher owns the repo.
It passed 1 of 1 applicable basic checks. We have not read the code. Before adding a key or token, see what access the server asks for and use a key with only the permissions you need.
You need to fill in: YNAB_API_KEY
It runs on your computer. Your AI app starts it when needed, and data does not pass through the maker’s servers (unless it calls an online service itself).
The GitHub repo last changed –, and the latest version (0.4.0) reached the registry 2 months ago.
Apps that support MCP, such as Claude Desktop, Claude Code, Cursor and VS Code. You also need Python (uv) on your computer.
In the same category: Spec Driven Development, Remote Desktop Commander, Signoff
Servers in the same category from other makers, sorted by stars.
Reading a card:★ GitHub starsiThree pillars: reviews · checks · usageiUpdated = latest version published to the registryi
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
Five gates that make an agent's 'done' provable: run them, read the verdict, audit the record.
Copied from the maker’s repo as written. PopNx MCP has not reviewed or endorsed it. HTML, images and scripts are removed. Links lead off this site.
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.
YNAB_API_KEY=your_token uvx mcp-server-for-ynab smoke
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:
curl -LsSf https://astral.sh/uv/install.sh | sh # macOS and Linux
brew install uv # macOS with Homebrew winget install --id=astral-sh.uv -e # Windows
Check both work. Nothing to clone — uvx fetches the package and runs it in a throwaway environment:
YNAB_API_KEY=your_token uvx mcp-server-for-ynab smoke
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:
/plugin marketplace add hs737/mcp-server-for-ynab
/plugin install mcp-server-for-ynab@mcp-server-for-ynab
Or register the server directly, if you would rather not use a plugin:
claude mcp add --env YNAB_API_KEY=your_ynab_token --transport stdio --scope user \
ynab -- uvx mcp-server-for-ynab stdio
Claude Desktop, Cursor, Windsurf, and most others — paste into the client's MCP config file:
{
"mcpServers": { "ynab": { "command": "uvx", "args": ["mcp-server-for-ynab", "stdio"], "env": { "YNAB_API_KEY": "your_ynab_token", "YNAB_PLAN_ID": "your_plan_id" } } } }
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:
docker run -i --rm -e YNAB_API_KEY=your_ynab_token \
ghcr.io/hs737/mcp-server-for-ynab
Or build it yourself from a clone:
docker build -t mcp-server-for-ynab .
docker run -i --rm -e YNAB_API_KEY=your_ynab_token mcp-server-for-ynab
If you enable writes, mount a volume for the history — otherwise --rm discards the record that makes a revert possible:
docker run -i --rm -e YNAB_API_KEY=your_ynab_token -e YNAB_ALLOW_WRITES=1 \
-v ynab-mcp-history:/home/app/.mcp-server-for-ynab mcp-server-for-ynab
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.
Every tool response carries requests_used_this_hour and requests_remaining, the way an HTTP API returns X-RateLimit-Remaining — an agent paces itself against a number it can already see, where asking for it costs a call it will not make. overview_request_budget adds the limit, the window, and when an exhausted budget reopens; ping answers whether the server is up at all. Both cost nothing.
The quota belongs to the access token, so your own YNAB apps spend from it too. The count here is what this server used, which can be less than what YNAB has left — every rate-limit error says so, and carries the reopening time as an absolute timestamp as well as a delay, so a scheduled retry does not come back early.
62 read-only tools, 84 with writes enabled, plus 7 guided prompts and 4 reference resources.
| Family | Type | Purpose |
|---|---|---|
overview | enriched | Budget health snapshots and orientation |
triage | enriched | Transaction cleanup queues |
bookkeeping | enriched | Categorization suggestions, memo help, history |
analysis | enriched | Overspending, funding gaps, scheduled risks, card funding, multi-month audits |
reconcile | enriched | Statement comparison, bank-export matching, and finishing a reconciliation |
history | enriched | Review and roll back writes this server made |
changes | enriched | What moved since a given server_knowledge value |
user | raw | YNAB user info |
plans | raw | Plan and settings reads |
accounts | raw | Account reads and creation |
categories | raw | Categories and category groups |
months | raw | Month-level budget data, multi-month ranges, batch assignment |
payees | raw | Payee management |
payee_locations | raw | Geographic payee metadata, niche/low-priority |
transactions | raw | Transaction CRUD and import trigger |
scheduled_transactions | raw | Scheduled transaction management |
money_movements | raw | Money movement data, and moving money between categories |
Raw tools are close mirrors of YNAB endpoints — use them for exact reads and most writes. Enriched tools combine several reads into one answer — use th
Only the beginning is shown; read the rest in the repo