MCP server for German law texts from gesetze-im-internet.de
Deutsche Gesetze MCP demonstrates solid tool design with clear naming conventions (all tools start with action verbs: list_, get_, search_), comprehensive descriptions (avg 180 chars, within 10-1024 baseline), and well-structured input schemas with type definitions and parameter descriptions. All 6 tools have explicit descriptions and typed parameters. However, output schemas are not documented in the source code, the tool definitions show input schemas but no explicit return type documentation. Error handling is present (ToolError raised for missing paragraphs) but lacks recovery guidance. No tool annotations (readOnlyHint, destructiveHint) despite all tools being read-only. Parameter descriptions are good but could be more prescriptive about format constraints (e.g., exact enbez format with § symbol).
Get metadata for a specific German law. Returns full title, enactment date, slug, and total number of norms/paragraphs.
Get the table of contents / structure of a German law. Returns all paragraphs with their enbez, titel, and section hierarchy (gliederung). Useful for navigating large laws like BGB or StGB.
Get a single paragraph/article from a German law. Parameters: jurabk = law abbreviation (e.g. 'BGB'), enbez = paragraph identifier (e.g. '§ 823'). Note: enbez must include the § or Art prefix with a space.
Get a range of consecutive paragraphs from a German law. Parameters: jurabk = law abbreviation, start = first paragraph (e.g. '§ 823'), end = last paragraph (e.g. '§ 826'). Returns up to 50 paragraphs in document order.
List available German laws in the database. Use the optional filter parameter to search by abbreviation (e.g. 'BGB') or title. Returns jurabk (abbreviation), full_title, and norm_count.
Output schemas not documented. Tool definitions show input schemas but no explicit return type documentation in code. LLMs cannot plan downstream operations without knowing what fields to expect.
Tool annotations missing. All 6 tools are read-only but lack readOnlyHint annotation. This prevents clients from optimizing caching and retry strategies.
Error messages lack recovery guidance. get_paragraph raises ToolError with suggestions (use get_law_structure), but other tools (get_paragraphs_range, search_laws) do not provide actionable next steps when queries fail.
Inferred effective spec: 2026-07-28+.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 65 | 2026-07-28+ | v2 |
Full-text search across German law texts. Use singular forms for best results (e.g. 'Kuendigung' not 'Kuendigungen'). Optional: restrict to specific laws with the laws parameter (list of jurabk). Returns matching paragraphs with text snippets showing context around matches.
Parameter format constraints not fully specified. enbez parameter requires '§ ' prefix with space, but this is mentioned in description text rather than enforced via regex pattern or enum. LLMs may pass invalid formats.
search_laws singular form requirement buried in description. Guidance to use singular forms (Kuendigung not Kuendigungen) is helpful but not enforced. Consider adding a note about stemming or providing examples of common singular/plural pairs.