Ynab Mcpb

io.github.dizzlkheinzPublished by GitHub account dizzlkheinzv0.33.0Updated Nov 8, 2026

Local-first YNAB MCP for reconciliation, receipt splitting, safe cleanup, and spending analysis

Overview

AI-generated overview

Local MCP server that connects an AI assistant to a YNAB budget for reconciliation, receipt splitting, transaction management and spending analysis.

What you can do
  • List and inspect budgets, accounts, categories, payees and months, and set a default budget.
  • Read, create, update, delete and export transactions, including itemized receipt splits with tax allocation.
  • Reconcile an account against an imported bank CSV, fuzzy-matching payees and dates and applying bulk fixes.
  • Review scheduled transactions and run spending analytics or period comparisons.
  • Return read results as markdown tables or structured JSON, with optional delta sync and caching.
When to use it
Use it when you keep a budget in YNAB and want to manage it conversationally: splitting receipts, reconciling a checking account from a CSV, asking what you spent in a category, or creating transactions from plain-English requests.
Requirements
Runs locally via npx, so Node.js 24 or newer is needed, plus a YNAB personal access token supplied in the YNAB_ACCESS_TOKEN environment variable. Optional settings control the tool profile (YNAB_MCP_TOOL_PROFILE), write policy (YNAB_MCP_WRITE_MODE), delta sync and cache. Network access to the YNAB API is required.
Before you install
The YNAB_ACCESS_TOKEN is sensitive and should be kept in the client's secret configuration, never pasted into conversations or logs. Write tools can create, update and delete transactions and scheduled transactions; the default preview mode requires a short-lived single-use confirmation, and enabled mode writes directly. Financial data returned in a conversation may be processed by your AI provider. Exports are written to local disk.

Installation

In SourceWeft

  1. Open Ynab Mcpb in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.

Other MCP clients

Follow the launch instructions in the repository.

README

YNAB MCP Server

Connect YNAB to any AI assistant. Manage your budget in plain English.

[Download MCPB] [npm] [License: AGPL v3] [Node.js]


Demo

[Receipt itemization demo]
Paste a receipt → itemized split transaction in seconds

What you can do

WorkflowExample prompt
Receipt split"Create a split transaction for this receipt and allocate tax."
Bank reconciliation"Reconcile my checking account using this CSV."
Spending analysis"What did I spend on takeout this month?"
Scheduled cash flow"What scheduled bills and income are due this month?"
Transaction creation"Create a transaction: $42.18 at Trader Joe's yesterday."
Month overview"Show my budget summary for January."

How it works

mermaid
graph LR    U(You) -->|Plain English| C[Claude Desktop<br/>or any MCP client]    C -->|MCP protocol| S[YNAB MCP Server<br/>35 tools]    S -->|YNAB API| Y[(Your Budget)]
    style S fill:#2563EB,color:#fff,stroke:#1d4ed8    style Y fill:#16a34a,color:#fff,stroke:#15803d    style C fill:#7c3aed,color:#fff,stroke:#6d28d9

Features

  • Receipt itemization — Paste a receipt, get an itemized split transaction with tax allocation automatically distributed across line items.
  • Bank reconciliation (beta) — Import a bank CSV, fuzzy-match against YNAB, detect missing or mismatched transactions, and apply bulk fixes.
  • 35 YNAB tools — Full coverage plus scheduled transactions and deterministic period analytics.
  • Write safety by default — Preview mode requires a short-lived, single-use confirmation bound to the exact validated request.
  • Smaller tool profiles — Choose core, read-only, or full at startup without dynamic registration.
  • Delta sync — Fetches only changed data since the last request, keeping things fast.
  • Markdown or JSON — All read tools support response_format: human-readable markdown tables (default) or structured JSON.
  • MCP-native — Structured outputs, annotations, completions API, and resource templates.

How reconciliation works

Show workflow diagram
mermaid
sequenceDiagram    participant You    participant Claude    participant MCP as YNAB MCP Server    participant YNAB
    You->>Claude: "Reconcile my checking<br/>with this CSV"    Claude->>MCP: reconcile_account(csv_data)    MCP->>YNAB: Fetch transactions    YNAB-->>MCP: YNAB transactions    MCP->>MCP: Parse CSV<br/>Fuzzy-match payees & dates<br/>Detect missing / mismatched    MCP-->>Claude: Matches + recommendations    Claude->>You: "Found 47 matches, 3 missing.<br/>Apply changes?"    You->>Claude: "Yes"    Claude->>MCP: Apply recommended changes    MCP->>YNAB: Create / update transactions    MCP-->>Claude: Done    Claude->>You: "3 transactions created,<br/>account reconciled."

Setup (2 minutes)

