Skip to main content
Glama
ninetails-io

gnucash-mcp

update_transactions

DestructiveIdempotent

Bulk-edit GnuCash transactions by supplying per-row TSV values for description, notes, or date, with optional field clearing and error handling.

Instructions

Update MANY transactions with per-row values (bulk edit).

INPUT — updates is a TSV block: header guid plus any of description, notes, date (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 or description,notes) — explicit per row, so a sparse batch can never mass-erase by accident. date is not clearable; a row that sets and clears the same field rejects. Splits and memos are not updatable here (replace_splits)::

guid<TAB>notes<TAB>clear
56926ac2<TAB>Verified subscription<TAB>
7f0fc117<TAB><TAB>notes

One book open, one save; on_error="abort" (default) sinks the batch on any bad row, "skip" keeps good rows. Date moves on transactions with reconciled splits are rejected per row unless force=true (they shift the transaction out of its reconciled statement period). Returns a results TSV keyed by your input guids. This is the canonical update tool for one transaction or many (the former update_transaction tool was removed; this replaces it — same value across many transactions = the same cells repeated per row).

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
forceNo
updatesYes
on_errorNoabort

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
resultYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv1.4.2

TDQS

A5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes well beyond the annotations, explaining that empty cells leave fields unchanged, that clearing requires an explicit per-row 'clear' column, and that setting and clearing the same field in one row is rejected. It also discloses batch-failure semantics, force behavior for reconciled splits, and the one-book-at-a-time save constraint. Nothing contradicts the provided annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but dense, front-loading the core action and then using labeled input examples to convey complex TSV semantics precisely. Conditional rules such as 'date is not clearable' and 'row that sets and clears rejects' are concise one-liners. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a bulk-mutation tool with multiple edge cases, error modes, and exclusions, the description covers input format, optional clearing, alternatives, forced operations, and return format. The mention of a results TSV keyed by input guids, plus the presence of an output schema, completes the picture. Nothing needed for correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description fully compensates by documenting the TSV structure for updates, the optional clear column, date clearability, on_error values, and force semantics. This is far more parameter meaning than the bare schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and scope: 'Update MANY transactions with per-row values (bulk edit)'. It further positions itself as 'the canonical update tool for one transaction or many' and distinguishes it from replace_splits, making its purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly says 'Splits and memos are not updatable here (replace_splits)', naming the alternative tool for that case. It also explains when to use on_error='abort' vs 'skip' and when force=true is required, giving the agent concrete decision guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.