Skip to main content
Glama

Add trip expense

trip_expense_create

Add expenses to a trip's shared expense ledger, with who paid and how each is split. Uses the same rules as the Expenses screen in Tineo. For one expense, send description and amount; for several (a list of receipts, a spreadsheet, a whole trip's costs), send them all in expenses in one call, up to 50 per call, instead of one call per expense. Each item in expenses is added or rejected on its own; failed items come back by index with the reason, so resend only those. Get traveler IDs from trip_expenses_list. Defaults: payer is the user, date is today in the user's profile time zone, an equal split with everyone on the trip (all on the payer on a solo trip). Confirm the amounts, payers and splits with the user before calling; for a batch, confirm the list once.

Input Schema

NameRequiredDescriptionDefault
dateNoExpense date, YYYY-MM-DD. Defaults to today in the user's profile time zone; send the user's local date when you know it.
notesNo
splitNoWho the cost belongs to. type payer = all of it is the payer's cost (no split). equal = divided evenly among participants (omit participants for everyone on the trip). percentage = each participant's percentage, summing to 100. exact = each participant's amount, summing to the expense amount. To make an expense 100% one person's: if they paid, use type payer with paid_by set to them; if someone else paid, use percentage with only that person at 100.
amountNoTotal amount, greater than 0.
vendorNoMerchant or vendor.
paid_byNoTraveler ID from trip_expenses_list travelers, or "me". Defaults to me.
trip_idYesTineo trip ID (from trips_list).
categoryNo
currencyNo3-letter currency code. Defaults to the trip currency, else USD.
expensesNoSeveral expenses in one call, each with the same fields as a single expense. Use instead of description and amount at the top level.
descriptionNoWhat the expense was for, e.g. Travel insurance.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • addedInput schema / properties / expenses
      Added value: +{
      +  "description": "Several expenses in one call, each with the same fields as a single expense. Use instead of description and amount at the top level.",
      +  "items": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "amount": {
      +        "description": "Total amount, greater than 0.",
      +        "type": "number"
      +      },
      +      "category": {
      +        "enum": [
      +          "Transportation",
      +          "Lodging",
      +          "CarRental",
      +          "Food",
      +          "Activities",
      +          "Shopping",
      +          "Insurance",
      +          "Communication",
      +          "Tips",
      +          "Fees",
      +          "Other"
      +        ],
      +        "type": "string"
      +      },
      +      "currency": {
      +        "description": "3-letter currency code. Defaults to the trip currency, else USD.",
      +        "type": "string"
      +      },
      +      "date": {
      +        "description": "Expense date, YYYY-MM-DD. Defaults to today in the user's profile time zone; send the user's local date when you know it.",
      +        "type": "string"
      +      },
      +      "description": {
      +        "description": "What the expense was for, e.g. Travel insurance.",
      +        "type": "string"
      +      },
      +      "notes": {
      +        "type": "string"
      +      },
      +      "paid_by": {
      +        "description": "Traveler ID from trip_expenses_list travelers, or \"me\". Defaults to me.",
      +        "type": "string"
      +      },
      +      "split": {
      +        "additionalProperties": false,
      +        "description": "Who the cost belongs to. type payer = all of it is the payer's cost (no split). equal = divided evenly among participants (omit participants for everyone on the trip). percentage = each participant's percentage, summing to 100. exact = each participant's amount, summing to the expense amount. To make an expense 100% one person's: if they paid, use type payer with paid_by set to them; if someone else paid, use percentage with only that person at 100.",
      +        "properties": {
      +          "participants": {
      +            "items": {
      +              "additionalProperties": false,
      +              "properties": {
      +                "amount": {
      +                  "description": "Required for exact splits.",
      +                  "type": "number"
      +                },
      +                "percentage": {
      +                  "description": "Required for percentage splits.",
      +                  "type": "number"
      +                },
      +                "traveler_id": {
      +                  "description": "Traveler ID from trip_expenses_list travelers, or \"me\".",
      +                  "type": "string"
      +                }
      +              },
      +              "required": [
      +                "traveler_id"
      +              ],
      +              "type": "object"
      +            },
      +            "type": "array"
      +          },
      +          "type": {
      +            "enum": [
      +              "payer",
      +              "equal",
      +              "percentage",
      +              "exact"
      +            ],
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "type"
      +        ],
      +        "type": "object"
      +      },
      +      "vendor": {
      +        "description": "Merchant or vendor.",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "description",
      +      "amount"
      +    ],
      +    "type": "object"
      +  },
      +  "maxItems": 50,
      +  "minItems": 1,
      +  "type": "array"
      +}
    • changedInput schema / required
      Previous value: -[
      -  "trip_id",
      -  "description",
      -  "amount"
      -]New value: +[
      +  "trip_id"
      +]
  2. Added

TDQS

A4.9/5.0
Behavior5/5

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

Annotations only carry generic hints, so the description carries the burden and does so well: per-item partial success with failed items returned by index and reason (so only those need resending), the 50-item cap, and the defaulting behavior for payer, date, and split. It also states the confirmation requirement before the mutation happens.

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?

Front-loads purpose, then batching, then failure semantics, then defaults, then the confirmation rule. Each sentence adds a distinct operational fact; nothing is padding.

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 mutation tool with 11 params, nested objects, and no output schema, the description covers the things an agent cannot infer: partial-failure semantics, batch limits, defaults, ID sourcing, and the confirmation step. Nothing essential 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 82% and the nested split object is already well documented in the schema, so the baseline is 3. The description still adds real value by contrasting the top-level single-expense fields with the expenses array and by restating the operative defaults (payer = user, date = today in profile TZ, equal split of everyone on the trip).

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 ('Add expenses to a trip's shared expense ledger') and immediately names the two aspects that distinguish it (who paid, how it's split). An agent can separate it from trip_expenses_list and trip_expense_update without opening the 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 explicit routing rules: batch many expenses into one call (up to 50) instead of one call per expense, and points to trip_expenses_list for traveler IDs. It also states the pre-call obligation to confirm amounts, payers and splits with the user.

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