German parental-benefit (Elterngeld) calculator + Elterngeldstelle lookup as Model Context Protocol tools. Pure-function port of the elterngeld-blitz engine.
Four domain-specific tools with complete input schemas and descriptions. Tool names are clear action verbs (compute_*, check_*, find_*). Descriptions are detailed and domain-appropriate (194 - 280 chars, within baseline 34 - 392 range). All parameters have type definitions and descriptions. Output schemas are documented in docstrings. Error handling returns structured objects with error codes. Main gaps: no enum constraints on bezugs_art/bundesland_code (free-form strings invite hallucination), no explicit output schema in JSON Schema format (only docstring), and no recovery guidance in error responses. Composition is sound, each tool has one responsibility. Security is appropriate for read-only operations.
Quick eligibility check against the BEEG income cap (§ 1 Abs. 8). Above the cap → no Elterngeld claim, period.
Compute the full Elterngeld payment for a household, per BEEG (Bundeselterngeld- und Elternzeitgesetz). All amounts in EUR.
Just the Lohnersatzquote (replacement rate, 0.65-1.0) for a given net income. No bonuses, no caps applied. Useful for citizens asking "wie viel Prozent bekomme ich?" without the full calculation.
Find the responsible Elterngeldstelle (regional office) for a given Bundesland (German state). Returns contact info, address, phone, email, and web portal.
bezugs_art parameter accepts free-form string ('basis'|'plus') without enum constraint. LLMs may hallucinate invalid values like 'basis_plus' or 'standard'. Tool validates at runtime but lacks declarative constraint.
bundesland_code parameter accepts free-form string without enum constraint. Tool expects 2-letter codes (BW, BY, BE, etc.) but schema does not declare valid values. LLMs may pass invalid codes.
Output schemas documented only in docstrings, not as formal JSON Schema. LLMs cannot parse docstring descriptions to infer response structure for downstream chaining. Recommend adding explicit output schema definitions.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | B | 79 | <=2025-11-25 | v2 |
Error responses (e.g. 'invalid_bezugs_art') lack recovery guidance. When LLM receives error, it does not know whether to retry, ask user, or call a different tool. Add actionable next steps.
compute_satz description is truncated in source ('Just the Lohnersatzquote...without the full cal'). Verify full description is present in actual codebase.