Skip to main content
Glama

create_expense

Record one thing the user spent money on. Use for spend with no itinerary item of its own — meals, transport, visa fees, a booking that isn't on the trip. If the purchase IS already on the itinerary, set its price with update_flight/update_accommodation/update_activity instead; doing both counts it twice. Pass source_ref when importing so a re-run can't duplicate it.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
titleYesWhat it was, as the user would recognise it
amountYesThe total actually paid. Never a deposit, a per-night rate or a single fee.
stay_idNoThe stop this belongs to. Omit unless certain — an expense with a date is attributed to the stop whose dates contain it automatically.
categoryYesOne of the app's expense categories. Food is 'restaurant'.
currencyYesISO 4217 code, e.g. USD, EUR, THB
spent_onYesISO date, e.g. 2026-08-01
amount_usdNoThe same amount in USD, frozen at entry. Set it ONLY when the source states a USD (or already-converted home-currency) figure. Omit otherwise — the app converts at the live rate, which is honest, whereas a guessed historical rate is frozen forever.
journey_idYes
source_refNoWhere this came from, e.g. 'gmail:<messageId>'. Unique per user — a repeat import is refused.
related_event_idNoThe flight/booking/activity this relates to, if any.

TDQS

A4.9/5.0
Behavior5/5

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

Annotations are minimal (readOnlyHint=false, etc.) and the description carries the burden. It discloses that doing both double-counts, that a source_ref makes a re-run idempotent, and that setting amount_usd to a guessed historical rate freezes it forever (while omitting it lets the app use the honest live rate). This adds real behavioral context beyond the schema and annotations, with no contradictions.

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?

A single, well-structured paragraph that front-loads the core purpose, then gives the key usage rule, then the source_ref caveat. Every sentence earns its place — no fluff or redundancy. The warning about double-counting is placed early where it matters.

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 a create tool with 10 parameters and no output schema, the description covers all critical nuances: when to use vs. siblings, how attribution works (omitting stay_id lets the date determine the stop), the amount_usd honesty rule, and idempotency via source_ref. Nothing essential is missing, and the high schema coverage fills in the rest.

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 90%, so most parameters are documented. The description adds semantics for amount (total actually paid, not deposit or per-night rate), amount_usd (only set when source states a USD figure, else omit), and source_ref (unique per user, repeat import refused). It clarifies a few non-obvious fields without repeating the schema, which is above the baseline for high coverage.

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?

The description opens with 'Record one thing the user spent money on' — a specific verb and resource. It immediately scopes the tool to spend with no itinerary item of its own and distinguishes it from the update_flight/update_accommodation/update_activity siblings, so an agent can tell them apart without examining schemas.

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?

The description explicitly states when to use this tool (spend that isn't already on the itinerary) and when not to (if the purchase is already on the itinerary, use the update_* tools, and warns that doing both counts it twice). It also mentions passing source_ref for imports to prevent duplicates — clear, actionable guidance with an explicit alternative.

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.

TDQS

A3.6/5.0
Disambiguation5/5

Each tool targets a distinct resource and action (e.g., create_flight vs create_activity vs create_stay), and descriptions clarify overlaps like stay vs accommodation. The only potential confusion (create_activity covers travel legs) is explicitly explained, so misselection is unlikely.

Naming Consistency5/5

All tools follow a consistent verb_noun pattern using standard verbs: create, delete, get, list, search, set, update, add, remove, leave. Nouns are consistently singular and descriptive (passport, journey, stay, flight, accommodation). No mixed conventions or vague verbs.

Tool Count4/5

With 36 tools, the count is higher than typical, but the server covers a wide domain: journeys, stays, activities, flights, accommodations, visas, documents, preferences, and sharing. Each entity has CRUD operations plus search and status, so the count is justified, though bordering on heavy.

Completeness5/5

The tool surface is remarkably complete: full CRUD for every entity (journeys, stays, activities, flights, accommodations, visas), user profile access (get_me), search utilities, sharing controls (join links, member management), and preferences. No obvious dead ends or missing lifecycle steps; even edge cases like deleting bookings before stays are handled.

Resources