Scoped access to the customer-support system of record. Look a customer up by id, search past resolved tickets for precedent, and issue a refund. There is no general query tool; these three are the whole surface.
Three well-named tools with clear, detailed descriptions and complete input schemas. lookup_customer and search_tickets are read-only with good parameter documentation. issue_refund is properly marked IRREVERSIBLE and includes audit trail context. However, output schemas are not documented in the visible code, only input schemas are shown. Parameter descriptions are strong (50-150 chars each), but the server lacks explicit error handling guidance and recovery patterns for common failures (e.g., customer not found, refund rejection).
Issue a refund to a customer for a specific order. Moves money and creates an audit trail. Requires explicit approval before execution. The refund is recorded with the conversation_id that triggered it, linking the payment back to the support interaction.
Fetch one customer's profile and their open-ticket count by UUID. Returns who the customer is and how much latitude you have with them: the account tier drives refund authority and escalation routing, and the open-ticket count tells you whether this is a first contact or the fourth complaint this month.
Search resolved tickets for precedent by customer and keywords. Returns a list of tickets matching the search criteria, ordered by relevance. Use this to find similar past cases before deciding how to handle a new one.
Output schemas not documented. Code shows input schemas but no visible return type definitions for any tool. LLMs cannot plan downstream calls or extract required fields without knowing what lookup_customer, search_tickets, and issue_refund return.
No error handling guidance. Tools lack descriptions of failure modes (customer not found, refund rejected, search timeout) and recovery steps. Agents cannot self-correct on errors.
issue_refund lacks confirmation/dry-run pattern. Irreversible operations should support explicit approval before execution. Current design risks accidental refunds if agent reasoning fails.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 64 | 2026-07-28+ | v2 |
search_tickets limit parameter lacks bounds. Description says 'default 5' but no min/max specified. Unbounded integers let LLMs pass absurd values (e.g., limit=999999) that could timeout or exhaust resources.
Audit trail wiring is defensive but undocumented. Code includes _resolve_conversation() and _insert_audit() for linking refunds to conversations, but this critical security feature is not mentioned in issue_refund's description. Agents cannot understand the audit context.