Skip to main content
Glama

taxapp.nz

Add an expense record

create_expense
Idempotent

Adds one expense record: a bill or cost. It needs the supplier (contact_id, from list_contacts; add a new supplier with create_contact), an expense account (from list_expense_accounts) and, for a rental cost, the property (from list_properties). liable_contact_ids names the contractors or property owners the cost is shared between, which decides whose figures it reduces. Match the expense type with list_choices and the account by its name or IRD line; When the person's words match more than one, or none, show them the closest and ask which they mean; never guess an id. Only for an organisation where this connection may add and change records (list_organisations says which). The answer is the saved record with its organisation's name; tell the person what was added and where.

Input Schema

NameRequiredDescriptionDefault
notesNoFree text kept with the record, such as the invoice number ("Invoice number: 1234").
amountYesThe bill's total in NZD.
due_dateNoThe New Zealand date the bill is due, yyyy-MM-dd, when it has one.
contact_idYesThe supplier or payee, from list_contacts.
property_idNoA rental cost's property, from list_properties.
expense_dateYesThe New Zealand date of the bill or cost, yyyy-MM-dd.
expense_typeYesrental (a rental property's costs), commission (costs of a contractor's work) or household (the household's own costs).
allow_duplicateNoAdding is safe to repeat: the same details sent again return the record already made. Set true only when the person confirms they really want a second, identical record.
organisation_idNoThe id of the organisation to use, from list_organisations. Leave it out when the connection covers only one organisation; it is required when it covers more than one.
expense_account_idYesThe expense account to file it under, from list_expense_accounts.
liable_contact_idsNoThe contact ids of the contractors or property owners liable for the cost, from list_contacts. A cost on a jointly owned property is shared by every owner named.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Added

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnlyHint=false, destructiveHint=false, idempotentHint=true), so the bar is lower. The description still adds real behavior: the tool only works where the connection 'may add and change records' (a permission gate not encoded in annotations), and it discloses the response ('the saved record with its organisation's name') plus the instruction to report back where the record landed.

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?

Front-loaded with the core action and dependencies, and nearly every clause carries information. It loses a point for one dense semicolon-heavy paragraph with an awkward mid-sentence capital ('; When the person's words...') that mixes user-facing scripting into the tool definition.

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 an 11-parameter mutation tool with no output schema, the definition covers prerequisites, every id source, ambiguity handling, permission gating, and the return value. Nothing an agent needs to invoke it correctly is missing.

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 3 is the baseline. The description goes beyond it by explaining the consequence of liable_contact_ids ('decides whose figures it reduces') and that a jointly owned property's cost is shared by every named owner, plus how to resolve the expense type and account by name or IRD line.

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?

States a specific verb and resource up front ('Adds one expense record: a bill or cost'), and the scope is unambiguous (a single record, not a list or update). The expense/income/update siblings are separable from the resource name alone without opening a schema.

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?

Explicit routing guidance: supplier comes from list_contacts or create_contact, account from list_expense_accounts, property from list_properties, type from list_choices, and organisation eligibility from list_organisations. It also states the disambiguation policy ('show them the closest and ask which they mean; never guess an id') and the connection-permission precondition.

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.