An MCP server that provides access to an office supply inventory stored in a CSV file, allowing clients to query item names and retrieve detailed item information.
Two tools with basic verb-noun naming (get_items, get_item_info) and minimal descriptions. Both have input schemas, but descriptions are extremely brief (10-15 chars each, well below the 50-200 char baseline for LLM-optimized tools). No parameter descriptions provided. No output schema documentation. No error handling guidance. The get_item_info tool returns a dict with an 'error' field on failure, but this is undocumented and not actionable for LLM recovery.
Given an item name, return all details of the item.
Return the list of all item names in the inventory.
Descriptions are critically short (10-15 chars). Baseline is 50-200 chars for LLM-optimized tools. Current descriptions lack context for tool selection and do not explain when to use each tool vs the other.
No parameter descriptions. The 'item_name' parameter in get_item_info has a type but no guidance on format, case sensitivity, or valid values. LLMs cannot infer constraints from names alone.
No output schema documentation. Return types are inferred from code (list[str] and dict[str, Any]) but not formally documented. LLMs need explicit field descriptions to plan downstream calls.
Error handling is undocumented. get_item_info returns {'error': 'Item not found.'} on failure, but this is not declared in the schema or description. LLMs cannot reliably detect or recover from this error state.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 46 | 2026-07-28+ | v2 |
No pagination or result limits. get_items returns all items as a flat list. If inventory grows large, this will blow context windows. No limit parameter or documentation of expected result size.