MCP server for Hilan (Hilanet / חילן, חילנט, net.hilan.co.il) employee self-service — pull payslips and Form 106 into an AI assistant, for any tenant.
Server has 5 tools with explicit schemas and descriptions. Naming follows verb_noun pattern (list, sync, download, get, dismiss). Descriptions are present and contextual (avg ~120 chars), meeting baseline minimums. However, parameter descriptions lack detail on constraints, formats, and error recovery. Output schemas are not documented. Error handling exists but lacks actionable recovery guidance. No tool annotations (readOnlyHint/destructiveHint) despite clear risk levels. Missing pagination for list operations.
Call this after the user declines an update offered via an "_updateNotice" field on a previous tool response, passing that same version string, so hilan-mcp stops mentioning that specific version. It will still notify about a newer version later.
Downloads ONE PDF covering every payslip in a date range (instead of one file per month) — handy for printing/sharing a multi-year span at once. Automatically splits into multiple files for very long ranges (Hilan's combined-PDF endpoint has a practical ceiling of roughly 12-15 years per file due to a URL-length limit on their end).
Logs in and fetches personal details (name, national ID, birthdate, address, phone, email, work start date, job type). This is a live lookup, not stored in the local database.
List configured Hilan tenants (no secrets returned)
Log into a Hilan tenant (using previously ingested credentials) and sync recent payslips (structured Bruto/Neto/parts + PDF)
Output schemas not documented. LLMs cannot infer what fields listTenants, syncPayslips, downloadCombinedPayslipsPdf, and getPersonalDetails return, forcing them to guess at downstream field names and risk broken tool chains.
Parameter descriptions lack format/constraint details. 'monthsBack' has no min/max bounds; 'fromMonth' and 'toMonth' accept 'MM_YYYY or MM/YYYY' but no regex or enum enforces this, inviting LLM format errors.
No tool annotations (readOnlyHint/destructiveHint/idempotentHint) despite clear risk levels. syncPayslips is WRITE; others are READ_ONLY. Agents cannot distinguish safe from unsafe operations without explicit hints.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 64 | <=2025-11-25 | v2 |
Error handling lacks recovery guidance. redactError() sanitizes messages but does not categorize errors as retryable, user-fixable, or fatal. Agents receive 'Error in syncPayslips' with no next-step hint.
listTenants returns no pagination. If a user has many tenants, the response could grow unbounded, wasting tokens and risking context window exhaustion. No limit or cursor documented.