Skip to main content
Glama

update_transaction

Update an existing transaction by ID. All fields except id are optional — only provide what you want to change. Pass tagIds: null to clear all tags, or tagIds: [] to do the same. Pass splits: null to clear all splits. Pass payeeId: null to clear the payee. Use originalAmount + originalCurrencyCode to record what the purchase cost in its invoice currency when that differs from the account currency. Use paymentLegs to change which accounts a multi-account payment is paid from.

Input Schema

NameRequiredDescriptionDefault
idYesID of the transaction to update
noteNoNew note. Pass null to clear
timeNoNew date/time as ISO 8601 string
amountNoNew amount as an unsigned decimal (e.g. 12.50). Never negative: transactionType sets the direction
splitsNoReplace splits. Pass null or empty array to clear all splits
tagIdsNoReplace tags. Pass null or empty array to clear all tags
payeeIdNoPayee ID to assign. Pass null to clear
accountIdNoMove transaction to a different account
categoryIdNoNew category ID
paymentLegsNoReplace the payment's other accounts (same item shape as create_transaction). Keep a current part by passing its transactionId (see paymentParts in search_transactions), optionally with a new amount unless it is a linked part; an omitted created part is deleted, an omitted linked part becomes a standalone transaction again. Pass null or [] to make it a single-account transaction. Omit to leave the parts unchanged
paymentTypeNoPayment method used
originalAmountNoAmount in the currency the purchase was originally priced in (decimal), e.g. 66.42 for a PLN invoice paid from a UAH account. Informational only: never affects balances. Requires originalCurrencyCode. Pass null on both to clear
transferNatureNoTransfer type
transactionTypeNoChange whether this is income or expense
destinationAmountNoFor transfers: new amount received in destination account (decimal, greater than 0)
destinationAccountIdNoFor transfers: new destination account ID
originalCurrencyCodeNoISO 4217 code of originalAmount (e.g. "PLN"). Requires originalAmount. Cannot be combined with transfer fields
destinationTransactionIdNoFor transfers: link to an existing destination transaction

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • addedInput schema / properties / paymentLegs
      Added value: +{
      +  "anyOf": [
      +    {
      +      "items": {
      +        "anyOf": [
      +          {
      +            "additionalProperties": false,
      +            "properties": {
      +              "amount": {
      +                "exclusiveMinimum": 0,
      +                "type": "number"
      +              },
      +              "paymentAmount": {
      +                "exclusiveMinimum": 0,
      +                "type": "number"
      +              },
      +              "transactionId": {
      +                "format": "uuid",
      +                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      +                "type": "string"
      +              }
      +            },
      +            "required": [
      +              "transactionId"
      +            ],
      +            "type": "object"
      +          },
      +          {
      +            "additionalProperties": false,
      +            "properties": {
      +              "accountId": {
      +                "format": "uuid",
      +                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      +                "type": "string"
      +              },
      +              "amount": {
      +                "exclusiveMinimum": 0,
      +                "type": "number"
      +              },
      +              "paymentAmount": {
      +                "exclusiveMinimum": 0,
      +                "type": "number"
      +              }
      +            },
      +            "required": [
      +              "accountId",
      +              "amount"
      +            ],
      +            "type": "object"
      +          }
      +        ]
      +      },
      +      "maxItems": 4,
      +      "type": "array"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "Replace the payment's other accounts (same item shape as create_transaction). Keep a current part by passing its transactionId (see paymentParts in search_transactions), optionally with a new amount unless it is a linked part; an omitted created part is deleted, an omitted linked part becomes a standalone transaction again. Pass null or [] to make it a single-account transaction. Omit to leave the parts unchanged"
      +}
  2. Changed2 schema fields changed
    • changedInput schema / properties / note / anyOf
      Previous value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "maxLength": 1000,
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedInput schema / properties / splits / anyOf
      Previous value: -[
      -  {
      -    "items": {
      -      "properties": {
      -        "amount": {
      -          "description": "Amount for this split portion (decimal, greater than 0)",
      -          "exclusiveMinimum": 0,
      -          "type": "number"
      -        },
      -        "categoryId": {
      -          "description": "Category ID for this split portion",
      -          "format": "uuid",
      -          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      -          "type": "string"
      -        },
      -        "note": {
      -          "anyOf": [
      -            {
      -              "type": "string"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ],
      -          "description": "Optional note for this split"
      -        }
      -      },
      -      "required": [
      -        "categoryId",
      -        "amount"
      -      ],
      -      "type": "object"
      -    },
      -    "type": "array"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "items": {
      +      "properties": {
      +        "amount": {
      +          "description": "Amount for this split portion (decimal, greater than 0)",
      +          "exclusiveMinimum": 0,
      +          "type": "number"
      +        },
      +        "categoryId": {
      +          "description": "Category ID for this split portion",
      +          "format": "uuid",
      +          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      +          "type": "string"
      +        },
      +        "note": {
      +          "anyOf": [
      +            {
      +              "maxLength": 100,
      +              "type": "string"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "description": "Optional note for this split"
      +        }
      +      },
      +      "required": [
      +        "categoryId",
      +        "amount"
      +      ],
      +      "type": "object"
      +    },
      +    "type": "array"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
  3. Changed1 schema field changed
    • addedInput schema / properties / payeeId
      Added value: +{
      +  "anyOf": [
      +    {
      +      "format": "uuid",
      +      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "Payee ID to assign. Pass null to clear"
      +}
  4. Changed5 schema fields changed
    • changedInput schema / properties / amount / description
      Previous value: -"New amount as a decimal (e.g. 12.50)"New value: +"New amount as an unsigned decimal (e.g. 12.50). Never negative: transactionType sets the direction"
    • addedInput schema / properties / amount / minimum
      Added value: +0
    • changedInput schema / properties / destinationAmount / description
      Previous value: -"For transfers: new amount received in destination account (decimal)"New value: +"For transfers: new amount received in destination account (decimal, greater than 0)"
    • addedInput schema / properties / destinationAmount / exclusiveMinimum
      Added value: +0
    • changedInput schema / properties / splits / anyOf
      Previous value: -[
      -  {
      -    "items": {
      -      "properties": {
      -        "amount": {
      -          "description": "Amount for this split portion (decimal)",
      -          "type": "number"
      -        },
      -        "categoryId": {
      -          "description": "Category ID for this split portion",
      -          "format": "uuid",
      -          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      -          "type": "string"
      -        },
      -        "note": {
      -          "anyOf": [
      -            {
      -              "type": "string"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ],
      -          "description": "Optional note for this split"
      -        }
      -      },
      -      "required": [
      -        "categoryId",
      -        "amount"
      -      ],
      -      "type": "object"
      -    },
      -    "type": "array"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "items": {
      +      "properties": {
      +        "amount": {
      +          "description": "Amount for this split portion (decimal, greater than 0)",
      +          "exclusiveMinimum": 0,
      +          "type": "number"
      +        },
      +        "categoryId": {
      +          "description": "Category ID for this split portion",
      +          "format": "uuid",
      +          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      +          "type": "string"
      +        },
      +        "note": {
      +          "anyOf": [
      +            {
      +              "type": "string"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "description": "Optional note for this split"
      +        }
      +      },
      +      "required": [
      +        "categoryId",
      +        "amount"
      +      ],
      +      "type": "object"
      +    },
      +    "type": "array"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
  5. First observed

TDQS

A4/5.0
Behavior4/5

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

With no annotations, the description carries the behavioral burden well: it discloses destructive clearing semantics (null or [] clears tags/splits, null clears payee), that originalAmount is informational and never affects balances, and that omitting created payment legs deletes them while omitting linked legs makes them standalone. It does not mention required permissions, reversibility, or atomicity, which are meaningful gaps for a mutation tool.

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

Conciseness4/5

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

The description is front-loaded with the core update contract, then moves through clearing behavior and special fields in a logical order. A few sentences are slightly redundant (tagIds null vs [] 'to do the same'), but nothing is wasted overall.

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

Completeness4/5

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

For an 18-parameter mutation tool with no annotations and no output schema, the description covers the most error-prone behaviors: partial updates, clearing sentinels, originalAmount pairing, and payment-leg replacement semantics. It omits permissions, error behavior, and guidance on when to use specialized siblings, which leaves some contextual gaps.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3, but the description adds patch semantics and explicitly distinguishes null from [] for tagIds and splits. It also frames originalAmount + originalCurrencyCode as an invoice-currency pair and paymentLegs as a multi-account payment modifier, adding useful meaning beyond the already-detailed schema.

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

Purpose4/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 resource: 'Update an existing transaction by ID.' That clearly scopes the tool to a single transaction and distinguishes it from bulk_update_transactions, though it never explicitly names any sibling alternative.

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

Usage Guidelines4/5

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

It explains the partial-update contract ('only provide what you want to change') and governs sentinel values for clearing tags, splits, and payee. It does not say when to use bulk_update_transactions, split_transaction, or delete_split instead, so exclusions are absent.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.