YNAB MCP server
24 operations0 webhooks
Budgeting with YNAB - read budgets, accounts, categories, payees and months, assign money to categories, and create, update and delete transactions and scheduled transactions.
Try YNAB with your agent
Connect YNAB, then paste this into Claude, ChatGPT or Cursor. For ideas from other apps, see the use cases.
Using Corsair, show me what you can do in YNAB on my account, then run one read-only example and show me the result.
YNAB tools and triggers
Tools are what your agent can do in YNAB through Corsair's MCP server. Triggers are the YNAB events a routine can start from.
Transactions
- CreateWrite
Create up to 500 transactions in one call; a repeated import_id on the same account skips creation; use transactions.update for corrections
transactions.create
- DeleteDestructive
Delete a transaction, which answers the transaction as it was
transactions.delete
- GetRead-only
Read one transaction with its amount, splits and cleared state
transactions.get
- ListRead-only
List transactions, optionally since a date or only the uncategorized or unapproved ones. Without since_date, only the past year comes back.
transactions.list
- Scheduled CreateWrite
Create a scheduled transaction that repeats on a given frequency
transactions.scheduledCreate
- Scheduled DeleteDestructive
Delete a scheduled transaction
transactions.scheduledDelete
- Scheduled GetRead-only
Read one scheduled transaction
transactions.scheduledGet
- Scheduled ListRead-only
List scheduled transactions with their frequency and next date
transactions.scheduledList
- UpdateWrite
Change a transaction amount, date, payee, category, memo or cleared state
transactions.update
Payees
- CreateWrite
Create a payee
payees.create
- GetRead-only
Read one payee
payees.get
- ListRead-only
List the payees in a budget
payees.list
- UpdateWrite
Rename a payee
payees.update
Accounts
- CreateWrite
Create an account with a type and an opening balance, given in milliunits
accounts.create
- GetRead-only
Read one account with its balance and on-budget flag
accounts.get
- ListRead-only
List the accounts in a budget with their cleared and uncleared balances
accounts.list
Categories
- GetRead-only
Read one category with its budgeted and balance amounts
categories.get
- ListRead-only
List the category groups and categories with their budgeted, activity and balance amounts
categories.list
- UpdateWrite
Set the amount assigned to a category for a month; the value replaces rather than adds, in milliunits
categories.update
Budgets
- GetRead-only
Read a whole budget: every account, category, payee, month and transaction; `last-used` reaches the most recent
budgets.get
- ListRead-only
List the budgets the token can see, with their date ranges
budgets.list
Months
- GetRead-only
Read one month with its categories, income and how much is still unassigned
months.get
- ListRead-only
List the budget months with their income, budgeted and to-be-budgeted totals
months.list
User
- GetRead-only
Read the user behind the token, which is the cheapest way to check it
user.get
Connect YNAB to Claude, ChatGPT or Cursor
- 1
Connect YNAB in Corsair
Add your YNAB API key once in Corsair. Corsair stores the credential encrypted and makes the YNAB API calls for your agent, so it never goes into a prompt or a config file. Connect YNAB
If your link lets the agent add apps, you can skip this: it gives you a sign-in link the first time it needs YNAB. On a ChatGPT personal plan, connect YNAB here first.
- 2
Add Corsair's MCP server to your agent
Every client uses the same address:
https://mcp.corsair.dev/mcpOpen Customize → Connectors → Add custom connector, paste the address, then select Connect.Add a custom MCP server with the address and choose OAuth. Personal plans get read tools only.Add to CursorOr add this to~/.cursor/mcp.json. Cursor opens Corsair to sign in the first time it connects.{ "mcpServers": { "corsair": { "url": "https://mcp.corsair.dev/mcp" } } }Run this, then run/mcpin Claude Code to sign in.claude mcp add --transport http corsair https://mcp.corsair.dev/mcpCodex, Gemini CLI, VS Code, Zed and other clients with OAuth sign-in work the same way. Clients without it, such as GitHub Copilot's coding agent, use a link's own address and an API key. Setup for every client
- 3
Sign in and choose what needs your approval
Your client opens Corsair to sign in. Pick a link: the apps your agent can use and a mode that decides what it may do without asking. In the default Cautious mode, YNAB's read and write operations run right away and its 2 destructive operations wait for your approval. Strict mode asks before every write and refuses destructive operations, and Read mode allows reads only.
FAQ
Install corsair and @corsair-dev/ynab, add the YNAB plugin, and connect with an API key. Then call methods like corsair.ynab.api.accounts.create() from your app. Corsair keeps each tenant isolated.
Yes. YNAB requires an API key from your YNAB account or developer dashboard. Create credentials with access that matches what you automate, then paste them into Corsair or connect through managed auth in Hub.
Yes. One Corsair client can hit YNAB, GitHub, Notion, Stripe, and the rest. Trigger YNAB from a webhook, push updates to Slack, or chain actions across plugins. Same tenant context across integrations, plain TypeScript.
Teams use Corsair for budgeting with YNAB - read budgets, accounts, categories, payees and months, assign money to categories, and create, update and delete transactions and scheduled transactions. Common builds include sync jobs, admin tooling, and agents that call YNAB APIs from your backend.
The SDK is open source. Self-host and you pay Corsair nothing for the integration layer. Hub bills for hosted auth and execution, not per YNAB API call. Hub has a generous free tier. For hobby projects you can probably run the whole thing on free. Paid plans start to matter with more tenants or heavier traffic.
We maintain @corsair-dev/ynab in the open repo. When YNAB ships API changes, upgrade the package. Your call sites stay typed. You should not need to rewrite the integration layer each time.
No. Corsair does not read your YNAB data or hold individual access credentials. Credentials stay in your database. API calls run on your instance. We do not store YNAB data on your behalf.
Yes. Add https://mcp.corsair.dev/mcp as a custom connector or MCP server in Claude, ChatGPT, Cursor, VS Code, Claude Code, Codex or any client that supports remote MCP servers with OAuth sign-in, then sign in to Corsair. On ChatGPT personal plans, custom servers currently get read tools only.
Yes. Put YNAB on a link in Strict mode and every write waits for your approval, while destructive actions are refused. The default Cautious mode asks only before the 2 destructive YNAB operations. You can change a link's mode at hub.corsair.dev/me.