ris-austria-mcp-server
Server Details
Search Austrian federal and state law, court decisions, and the authentic Bundesgesetzblatt (RIS).
- Status
- Healthy
- Uptime
- 100.0% over 47 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- cyanheads/ris-austria-mcp-server
- GitHub Stars
- 2
- Server Listing
- ris-austria-mcp-server
TDQS
Scored across 9 tools
The tools are mostly distinct: ris_search_* for searching, ris_get_document for retrieval, ris_list_reference for codes, ris_lookup_citation for citations, and ris_track_changes for monitoring. However, ris_search_announcements vs ris_search_gazette could be confused since both deal with gazettes/promulgations, though descriptions help differentiate.
All tools follow a consistent verb_noun pattern with the prefix ris_, e.g., ris_search_legislation, ris_get_document, ris_track_changes. The pattern is uniform and predictable, making it easy for agents to infer behavior.
With 9 tools, the server is well-scoped for its domain—Austrian legal information retrieval. Each tool covers a distinct aspect: searching legislation, case law, gazettes, drafts, announcements, citation lookup, document retrieval, reference data, and change tracking. No redundancy or unnecessary tools.
The tool set covers the core workflows: search (by keyword, citation, and monitoring), retrieve full documents, and get reference codes. Missing could be a tool for getting full law text by filtering law_id, but that is covered via ris_search_legislation with law_id filter, and ris_get_document can fetch individual sections. Minor gap: no batch retrieval or export, but not critical.
Available Tools
9 toolsris_get_documentGet RIS DocumentARead-onlyIdempotentInspect
Fetch one RIS document’s full text or its rendition URLs, with explicit binding status and the amtssigniert authentic PDF surfaced wherever it exists. Address the document exactly one of two ways: document_number plus application (both copied verbatim from a ris_search_* or ris_lookup_citation result), or a document_url from a result’s content_urls — or, for a draft’s companion documents (Erläuterungen, Textgegenüberstellung, WFA, cover letter, annexes), a ris_search_drafts record’s materials[].url, which is the only route to them. format: markdown (default — the HTML rendition converted to markdown), html (raw HTML rendition), xml (the RIS Nutzdaten XML), or urls_only (no fetch — every rendition URL, including the Authentisch PDF). Format availability varies by application and the tool degrades explicitly, never silently: consolidated law, gazettes, case law, drafts, and most sectoral collections carry full text; district and municipal promulgations and court rules (Bvb, GrA, KmGer) publish only the signed authentic PDF; party-transparency decisions and council minutes (Upts, Mrp) are PDF-only; the 1848–1940 imperial gazettes (BgblAlt) are metadata-only — for these a text-format request returns a format_unavailable notice with the usable URL, not an error. Every result carries binding_status; only authentic (amtssigniert) publications are legally binding. This tool returns content, not fresh metadata — the metadata rides the search/lookup step that produced the document number. When the markdown text overflows the 40,000-byte budget the tool returns an outline (kind: outline) instead of truncating: the document’s §/Artikel/Anlage sections where it carries at least two such headings, otherwise contiguous byte windows named Part 1 of N … Part N of N covering the whole text and listed in document order. Re-call with sections:[…] naming outline entries to retrieve just those; a name matching no entry returns the outline again with a notice rather than the whole document. Windows are cut at line breaks, not at sentence or § boundaries, so one can open mid-sentence — read them in order and pull the neighbour when a passage straddles a cut. Raw html and xml renditions are never sliced: at or under the 40,000-byte budget they return whole; over it the result is kind: link — no text, truncated: true, the full byte_size, and content_urls, whose html or xml entry fetches the whole artifact in one GET. Every HTML rendition opens with a 40–70 KB stylesheet, so html practically always returns kind: link — read with markdown, parse with xml, and fetch content_urls.html for the authentic markup. Markdown drops the screen-reader expansions RIS ships alongside each abbreviated citation, keeping the visible citation form; raw html/xml renditions are returned exactly as published.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | markdown (default — the HTML rendition converted to markdown, and the format for reading), html (raw HTML rendition), xml (RIS Nutzdaten schema), or urls_only (no fetch — all rendition URLs incl. the authentic PDF). html and xml over 40,000 bytes return kind: link with no text — nearly every html rendition does, since each carries a 40–70 KB stylesheet — so fetch content_urls.html or content_urls.xml for the whole artifact. | markdown |
| sections | No | Entry names to retrieve, each copied verbatim from a prior outline response (kind: outline) — §/Artikel/Anlage section names, or window names of the form "Part 2 of 6". Omit for the full document, which returns an outline instead when the markdown overflows the 40,000-byte budget. A name that matches no entry is never silently ignored: a total miss returns the outline (kind: outline) with a notice, a partial miss returns the matched entries with a notice naming others to pick from. Applies to markdown only. html and xml are never sliced — the selector is ignored with a notice, and they return whole under the 40,000-byte budget and as kind: link over it; urls_only carries no text to select from. | |
| application | No | RIS application the document belongs to (e.g. BrKons, Dsk, BgblAuth) — copy verbatim from the same result. Required with document_number. Codes and coverage: ris_list_reference topic applications. | |
| document_url | No | A /Dokumente/… rendition URL on https://www.ris.bka.gv.at or https://ogd.ris.bka.gv.at, passed exactly as a result’s content_urls returned it — the alternative to document_number + application. Also the only way to read a draft’s companion documents: pass a ris_search_drafts record’s materials[].url (the Erläuterungen, Textgegenüberstellung, WFA, cover letter, or annex), whose filenames are opaque and per-record and so cannot be reached through document_number. Every companion filename RIS publishes is accepted, whichever shape it carries. The URL’s own extension is only checked against the rendition extensions RIS uses and is then discarded — format selects which rendition is returned, for a companion exactly as for a main document. A filename that is neither this document’s own rendition nor one of its companions is rejected; companion filenames cannot be composed by hand, so copy one verbatim. | |
| document_number | No | Technical RIS document number (Technisch.ID), e.g. NOR40262691, JJT_…, BGBLA_2026_II_171 — copy verbatim from a ris_search_* or ris_lookup_citation result. Requires application; mutually exclusive with document_url. |
Output Schema
| Name | Required | Description |
|---|---|---|
| kind | No | full — the complete response (document text, selected entries, or rendition URLs). outline — sections lists the retrievable entries instead of the text, either because the markdown overflowed the byte budget or because a sections:[…] selector matched nothing; re-call with sections:[…] naming entries from it. link — an html or xml rendition over the 40,000-byte budget: no text, only byte_size and content_urls, whose entry for the requested format fetches the whole artifact in one GET; re-call with format: markdown to read it. |
| text | No | The document text in the requested format. Absent for urls_only, when the application carries no text rendition (see the notice), for an outline (kind: outline), and for an html or xml rendition over the 40,000-byte budget (kind: link). |
| error | No | Present when the call failed. Absent on success. |
| format | No | The format served — echoes the requested format. |
| notice | No | Present when the requested text format is unavailable for this application (names why and the usable URL), when the document overflowed to a section outline (names how to retrieve sections), when an html or xml rendition overflowed to a link (names content_urls.<format> and format: markdown), or when a sections:[…] entry matched no section or was ignored (names the unmatched entries). |
| sections | No | Present when kind = outline: the document’s addressable entries, each with its UTF-8 byte size — §/Artikel/Anlage sections listed largest first, or, when the markdown carries no such headings, Part n of N byte windows listed in document order and summing to byte_size. Copy names into the sections input verbatim to retrieve them; naming several in one call returns their text concatenated in document order, with nothing inserted between them. |
| byte_size | No | Full UTF-8 byte size of the document text. Present when text was fetched — for an overflowed document (kind: outline) or an over-budget html/xml rendition (kind: link) this reports the full text’s size, not the returned payload’s. |
| truncated | No | Present and true when the full text isn’t inline. kind: outline — the markdown overflowed the byte budget or a sections:[…] selector matched nothing (the notice names which); retrieve entries via the sections input. kind: link — an html or xml rendition overflowed the budget; fetch content_urls.html or content_urls.xml for the whole artifact, or re-call with format: markdown. |
| application | No | RIS application the document belongs to (echoed). |
| content_urls | No | Constructed rendition URLs. Empty for authentic-PDF-only (Bvb/GrA/KmGer) and metadata-only (BgblAlt) applications — see authentic_pdf_url and the notice. For a companion document (a draft’s Erläuterungen, Textgegenüberstellung, WFA, cover letter, or annex) these are the companion’s own XML/HTML/PDF, not the parent document’s — constructed rather than read back from RIS, so for the roughly one companion in eight that RIS files as a PDF only, xml and html return 404 and pdf is the one that resolves. |
| binding_status | No | Legal binding status: authentic (amtssigniert, legally binding), consolidated_informational (consolidated view — not binding), historical_record (superseded/pre-e-Recht promulgation), decision (court/tribunal ruling), preparatory (draft/bill/minutes), administrative_directive (binds the administration, not citizens), or translation (unofficial English). |
| document_number | No | Technical RIS document number (echoed). |
| authentic_pdf_url | No | The amtssigniert authentic PDF (.pdfsig, Authentisch DataType) — the legally binding artifact — where the application publishes one. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark readOnly/openWorld/idempotent; the description adds high-value behavioral disclosure: explicit degradation instead of silent errors, per-application format availability, outline instead of truncation for overflow, link behavior for html/xml over budget, 40-70KB stylesheet warning, and markdown's dropped screen-reader expansions. No statement contradicts the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Long but deliberately structured: purpose and addressing mode first, format behavior and availability next, overflow/outline semantics last, with semicolon-separated clauses keeping relationships clear. Every sentence carries operational constraints an agent needs; there is no filler or tautology.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex retrieval tool with optional parameters, the description covers identification modes, format-by-application behavior, byte-budget handling, section selection, raw-rendition fetching, and companion documents. The output schema exists to define the envelope, so the description's job of behavioral context is fully done.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although schema coverage is 100%, the description substantially deepens each parameter: how format availability and slicing differ, how sections names must be copied from a prior outline and partial misses behave, how document_url can be a materials[].url companion filename, and how document_number requires application and verbatim copying. It also clarifies the mutual exclusivity of identification modes.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence states a specific action and object: fetch one RIS document's full text or rendition URLs, with binding status and authentic PDF surfaced. It also distinguishes itself from the ris_search_*/ris_lookup_citation siblings by being the retrieval step that follows them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says metadata rides the search/lookup step that produced the document number, establishing when not to use this tool. It names the required source results (ris_search_* or ris_lookup_citation, ris_search_drafts materials[].url for companions) and says document_url is the only route to draft companion documents.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ris_list_referenceRIS Reference ListsARead-onlyIdempotentInspect
Ground the opaque German codes across the RIS surface — static and offline, no upstream call. Topics: applications (all 39, with coverage windows, binding status, and content formats), courts (17 codes with Geschäftszahl examples and successor mapping), states (the three Bundesland request spellings), decision_types, decision_kinds (per-court Entscheidungsart values), issuing_bodies (dsk/dok/pvak/verg bodies and social-insurance issuers), ministries (abbreviations and full designations, historical included), collections (the 7 announcement collections and their parameter matrix), stages (lawmaking pipeline), changed_since_intervals, section_types, gazette_parts (BGBl parts and era tiers), law_types, district_authorities (all Bezirksverwaltungsbehörden), justiz_subject_areas (Fachgebiet taxonomy), search_syntax (operators and wildcard rules), and citation_formats (the shapes ris_lookup_citation parses). Recovery hints from the other ris_* tools route here.
| Name | Required | Description | Default |
|---|---|---|---|
| topic | Yes | Which reference table to return. Pick the topic named in the error recovery hint or zero-hit notice that sent you here. |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | Present when the call failed. Absent on success. |
| notes | No | Topic-level caveats and usage guidance. Empty when none apply. |
| topic | No | The requested topic, echoed back. |
| entries | No | Reference entries for the topic. |
| summary | No | What this topic covers and which tool parameters consume its values. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint=false, idempotentHint. The description adds that the tool is 'static and offline, no upstream call', which is consistent with read-only and adds context about no network dependency. It does not contradict annotations. It also states the coverage of topics, which is useful for understanding scope.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but well-structured: it opens with the core purpose, then lists topics with concise parenthetical details, and ends with the routing hint. Each sentence contributes either to scope or usage, so despite length, it is efficient and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has a single parameter with an exhaustive enum, and the output schema exists (not shown but present), the description is complete. It explains what the tool returns, how to choose the topic, why one might land here, and the operational behavior. Nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides an enum of 17 topics with a brief usage instruction. The description significantly adds meaning by detailing what each topic contains (e.g., 'applications (all 39, with coverage windows, binding status, and content formats)'), enabling the agent to select the correct topic. This goes beyond the enum names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific purpose: to ground opaque German codes across the RIS surface by returning static reference tables. It enumerates 17 topics, distinguishing itself from sibling search tools. The phrase 'static and offline, no upstream call' clarifies it is a lookup, not a live query.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly instructs that recovery hints from other ris_* tools route here, and the parameter schema description repeats this guidance ('Pick the topic named in the error recovery hint or zero-hit notice'). This gives clear when-to-use direction and implicitly distinguishes it from the search tools that generate those hints.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ris_lookup_citationResolve Austrian Legal CitationARead-onlyIdempotentInspect
Resolve a single Austrian legal citation to its canonical RIS document deterministically — no keyword search. Four routes are auto-detected from the citation shape (or forced with kind): a norm citation — section-first ("§ 6 DSG", "Art 10 B-VG"), abbreviation-first ("DSG §1", "DSGVO Art32", the shape ris_search_case_law returns in norms_cited), or a bare abbreviation like "ABGB" — resolves through consolidated federal law, or a Bundesland with a state hint, as in force today or on in_force_as_of; a gazette citation ("BGBl. I Nr. 165/1999", pre-2004 "BGBl. Nr. 194/1961", imperial "RGBl. Nr. 189/1902", or "LGBl. Nr. 61/2026" with a state hint) routes to the right federal era tier by year, or to a state Landesgesetzblatt — falling back to that Bundesland’s pre-e-Recht series when the citation predates its switch; a case number ("Ro 2026/03/0016", "G 287/2022", "14Os49/26a", "2025-0.934.677", "W256 …") is matched to its court — pass court to skip detection, and ambiguous formats probe up to two courts; a collection number ("VfSlg 19.632/2012", "VwSlg 18.000 A/2010") resolves through the VfGH/VwGH collection — a VwSlg cite given without its part letter can name one decision in each of the two VwGH series, and comes back as ambiguous with both cites named rather than resolved to one of them. Returns the single best-matching document in the same shape as the corresponding search tool, with alternatives_count when more than one matched. A citation that cannot be classified or resolved returns found: false with next-step guidance — it never throws for a miss; only an upstream RIS outage is an error. For keyword rather than citation lookup, use ris_search_legislation or ris_search_case_law.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | Force a route, or auto (default) to classify by shape. Set explicitly when the citation shape is ambiguous. | auto |
| court | No | Court hint for a case number — short-circuits court detection to this court. Codes: ris_list_reference topic courts, minus normenliste (a norm index, which carries no case numbers). | |
| state | No | Bundesland hint — routes a norm to that state’s consolidated law (LrKons) and an LGBl. gazette to that state’s Landesgesetzblatt (LgblAuth, then the legacy Lgbl series for a citation predating the state’s e-Recht switch). | |
| citation | Yes | The legal citation to resolve, e.g. "§ 6 DSG" or "DSG §1", "Art 10 B-VG", "BGBl. I Nr. 165/1999", "Ro 2026/03/0016", or "VfSlg 19.632/2012". | |
| in_force_as_of | No | For a norm, resolve the version in force on this date (YYYY-MM-DD). Defaults to today in Austria. |
Output Schema
| Name | Required | Description |
|---|---|---|
| kind | No | What the citation parsed as — "unknown" when it did not classify into any route. |
| error | No | Present when the call failed. Absent on success. |
| found | No | True when the citation resolved to a single best-matching document. |
| record | No | The resolved document, in the same normalized shape the corresponding search tool returns — ris_search_legislation for a norm, ris_search_case_law for a case or collection number, ris_search_gazette for a gazette. Present when found is true. |
| guidance | No | Next-step guidance naming a concrete tool. Present when found is false. |
| resolution_note | No | Which application and filter resolved the citation. Present when found is true. |
| alternatives_count | No | Documents that also matched beyond the one returned — present only when more than one matched. List them all with the search tool named in resolution_note. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, but the description adds substantial behavioral detail beyond those: it explains that a miss returns found:false with next-step guidance and never throws, that only an outage is an error, how ambiguous citations (e.g., a VwSlg without a part letter) are handled, and the deterministic nature of resolution. This goes well beyond what annotations convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is quite long but every section earns its place: the opening sentence states purpose and scope, then each route is detailed with examples, and it ends with behavior and alternative tools. It is well-structured with clear separators, though it could be tightened slightly—the nested parentheticals and long enumerations make it dense. Still, it is appropriately sized for the complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (four routes, multiple optional parameters, ambiguity handling) and the presence of an output schema, the description covers all necessary aspects: return shape (same as corresponding search tool, with alternatives_count), behavior on miss (found:false with guidance), error conditions, date handling, state and court hints, and examples. Nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
While schema coverage is 100% (all parameters have descriptions), the tool description adds meaningful semantics beyond the schema. It explains how 'kind' relates to the four routes, when to set it, how 'court' short-circuits detection and lists which courts are excluded, how 'state' routes to specific law series, and provides concrete example citations for the 'citation' parameter. This enriches the parameter understanding beyond the raw schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Resolve a single Austrian legal citation to its canonical RIS document deterministically — no keyword search.' It then enumerates four specific citation routes (norm, gazette, case number, collection number) with concrete examples, and explicitly contrasts with keyword search tools. This both states a specific verb+resource and differentiates from siblings like ris_search_legislation and ris_search_case_law.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit guidance on when to use this tool vs alternatives: 'For keyword rather than citation lookup, use ris_search_legislation or ris_search_case_law.' It also explains when to set 'kind' (when citation shape is ambiguous), 'court' (to skip detection), and 'state' (to route to state law), covering all relevant usage conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ris_search_announcementsSearch Official AnnouncementsARead-onlyIdempotentInspect
Search Austria’s sectoral official gazettes and executive documents — seven collections behind one collection enum: social_insurance (Amtliche Verlautbarungen der Sozialversicherung, authentic), veterinary (Amtliche Veterinärnachrichten, authentic), court_rules (Kundmachungen der Gerichte — rules of procedure and case-allocation plans, authentic; currently LVwG Tirol and Vorarlberg only), trade_exam_rules (Prüfungsordnungen gemäß Gewerbeordnung, authentic), health_structure_plans (Strukturpläne Gesundheit — federal ÖSG and per-state RSG, authentic), ministerial_decrees (Erlässe der Bundesministerien — decrees interpreting law; bind the administration, not citizens), and council_minutes (Ministerratsprotokolle — council-of-ministers session records). Each collection accepts a different filter set: query and title are broadly available; number, published_from/to, in_force_as_of, issuer (ministry and social-insurance carrier abbreviations expanded), norm ("decrees citing the DSG"), case_number, type, department, plan_type/plan_state (health plans), session_number/legislature (council minutes), and changed_since (all but social_insurance and veterinary) apply where the collection supports them — a filter outside its set is rejected locally. Every result carries a binding label, the authentic PDF where it exists, and the RIS web view (document_url) — the only browsable surface for the PDF-only council minutes and for ministerial decrees. Per-collection parameter matrix and issuers: ris_list_reference topic collections or issuing_bodies.
| Name | Required | Description | Default |
|---|---|---|---|
| norm | No | Cited-provision filter (Norm) — "DSG §1", "DSGVO Art32" style. veterinary and ministerial_decrees only ("decrees citing the DSG"). Omit to leave unfiltered; a blank value is rejected. | |
| page | No | 1-based result page. Default 1. | |
| type | No | Document type (Typ) — trade_exam_rules (Befaehigungspruefungsordnung | Meisterpruefungsordnung), court_rules (Geschaeftsordnung | Geschaeftsverteilung), veterinary (Kundmachungen | VeroeffentlichungenAufGrundVEVO | SonstigeVeroeffentlichungen). Omit to leave unfiltered; a blank value is rejected. | |
| query | No | Full-text search (Suchworte). Boolean operators UND/ODER/NICHT or AND/OR/NOT, parentheses, quoted phrases; wildcard * is trailing-only. Valid for all collections. Omit to leave unfiltered; a blank value is rejected. | |
| title | No | Title search (Titel) — phrase field. Valid for all collections except council_minutes. Omit to leave unfiltered; a blank value is rejected. | |
| issuer | No | Issuing body — social_insurance (Urheber: a carrier abbreviation such as ÖGK, DVSV, SVS, BVAEB, AUVA, or PVA is expanded to its full designation; a full designation or a "<ABBR> Gesamtvertrag" series is sent as written), ministerial_decrees (Bundesministerium) or council_minutes (Einbringer) — a ministry abbreviation such as "BMF" is expanded, a full designation is sent as written. Values: ris_list_reference topic issuing_bodies or ministries. Omit to leave unfiltered; a blank value is rejected. | |
| number | No | Serial number (Avsvnummer / Avnnummer / Spgnummer) — social_insurance, veterinary, health_structure_plans. Omit to leave unfiltered; a blank value is rejected. | |
| sort_by | No | Sort column: published or number, where the collection has the column. Default: upstream order. | |
| page_size | No | Documents per page: 10 or 20 (default 20). For more results, keep the size and raise page. | |
| plan_type | No | health_structure_plans only. Plan kind — all (default), expert_opinion (Gutachten), or regulation (Verordnungen). Searches the federal ÖSG unless plan_state is set. | |
| collection | Yes | Which collection to search — one per call. social_insurance | veterinary | court_rules | trade_exam_rules | health_structure_plans | ministerial_decrees | council_minutes. Per-collection filter matrix: ris_list_reference topic collections. | |
| department | No | Ministry department (Abteilung) — ministerial_decrees only. Omit to leave unfiltered; a blank value is rejected. | |
| plan_state | No | health_structure_plans only. Restrict to one Bundesland’s regional health-structure plan (RSG) — setting it switches the search from the federal ÖSG to that state’s RSG. | |
| case_number | No | Business reference number (Geschäftszahl) — veterinary and ministerial_decrees only. Omit to leave unfiltered; a blank value is rejected. | |
| legislature | No | Legislative period (Gesetzgebungsperiode, e.g. "XXVII") — council_minutes only. Omit to leave unfiltered; a blank value is rejected. | |
| published_to | No | Latest publication/session date (YYYY-MM-DD). | |
| changed_since | No | Coarse recency filter — documents changed in RIS within the interval. Every collection except social_insurance and veterinary, where RIS ignores it: use published_from there, or ris_track_changes for changes. For exact windows use ris_track_changes. | |
| in_force_as_of | No | Version in force on this date (YYYY-MM-DD) — veterinary, court_rules, trade_exam_rules, health_structure_plans, ministerial_decrees (the consolidated-ish collections). | |
| published_from | No | Earliest publication/session date (YYYY-MM-DD). All collections except ministerial_decrees (decrees date by force — use in_force_as_of / entered_force_from/to). | |
| session_number | No | Council session number (Sitzungsnummer) — council_minutes only. Omit to leave unfiltered; a blank value is rejected. | |
| sort_direction | No | Sort direction; applies with sort_by. | |
| entered_force_to | No | Provisions that entered force on/before this date (YYYY-MM-DD) — ministerial_decrees only. | |
| entered_force_from | No | Provisions that entered force on/after this date (YYYY-MM-DD) — ministerial_decrees only. |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | No | 1-based page number RIS served. |
| error | No | Present when the call failed. Absent on success. |
| notice | No | Zero-hit guidance — names the likely cause and the concrete next call. |
| results | No | Matching documents for the requested page. Totals and paging in enrichment. |
| pageSize | No | Page size RIS applied. |
| truncated | No | Present and true when more pages exist beyond this one — raise page to continue. |
| totalCount | No | Total matching documents across all pages. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint, openWorldHint, and idempotentHint annotations, the description discloses important runtime behavior: unsupported filters are 'rejected locally', results carry a 'binding label' and authentic PDF where it exists, and document_url is the only browsable surface for PDF-only council minutes and ministerial decrees. This adds substantial operational knowledge that annotations alone do not convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long, but the complexity is high: 7 collections, 23 parameters, and several cross-cutting rules. Every sentence contributes either collection scope, filter applicability, or routing to reference data. The key purpose is front-loaded and the alternative-tool references are woven in efficiently. Minor redundancy exists (collection enum and filter matrix repeated across description and schema), but it earns its length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with high complexity and an output schema, the description covers all needed call-time knowledge: collection semantics, per-collection filter support, result envelope (binding label, PDF, document_url), and where to find reference data. Pagination and default values are already in the schema. No critical operational details appear missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3, but the tool description adds meaningful cross-cutting semantics: which filters apply to which collection, abbreviation expansions, date-filter nuances (e.g., ministerial_decree decrees date by force), and the changed_since caveat. This is genuine added value beyond the per-parameter schema descriptions, though the schema already carries strong individual parameter details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Search Austria’s sectoral official gazettes and executive documents'. It then enumerates seven distinct collections, each with a clear scope and authenticity status. This distinguishes the tool from siblings like ris_search_gazette (general gazettes) and ris_search_legislation (laws) without requiring schema inspection.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context on when to use this tool and points to alternatives for related tasks: ris_list_reference for the per-collection parameter matrix/issuers, and ris_track_changes for exact change windows. It also warns where filters are unsupported (e.g., changed_since ignored for social_insurance and veterinary). It does not explicitly contrast against every sibling search tool, but the domain and collection scope make the usage context reasonably clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ris_search_case_lawSearch Austrian Case LawARead-onlyIdempotentInspect
Search Austrian case law (Judikatur) in ONE court or tribunal per call — court is required: vfgh (Constitutional Court), vwgh (Supreme Administrative Court), justiz (ordinary courts incl. OGH, selected decisions), bvwg (federal administrative), lvwg (state administrative), dsk (data protection authority), normenliste (VwGH norm index), dok, pvak, gbk, verg, upts (party transparency), and the historical uvs, asylgh, ubas, umse, bks. Cross-court research is one call per court (calls are cheap); historical bodies are closed windows with successors — codes, windows, and Geschäftszahl examples: ris_list_reference topic courts. Filter by full-text query, cited norm ("DSG §1", "DSGVO Art32" — the highest-value filter), exact case_number (Geschäftszahl), decision date range, decision_type (headnote vs full text), decision_kind, or the court-conditional filters: issuing_body (dsk/dok/pvak/verg), court_name/legal_area/subject_area (justiz), state (lvwg/uvs), party (upts), commission/senate/discrimination_ground (gbk), subject_law (bks), collection_number (vfgh/vwgh/uvs). For a known Geschäftszahl or VfSlg/VwSlg cite, ris_lookup_citation resolves it directly.
| Name | Required | Description | Default |
|---|---|---|---|
| norm | No | Cited-provision filter (Norm) — "DSG §1", "DSGVO Art32", "GewO 1994 §129", matching the format returned in norms_cited. The highest-value case-law filter. Omit to leave unfiltered; a blank value is rejected. | |
| page | No | 1-based result page. Default 1. | |
| court | Yes | Which court/tribunal application to search — one per call. Codes, coverage windows, and successor mapping: ris_list_reference topic courts. | |
| party | No | Political party the decision concerns (upts only). Documented values: ÖVP, SPÖ, FPÖ, KPÖ, BZÖ, Team Stronach — the filter is full-text, and further party names appear in live data (e.g. "Wandel"). Omit to leave unfiltered; a blank value is rejected. | |
| query | No | Full-text search over decisions (Suchworte). Boolean UND/ODER/NICHT or AND/OR/NOT, quoted phrases, trailing-only * wildcard. Omit to leave unfiltered; a blank value is rejected. | |
| state | No | Which of the nine state administrative courts/senates to search (lvwg and uvs only). | |
| senate | No | Commission senate (gbk only). | |
| sort_by | No | Sort column. Default: upstream order. Not available for court: normenliste, which indexes laws rather than decisions. | |
| page_size | No | Documents per page: 10 or 20 (default 20). For more results, keep the size and raise page. | |
| commission | No | Equal-treatment commission (gbk only): federal (Bundes-Gleichbehandlungskommission) or general (Gleichbehandlungskommission). | |
| court_name | No | Filter within the ordinary courts (justiz only) — "OGH", "OLG Wien", "LG Linz". Omit to leave unfiltered; a blank value is rejected. | |
| decided_to | No | Latest decision date (YYYY-MM-DD). | |
| legal_area | No | Legal area (Rechtsgebiet, justiz only): civil (Zivilrecht) or criminal (Strafrecht). | |
| case_number | No | Exact Geschäftszahl — returns that decision’s documents. Formats differ per court (examples: ris_list_reference topic courts). Not available for normenliste. Omit to leave unfiltered; a blank value is rejected. | |
| subject_law | No | Media statute the case concerns (Bereich, bks only) — e.g. "ORF-Gesetz", "Privatradiogesetz". Omit to leave unfiltered; a blank value is rejected. | |
| decided_from | No | Earliest decision date (YYYY-MM-DD). Not available for normenliste. | |
| issuing_body | No | Deciding body (EntscheidendeBehoerde) — dsk, dok, pvak, and verg only. dsk: Datenschutzbehoerde (2014+) or Datenschutzkommission (up to 2013). Full value lists: ris_list_reference topic issuing_bodies. Omit to leave unfiltered; a blank value is rejected. | |
| subject_area | No | Subject-area taxonomy filter (Fachgebiet, justiz only) — 39 exact German values like "Datenschutzrecht", validated locally: ris_list_reference topic justiz_subject_areas. The corpus carries no tagged documents yet (every value returns 0 hits, verified 2026-07-05) — filter with query or norm instead until RIS populates the tags. Omit to leave unfiltered; a blank value is rejected. | |
| changed_since | No | Coarse recency filter — decisions changed in RIS within the interval. For exact windows use ris_track_changes. | |
| decision_kind | No | Decision kind (Entscheidungsart) — per-court value sets, validated locally: ris_list_reference topic decision_kinds. No such parameter exists for normenliste, dok, pvak, umse, bks, or upts. For justiz the four documented values are not yet populated in the corpus (every value returns 0 hits, verified 2026-07-05) — filter justiz with query or norm instead. Omit to leave unfiltered; a blank value is rejected. | |
| decision_type | No | Search headnotes (Rechtssätze), full decision texts (Entscheidungstexte), or both (all, the default). Not available for gbk, upts, or normenliste. | all |
| sort_direction | No | Sort direction; applies with sort_by. | |
| collection_number | No | Official collection number (Sammlungsnummer). vfgh, vwgh, and uvs only, and the accepted form differs: vfgh and uvs store the bare number and match it dotted or undotted ("19632", "19.632"), while vwgh stores the full labelled undotted cite — pass "VwSlg 18000 A/2010", or the space-anchored prefix "VwSlg 18000 *" when the part letter or year is unknown. A bare or dotted number matches nothing under vwgh. Omit to leave unfiltered; a blank value is rejected. | |
| discrimination_ground | No | Discrimination ground (gbk only): Alter (age), EthnischeZugehoerigkeit (ethnic origin), Geschlecht (gender/sex), Mehrfachdiskriminierung (multiple grounds), Religion (religion), SexuelleOrientierung (sexual orientation), Weltanschauung (worldview/belief). Upstream German enum values, sent verbatim. |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | No | 1-based page number RIS served. |
| error | No | Present when the call failed. Absent on success. |
| notice | No | Zero-hit guidance — names the likely cause and the concrete next call. |
| results | No | Matching documents for the requested page — decisions, or indexed laws under court normenliste. Totals and paging in enrichment. |
| pageSize | No | Page size RIS applied. |
| truncated | No | Present and true when more pages exist beyond this one — raise page to continue. |
| totalCount | No | Total matching documents across all pages. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal readOnly/openWorld/idempotent, but the description adds richer behavioral context: per-court parameter unavailability (e.g., 'Not available for normenliste'), verified data gaps ('every value returns 0 hits, verified 2026-07-05'), and distinct collection-number matching rules for vfgh/vwgh/uvs. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Despite its length, the description is densely packed with no filler. The opening sentence front-loads the core constraint, the court enum is presented compactly, and each subsequent clause contributes a new constraint, caveat, or alternative. The structure mirrors the tool's natural decision process: pick court, then filters, then special cases.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's 24 parameters, output schema presence, and high complexity, the description fully covers court selection, filter semantics, availability caveats, historical windows, and sibling tool handoffs. Nothing an agent needs to decide when to invoke this tool or how to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the description adds meaning far beyond the schema: identifies norm as 'the highest-value filter', clarifies court-conditional filter usage, and supplies data availability proofs for subject_area and decision_kind. It also explains collection_number formatting differences, which the schema alone leaves ambiguous.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Search'), a well-defined resource ('Austrian case law (Judikatur)'), and a critical scoping rule ('in ONE court or tribunal per call — court is required'). It enumerates all court codes, making the search domain unambiguous. It also differentiates from a sibling by directing known-instrument lookups to ris_lookup_citation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names ris_lookup_citation as the right choice for known Geschäftszahl or VfSlg/VwSlg citations, advises on cross-court research strategy ('one call per court; calls are cheap'), and routes code/window definitions to ris_list_reference. It also warns about historical body coverage ('closed windows with successors'). This is clear when-to-use and when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ris_search_draftsSearch Draft LegislationARead-onlyIdempotentInspect
Search Austria’s federal lawmaking pipeline BEFORE promulgation — the monitoring counterpart to ris_search_gazette (what will become law). stage selects the phase: review_drafts (Begutachtungsentwürfe — draft laws a ministry has put into public review, before any government bill exists) or government_bills (Regierungsvorlagen — bills the council of ministers adopted and submitted to parliament, 2004+). Filter by query (full text), title, ministry (accepts an abbreviation like "BMF" — expanded to RIS’s exact designation; the historical name at submission time counts), in_review_on (review_drafts only — drafts whose review window covers the date; today = "what is in Begutachtung right now"), or decided_from/to (government_bills only — council adoption date). changed_since gives coarse recency. Each record carries materials — the companion documents filed with the draft (Erläuterungen, Textgegenüberstellung, Vorblatt/WFA, covering letter, annexes); the Erläuterungen carry the drafting reasoning the bill text omits, and passing a materials[].url to ris_get_document as document_url is the only way to read one (format there picks the rendition returned). Documents are preparatory, not binding law. Ministry codes: ris_list_reference topic ministries.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | 1-based result page. Default 1. | |
| query | No | Full-text search (Suchworte). Boolean operators UND/ODER/NICHT or AND/OR/NOT, parentheses, quoted phrases; wildcard * is trailing-only. Omit to leave unfiltered; a blank value is rejected. | |
| stage | Yes | Which pipeline stage to search — one per call. review_drafts (Begut, ministerial review) or government_bills (RegV, council-adopted bills). Details: ris_list_reference topic stages. | |
| title | No | Title search (Titel) — phrase field: * allowed leading or trailing with ≥2 characters beside it. Omit to leave unfiltered; a blank value is rejected. | |
| sort_by | No | Sort column: date (review deadline or adoption date per stage), ministry, or title. Default: upstream order. | |
| ministry | No | Submitting ministry (EinbringendeStelle). Accepts an abbreviation ("BMF", "BMWET") or a full designation; use the ministry’s name at the time of submission. An abbreviation missing from the table is rejected; a full designation missing from it is sent as written. Table: ris_list_reference topic ministries. Omit to leave unfiltered; a blank value is rejected. | |
| page_size | No | Documents per page: 10 or 20 (default 20). For more results, keep the size and raise page. | |
| decided_to | No | government_bills only. Latest adoption date (YYYY-MM-DD). | |
| decided_from | No | government_bills only. Earliest council-of-ministers adoption date (YYYY-MM-DD). | |
| in_review_on | No | review_drafts only. Drafts whose public-review window covers this date (YYYY-MM-DD). Today = drafts currently in Begutachtung. | |
| changed_since | No | Coarse recency filter — documents changed in RIS within the interval. For exact windows use ris_track_changes. | |
| sort_direction | No | Sort direction; applies with sort_by. |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | No | 1-based page number RIS served. |
| error | No | Present when the call failed. Absent on success. |
| notice | No | Zero-hit guidance — names the likely cause and the concrete next call. |
| results | No | Matching pipeline documents for the requested page. Totals and paging in enrichment. |
| pageSize | No | Page size RIS applied. |
| truncated | No | Present and true when more pages exist beyond this one — raise page to continue. |
| totalCount | No | Total matching documents across all pages. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the safety profile is covered. The description adds valuable behavioral context: documents are preparatory and not binding law, materials carry drafting reasoning, and passing materials[].url to ris_get_document is the only way to read them. It also discloses that ministry abbreviations are expanded to RIS's exact designation and historical names count. Minor gap: no explicit statement about pagination behavior beyond schema, but the description adds substantial context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but well-organized, front-loading the core purpose and stage distinction before diving into parameters. Every sentence carries information, though the materials explanation is somewhat long. It earns a 4 for being information-dense without being bloated, but loses a point for the slightly extended materials digression that could be tightened.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description doesn't need to explain return values. The description covers the tool's position in the workflow (pre-promulgation counterpart to ris_search_gazette), the stage semantics, parameter interactions (stage-specific filters), the materials relationship to ris_get_document, and the legal status of results. For a complex 12-parameter tool, this is complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds meaningful semantics beyond the schema: it explains the stage parameter's phases in context (Begutachtungsentwürfe vs Regierungsvorlagen), clarifies that ministry accepts abbreviations and expands them, explains in_review_on's 'today' semantics, and describes what materials contain. This goes beyond the schema's field-level descriptions, justifying a 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as a search over Austria's federal lawmaking pipeline before promulgation, with a specific verb ('search'), resource ('drafts'), and scope ('before promulgation'). It explicitly distinguishes itself from ris_search_gazette as the monitoring counterpart, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use this tool versus alternatives: it names ris_search_gazette as the counterpart for post-promulgation law, and mentions ris_track_changes for exact change windows. It also explains stage selection (review_drafts vs government_bills) and points to ris_list_reference for ministry codes, giving clear routing context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ris_search_gazetteSearch Austrian GazettesARead-onlyIdempotentInspect
Browse Austria’s promulgation record — the authentic, legally binding gazettes — at every level of government. scope picks the jurisdiction: federal (default; the Bundesgesetzblatt across three era tiers auto-routed by year — BgblAuth 2004+ authentic, BgblPdf 1945–2003, BgblAlt 1848–1940 metadata-only ÖNB scans; one call serves one tier, so a published_from/published_to interval crossing 2004-01-01 or 1945-01-01 is rejected with the boundaries to split at, and RIS carries no federal gazette for 1941–1944), one Bundesland (its Landesgesetzblatt), district (Bezirke promulgations), or municipal (Gemeinde promulgations). For a state scope, series selects law gazettes (law_gazette, the default → LGBl) vs ordinance gazettes (ordinance_gazette → Verordnungsblätter, currently Tirol only), and state_era picks which era of that series to search: current (the default → the authentic LGBl) or legacy (the state’s earlier non-authentic series — Niederösterreich’s systematic LgblNO, or the older Lgbl elsewhere; Wien carries neither, and ordinance gazettes have no legacy series). Filter by query (full text), title, number ("171/2026" — a pre-2004 number auto-routes to the right era tier), part (federal I/II/III or pre_1997), type (laws/regulations/announcements/other), published_from/to, issuer (federal or ordinance gazettes only), district_authority (district only), or municipality (municipal only). Every result carries a binding label (authentic vs historical_record vs consolidated_informational) and the amtssigniert authentic PDF wherever it exists — the binding artifact, never a paraphrase. For one known gazette number, ris_lookup_citation resolves it directly. Coverage windows, era tiers, and part semantics: ris_list_reference topic applications or gazette_parts.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | 1-based result page. Default 1. | |
| part | No | Federal only. part1 (Gesetze) | part2 (Verordnungen) | part3 (Staatsverträge) — parts exist from 1997; pre_1997 searches the older partless BGBl (routes to the 1945–2003 tier). Semantics: ris_list_reference topic gazette_parts. | |
| type | No | Document-type filter (Typ) for federal and state law gazettes: laws (Gesetze) | regulations (Verordnungen) | announcements (Kundmachungen) | other (Sonstiges). | |
| query | No | Full-text search (Suchworte). Boolean operators UND/ODER/NICHT or AND/OR/NOT, parentheses, quoted phrases; wildcard * is trailing-only. Syntax: ris_list_reference topic search_syntax. Omit to leave unfiltered; a blank value is rejected. | |
| scope | No | Jurisdiction level: federal (default — the Bundesgesetzblatt, era tier auto-routed), a Bundesland (burgenland … wien, its Landesgesetzblatt), district (Bezirke promulgations), or municipal (Gemeinde promulgations). | federal |
| title | No | Title search (Titel) — phrase field: * allowed leading or trailing with ≥2 characters beside it. Omit to leave unfiltered; a blank value is rejected. | |
| issuer | No | Issuing body — federal (EinbringendeStelle: a ministry abbreviation such as "BMF" or a full designation; an abbreviation missing from ris_list_reference topic ministries is rejected, a full designation missing from it is sent as written) or ordinance gazettes (Vbl Einbringer, exact match with no wildcards: Landeshauptmann/frau, Landesregierung, Amt der Landesregierung, Sonstige Landesbehörden) only. Omit to leave unfiltered; a blank value is rejected. | |
| number | No | Gazette number, e.g. "171/2026" or "BGBl. II Nr. 171/2026" (federal), "61/2026" (state), a Kundmachungsnummer (district/municipal). A trailing year routes a federal query to the right era tier; a bare number searches the current tier. Omit to leave unfiltered; a blank value is rejected. | |
| series | No | State scopes only. law_gazette (default when omitted) searches the authentic Landesgesetzblatt; ordinance_gazette searches the Verordnungsblätter (Vbl — currently Tirol only, 2022+). | |
| sort_by | No | Sort column: published (Kundmachungsdatum) or number. Availability varies by tier; default: upstream order. | |
| page_size | No | Documents per page: 10 or 20 (default 20). For more results, keep the size and raise page. | |
| state_era | No | State scopes only. current (default when omitted) searches the authentic Landesgesetzblatt; legacy searches the state’s earlier non-authentic series — Niederösterreich’s systematic LgblNO collection, or the historical Lgbl for the other Bundesländer (Wien carries neither). | |
| municipality | No | Municipal only. Exact municipality name (Gemeinde), RIS’s spelling. Omit to leave unfiltered; a blank value is rejected. | |
| published_to | No | Latest promulgation date (YYYY-MM-DD). Federal: the interval must stay inside one era tier, so pair it with published_from — an interval crossing 2004-01-01 or 1945-01-01 is rejected with the boundaries to split at. | |
| published_from | No | Earliest promulgation date (YYYY-MM-DD). A pre-2004 range routes a federal query to an earlier era tier. Federal: the interval must stay inside one tier — set published_to as well, since a one-sided bound is open into every tier beyond it. | |
| sort_direction | No | Sort direction; applies with sort_by. | |
| district_authority | No | District only. Bezirksverwaltungsbehörde name, e.g. "Bezirkshauptmannschaft Liezen" — full list: ris_list_reference topic district_authorities. Omit to leave unfiltered; a blank value is rejected. |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | No | 1-based page number RIS served. |
| error | No | Present when the call failed. Absent on success. |
| notice | No | Zero-hit guidance — names the likely cause and the concrete next call. |
| results | No | Matching gazette entries for the requested page. Totals, paging, and the served application in enrichment. |
| pageSize | No | Page size RIS applied. |
| truncated | No | Present and true when more pages exist beyond this one — raise page to continue. |
| totalCount | No | Total matching entries across all pages. |
| servedApplication | No | The RIS application that served the query — for federal, the single era tier auto-routed from the number’s year or the publication-date interval (BgblAuth 2004+, BgblPdf 1945–2003, BgblAlt 1848–1940); otherwise the resolved state/district/municipal application. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the read-only, idempotent, and open-world annotations, the description discloses important behavior: year-based tier auto-routing, rejection of date intervals crossing tier boundaries, missing federal gazette coverage for 1941–1944, Tirol-only ordinance gazettes, Vienna's lack of legacy series, and the binding-label/authentic-PDF behavior of results. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but not padded, and it front-loads the core resource and jurisdiction scope. It is one long paragraph rather than structured bullets, and some details repeat schema descriptions, but the complexity of 17 parameters and tiered federal/state rules justifies its length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 17 optional parameters and an output schema, the description covers the necessary selection context: jurisdiction scopes, era tiers, state series, filter semantics, result labels, and a pointer to ris_list_reference for supplementary reference data. Nothing critical for invoking the tool correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already documents all 17 parameters at 100% coverage, so the baseline is 3. The description adds value by tying parameters to jurisdiction and series choices, explaining date-boundary constraints, giving concrete number examples, and clarifying pre-2004 auto-routing behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('Browse') and a specific resource: Austria's authentic, legally binding gazettes at federal, state, district, and municipal levels. It also distinguishes the tool from the closest sibling by stating that ris_lookup_citation resolves a known gazette number directly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear when-to-use context: searching/browsing gazettes across jurisdictions and eras, with an explicit alternative for known citation numbers. It also directs the agent to ris_list_reference for coverage windows, era tiers, and part semantics, though it does not explicitly contrast with sibling search tools like ris_search_legislation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ris_search_legislationSearch Austrian LegislationARead-onlyIdempotentInspect
Search Austrian consolidated law and English translations: federal law (scope: federal, the default), one Bundesland (scope: burgenland … wien), municipal law (municipality plus a state scope — selected norms in 6 Bundesländer), or English translations of selected federal laws (language: english, federal only, ~138 documents). One document is one § / Artikel / Anlage; fetch a whole law by filtering law_id. Searches apply the version in force today in Austria by default — set in_force_as_of for another date, include_all_versions: true for full version history, or an entered_force / left_force window for new-law and repeal tracking; the three version filters are mutually exclusive, and the applied date is echoed back in the result. query is full text (boolean UND/ODER/NICHT or AND/OR/NOT, trailing-only * wildcard); title matches title, short title, and abbreviation ("DSG"). For a specific citation like "§ 6 DSG", ris_lookup_citation resolves it deterministically instead. Consolidated text is informational, not legally binding — the authentic gazette artifact lives in ris_search_gazette.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | 1-based result page. Default 1. | |
| index | No | Systematik classification filter (e.g. "10/10 Datenschutz"). Federal/state consolidated law only. Omit to leave unfiltered; a blank value is rejected. | |
| query | No | Full-text search (Suchworte). Boolean operators UND/ODER/NICHT or AND/OR/NOT, parentheses, quoted phrases; wildcard * is trailing-only ("Datenschutz*", never "*schutz"). Syntax: ris_list_reference topic search_syntax. Omit to leave unfiltered; a blank value is rejected. | |
| scope | No | Jurisdiction: federal (default) searches consolidated federal law; a Bundesland searches that state’s consolidated law (or, with municipality set, its municipal law). | federal |
| title | No | Title search (Titel) — matches title, short title, and official abbreviation ("ABGB", "DSG"). Phrase field: * allowed leading or trailing with ≥2 characters beside it. Omit to leave unfiltered; a blank value is rejected. | |
| law_id | No | Law-level grouping key (Gesetzesnummer, e.g. 10001597 = DSG) — exact match; returns every section of that law. Federal/state consolidated law only. Omit to leave unfiltered; a blank value is rejected. | |
| sort_by | No | Sort column: section (§/Artikel/Anlage label) or in_force_date. Default: upstream order. Federal/state consolidated law only. | |
| language | No | german (default) searches the authoritative German corpus; english searches the ~138 unofficial English translations of selected federal laws (requires scope: federal; combines only with query and title). | german |
| page_size | No | Documents per page: 10 or 20 (default 20). For more results, keep the size and raise page. | |
| section_to | No | End of the section range. Equal to section_from for a single section. Omit to leave unfiltered; a blank value is rejected. | |
| municipality | No | Municipality name for municipal law (e.g. "Graz" — RIS’s spelling, not "Stadt Graz"). Requires a state scope; combines only with query, title, and in_force_as_of. Coverage is selected norms in 6 Bundesländer (no Burgenland/Tirol/Vorarlberg). Omit to search consolidated law; a blank value is rejected. | |
| section_from | No | Start of a § / Artikel / Anlage number range, digits with optional letter ("6", "1a"). Federal/state consolidated law only. Omit to leave unfiltered; a blank value is rejected. | |
| section_type | No | Which section kind the range addresses. Defaults to Paragraph when a section range is set. Values: ris_list_reference topic section_types. | |
| changed_since | No | Coarse recency filter — documents changed in RIS within the interval. For exact windows and deletions use ris_track_changes. | |
| left_force_to | No | Provisions that left force on/before this date (YYYY-MM-DD). | |
| in_force_as_of | No | Return only the version in force on this date (YYYY-MM-DD). DEFAULTS TO TODAY in Austria — omitting it never searches all historical versions; opt into that with include_all_versions. | |
| sort_direction | No | Sort direction; applies with sort_by. | |
| left_force_from | No | Provisions that left force on/after this date (YYYY-MM-DD) — repeal tracking. Same exclusivity as entered_force_from. | |
| entered_force_to | No | Provisions that entered force on/before this date (YYYY-MM-DD). | |
| entered_force_from | No | Provisions that entered force on/after this date (YYYY-MM-DD) — new-law tracking. Federal/state consolidated law only; mutually exclusive with in_force_as_of and include_all_versions. | |
| include_all_versions | No | true searches every historical version (no in-force date filter) — version-history research. Overrides in_force_as_of; mutually exclusive with the force-window filters. |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | No | 1-based page number RIS served. |
| error | No | Present when the call failed. Absent on success. |
| notice | No | Zero-hit guidance — names the likely cause and the concrete next call. |
| results | No | Matching documents for the requested page. Totals and paging in enrichment. |
| pageSize | No | Page size RIS applied. |
| truncated | No | Present and true when more pages exist beyond this one — raise page to continue. |
| totalCount | No | Total matching documents across all pages. |
| appliedInForceAsOf | No | The in-force date the server actually applied (defaulted to today in Austria when omitted). Absent when include_all_versions, a force-window, or language: english searched without a date filter. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, but the description adds substantial behavioral context beyond them: it notes the applied date is echoed back in results, explains that consolidated text is informational and not legally binding (pointing to the gazette for authoritative text), clarifies that in_force_as_of defaults to today, and details how include_all_versions overrides it. This goes well beyond the annotation hints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but information-dense; every sentence contributes value. It is front-loaded with the core purpose, then systematically covers scopes, version filters, query syntax, and alternatives. For a tool with 21 parameters, the length is justified and well-organized, with no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity, the description is remarkably complete. It covers all major scopes, version filtering modes, query syntax, parameter combinations, and points to sibling tools for alternative needs. The output schema exists, so return-value details are not required. An agent can correctly select and invoke this tool with the information provided.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3, but the description adds significant meaning beyond the schema: it explains mutual exclusivity between in_force_as_of, include_all_versions, and force-window filters, clarifies combination constraints (e.g., language english only with query/title and scope federal), describes how law_id groups sections, and notes that section_type defaults to Paragraph. These semantics are not in the schema and are critical for correct usage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: searching Austrian consolidated law across federal, state, and municipal levels, plus English translations. It distinguishes itself from siblings by explicitly naming alternatives like ris_lookup_citation for citations, ris_search_gazette for authentic gazette artifacts, and ris_track_changes for change tracking, making its unique role obvious.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-use guidance: for specific citations use ris_lookup_citation, for authentic gazette use ris_search_gazette, for change tracking use ris_track_changes. It also details filter combination rules, mutual exclusivity of version filters, and scope constraints (e.g., municipality requires a state scope, English requires federal). This is comprehensive and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ris_track_changesTrack RIS ChangesARead-onlyIdempotentInspect
Track every document added or changed in one RIS application within an exact date window (changed_from/changed_to), optionally including deletions (include_deleted) — the delta-sync and monitoring primitive for mirrors and watchers, and the only surface that reports removals. Unlike the search tools’ coarse, additive-only changed_since intervals, this is exact-dated and deletion-aware. application accepts every RIS application code listed by ris_list_reference topic applications, including BrKons, LrKons, Dsk, and BgblAuth. Each changed document comes back in a compact cross-class record — document_number (for ris_get_document), title, dates, binding_status, and rendition URLs — plus its last-changed date; removed documents come back as deleted records with a deletion timestamp. One application per call; page explicitly for large windows.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | 1-based result page. Default 1. | |
| page_size | No | Documents per page: 10 or 20 (default 20). For more results, keep the size and raise page. | |
| changed_to | No | Include documents changed on/before this date (YYYY-MM-DD, AenderungenBis). | |
| application | Yes | RIS application whose change feed to read, e.g. BrKons, LrKons, Dsk, or BgblAuth. All supported codes: ris_list_reference topic applications. | |
| changed_from | No | Include documents changed on/after this date (YYYY-MM-DD, AenderungenVon). Exact date, not a coarse interval. | |
| include_deleted | No | true also returns documents removed from RIS in the window, as deleted records — the only way to observe deletions. |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | No | 1-based page number RIS served. |
| error | No | Present when the call failed. Absent on success. |
| notice | No | Zero-hit guidance — names the likely cause and the concrete next call. |
| results | No | Change-feed entries for the requested page. Totals, paging, and the applied window in enrichment. |
| pageSize | No | Page size RIS applied. |
| changedTo | No | The changed_to bound the server applied (echo), when set. |
| truncated | No | Present and true when more pages exist beyond this one — raise page to continue. |
| totalCount | No | Total change-feed entries across all pages. |
| application | No | The application whose change feed was read. |
| changedFrom | No | The changed_from bound the server applied (echo), when set. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, open-world, and idempotency, so the description adds value by disclosing deletion-awareness (only way to observe removals), the compact cross-class return structure, and the requirement to page explicitly. It does not contradict annotations and goes beyond them with operational details, though it could mention rate limits or auth.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is longer than a one-liner but every sentence earns its place: it front-loads purpose, contrasts with siblings, details parameters, and gives pagination advice. The information is ordered logically (core function → differentiation → parameter specifics → return format) with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given six parameters, an open-world setting, and an output schema, the description covers usage, parameter semantics (via context), return format, and pagination. It tells the agent when to use it, how to call it, and what to expect, leaving no critical gap for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds contextual meaning: it emphasizes that changed_from/changed_to are exact dates (not coarse intervals), clarifies include_deleted is the only way to see deletions, and notes application codes come from ris_list_reference. This enriches the schema without duplication.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (track), resource (every document added or changed in one RIS application), and scope (exact date window). It explicitly contrasts with the search tools' coarse changed_since intervals and notes it is the only surface that reports removals, clearly distinguishing it from all eight siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly positions the tool as the delta-sync and monitoring primitive, states when to page, and lists application codes via ris_list_reference. It names the alternatives (search tools) and explains why this tool is preferred for exact-dated, deletion-aware queries. No ambiguity about when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
7 tool updates
- Changed
ris_get_document10 fields changed- changed
Input schema / properties / document_url / descriptionPrevious value: -"A https://www.ris.bka.gv.at/Dokumente/… rendition URL as returned in a result’s content_urls — the alternative to document_number + application. Also the only way to read a draft’s companion documents: pass a ris_search_drafts record’s materials[].url (the Erläuterungen, Textgegenüberstellung, WFA, cover letter, or annex), whose filenames are opaque and per-record and so cannot be reached through document_number. Every companion filename RIS publishes is accepted, whichever shape it carries. The URL’s own extension is only checked against the rendition extensions RIS uses and is then discarded — format selects which rendition is returned, for a companion exactly as for a main document. A filename that is neither this document’s own rendition nor one of its companions is rejected; companion filenames cannot be composed by hand, so copy one verbatim."New value: +"A /Dokumente/… rendition URL on https://www.ris.bka.gv.at or https://ogd.ris.bka.gv.at, passed exactly as a result’s content_urls returned it — the alternative to document_number + application. Also the only way to read a draft’s companion documents: pass a ris_search_drafts record’s materials[].url (the Erläuterungen, Textgegenüberstellung, WFA, cover letter, or annex), whose filenames are opaque and per-record and so cannot be reached through document_number. Every companion filename RIS publishes is accepted, whichever shape it carries. The URL’s own extension is only checked against the rendition extensions RIS uses and is then discarded — format selects which rendition is returned, for a companion exactly as for a main document. A filename that is neither this document’s own rendition nor one of its companions is rejected; companion filenames cannot be composed by hand, so copy one verbatim." - changed
Input schema / properties / format / descriptionPrevious value: -"markdown (default — the HTML rendition converted to markdown), html (raw HTML rendition), xml (RIS Nutzdaten schema), or urls_only (no fetch — all rendition URLs incl. the authentic PDF)."New value: +"markdown (default — the HTML rendition converted to markdown, and the format for reading), html (raw HTML rendition), xml (RIS Nutzdaten schema), or urls_only (no fetch — all rendition URLs incl. the authentic PDF). html and xml over 40,000 bytes return kind: link with no text — nearly every html rendition does, since each carries a 40–70 KB stylesheet — so fetch content_urls.html or content_urls.xml for the whole artifact." - changed
Input schema / properties / sections / descriptionPrevious value: -"Entry names to retrieve, each copied verbatim from a prior outline response (kind: outline) — §/Artikel/Anlage section names, or window names of the form \"Part 2 of 6\". Omit for the full document, which returns an outline instead when the markdown overflows the 40,000-byte budget. A name that matches no entry is never silently ignored: a total miss returns the outline (kind: outline) with a notice, a partial miss returns the matched entries with a notice naming others to pick from. Applies to markdown only — html, xml, and urls_only are never sliced and return in full."New value: +"Entry names to retrieve, each copied verbatim from a prior outline response (kind: outline) — §/Artikel/Anlage section names, or window names of the form \"Part 2 of 6\". Omit for the full document, which returns an outline instead when the markdown overflows the 40,000-byte budget. A name that matches no entry is never silently ignored: a total miss returns the outline (kind: outline) with a notice, a partial miss returns the matched entries with a notice naming others to pick from. Applies to markdown only. html and xml are never sliced — the selector is ignored with a notice, and they return whole under the 40,000-byte budget and as kind: link over it; urls_only carries no text to select from." - changed
Output schema / properties / byte_size / descriptionPrevious value: -"Full UTF-8 byte size of the document text. Present when text was fetched — for an overflowed document (kind: outline) this reports the full text’s size, not the outline payload’s."New value: +"Full UTF-8 byte size of the document text. Present when text was fetched — for an overflowed document (kind: outline) or an over-budget html/xml rendition (kind: link) this reports the full text’s size, not the returned payload’s." - changed
Output schema / properties / error / properties / data / properties / reason / descriptionPrevious value: -"Machine-readable failure mode. Declared by this tool: `invalid_addressing`: Neither or both addressing modes were provided, document_number was given without application, or the document_number/application pairing is not a valid RIS document — thrown locally before any fetch. `unsupported_url`: document_url fails the host + /Dokumente/ path-prefix allowlist, its path segment is not a recognized RIS application, or its trailing filename addresses neither the document’s own rendition nor one of its companion documents — thrown locally, nothing fetched. `document_not_found`: The constructed or passed content URL returned 404. `upstream_error`: The RIS content host was unreachable or returned a server error. `upstream_timeout`: The content host did not return the rendition within the fetch deadline — typically a cold render, which it performs on first request before caching the result. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `invalid_addressing`: Neither or both addressing modes were provided, document_number was given without application, or the document_number/application pairing is not a valid RIS document — thrown locally before any fetch. `unsupported_url`: document_url fails the origin + /Dokumente/ path-prefix allowlist (exactly https://www.ris.bka.gv.at and https://ogd.ris.bka.gv.at), its path segment is not a recognized RIS application, or its trailing filename addresses neither the document’s own rendition nor one of its companion documents — thrown locally, nothing fetched. `document_not_found`: The constructed or passed content URL returned 404. `upstream_error`: The RIS content host was unreachable or returned a server error. `upstream_timeout`: The content host did not return the rendition within the fetch deadline — typically a cold render, which it performs on first request before caching the result. Other values are possible when a failure originates below the handler." - changed
Output schema / properties / kind / descriptionPrevious value: -"full — the complete response (document text, selected entries, or rendition URLs). outline — sections lists the retrievable entries instead of the text, either because the document overflowed the byte budget or because a sections:[…] selector matched nothing; re-call with sections:[…] naming entries from it."New value: +"full — the complete response (document text, selected entries, or rendition URLs). outline — sections lists the retrievable entries instead of the text, either because the markdown overflowed the byte budget or because a sections:[…] selector matched nothing; re-call with sections:[…] naming entries from it. link — an html or xml rendition over the 40,000-byte budget: no text, only byte_size and content_urls, whose entry for the requested format fetches the whole artifact in one GET; re-call with format: markdown to read it." - changed
Output schema / properties / kind / enumPrevious value: -[ - "full", - "outline" -]New value: +[ + "full", + "outline", + "link" +] - changed
Output schema / properties / notice / descriptionPrevious value: -"Present when the requested text format is unavailable for this application (names why and the usable URL), when the document overflowed to a section outline (names how to retrieve sections), or when a sections:[…] entry matched no section (names the unmatched entries)."New value: +"Present when the requested text format is unavailable for this application (names why and the usable URL), when the document overflowed to a section outline (names how to retrieve sections), when an html or xml rendition overflowed to a link (names content_urls.<format> and format: markdown), or when a sections:[…] entry matched no section or was ignored (names the unmatched entries)." - changed
Output schema / properties / text / descriptionPrevious value: -"The document text in the requested format. Absent for urls_only and when the application carries no text rendition (see the notice)."New value: +"The document text in the requested format. Absent for urls_only, when the application carries no text rendition (see the notice), for an outline (kind: outline), and for an html or xml rendition over the 40,000-byte budget (kind: link)." - changed
Output schema / properties / truncated / descriptionPrevious value: -"Present and true when the full text isn’t inline because an outline was returned instead (kind: outline) — either the document overflowed the byte budget, or a sections:[…] selector matched nothing. The notice names which. Retrieve entries via the sections input, or fetch content_urls for the whole artifact."New value: +"Present and true when the full text isn’t inline. kind: outline — the markdown overflowed the byte budget or a sections:[…] selector matched nothing (the notice names which); retrieve entries via the sections input. kind: link — an html or xml rendition overflowed the budget; fetch content_urls.html or content_urls.xml for the whole artifact, or re-call with format: markdown."
- Changed
ris_search_announcements27 fields changed- changed
Input schema / properties / case_number / descriptionPrevious value: -"Business reference number (Geschäftszahl) — veterinary and ministerial_decrees only."New value: +"Business reference number (Geschäftszahl) — veterinary and ministerial_decrees only. Omit to leave unfiltered; a blank value is rejected." - added
Input schema / properties / case_number / patternAdded value: +"\\S" - changed
Input schema / properties / changed_since / descriptionPrevious value: -"Coarse recency filter — documents changed in RIS within the interval. For exact windows use ris_track_changes."New value: +"Coarse recency filter — documents changed in RIS within the interval. Every collection except social_insurance and veterinary, where RIS ignores it: use published_from there, or ris_track_changes for changes. For exact windows use ris_track_changes." - changed
Input schema / properties / department / descriptionPrevious value: -"Ministry department (Abteilung) — ministerial_decrees only."New value: +"Ministry department (Abteilung) — ministerial_decrees only. Omit to leave unfiltered; a blank value is rejected." - added
Input schema / properties / department / patternAdded value: +"\\S" - changed
Input schema / properties / issuer / descriptionPrevious value: -"Issuing body — social_insurance (Urheber, e.g. ÖGK/SVS/BVAEB/AUVA/PVA), ministerial_decrees (Bundesministerium — abbreviation expanded), council_minutes (Einbringer ministry). Values: ris_list_reference topic issuing_bodies or ministries."New value: +"Issuing body — social_insurance (Urheber: a carrier abbreviation such as ÖGK, DVSV, SVS, BVAEB, AUVA, or PVA is expanded to its full designation; a full designation or a \"<ABBR> Gesamtvertrag\" series is sent as written), ministerial_decrees (Bundesministerium) or council_minutes (Einbringer) — a ministry abbreviation such as \"BMF\" is expanded, a full designation is sent as written. Values: ris_list_reference topic issuing_bodies or ministries. Omit to leave unfiltered; a blank value is rejected." - added
Input schema / properties / issuer / patternAdded value: +"\\S" - changed
Input schema / properties / legislature / descriptionPrevious value: -"Legislative period (Gesetzgebungsperiode, e.g. \"XXVII\") — council_minutes only."New value: +"Legislative period (Gesetzgebungsperiode, e.g. \"XXVII\") — council_minutes only. Omit to leave unfiltered; a blank value is rejected." - added
Input schema / properties / legislature / patternAdded value: +"\\S" - changed
Input schema / properties / norm / descriptionPrevious value: -"Cited-provision filter (Norm) — \"DSG §1\", \"DSGVO Art32\" style. veterinary and ministerial_decrees only (\"decrees citing the DSG\")."New value: +"Cited-provision filter (Norm) — \"DSG §1\", \"DSGVO Art32\" style. veterinary and ministerial_decrees only (\"decrees citing the DSG\"). Omit to leave unfiltered; a blank value is rejected." - added
Input schema / properties / norm / patternAdded value: +"\\S" - changed
Input schema / properties / number / descriptionPrevious value: -"Serial number (Avsvnummer / Avnnummer / Spgnummer) — social_insurance, veterinary, health_structure_plans."New value: +"Serial number (Avsvnummer / Avnnummer / Spgnummer) — social_insurance, veterinary, health_structure_plans. Omit to leave unfiltered; a blank value is rejected." - added
Input schema / properties / number / patternAdded value: +"\\S" - removed
Input schema / properties / page_size / anyOfRemoved value: -[ - { - "const": 10, - "type": "number" - }, - { - "const": 20, - "type": "number" - }, - { - "const": 50, - "type": "number" - }, - { - "const": 100, - "type": "number" - } -] - changed
Input schema / properties / page_size / descriptionPrevious value: -"Documents per page — RIS accepts 10, 20, 50, or 100. Default 20."New value: +"Documents per page: 10 or 20 (default 20). For more results, keep the size and raise page." - added
Input schema / properties / page_size / enumAdded value: +[ + 10, + 20 +] - added
Input schema / properties / page_size / typeAdded value: +"number" - changed
Input schema / properties / query / descriptionPrevious value: -"Full-text search (Suchworte). Boolean operators UND/ODER/NICHT or AND/OR/NOT, parentheses, quoted phrases; wildcard * is trailing-only. Valid for all collections."New value: +"Full-text search (Suchworte). Boolean operators UND/ODER/NICHT or AND/OR/NOT, parentheses, quoted phrases; wildcard * is trailing-only. Valid for all collections. Omit to leave unfiltered; a blank value is rejected." - added
Input schema / properties / query / patternAdded value: +"\\S" - changed
Input schema / properties / session_number / descriptionPrevious value: -"Council session number (Sitzungsnummer) — council_minutes only."New value: +"Council session number (Sitzungsnummer) — council_minutes only. Omit to leave unfiltered; a blank value is rejected." - added
Input schema / properties / session_number / patternAdded value: +"\\S" - changed
Input schema / properties / title / descriptionPrevious value: -"Title search (Titel) — phrase field. Valid for all collections except council_minutes."New value: +"Title search (Titel) — phrase field. Valid for all collections except council_minutes. Omit to leave unfiltered; a blank value is rejected." - added
Input schema / properties / title / patternAdded value: +"\\S" - changed
Input schema / properties / type / descriptionPrevious value: -"Document type (Typ) — trade_exam_rules (Befaehigungspruefungsordnung | Meisterpruefungsordnung), court_rules (Geschaeftsordnung | Geschaeftsverteilung), veterinary (Kundmachungen | VeroeffentlichungenAufGrundVEVO | SonstigeVeroeffentlichungen)."New value: +"Document type (Typ) — trade_exam_rules (Befaehigungspruefungsordnung | Meisterpruefungsordnung), court_rules (Geschaeftsordnung | Geschaeftsverteilung), veterinary (Kundmachungen | VeroeffentlichungenAufGrundVEVO | SonstigeVeroeffentlichungen). Omit to leave unfiltered; a blank value is rejected." - added
Input schema / properties / type / patternAdded value: +"\\S" - changed
Output schema / properties / error / properties / data / properties / reason / descriptionPrevious value: -"Machine-readable failure mode. Declared by this tool: `collection_filter_mismatch`: A parameter was combined with a collection that does not accept it — rejected locally before any upstream call; the message names the offending parameter and lists the collection’s valid parameters. `invalid_query`: A page past the last page of results; or a parameter value rejected locally — an unknown or ambiguous issuer, a plan_state outside regional health-structure plans, or a sort_by value this collection has no column for, in which case the message names the values it does sort by; or RIS rejecting a value in-band (the Client error message is passed through verbatim, in German, and it does not name the page). `upstream_error`: RIS is unreachable, returned a server error, or served an HTML error page. `upstream_timeout`: RIS did not answer the search within the request deadline. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `collection_filter_mismatch`: A parameter was combined with a collection that does not accept it — rejected locally before any upstream call; the message names the offending parameter and lists the collection’s valid parameters. Includes changed_since on social_insurance or veterinary, where RIS ignores the recency filter and would return the whole collection; that rejection’s recovery names the replacement calls. `unresolved_ministry`: A ministerial_decrees or council_minutes issuer did not resolve — an abbreviation-shaped value matching no row of the RIS ministries table (the message names the closest matches), a ministry the table lists only for another issuer parameter (the message names the parameters that accept it), or an abbreviation carrying several designations this collection cannot tell apart (the message lists them). Rejected locally before any upstream call; a value the table does not know that contains a space is sent to RIS as written instead. `invalid_query`: A page past the last page of results; or a parameter value rejected locally — a plan_state outside regional health-structure plans, or a sort_by value this collection has no column for, in which case the message names the values it does sort by; or RIS rejecting a value in-band (the Client error message is passed through verbatim, in German, and it does not name the page). `upstream_error`: RIS is unreachable, returned a server error, or served an HTML error page. `upstream_timeout`: RIS did not answer the search within the request deadline. Other values are possible when a failure originates below the handler." - changed
Output schema / properties / error / properties / data / properties / reason / examplesPrevious value: -[ - "collection_filter_mismatch", - "invalid_query", - "upstream_error", - "upstream_timeout" -]New value: +[ + "collection_filter_mismatch", + "unresolved_ministry", + "invalid_query", + "upstream_error", + "upstream_timeout" +]
- Changed
ris_search_case_law24 fields changed- changed
Input schema / properties / case_number / descriptionPrevious value: -"Exact Geschäftszahl — returns that decision’s documents. Formats differ per court (examples: ris_list_reference topic courts). Not available for normenliste."New value: +"Exact Geschäftszahl — returns that decision’s documents. Formats differ per court (examples: ris_list_reference topic courts). Not available for normenliste. Omit to leave unfiltered; a blank value is rejected." - added
Input schema / properties / case_number / patternAdded value: +"\\S" - changed
Input schema / properties / collection_number / descriptionPrevious value: -"Official collection number (Sammlungsnummer). vfgh, vwgh, and uvs only, and the accepted form differs: vfgh and uvs store the bare number and match it dotted or undotted (\"19632\", \"19.632\"), while vwgh stores the full labelled undotted cite — pass \"VwSlg 18000 A/2010\", or the space-anchored prefix \"VwSlg 18000 *\" when the part letter or year is unknown. A bare or dotted number matches nothing under vwgh."New value: +"Official collection number (Sammlungsnummer). vfgh, vwgh, and uvs only, and the accepted form differs: vfgh and uvs store the bare number and match it dotted or undotted (\"19632\", \"19.632\"), while vwgh stores the full labelled undotted cite — pass \"VwSlg 18000 A/2010\", or the space-anchored prefix \"VwSlg 18000 *\" when the part letter or year is unknown. A bare or dotted number matches nothing under vwgh. Omit to leave unfiltered; a blank value is rejected." - added
Input schema / properties / collection_number / patternAdded value: +"\\S" - changed
Input schema / properties / court_name / descriptionPrevious value: -"Filter within the ordinary courts (justiz only) — \"OGH\", \"OLG Wien\", \"LG Linz\"."New value: +"Filter within the ordinary courts (justiz only) — \"OGH\", \"OLG Wien\", \"LG Linz\". Omit to leave unfiltered; a blank value is rejected." - added
Input schema / properties / court_name / patternAdded value: +"\\S" - changed
Input schema / properties / decision_kind / descriptionPrevious value: -"Decision kind (Entscheidungsart) — per-court value sets, validated locally: ris_list_reference topic decision_kinds. No such parameter exists for normenliste, dok, pvak, umse, bks, or upts. For justiz the four documented values are not yet populated in the corpus (every value returns 0 hits, verified 2026-07-05) — filter justiz with query or norm instead."New value: +"Decision kind (Entscheidungsart) — per-court value sets, validated locally: ris_list_reference topic decision_kinds. No such parameter exists for normenliste, dok, pvak, umse, bks, or upts. For justiz the four documented values are not yet populated in the corpus (every value returns 0 hits, verified 2026-07-05) — filter justiz with query or norm instead. Omit to leave unfiltered; a blank value is rejected." - added
Input schema / properties / decision_kind / patternAdded value: +"\\S" - changed
Input schema / properties / issuing_body / descriptionPrevious value: -"Deciding body (EntscheidendeBehoerde) — dsk, dok, pvak, and verg only. dsk: Datenschutzbehoerde (2014+) or Datenschutzkommission (up to 2013). Full value lists: ris_list_reference topic issuing_bodies."New value: +"Deciding body (EntscheidendeBehoerde) — dsk, dok, pvak, and verg only. dsk: Datenschutzbehoerde (2014+) or Datenschutzkommission (up to 2013). Full value lists: ris_list_reference topic issuing_bodies. Omit to leave unfiltered; a blank value is rejected." - added
Input schema / properties / issuing_body / patternAdded value: +"\\S" - changed
Input schema / properties / norm / descriptionPrevious value: -"Cited-provision filter (Norm) — \"DSG §1\", \"DSGVO Art32\", \"GewO 1994 §129\", matching the format returned in norms_cited. The highest-value case-law filter."New value: +"Cited-provision filter (Norm) — \"DSG §1\", \"DSGVO Art32\", \"GewO 1994 §129\", matching the format returned in norms_cited. The highest-value case-law filter. Omit to leave unfiltered; a blank value is rejected." - added
Input schema / properties / norm / patternAdded value: +"\\S" - removed
Input schema / properties / page_size / anyOfRemoved value: -[ - { - "const": 10, - "type": "number" - }, - { - "const": 20, - "type": "number" - }, - { - "const": 50, - "type": "number" - }, - { - "const": 100, - "type": "number" - } -] - changed
Input schema / properties / page_size / descriptionPrevious value: -"Documents per page — RIS accepts 10, 20, 50, or 100. Default 20."New value: +"Documents per page: 10 or 20 (default 20). For more results, keep the size and raise page." - added
Input schema / properties / page_size / enumAdded value: +[ + 10, + 20 +] - added
Input schema / properties / page_size / typeAdded value: +"number" - changed
Input schema / properties / party / descriptionPrevious value: -"Political party the decision concerns (upts only). Documented values: ÖVP, SPÖ, FPÖ, KPÖ, BZÖ, Team Stronach — the filter is full-text, and further party names appear in live data (e.g. \"Wandel\")."New value: +"Political party the decision concerns (upts only). Documented values: ÖVP, SPÖ, FPÖ, KPÖ, BZÖ, Team Stronach — the filter is full-text, and further party names appear in live data (e.g. \"Wandel\"). Omit to leave unfiltered; a blank value is rejected." - added
Input schema / properties / party / patternAdded value: +"\\S" - changed
Input schema / properties / query / descriptionPrevious value: -"Full-text search over decisions (Suchworte). Boolean UND/ODER/NICHT or AND/OR/NOT, quoted phrases, trailing-only * wildcard."New value: +"Full-text search over decisions (Suchworte). Boolean UND/ODER/NICHT or AND/OR/NOT, quoted phrases, trailing-only * wildcard. Omit to leave unfiltered; a blank value is rejected." - added
Input schema / properties / query / patternAdded value: +"\\S" - changed
Input schema / properties / subject_area / descriptionPrevious value: -"Subject-area taxonomy filter (Fachgebiet, justiz only) — 39 exact German values like \"Datenschutzrecht\", validated locally: ris_list_reference topic justiz_subject_areas. The corpus carries no tagged documents yet (every value returns 0 hits, verified 2026-07-05) — filter with query or norm instead until RIS populates the tags."New value: +"Subject-area taxonomy filter (Fachgebiet, justiz only) — 39 exact German values like \"Datenschutzrecht\", validated locally: ris_list_reference topic justiz_subject_areas. The corpus carries no tagged documents yet (every value returns 0 hits, verified 2026-07-05) — filter with query or norm instead until RIS populates the tags. Omit to leave unfiltered; a blank value is rejected." - added
Input schema / properties / subject_area / patternAdded value: +"\\S" - changed
Input schema / properties / subject_law / descriptionPrevious value: -"Media statute the case concerns (Bereich, bks only) — e.g. \"ORF-Gesetz\", \"Privatradiogesetz\"."New value: +"Media statute the case concerns (Bereich, bks only) — e.g. \"ORF-Gesetz\", \"Privatradiogesetz\". Omit to leave unfiltered; a blank value is rejected." - added
Input schema / properties / subject_law / patternAdded value: +"\\S"
- Changed
ris_search_drafts12 fields changed- changed
Input schema / properties / ministry / descriptionPrevious value: -"Submitting ministry (EinbringendeStelle). Accepts an abbreviation (\"BMF\") — expanded to RIS’s exact-match designation; use the ministry’s name at the time of submission. Table: ris_list_reference topic ministries."New value: +"Submitting ministry (EinbringendeStelle). Accepts an abbreviation (\"BMF\", \"BMWET\") or a full designation; use the ministry’s name at the time of submission. An abbreviation missing from the table is rejected; a full designation missing from it is sent as written. Table: ris_list_reference topic ministries. Omit to leave unfiltered; a blank value is rejected." - added
Input schema / properties / ministry / patternAdded value: +"\\S" - removed
Input schema / properties / page_size / anyOfRemoved value: -[ - { - "const": 10, - "type": "number" - }, - { - "const": 20, - "type": "number" - }, - { - "const": 50, - "type": "number" - }, - { - "const": 100, - "type": "number" - } -] - changed
Input schema / properties / page_size / descriptionPrevious value: -"Documents per page — RIS accepts 10, 20, 50, or 100. Default 20."New value: +"Documents per page: 10 or 20 (default 20). For more results, keep the size and raise page." - added
Input schema / properties / page_size / enumAdded value: +[ + 10, + 20 +] - added
Input schema / properties / page_size / typeAdded value: +"number" - changed
Input schema / properties / query / descriptionPrevious value: -"Full-text search (Suchworte). Boolean operators UND/ODER/NICHT or AND/OR/NOT, parentheses, quoted phrases; wildcard * is trailing-only."New value: +"Full-text search (Suchworte). Boolean operators UND/ODER/NICHT or AND/OR/NOT, parentheses, quoted phrases; wildcard * is trailing-only. Omit to leave unfiltered; a blank value is rejected." - added
Input schema / properties / query / patternAdded value: +"\\S" - changed
Input schema / properties / title / descriptionPrevious value: -"Title search (Titel) — phrase field: * allowed leading or trailing with ≥2 characters beside it."New value: +"Title search (Titel) — phrase field: * allowed leading or trailing with ≥2 characters beside it. Omit to leave unfiltered; a blank value is rejected." - added
Input schema / properties / title / patternAdded value: +"\\S" - changed
Output schema / properties / error / properties / data / properties / reason / descriptionPrevious value: -"Machine-readable failure mode. Declared by this tool: `stage_filter_mismatch`: in_review_on was combined with stage: government_bills, or decided_from/to with stage: review_drafts — rejected locally before any upstream call; the message names the offending pair. `invalid_query`: A page past the last page of results; or a parameter value rejected locally (ministry matched no entry in the RIS ministries table, or matched more than one); or RIS rejecting a value in-band (the Client error message is passed through verbatim, in German, and it does not name the page). `upstream_error`: RIS is unreachable, returned a server error, or served an HTML error page. `upstream_timeout`: RIS did not answer the search within the request deadline. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `stage_filter_mismatch`: in_review_on was combined with stage: government_bills, or decided_from/to with stage: review_drafts — rejected locally before any upstream call; the message names the offending pair. `unresolved_ministry`: ministry is an abbreviation-shaped value matching no row of the RIS ministries table (the message names the closest matches), or a ministry the table lists only for another issuer parameter (the message names the parameters that accept it) — rejected locally before any upstream call. A value the table does not know that contains a space is sent to RIS as written instead. `invalid_query`: A page past the last page of results; or RIS rejecting a value in-band (the Client error message is passed through verbatim, in German, and it does not name the page). `upstream_error`: RIS is unreachable, returned a server error, or served an HTML error page. `upstream_timeout`: RIS did not answer the search within the request deadline. Other values are possible when a failure originates below the handler." - changed
Output schema / properties / error / properties / data / properties / reason / examplesPrevious value: -[ - "stage_filter_mismatch", - "invalid_query", - "upstream_error", - "upstream_timeout" -]New value: +[ + "stage_filter_mismatch", + "unresolved_ministry", + "invalid_query", + "upstream_error", + "upstream_timeout" +]
- Changed
ris_search_gazette18 fields changed- changed
Input schema / properties / district_authority / descriptionPrevious value: -"District only. Bezirksverwaltungsbehörde name, e.g. \"Bezirkshauptmannschaft Liezen\" — full list: ris_list_reference topic district_authorities."New value: +"District only. Bezirksverwaltungsbehörde name, e.g. \"Bezirkshauptmannschaft Liezen\" — full list: ris_list_reference topic district_authorities. Omit to leave unfiltered; a blank value is rejected." - added
Input schema / properties / district_authority / patternAdded value: +"\\S" - changed
Input schema / properties / issuer / descriptionPrevious value: -"Issuing body — federal (EinbringendeStelle, e.g. \"BMF\") or ordinance gazettes (Vbl Einbringer: Landeshauptmann/frau, Landesregierung, Amt der Landesregierung, Sonstige Landesbehörden) only. Phrase field."New value: +"Issuing body — federal (EinbringendeStelle: a ministry abbreviation such as \"BMF\" or a full designation; an abbreviation missing from ris_list_reference topic ministries is rejected, a full designation missing from it is sent as written) or ordinance gazettes (Vbl Einbringer, exact match with no wildcards: Landeshauptmann/frau, Landesregierung, Amt der Landesregierung, Sonstige Landesbehörden) only. Omit to leave unfiltered; a blank value is rejected." - added
Input schema / properties / issuer / patternAdded value: +"\\S" - changed
Input schema / properties / municipality / descriptionPrevious value: -"Municipal only. Exact municipality name (Gemeinde), RIS’s spelling."New value: +"Municipal only. Exact municipality name (Gemeinde), RIS’s spelling. Omit to leave unfiltered; a blank value is rejected." - added
Input schema / properties / municipality / patternAdded value: +"\\S" - changed
Input schema / properties / number / descriptionPrevious value: -"Gazette number, e.g. \"171/2026\" or \"BGBl. II Nr. 171/2026\" (federal), \"61/2026\" (state), a Kundmachungsnummer (district/municipal). A trailing year routes a federal query to the right era tier; a bare number searches the current tier."New value: +"Gazette number, e.g. \"171/2026\" or \"BGBl. II Nr. 171/2026\" (federal), \"61/2026\" (state), a Kundmachungsnummer (district/municipal). A trailing year routes a federal query to the right era tier; a bare number searches the current tier. Omit to leave unfiltered; a blank value is rejected." - added
Input schema / properties / number / patternAdded value: +"\\S" - removed
Input schema / properties / page_size / anyOfRemoved value: -[ - { - "const": 10, - "type": "number" - }, - { - "const": 20, - "type": "number" - }, - { - "const": 50, - "type": "number" - }, - { - "const": 100, - "type": "number" - } -] - changed
Input schema / properties / page_size / descriptionPrevious value: -"Documents per page — RIS accepts 10, 20, 50, or 100. Default 20."New value: +"Documents per page: 10 or 20 (default 20). For more results, keep the size and raise page." - added
Input schema / properties / page_size / enumAdded value: +[ + 10, + 20 +] - added
Input schema / properties / page_size / typeAdded value: +"number" - changed
Input schema / properties / query / descriptionPrevious value: -"Full-text search (Suchworte). Boolean operators UND/ODER/NICHT or AND/OR/NOT, parentheses, quoted phrases; wildcard * is trailing-only. Syntax: ris_list_reference topic search_syntax."New value: +"Full-text search (Suchworte). Boolean operators UND/ODER/NICHT or AND/OR/NOT, parentheses, quoted phrases; wildcard * is trailing-only. Syntax: ris_list_reference topic search_syntax. Omit to leave unfiltered; a blank value is rejected." - added
Input schema / properties / query / patternAdded value: +"\\S" - changed
Input schema / properties / title / descriptionPrevious value: -"Title search (Titel) — phrase field: * allowed leading or trailing with ≥2 characters beside it."New value: +"Title search (Titel) — phrase field: * allowed leading or trailing with ≥2 characters beside it. Omit to leave unfiltered; a blank value is rejected." - added
Input schema / properties / title / patternAdded value: +"\\S" - changed
Output schema / properties / error / properties / data / properties / reason / descriptionPrevious value: -"Machine-readable failure mode. Declared by this tool: `scope_filter_mismatch`: A filter was combined with a scope that does not support it (part off federal; series/state_era off a state scope; district_authority off district; municipality off municipal; issuer outside federal/ordinance gazettes), or series: ordinance_gazette was combined with state_era: legacy (ordinance gazettes have no legacy counterpart) — rejected locally before any upstream call; the message names the offending pair. `cross_tier_range`: A federal published_from/published_to interval overlaps more than one Bundesgesetzblatt era tier (BgblAuth 2004+, BgblPdf 1945–2003, BgblAlt 1848–1940) — including a one-sided bound, which is open into every tier beyond it. Rejected locally before any upstream call: one call serves exactly one application, so a spanning range would return the records of a single tier and silently omit the rest of the interval. A year-bearing number or part: pre_1997 names the tier outright and is never rejected. `invalid_query`: A page past the last page of results; or a parameter the resolved gazette does not carry — sort_by, number, type, part, issuer, or a state absent from the historical Lgbl series — rejected locally before any upstream call, naming the field and the gazette that rejected it (by scope/series/state_era, or for a federal era tier by its window and the input that routed there); or RIS rejecting a value in-band (the Client error message is passed through verbatim, in German, and it does not name the page). `upstream_error`: RIS is unreachable, returned a server error, or served an HTML error page. `upstream_timeout`: RIS did not answer the search within the request deadline. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `scope_filter_mismatch`: A filter was combined with a scope that does not support it (part off federal; series/state_era off a state scope; district_authority off district; municipality off municipal; issuer outside federal/ordinance gazettes), or series: ordinance_gazette was combined with state_era: legacy (ordinance gazettes have no legacy counterpart) — rejected locally before any upstream call; the message names the offending pair. `cross_tier_range`: A federal published_from/published_to interval overlaps more than one Bundesgesetzblatt era tier (BgblAuth 2004+, BgblPdf 1945–2003, BgblAlt 1848–1940) — including a one-sided bound, which is open into every tier beyond it. Rejected locally before any upstream call: one call serves exactly one application, so a spanning range would return the records of a single tier and silently omit the rest of the interval. A year-bearing number or part: pre_1997 names the tier outright and is never rejected. `unresolved_ministry`: A federal issuer is an abbreviation-shaped value matching no row of the RIS ministries table (the message names the closest matches), or a ministry the table lists only for another issuer parameter (the message names the parameters that accept it) — rejected locally before any upstream call. A value the table does not know that contains a space is sent to RIS as written instead. `invalid_query`: A page past the last page of results; or a parameter the resolved gazette does not carry — sort_by, number, type, part, issuer, or a state absent from the historical Lgbl series — rejected locally before any upstream call, naming the field and the gazette that rejected it (by scope/series/state_era, or for a federal era tier by its window and the input that routed there); or RIS rejecting a value in-band (the Client error message is passed through verbatim, in German, and it does not name the page). `upstream_error`: RIS is unreachable, returned a server error, or served an HTML error page. `upstream_timeout`: RIS did not answer the search within the request deadline. Other values are possible when a failure originates below the handler." - changed
Output schema / properties / error / properties / data / properties / reason / examplesPrevious value: -[ - "scope_filter_mismatch", - "cross_tier_range", - "invalid_query", - "upstream_error", - "upstream_timeout" -]New value: +[ + "scope_filter_mismatch", + "cross_tier_range", + "unresolved_ministry", + "invalid_query", + "upstream_error", + "upstream_timeout" +]
- Changed
ris_search_legislation18 fields changed- changed
Input schema / properties / index / descriptionPrevious value: -"Systematik classification filter (e.g. \"10/10 Datenschutz\"). Federal/state consolidated law only."New value: +"Systematik classification filter (e.g. \"10/10 Datenschutz\"). Federal/state consolidated law only. Omit to leave unfiltered; a blank value is rejected." - added
Input schema / properties / index / patternAdded value: +"\\S" - changed
Input schema / properties / law_id / descriptionPrevious value: -"Law-level grouping key (Gesetzesnummer, e.g. 10001597 = DSG) — exact match; returns every section of that law. Federal/state consolidated law only."New value: +"Law-level grouping key (Gesetzesnummer, e.g. 10001597 = DSG) — exact match; returns every section of that law. Federal/state consolidated law only. Omit to leave unfiltered; a blank value is rejected." - added
Input schema / properties / law_id / patternAdded value: +"\\S" - changed
Input schema / properties / municipality / descriptionPrevious value: -"Municipality name for municipal law (e.g. \"Graz\" — RIS’s spelling, not \"Stadt Graz\"). Requires a state scope; combines only with query, title, and in_force_as_of. Coverage is selected norms in 6 Bundesländer (no Burgenland/Tirol/Vorarlberg)."New value: +"Municipality name for municipal law (e.g. \"Graz\" — RIS’s spelling, not \"Stadt Graz\"). Requires a state scope; combines only with query, title, and in_force_as_of. Coverage is selected norms in 6 Bundesländer (no Burgenland/Tirol/Vorarlberg). Omit to search consolidated law; a blank value is rejected." - added
Input schema / properties / municipality / patternAdded value: +"\\S" - removed
Input schema / properties / page_size / anyOfRemoved value: -[ - { - "const": 10, - "type": "number" - }, - { - "const": 20, - "type": "number" - }, - { - "const": 50, - "type": "number" - }, - { - "const": 100, - "type": "number" - } -] - changed
Input schema / properties / page_size / descriptionPrevious value: -"Documents per page — RIS accepts 10, 20, 50, or 100. Default 20."New value: +"Documents per page: 10 or 20 (default 20). For more results, keep the size and raise page." - added
Input schema / properties / page_size / enumAdded value: +[ + 10, + 20 +] - added
Input schema / properties / page_size / typeAdded value: +"number" - changed
Input schema / properties / query / descriptionPrevious value: -"Full-text search (Suchworte). Boolean operators UND/ODER/NICHT or AND/OR/NOT, parentheses, quoted phrases; wildcard * is trailing-only (\"Datenschutz*\", never \"*schutz\"). Syntax: ris_list_reference topic search_syntax."New value: +"Full-text search (Suchworte). Boolean operators UND/ODER/NICHT or AND/OR/NOT, parentheses, quoted phrases; wildcard * is trailing-only (\"Datenschutz*\", never \"*schutz\"). Syntax: ris_list_reference topic search_syntax. Omit to leave unfiltered; a blank value is rejected." - added
Input schema / properties / query / patternAdded value: +"\\S" - changed
Input schema / properties / section_from / descriptionPrevious value: -"Start of a § / Artikel / Anlage number range, digits with optional letter (\"6\", \"1a\"). Federal/state consolidated law only."New value: +"Start of a § / Artikel / Anlage number range, digits with optional letter (\"6\", \"1a\"). Federal/state consolidated law only. Omit to leave unfiltered; a blank value is rejected." - added
Input schema / properties / section_from / patternAdded value: +"\\S" - changed
Input schema / properties / section_to / descriptionPrevious value: -"End of the section range. Equal to section_from for a single section."New value: +"End of the section range. Equal to section_from for a single section. Omit to leave unfiltered; a blank value is rejected." - added
Input schema / properties / section_to / patternAdded value: +"\\S" - changed
Input schema / properties / title / descriptionPrevious value: -"Title search (Titel) — matches title, short title, and official abbreviation (\"ABGB\", \"DSG\"). Phrase field: * allowed leading or trailing with ≥2 characters beside it."New value: +"Title search (Titel) — matches title, short title, and official abbreviation (\"ABGB\", \"DSG\"). Phrase field: * allowed leading or trailing with ≥2 characters beside it. Omit to leave unfiltered; a blank value is rejected." - added
Input schema / properties / title / patternAdded value: +"\\S"
- Changed
ris_track_changes4 fields changed- removed
Input schema / properties / page_size / anyOfRemoved value: -[ - { - "const": 10, - "type": "number" - }, - { - "const": 20, - "type": "number" - }, - { - "const": 50, - "type": "number" - }, - { - "const": 100, - "type": "number" - } -] - changed
Input schema / properties / page_size / descriptionPrevious value: -"Documents per page — RIS accepts 10, 20, 50, or 100. Default 20."New value: +"Documents per page: 10 or 20 (default 20). For more results, keep the size and raise page." - added
Input schema / properties / page_size / enumAdded value: +[ + 10, + 20 +] - added
Input schema / properties / page_size / typeAdded value: +"number"
9 tool updates
- Changed
ris_get_document6 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / additionalPropertiesAdded value: +false - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Output schema / anyOfAdded value: +[ + { + "not": { + "required": [ + "error" + ] + }, + "required": [ + "format", + "kind", + "binding_status", + "content_urls", + "document_number", + "application" + ] + }, + { + "required": [ + "error" + ] + } +] - added
Output schema / properties / errorAdded value: +{ + "additionalProperties": {}, + "description": "Present when the call failed. Absent on success.", + "properties": { + "code": { + "description": "JSON-RPC error code for this failure.", + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "data": { + "additionalProperties": {}, + "properties": { + "reason": { + "description": "Machine-readable failure mode. Declared by this tool: `invalid_addressing`: Neither or both addressing modes were provided, document_number was given without application, or the document_number/application pairing is not a valid RIS document — thrown locally before any fetch. `unsupported_url`: document_url fails the host + /Dokumente/ path-prefix allowlist, its path segment is not a recognized RIS application, or its trailing filename addresses neither the document’s own rendition nor one of its companion documents — thrown locally, nothing fetched. `document_not_found`: The constructed or passed content URL returned 404. `upstream_error`: The RIS content host was unreachable or returned a server error. `upstream_timeout`: The content host did not return the rendition within the fetch deadline — typically a cold render, which it performs on first request before caching the result. Other values are possible when a failure originates below the handler.", + "examples": [ + "invalid_addressing", + "unsupported_url", + "document_not_found", + "upstream_error", + "upstream_timeout" + ], + "type": "string" + }, + "recovery": { + "additionalProperties": {}, + "description": "Actionable next step for the caller.", + "properties": { + "hint": { + "type": "string" + } + }, + "required": [ + "hint" + ], + "type": "object" + }, + "retryable": { + "description": "Whether retrying may succeed.", + "type": "boolean" + } + }, + "type": "object" + }, + "message": { + "description": "Human-readable description of what went wrong.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" +} - removed
Output schema / requiredRemoved value: -[ - "format", - "kind", - "binding_status", - "content_urls", - "document_number", - "application" -]
- Changed
ris_list_reference6 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / additionalPropertiesAdded value: +false - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Output schema / anyOfAdded value: +[ + { + "not": { + "required": [ + "error" + ] + }, + "required": [ + "topic", + "summary", + "entries", + "notes" + ] + }, + { + "required": [ + "error" + ] + } +] - added
Output schema / properties / errorAdded value: +{ + "additionalProperties": {}, + "description": "Present when the call failed. Absent on success.", + "properties": { + "code": { + "description": "JSON-RPC error code for this failure.", + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "data": { + "additionalProperties": {}, + "properties": { + "reason": { + "description": "Machine-readable failure mode.", + "type": "string" + }, + "recovery": { + "additionalProperties": {}, + "description": "Actionable next step for the caller.", + "properties": { + "hint": { + "type": "string" + } + }, + "required": [ + "hint" + ], + "type": "object" + }, + "retryable": { + "description": "Whether retrying may succeed.", + "type": "boolean" + } + }, + "type": "object" + }, + "message": { + "description": "Human-readable description of what went wrong.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" +} - removed
Output schema / requiredRemoved value: -[ - "topic", - "summary", - "entries", - "notes" -]
- Changed
ris_lookup_citation6 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / additionalPropertiesAdded value: +false - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Output schema / anyOfAdded value: +[ + { + "not": { + "required": [ + "error" + ] + }, + "required": [ + "found", + "kind" + ] + }, + { + "required": [ + "error" + ] + } +] - added
Output schema / properties / errorAdded value: +{ + "additionalProperties": {}, + "description": "Present when the call failed. Absent on success.", + "properties": { + "code": { + "description": "JSON-RPC error code for this failure.", + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "data": { + "additionalProperties": {}, + "properties": { + "reason": { + "description": "Machine-readable failure mode. Declared by this tool: `upstream_error`: A routed RIS search was unreachable, returned a server error, or served an HTML error page. An unparseable or unresolvable citation is NOT this error — it returns found: false. `upstream_timeout`: A routed RIS search did not answer within the request deadline. Other values are possible when a failure originates below the handler.", + "examples": [ + "upstream_error", + "upstream_timeout" + ], + "type": "string" + }, + "recovery": { + "additionalProperties": {}, + "description": "Actionable next step for the caller.", + "properties": { + "hint": { + "type": "string" + } + }, + "required": [ + "hint" + ], + "type": "object" + }, + "retryable": { + "description": "Whether retrying may succeed.", + "type": "boolean" + } + }, + "type": "object" + }, + "message": { + "description": "Human-readable description of what went wrong.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" +} - removed
Output schema / requiredRemoved value: -[ - "found", - "kind" -]
- Changed
ris_search_announcements6 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / additionalPropertiesAdded value: +false - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Output schema / anyOfAdded value: +[ + { + "not": { + "required": [ + "error" + ] + }, + "required": [ + "results", + "totalCount", + "page", + "pageSize" + ] + }, + { + "required": [ + "error" + ] + } +] - added
Output schema / properties / errorAdded value: +{ + "additionalProperties": {}, + "description": "Present when the call failed. Absent on success.", + "properties": { + "code": { + "description": "JSON-RPC error code for this failure.", + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "data": { + "additionalProperties": {}, + "properties": { + "reason": { + "description": "Machine-readable failure mode. Declared by this tool: `collection_filter_mismatch`: A parameter was combined with a collection that does not accept it — rejected locally before any upstream call; the message names the offending parameter and lists the collection’s valid parameters. `invalid_query`: A page past the last page of results; or a parameter value rejected locally — an unknown or ambiguous issuer, a plan_state outside regional health-structure plans, or a sort_by value this collection has no column for, in which case the message names the values it does sort by; or RIS rejecting a value in-band (the Client error message is passed through verbatim, in German, and it does not name the page). `upstream_error`: RIS is unreachable, returned a server error, or served an HTML error page. `upstream_timeout`: RIS did not answer the search within the request deadline. Other values are possible when a failure originates below the handler.", + "examples": [ + "collection_filter_mismatch", + "invalid_query", + "upstream_error", + "upstream_timeout" + ], + "type": "string" + }, + "recovery": { + "additionalProperties": {}, + "description": "Actionable next step for the caller.", + "properties": { + "hint": { + "type": "string" + } + }, + "required": [ + "hint" + ], + "type": "object" + }, + "retryable": { + "description": "Whether retrying may succeed.", + "type": "boolean" + } + }, + "type": "object" + }, + "message": { + "description": "Human-readable description of what went wrong.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" +} - removed
Output schema / requiredRemoved value: -[ - "results", - "totalCount", - "page", - "pageSize" -]
- Changed
ris_search_case_law6 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / additionalPropertiesAdded value: +false - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Output schema / anyOfAdded value: +[ + { + "not": { + "required": [ + "error" + ] + }, + "required": [ + "results", + "totalCount", + "page", + "pageSize" + ] + }, + { + "required": [ + "error" + ] + } +] - added
Output schema / properties / errorAdded value: +{ + "additionalProperties": {}, + "description": "Present when the call failed. Absent on success.", + "properties": { + "code": { + "description": "JSON-RPC error code for this failure.", + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "data": { + "additionalProperties": {}, + "properties": { + "reason": { + "description": "Machine-readable failure mode. Declared by this tool: `court_filter_mismatch`: A court-conditional filter was sent with the wrong court, or case_number/dates/decision_type were sent with normenliste (a norm index, not decisions) — rejected locally before any upstream call; the message names the offending pair. `invalid_query`: A page past the last page of results, or a parameter value that failed validation — decision_kind/subject_area checked locally against the reference tables, sort_by rejected locally because court normenliste indexes laws rather than decisions, or RIS rejected the value in-band (message passed through verbatim, in German, and it does not name the page). `upstream_error`: RIS is unreachable, returned a server error, or served an HTML error page. `upstream_timeout`: RIS did not answer the search within the request deadline. Other values are possible when a failure originates below the handler.", + "examples": [ + "court_filter_mismatch", + "invalid_query", + "upstream_error", + "upstream_timeout" + ], + "type": "string" + }, + "recovery": { + "additionalProperties": {}, + "description": "Actionable next step for the caller.", + "properties": { + "hint": { + "type": "string" + } + }, + "required": [ + "hint" + ], + "type": "object" + }, + "retryable": { + "description": "Whether retrying may succeed.", + "type": "boolean" + } + }, + "type": "object" + }, + "message": { + "description": "Human-readable description of what went wrong.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" +} - removed
Output schema / requiredRemoved value: -[ - "results", - "totalCount", - "page", - "pageSize" -]
- Changed
ris_search_drafts6 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / additionalPropertiesAdded value: +false - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Output schema / anyOfAdded value: +[ + { + "not": { + "required": [ + "error" + ] + }, + "required": [ + "results", + "totalCount", + "page", + "pageSize" + ] + }, + { + "required": [ + "error" + ] + } +] - added
Output schema / properties / errorAdded value: +{ + "additionalProperties": {}, + "description": "Present when the call failed. Absent on success.", + "properties": { + "code": { + "description": "JSON-RPC error code for this failure.", + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "data": { + "additionalProperties": {}, + "properties": { + "reason": { + "description": "Machine-readable failure mode. Declared by this tool: `stage_filter_mismatch`: in_review_on was combined with stage: government_bills, or decided_from/to with stage: review_drafts — rejected locally before any upstream call; the message names the offending pair. `invalid_query`: A page past the last page of results; or a parameter value rejected locally (ministry matched no entry in the RIS ministries table, or matched more than one); or RIS rejecting a value in-band (the Client error message is passed through verbatim, in German, and it does not name the page). `upstream_error`: RIS is unreachable, returned a server error, or served an HTML error page. `upstream_timeout`: RIS did not answer the search within the request deadline. Other values are possible when a failure originates below the handler.", + "examples": [ + "stage_filter_mismatch", + "invalid_query", + "upstream_error", + "upstream_timeout" + ], + "type": "string" + }, + "recovery": { + "additionalProperties": {}, + "description": "Actionable next step for the caller.", + "properties": { + "hint": { + "type": "string" + } + }, + "required": [ + "hint" + ], + "type": "object" + }, + "retryable": { + "description": "Whether retrying may succeed.", + "type": "boolean" + } + }, + "type": "object" + }, + "message": { + "description": "Human-readable description of what went wrong.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" +} - removed
Output schema / requiredRemoved value: -[ - "results", - "totalCount", - "page", - "pageSize" -]
- Changed
ris_search_gazette6 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / additionalPropertiesAdded value: +false - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Output schema / anyOfAdded value: +[ + { + "not": { + "required": [ + "error" + ] + }, + "required": [ + "results", + "totalCount", + "page", + "pageSize", + "servedApplication" + ] + }, + { + "required": [ + "error" + ] + } +] - added
Output schema / properties / errorAdded value: +{ + "additionalProperties": {}, + "description": "Present when the call failed. Absent on success.", + "properties": { + "code": { + "description": "JSON-RPC error code for this failure.", + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "data": { + "additionalProperties": {}, + "properties": { + "reason": { + "description": "Machine-readable failure mode. Declared by this tool: `scope_filter_mismatch`: A filter was combined with a scope that does not support it (part off federal; series/state_era off a state scope; district_authority off district; municipality off municipal; issuer outside federal/ordinance gazettes), or series: ordinance_gazette was combined with state_era: legacy (ordinance gazettes have no legacy counterpart) — rejected locally before any upstream call; the message names the offending pair. `cross_tier_range`: A federal published_from/published_to interval overlaps more than one Bundesgesetzblatt era tier (BgblAuth 2004+, BgblPdf 1945–2003, BgblAlt 1848–1940) — including a one-sided bound, which is open into every tier beyond it. Rejected locally before any upstream call: one call serves exactly one application, so a spanning range would return the records of a single tier and silently omit the rest of the interval. A year-bearing number or part: pre_1997 names the tier outright and is never rejected. `invalid_query`: A page past the last page of results; or a parameter the resolved gazette does not carry — sort_by, number, type, part, issuer, or a state absent from the historical Lgbl series — rejected locally before any upstream call, naming the field and the gazette that rejected it (by scope/series/state_era, or for a federal era tier by its window and the input that routed there); or RIS rejecting a value in-band (the Client error message is passed through verbatim, in German, and it does not name the page). `upstream_error`: RIS is unreachable, returned a server error, or served an HTML error page. `upstream_timeout`: RIS did not answer the search within the request deadline. Other values are possible when a failure originates below the handler.", + "examples": [ + "scope_filter_mismatch", + "cross_tier_range", + "invalid_query", + "upstream_error", + "upstream_timeout" + ], + "type": "string" + }, + "recovery": { + "additionalProperties": {}, + "description": "Actionable next step for the caller.", + "properties": { + "hint": { + "type": "string" + } + }, + "required": [ + "hint" + ], + "type": "object" + }, + "retryable": { + "description": "Whether retrying may succeed.", + "type": "boolean" + } + }, + "type": "object" + }, + "message": { + "description": "Human-readable description of what went wrong.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" +} - removed
Output schema / requiredRemoved value: -[ - "results", - "totalCount", - "page", - "pageSize", - "servedApplication" -]
- Changed
ris_search_legislation6 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / additionalPropertiesAdded value: +false - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Output schema / anyOfAdded value: +[ + { + "not": { + "required": [ + "error" + ] + }, + "required": [ + "results", + "totalCount", + "page", + "pageSize" + ] + }, + { + "required": [ + "error" + ] + } +] - added
Output schema / properties / errorAdded value: +{ + "additionalProperties": {}, + "description": "Present when the call failed. Absent on success.", + "properties": { + "code": { + "description": "JSON-RPC error code for this failure.", + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "data": { + "additionalProperties": {}, + "properties": { + "reason": { + "description": "Machine-readable failure mode. Declared by this tool: `scope_filter_mismatch`: A filter was combined with a scope, municipality, or language that does not support it, or mutually exclusive version filters were combined — rejected locally before any upstream call; the message names the offending pair. `invalid_query`: A page past the last page of results, or RIS rejecting a parameter value in-band — the Client error message is passed through verbatim, in German. It names the invalid element and its valid values, except for a page past the end, which names no parameter at all. Unsupported filter combinations are caught earlier as scope_filter_mismatch. `upstream_error`: RIS is unreachable, returned a server error, or served an HTML error page. `upstream_timeout`: RIS did not answer the search within the request deadline. Other values are possible when a failure originates below the handler.", + "examples": [ + "scope_filter_mismatch", + "invalid_query", + "upstream_error", + "upstream_timeout" + ], + "type": "string" + }, + "recovery": { + "additionalProperties": {}, + "description": "Actionable next step for the caller.", + "properties": { + "hint": { + "type": "string" + } + }, + "required": [ + "hint" + ], + "type": "object" + }, + "retryable": { + "description": "Whether retrying may succeed.", + "type": "boolean" + } + }, + "type": "object" + }, + "message": { + "description": "Human-readable description of what went wrong.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" +} - removed
Output schema / requiredRemoved value: -[ - "results", - "totalCount", - "page", - "pageSize" -]
- Changed
ris_track_changes7 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / additionalPropertiesAdded value: +false - changed
Input schema / properties / application / descriptionPrevious value: -"RIS application whose change feed to read (standard code, e.g. BrKons, LrKons, Dsk, BgblAuth). History’s four aliased names are mapped internally. Codes: ris_list_reference topic applications."New value: +"RIS application whose change feed to read, e.g. BrKons, LrKons, Dsk, or BgblAuth. All supported codes: ris_list_reference topic applications." - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Output schema / anyOfAdded value: +[ + { + "not": { + "required": [ + "error" + ] + }, + "required": [ + "results", + "totalCount", + "page", + "pageSize", + "application" + ] + }, + { + "required": [ + "error" + ] + } +] - added
Output schema / properties / errorAdded value: +{ + "additionalProperties": {}, + "description": "Present when the call failed. Absent on success.", + "properties": { + "code": { + "description": "JSON-RPC error code for this failure.", + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "data": { + "additionalProperties": {}, + "properties": { + "reason": { + "description": "Machine-readable failure mode. Declared by this tool: `invalid_query`: RIS rejected a parameter value in-band — its Client error message is passed through verbatim and names the offending element (e.g. a page past the last page of the change window). `upstream_error`: RIS is unreachable, returned a server error, or served an HTML error page. `upstream_timeout`: RIS did not answer the change feed within the request deadline. Other values are possible when a failure originates below the handler.", + "examples": [ + "invalid_query", + "upstream_error", + "upstream_timeout" + ], + "type": "string" + }, + "recovery": { + "additionalProperties": {}, + "description": "Actionable next step for the caller.", + "properties": { + "hint": { + "type": "string" + } + }, + "required": [ + "hint" + ], + "type": "object" + }, + "retryable": { + "description": "Whether retrying may succeed.", + "type": "boolean" + } + }, + "type": "object" + }, + "message": { + "description": "Human-readable description of what went wrong.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" +} - removed
Output schema / requiredRemoved value: -[ - "results", - "totalCount", - "page", - "pageSize", - "application" -]
2 tool updates
- Changed
ris_get_document7 fields changed- changed
Input schema / properties / document_url / descriptionPrevious value: -"A https://www.ris.bka.gv.at/Dokumente/… rendition URL as returned in a result’s content_urls — the alternative to document_number + application. Also the only way to read a draft’s companion documents: pass a URL from a ris_search_drafts record’s materials[].urls (Materialien_/Schreiben_/Anlagen_… — the Erläuterungen, Textgegenüberstellung, WFA, cover letter, or annex), whose filenames are opaque and per-record and so cannot be reached through document_number. Any other filename is rejected."New value: +"A https://www.ris.bka.gv.at/Dokumente/… rendition URL as returned in a result’s content_urls — the alternative to document_number + application. Also the only way to read a draft’s companion documents: pass a ris_search_drafts record’s materials[].url (the Erläuterungen, Textgegenüberstellung, WFA, cover letter, or annex), whose filenames are opaque and per-record and so cannot be reached through document_number. Every companion filename RIS publishes is accepted, whichever shape it carries. The URL’s own extension is only checked against the rendition extensions RIS uses and is then discarded — format selects which rendition is returned, for a companion exactly as for a main document. A filename that is neither this document’s own rendition nor one of its companions is rejected; companion filenames cannot be composed by hand, so copy one verbatim." - changed
Input schema / properties / sections / descriptionPrevious value: -"Section names to retrieve, each copied verbatim from a prior outline response (kind: outline). Omit for the full document — which returns a §/Artikel/Anlage outline instead when the markdown overflows the 40,000-byte budget and carries at least two such headings. A name that matches no section is never silently ignored: a total miss returns the outline (kind: outline) with a notice, a partial miss returns the matched sections with a notice naming other sections to pick from. Applies to markdown only — html, xml, and urls_only carry no headings to select from and return in full."New value: +"Entry names to retrieve, each copied verbatim from a prior outline response (kind: outline) — §/Artikel/Anlage section names, or window names of the form \"Part 2 of 6\". Omit for the full document, which returns an outline instead when the markdown overflows the 40,000-byte budget. A name that matches no entry is never silently ignored: a total miss returns the outline (kind: outline) with a notice, a partial miss returns the matched entries with a notice naming others to pick from. Applies to markdown only — html, xml, and urls_only are never sliced and return in full." - changed
Output schema / properties / content_urls / descriptionPrevious value: -"Constructed rendition URLs. Empty for authentic-PDF-only (Bvb/GrA/KmGer) and metadata-only (BgblAlt) applications — see authentic_pdf_url and the notice. For a companion document (a draft’s Erläuterungen, Textgegenüberstellung, WFA, cover letter, or annex) these are the companion’s own XML/HTML/PDF, not the parent document’s."New value: +"Constructed rendition URLs. Empty for authentic-PDF-only (Bvb/GrA/KmGer) and metadata-only (BgblAlt) applications — see authentic_pdf_url and the notice. For a companion document (a draft’s Erläuterungen, Textgegenüberstellung, WFA, cover letter, or annex) these are the companion’s own XML/HTML/PDF, not the parent document’s — constructed rather than read back from RIS, so for the roughly one companion in eight that RIS files as a PDF only, xml and html return 404 and pdf is the one that resolves." - changed
Output schema / properties / kind / descriptionPrevious value: -"full — the complete response (document text, selected sections, or rendition URLs). outline — sections lists the retrievable §/Artikel/Anlage units instead of the text, either because it overflowed the byte budget or because a sections:[…] selector matched nothing; re-call with sections:[…] naming entries from it."New value: +"full — the complete response (document text, selected entries, or rendition URLs). outline — sections lists the retrievable entries instead of the text, either because the document overflowed the byte budget or because a sections:[…] selector matched nothing; re-call with sections:[…] naming entries from it." - changed
Output schema / properties / sections / descriptionPrevious value: -"Present when kind = outline: the document’s §/Artikel/Anlage sections, largest first, each with its UTF-8 byte size. Copy names into the sections input verbatim to retrieve them."New value: +"Present when kind = outline: the document’s addressable entries, each with its UTF-8 byte size — §/Artikel/Anlage sections listed largest first, or, when the markdown carries no such headings, Part n of N byte windows listed in document order and summing to byte_size. Copy names into the sections input verbatim to retrieve them; naming several in one call returns their text concatenated in document order, with nothing inserted between them." - changed
Output schema / properties / sections / items / descriptionPrevious value: -"A retrievable §/Artikel/Anlage section — its name and UTF-8 byte size."New value: +"A retrievable entry — a §/Artikel/Anlage section or a Part n of N byte window, with its UTF-8 byte size." - changed
Output schema / properties / truncated / descriptionPrevious value: -"Present and true when the full text isn’t inline because a section outline was returned instead (kind: outline) — either the document overflowed the byte budget, or a sections:[…] selector matched nothing. The notice names which. Retrieve sections via the sections input, or fetch content_urls for the whole artifact."New value: +"Present and true when the full text isn’t inline because an outline was returned instead (kind: outline) — either the document overflowed the byte budget, or a sections:[…] selector matched nothing. The notice names which. Retrieve entries via the sections input, or fetch content_urls for the whole artifact."
- Changed
ris_search_drafts4 fields changed- changed
Output schema / properties / results / items / properties / materials / descriptionPrevious value: -"Companion documents filed with the draft — the Erläuterungen (explanatory notes, carrying the reasoning the bill text omits), Textgegenüberstellung (redline against the current law), Vorblatt/WFA (impact assessment), the covering letter, and any annexes. Read one by passing a urls entry to ris_get_document as document_url. Empty when the ministry filed none; coverage is uneven by design."New value: +"Companion documents filed with the draft — the Erläuterungen (explanatory notes, carrying the reasoning the bill text omits), Textgegenüberstellung (redline against the current law), Vorblatt/WFA (impact assessment), the covering letter, and any annexes. Read one by passing its url to ris_get_document as document_url. Empty when the ministry filed none; coverage is uneven by design." - added
Output schema / properties / results / items / properties / materials / items / properties / urlAdded value: +{ + "description": "One rendition URL for this companion — its HTML rendition, or its PDF where RIS files no HTML one (roughly one companion in eight, nearly all of them review-draft covering letters). Pass it to ris_get_document as document_url: the extension is discarded there and format selects what comes back (markdown, html, or the RIS Nutzdaten xml of this companion, plus the companion’s own rendition URLs under urls_only), so this one URL reaches every text rendition the companion has. A PDF-only companion has none, and the URL is a direct download. The filename is opaque and per-record, so no document number reaches it.", + "type": "string" +} - removed
Output schema / properties / results / items / properties / materials / items / properties / urlsRemoved value: -{ - "additionalProperties": false, - "description": "Rendition URLs of this companion document. Pass one to ris_get_document as document_url — the filename is opaque and per-record, so this is the only handle to it.", - "properties": { - "html": { - "description": "HTML rendition URL.", - "type": "string" - }, - "pdf": { - "description": "PDF rendition URL.", - "type": "string" - }, - "rtf": { - "description": "RTF rendition URL, where RIS publishes one.", - "type": "string" - }, - "xml": { - "description": "XML rendition URL (RIS Nutzdaten schema).", - "type": "string" - } - }, - "type": "object" -} - changed
Output schema / properties / results / items / properties / materials / items / requiredPrevious value: -[ - "type", - "urls" -]New value: +[ + "type", + "url" +]
3 tool updates
- Changed
ris_get_document3 fields changed- changed
Input schema / properties / document_url / descriptionPrevious value: -"A https://www.ris.bka.gv.at/Dokumente/… main-document rendition URL as returned in a result’s content_urls — the alternative to document_number + application. Must address a main-document rendition ({documentNumber}.{ext}); content-attachment URLs (Materialien_/Anlagen_… memoranda and annexes) are not fetchable this way."New value: +"A https://www.ris.bka.gv.at/Dokumente/… rendition URL as returned in a result’s content_urls — the alternative to document_number + application. Also the only way to read a draft’s companion documents: pass a URL from a ris_search_drafts record’s materials[].urls (Materialien_/Schreiben_/Anlagen_… — the Erläuterungen, Textgegenüberstellung, WFA, cover letter, or annex), whose filenames are opaque and per-record and so cannot be reached through document_number. Any other filename is rejected." - changed
Input schema / properties / sections / descriptionPrevious value: -"Section names to retrieve, each copied verbatim from a prior outline response (kind: outline). Omit for the full document — which returns a §/Artikel/Anlage outline instead when the markdown overflows the byte budget. A name that matches no section is never silently ignored: a total miss returns the outline (kind: outline) with a notice, a partial miss returns the matched sections with a notice naming the rest. Applies to markdown only — html, xml, and urls_only carry no headings to select from and return in full."New value: +"Section names to retrieve, each copied verbatim from a prior outline response (kind: outline). Omit for the full document — which returns a §/Artikel/Anlage outline instead when the markdown overflows the 40,000-byte budget and carries at least two such headings. A name that matches no section is never silently ignored: a total miss returns the outline (kind: outline) with a notice, a partial miss returns the matched sections with a notice naming other sections to pick from. Applies to markdown only — html, xml, and urls_only carry no headings to select from and return in full." - changed
Output schema / properties / content_urls / descriptionPrevious value: -"Constructed rendition URLs. Empty for authentic-PDF-only (Bvb/GrA/KmGer) and metadata-only (BgblAlt) applications — see authentic_pdf_url and the notice."New value: +"Constructed rendition URLs. Empty for authentic-PDF-only (Bvb/GrA/KmGer) and metadata-only (BgblAlt) applications — see authentic_pdf_url and the notice. For a companion document (a draft’s Erläuterungen, Textgegenüberstellung, WFA, cover letter, or annex) these are the companion’s own XML/HTML/PDF, not the parent document’s."
- Changed
ris_search_announcements1 field changed- added
Output schema / properties / results / items / properties / document_urlAdded value: +{ + "description": "RIS web view of the document (DokumentUrl) — for humans. The only browsable surface for council minutes (PDF-only) and ministerial decrees.", + "type": "string" +}
- Changed
ris_search_drafts4 fields changed- changed
Output schema / properties / results / items / properties / content_urls / descriptionPrevious value: -"Rendition URLs of the main document (attachments are excluded)."New value: +"Rendition URLs of the main document (companion documents ride in materials)." - added
Output schema / properties / results / items / properties / document_urlAdded value: +{ + "description": "RIS web view of the draft document (DokumentUrl) — for humans.", + "type": "string" +} - added
Output schema / properties / results / items / properties / materialsAdded value: +{ + "description": "Companion documents filed with the draft — the Erläuterungen (explanatory notes, carrying the reasoning the bill text omits), Textgegenüberstellung (redline against the current law), Vorblatt/WFA (impact assessment), the covering letter, and any annexes. Read one by passing a urls entry to ris_get_document as document_url. Empty when the ministry filed none; coverage is uneven by design.", + "items": { + "additionalProperties": false, + "description": "One companion document filed alongside the draft.", + "properties": { + "name": { + "description": "RIS-supplied label, as filed. Unstable across records — the same content appears as \"Vorblatt und WFA\", \"Vorblatt+WFA\", or \"WFA\"; \"Textgegenüberstellung\" or \"TGÜ\". Read type, not this, to classify.", + "type": "string" + }, + "type": { + "description": "Content type — Material (Erläuterungen, Textgegenüberstellung, Vorblatt/WFA), Letter (the Begleitschreiben covering the review draft), or Attachment (annex texts, e.g. treaty translations). The reliable discriminator: name is free text and varies per record.", + "type": "string" + }, + "urls": { + "additionalProperties": false, + "description": "Rendition URLs of this companion document. Pass one to ris_get_document as document_url — the filename is opaque and per-record, so this is the only handle to it.", + "properties": { + "html": { + "description": "HTML rendition URL.", + "type": "string" + }, + "pdf": { + "description": "PDF rendition URL.", + "type": "string" + }, + "rtf": { + "description": "RTF rendition URL, where RIS publishes one.", + "type": "string" + }, + "xml": { + "description": "XML rendition URL (RIS Nutzdaten schema).", + "type": "string" + } + }, + "type": "object" + } + }, + "required": [ + "type", + "urls" + ], + "type": "object" + }, + "type": "array" +} - changed
Output schema / properties / results / items / requiredPrevious value: -[ - "document_number", - "stage", - "content_urls" -]New value: +[ + "document_number", + "stage", + "materials", + "content_urls" +]
1 tool update
- Changed
ris_search_case_law1 field changed- changed
Input schema / properties / sort_by / descriptionPrevious value: -"Sort column. Default: upstream order."New value: +"Sort column. Default: upstream order. Not available for court: normenliste, which indexes laws rather than decisions."
2 tool updates
- Changed
ris_lookup_citation1 field changed- changed
Input schema / properties / state / descriptionPrevious value: -"Bundesland hint — routes a norm to that state’s consolidated law (LrKons) and an LGBl. gazette to that state’s Landesgesetzblatt (LgblAuth)."New value: +"Bundesland hint — routes a norm to that state’s consolidated law (LrKons) and an LGBl. gazette to that state’s Landesgesetzblatt (LgblAuth, then the legacy Lgbl series for a citation predating the state’s e-Recht switch)."
- Changed
ris_search_case_law1 field changed- changed
Input schema / properties / collection_number / descriptionPrevious value: -"Official collection number (Sammlungsnummer) — VfSlg/VwSlg cites. vfgh, vwgh, and uvs only."New value: +"Official collection number (Sammlungsnummer). vfgh, vwgh, and uvs only, and the accepted form differs: vfgh and uvs store the bare number and match it dotted or undotted (\"19632\", \"19.632\"), while vwgh stores the full labelled undotted cite — pass \"VwSlg 18000 A/2010\", or the space-anchored prefix \"VwSlg 18000 *\" when the part letter or year is unknown. A bare or dotted number matches nothing under vwgh."
1 tool update
- Changed
ris_search_gazette3 fields changed- changed
Input schema / properties / published_from / descriptionPrevious value: -"Earliest promulgation date (YYYY-MM-DD). A pre-2004 range routes a federal query to an earlier era tier."New value: +"Earliest promulgation date (YYYY-MM-DD). A pre-2004 range routes a federal query to an earlier era tier. Federal: the interval must stay inside one tier — set published_to as well, since a one-sided bound is open into every tier beyond it." - changed
Input schema / properties / published_to / descriptionPrevious value: -"Latest promulgation date (YYYY-MM-DD)."New value: +"Latest promulgation date (YYYY-MM-DD). Federal: the interval must stay inside one era tier, so pair it with published_from — an interval crossing 2004-01-01 or 1945-01-01 is rejected with the boundaries to split at." - changed
Output schema / properties / servedApplication / descriptionPrevious value: -"The RIS application that served the query — for federal, the era tier auto-routed by year (BgblAuth 2004+, BgblPdf 1945–2003, BgblAlt 1848–1940); otherwise the resolved state/district/municipal application."New value: +"The RIS application that served the query — for federal, the single era tier auto-routed from the number’s year or the publication-date interval (BgblAuth 2004+, BgblPdf 1945–2003, BgblAlt 1848–1940); otherwise the resolved state/district/municipal application."
7 tool updates
- Changed
ris_lookup_citation4 fields changed- changed
Input schema / properties / citation / descriptionPrevious value: -"The legal citation to resolve, e.g. \"§ 6 DSG\" or \"DSG §1\", \"Art 10 B-VG\", \"BGBl. I Nr. 165/1999\", \"Ra 2019/22/0184\", or \"VfSlg 19.632/2012\"."New value: +"The legal citation to resolve, e.g. \"§ 6 DSG\" or \"DSG §1\", \"Art 10 B-VG\", \"BGBl. I Nr. 165/1999\", \"Ro 2026/03/0016\", or \"VfSlg 19.632/2012\"." - changed
Input schema / properties / court / descriptionPrevious value: -"Court hint for a case number — short-circuits court detection to this court. Codes: ris_list_reference topic courts."New value: +"Court hint for a case number — short-circuits court detection to this court. Codes: ris_list_reference topic courts, minus normenliste (a norm index, which carries no case numbers)." - changed
Input schema / properties / court / enumPrevious value: -[ - "vfgh", - "vwgh", - "justiz", - "bvwg", - "lvwg", - "dsk", - "normenliste", - "dok", - "pvak", - "gbk", - "uvs", - "asylgh", - "ubas", - "umse", - "bks", - "verg", - "upts" -]New value: +[ + "vfgh", + "vwgh", + "justiz", + "bvwg", + "lvwg", + "dsk", + "dok", + "pvak", + "gbk", + "uvs", + "asylgh", + "ubas", + "umse", + "bks", + "verg", + "upts" +] - changed
Input schema / properties / in_force_as_of / patternPrevious value: -"^\\d{4}-\\d{2}-\\d{2}$"New value: +"^\\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\\d|3[01])$"
- Changed
ris_search_announcements5 fields changed- changed
Input schema / properties / entered_force_from / patternPrevious value: -"^\\d{4}-\\d{2}-\\d{2}$"New value: +"^\\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\\d|3[01])$" - changed
Input schema / properties / entered_force_to / patternPrevious value: -"^\\d{4}-\\d{2}-\\d{2}$"New value: +"^\\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\\d|3[01])$" - changed
Input schema / properties / in_force_as_of / patternPrevious value: -"^\\d{4}-\\d{2}-\\d{2}$"New value: +"^\\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\\d|3[01])$" - changed
Input schema / properties / published_from / patternPrevious value: -"^\\d{4}-\\d{2}-\\d{2}$"New value: +"^\\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\\d|3[01])$" - changed
Input schema / properties / published_to / patternPrevious value: -"^\\d{4}-\\d{2}-\\d{2}$"New value: +"^\\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\\d|3[01])$"
- Changed
ris_search_case_law2 fields changed- changed
Input schema / properties / decided_from / patternPrevious value: -"^\\d{4}-\\d{2}-\\d{2}$"New value: +"^\\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\\d|3[01])$" - changed
Input schema / properties / decided_to / patternPrevious value: -"^\\d{4}-\\d{2}-\\d{2}$"New value: +"^\\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\\d|3[01])$"
- Changed
ris_search_drafts3 fields changed- changed
Input schema / properties / decided_from / patternPrevious value: -"^\\d{4}-\\d{2}-\\d{2}$"New value: +"^\\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\\d|3[01])$" - changed
Input schema / properties / decided_to / patternPrevious value: -"^\\d{4}-\\d{2}-\\d{2}$"New value: +"^\\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\\d|3[01])$" - changed
Input schema / properties / in_review_on / patternPrevious value: -"^\\d{4}-\\d{2}-\\d{2}$"New value: +"^\\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\\d|3[01])$"
- Changed
ris_search_gazette2 fields changed- changed
Input schema / properties / published_from / patternPrevious value: -"^\\d{4}-\\d{2}-\\d{2}$"New value: +"^\\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\\d|3[01])$" - changed
Input schema / properties / published_to / patternPrevious value: -"^\\d{4}-\\d{2}-\\d{2}$"New value: +"^\\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\\d|3[01])$"
- Changed
ris_search_legislation5 fields changed- changed
Input schema / properties / entered_force_from / patternPrevious value: -"^\\d{4}-\\d{2}-\\d{2}$"New value: +"^\\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\\d|3[01])$" - changed
Input schema / properties / entered_force_to / patternPrevious value: -"^\\d{4}-\\d{2}-\\d{2}$"New value: +"^\\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\\d|3[01])$" - changed
Input schema / properties / in_force_as_of / patternPrevious value: -"^\\d{4}-\\d{2}-\\d{2}$"New value: +"^\\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\\d|3[01])$" - changed
Input schema / properties / left_force_from / patternPrevious value: -"^\\d{4}-\\d{2}-\\d{2}$"New value: +"^\\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\\d|3[01])$" - changed
Input schema / properties / left_force_to / patternPrevious value: -"^\\d{4}-\\d{2}-\\d{2}$"New value: +"^\\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\\d|3[01])$"
- Changed
ris_track_changes2 fields changed- changed
Input schema / properties / changed_from / patternPrevious value: -"^\\d{4}-\\d{2}-\\d{2}$"New value: +"^\\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\\d|3[01])$" - changed
Input schema / properties / changed_to / patternPrevious value: -"^\\d{4}-\\d{2}-\\d{2}$"New value: +"^\\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\\d|3[01])$"
2 tool updates
- Changed
ris_search_case_law7 fields changed- changed
Output schema / properties / results / descriptionPrevious value: -"Matching decision documents for the requested page. Totals and paging in enrichment."New value: +"Matching documents for the requested page — decisions, or indexed laws under court normenliste. Totals and paging in enrichment." - changed
Output schema / properties / results / items / descriptionPrevious value: -"One decision document (headnote or full text) from the selected court."New value: +"One document from the selected court — a decision (headnote or full text), or, under court normenliste, one law of the VwGH norm index (see norm_index)." - added
Output schema / properties / results / items / properties / indexesAdded value: +{ + "description": "Systematik classification entries (Indizes) — the same taxonomy ris_search_legislation filters on, so an entry copied here finds the consolidated law around the decision. Carried by vfgh, vwgh, lvwg, uvs, umse, and normenliste; empty for the rest.", + "items": { + "description": "One Systematik index entry, e.g. \"10/10 Datenschutz\".", + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / results / items / properties / norm_indexAdded value: +{ + "additionalProperties": false, + "description": "The law this record indexes. Present only for court normenliste (the VwGH norm index); absent for the sixteen deciding courts, whose records describe a decision instead.", + "properties": { + "abbreviation": { + "description": "Citable short form the VwGH uses for the law, e.g. \"DSG 2000\", \"HlG 1989\", \"KFGNov 21te\".", + "type": "string" + }, + "reference": { + "description": "Promulgation reference of the law (Fundstelle), e.g. \"BGBl I 165/1999\" — resolve it with ris_search_gazette or ris_lookup_citation.", + "type": "string" + }, + "title": { + "description": "Full title of the law as the index records it (Titel) — often several lines, carrying the parliamentary references and originating gazette.", + "type": "string" + }, + "type": { + "description": "Norm type code (BG, V, K, …) — glossary: ris_list_reference topic law_types.", + "type": "string" + } + }, + "type": "object" +} - added
Output schema / properties / results / items / properties / noteAdded value: +{ + "description": "Annotation (Anmerkung) — a renaming or lifecycle note on a normenliste law, an editorial note on a justiz or dsk decision.", + "type": "string" +} - added
Output schema / properties / results / items / properties / stateAdded value: +{ + "description": "Bundesland whose administrative court decided (lvwg and uvs records) — the German name, e.g. \"Tirol\".", + "type": "string" +} - changed
Output schema / properties / results / items / requiredPrevious value: -[ - "document_number", - "court", - "case_numbers", - "norms_cited", - "content_urls" -]New value: +[ + "document_number", + "court", + "case_numbers", + "norms_cited", + "indexes", + "content_urls" +]
- Changed
ris_search_legislation1 field changed- added
Output schema / properties / results / items / properties / translationAdded value: +{ + "additionalProperties": false, + "description": "Provenance of an unofficial English translation. Present only on Erv records (language: english), which carry no in_force_from, promulgation, or eli of their own — this is the only statement of which German version the text corresponds to, and how old it is.", + "properties": { + "author": { + "description": "Body that produced the translation, e.g. \"Federal Chancellery\".", + "type": "string" + }, + "source": { + "description": "Which German version this translation renders, as RIS states it — the originating gazette, the last amendment applied, and the date of the version, one per line.", + "type": "string" + } + }, + "type": "object" +}
1 tool update
- Changed
ris_get_document5 fields changed- changed
Input schema / properties / sections / descriptionPrevious value: -"Section names to retrieve, each copied verbatim from a prior outline response (kind: outline). Omit for the full document — which returns a §/Artikel/Anlage outline instead when the markdown overflows the byte budget. Applies to markdown only — ignored for html, xml, and urls_only, which return in full and have no outline to select from."New value: +"Section names to retrieve, each copied verbatim from a prior outline response (kind: outline). Omit for the full document — which returns a §/Artikel/Anlage outline instead when the markdown overflows the byte budget. A name that matches no section is never silently ignored: a total miss returns the outline (kind: outline) with a notice, a partial miss returns the matched sections with a notice naming the rest. Applies to markdown only — html, xml, and urls_only carry no headings to select from and return in full." - changed
Output schema / properties / kind / descriptionPrevious value: -"full — the complete response (document text, selected sections, or rendition URLs). outline — the text overflowed the byte budget, so sections lists the retrievable §/Artikel/Anlage units; re-call with sections:[…] to fetch specific ones."New value: +"full — the complete response (document text, selected sections, or rendition URLs). outline — sections lists the retrievable §/Artikel/Anlage units instead of the text, either because it overflowed the byte budget or because a sections:[…] selector matched nothing; re-call with sections:[…] naming entries from it." - changed
Output schema / properties / notice / descriptionPrevious value: -"Present when the requested text format is unavailable for this application (names why and the usable URL), or when the document overflowed to a section outline (names how to retrieve sections)."New value: +"Present when the requested text format is unavailable for this application (names why and the usable URL), when the document overflowed to a section outline (names how to retrieve sections), or when a sections:[…] entry matched no section (names the unmatched entries)." - changed
Output schema / properties / sections / descriptionPrevious value: -"Present when kind = outline: the document’s §/Artikel/Anlage sections, largest first, each with its UTF-8 byte size. Copy names into the sections input to retrieve them."New value: +"Present when kind = outline: the document’s §/Artikel/Anlage sections, largest first, each with its UTF-8 byte size. Copy names into the sections input verbatim to retrieve them." - changed
Output schema / properties / truncated / descriptionPrevious value: -"Present and true when the full text isn’t inline because the document overflowed to a section outline (kind: outline) — retrieve sections via the sections input, or fetch content_urls for the whole artifact."New value: +"Present and true when the full text isn’t inline because a section outline was returned instead (kind: outline) — either the document overflowed the byte budget, or a sections:[…] selector matched nothing. The notice names which. Retrieve sections via the sections input, or fetch content_urls for the whole artifact."
1 tool update
- Changed
ris_search_gazette2 fields changed- removed
Input schema / properties / include_non_authenticRemoved value: -{ - "description": "State scopes only. Adds the historical non-authentic state gazette — Niederösterreich’s systematic LgblNO, or the older Lgbl for the other Bundesländer (Wien is not carried).", - "type": "boolean" -} - added
Input schema / properties / state_eraAdded value: +{ + "description": "State scopes only. current (default when omitted) searches the authentic Landesgesetzblatt; legacy searches the state’s earlier non-authentic series — Niederösterreich’s systematic LgblNO collection, or the historical Lgbl for the other Bundesländer (Wien carries neither).", + "enum": [ + "current", + "legacy" + ], + "type": "string" +}
3 tool updates
- Changed
ris_get_document2 fields changed- changed
Input schema / properties / sections / descriptionPrevious value: -"Section names to retrieve, each copied verbatim from a prior outline response (kind: outline). Omit for the full document — which returns a §/Artikel/Anlage outline instead when the markdown overflows the byte budget. Applies to text formats; ignored for urls_only."New value: +"Section names to retrieve, each copied verbatim from a prior outline response (kind: outline). Omit for the full document — which returns a §/Artikel/Anlage outline instead when the markdown overflows the byte budget. Applies to markdown only — ignored for html, xml, and urls_only, which return in full and have no outline to select from." - changed
Output schema / properties / notice / descriptionPrevious value: -"Agent-facing notice: either the requested text format is unavailable for this application (names why and the usable URL), or the document overflowed to a section outline (names how to retrieve sections)."New value: +"Present when the requested text format is unavailable for this application (names why and the usable URL), or when the document overflowed to a section outline (names how to retrieve sections)."
- Changed
ris_search_announcements1 field changed- changed
Input schema / properties / issuer / descriptionPrevious value: -"Issuing body — social_insurance (Urheber, e.g. ÖGK/SVS/BVAEB/AUVA/PVA), ministerial_decrees (Bundesministerium — abbreviation expanded server-side), council_minutes (Einbringer ministry). Values: ris_list_reference topic issuing_bodies or ministries."New value: +"Issuing body — social_insurance (Urheber, e.g. ÖGK/SVS/BVAEB/AUVA/PVA), ministerial_decrees (Bundesministerium — abbreviation expanded), council_minutes (Einbringer ministry). Values: ris_list_reference topic issuing_bodies or ministries."
- Changed
ris_search_drafts1 field changed- changed
Input schema / properties / ministry / descriptionPrevious value: -"Submitting ministry (EinbringendeStelle). Accepts an abbreviation (\"BMF\") — expanded server-side to RIS’s exact-match designation; use the ministry’s name at the time of submission. Table: ris_list_reference topic ministries."New value: +"Submitting ministry (EinbringendeStelle). Accepts an abbreviation (\"BMF\") — expanded to RIS’s exact-match designation; use the ministry’s name at the time of submission. Table: ris_list_reference topic ministries."
9 tool updates
- First observed
ris_get_document - First observed
ris_list_reference - First observed
ris_lookup_citation - First observed
ris_search_announcements - First observed
ris_search_case_law - First observed
ris_search_drafts - First observed
ris_search_gazette - First observed
ris_search_legislation - First observed
ris_track_changes
Related MCP Connectors
Search Belgian & EU legislation: verbatim article text, per-article links, legal Q&A.
Search national and EU case law, legislation and regulation, with citations you can verify.
Search 18M+ legal documents worldwide — case law, legislation, and doctrine across 110+ countries.
Search French-language and European case law and French legal texts (codes, statutes, treaties).
Related MCP Servers
- AlicenseAqualityAmaintenanceEnables searching and retrieving Austrian federal legislation and case law from the official legal information system RIS, with verifiable ELI and ECLI identifiers.648 PyPIApache 2.0
- AlicenseAqualityBmaintenanceAustria's legal information system (RIS): federal & state law, case law, gazettes, change monitoring.1037 PyPI1Apache 2.0
- AlicenseNot gradedqualityFmaintenanceEnables AI assistants to search and retrieve Austrian federal legislation, provisions, case law, and EU implementation data with verbatim source citations and currency validation.40 npmApache 2.0
- AlicenseNot gradedqualityBmaintenanceMCP server that exposes Austrian federal law (Bundesrecht) to LLMs, enabling full-text search, paragraph retrieval, historical versions, statute lookup, BGBl lookups, amendment timelines, and citation searches via the public RIS OGD API.MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.