Skip to content
Agentmart
Submit a tool

gnucash-mcp

Talk to your GnuCash books: a financial dashboard, statements reconciled in one call, and invoicing.

Connector by ninetails-io · GitHub account verified by the MCP Registry

IndexedMITLocal (stdio)★ 82
Write a review

Install

Works with Claude Desktop. Read the repository before you give any tool access to your data.

Download the bundle

MCP bundle (.mcpb): open it with Claude Desktop.

Get the weekly diff

The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.

We use your email only for this newsletter. Privacy

About

Talk to your GnuCash books: a financial dashboard, statements reconciled in one call, and invoicing.

Use cases: finance-accounting, payments-billing

No reviews yet. Installed it? Reviews come from verified installers only. How reviews work

Permissions

What this server can do and what it asks for, from its tool list, install config and code. Checked Oct 25, 2026.

Tools
39 read · 34 write · 12 delete · 2 not yet classified
Secrets
None asked for
Install scripts
None found
Runs as
Downloaded binary

Tools by what they do 87

Read from the source code; the running server may list different tools.

Read 39 · Look things up without changing anything.

  • balance_sheet
  • calculate_lot_gain
  • cash_flow
  • debt_payoff_plan
  • get_account
  • get_account_slots
  • get_audit_log
  • get_balance
  • get_book_summary
  • get_budget
  • get_budget_report
  • get_document
Show 27 more tools
  • get_job_report
  • get_latest_price
  • get_lot
  • get_outstanding_documents
  • get_party
  • get_prices
  • get_reconciliation_status
  • get_server_config
  • get_transaction
  • get_unreconciled_splits
  • get_upcoming_transactions
  • income_by_source
  • list_accounts
  • list_billterms
  • list_budgets
  • list_commodities
  • list_documents
  • list_jobs
  • list_lots
  • list_parties
  • list_scheduled_transactions
  • list_taxtables
  • list_transactions
  • net_worth
  • search_transactions
  • spending_by_category
  • vendor_spending_report

Write 34 · Create, change, send or run things.

  • add_document_entry
  • apply_credit_note
  • assign_split_to_lot
  • close_lot
  • create_account
  • create_backup
  • create_billterm
  • create_budget
  • create_commodity
  • create_document
  • create_job
  • create_lot
Show 22 more tools
  • create_party
  • create_price
  • create_prices
  • create_scheduled_transaction
  • create_taxtable
  • create_transaction_from_scheduled
  • create_transactions
  • move_account
  • pay_document
  • post_document
  • replace_splits
  • set_account_slot
  • set_budget_amount
  • set_reconcile_state
  • switch_book
  • unvoid_transaction
  • update_account
  • update_job
  • update_party
  • update_scheduled_transaction
  • update_taxtable
  • update_transactions

Delete 12 · Delete, drop, revoke or wipe things.

  • delete_account
  • delete_account_slot
  • delete_budget
  • delete_document
  • delete_job
  • delete_party
  • delete_price
  • delete_scheduled_transaction
  • delete_taxtable
  • delete_transaction
  • unpost_document
  • void_transaction

Not yet classified 2 · We could not tell from the name and description.

  • enter_statement
  • reconcile_account

Network hosts it talks to 3

  • api.frankfurter.dev · found in code
  • github.com · found in install command, code
  • glama.ai · found in code

Files it touches

  • /Users/stephen/Finances/alex.chen-morales.gnucash
  • /Users/stephen/Projects/gnucash-mcp
  • C:\\Users\\...
  • Any path the agent passes to its tools

Tools (87)