1 — Get a YNAB token

  1. Open YNAB Web App
  2. Go to Account Settings → Developer Settings → New Token
  3. Copy it (shown once only)

2 — Install

Claude Desktop — MCPB file (recommended)
  1. Download the latest .mcpb from Releases
  2. Drag it into Claude Desktop
  3. Enter your YNAB_ACCESS_TOKEN when prompted
  4. Restart Claude Desktop
Claude Desktop — npx

Add to your Claude Desktop config:

json
{  "mcpServers": {    "ynab": {      "command": "npx",      "args": ["-y", "@dizzlkheinz/ynab-mcpb@latest"],      "env": {        "YNAB_ACCESS_TOKEN": "your-token-here"      }    }  }}
Cline (VS Code)
json
{  "mcpServers": {    "ynab": {      "command": "npx",      "args": ["-y", "@dizzlkheinz/ynab-mcpb@latest"],      "env": {        "YNAB_ACCESS_TOKEN": "your-token-here"      }    }  }}
Codex
toml
[mcp_servers.ynab-mcpb]command = "npx"args = ["-y", "@dizzlkheinz/ynab-mcpb@latest"]env = {"YNAB_ACCESS_TOKEN" = "your-token-here"}startup_timeout_sec = 120
Any other MCP client
  • Command: npx
  • Args: ["-y", "@dizzlkheinz/ynab-mcpb@latest"]
  • Env: YNAB_ACCESS_TOKEN=<your token>

3 — Try these prompts

List my budgets and set the default to my main budget.Show recent transactions in my checking account.How much did I spend on groceries in the last 30 days?Create a transaction: $42.18 at Trader Joe's yesterday.

Tools (35)

See all tools by category
CategoryTools
Budgetslist_budgets get_budget get_default_budget set_default_budget
Accountslist_accounts get_account create_account
Transactionslist_transactions get_transaction create_transaction create_transactions update_transaction update_transactions delete_transaction export_transactions compare_transactions create_receipt_split_transaction
Categorieslist_categories get_category update_category
Payeeslist_payees get_payee
Monthslist_months get_month
Reconciliationreconcile_account
Scheduled transactionslist_scheduled_transactions get_scheduled_transaction create_scheduled_transaction update_scheduled_transaction delete_scheduled_transaction
Analyticsanalyze_spending compare_spending_periods
Utilitiesget_user diagnostic_info clear_cache

All read tools accept response_format ("markdown" or "json", default: "markdown").

Full reference: docs/reference/API.md


Configuration

VariableDefaultDescription
YNAB_ACCESS_TOKEN—Required. Your YNAB personal access token.
YNAB_EXPORT_PATH~/DownloadsDirectory for exported transaction files.
YNAB_MCP_ENABLE_DELTAfalseSet to true to enable delta sync (only fetch changed data). Must be exactly true or false.
YNAB_MCP_WRITE_MODEpreviewread-only hides YNAB mutations; preview requires exact confirmation; enabled permits direct writes.
YNAB_MCP_TOOL_PROFILEfullcore, read-only, or full startup tool surface.
YNAB_MCP_CACHE_DEFAULT_TTL_MS300000Cache TTL in milliseconds (5 min).
YNAB_MCP_CACHE_MAX_ENTRIES1000Maximum cache entries before LRU eviction.

See .env.example for all options.

Write modes and compatibility

preview is the conservative default. A mutation call first runs its existing dry_run path and returns a confirmation token. That token expires after two minutes, can be used once, and only authorizes the same canonical tool name and validated arguments. read-only does not register YNAB mutation tools. enabled preserves the pre-safety direct-write behavior for users who explicitly opt in.

Transaction amounts now prefer amount_decimal (for example, -12.34) or the explicit raw field amount_milliunits (-12340). Category funding similarly prefers budgeted_decimal or budgeted_milliunits. The old amount and budgeted fields remain accepted as deprecated milliunit aliases for backward compatibility; their meaning is never guessed.

Tool profiles

Profiles are selected once at server startup, so clients receive a stable tools/list response:

  • core keeps common reads, transaction safety workflows, reconciliation, receipt splitting, scheduled review, and spending analytics.
  • read-only exposes every tool explicitly annotated read-only.
  • full exposes the complete 35-tool surface, subject to the selected write mode.

Privacy and trust

  • The server process runs locally and communicates with YNAB over YNAB's API.
  • Your YNAB personal access token is sensitive. Store it in your MCP client's secret configuration and never paste it into a conversation, issue, fixture, or log.
  • Financial data returned by tools and included in a conversation may be processed by the AI provider selected in your MCP client. Review that provider's data controls before sharing sensitive details.
  • Transaction exports remain on local disk at YNAB_EXPORT_PATH (or the platform default). The server does not upload exported files elsewhere.
  • Use read-only for no YNAB writes, preview for exact request confirmation, or enabled only when direct writes are an intentional compatibility choice.
  • This independent open-source project is not affiliated with or endorsed by YNAB.

