MCP server for managing vehicle inventory data with search, retrieval, and status update capabilities
VehicleExportServer demonstrates solid fundamentals with clear naming conventions, comprehensive descriptions, and well-structured parameters. All 6 tools follow verb-noun patterns (get_*, list_*, search_*, add_*, change_*). Descriptions range 100-300+ characters and include WHEN/HOW guidance. However, critical gaps exist: (1) output schemas are completely undocumented, we see string returns but no structured field definitions, (2) error handling is inconsistent, some tools provide recovery guidance (get_vehicle_details suggests 'nearby IDs'), others return bare error messages, (3) no input validation rules documented for constrained fields (e.g., vehicle_id format, status enum values). The server handles real upstream dependency errors well (timeouts, 404s) but lacks formal error categorization. Tools are well-composed and idempotent. Missing: pagination guidance for list_vehicles (no limit/offset params), security documentation, and audit trail patterns.
Create a new vehicle record in the data source. Agents should call this when they know all required fields and want to add inventory. The data source returns the new ID and details on success.
Update the status of a vehicle identified by ID. This tool grants the agent write access. It should be invoked after the correct vehicle is determined (e.g. via `search_vehicles` or `get_vehicle_details`). Returns the updated record or a meaningful error. If the ID does not exist, the response suggests similar available IDs.
Retrieve a single vehicle's current information using its unique ID. This is the **precise lookup** tool. Use it when you already know the vehicle's identifier. If the ID does not exist, the tool returns a clear message so the upstream agent can decide to search or try another ID.
Provide a condensed overview of the current fleet. Returns counts by status and destination. This gives the agent a macro view of the inventory so it can answer questions like "How many cars are in port?" without iterating over every record. Use this before launching wide queries.
Return every vehicle currently stored, one per line. This is a **broad inspection** tool. Avoid using it when you only need counts or a particular item, since large inventories would be cumbersome for an agent to consume. Prefer `inventory_summary` or `search_vehicles` for more targeted queries.
Output schemas completely undocumented across all 6 tools. Tools return plain strings with inferred structure (e.g., 'Vehicle {id}: {make}...') but no formal JSON/object schema definitions. This forces LLMs to parse unstructured text and prevents downstream tool composition.
Input parameter constraints missing or incomplete. status/new_status fields have no enum definitions (what are valid statuses?). vehicle_id has no format specification. make/model have no length bounds. Unconstrained parameters invite hallucinated invalid values from LLMs.
Destructive write operations (add_vehicle, change_status) lack confirmation/dry-run pattern. Agents can irreversibly modify state without review. No tool provides a 'preview' or 'confirm' step before executing.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | B | 75 | 2026-07-28+ | v2 |
| 2026-03-09 | D | 56 | - | v1 |
Find vehicles matching one or more criteria without knowing the ID. Provide any combination of make, model, status or destination. The search is case-insensitive and will return vehicles where the field contains the given term. This tool is the agent's "eyes" when it is uncertain about exact identifiers. If no results are found, the response explains and may offer suggestions to broaden the query.
list_vehicles has no pagination parameters (limit, offset, page_size). Tool will return all vehicles unbounded, violating paginated-result pattern. For large fleets, this exhausts context windows and violates LLM token budgets.
Error handling is inconsistent and lacks formal error categorization. Some tools provide recovery hints (get_vehicle_details, search_vehicles), others return generic errors. No distinction between retryable vs user-fixable vs fatal errors.
No idempotency guarantees documented for write tools. If an agent retries add_vehicle or change_status due to transient error, duplicate side effects could occur (duplicate vehicle record, status changed twice).
Tools return verbose string outputs instead of structured objects. E.g., 'Vehicle {id}: {make} {model} is currently {status}...' is human-readable but cannot be parsed by downstream tools. Downstream agent composition requires additional parsing work.