Skip to main content
Glama

create_purchase

Record a purchase expense against a project or task to track costs outside declared time, with optional budget counting.

Instructions

Record a purchase (an expense outside declared time) against exactly one project or one task, both accepted by name or id. Use it to add a cost; use update_purchase to change an existing one. Creates a new record on every call, so check list_purchases first to avoid duplicates. billing_policy add counts it in the budget, ignore records it only. Requires Gryzzly's budget offer.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
nameYesWhat was bought.
taskNoThe task it is charged to, by name or id. One of project or task.
paid_atNoWhen it was paid.
projectNoThe project it is charged to, by name, code or id. One of project or task.
billed_atNoWhen it was billed.
paid_priceNoWhat it cost.
billed_priceNoWhat it is billed for.
billing_policyNoWhether it counts in the budget. Defaults to `add`.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
idYesThe purchase's identifier.
nameNoWhat was bought.
paid_atNoWhen it was paid.
task_idNoThe task it is charged to.
billed_atNoWhen it was billed.
created_atNoWhen the purchase was created.
paid_priceNoWhat it cost.
project_idNoThe project it is charged to.
updated_atNoWhen the purchase was last updated.
billed_priceNoWhat it was billed for.
billing_policyNo`add` or `ignore`, how it weighs on the budget.

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv0.1.0

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false, idempotentHint=false and openWorldHint=true, so the safety profile is covered. The description goes beyond them by spelling out the consequence of non-idempotency ('Creates a new record on every call, so check list_purchases first'), the billing_policy side effect on budgets, and the prerequisite feature flag. It stops short of describing permissions or failure modes, keeping it at a 4.

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 target, then the routing rule, then the duplicate warning and prerequisite. Nothing is padding. The billing_policy sentence is telegraphic ('add counts it in the budget, ignore records it only') and slightly awkward, which keeps it from a 5.

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 8 parameters, all documented at 100% coverage, annotations, and an output schema that removes any need to describe return values, the description supplies what is left: the routing alternative, the mutual-exclusion constraint, the duplicate risk, and the feature prerequisite.

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 description coverage is 100%, so the baseline is 3 and the schema already carries the field-level detail. The description still adds value by stating the exactly-one-of constraint across project/task and that both accept 'name or id', plus a plain-language reading of billing_policy that the enum descriptions only partially convey.

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+resource ('Record a purchase') and immediately scopes it ('an expense outside declared time', 'against exactly one project or one task'). It explicitly distinguishes itself from update_purchase, which is the closest sibling, so an agent can route without opening either 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?

Gives the when (add a cost), the when-not (use update_purchase to change an existing one), and a concrete prerequisite workflow ('check list_purchases first to avoid duplicates'). It also names a hard external requirement ('Requires Gryzzly's budget offer'), which is exactly the kind of gating condition an agent needs before calling.

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