Collection of MCP servers for company assistant, HR assistant, sales agent, and support agent with corresponding backend services
13 tools with complete schemas and descriptions, but significant quality gaps. Tool naming is mostly verb-driven (get_, create_, search_) and follows conventions. Descriptions are present (avg ~120 chars) but lack actionable context, many omit WHEN to use the tool or what happens on failure. Parameters have types and descriptions, but lack constraints (enums are used sparingly; no min/max bounds on numeric fields). Output schemas are not documented, LLMs cannot predict response structure. Error handling is absent from descriptions. Duplicate tool names (get_leave_balance appears twice across servers) signal poor composition. No tool annotations (readOnlyHint, destructiveHint) despite clear read/write semantics. Overall: functional definitions, but below production quality.
Apply a discount percentage to an existing quote. Validates against the max_discount_percent setting. Recalculates total with the discount applied. IMPORTANT: This action should be confirmed by the user before execution.
Check current stock availability for a specific product by its ID (e.g. PROD-001). Returns in-stock quantity, reserved count, available units, and stock status.
Create a price quote for a customer. Calculates subtotal, tax (from sales_tax_rate setting), and total. Returns the quote with a QT-XXX ID. IMPORTANT: This action should be confirmed by the user before execution.
Create a new IT support ticket. Returns the created ticket with its assigned ID.
Look up an employee by ID (e.g. EMP001), email address, or name (case-insensitive partial match). Returns employee details including department, title, start date, and manager.
Get detailed information about a specific employee by their ID (e.g. EMP001).
Duplicate tool names: get_leave_balance appears in both company-assistant and hr-assistant; search_products likely duplicated across servers. LLMs cannot disambiguate and will select unpredictably.
No output schemas documented. LLMs cannot predict response structure (field names, types, nesting). Forces trial-and-error parsing and wastes tokens on clarification.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). Risk field shows read/write semantics but not exposed in schema. Agents cannot determine retry safety or confirmation requirements.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 54 | 2026-07-28+ | v2 |
Get a list of all employees in the company. Returns employee ID, name, email, department, title, manager, start date, and location.
Get the leave balance for a specific employee, including vacation days, sick days, personal days, and how many of each have been used this year.
Get the leave balance for a specific employee, including vacation days, sick days, personal days, used days, and pending requests.
Read a business rule setting by key. Available keys: max_discount_percent, free_shipping_min, quote_validity_days, sales_tax_rate.
Search the company knowledge base for articles matching a query. Covers IT guides, HR policies, and general company information.
Search the product catalog by keyword, category, and/or price range. Returns matching products with names, prices, specs, and IDs.
Submit a new leave request for an employee. Validates that the employee exists, has enough balance for the requested type, and dates are not in the past. Returns the created leave request with a request ID and pending_approval status.
Descriptions lack actionable context. Missing: WHEN to use (vs similar tools), WHAT happens on failure, prerequisites. E.g., 'Get leave balance' does not explain when to call it vs get_employee, or what to do if employee not found.
No error handling guidance in descriptions. Tools like create_quote and apply_discount mention user confirmation but do not document failure modes (invalid quote_id, discount exceeds max, etc.) or recovery steps.