AI Workforce & HR Compliance MCP Server — German labor law, payroll, tax, and HR operations
HROracle has 12 tools with complete input schemas and descriptions, but suffers from critical naming and composition issues. Tool names lack action verbs (gross_to_net, employer_cost, minijob_check are noun-based or unclear), violating the verb_noun pattern. Descriptions are domain-specific but lack LLM-optimized guidance on WHEN to use each tool vs. alternatives. Output schemas are partially documented in code but not formally declared in tool registration. Error handling is minimal, most tools return bare error dicts without recovery guidance. No tool annotations (readOnlyHint, destructiveHint) despite all being read-only. Parameter descriptions are present but generic (e.g., 'Monthly gross salary in EUR' lacks validation ranges or constraints). The server conflates multiple HR concerns (payroll, labor law, onboarding) without clear composition boundaries.
Arbeitsvertrag-Pflichtklauseln — Verify that employment contract contains all mandatory clauses required by German law (NachwG - Nachweisgesetz)
Arbeitgeber-Gesamtkosten-Kalkulation — Calculate total employer costs including gross salary, employer social insurance contributions, and statutory levies (U1, U2, U3, BG)
Brutto-Netto Berechnung DE — German gross-to-net salary calculation with tax, social insurance contributions, and church tax
Personalbedarfsprognose — Forecast future headcount requirements based on business growth, turnover rates, and planned initiatives
Urlaubsanspruch berechnen — Calculate annual leave entitlement based on German law (BUrlG) considering employment start date, contract terms, and statutory minimums
Minijob/Midijob Prüfung — Classify employment as minijob (≤538€), midijob (538-2000€), or regular employment and calculate social insurance obligations
Tool names lack action verbs. 'gross_to_net', 'employer_cost', 'minijob_check', 'contract_clauses' are noun-based or unclear. LLMs infer intent from names, these names do not signal what action occurs. Should be 'calculate_gross_to_net', 'calculate_employer_cost', 'classify_employment_type', 'validate_contract_clauses'.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite all 12 tools being read-only, stateless calculations. Missing annotations prevent agents from optimizing retry logic and caching. All tools should declare readOnlyHint: true.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 42 | <=2025-11-25 | v2 |
Kündigungsfrist berechnen — Calculate notice periods for termination under German law (§622 BGB) for both employer and employee
DSGVO-konforme Trennungs-Checkliste — Generate GDPR-compliant offboarding checklist for employee separation including data deletion, final settlement, and legal requirements
Einstellungs-Checkliste — Generate comprehensive onboarding checklist for new employee including registrations, insurance, tax, and compliance requirements
Elternzeit-Anspruch — Check parental leave eligibility and calculate entitlements under German law (BEEG - Bundeselterngeld- und Elternzeitgesetz)
Kompetenz-Gap-Analyse — Analyze skills gap between current employee competencies and required role competencies, with recommendations for training
Arbeitszeitgesetz-Compliance — Verify compliance with German Working Time Act (ArbZG) regarding maximum daily/weekly hours, rest periods, and break requirements
Error handling is minimal and non-actionable. Tools return bare dicts like {'error': 'Provide gross_monthly > 0'} without recovery guidance. Should follow pattern:recovery-guide, e.g., 'Invalid gross_monthly: must be > 0. Example: 3500 for €3,500/month.'
Parameter descriptions lack validation constraints. 'Monthly gross salary in EUR' does not specify range, precision, or edge cases. Should state: 'Monthly gross salary in EUR (positive number, typically 450 - 10000, rounded to 2 decimals).'
Output schemas are documented in code comments but not formally declared in tool registration. LLMs cannot see what fields to expect. Formal schema documentation (e.g., in tool metadata) is required for downstream tool chaining.