MCP server for quoting and managing shipments through Plain Freight logistics platform
Two tools with basic schemas and descriptions, but significant gaps in parameter documentation and output schema clarity. generate_offer has 6 parameters with type and description, but lacks enums for constrained fields like 'urgency'. check_offer_status is minimal (1 param). Neither tool documents output structure, error handling, or recovery guidance. Descriptions are adequate (50-80 chars) but lack WHEN/WHY context. No tool annotations (readOnlyHint present in metadata but not in schema). Parameter descriptions are generic and lack format/constraint details (e.g., 'urgency' has no enum or valid values listed). No pagination, no batch operations, no idempotency guarantees documented.
Check the status of a generated shipping offer
Generate a shipping quote/offer for a shipment
Output schemas not documented. Neither tool specifies what fields are returned, their types, or structure. LLMs cannot plan downstream calls or extract required data (e.g., quote_id from generate_offer response).
Parameter 'urgency' in generate_offer lacks enum constraint. Description says 'Urgency/speed requirements' but does not list valid values (e.g., standard, express, overnight). LLMs will hallucinate invalid values.
No error handling guidance. If generate_offer fails (invalid origin, unsupported destination), the response does not tell the LLM what to do next or which parameters to correct.
Parameter descriptions lack format/constraint details. 'destination_zip' has no format spec (5 digits? alphanumeric?). 'dimensions' is a free-form string with no guidance on expected format (e.g., 'LxWxH in cm').
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 54 | 2026-07-28+ | v2 |
Tool composition incomplete. generate_offer returns a quote_id, but no tool exists to accept or modify that quote (e.g., confirm_offer, update_offer). Agent cannot complete a shipping workflow.