MCP server providing e-commerce tools for customer, order, and inventory management
Five tools with basic verb-noun naming (get_*, check_*) and present descriptions. However, descriptions are minimal (10-50 chars), lack context on WHEN to use each tool, and omit dependency hints. All tools have simple string/list input schemas with parameter descriptions, but output schemas are undocumented, LLMs cannot plan downstream calls. No error handling guidance, no pagination for list-returning tools, no idempotency markers. Tools are read-only (good), but composition is weak: get_customer_ids_by_name + get_orders_by_customer_id requires two calls where a single 'get_orders_by_customer_name' would be more efficient. Baseline: avg tool description ~30 chars (p10=34, p90=392 for A+ tools); these are well below median.
Search inventory for a product by product name.
Get customer IDs by using a customer's full name
Search for a customer using their unique identifier
Get details about a specific order.
Get orders by customer ID
Descriptions are too brief (10-50 chars) and lack context. 'Get details about a specific order' does not explain WHEN to call this vs get_orders_by_customer_id, what fields are returned, or whether it includes related customer/product info. LLMs cannot disambiguate similar tools without richer descriptions.
Output schemas are not documented. Tools return strings, lists, and dicts, but LLMs have no schema to understand field names, types, or structure. This prevents planning downstream calls and forces parsing unstructured text.
No error handling guidance. Tools return plain strings like 'Customer not found' or 'No matching products found.' LLMs do not know whether to retry, ask the user, or try an alternative tool. Error responses should guide recovery.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 55 | 2026-07-28+ | v2 |
Composition inefficiency: get_customer_ids_by_name + get_orders_by_customer_id requires two calls to fetch orders by name. A single 'get_orders_by_customer_name' tool would reduce latency and token waste. Agents should resolve common intents in one call.
get_orders_by_customer_id returns entire order dicts without pagination or result limits. If a customer has thousands of orders, the response could exhaust context. No limit parameter, no cursor, no total count.