Human Resources Management MCP server for managing employee leave, attendance, and work-from-home tracking
HR-MCP has 9 tools with basic schemas and descriptions, but significant gaps limit production readiness. All tools have descriptions (10-100 chars, mostly adequate), and input schemas are present with type definitions. However, output schemas are entirely undocumented, LLMs cannot predict return structures. Parameter descriptions are minimal (e.g., 'Employee ID' with no format guidance). Error handling is weak: most tools return plain strings or generic dicts without recovery guidance. No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear read/write distinctions. Tool composition is reasonable (single responsibility), but naming could be more consistent (e.g., 'get_full_summary' vs 'get_employee_details' are redundant). The server uses in-memory mock data, limiting real-world applicability.
Apply leave for an employee on a specific date
Approve work-from-home days for an employee
Get attendance summary for an employee for a specific month, showing full days, late days, early leave days, and incomplete days
Find employee by ID or name (case insensitive)
Return all details of an employee
Return both leave and attendance summary for employee
Get leave summary for an employee including leaves taken, available leaves, work-from-home days, and public holidays count
No output schemas documented. LLMs cannot predict return structures (e.g., leave_summary returns dict with 'name', 'leaves_taken', 'available_leaves', 'work_from_home_days', 'public_holidays', none of this is declared). Agents must infer structure from trial and error.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). apply_leave and apply_work_from_home are clearly destructive/state-modifying, but LLMs have no formal signal. Agents cannot distinguish safe retry candidates from irreversible operations.
Weak error handling. apply_leave returns plain strings ('Employee not found', 'No leave days available') with no recovery guidance. LLMs cannot determine if errors are retryable, user-fixable, or fatal. No structured error responses.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 46 | 2026-07-28+ | v2 |
Get list of recent public holidays before today
Get list of upcoming public holidays from today onwards
Parameter descriptions lack format/constraint details. 'emp_id' is described as 'Employee ID' with no format (e.g., 'EMP001-EMP999', alphanumeric). 'leave_date' says 'YYYY-MM-DD format' in description but no regex/pattern in schema. LLMs must parse descriptions to infer constraints.
Redundant tools. get_full_summary and get_employee_details overlap significantly, both return employee data. get_full_summary calls leave_summary and attendance_summary internally, but get_employee_details returns raw employee dict. LLMs waste reasoning cycles choosing between them.