Track DB Schenker shipments by reference number
Single tool with basic structure but significant gaps. The track_shipment tool has a name that starts with a verb (✓), a description present (✓), and an input schema with type information (✓). However, the description is minimal (85 chars), lacks guidance on error cases, dependencies, and the expected output format is not documented. The input schema is minimal, only one required parameter 'reference' with minLength constraint, but no pattern/format specification, no enum values, and no description of what constitutes a valid DB Schenker reference number beyond the example '1806203236'. The output schema is completely undocumented in the visible source; callers must infer the structure from implementation details in DbSchenkerAdapter.ts, which returns a complex union type (TrackingResult) with conditional success/failure branches. Error cases are returned as object properties (ok: false, status: 'blocked', error: 'NOT_FOUND') rather than structured error responses with actionable guidance. The tool does not follow the response-field-naming pattern: response fields use inconsistent casing and structure (e.g., 'ok', 'error', 'message', 'reference', 'details', 'upstream') without clear mapping to what an LLM should extract. No pagination support despite the tool potentially returning large tracking histories. No tool annotations (readOnlyHint, etc.). Overall, this server provides bare-minimum tool structure without production-grade documentation or schema clarity.
Track a DB Schenker shipment by reference number and return structured shipment details and tracking history.
Output schema completely undocumented. The tool returns a complex union type (TrackingResult with success and blocked branches) but callers have no documented spec. Must infer structure from DbSchenkerAdapter.ts code.
Input parameter 'reference' lacks actionable constraints. Description states 'minLength: 3' but no pattern, format, or valid range documented. Example '1806203236' is hardcoded in description, LLMs may reuse it literally.
Error responses use object properties (ok: false, error: 'NOT_FOUND') rather than structured error classification. LLM cannot determine if error is retryable, user-fixable, or fatal. No recovery guidance provided.
Tool description (85 chars) is below ideal baseline (194 chars). Lacks WHEN to use it, prerequisite knowledge, and what structure is returned. Minimal context for LLM selection.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 40 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 37 | - | v1 |
No tool annotations. Missing readOnlyHint (this is a READ_ONLY tool per risk field) which signals to agents it is safe to call speculatively without side effects.
Response field naming inconsistent and unspecified. Success response uses 'ok', 'reference', 'details'; error response uses 'status', 'error', 'message'. LLM must reverse-engineer what fields to extract.