Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
YNAB_EXPORT_PATHNoOptional directory for exported transaction files.
YNAB_ACCESS_TOKENYesYour YNAB personal access token, obtained from Account Settings -> Developer Settings in the YNAB Web App.
YNAB_MCP_ENABLE_DELTANoEnable/disable delta sync optimization (defaults to 'true').true

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

This server publishes no instructions, or was last inspected before Glama recorded them.

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

CapabilityDetails
tools
{
  "listChanged": false
}
logging
{}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}
completions
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
ynab_list_budgetsA

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

ynab_get_budgetA

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

ynab_list_payeesA

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

ynab_get_payeeA

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

ynab_list_categoriesA

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

ynab_get_categoryA

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

ynab_update_categoryA

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.

  • budgeted (int, deprecated): Backward-compatible alias for budgeted_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.

ynab_list_accountsA

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

ynab_get_accountA

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

ynab_create_accountA

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.

ynab_get_monthA

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

ynab_list_monthsA

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

ynab_list_transactionsA

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

ynab_export_transactionsA

Export all 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.

  • since_date (string, optional): ISO date (YYYY-MM-DD) to filter transactions on or after.

Returns: file_path, transaction_count, file_size_kb

Examples:

  • Export all transactions: call with no args

  • Export account: set account_id

Errors:

  • "No default budget set" → run ynab_set_default_budget first

ynab_get_transactionA

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

ynab_create_transactionA

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).

  • amount (int, deprecated): Backward-compatible alias for amount_milliunits. Values are never guessed by magnitude.

  • 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, amount_milliunits, or deprecated amount, 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 validated request with that short-lived confirmation_token.

ynab_create_transactionsA

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), amount_milliunits, or deprecated amount.

  • 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.

ynab_create_receipt_split_transactionA

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): Category groups with items. Each item needs name, amount.

  • 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.

ynab_update_transactionA

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.

  • amount (int, deprecated): Backward-compatible alias for amount_milliunits.

  • 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.

  • subtransactions (array, optional): Convert a non-split transaction into a split. Supply the parent amount and split lines using amount_decimal, amount_milliunits, or deprecated amount; 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.

ynab_update_transactionsA

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), amount_milliunits, or deprecated amount. 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.

ynab_delete_transactionA

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.

ynab_list_scheduled_transactionsC

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

ynab_get_scheduled_transactionC

Get one scheduled transaction by ID.

ynab_create_scheduled_transactionA

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.

ynab_update_scheduled_transactionB

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.

ynab_delete_scheduled_transactionA

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.

ynab_analyze_spendingA

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.

ynab_compare_spending_periodsC

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

ynab_compare_transactionsC

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).

Returns: comparison report with matched, unmatched_bank, unmatched_ynab transactions.

ynab_reconcile_accountA

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.

  • 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 shown in the human report. Default: 20.

Returns: human-readable reconciliation narrative + structured JSON (unmatched_bank, unmatched_ynab, suggestions, execution_summary when actions are performed).

Examples:

  • Preview reconciliation: set dry_run=true (default)

  • Execute: set dry_run=false and explicitly enable the write flags you want, e.g. auto_update_cleared_status=true

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.

ynab_get_userA

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

ynab_set_default_budgetA

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

ynab_get_default_budgetA

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.

ynab_diagnostic_infoA

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.

ynab_clear_cacheA

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.

Prompts

Interactive templates invoked by user choice

NameDescription
create-transactionCreate a new transaction in YNAB
budget-summaryGet a summary of your budget status
reconcile-accountReconcile a YNAB account against a bank statement or CSV export
account-balancesCheck balances across all accounts
weekly-budget-reviewReview deterministic spending and budget status for a week
uncategorized-transaction-reviewFind and review uncategorized transactions without guessing categories
month-end-closeRun a read-first month-end budget close checklist
spending-period-comparisonCompare two periods using server-calculated spending totals
scheduled-cash-flow-reviewReview scheduled inflows and outflows without claiming a forecast model

Resources

Contextual data attached and managed by the client

NameDescription
YNAB BudgetsList of all available budgets
YNAB User InfoCurrent user information including ID and email address

TDQS

A3.6/5.0

Scored across 35 tools

Disambiguation4/5

Most tools target distinct resources and actions, with single vs. batch (create_transaction/create_transactions) and split variants differentiated in their descriptions. However, ynab_compare_transactions and ynab_reconcile_account both compare bank CSV against YNAB and could be confused, and the single/batch pairs require reading descriptions to choose correctly.

Naming Consistency5/5

Every tool follows a strict ynab_verb_noun snake_case convention (list_, get_, create_, update_, delete_, analyze_, compare_, export_). No mixed conventions or stylistic deviations anywhere in the set.

Tool Count2/5

35 tools is heavy for a single domain even accounting for YNAB's breadth (transactions, scheduled, accounts, categories, payees, months, budgets, analytics, reconciliation, diagnostics). Many operations could be consolidated (batch/single pairs, diagnostic/cache helpers), so the surface feels over-expanded.

Completeness4/5

Coverage is strong: full transaction lifecycle including batch, splits, and receipt splits; scheduled transaction CRUD; accounts, categories, payees, months, and budgets listing/retrieval; plus analytics and reconciliation helpers. Minor gaps exist (no account update/delete, no direct payee creation), but core workflows are well covered.

Maintenance

ActivityMaintained
ResponsivenessNo recent community issues