MCP server for managing employee leave balances and leave applications
Two tools with basic schemas and minimal descriptions. Both tools have input schemas with typed parameters, but descriptions are generic (under 50 chars) and lack context for LLM selection. No output schemas documented. No error handling guidance. No parameter descriptions beyond type. Missing idempotency hints for the write operation (apply_leave). Tool composition is reasonable but descriptions fail to explain WHEN to use each tool or what happens on failure.
Apply for leave for an employee
Get the leave balance for an employee
Tool descriptions are too generic and lack LLM-selection context. 'Get the leave balance for an employee' (34 chars) does not explain when to call this vs other tools, what the output structure is, or what happens on error. Baseline for A+ tools: 50-200 chars with WHAT/WHEN/PREREQUISITES.
No output schemas documented. LLMs cannot plan downstream calls or extract fields. get_leave_balance returns {name, leave_balance} but this is inferred from code, not declared. apply_leave returns a string, not structured data. Baseline: 100% of A+ tools have documented return types.
Parameter descriptions missing. 'emp_id' has description 'Employee ID' but no format hint (e.g., 'E001-E999', 'alphanumeric'). 'days' has no constraint (min/max). 'reason' has no length limit. Baseline: 100% of A+ tool params have descriptions; 94% of A+ tools have docstrings.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 43 | 2026-07-28+ | v2 |
No error handling guidance. apply_leave returns plain strings ('Employee not found', 'Insufficient leave balance') with no recovery hints. LLM cannot determine if error is retryable or user-fixable. Baseline: errors must tell LLM what to do next.
apply_leave is a destructive operation (modifies leave_balance) but description does not state this. No idempotency hint. No confirmation/dry-run pattern. Agents cannot know if retrying is safe. Baseline: destructive tools must declare state change in description.