Troubleshooting

SymptomFix
npx failsInstall Node.js 24+, then restart your MCP client.
Auth errorsRegenerate your YNAB token and update YNAB_ACCESS_TOKEN.
Tools not detectedRestart the MCP client after any config change.
Reconciliation issuesOpen an issue with an anonymized CSV sample.

For developers

bash
git clone https://github.com/dizzlkheinz/ynab-mcpb.gitcd ynab-mcpbnpm ci --ignore-scriptsnpm run buildnpm testnpm run test:integration

The build and offline tests require no YNAB credentials. npm test runs unit and performance tests; test:integration runs mocked integration tests. Use test:all, test:coverage, or test:watch for the combined suite, coverage, or watch mode. Pass file/test-name filters directly, for example npm run test:integration -- transactionTools.

To start the server locally, copy .env.example to .env, add your token, and run npm start. Live smoke tests require an explicit RUN_LIVE_YNAB_TESTS=true and run through npm run test:live; SKIP_E2E_TESTS=true disables them.

Builds do not package or install global tools. To create a Claude Desktop bundle, install the official CLI once (npm install --global @anthropic-ai/mcpb), then run npm run build and npm run package:mcpb. Review npm package contents with npm pack --dry-run --ignore-scripts.

Architecture and contributor guidance: CLAUDE.md

Reconciliation architecture: docs/technical/reconciliation-system-architecture.md


Contributing

Bug reports and CSV edge-case repros are very welcome, especially for bank reconciliation: Open an issue

PRs welcome — run npm test and npm run lint before submitting.


License

AGPL-3.0

Source: README.md at commit 3452a93

Tools

35

ynab_list_budgets

YNAB: List Budgets

List all YNAB budgets for the authenticated user. Args: - response_format (string, optional): "json" or "markdown" (default: "markdown"). Returns: budgets[], cached, cache_info Examples: - List all budgets: call with no args Errors: - "UNAUTHORIZED" → YNAB token expired or invalid

Parametersresponse_format

ynab_get_budget

YNAB: Get Budget Details

Get summary information for a specific YNAB budget. Args: - budget_id (string, required): Budget UUID. - response_format (string, optional): "json" or "markdown" (default: "markdown"). Returns: budget (id, name, currency_format, accounts_count, categories_count, payees_count, months_count) Examples: - Get budget details: set budget_id to the UUID from ynab_list_budgets Errors: - "Budget not found" → invalid or inaccessible budget_id

Parametersbudget_idrequiredresponse_format

ynab_list_payees

YNAB: List Payees

List all payees for a budget with pagination. Args: - budget_id (string, optional): Budget UUID. Omit to use the default budget. - limit (int, optional): Max results per page. Default: 50. - offset (int, optional): Zero-based offset for pagination. Default: 0. - response_format (string, optional): "json" or "markdown" (default: "markdown"). Returns: payees[], total_count, returned_count, offset, has_more, next_offset, cached, cache_info Examples: - List all payees: call with no args - Page 2: set limit=50, offset=50 Errors: - "No default budget set" → run ynab_set_default_budget first

Parameterslimitoffsetbudget_idresponse_format

ynab_get_payee

YNAB: Get Payee Details

Get details for a specific payee. Args: - budget_id (string, optional): Budget UUID. Omit to use the default budget. - payee_id (string, required): Payee UUID. - response_format (string, optional): "json" or "markdown" (default: "markdown"). Returns: payee (id, name, transfer_account_id, deleted), cached, cache_info Errors: - "No default budget set" → run ynab_set_default_budget first - "Payee not found" → invalid payee_id

Parameterspayee_idrequiredbudget_idresponse_format

ynab_list_categories

YNAB: List Categories

List all budget categories for a budget with pagination. Args: - budget_id (string, optional): Budget UUID. Omit to use the default budget. - limit (int, optional): Max results per page. Default: 50. - offset (int, optional): Zero-based offset for pagination. Default: 0. - response_format (string, optional): "json" or "markdown" (default: "markdown"). Returns: categories[], category_groups[], total_count, returned_count, offset, has_more, next_offset, cached, cache_info Examples: - List categories (default budget): call with no args - Page 2: set limit=50, offset=50 Errors: - "No default budget set" → run ynab_set_default_budget first

Parameterslimitoffsetbudget_idresponse_format

ynab_get_category

YNAB: Get Category Details

Get current month details for a specific budget category. Args: - budget_id (string, optional): Budget UUID. Omit to use the default budget. - category_id (string, optional): Category UUID. - response_format (string, optional): "json" or "markdown" (default: "markdown"). Returns: category (id, name, budgeted, activity, balance, goal_type, goal_target, goal_percentage_complete), cached, cache_info Errors: - "No default budget set" → run ynab_set_default_budget first - "Category not found" → invalid category_id

