Daily travel allowances on bundled public rate tables: Poland, HMRC and GSA.
Server has 8 tools with complete schemas and descriptions. Naming follows verb_noun convention (perdiem_rates, perdiem_calc, trip_record, trip_list, trip_read, trip_export, trip_delete, perdiem_home). Descriptions are substantive (50-200 chars typical). All parameters have type definitions and descriptions. However, several parameters lack clarity on constraints and relationships. Output schemas are not explicitly documented in the source. Error handling is present but generic. No tool annotations (readOnlyHint/destructiveHint) despite clear risk classifications in metadata.
Calculate per diem subsistence and lodging for a trip: elapsed hours, meal deductions, lodging nights, late-evening supplements where the scheme defines them. Free and unlimited.
Read the shared business profile and derive the home scheme from its default_currency. Returns traveller name, currency, derived scheme, and an explanation of the derivation.
List a scheme's bundled daily allowance rates with the authority, instrument, source URL and effective date they came from. Filter by country or city. Free and unlimited.
Delete a trip by id or name. Refuses if the trip is marked exported or cited by an expense in the expense-tracker ledger.
Export a trip as a JSON payload for the expense-tracker server, optionally marking it exported so it cannot be deleted. Returns the payload and instructions.
List recorded trips: id, name, traveller, destination, dates, total, and export status. Sorted by start date descending.
No tool annotations (readOnlyHint/destructiveHint/idempotentHint) despite clear risk classifications. trip_delete is DESTRUCTIVE, trip_export is REVERSIBLE, trip_record is WRITE, these should be annotated in the tool definition for agent safety.
Output schemas not documented in source code. Callers cannot predict response structure for trip_list, trip_read, perdiem_rates, perdiem_calc. LLMs must infer field names and types from trial.
Parameter relationships undocumented. perdiem_calc has both 'meals_provided' and 'meals_provided_daily', unclear which takes precedence or if both are required. trip_record duplicates this ambiguity.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 59 | 2026-07-28+ | v2 |
Read a trip by id or name: full calc result with day lines, rates, and source metadata.
Record a trip: name, traveller, purpose, project, and the calc result. Fingerprints the record to refuse exact duplicates. Free tier: five trips a month, counted by start date.
Error handling is generic. Source shows ok() and fail() helpers returning text, but no guidance on recovery steps. E.g., if trip_record hits the 5-trips-per-month limit, the error should suggest 'Delete an old trip or wait until next month.'
perdiem_home has no input parameters but description is vague ('derive the home scheme'). Should clarify that it reads the shared business profile and explain the derivation logic upfront.