Skip to main content
Glama

Delete income

delete_income
DestructiveIdempotent

Delete one income record or many to the bin (soft-delete, restorable). Send id for one record, which returns {error}. Or send ids (up to 250) to delete many in one call, which returns {error, deleted: [id ...], errors: [{id, message} ...]}. That is partial success: ids this business does not own, already deleted, or unknown are skipped and listed in errors, and error is true only when nothing was deleted. The ledger recomputes, so a linked invoice's outstanding is restored. Confirm with the user before deleting.

Input Schema

NameRequiredDescriptionDefault
idNoOne income id to delete.
idsNoUp to 250 income ids to delete in one call. Partial success: ids this business does not own, already deleted, or unknown are skipped and listed in errors.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed3 schema fields changed
    • addedInput schema / properties / id / description
      Added value: +"One income id to delete."
    • addedInput schema / properties / ids
      Added value: +{
      +  "description": "Up to 250 income ids to delete in one call. Partial success: ids this business does not own, already deleted, or unknown are skipped and listed in errors.",
      +  "items": {
      +    "type": "string"
      +  },
      +  "maxItems": 250,
      +  "minItems": 1,
      +  "type": "array"
      +}
    • changedInput schema / required
      Previous value: -[
      -  "id"
      -]New value: +[]
  2. First observed

TDQS

A4.4/5.0
Behavior5/5

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

Annotations already declare destructiveHint=true and idempotentHint=true, but the description adds substantial context beyond them: deletion is soft and restorable, batch calls can partially succeed, error is true only when nothing was deleted, and the ledger recomputes so a linked invoice's outstanding balance is restored. That downstream side effect is exactly the kind of behavior an agent needs before invoking a destructive tool.

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 core action and its soft-delete nature are front-loaded in the first clause, then the two modes, then the partial-success semantics, then the safety instruction. There is no filler; even the brace notation is there to convey return shapes that the absent output schema would otherwise leave undocumented.

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?

With no output schema, the description takes on the burden of documenting return values and does so for both call modes, including the tricky partial-success case. For a destructive two-parameter tool it leaves nothing material for an agent to guess.

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 the baseline is 3, but the description goes further by tying each parameter to a distinct response shape (`id` returns {error}; `ids` returns {error, deleted, errors}) and by explaining the skip semantics of non-owned, already-deleted, or unknown ids. It adds real meaning beyond the schema's plain field descriptions.

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 ('Delete one income record or many') and immediately qualifies the operation as a soft-delete 'to the bin (soft-delete, restorable)'. That distinguishes it from a hard delete, though it never explicitly names adjacent siblings such as unlink_income_transaction or delete_expense, leaving the agent to infer the boundary.

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 clearly routes between the two modes: send `id` for a single record or `ids` for a batch of up to 250 in one call. It also adds a procedural guardrail, 'Confirm with the user before deleting,' but gives no explicit when-not guidance (e.g., use unlink_income_transaction when you only want to detach a bank transaction).

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.

Resources