Parametersbudget_idcategory_idrequiredresponse_format

ynab_update_category

YNAB: Update Category Budget

Update the budgeted amount for a category in the current month. Args: - budget_id (string, optional): Budget UUID. Omit to use the default budget. - category_id (string, required): Category UUID. - budgeted_decimal (number, preferred): New funding amount in decimal currency units. - budgeted_milliunits (int, alternative): Explicit raw YNAB milliunits. - dry_run (boolean, optional): Preview without saving. Default: false. Returns: updated category with new budgeted, activity, balance. Examples: - Budget $100: set budgeted_decimal=100.00 - Already-converted data: set budgeted_milliunits=100000 - Dry run: set dry_run=true Errors: - "No default budget set" → run ynab_set_default_budget first Write safety: call without confirmation_token to preview. The preview returns confirmation_token and confirmation_expires_at in its structured output (and in its text). Execute the identical validated request with that short-lived confirmation_token.

Parametersdry_runbudget_idcategory_idrequiredbudgeted_decimalconfirmation_tokenbudgeted_milliunits

ynab_list_accounts

YNAB: List Accounts

List all accounts for a budget. Args: - budget_id (string, optional): Budget UUID. Omit to use the default budget. - limit (int, optional): Max results per page. Default: 50. - offset (int, optional): Zero-based offset for pagination. Default: 0. - response_format (string, optional): "json" or "markdown" (default: "markdown"). Returns: accounts[], total_count, returned_count, offset, has_more, next_offset, cached, cache_info Examples: - List all accounts (default budget): call with no args - Page 2: set limit=20, offset=20 Errors: - "No default budget set" → run ynab_set_default_budget first - "UNAUTHORIZED" → YNAB token expired

Parameterslimitoffsetbudget_idresponse_format

ynab_get_account

YNAB: Get Account Details

Get details for a single account including current balance. Args: - budget_id (string, optional): Budget UUID. Omit to use the default budget. - account_id (string, required): Account UUID. - response_format (string, optional): "json" or "markdown" (default: "markdown"). Returns: account (id, name, type, balance, cleared_balance, uncleared_balance, on_budget, closed), cached, cache_info Errors: - "No default budget set" → run ynab_set_default_budget first - "Account not found" → invalid account_id

Parametersbudget_idaccount_idrequiredresponse_format

ynab_create_account

YNAB: Create Account

Create a new account in a YNAB budget. Args: - budget_id (string, optional): Budget UUID. Omit to use the default budget. - name (string, required): Account name. - type (string, required): One of: checking, savings, creditCard, cash, lineOfCredit, otherAsset, otherLiability. - balance (number, optional): Opening balance in dollars. Default: 0. - dry_run (boolean, optional): Preview the request without creating. Default: false. Returns: account object with id, name, type, balance fields. Examples: - Create checking account: set name="My Checking", type="checking" - Dry run: set dry_run=true to preview without saving Write safety: call without confirmation_token to preview. The preview returns confirmation_token and confirmation_expires_at in its structured output (and in its text). Execute the identical validated request with that short-lived confirmation_token.

Parametersnamerequiredtyperequiredbalancedry_runbudget_idconfirmation_token

ynab_get_month

YNAB: Get Month Details

Get full budget data for a specific month including all category balances. Args: - budget_id (string, optional): Budget UUID. Omit to use the default budget. - month (string, required): Month in YYYY-MM-DD format (use first day, e.g. "2025-01-01"). - response_format (string, optional): "json" or "markdown" (default: "markdown"). Returns: month (month, income, budgeted, activity, to_be_budgeted, age_of_money, categories[]), cached, cache_info Examples: - Get January 2025: set month="2025-01-01" Errors: - "No default budget set" → run ynab_set_default_budget first

Parametersmonthrequiredbudget_idresponse_format

ynab_list_months

YNAB: List Months

List summary data for all budget months with pagination. Args: - budget_id (string, optional): Budget UUID. Omit to use the default budget. - limit (int, optional): Max results per page. Default: 50. - offset (int, optional): Zero-based offset for pagination. Default: 0. - response_format (string, optional): "json" or "markdown" (default: "markdown"). Returns: months[], total_count, returned_count, offset, has_more, next_offset, cached, cache_info Examples: - List recent months: call with no args, months are newest-first - Page 2: set limit=12, offset=12 Errors: - "No default budget set" → run ynab_set_default_budget first

Parameterslimitoffsetbudget_idresponse_format

ynab_list_transactions

YNAB: List Transactions

