Skip to main content
Glama
freeagent-mcp-server

freeagent-mcp-server

by samaxbytez

freeagent_update_expense

Destructive

Update an existing FreeAgent expense by ID, changing details such as category, project, date, description, gross value, tax rate, receipt reference, or attached receipt.

Instructions

Update an existing expense in FreeAgent

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "expense_id": "<expense_id>"
    },
    "name": "freeagent_update_expense"
  }
}

Input Schema

NameRequiredDescriptionDefault
projectNoProject URL to associate with
categoryNoCategory URL for the expense
dated_onNoDate of the expense (YYYY-MM-DD)
expense_idYesThe ID of the expense to update
descriptionNoDescription of the expense
gross_valueNoGross value as a decimal string
sales_tax_rateNoSales tax rate as a decimal string
attachment_pathNoPath to a local receipt or invoice file to attach (PDF, PNG, JPEG or GIF, max 5MB). Sent in the same request, so the record is never created without its receipt.
receipt_referenceNoReceipt reference for the expense

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changedv3.0.0
    • removedInput schema / additionalProperties
      Removed value: -false
    • addedInput schema / properties / attachment_path
      Added value: +{
      +  "description": "Path to a local receipt or invoice file to attach (PDF, PNG, JPEG or GIF, max 5MB). Sent in the same request, so the record is never created without its receipt.",
      +  "type": "string"
      +}
  2. First observedv1.3.0

TDQS

C2.8/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=false, destructiveHint=true, and openWorldHint=false, so the safety profile is known; the description adds nothing on top. Critically, it does not explain partial-update semantics — whether omitted fields are preserved or cleared, whether the update is reversible, or what the destructiveHint means in practice for an expense record.

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

Conciseness3/5

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

The single sentence is front-loaded and free of filler, but it is thin to the point of under-specification rather than genuinely economical. There is room for one short clause on partial-update behavior without bloat.

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

Completeness2/5

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

For a 9-parameter mutation tool with destructiveHint=true and no output schema, the description omits update semantics, error conditions, and confirmation behavior. The rich schema compensates for field-level detail but not for the mutation's behavioral contract.

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

Parameters3/5

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

Schema description coverage is 100% across all 9 parameters, so field meanings, the required expense_id, and the attachment constraints are fully documented in the schema. The description contributes no additional parameter meaning, which is the baseline case when the schema does the heavy lifting.

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 states a specific verb and resource ("Update an existing expense") and the FreeAgent qualifier scopes it to the accounting platform. It is distinguishable from create_expense/delete_expense by the verb, but it never names those siblings or clarifies scope beyond that.

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

Usage Guidelines2/5

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

There is no guidance on when to use this versus freeagent_create_expense or freeagent_get_expense, nor any prerequisites such as needing an existing expense_id. An agent must infer the workflow entirely from the name.

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

Deploy Server

Other Tools