A multi-user, multi-agent procurement copilot MCP server built with FastMCP that provides tools for managing procurement orders, parts, suppliers, and inventory via Java backend REST APIs.
Server has 8 tools with basic schemas and descriptions, but significant quality gaps. Tool names lack consistent verb-noun structure (inventory_warning, order_search_details are vague). Descriptions are present but often generic or in Chinese, making LLM interpretation difficult. Parameter schemas exist but lack type constraints (enums, ranges, patterns). No output schemas documented. Error handling and recovery guidance absent. No tool annotations (readOnlyHint/destructiveHint). Composition is reasonable (tools are single-purpose), but parameter naming inconsistencies (order_detail vs orderDetail) and missing validation rules reduce usability.
查询库存预警列表。 返回所有库存不足(当前库存低于安全库存)的物料及对应的零部件详情。 无需传参。
创建采购订单(POST /orders/create)。 orderNumber 不传则自动生成(规则:PO+年月日+3位随机数字)。 orderTime 不传则默认当前时间(格式:yyyy-MM-ddTHH:mm:ss.SSS)。 orderDetail 必填,至少包含一个明细项;每项需提供 partId、quantity、unitPrice。
搜索采购订单明细。 支持按零部件名称、日期范围筛选,所有参数均为可选。 返回的每条明细包含零部件详情(partDetail)及供应商信息(supplier)。
更新采购订单(PUT /orders/update/{id})。 orderDetail 为可选,传入则替换原有明细。 其他字段与创建订单格式一致。
根据供应商 ID 查询该供应商下有采购记录的零配件列表。
分页查询零部件列表。 支持按名称模糊查询、按分类筛选、按供应商ID筛选。
按名称搜索零部件。 与 part_query 不同,此接口直接搜索,name 为必填参数。
按名称模糊搜索供应商。
Tool names lack consistent action verbs. 'inventory_warning' and 'order_search_details' are vague; should be 'list_inventory_warnings' and 'search_order_details'. LLMs cannot infer intent from ambiguous names.
Descriptions are in Chinese and lack English translations. LLMs trained primarily on English will struggle to understand tool purpose and selection criteria. Descriptions also lack WHEN/WHY guidance (e.g., 'Use this to find parts below safety stock threshold').
No output schemas documented. LLMs cannot plan downstream tool calls or extract required fields (e.g., does order_create return order_id? What fields does part_query return?). This forces agents to guess and retry.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 45 | 2026-07-28+ | v2 |
Parameter schemas lack enums and constraints. 'status' in order_create accepts integers 1-5 but no enum is declared; 'category' in part_query lists examples in description instead of enum constraint. Free-form strings invite hallucinated values.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). Agents cannot distinguish safe reads from destructive writes. order_create and order_update should be marked destructive; inventory_warning should be marked read-only.