List transactions for a budget with optional filtering and pagination. Args: - budget_id (string, optional): Budget UUID. Omit to use the default budget. - account_id (string, optional): Filter by account. - category_id (string, optional): Filter by category. - since_date (string, optional): ISO date (YYYY-MM-DD) to filter transactions on or after. - until_date (string, optional): ISO date (YYYY-MM-DD) to filter transactions on or before. Combine with since_date for a date window. - type (string, optional): "uncategorized" or "unapproved". - cleared (string, optional): "cleared", "uncleared", or "reconciled". - import_id (string, optional): Exact import_id, e.g. to find a transaction you just created. - payee_id (string, optional): Exact payee UUID. - payee_name (string, optional): Case-insensitive substring of the payee name. - amount_decimal (number, optional): Exact amount in currency units (e.g. -12.34). Or amount_milliunits for raw YNAB milliunits; pass at most one. - limit (int, optional): Max results per page. Default: 50. - offset (int, optional): Zero-based offset for pagination. Default: 0. - response_format (string, optional): "json" or "markdown" (default: "markdown"). Returns: transactions[], total_count, returned_count, offset, has_more, next_offset, cached, cache_info Examples: - All transactions: call with no args (uses default budget) - Filter by account: set account_id - Last 30 days: set since_date to 30 days ago - Find a transaction: set account_id, since_date/until_date around its date, and payee_name or amount_decimal (or import_id) - Page 2: set limit=50, offset=50 Errors: - "No default budget set" → run ynab_set_default_budget first - Large result → use ynab_export_transactions to save to file

Parameterstypelimitoffsetclearedpayee_idbudget_idimport_idaccount_idpayee_namesince_dateuntil_datecategory_id+3 more

ynab_export_transactions

YNAB: Export Transactions

Export transactions for a budget to a local JSON file. Args: - budget_id (string, optional): Budget UUID. Omit to use the default budget. - account_id (string, optional): Filter by account. - category_id (string, optional): Filter by category. - since_date (string, optional): ISO date (YYYY-MM-DD) to filter transactions on or after. - type (string, optional): "uncategorized" or "unapproved" to export only those transactions. - filename (string, optional): File name (not a path); ".json" is appended if missing. Default: generated from the filters, count and timestamp. - minimal (boolean, optional): Export only id, date, amount, amount_milliunits, payee_name and cleared. Default: true; false exports full fields. Returns: message, filename, full_path, export_directory, export_mode ("minimal" or "full"), minimal_fields, filename_explanation, total_count, preview_count, preview_transactions (a short preview, not the whole file) Examples: - Export all transactions: call with no args - Export account: set account_id Errors: - "No default budget set" → run ynab_set_default_budget first

Parameterstypeminimalfilenamebudget_idaccount_idsince_datecategory_id

ynab_get_transaction

YNAB: Get Transaction Details

Get full details for a single transaction by ID. Args: - budget_id (string, optional): Budget UUID. Omit to use the default budget. - transaction_id (string, required): Transaction UUID. - response_format (string, optional): "json" or "markdown" (default: "markdown"). Returns: transaction (id, date, amount, memo, cleared, approved, account_id, payee_name, category_name, subtransactions), cached, cache_info Errors: - "No default budget set" → run ynab_set_default_budget first - "Transaction not found" → invalid transaction_id

Parametersbudget_idtransaction_idrequiredresponse_format

ynab_create_transaction

YNAB: Create Transaction

Create a single transaction in YNAB. Args: - budget_id (string, optional): Budget UUID. Omit to use the default budget. - account_id (string, required): Account UUID. - amount_decimal (number, preferred): Amount in decimal currency units (for example, -50.00). Negative for expenses. - amount_milliunits (int, alternative): Explicit raw YNAB milliunits (for example, -50000). - date (string, required): ISO date YYYY-MM-DD. - payee_name (string, optional): Payee name (creates new payee if not found). - payee_id (string, optional): Existing payee UUID (alternative to payee_name). - category_id (string, optional): Category UUID. - memo (string, optional): Memo text. - cleared (string, optional): "cleared", "uncleared", or "reconciled". Default: "uncleared". - approved (boolean, optional): Mark as approved. Default: false. - flag_color (string, optional): Transaction flag color ("red", "orange", "yellow", "green", "blue", "purple"). - dry_run (boolean, optional): Preview without saving. Default: false. - subtransactions (array, optional): Manual split lines. Each entry uses exactly one of amount_decimal or amount_milliunits, plus optional "memo", "category_id", "payee_id", and "payee_name". Use "subtransactions" for manual split transactions. Use "ynab_create_receipt_split_transaction" when you have itemized receipt data and want proportional tax allocation handled for you. Advanced: "import_id" is supported, but it is intentionally not part of normal guidance. Usually omit it if you want the transaction to remain eligible for later bank-import matching. Returns: the created transaction, including split lines and explicit amount_milliunits. Examples: - $50 expense: set amount_decimal=-50.00 - Already-converted data: set amount_milliunits=-50000 Write safety: call without confirmation_token to preview. The preview returns confirmation_token and confirmation_expires_at in its structured output (and in its text). Execute the identical vali

