MCP server for the Austrian RIS API (data.bka.gv.at) — search and fetch federal legislation with ELI identifiers and verifiable citations.
Strong foundation with clear naming, comprehensive descriptions, and well-structured schemas. All 6 tools follow verb_noun pattern (at_search, at_get_text, at_case_search, at_get_case_text, at_list_collections, at_coverage). Descriptions are detailed (100-250 chars) and explain WHAT, WHEN, and dependencies. Input schemas use proper JSON Schema with types and enums. Tool annotations (readOnlyHint, idempotentHint) present. Error handling includes structured codes with recovery guidance. Main gaps: output schemas not explicitly documented in source; some parameter descriptions could be more prescriptive about format/constraints; no batch operations despite search-then-fetch pattern.
Search Austrian case law (RIS Judikatur). Maps to ``GET /Judikatur``. Each hit gets ``ecli``, ``human_readable_citation``, ``source_url`` and ``content_urls`` (html/xml).
Declare what this connector covers, how it is sourced, and what it does not cover.
Fetch the full text of a decision from a RIS content URL.
Fetch the full text of an act from a RIS content URL.
List the RIS collections (Bundesrecht, Landesrecht, Judikatur).
Search Austrian federal law (RIS Bundesrecht). Maps to ``GET /Bundesrecht``. Each hit gets ``eli_uri``, ``human_readable_citation``, ``source_url`` and ``content_urls`` (html/xml).
Output schemas not documented in source code. While input schemas are explicit (SearchQuery, CaseSearchQuery), return types (SearchResult, CaseText, etc.) are imported from models but not shown in tool registration. LLMs cannot plan downstream operations without knowing what fields to expect.
Parameter descriptions lack prescriptive format guidance. 'suchworte' and 'titel' accept free text but no length limits, character restrictions, or examples of valid queries are stated. 'page_number' is 1-indexed but this is not documented in the parameter description itself.
No pagination metadata returned. at_search and at_case_search accept page_size and page_number but source does not show whether results include total_count, has_next_page, or next_cursor. Without this, agents cannot determine if more results exist.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 65 | 2026-07-28+ | v2 |
at_get_text and at_get_case_text require three parameters (content_url, eli_uri/ecli, human_readable_citation) that must come from prior search results. No validation that these are consistent or that content_url actually belongs to the cited document. Risk of silent mismatches.
Error handling defines codes (invalid_arg, not_found, unsupported_format, upstream_error) but source does not show whether all error paths return structured ToolError or if some fall through as unhandled exceptions. Incomplete error coverage risks raw stack traces reaching the LLM.