Read from the source code; the running server may differ. Descriptions are the server’s own words; hidden characters are shown as [U+…].

  • add_document_entry

    Add a line item to a customer invoice, vendor bill, employee voucher, or credit note. Only unposted documents accept entries — unpost_document first to amend a posted one. Amounts are decimal strings; the line total is quantity × price (plus tax when a taxtable is attached). Args: document_type: "invoice", "bill", "voucher", or "credit_note". id: Document ID (e.g., "000001"). account: Income account for invoices / credit notes; expense account for bills and vouchers. Account name ("Assets:Checking") or %short guid ("%d53d547"). description: Line item d…

  • apply_credit_note

    Net a posted credit note against a posted invoice or bill from the same owner. No cash moves — the credit balance transfers between lots on the same A/R or A/P account. This is the most common credit-note settlement path: the bookkeeper issues a credit note against an overcharge, then nets it against the next invoice from that customer (or applies it to an outstanding bill on the vendor side). Use ``pay_document`` instead when the credit note will be settled by sending or receiving cash. Args: id: The credit note to apply (must be posted) — the same ``id`` every document tool tak…

  • assign_split_to_lot

    Assign a transaction split to a lot. Use after creating a buy/sell transaction to link the investment account split to its lot for cost basis tracking. Args: split_guid: GUID of the split (from transaction's investment account). 8+ char prefix accepted. lot_guid: GUID of the lot (or 8+ char prefix). Workflow: 1. create_lot("Assets:VTSAX", "VTSAX Jan 2026") 2. create_transactions(...one-row batch buying 10 shares, qty column on the investment leg...) 3. assign_split_to_lot(investment_split_guid, lot_guid)

  • balance_sheet

    Generate a balance sheet as of a specific date. Shows assets, liabilities, and equity with account breakdowns. A = L + E holds by construction; non-zero unrealized P&L appears as a synthetic equity row. Args: as_of_date: Date in ISO format (YYYY-MM-DD). Defaults to today — matching ``get_book_summary``'s implicit cutoff so cross-tool comparisons agree without threading the same date into both calls. Pass an explicit date for historical snapshots.

  • calculate_lot_gain

    Calculate potential or actual capital gain for a lot. If shares and sale_price provided, calculates hypothetical gain. Otherwise uses lot's current state and latest price. Args: lot_guid: Lot GUID (or 8+ char prefix). shares: Optional number of shares to calculate for. Defaults to all remaining shares. sale_price: Optional sale price per share. Defaults to latest price for the commodity.

  • cash_flow

    Calculate cash flow (inflows and outflows) for a period. Scope is BANK and CASH accounts by default. Credit-card and investment movements are not cash flow (they're liability / asset changes — use balance_sheet). An explicit ``account=`` of any type works but the default scope is narrow. Internal transfers (transactions with no INCOME or EXPENSE leg — transfer to savings, currency wallet shuffle, paying a credit card from checking) are filtered by default. The default totals answer "where did money come from and where did it go?" rather than "every debit and credit." Pass ``include_transfers…

  • close_lot

    Mark a zero-balance lot as closed. GnuCash defines a closed lot as one whose assigned quantities sum to zero, and recomputes the flag whenever desktop touches the lot — a lot that still holds shares cannot be closed here and the call refuses, naming the balance. Use this when a lot is fully sold but the flag was never cached. Args: guid: Lot GUID (or 8+ char prefix). Note: Lots are automatically marked closed when their quantity reaches zero through assigned splits. This tool is for manual cleanup.

  • create_account

    Create a new account in the chart of accounts. Args: name: Account name (e.g., "AI Subscriptions"). account_type: One of ASSET, BANK, CASH, CREDIT, EQUITY, EXPENSE, INCOME, LIABILITY, MUTUAL, STOCK, RECEIVABLE, PAYABLE. parent: Parent account. Account name ("Assets:Checking") or %short guid ("%d53d547"). Omit for top-level. description: Optional description. placeholder: Container-only account. Default False. commodity: ISO currency code ("USD") or stock/fund symbol ("VTSAX"). Defaults to book's default currency. commodity_namespace:…

  • create_backup

    Create an on-demand backup of the GnuCash book. Uses SQLite's online backup API so the snapshot is safe even if the book is being read or written concurrently by GnuCash desktop. Verifies the copy with ``PRAGMA integrity_check`` before declaring success; a failed check deletes the bad backup and raises. Manual backups are kept indefinitely — automatic retention (session / weekly / monthly stages) does not touch them. A call made while the book is unchanged since the last manual backup writes nothing and answers ``status: unchanged`` with that backup's path. To review or remove backups, the u…

  • create_billterm

    Create a new billing term. Args: name: Billterm name (e.g., "Net 30"). due_days: Number of days until payment is due. Default 30. description: Optional description. discount_days: Days within which early discount applies. discount_percent: Early payment discount percentage (e.g., "2" for 2%).

  • create_budget

    Create a new budget. Args: name: Budget name (e.g., "2026 Budget"). year: Budget year. Defaults to current year. Ignored when ``start_date`` is provided. num_periods: Number of periods. Default 12 (monthly for a year). period_type: Period length: - "monthly" (default) - "quarterly" - "weekly" description: Optional description. start_date: Optional ISO date (YYYY-MM-DD) when the budget's first period begins. When omitted, falls back to January 1 of ``year``. Use this to author a historical budget for comparison aga…

  • create_commodity

    Create a new commodity (stock, mutual fund, etc.). Args: mnemonic: Symbol (e.g., "VTSAX"). Unique within namespace. fullname: Human-readable name. namespace: "FUND" (default) for mutual funds, "NASDAQ"/"NYSE"/ "AMEX" for stocks, or any custom string. fraction: Smallest fractional unit. 1 = whole units, 100 = 2 decimals, 10000 = 4 decimals (default, shares), 1000000 = 6 decimals (crypto). Omit it for namespace "CURRENCY": a currency is GnuCash's, from the ISO 4217 table (USD 100, JPY 1), and a fraction that disagrees is refused. O…

  • create_document

    Create a customer invoice (accounts receivable), vendor bill (accounts payable), employee expense voucher, or credit note (credit memo). The owner side derives from the document type — invoice → customer, bill → vendor, voucher → employee. Credit notes exist on both sides, so they alone require ``party_type`` ("customer" or "vendor"). After creating, add line items with add_document_entry, then post_document to put it on the books. Args: document_type: "invoice", "bill", "voucher", or "credit_note". owner_id: The owning party's ID (customer ID for invoices, vendor ID …

  • create_job

    Create a job for a customer or vendor. A job groups invoices (or bills) from one counterparty under a project-level container. Useful when a single customer has multiple distinct engagements (e.g., 'API Rewrite' and 'Q3 Maintenance') that should be reported on separately even though invoices flow to the same A/R. Args: owner_id: Customer or vendor ID (e.g., "000001"). party_type: "customer" or "vendor". Employees are not supported (no GnuCash desktop UI for employee jobs). name: Human-readable job name (e.g., "API Rewrite"). reference: Optional reference strin…

  • create_lot

    Create a new, empty lot for cost basis tracking. Additive: the lot starts open with no splits attached, and nothing else in the book changes. A lot groups one purchase with its later sales so cost basis and capital gain compute per purchase. The full flow: create_lot → create_transactions (the buy, a one-row batch) → assign_split_to_lot → calculate_lot_gain; the lot auto-closes when its assigned splits net to zero shares. Errors if the account ref matches nothing. Skip this tool when you only want a valuation — get_book_summary and balance_sheet price holdings without lots. Args: account…

Show 72 more tools
  • create_party

    Create a customer (client), vendor (supplier, contractor, payee), or employee record. Additive: each call creates a fresh party — names are NOT checked for duplicates, so list_parties first when unsure. Returns the assigned ID (e.g., "000001"), the handle every later call wants. ID counters are PER TYPE: customer 000001 and vendor 000001 are different parties, which is why party_type is required everywhere. Args: party_type: "customer" (a client who pays you — accounts receivable), "vendor" (a supplier, contractor, or payee you pay — accounts payable), or "employee" …

  • create_price

    Record a price for a commodity (stock, NAV, exchange rate). GnuCash keeps ONE price per pair per day, and so does this tool. ``status`` says what happened: ``created``; ``updated`` (the same source, rewritten); ``replaced`` (the day's price from a lower-ranked source, or quoted the other way round, gave way); or ``kept`` — NOTHING WAS WRITTEN, because the day already has a price from a source that outranks this one (``note`` and ``existing`` say which). Sources rank in the order listed under ``source`` below: a feed quote ("Finance::Quote") outranks the default "user:price", and "user:price-e…

  • create_prices

    Record MANY prices in one call (bulk quote entry). INPUT — ``prices`` is a TSV block: a header row, then one row per price. Required columns ``ref, commodity, date, value``; optional columns extend the header IN ORDER: ``ns, cur, source, type`` (stop anywhere; rows may end early; empty cells take defaults):: ref<TAB>commodity<TAB>date<TAB>value<TAB>cur<TAB>source 1<TAB>VTSAX<TAB>2026-07-21<TAB>148.32<TAB><TAB>web:yahoo 2<TAB>EUR<TAB>2026-07-21<TAB>1.0845<TAB><TAB>web:ecb - ``ref``: your correlation key, echoed in results. - ``ns``: commodity namespace; empty auto-resolves when t…

  • create_scheduled_transaction

    Create a recurring transaction template. Stored in GnuCash's own template format, so the schedule shows in GnuCash desktop's editor and its Since-Last-Run posts it. Schedules made in desktop can be instantiated here. Args: name: Scheduled transaction name (e.g., "Monthly Rent"). description: Transaction description at instantiation. splits: List of split dicts, e.g. ``[{"account": "Expenses:Rent", "amount": "1850.00"}, ...]``. ``amount`` / ``quantity`` must be decimal strings; ``quantity`` is required when an account's commodity differs from the te…

  • create_taxtable

    Create a new sales-tax table. A taxtable holds one or more entries. Each entry contributes either a percentage rate or a flat-value surcharge routed to a specific GL account (ASSET for input-tax credit, LIABILITY for output sales tax payable). Multi-entry composites (e.g., GST 5% + PST 7%) post one tax split per tax account, each the document's tax for that account rounded once, the way GnuCash desktop totals an invoice. Args: name: Taxtable name, unique within the book (e.g., "CA Sales 7.25%", "BC GST+PST"). entries: List of {type, amount, account} dicts. ``type``: "…

  • create_transaction_from_scheduled

    Create an actual transaction from a scheduled template. Args: guid: Scheduled transaction GUID (or 8+ char prefix). transaction_date: Date for the transaction. Defaults to the oldest occurrence not yet entered — the overdue one if the dashboard reports one, else the next due. Call again to walk forward through missed periods. Any schedule still stored in the pre-native shape is migrated on this call, nothing posted for the others (``templates_migrated`` in the response).

  • create_transactions

    Create transactions in one atomic command (bulk entry) — the canonical entry tool for one transaction or many. A single transaction is a one-row batch (the former ``create_transaction`` tool was removed; this replaces it). INPUT — ``transactions`` is a TSV block: a header row, then one row per transaction. The HEADER DECLARES THE LAYOUT. Base form: splits are ``(amount, account)`` column PAIRS, repeated as wide as a transaction needs:: ref<TAB>date<TAB>description<TAB>amt1<TAB>acct1<TAB>amt2<TAB>acct2... 1<TAB>2026-05-21<TAB>Gas<TAB>-54.19<TAB>Assets:Checking<TAB>54.19<TAB>Expenses:A…

  • debt_payoff_plan

    Calculate an avalanche-method debt payoff schedule with YETI multiplier. Auto-discovers CREDIT/LIABILITY accounts that have an 'apr' slot set. Set APRs via set_account_slot (e.g., set_account_slot("Liabilities:Visa", "apr", "23.49")). Assumptions the schedule is computed under: interest compounds monthly at apr/12 on the running balance; one payment per debt per month starting this month; extra budget beyond the minimums goes to the highest-APR debt first (avalanche); balances are as of today in the book default currency; amounts round to 0.01. Debts the plan cannot include are CONFESSED in …

  • delete_account

    Delete an account from the chart of accounts. Safeguards prevent deletion if the account has children or transactions. Args: name: Account to delete. Account name ("Assets:Checking") or %short guid ("%d53d547").

  • delete_account_slot

    Remove one custom metadata slot from an account. Permanent, and surgical: only the named key is deleted — other slots, the account, and its transactions are untouched. Errors, changing nothing, if the account ref or key doesn't exist, if the key contains '/' (reserved for internal hierarchical slots; user slots are flat), or if the key is GnuCash's own data rather than a custom string (reconcile-info, ofx, import-map, placeholder, …). set_account_slot re-creates a removed key. Args: account: Account name ("Assets:Checking") or %short guid ("%d53d547"). key: Slot key to remove.

  • delete_budget

    Delete a budget and every per-period amount set on it. Permanent — there is no undo and no archive state. Only the plan is removed: transactions and account balances are untouched (budgets are plans, not postings). Errors, changing nothing, if the name matches no budget — list_budgets shows what exists, exact and case-sensitive. To retire a budget while keeping its numbers readable, simply stop reporting on it instead of deleting. Args: name: Budget name (exact, case-sensitive).

  • delete_document

    Delete an UNPOSTED customer invoice, vendor bill, employee voucher, or credit note. Posted documents are on the books — unpost_document first (payments block unposting; the audit trail outranks tidiness). Args: document_type: "invoice", "bill", "voucher", or "credit_note". id: Document ID (e.g., "000001"). party_type: Owner side, credit notes only — pass it when a credit note's ID collides with a document of the same ID on the other side (ID counters are per type).

  • delete_job

    Delete a job. Refuses by default when invoices/bills are linked to the job (data-loss prevention). ``force=True`` re-parents every linked invoice back to its underlying customer or vendor before deleting the job row, preserving invoice history. Use ``update_job(active=False)`` instead if you want to keep the job in place but mark the project done. Args: job_id: Job ID. force: If True, re-parent linked invoices instead of refusing. Default False.

  • delete_party

    Delete a customer, vendor, or employee. Blocked while the party has documents (invoices, bills, vouchers, credit notes) — the audit trail outranks tidiness. Prefer update_party(active=false) to retire a party while keeping its history. Args: party_type: "customer", "vendor", or "employee" (ID counters collide across types — always required). id: Party ID (e.g., "000001").

  • delete_price

    Delete a single price entry. Identifies the price by ``(commodity, namespace, date)``. Pass ``source`` to disambiguate when multiple prices exist on the same commodity+date (e.g. one user-entered and one fetched from a feed). Args: commodity: Symbol (e.g., "VTSAX", "USD", "EUR"). namespace: Namespace (e.g., "FUND", "CURRENCY"). date: ISO date (YYYY-MM-DD) of the price to delete. source: Optional source tag (e.g., "user:price", "user:yfinance"). Required when multiple prices exist on the same commodity+date.

  • delete_scheduled_transaction

    Delete a scheduled transaction. Does not affect transactions already created from this schedule. Args: guid: Scheduled transaction GUID (or 8+ char prefix).

  • delete_taxtable

    Delete a sales-tax table. Refuses when any Entry row references the taxtable (computed via SQL on the entries table). Voided invoices still pin their taxtables — voided entry rows persist for audit-trail purposes. Remove or re-assign referencing entries first. Args: name: Taxtable name.

  • delete_transaction

    Delete one transaction by GUID — or several in one call. Safeguards prevent deletion if a transaction has reconciled splits or splits in lots — a lot split is cost basis or an invoice payment, and deleting it reopens the lot (force=true overrides either) — or is an invoice's posting record (unpost_document first). Pass a LIST of GUIDs to delete several in one book open / one save. The batch is all-or-nothing: every guid is validated before anything is deleted, so a bad guid rejects the whole call with nothing removed. Response for a list is ``{status, count, transactions: [{guid, description…

  • enter_statement

    Enter a COMPLETE bank/card statement in one atomic call: create the new lines, claim the ones already in the book, and reconcile everything against the closing balance — all in one save, or nothing at all. THE WORKFLOW (two calls around your judgment): 1. ``dry_run=true`` (the DEFAULT) — transcribe the statement and get back a classification of every line: NEW (not in the book), MATCH (an existing unreconciled split corresponds), OVERLAP (already reconciled), AMBIGUOUS (several candidates). MATCH/AMBIGUOUS rows come with the candidate's full annotation (date, amount, descripti…

  • get_account

    Get details for one account: type, commodity, description, placeholder flag, GUID, and hierarchy position. Read-only. Returns ``{"error": "Account not found: ..."}`` when the ref matches nothing — nothing raises. Use list_accounts to discover refs in bulk, get_balance when you only need a number, get_account_slots for custom metadata (APR, credit_limit, ...). Args: name: Account name ("Assets:Checking") or %short guid ("%d53d547").

  • get_account_slots

    Read slots (custom metadata) from an account. Slots are key-value pairs stored on accounts for metadata like APR, credit limit, reward rates, or any custom data. Args: account: Account name ("Assets:Checking") or %short guid ("%d53d547"). key: Specific slot key to retrieve. If omitted, returns all slots.

  • get_audit_log

    Read audit log entries for a date. Returns the human-readable text audit log, led by a ``Showing X-Y of Z audit entries (date)`` indicator. Each write operation (CREATE, UPDATE, DELETE, VOID, RECONCILE, etc.) is one entry separated by a blank line. Reads are not logged. Unlike the row-list tools, the window is anchored to the most recent entry: ``offset`` pages *backward* into history (offset=0 is the newest page), since "what happened lately" is the usual question. ``limit=0`` returns the count only. Args: log_date: Date to read (YYYY-MM-DD). Defaults to today. limit: Page size (de…

  • get_balance

    Get the balance of an account as of a specific date. Defaults to today's date — future-dated transactions (scheduled payments, accrued interest) are excluded. To project a balance forward including future entries, pass an explicit ``as_of_date`` past today. Args: account_name: Account name ("Assets:Checking") or %short guid ("%d53d547"). as_of_date: Date in ISO format (YYYY-MM-DD). Defaults to today.

  • get_book_summary

    Get a compact overview of the entire GnuCash book. Returns book path, currency, account structure, transaction counts, key balances, net worth, commodities, and scheduled transactions in a single text response. Use this first to orient yourself.

  • get_budget

    Get full details of a budget including all budget amounts. Returns a compact text table by default — collapses uniform periods (e.g., ``"250/mo (all periods)"``) so the typical 12-cell repeat doesn't dominate the response. Use verbose=true for the full structured ``periods`` dict per account. Args: name: Budget name. verbose: If false (default), compact text output — optimized for reading and token efficiency. If true, structured JSON, for when you need machine-readable fields rather than a report.

  • get_budget_report

    Compare actual spending against budget. Returns a compact text table by default with ⚠ markers on categories exceeding budget. A budget with both income and expense targets closes with INCOME / EXPENSES / NET lines rather than one TOTAL. Use verbose=true for the full structured dict. Args: budget_name: Name of the budget. period: Which period to report: - None: Current period based on today's date (default) - Integer 0-11: Specific period - "ytd": Year to date (all periods up to current) - "all": All periods account: Optional filter to one account …

  • get_document

    Get full details for a customer invoice, vendor bill, employee voucher, or credit note, including line items. Returns all entries with quantities, prices, and totals; the response's ``type`` field names the document kind. The response carries ``status`` (open = editable, not yet booked; posted = on the books, balance owed; paid = balance zero; applied = a credit note fully consumed against its target) and, once posted, ``amount_paid`` and ``amount_due`` from the same lot arithmetic ``get_outstanding_documents`` uses; ``overpaid: true`` marks a negative balance. A paid document keeps its amou…

  • get_job_report

    Per-job summary: billed / paid / outstanding totals across all linked invoices, plus the per-invoice breakdown. Totals are returned as ``totals_by_currency`` (a dict keyed by ISO currency code) so the same shape works whether the job's invoices share a currency or span multiple. Both posted and unposted (draft) invoices are included — drafts contribute their face value as ``billed`` + ``outstanding`` with ``paid=0``, so the report shows the full pipeline. Args: job_id: Job ID (e.g., "000001").

  • get_latest_price

    Get the most recent price for a commodity. Args: commodity: Symbol of the commodity (e.g., "VTSAX"). namespace: Namespace of the commodity (e.g., "FUND"). currency: Currency for the price. Defaults to the book's default currency. Pass explicitly to get a price quoted in a non-default currency. Returns: JSON with date, value, type, and source of most recent price. Returns null if no price exists.

  • get_lot

    Get detailed information about a lot. Args: guid: Lot GUID (or 8+ char prefix). Returns: JSON with lot details including all splits: - title, notes, is_closed - splits: list of all splits with date, quantity, value - summary: total quantity, cost basis, cost per share

  • get_outstanding_documents

    Get all posted customer invoices, vendor bills, employee vouchers, and credit notes with outstanding balances. This is the authoritative unpaid list: outstanding = posted with a remaining balance > 0. One call answers "what is actually unpaid?" — no need to combine ``list_documents`` and ``get_document`` (full status vocabulary on ``list_documents``). Leads with a ``Showing X-Y of Z invoices (date range)`` line, then a compact one-line-per-doc format by default with action columns (due date, days past due, currency, BILL tag, owner). Sorted most-overdue-first so the bookkeeper sees the urgen…

  • get_party

    Get details for one customer, vendor, or employee by ID. Args: party_type: "customer", "vendor", or "employee" — required because ID counters collide across types (customer 000001 ≠ vendor 000001). id: Party ID (e.g., "000001"). This is the human-readable ID shown in GnuCash, not the internal GUID.

  • get_prices

    Get price history for a commodity. Leads with a ``Showing X-Y of Z prices (date range)`` line, then a compact aligned text table by default. Page with ``offset``; ``limit=0`` returns the count only. Use verbose=true for the full structured envelope (``prices`` list, ``showing``, ``total``, ``offset``, ``count``). Args: commodity: Symbol of the commodity (e.g., "VTSAX"). namespace: Namespace of the commodity (e.g., "FUND"). start_date: Optional start date filter (YYYY-MM-DD). end_date: Optional end date filter (YYYY-MM-DD). currency: Optional currency filter (e.g., "USD").…

  • get_reconciliation_status

    Per-account reconciliation table behind the dashboard's aggregate counts — answers "WHICH accounts are never reconciled / dormant / behind?" One line per reconcilable account with activity, bucketed exactly as the dashboard classifies them: ``behind`` (most-behind first, with pending-split counts), ``never``, ``current``, ``dormant`` ($0, fully reconciled, idle), and ``excluded`` (opted out via the account's ``no_reconcile`` slot — the right setting for loans, escrow payables, and other statement-less accounts: set_account_slot(account, "no_reconcile", "1"). Reporting-only; reconcile tools st…

  • get_server_config

    Get the server's loaded configuration. Returns loaded modules, tool count, book path, debug mode, and version. Use this to verify which tools are available in this session.

  • get_transaction

    Get details for a specific transaction by GUID. Returns its splits (account, value, quantity, memo, ``action``, reconcile state) and, when set, ``notes``, ``num`` (GnuCash's Num column) and ``doc_link`` (the transaction's document link). In a book with "Use Split Action Field for Number" on, a register's Num is that account's split ``action``. Args: guid: Transaction GUID (32-character hex string, or 8+ char prefix)

  • get_unreconciled_splits

    Get unreconciled splits for an account. Leads with a ``Showing X-Y of Z splits`` indicator, then one line per split, then a summary footer reflecting the **full** unreconciled set (so the headline is honest even when individual lines are clipped). Page with ``offset``; ``limit=0`` returns the count only. Use verbose=true for structured JSON with split GUIDs, amounts, totals, and the ``showing`` indicator as a structured field. Args: account: Account name ("Assets:Checking") or %short guid ("%d53d547"). as_of_date: Only include splits on or before this date (YYYY-MM-DD) verbose: …

  • get_upcoming_transactions

    Get scheduled transactions due within a time window. This is the "what bills are coming up?" query. Leads with a ``Showing X-Y of Z upcoming transactions (date range)`` line, soonest first. Overdue occurrences (due date passed, never entered) lead the list, marked ``N days overdue``; each schedule appears once, at its oldest un-entered date, which is the date ``create_transaction_from_scheduled`` posts by default. Page with ``offset``; ``limit=0`` returns the count only. Args: days: Look ahead window in days. Default 14. verbose: If false (default), compact text output — optimized …

  • income_by_source

    Get income breakdown by source for a period. Returns a compact aligned text table by default. Use verbose=true for the structured dict. Args: start_date: Start of period (YYYY-MM-DD) end_date: End of period (YYYY-MM-DD) depth: Hierarchy depth for grouping (1 = top-level categories, 2 = subcategories) verbose: If false (default), compact text output — optimized for reading and token efficiency. If true, structured JSON, for when you need machine-readable fields rather than a report. group_by: Optional "month", "quarter", or "year" — split the …

  • list_accounts

    List all accounts in the GnuCash chart of accounts. Leads with a ``Showing X-Y of Z accounts`` line, then a compact one-line-per-account format by default. Page with ``offset``; ``limit=0`` returns the count only. Use verbose=true for full JSON with guid, type, commodity, etc. To FIND an account without paging the whole chart, pass ``query`` — a case-insensitive substring matched against each account's full path and description (e.g. query="grocer" or query="4930" on a numbered chart). Results emit %short GUIDs that every account-taking tool accepts. For searching transactions by text or amo…

  • list_billterms

    List all billing terms. Leads with a ``Showing X-Y of Z billterms`` line, then a compact one-line-per-term format by default. Page with ``offset``; ``limit=0`` returns the count only. Use verbose=true for full JSON with guid, discount details, etc. Args: verbose: If false (default), compact text output — optimized for reading and token efficiency. If true, structured JSON, for when you need machine-readable fields rather than a report. limit: Page size (default 50, max 250). 0 = count only. offset: 0-indexed first row to return (default 0).

  • list_budgets

    List all budgets in the book. Leads with a ``Showing X-Y of Z budgets`` line, then a compact one-line-per-budget format by default. Page with ``offset``; ``limit=0`` returns the count only. Use verbose=true for the full JSON envelope. Args: verbose: If false (default), compact text output — optimized for reading and token efficiency. If true, structured JSON, for when you need machine-readable fields rather than a report. limit: Page size (default 50, max 250). 0 = count only. offset: 0-indexed first row to return (default 0).

  • list_commodities

    List all commodities (currencies, stocks, etc.) in the book. Leads with a ``Showing X-Y of Z commodities`` line, then a compact one-line-per-commodity format by default. Page with ``offset``; ``limit=0`` returns the count only. Use verbose=true for structured JSON with fraction, latest prices, etc. THE PRICE-UPDATE WORK LIST: ``stale_days=30, held_only=true`` returns exactly the commodities needing fresh quotes, each marked ``Nd stale`` or ``no price on file``. Look the quotes up, then record them all in one ``create_prices`` call. Args: verbose: If false (default), compact text output …

  • list_documents

    List customer invoices, vendor bills, employee vouchers, and credit notes. Leads with a ``Showing X-Y of Z invoices (date range)`` line, then a compact one-line-per-invoice format by default. Page with ``offset``; ``limit=0`` returns the count only. Use verbose=true for structured JSON with GUIDs, dates, notes, etc. Status vocabulary (shared by every invoice/bill tool): **open** = created and editable, not yet booked to A/R//A/P — not payable. **posted** = booked to A/R//A/P with a lot tracking its balance — payable. **paid** = posted with a zero remaining balance (lot closed); a credit note…

  • list_jobs

    List jobs, optionally filtered. Leads with a ``Showing X-Y of Z jobs`` line; page with ``offset``, or pass ``limit=0`` for the count only. Pass ``id`` for one job's full details (name, owner, active state, linked invoice/bill IDs) — the exact-lookup mode that replaced ``get_job``. Args: id: Job ID for a single-job detail lookup (e.g., "000001"). All other filters are ignored. party_type: Filter by "customer" or "vendor". Omit for all. owner_id: Filter by specific customer or vendor ID (requires party_type). active_only: If True (default), exclude inac…

  • list_lots

    List all lots for an investment account. Leads with a ``Showing X-Y of Z lots`` line, then a compact one-line-per-lot format by default. Page with ``offset``; ``limit=0`` returns the count only. Use verbose=true for full JSON with guid, title, notes, etc. Args: account: Account name ("Assets:Checking") or %short guid ("%d53d547"). include_closed: If True, include fully-sold lots. Default False. verbose: If false (default), compact text output — optimized for reading and token efficiency. If true, structured JSON, for when you need machine-readable fields rather …

  • list_parties

    List customers, vendors, and/or employees. Leads with a ``Showing X-Y of Z`` line per type, then a compact one-line-per-party format by default. Page with ``offset``; ``limit=0`` returns the count only. Use verbose=true for full JSON with guid, address, notes, etc. Args: party_type: "customer", "vendor", or "employee". Omit for all three (sections in that order). active_only: If True, only show active parties. Default True. verbose: If false (default), compact text output — optimized for reading and token efficiency. If true, structured JSON, for when you …

  • list_scheduled_transactions

    List all scheduled transactions. Leads with a ``Showing X-Y of Z scheduled transactions`` line, then a compact one-line-per-schedule format by default. Page with ``offset``; ``limit=0`` returns the count only. Use verbose=true for structured JSON with GUIDs, splits, dates, etc. Args: enabled_only: If True, only show enabled schedules. Default True. verbose: If false (default), compact text output — optimized for reading and token efficiency. If true, structured JSON, for when you need machine-readable fields rather than a report. limit: Page size (default …

  • list_taxtables

    List all sales-tax tables, or get one by name. Leads with a ``Showing X-Y of Z taxtables`` line. Compact format (default): one line per taxtable with name, entry count, and per-entry rate→account routing. Page with ``offset``; ``limit=0`` returns the count only. Verbose: structured JSON with resolved account paths and refcount. Args: name: Tax table name for a single-table detail lookup (entries, rates, account routing, refcount). All other parameters are ignored. verbose: If false (default), compact text output — optimized for reading and token efficiency. If…

  • list_transactions

    List transactions with optional filters. Leads with a ``Showing X-Y of Z transactions (date range)`` line so a truncated view is never mistaken for the whole set. Page with ``offset``; ``limit=0`` returns the count only. Compact format (default): - Unfiltered: ``DATE<TAB>guid<TAB>Description<TAB>splits`` - Filtered by account (register form): ``DATE<TAB>guid<TAB>±Amount<TAB>Description<TAB>other splits`` Column 3 is the signed impact on the filtered account; that account is dropped from the splits column. - Either form then adds the notes when present, and a labeled ``num:<number>`` …

  • move_account

    Move an account — children and balances ride along — under a new parent in the hierarchy. No transaction data changes: only the account's position (and therefore every descendant's full path) is rewritten. Errors, changing nothing, if either ref matches no account, if the move would create a cycle (new parent is the account itself or one of its descendants), or if the new parent already has a child of the same name. %short GUIDs survive the move; saved full paths do not. Use update_account to rename in place instead of moving. Args: name: Account to move. Account name ("Assets:Checking")…

  • net_worth

    Calculate net worth (assets minus liabilities), as one value or a trajectory. Read-only. Valuation is as-of: each date values holdings at the latest market rate on or before it, in the book's default currency; voided transactions are excluded. end_date alone gives one number; add start_date + interval for a series (one value per interval step from start_date, end_date always included as the last row). For the full A = L + E statement with per-account detail, use balance_sheet; this tool is the headline number and its trend. The dashboard's trajectory section is this same calculation. Args: …

  • pay_document

    Record a payment against a posted customer invoice (receive a customer payment), vendor bill (pay a supplier), employee voucher (reimburse an employee), or credit note (refund). Handles partial payments, early-payment discounts, cross-currency FX gain/loss, and prepayments. Creates a payment transaction from the specified bank/cash account to the document's A/R or A/P account. Partial payments are supported: the response's ``payment`` is this call's amount, ``total_paid`` is cumulative across all payments, and ``remaining_balance`` is what is still owed; ``status`` is ``partial`` until the ba…

  • post_document

    Post a customer invoice, vendor bill, employee voucher, or credit note to A/R or A/P. Posting creates a transaction in the A/R or A/P account and makes the invoice official. Once posted, entries cannot be added. For a foreign-currency document, the exchange rate is etched at posting and cannot be updated retroactively. If the latest price for the invoice currency is more than 7 days from the post date (the ``GNUCASH_FX_GUARD_DAYS`` window), posting is refused with a ``stale_fx_rate`` error — run ``create_price`` for a rate near the post date, then retry, or pass ``force=True`` to post with t…

  • reconcile_account

    Reconcile splits against a statement balance. SIGN CONVENTION: statement_balance is the ACCOUNT's balance in GnuCash's signs — for liability accounts (credit cards) a $5,000 owed balance is "-5000", not "5000". Two modes: - **Targeted** (`split_guids=[...]`): reconcile exactly the listed splits (SPLIT guids from get_unreconciled_splits, not transaction guids). Use when statement and book disagree and you need to pick a subset. - **Bulk** (`reconcile_all=true`): reconcile every unreconciled split dated on or before through_date (default: statement_date — a statement reconciliation …

  • replace_splits

    Replace all splits in a transaction with a new set. Replace all splits in a transaction with a completely new set. The transaction's currency, description, date, and notes are preserved. New splits must balance to zero. A new split that reproduces an existing one (same account, amount, and quantity) is an UNCHANGED leg: it keeps the old split's memo (supply a memo to override) and its reconcile state. So recategorizing the expense leg of a reconciled bank transaction is safe — resubmit the bank leg as-is and only the changed leg resets. Args: guid: Transaction GUID (32-character hex str…

  • search_transactions

    Search transactions by description, memo, notes, num, or amount. Compact format (default): ``DATE<TAB>guid<TAB>Description<TAB>splits``, then the notes when present and a labeled ``num:<number>`` cell when the transaction has a Num. In a book with "Use Split Action Field for Number" on, that cell reads ``tnum:`` (the transaction's T-Num) and each leg's number follows it in the splits as ``#<number>``. Transactions with more than 4 splits collapse to the top 3 by |value| plus ``+N more`` — call ``get_transaction`` for the full breakdown. Leads with a ``Showing X-Y of Z transactions`` line; pag…

  • set_account_slot

    Set a custom metadata slot on an account. Stores a key-value pair on the account. Values are stored as strings. Use for APR, credit limits, reward rates, or any per-account metadata. Args: account: Account name ("Assets:Checking") or %short guid ("%d53d547"). key: Slot key (e.g., "apr", "credit_limit"). GnuCash's own keys (reconcile-info, lot-mgmt, ofx, import-map, placeholder, hidden, …) are refused; use update_account for placeholder. value: Slot value (always stored as string).

  • set_budget_amount

    Set a budget target for an account. Args: budget_name: Name of the budget. account: Account name ("Assets:Checking") or %short guid ("%d53d547"). amount: Monthly budget amount as string (e.g., "500.00"), as a magnitude for every account type — "5000" on an income account means 5,000 expected in. The server stores GnuCash's natural sign underneath. period: Which period(s) to set: - None or "all": Set same amount for all periods (default) - Integer 0-11: Set specific period (0 = January for yearly budget) - "q1", "q2", "q3", "q4": …

  • set_reconcile_state

    Set the reconciliation state for a split. Args: split_guid: GUID of the split to update (32-character hex string, or 8+ char prefix) state: New reconcile state: 'n' (new), 'c' (cleared), 'y' (reconciled) reconcile_date: Date in ISO format (YYYY-MM-DD). Required for 'y', defaults to today.

  • spending_by_category

    Get spending breakdown by expense category for a period. Returns a compact aligned text table by default. Use verbose=true for the structured dict (programmatic consumers, plotting). Args: start_date: Start of period (YYYY-MM-DD), inclusive. No calendar snapping — for calendar-month figures pass full month boundaries (e.g. 2026-05-01 to 2026-07-31). end_date: End of period (YYYY-MM-DD), inclusive. depth: Hierarchy depth for grouping (1 = top-level categories, 2 = subcategories) verbose: If false (default), compact text output — optimized for reading an…

  • switch_book

    Switch the active GnuCash book (multi-book sessions only). All subsequent tool calls — and the audit/debug logs — operate on the newly-selected book until the next switch. Only present when GNUCASH_BOOK_PATH lists 2+ books.

  • unpost_document

    Reverse a posted customer invoice, vendor bill, employee voucher, or credit note (each keeps its type through the round-trip). Deletes the posting transaction and clears the document's posted-state metadata. The document returns to "open" state and can be edited or re-posted. Payments are kept, as GnuCash keeps them: the money stays on the books as the party's unapplied payment (``payments_kept`` in the response), and after re-posting the document is settled from it with ``pay_document(from_prepayment=true)``. Do NOT void a payment in order to unpost — the bank line is real. A credit-note ap…

  • unvoid_transaction

    Restore a voided transaction to its pre-void amounts. The inverse of void_transaction: original split values come back from the slots the void stored, and the void markers and reason are cleared. The notes it had before the void come back; a transaction that had none keeps the void's note, as in GnuCash. All-or-nothing — if any split's stored void data is missing, the tool errors and restores nothing (no partial resurrection). Errors too if the transaction isn't found or isn't voided. Restored splits return as UNreconciled ('n'), so a previously reconciled transaction needs reconciling again …

  • update_account

    Update an existing account's properties. Args: name: Account to update. Account name ("Assets:Checking") or %short guid ("%d53d547"). new_name: New name for the account (just the leaf name, not full path) description: New description placeholder: New placeholder status (true = container only) account_type: New account type (e.g., "CREDIT", "BANK"). Only changes within the same debit/credit polarity are allowed — e.g., LIABILITY to CREDIT, ASSET to BANK. Cross-polarity changes (e.g., ASSET to LIABILITY) are blocked. notes: New notes (max 4096 byt…

  • update_job

    Update a job's name, reference, or active state. Any subset of fields can be passed; unspecified fields are left unchanged. Returns a diff-style response. Args: job_id: Job ID. name: New name (optional). reference: New reference (optional). active: New active flag — pass False to deactivate a completed job without deleting it (preserves history).

  • update_party

    Update a customer's, vendor's, or employee's mutable fields. ``None`` = no change on every parameter; pass an empty string to clear ``notes``. Returns a diff-style response with the changed fields only. Args: party_type: "customer", "vendor", or "employee" (ID counters collide across types — always required). id: Party ID (e.g., "000001"). name: New display name. currency: New ISO currency code (future documents only). notes: New notes; "" clears. Employees have no notes field — rejected, not ignored. active: Set active/inactive (inactive parties hide …

  • update_scheduled_transaction

    Update a scheduled transaction. Any schedule still stored in the pre-native (1.2–1.4.4) shape is converted to GnuCash's template format on this call, nothing posted. A call with no changes is the deliberate one-step conversion of a whole book: run it once after upgrading, before the next GnuCash desktop session. Args: guid: Scheduled transaction GUID (or 8+ char prefix). enabled: Enable or disable. start_date: ``"YYYY-MM-DD"`` to move the schedule's start — what desktop's Scheduled Transaction Editor does. The start is the recurrence's phase anchor, so a m…

  • update_taxtable

    Update a sales-tax table's name and/or entries. Diff-style response: only changed fields are returned. **Entry replacement on a taxtable that's already in use** is destructive to FUTURE entries' tax math. Existing posted invoices retain their original splits (splits are stored, not derived), but new entries on any document will use the replacement entries' rates. When refcount > 0 and ``entries`` is given, ``force=True`` is required to proceed. Args: name: Current taxtable name. new_name: New name (optional). entries: Replacement entry list (optional). Same shape and val…

  • update_transactions

    Update MANY transactions with per-row values (bulk edit). INPUT — ``updates`` is a TSV block: header ``guid`` plus any of ``description``, ``notes``, ``date``, ``num`` (GnuCash's Num column), ``link`` (the document link) — at least one — then one row per transaction:: guid<TAB>description<TAB>notes 56926ac2<TAB>PayPal Credit Payment<TAB>Resolved — card payment 7f0fc117<TAB><TAB>Netflix subscription, $22.10/mo An EMPTY cell leaves that field UNCHANGED. To blank a field, opt in with a ``clear`` column: its cell names the fields to clear on that row (``notes``, ``num,link``, …) — e…

  • vendor_spending_report

    Get spending breakdown by vendor for a period. Analyzes posted vendor bills to show total billed, total paid, and outstanding amounts per vendor. Returns a compact aligned text table by default. Use verbose=true for the structured dict (programmatic consumers). Args: start_date: Start of period (YYYY-MM-DD). end_date: End of period (YYYY-MM-DD). vendor_id: Optional filter to a specific vendor. verbose: If false (default), compact text output — optimized for reading and token efficiency. If true, structured JSON, for when you need machine-readable fields rathe…

  • void_transaction

    Void a transaction (proper accounting void, not delete). Voiding preserves the transaction for audit purposes but zeroes out all split values. Use this instead of delete when you need to maintain an audit trail. An invoice's or bill's posting transaction cannot be voided (it is read-only, as in GnuCash): use unpost_document. A PAYMENT can be voided, e.g. when it bounces. Args: guid: Transaction GUID to void (32-character hex string, or 8+ char prefix) reason: Reason for voiding (required for audit trail) force: Void even though a split is reconciled. Refused without it; …

Compare and alternatives

    Featured in

    Signals

    Stars
    82
    Forks
    14
    Open issues
    0
    Contributors
    4
    Last commit
    Oct 8, 2026 (20 days ago)
    Last release
    Oct 9, 2026 (19 days ago)

    From GitHub (fetched Oct 24, 2026).

    Details

    Registry name
    io.github.ninetails-io/gnucash-mcp
    Version
    1.5.0
    Auth
    No auth
    License
    MIT
    First seen
    Oct 24, 2026
    Last checked
    Oct 24, 2026
    Cite this page

    gnucash-mcp. Agent Mart. https://agentmart.dev/connectors/ninetails-io-gnucash-mcp (last updated 2026-10-24)