Parametersdaterequiredmemocleareddry_runapprovedpayee_idbudget_idimport_idaccount_idrequiredflag_colorpayee_namecategory_id+4 more

ynab_create_transactions

YNAB: Create Multiple Transactions

Create 1–100 transactions in a single batch with duplicate detection and dry-run support. Args: - budget_id (string, optional): Budget UUID. Omit to use the default budget. - transactions (array, required): Up to 100 transaction objects. Each requires account_id, date, and exactly one of amount_decimal (preferred) or amount_milliunits. - dry_run (boolean, optional): Validate without saving. Default: false. Returns: summary (created, duplicates, failed), results[], transactions[]. Examples: - Dry run first: set dry_run=true to validate before committing - If you explicitly want YNAB-side duplicate import detection, set import_id on each transaction Write safety: call without confirmation_token to preview. The preview returns confirmation_token and confirmation_expires_at in its structured output (and in its text). Execute the identical validated request with that short-lived confirmation_token.

Parametersdry_runbudget_idtransactionsrequiredconfirmation_token

ynab_create_receipt_split_transaction

YNAB: Create Split Transaction from Receipt

Create a split transaction from itemized receipt data with proportional tax allocation. Args: - budget_id (string, optional): Budget UUID. Omit to use the default budget. - account_id (string, required): Account UUID. - payee_name (string, required): Store/payee name. - receipt_total (number, required): Total amount in dollars (positive). - receipt_tax (number, required): Tax amount in dollars (0 if none). - categories (array, required): One entry per category: category_id plus its items. Each item needs name and amount (dollars). - date (string, optional): ISO date. Default: today. - memo (string, optional): Memo applied to the parent transaction. - receipt_subtotal (number, optional): Pre-tax subtotal for validation. - cleared (string, optional): "cleared", "uncleared", or "reconciled". Default: "uncleared". - approved (boolean, optional): Mark as approved. Default: false. - flag_color (string, optional): Transaction flag color ("red", "orange", "yellow", "green", "blue", "purple"). - dry_run (boolean, optional): Preview subtransactions without saving. Default: false. Use this helper when you have receipt line items and want tax allocated across categories automatically. For generic manual split transactions without receipt/tax logic, use "ynab_create_transaction" with "subtransactions". Returns: transaction with subtransactions and receipt_summary. Write safety: call without confirmation_token to preview. The preview returns confirmation_token and confirmation_expires_at in its structured output (and in its text). Execute the identical validated request with that short-lived confirmation_token.

Parametersdatememocleareddry_runapprovedbudget_idaccount_idrequiredcategoriesrequiredflag_colorpayee_namerequiredreceipt_taxrequiredreceipt_totalrequired+2 more

ynab_update_transaction

YNAB: Update Transaction

Update fields on an existing YNAB transaction. Args: - budget_id (string, optional): Budget UUID. Omit to use the default budget. - transaction_id (string, required): Transaction UUID to update. - amount_decimal (number, preferred): New amount in decimal currency units. - amount_milliunits (int, alternative): Explicit raw YNAB milliunits. - account_id (string, optional): New account UUID. - date (string, optional): New date YYYY-MM-DD. - payee_name / payee_id (string, optional): New payee. - category_id (string, optional): New category UUID. - memo (string, optional): New memo. - cleared (string, optional): "cleared", "uncleared", or "reconciled". - approved (boolean, optional): Approval status. - flag_color (string, optional): Flag color ("red", "orange", "yellow", "green", "blue", "purple"). - subtransactions (array, optional): Convert a non-split transaction into a split. Supply the parent amount and split lines using amount_decimal or amount_milliunits; split amounts must sum to the parent and category_id must be omitted on the parent. YNAB does not support replacing lines on an existing split. - dry_run (boolean, optional): Preview without saving. Returns: the updated transaction, including split lines and explicit amount_milliunits. Write safety: call without confirmation_token to preview. The preview returns confirmation_token and confirmation_expires_at in its structured output (and in its text). Execute the identical validated request with that short-lived confirmation_token.

Parametersdatememocleareddry_runapprovedpayee_idbudget_idaccount_idflag_colorpayee_namecategory_idamount_decimal+4 more

ynab_update_transactions

YNAB: Update Multiple Transactions

