MCP server, HTTP API & CLI for German federal/state legal texts (BGB, DSGVO, …) with canonical IDs and cite-grade source provenance.
Strong foundation with 9 well-named, verb-prefixed tools (list_, get_, search_, resolve_) and complete input schemas. All tools have descriptions (avg 85 chars, within baseline 34-392). Parameters are typed and described. However, output schemas are not documented in the visible code, only input schemas are shown. Error handling is minimal (no recovery guidance, no categorization). Tool descriptions lack WHEN/WHY context and dependency hints. No tool annotations (readOnlyHint, destructiveHint). Composition is sound: each tool has one responsibility, and naming is consistent and clear.
Return generated package, manifest, limitation, and relationship coverage metadata.
Return law metadata and normalized norm summaries for a law code or alias.
Return one structured norm by canonical norm path or simple norm shorthand.
Return generated relationship metadata for one norm when package relationships exist.
Return official-source limitations with optional metadata filters.
Return source provenance for all laws or one law code/alias.
List supported laws, optionally filtered by law metadata.
Output schemas not documented. Tool descriptions state what is returned (e.g., 'law metadata and normalized norm summaries') but do not specify the JSON structure, field names, or types. LLMs cannot plan downstream tool calls or extract data reliably without knowing response shape.
Tool descriptions lack WHEN/WHY context and dependency hints. E.g., 'list_laws' does not explain when to call it before get_law, or that it supports optional filtering. Descriptions should guide LLM selection and multi-step planning.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). All 9 tools are read-only, but this is not declared in the tool definition. Agents cannot infer safety/retry semantics without explicit annotations.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | B | 73 | 2026-07-28+ | v2 |
Resolve a structured legal citation without free-form parsing.
Search normalized legal texts with optional law-code filters.
Error handling is minimal. No recovery guidance (e.g., 'If law code not found, try list_laws()'), no error categorization (retryable vs. user-fixable), and no actionable error messages. Agents cannot self-correct on failures.
Parameter descriptions are minimal (avg ~30 chars). E.g., 'code' is described as 'Law code or alias' but does not explain format, length, case sensitivity, or valid examples. Descriptions should be 50-150 chars with format/constraint details.