Skip to main content
Glama

expense_reject

Rejects a submitted expense claim — requires the admin or owner role, and only a 'pending' expense qualifies (CONFLICT otherwise). rejection_reason (up to 500 chars) is optional but records why; rejected is terminal and never counts as spend, so a corrected claim is a fresh expense_create, never a resubmit.

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": {
      "id": "<id>"
    },
    "name": "expense_reject"
  }
}

Input Schema

NameRequiredDescriptionDefault
idYesThe expense id (expense_list shows them).
notesNo
statusNo
vendorNo
currencyNo
ocr_jsonNo
tax_typeNo
tags_jsonNo
approved_atNo
approved_byNo
category_idNo
receipt_keyNo
rejected_atNo
amount_centsNo
expense_dateNo
submitted_atNo
tax_rate_bpsNo
recurrence_idNo
reimbursed_atNo
subtotal_centsNo
rejection_reasonNo
tax_amount_centsNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A4.6/5.0
Behavior5/5

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

Beyond the annotations, it discloses that rejection is terminal, that rejected amounts never count as spend, and that a repeat attempt yields CONFLICT — consistent with idempotentHint=false and destructiveHint=false (state change but not data destruction). The permission requirement is also surfaced, which annotations do not cover.

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?

Two dense clauses, front-loaded with the action, then preconditions, then the follow-up path. No redundant restatement of the tool name and no filler.

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

Completeness4/5

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

For a mutation with annotations and no output schema, the description covers authorization, preconditions, terminality, and the correct remediation path. The one gap is that a 22-property schema is left unexplained, so an agent may not realize only id and rejection_reason are meaningful here.

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 coverage is only 5% across 22 parameters, so the description carries most of the burden. It does add real meaning for rejection_reason (optional, 500-char limit, records why) and points to expense_list for obtaining the id, but it says nothing about the other 20 fields, leaving ambiguity about whether they are accepted or ignored.

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 a specific verb and resource ('Rejects a submitted expense claim'), which unambiguously separates it from expense_approve, expense_submit, and expense_delete. An agent can identify the operation and its target without consulting 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?

It states explicit preconditions — admin/owner role required, only 'pending' expenses qualify, otherwise CONFLICT — and rules out a common wrong path by noting that a corrected claim must go through expense_create rather than a resubmit. This is when-to-use and when-not guidance in a single statement.

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