A dual-server MCP implementation with leave management and miscellaneous tools
Server has 5 tools with basic verb-noun naming (list_, get_, apply_). All tools have descriptions (10-60 chars), but most are too brief to guide LLM selection effectively. Input schemas are present but minimal: 3 tools have empty input objects (no parameters), 2 have single string params. No output schemas documented. No error handling guidance, no parameter constraints (enums, ranges), no idempotency hints. One tool (list_my_interest) is domain-mismatched (personal interests in a leave management system). Schemas lack depth, no min/max, no format specs, no dependency documentation.
Apply leave for specific dates (e.g., ["2025-04-17", "2025-05-01"])
Check how many leave days are left for the employee
Get leave history for the employee
List all employees with their leave balances
List all Suman's interests
No output schemas documented. LLMs cannot predict response structure or plan downstream tool calls. All 5 tools return plain strings instead of structured objects.
Descriptions too brief (10-60 chars, baseline 194 chars). 'List all employees with their leave balances' lacks WHEN to use, prerequisites, or dependency hints. LLMs cannot distinguish list_employees from get_leave_balance without deeper context.
No error handling guidance. apply_leave returns plain strings ('Insufficient leave balance...') but does not guide LLM on retry strategy, user correction, or recovery steps.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 40 | 2026-07-28+ | v2 |
Parameter constraints missing. leave_dates array has no minItems, maxItems, or date format spec. employee_id has no pattern or length bounds. LLMs can pass invalid values without validation.
Domain mismatch: list_my_interest (personal interests) does not belong in a leave management system. Reduces tool cohesion and confuses LLM about tool purpose.