Update 1–100 transactions in a single batch with dry-run preview. Args: - budget_id (string, optional): Budget UUID. Omit to use the default budget. - transactions (array, required): Up to 100 objects, each requires id plus fields to update. Amount updates use one of amount_decimal (preferred) or amount_milliunits. A non-split transaction can be converted to a split by supplying the parent amount plus subtransactions that sum to it; YNAB does not support replacing lines on an existing split. - dry_run (boolean, optional): Preview changes without saving. Default: false. Returns: summary (updated, failed), results[], transactions[]. Examples: - Dry run: set dry_run=true to preview before/after for first 10 items Write safety: call without confirmation_token to preview. The preview returns confirmation_token and confirmation_expires_at in its structured output (and in its text). Execute the identical validated request with that short-lived confirmation_token.

Parametersdry_runbudget_idtransactionsrequiredconfirmation_token

ynab_delete_transaction

YNAB: Delete Transaction

Delete a transaction from YNAB. This action is irreversible. Args: - budget_id (string, optional): Budget UUID. Omit to use the default budget. - transaction_id (string, required): Transaction UUID to delete. - dry_run (boolean, optional): Preview without deleting. Default: false. Returns: the deleted transaction with its ID and deletion status. Errors: - "Transaction not found" → invalid transaction_id Write safety: call without confirmation_token to preview. The preview returns confirmation_token and confirmation_expires_at in its structured output (and in its text). Execute the identical validated request with that short-lived confirmation_token.

Parametersdry_runbudget_idtransaction_idrequiredconfirmation_token

ynab_list_scheduled_transactions

YNAB: List Scheduled Transactions

List scheduled transactions with delta caching and pagination. Amounts are returned in decimal currency and explicit milliunits.

Parameterslimitoffsetbudget_id

ynab_get_scheduled_transaction

YNAB: Get Scheduled Transaction

Get one scheduled transaction by ID.

Parametersbudget_idscheduled_transaction_idrequired

ynab_create_scheduled_transaction

YNAB: Create Scheduled Transaction

Create a recurring scheduled transaction. Prefer amount_decimal; amount_milliunits is available for already-converted values. Write safety: call without confirmation_token to preview. The preview returns confirmation_token and confirmation_expires_at in its structured output (and in its text). Execute the identical validated request with that short-lived confirmation_token.

Parametersdaterequiredmemodry_runpayee_idbudget_idfrequencyrequiredaccount_idrequiredflag_colorpayee_namecategory_idamount_decimalamount_milliunits+1 more

ynab_update_scheduled_transaction

YNAB: Update Scheduled Transaction

Update selected fields on a scheduled transaction. Write safety: call without confirmation_token to preview. The preview returns confirmation_token and confirmation_expires_at in its structured output (and in its text). Execute the identical validated request with that short-lived confirmation_token.

Parametersdatememodry_runpayee_idbudget_idfrequencyaccount_idflag_colorpayee_namecategory_idamount_decimalamount_milliunits+2 more

ynab_delete_scheduled_transaction

YNAB: Delete Scheduled Transaction

Delete a scheduled transaction. Write safety: call without confirmation_token to preview. The preview returns confirmation_token and confirmation_expires_at in its structured output (and in its text). Execute the identical validated request with that short-lived confirmation_token.

Parametersdry_runbudget_idconfirmation_tokenscheduled_transaction_idrequired

ynab_analyze_spending

YNAB: Analyze Spending

Deterministically calculate income, spending, and net totals for an inclusive date range, grouped by category, payee, account, week, or month. Aggregates always use the complete fetched period before grouping.

Parametersgroup_byrequiredbudget_idsince_daterequireduntil_daterequiredinclude_transfers

ynab_compare_spending_periods

YNAB: Compare Spending Periods

Deterministically compare two complete spending periods and calculate total and per-group differences.

Parametersgroup_byrequiredperiod_arequiredperiod_brequiredbudget_idinclude_transfers

ynab_compare_transactions

YNAB: Compare Transactions

Compare bank CSV transactions with YNAB transactions to find missing or mismatched entries. Args: - budget_id (string, optional): Budget UUID. Omit to use the default budget. - account_id (string, required): Account UUID to compare against. - csv_file_path or csv_data (string, required): Bank export file path or inline CSV text. - statement_start_date (string, optional): Filter comparison window start date (YYYY-MM-DD). - statement_date (string, optional): Filter comparison window end date (YYYY-MM-DD). - amount_tolerance (number, optional): Amount match tolerance in dollars, 0-1. Default: 0.01. - date_tolerance_days (number, optional): Date match tolerance, 0-7 days. Default: 5. - enable_chronology_bonus (boolean, optional): Prefer matches in chronological order. Default: false. - auto_detect_format (boolean, optional): Detect CSV columns automatically. Default: false. - csv_format (object, optional): CSV layout (date_column, amount_column, debit_column, credit_column, description_column, date_format, has_header, delimiter). - debug (boolean, optional): Include extra diagnostics. Default: false. Returns: summary (counts, date_range, parameters), matches, missing_in_ynab (bank rows with no YNAB match), missing_in_bank (YNAB transactions with no bank row).

Parametersdebugcsv_databudget_idaccount_idrequiredcsv_formatcsv_file_pathstatement_dateamount_toleranceauto_detect_formatdate_tolerance_daysstatement_start_dateenable_chronology_bonus

ynab_reconcile_account

YNAB: Reconcile Account

Guided account reconciliation: match bank CSV transactions to YNAB, detect discrepancies, and optionally execute bulk create/update/unclear operations. Args: - budget_id (string, optional): Budget UUID. Omit to use the default budget. - account_id (string, required): Account UUID to reconcile. - csv_file_path or csv_data (string, required): Bank export file path or inline CSV text. - statement_balance (number, required): Ending balance from the bank statement (dollars). For credit cards and other liability accounts, pass a negative value (e.g. -6143.27 means you owe $6,143.27). - statement_end_date (string, optional): Statement closing date (YYYY-MM-DD). Filters CSV and triggers balance verification. Auto-detected from CSV if omitted. - csv_format (object, optional): CSV layout overrides (column names or indexes, date_format, has_header, delimiter). - date_tolerance_days (number, optional): Date match tolerance, 0-7 days. Default: 7. - auto_adjust_dates (boolean, optional): Auto-adjust YNAB dates to match the bank dates. Default: false. - match_strictness (string, optional): Matching sensitivity — "loose" (more matches), "normal" (default), or "strict" (fewer false positives). - sign_convention (string, optional): How to treat CSV amount signs — "auto" (default, detects from data), "invert" (negate all amounts), "as_is" (use amounts unchanged). Useful when auto-detection fails for liability accounts. - dry_run (boolean, optional): Preview actions without executing. Default: true. - auto_create_transactions (boolean, optional): Auto-create missing transactions. Default: false. - auto_update_cleared_status (boolean, optional): Auto-mark matched transactions as cleared. Default: false. - auto_unclear_missing (boolean, optional): Auto-mark statement-missing cleared transactions as uncleared when reconciliation remains unbalanced. Default: false. - max_suggestions_in_output (number, optional): Limit unmatched items and suggestions sho

Parametersdry_runcsv_databudget_idaccount_idrequiredcsv_formatcsv_file_pathsign_conventionmatch_strictnessauto_adjust_datesstatement_balancerequiredconfirmation_tokenstatement_end_date+5 more

ynab_get_user

YNAB: Get User Information

Get information about the authenticated YNAB user. Args: - response_format (string, optional): "json" or "markdown" (default: "markdown"). Returns: user (id) Errors: - "UNAUTHORIZED" → YNAB token expired or invalid

Parametersresponse_format

ynab_set_default_budget

YNAB: Set Default Budget

Set a default budget so other tools don't require budget_id every call. Args: - budget_id (string, required): Budget UUID to set as default. Validates against YNAB API. Returns: success, default_budget_id, cache_warm_started. Examples: - Set default: provide the UUID from ynab_list_budgets Errors: - "Budget not found" → invalid budget_id

Parametersbudget_idrequired

ynab_get_default_budget

YNAB: Get Default Budget

Get the currently configured default budget ID. Args: - response_format (string, optional): "json" or "markdown" (default: "markdown"). Returns: default_budget_id (null if not set), has_default.

Parametersresponse_format

ynab_diagnostic_info

YNAB: Diagnostic Information

Get comprehensive diagnostic information about the MCP server (health, cache, delta, security). Args: - include_memory (boolean, optional): Include memory usage. Default: true. - include_environment (boolean, optional): Include env info. Default: true. - include_server (boolean, optional): Include server info. Default: true. - include_security (boolean, optional): Include security stats. Default: true. - include_cache (boolean, optional): Include cache metrics. Default: true. - include_delta (boolean, optional): Include delta cache info. Default: true. - response_format (string, optional): "json" or "markdown" (default: "markdown"). Returns: diagnostics object with requested sections.

Parametersinclude_cacheinclude_deltainclude_memoryinclude_serverresponse_formatinclude_securityinclude_environment

ynab_clear_cache

YNAB: Clear Cache

Clear all in-memory caches. Safe operation — no YNAB data is modified. Args: (none) Returns: success. Use when: you need fresh data after external YNAB changes, or to free memory.

Takes no parameters.

Version history

4
  1. v0.32.0Nov 7, 2026
  2. v0.31.0Oct 29, 2026
  3. v0.29.1Oct 21, 2026
  4. v0.28.0Sep 16, 2026

Score

90% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 days25 pts
  • Auth declared10 pts

    Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.

  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts