Skip to main content
Glama

Server Details

Search Austrian federal and state law, court decisions, and the authentic Bundesgesetzblatt (RIS).

If you are the author of this connector, you can claim ownership by verifying the domain or GitHub account it belongs to. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Uptime
99.9% over 69 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

A4.7/5.0

Scored across 9 tools

Disambiguation5/5

Each tool has a clearly distinct role: document retrieval, static reference, deterministic citation lookup, domain-specific searches (legislation, case law, gazette, drafts, announcements), and exact change tracking. Overlaps such as search_legislation vs search_gazette and search_drafts vs search_gazette are explicitly framed by binding status and lifecycle stage, so an agent can select correctly.

Naming Consistency5/5

All tools follow a consistent ris_ prefix plus verb_noun pattern: ris_get_document, ris_list_reference, ris_lookup_citation, ris_search_*, and ris_track_changes. The convention is predictable and readable throughout.

Tool Count5/5

Nine tools are well scoped for a complex national legal information system. Each tool earns its place by covering a distinct retrieval or monitoring surface without redundant endpoints.

Completeness5/5

The set covers consolidated legislation, authentic gazettes, case law, lawmaking drafts, sectoral announcements, full-document retrieval, citation resolution, static reference data, and change tracking. For a read-only legal research domain, this is a complete lifecycle surface with no obvious dead ends.

Available Tools

9 tools
ris_get_documentGet RIS DocumentA
Read-onlyIdempotent
Inspect

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, and prints each Absatz, Ziffer, and litera under its own statutory label — (1a), 2., b) — with no generated list number in front; raw html/xml renditions are returned exactly as published.

NameRequiredDescriptionDefault
formatNomarkdown (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
sectionsNoEntry 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.
applicationNoRIS 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_urlNoA /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_numberNoTechnical 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

NameRequiredDescription
kindNofull — 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.
textNoThe 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).
errorNoPresent when the call failed. Absent on success.
formatNoThe format served — echoes the requested format.
noticeNoPresent 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).
sectionsNoPresent 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_sizeNoFull 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.
truncatedNoPresent 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.
applicationNoRIS application the document belongs to (echoed).
content_urlsNoConstructed 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_statusNoLegal 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_numberNoTechnical RIS document number (echoed).
authentic_pdf_urlNoThe amtssigniert authentic PDF (.pdfsig, Authentisch DataType) — the legally binding artifact — where the application publishes one.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, openWorld, so the bar is lower, yet the description discloses substantial behavior beyond them: per-application format availability, explicit non-silent degradation to format_unavailable/link notices, outline/Part-N windowing under the 40,000-byte budget, and sections selector fallback behavior. It is very rich; minor deduction only because it is sprawling and repeats the stylesheet point already in schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded, but the description is extremely dense and repeats material already present in the schema (the 40–70 KB stylesheet / kind: link point appears in both format enum and prose). Most content earns its place given the complexity, but the density and duplication cost it.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given a complex tool with an output schema and rich annotations, the description covers everything an agent needs: both invocation routes, format tradeoffs, overflow/outline handling, degradation behavior, and binding-status semantics. Nothing critical to correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and enum values are self-documenting, so the schema carries much of the load; the description still adds value by clarifying cross-parameter constraints (sections applies to markdown only, mutually exclusive addressing, urls_only carries no text) and the sections-from-outline contract.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (fetch) and resource (one RIS document) plus exactly what variants are returned (full text or rendition URLs, with binding status and authentic PDF surfaced). It clearly distinguishes itself from the search/lookup siblings that produce the document identifiers it consumes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly gives the two addressing routes (document_number + application vs. document_url), the special case for draft companion documents via materials[].url, and format selection guidance including when a format is unavailable. Names the sibling tools (ris_search_*, ris_lookup_citation, ris_search_drafts) that feed the identifiers and the failure/degradation conditions.

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 ListsA
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault
topicYesWhich reference table to return. Pick the topic named in the error recovery hint or zero-hit notice that sent you here.

Output Schema

NameRequiredDescription
errorNoPresent when the call failed. Absent on success.
notesNoTopic-level caveats and usage guidance. Empty when none apply.
topicNoThe requested topic, echoed back.
entriesNoReference entries for the topic.
summaryNoWhat this topic covers and which tool parameters consume its values.

TDQS

A4.7/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 CitationA
Read-onlyIdempotent
Inspect

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", "EMRK Art8", the shape ris_search_case_law returns in norms_cited; a comma-joined entry like "DSG §1, §24", or one joining full norms with ". " like "ZPO §179. ZPO §275 Abs2", resolves its first provision and names the rest), or a bare abbreviation like "ABGB" or "1. COVID-19-JuBG", with sub-provisions (Abs, Z, lit, "(1)"), the version a law is cited in ("ABGB idF 2. ErwSchG §254", "ABGB aF §140"), and a terminal ";" dropped, and a long title read by its short form after the dash ("StaatsanwaltschaftsG - StAG §35") — resolves through consolidated federal law, or a Bundesland with a state hint, as in force today or on in_force_as_of, while an EU act RIS does not consolidate (DSGVO, the Charter, EuGVVO, the EC Treaty as EG, EGV, or EG-Vertrag), or an EU act cited by its number ("RL 2006/123/EG", "VO (EG) 178/2002"), returns found: false pointing to EUR-Lex without a search; a gazette citation ("BGBl. I Nr. 165/1999", year-first "BGBl I 2018/24", pre-2004 "BGBl. Nr. 194/1961", imperial "RGBl. Nr. 189/1902", "StGBl. Nr. 1/1945", or "LGBl. Nr. 61/2026" with a state hint) routes to the right federal era tier by year — the 1945 Staatsgesetzblatt sits in the 1945–2003 tier beside the BGBl. — 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 — a leading VfGH, VwGH, OGH, BVwG, or DSB names it ("VfGH G 13/2025"), court skips detection, and ambiguous formats probe up to two courts; an ECLI ("ECLI:AT:VFGH:2026:G13.2025") resolves to the decision that carries it; 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. Matches are ranked before one is picked: a norm resolves to the hit whose abbreviation is the cited one, then the cited one plus a year ("EStG" → EStG 1988), then the cited one without a year RIS’s abbreviation omits, when the law’s short title carries it ("AlVG 1977" → AlVG), the exact §/Artikel label ahead of a prefixed one ("§ 1" before "Art. 2 § 1"), and a cite whose year matches nothing ("VwGVG 2014 §28") is searched once more without it, taking only the law filed under the cited abbreviation without that year and first promulgated no later than it ("VwGVG 2014" → VwGVG, not "AVG 1950" → the AVG of 1991), for a year no later than in_force_as_of’s; a case number resolves to the decision text, then to a Rechtssatz that decision leads; a gazette cite resolves only to an entry of the gazette it names (StGBl. and BGBl. share numbers in 1945, as the older gazettes do in their changeover years); and a "BGBl. Nr." cite without its part that matches more than one of parts I/II/III (from 1997 they reuse numbers) comes back as ambiguous with each part named. 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.

NameRequiredDescriptionDefault
kindNoForce a route, or auto (default) to classify by shape. Set explicitly when the citation shape is ambiguous.auto
courtNoCourt hint for a case number — short-circuits court detection, and a leading court name, to this court. An ECLI’s own court segment takes precedence; the hint is searched only for a segment this lookup does not map. Codes: ris_list_reference topic courts, minus normenliste (a norm index, which carries no case numbers).
stateNoBundesland 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).
citationYesThe legal citation to resolve, e.g. "§ 6 DSG" or "DSG §1", "Art 10 B-VG", "BGBl. I Nr. 165/1999" or "BGBl I 2018/24", "Ro 2026/03/0016" or "VfGH G 13/2025", "ECLI:AT:VFGH:2026:G13.2025", or "VfSlg 19.632/2012".
in_force_as_ofNoFor a norm, resolve the version in force on this date (YYYY-MM-DD). Defaults to today in Austria.

Output Schema

NameRequiredDescription
kindNoWhat the citation parsed as — "unknown" when it did not classify into any route.
errorNoPresent when the call failed. Absent on success.
foundNoTrue when the citation resolved to a single best-matching document.
recordNoThe 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.
guidanceNoNext-step guidance naming a concrete tool. Present when found is false.
resolution_noteNoWhich application and filter resolved the citation. Present when found is true.
alternatives_countNoDocuments 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

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish read-only, idempotent, open-world behavior, but the description adds substantial context: unresolved citations return found:false rather than throwing, ambiguous cases return alternatives, EU acts point to EUR-Lex, and only upstream RIS outages are errors. These are meaningful behavioral disclosures beyond 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.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose is front-loaded, but the description is a very long wall of dense edge-case and ranking detail. Much of it is useful for a complex resolver, yet it is far from concise and risks overwhelming the agent with implementation minutiae.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity of Austrian citation resolution, the description is thorough: it covers norm, gazette, case-number, collection-number, and ECLI routes, plus ambiguity and failure behavior. With an output schema also present, nothing essential for correct invocation appears to be missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is already 100%, but the description adds real meaning about how kind routes are auto-detected, how court detection works, how state hints select LrKons or Landesgesetzblatt series, and how in_force_as_of is applied. It goes well beyond repeating the schema text.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource: it resolves a single Austrian legal citation to its canonical RIS document deterministically. It explicitly distinguishes itself from keyword search and names the sibling search tools, so an agent can tell what it is for without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It clearly says this is for citation lookup rather than keyword lookup and directs keyword searches to ris_search_legislation or ris_search_case_law. It also explains the auto-detected citation routes, when to force kind, and how court and state hints affect routing.

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 AnnouncementsA
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault
normNoCited-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.
pageNo1-based result page. Default 1.
typeNoDocument type (Typ) — trade_exam_rules (Befaehigungspruefungsordnung | Meisterpruefungsordnung | HoehereBerufsqualifikation | Fachdiplom | HoeheresFachdiplom), court_rules (Geschaeftsordnung | Geschaeftsverteilung), veterinary (Kundmachungen | VeroeffentlichungenAufGrundVEVO | SonstigeVeroeffentlichungen). Only these values, in any letter case. Omit to leave unfiltered; a blank value is rejected.
queryNoFull-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.
titleNoTitle search (Titel) — phrase field. Valid for all collections except council_minutes. Omit to leave unfiltered; a blank value is rejected.
issuerNoIssuing 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.
numberNoSerial number (Avsvnummer / Avnnummer / Spgnummer) — social_insurance, veterinary, health_structure_plans. Omit to leave unfiltered; a blank value is rejected.
sort_byNoSort column: published or number, where the collection has the column. Default: upstream order.
page_sizeNoDocuments per page, 1–100 (default 20). Served as a page of 10 (1–10) or 20 (11–100), with a notice when that differs. For more results, keep the size and raise page.
plan_typeNohealth_structure_plans only. Plan kind — all (default), expert_opinion (Gutachten), or regulation (Verordnungen). Searches the federal ÖSG unless plan_state is set.
collectionYesWhich 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.
departmentNoMinistry department (Abteilung) — ministerial_decrees only. Omit to leave unfiltered; a blank value is rejected.
plan_stateNohealth_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_numberNoBusiness reference number (Geschäftszahl) — veterinary and ministerial_decrees only. Omit to leave unfiltered; a blank value is rejected.
legislatureNoLegislative period (Gesetzgebungsperiode, e.g. "XXVII") — council_minutes only. Omit to leave unfiltered; a blank value is rejected.
published_toNoLatest publication/session date (YYYY-MM-DD).
changed_sinceNoCoarse 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_ofNoVersion in force on this date (YYYY-MM-DD) — veterinary, court_rules, trade_exam_rules, health_structure_plans, ministerial_decrees (the consolidated-ish collections).
published_fromNoEarliest 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_numberNoCouncil session number (Sitzungsnummer) — council_minutes only. Omit to leave unfiltered; a blank value is rejected.
sort_directionNoSort direction; applies with sort_by.
entered_force_toNoProvisions that entered force on/before this date (YYYY-MM-DD) — ministerial_decrees only.
entered_force_fromNoProvisions that entered force on/after this date (YYYY-MM-DD) — ministerial_decrees only.

Output Schema

NameRequiredDescription
pageNo1-based page number RIS served.
errorNoPresent when the call failed. Absent on success.
noticeNoThe served page size when it differs from page_size, then zero-hit guidance — the likely cause and the concrete next call.
resultsNoMatching documents for the requested page. Totals and paging in enrichment.
pageSizeNoPage size RIS applied.
truncatedNoPresent and true when more pages exist beyond this one — raise page to continue.
totalCountNoTotal matching documents across all pages.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds substantial behavior beyond the read-only/idempotent annotations: collection-specific filter support, local rejection of invalid filters, binding labels and authentic PDF availability, browsable document_url surfaces for PDF-only collections, and page_size serving quirks. It also notes changed_since being ignored for social_insurance and veterinary, and published_from not applying to ministerial_decrees.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but appropriately sized for a 23-parameter, seven-collection search tool, and the collection list is front-loaded. It could be easier to scan with structured grouping, but nearly every sentence carries operational information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 23 parameters, seven collections, an existing output schema, and read-only annotations, the description covers the essential missing context: collection boundaries, filter applicability, fallback behavior, and where to look up the full matrix. An agent has enough information to select the right collection and avoid invalid filter combinations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Although schema coverage is already 100%, the description adds crucial cross-parameter meaning: which filters apply to which collection, abbreviation expansion for issuer, norm’s cited-provision semantics, and exceptions such as changed_since being ignored for two collections. This is more than restating schema descriptions; it explains how parameters behave in context.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb-resource pair: searching Austria’s sectoral official gazettes and executive documents across seven named collections. The collection list and domain scope make it clearly distinguishable from sibling searches such as ris_search_case_law, ris_search_gazette, and ris_search_legislation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly says each collection accepts a different filter set, that unsupported filters are rejected locally, and points to ris_list_reference for the per-collection matrix and issuers. It does not directly contrast with every sibling tool, but the collection-by-collection applicability rules provide strong usage context.

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 LawA
Read-onlyIdempotent
Inspect

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, ECLI, or VfSlg/VwSlg cite, ris_lookup_citation resolves it directly.

NameRequiredDescriptionDefault
normNoCited-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.
pageNo1-based result page. Default 1.
courtYesWhich court/tribunal application to search — one per call. Codes, coverage windows, and successor mapping: ris_list_reference topic courts.
partyNoPolitical 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.
queryNoFull-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.
stateNoWhich of the nine state administrative courts/senates to search (lvwg and uvs only).
senateNoCommission senate (gbk only).
sort_byNoSort column. Default: upstream order. Not available for court: normenliste, which indexes laws rather than decisions.
page_sizeNoDocuments per page, 1–100 (default 20). Served as a page of 10 (1–10) or 20 (11–100), with a notice when that differs. For more results, keep the size and raise page.
commissionNoEqual-treatment commission (gbk only): federal (Bundes-Gleichbehandlungskommission) or general (Gleichbehandlungskommission).
court_nameNoFilter within the ordinary courts (justiz only) — "OGH", "OLG Wien", "LG Linz". Omit to leave unfiltered; a blank value is rejected.
decided_toNoLatest decision date (YYYY-MM-DD).
legal_areaNoLegal area (Rechtsgebiet, justiz only): civil (Zivilrecht) or criminal (Strafrecht).
case_numberNoExact 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_lawNoMedia statute the case concerns (Bereich, bks only) — e.g. "ORF-Gesetz", "Privatradiogesetz". Omit to leave unfiltered; a blank value is rejected.
decided_fromNoEarliest decision date (YYYY-MM-DD). Not available for normenliste.
issuing_bodyNoDeciding body (EntscheidendeBehoerde) — dsk, dok, pvak, and verg only. dsk: Datenschutzbehoerde (2014+), Datenschutzkommission (up to 2013), or ParlamentarischesDatenschutzkomitee (2025+); pvak: Personalvertretungsaufsichtsbehoerde (2014+) or PersonalvertretungsAufsichtskommission (up to 2013) — dsk and pvak take only these values, in any letter case. dok and verg take the body name as free text: ris_list_reference topic issuing_bodies. Omit to leave unfiltered; a blank value is rejected.
subject_areaNoSubject-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_sinceNoCoarse recency filter — decisions changed in RIS within the interval. For exact windows use ris_track_changes.
decision_kindNoDecision 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_typeNoSearch headnotes (Rechtssätze), full decision texts (Entscheidungstexte), or both (all, the default). Not available for gbk, upts, or normenliste.all
sort_directionNoSort direction; applies with sort_by.
collection_numberNoOfficial 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_groundNoDiscrimination 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

NameRequiredDescription
pageNo1-based page number RIS served.
errorNoPresent when the call failed. Absent on success.
noticeNoThe served page size when it differs from page_size, then zero-hit guidance — the likely cause and the concrete next call.
resultsNoMatching documents for the requested page — decisions, or indexed laws under court normenliste. Totals and paging in enrichment.
pageSizeNoPage size RIS applied.
truncatedNoPresent and true when more pages exist beyond this one — raise page to continue.
totalCountNoTotal matching documents across all pages.

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/openWorld/idempotent, so the safety profile is covered. The description adds non-obvious behavioral context: calls are cheap so per-court fan-out is fine, historical tribunals are closed windows, and norm is called out as the highest-value filter. It does not discuss pagination or result-shape behavior, but the output schema and page/page_size descriptions carry that.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the required court constraint and the routing rule, and almost every clause carries information (court enumeration, filter taxonomy, sibling pointer). It is one dense run-on paragraph with long em-dash chains, so the court-conditional filter map is harder to scan than it needs to be; slight restructuring would help.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 24-parameter search tool with an output schema, the description covers everything an agent needs: required parameter, the per-court constraint, the full filter taxonomy with court applicability, format examples for the trickiest filters, and explicit referral to ris_lookup_citation and ris_list_reference. Remaining details (pagination, empty-corpus caveats) are already handled in schema parameter descriptions.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline would be 3, but the description adds real semantic value: norm filter examples ("DSG §1", "DSGVO Art32"), and a compact map of which court each conditional filter belongs to (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). That court-conditional grouping is not obvious from a flat 24-parameter list and materially reduces misfires.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (search Austrian case law) and immediately scopes it to one court/tribunal per call, enumerating all valid court codes with plain-language glosses. This clearly separates it from ris_search_legislation, ris_search_gazette, and ris_get_document without requiring the sibling schemas to be opened.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit when-to-use and when-to-use-something-else: cross-court research is one call per court (and calls are cheap), court codes/windows live in ris_list_reference topic courts, and a known Geschäftszahl/ECLI/VfSlg cite should go to ris_lookup_citation instead. It also flags that historical bodies are closed windows with successors, which prevents futile searching.

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 LegislationA
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault
pageNo1-based result page. Default 1.
queryNoFull-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.
stageYesWhich 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.
titleNoTitle search (Titel) — phrase field: * allowed leading or trailing with ≥2 characters beside it. Omit to leave unfiltered; a blank value is rejected.
sort_byNoSort column: date (review deadline or adoption date per stage), ministry, or title. Default: upstream order.
ministryNoSubmitting 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_sizeNoDocuments per page, 1–100 (default 20). Served as a page of 10 (1–10) or 20 (11–100), with a notice when that differs. For more results, keep the size and raise page.
decided_toNogovernment_bills only. Latest adoption date (YYYY-MM-DD).
decided_fromNogovernment_bills only. Earliest council-of-ministers adoption date (YYYY-MM-DD).
in_review_onNoreview_drafts only. Drafts whose public-review window covers this date (YYYY-MM-DD). Today = drafts currently in Begutachtung.
changed_sinceNoCoarse recency filter — documents changed in RIS within the interval. For exact windows use ris_track_changes.
sort_directionNoSort direction; applies with sort_by.

Output Schema

NameRequiredDescription
pageNo1-based page number RIS served.
errorNoPresent when the call failed. Absent on success.
noticeNoThe served page size when it differs from page_size, then zero-hit guidance — the likely cause and the concrete next call.
resultsNoMatching pipeline documents for the requested page. Totals and paging in enrichment.
pageSizeNoPage size RIS applied.
truncatedNoPresent and true when more pages exist beyond this one — raise page to continue.
totalCountNoTotal matching documents across all pages.

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint and openWorldHint, so the safety profile is covered. The description adds genuinely non-structured behavior: ministry abbreviations are expanded to RIS's exact designations, the historical name at submission time counts, and records carry companion materials that are preparatory rather than binding law. It omits pagination/rate behavior, which is a minor gap given the strong additions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The first sentence front-loads the pipeline positioning and the sibling contrast; subsequent clauses are dense with legal-domain specifics (Erläuterungen, Textgegenüberstellung, Vorblatt/WFA) rather than filler. It is long and pronoun-heavy, but nearly every clause carries actionable detail, so only mild trimming is warranted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 12-parameter, two-mode search tool with an output schema, the description covers the stage split, stage-restricted filters, ministry normalization, recency, and the cross-tool path for reading materials. Return values are left to the output schema, which is the correct division of labor, so an agent has everything needed to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline would be 3, but the description adds interpretive value beyond the schema: 'today = what is in Begutachtung right now' for in_review_on, the abbreviation-expansion semantics of ministry, and the fact that materials[].url must be passed to ris_get_document as document_url to read a companion document. That is meaning the schema's terse descriptions do not carry.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Search Austria's federal lawmaking pipeline BEFORE promulgation') and explicitly positions itself as the 'monitoring counterpart to ris_search_gazette (what will become law)'. The two stage values are named and glossed with German legal terms, so the agent can distinguish this from ris_search_legislation and ris_search_gazette without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Names when to use each stage (review_drafts = ministerial review before any bill exists; government_bills = council-adopted, 2004+), and states which filters are stage-restricted (in_review_on for review_drafts, decided_from/to for government_bills). It routes the agent to alternatives by name: ris_get_document for materials, ris_track_changes for exact change windows, ris_list_reference for ministry codes, ris_search_gazette for the counterpart stage.

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 GazettesA
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault
pageNo1-based result page. Default 1.
partNoFederal 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.
typeNoDocument-type filter (Typ) for federal and state law gazettes: laws (Gesetze) | regulations (Verordnungen) | announcements (Kundmachungen) | other (Sonstiges).
queryNoFull-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.
scopeNoJurisdiction level: federal (default — the Bundesgesetzblatt, era tier auto-routed), a Bundesland (burgenland … wien, its Landesgesetzblatt), district (Bezirke promulgations), or municipal (Gemeinde promulgations).federal
titleNoTitle search (Titel) — phrase field: * allowed leading or trailing with ≥2 characters beside it. Omit to leave unfiltered; a blank value is rejected.
issuerNoIssuing 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.
numberNoGazette number, e.g. "171/2026" (federal; the cited form "BGBl. II Nr. 171/2026" works from 2004 only — earlier tiers match the bare "194/1961"), "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.
seriesNoState scopes only. law_gazette (default when omitted) searches the authentic Landesgesetzblatt; ordinance_gazette searches the Verordnungsblätter (Vbl — currently Tirol only, 2022+).
sort_byNoSort column: published (Kundmachungsdatum) or number. Availability varies by tier; default: upstream order.
page_sizeNoDocuments per page, 1–100 (default 20). Served as a page of 10 (1–10) or 20 (11–100), with a notice when that differs. For more results, keep the size and raise page.
state_eraNoState 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).
municipalityNoMunicipal only. Exact municipality name (Gemeinde), RIS’s spelling. Omit to leave unfiltered; a blank value is rejected.
published_toNoLatest 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_fromNoEarliest 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_directionNoSort direction; applies with sort_by.
district_authorityNoDistrict 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

NameRequiredDescription
pageNo1-based page number RIS served.
errorNoPresent when the call failed. Absent on success.
noticeNoThe served page size when it differs from page_size, then zero-hit guidance — the likely cause and the concrete next call.
resultsNoMatching gazette entries for the requested page. Totals, paging, and the served application in enrichment.
pageSizeNoPage size RIS applied.
truncatedNoPresent and true when more pages exist beyond this one — raise page to continue.
totalCountNoTotal matching entries across all pages.
servedApplicationNoThe 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

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark it read-only/idempotent/open-world, but the description adds real behavioral context: intervals crossing 2004-01-01 or 1945-01-01 are rejected with the boundaries to split at, no federal gazette exists for 1941–1944, Wien has no legacy series, and page_size is silently served as 10 or 20 with a notice. It also discloses that results carry binding labels and amtssigniert PDFs rather than paraphrases.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose and scope selection are front-loaded and no sentence is filler, which is defensible for a 17-parameter tool with era-routing rules. However, it is delivered as one dense multi-clause paragraph whose nested parentheticals make the filter list harder to scan than it needs to be.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 17 optional parameters, an output schema, and full annotation coverage, the description supplies everything an agent needs: scope/era routing, interval-splitting constraints, filter applicability, and the meaning of the binding labels returned. Nothing material is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so most parameter meaning is already structured. The description still adds cross-parameter applicability semantics (issuer federal/ordinance only, district_authority district only, municipality municipal only, number with a trailing year routes the era tier) that help an agent plan a call rather than read each field in isolation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb and resource ("Browse Austria's promulgation record — the authentic, legally binding gazettes") and immediately names the jurisdiction levels. It distinguishes itself from siblings by routing single-citation lookups to ris_lookup_citation and reference semantics to ris_list_reference.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when to use this vs ris_lookup_citation ("For one known gazette number..."), and gives conditional rules for every scope: federal era auto-routing, the 1945/2004 split requirement, the 1941–1944 coverage gap, series/state_era interplay, and which filters apply to which scope. Little is left to inference.

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 LegislationA
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault
pageNo1-based result page. Default 1.
indexNoSystematik classification filter (e.g. "10/10 Datenschutz"). Federal/state consolidated law only. Omit to leave unfiltered; a blank value is rejected.
queryNoFull-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.
scopeNoJurisdiction: federal (default) searches consolidated federal law; a Bundesland searches that state’s consolidated law (or, with municipality set, its municipal law).federal
titleNoTitle 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_idNoLaw-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_byNoSort column: section (§/Artikel/Anlage label) or in_force_date. Default: upstream order. Federal/state consolidated law only.
languageNogerman (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_sizeNoDocuments per page, 1–100 (default 20). Served as a page of 10 (1–10) or 20 (11–100), with a notice when that differs. For more results, keep the size and raise page.
section_toNoEnd of the section range. Equal to section_from for a single section. Omit to leave unfiltered; a blank value is rejected.
municipalityNoMunicipality 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_fromNoStart 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_typeNoWhich section kind the range addresses. Defaults to Paragraph when a section range is set. Values: ris_list_reference topic section_types.
changed_sinceNoCoarse recency filter — documents changed in RIS within the interval. For exact windows and deletions use ris_track_changes.
left_force_toNoProvisions that left force on/before this date (YYYY-MM-DD).
in_force_as_ofNoReturn 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_directionNoSort direction; applies with sort_by.
left_force_fromNoProvisions that left force on/after this date (YYYY-MM-DD) — repeal tracking. Same exclusivity as entered_force_from.
entered_force_toNoProvisions that entered force on/before this date (YYYY-MM-DD).
entered_force_fromNoProvisions 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_versionsNotrue 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

NameRequiredDescription
pageNo1-based page number RIS served.
errorNoPresent when the call failed. Absent on success.
noticeNoThe served page size when it differs from page_size, then zero-hit guidance — the likely cause and the concrete next call.
resultsNoMatching documents for the requested page. Totals and paging in enrichment.
pageSizeNoPage size RIS applied.
truncatedNoPresent and true when more pages exist beyond this one — raise page to continue.
totalCountNoTotal matching documents across all pages.
appliedInForceAsOfNoThe 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

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the readOnly/idempotent/openWorld annotations: it warns that omitting in_force_as_of silently applies today's version rather than searching history, states the three version filters are mutually exclusive, notes the applied date is echoed in the result, and discloses the page_size quirk (served as 10 or 20 with a notice) plus that consolidated text is non-binding and translations are unofficial (~138 docs). These are exactly the traits that cause wrong calls if undisclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Content is dense and largely front-loaded: the corpus/scope enumeration comes first, then versioning, then query syntax, then sibling routing. Every sentence carries information, but the whole definition is a single ~150-word paragraph with no breaks, which hurts scannability for a 21-parameter tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 21-parameter search tool with an output schema already published, the description covers everything the agent needs: which corpus each scope/language selects, the default version semantics, filter exclusivity, municipal coverage gaps, pagination behavior, and the legal caveat. Nothing required 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.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the schema already documents boolean query syntax, trailing-only wildcards, title/abbreviation matching, Gesetzesnummer in law_id, and per-parameter version exclusivity. The description mostly restates this rather than adding new meaning; its only genuine over-schema value is consolidating the mutual exclusivity of the three version filters as a set and noting the echoed applied date.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific verb and resource (search Austrian consolidated law plus English translations) and immediately enumerates the four searchable corpora: federal (default), single Bundesland, municipal, and English translations. It also defines the unit of return ('One document is one § / Artikel / Anlage') and explicitly contrasts with ris_lookup_citation and ris_search_gazette, so an agent can distinguish it from every sibling without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit routing rules: use ris_lookup_citation for a known citation like '§ 6 DSG', use ris_track_changes for exact windows and deletions, and use ris_search_gazette for the authentic gazette artifact. Scope selection guidance (federal is the default, municipality requires a state scope and only works in 6 Bundesländer) tells the agent which mode to pick and which are unavailable.

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 ChangesA
Read-onlyIdempotent
Inspect

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, the section_label, law_id, and in-force window (in_force_from/in_force_until) of a consolidated-law row or the case_numbers and decision_date of a court decision, 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.

NameRequiredDescriptionDefault
pageNo1-based result page. Default 1.
page_sizeNoDocuments per page, 1–100 (default 20). Served as a page of 10 (1–10) or 20 (11–100), with a notice when that differs. For more results, keep the size and raise page.
changed_toNoInclude documents changed on/before this date (YYYY-MM-DD, AenderungenBis).
applicationYesRIS application whose change feed to read, e.g. BrKons, LrKons, Dsk, or BgblAuth. All supported codes: ris_list_reference topic applications.
changed_fromNoInclude documents changed on/after this date (YYYY-MM-DD, AenderungenVon). Exact date, not a coarse interval.
include_deletedNotrue also returns documents removed from RIS in the window, as deleted records — the only way to observe deletions.

Output Schema

NameRequiredDescription
pageNo1-based page number RIS served.
errorNoPresent when the call failed. Absent on success.
noticeNoThe served page size when it differs from page_size, then zero-hit guidance — the likely cause and the concrete next call.
resultsNoChange-feed entries for the requested page. Totals, paging, and the applied window in enrichment.
pageSizeNoPage size RIS applied.
changedToNoThe changed_to bound the server applied (echo), when set.
truncatedNoPresent and true when more pages exist beyond this one — raise page to continue.
totalCountNoTotal change-feed entries across all pages.
applicationNoThe application whose change feed was read.
changedFromNoThe changed_from bound the server applied (echo), when set.

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, and openWorld, so the safety profile is covered. The description adds behavior the annotations cannot: exact-dated rather than interval semantics, that deletions are only observable here, and that removed documents return as deleted records with a deletion timestamp. It does not mention auth or rate-limit behavior, keeping it short of a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose and sibling differentiation are front-loaded in the first two sentences, followed by parameter and return-shape detail. It is a single dense paragraph with some redundancy, notably restating the application codes that the enum already lists and describing return fields despite an output schema existing.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given six parameters, one required, an output schema, and rich annotations, nothing an agent needs to invoke this correctly is missing: date-window semantics, deletion handling, single-application constraint, and pagination advice are all present. The return-shape sentence is redundant against the output schema but does not leave any gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning: it ties the application enum to ris_list_reference topic applications and names representative codes, and clarifies changed_from is an exact date, not a coarse interval. include_deleted is framed as 'the only way to observe deletions', which goes beyond the schema's wording.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('track every document added or changed in one RIS application within an exact date window') and explicitly contrasts itself with the search tools' additive-only changed_since intervals. It also claims a unique capability ('the only surface that reports removals'), so an agent can distinguish it from all eight siblings without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Frames the tool as the 'delta-sync and monitoring primitive for mirrors and watchers' and names the excluded alternative (search tools' coarse changed_since). It adds operational guidance not in the schema: one application per call, and page explicitly for large windows.

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.

  1. 1 tool update
    • Changedris_get_document2 fields changed
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous 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."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. `content_host_blocked`: The configured RIS content host answered with a bot-check page (\"Security Check\") instead of the document — it refuses automated clients, so every read through it fails the same way. `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."
      • changedOutput schema / properties / error / properties / data / properties / reason / examples
        Previous value: -[
        -  "invalid_addressing",
        -  "unsupported_url",
        -  "document_not_found",
        -  "upstream_error",
        -  "upstream_timeout"
        -]New value: +[
        +  "invalid_addressing",
        +  "unsupported_url",
        +  "document_not_found",
        +  "upstream_error",
        +  "content_host_blocked",
        +  "upstream_timeout"
        +]
  2. 6 tool updates
    • Changedris_search_announcements6 fields changed
      • changedInput schema / properties / page_size / description
        Previous value: -"Documents per page: 10 or 20 (default 20). For more results, keep the size and raise page."New value: +"Documents per page, 1–100 (default 20). Served as a page of 10 (1–10) or 20 (11–100), with a notice when that differs. For more results, keep the size and raise page."
      • removedInput schema / properties / page_size / enum
        Removed value: -[
        -  10,
        -  20
        -]
      • addedInput schema / properties / page_size / maximum
        Added value: +100
      • addedInput schema / properties / page_size / minimum
        Added value: +1
      • changedInput schema / properties / page_size / type
        Previous value: -"number"New value: +"integer"
      • changedOutput schema / properties / notice / description
        Previous value: -"Zero-hit guidance — names the likely cause and the concrete next call."New value: +"The served page size when it differs from page_size, then zero-hit guidance — the likely cause and the concrete next call."
    • Changedris_search_case_law6 fields changed
      • changedInput schema / properties / page_size / description
        Previous value: -"Documents per page: 10 or 20 (default 20). For more results, keep the size and raise page."New value: +"Documents per page, 1–100 (default 20). Served as a page of 10 (1–10) or 20 (11–100), with a notice when that differs. For more results, keep the size and raise page."
      • removedInput schema / properties / page_size / enum
        Removed value: -[
        -  10,
        -  20
        -]
      • addedInput schema / properties / page_size / maximum
        Added value: +100
      • addedInput schema / properties / page_size / minimum
        Added value: +1
      • changedInput schema / properties / page_size / type
        Previous value: -"number"New value: +"integer"
      • changedOutput schema / properties / notice / description
        Previous value: -"Zero-hit guidance — names the likely cause and the concrete next call."New value: +"The served page size when it differs from page_size, then zero-hit guidance — the likely cause and the concrete next call."
    • Changedris_search_drafts9 fields changed
      • changedInput schema / properties / page_size / description
        Previous value: -"Documents per page: 10 or 20 (default 20). For more results, keep the size and raise page."New value: +"Documents per page, 1–100 (default 20). Served as a page of 10 (1–10) or 20 (11–100), with a notice when that differs. For more results, keep the size and raise page."
      • removedInput schema / properties / page_size / enum
        Removed value: -[
        -  10,
        -  20
        -]
      • addedInput schema / properties / page_size / maximum
        Added value: +100
      • addedInput schema / properties / page_size / minimum
        Added value: +1
      • changedInput schema / properties / page_size / type
        Previous value: -"number"New value: +"integer"
      • changedOutput schema / properties / notice / description
        Previous value: -"Zero-hit guidance — names the likely cause and the concrete next call."New value: +"The served page size when it differs from page_size, then zero-hit guidance — the likely cause and the concrete next call."
      • addedOutput schema / properties / results / items / properties / abbreviation
        Added value: +{
        +  "description": "The bill’s short form (Abkuerzung), where the record carries one. For a bill that enacts a new law, ris_search_legislation title matches it once the law is in force; an amending bill (\"…-Novelle\", \"AbgÄG 2026\") folds into the law it amends and has no consolidated entry of its own.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / results / items / properties / keywords
        Added value: +{
        +  "description": "Keywords (Schlagworte), where present — one string as RIS writes it, separators included.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / results / items / properties / review_start
        Added value: +{
        +  "description": "Start of the public review window (Beginn der Begutachtungsfrist) — review_drafts only.",
        +  "type": "string"
        +}
    • Changedris_search_gazette7 fields changed
      • changedInput schema / properties / page_size / description
        Previous value: -"Documents per page: 10 or 20 (default 20). For more results, keep the size and raise page."New value: +"Documents per page, 1–100 (default 20). Served as a page of 10 (1–10) or 20 (11–100), with a notice when that differs. For more results, keep the size and raise page."
      • removedInput schema / properties / page_size / enum
        Removed value: -[
        -  10,
        -  20
        -]
      • addedInput schema / properties / page_size / maximum
        Added value: +100
      • addedInput schema / properties / page_size / minimum
        Added value: +1
      • changedInput schema / properties / page_size / type
        Previous value: -"number"New value: +"integer"
      • changedOutput schema / properties / notice / description
        Previous value: -"Zero-hit guidance — names the likely cause and the concrete next call."New value: +"The served page size when it differs from page_size, then zero-hit guidance — the likely cause and the concrete next call."
      • changedOutput schema / properties / results / items / properties / celex_references / description
        Previous value: -"CELEX numbers of the EU acts this entry transposes — RIS CelexNummer metadata (BgblAuth, BgblPdf, LgblAuth; LgblNO CelexNummern) plus [CELEX-Nr.: …] title markers. LgblNO keeps the older form without the sector digit (383L0189) and corrigendum suffixes (394L0010R(01)). Empty when none."New value: +"CELEX numbers of the EU acts this entry transposes — RIS CelexNummer metadata (BgblAuth, BgblPdf, LgblAuth; LgblNO CelexNummern) plus [CELEX-Nr.: …] title markers. LgblNO keeps the older form with a two-digit year (383L0189) and corrigendum suffixes (394L0010R(01)). Empty when none."
    • Changedris_search_legislation7 fields changed
      • changedInput schema / properties / page_size / description
        Previous value: -"Documents per page: 10 or 20 (default 20). For more results, keep the size and raise page."New value: +"Documents per page, 1–100 (default 20). Served as a page of 10 (1–10) or 20 (11–100), with a notice when that differs. For more results, keep the size and raise page."
      • removedInput schema / properties / page_size / enum
        Removed value: -[
        -  10,
        -  20
        -]
      • addedInput schema / properties / page_size / maximum
        Added value: +100
      • addedInput schema / properties / page_size / minimum
        Added value: +1
      • changedInput schema / properties / page_size / type
        Previous value: -"number"New value: +"integer"
      • changedOutput schema / properties / notice / description
        Previous value: -"Zero-hit guidance — names the likely cause and the concrete next call."New value: +"The served page size when it differs from page_size, then zero-hit guidance — the likely cause and the concrete next call."
      • changedOutput schema / properties / results / items / properties / in_force_until / description
        Previous value: -"Date this version left force (Ausserkrafttretensdatum). Absent while in force."New value: +"Last day this version is in force (Ausserkrafttretensdatum). Absent when RIS records no end date, which does not mean the version is in force now: it can start in the future. RIS writes 9000-01-01 for a date still awaiting an event. The version is in force on date D when in_force_from ≤ D and in_force_until is absent or ≥ D."
    • Changedris_track_changes8 fields changed
      • changedInput schema / properties / page_size / description
        Previous value: -"Documents per page: 10 or 20 (default 20). For more results, keep the size and raise page."New value: +"Documents per page, 1–100 (default 20). Served as a page of 10 (1–10) or 20 (11–100), with a notice when that differs. For more results, keep the size and raise page."
      • removedInput schema / properties / page_size / enum
        Removed value: -[
        -  10,
        -  20
        -]
      • addedInput schema / properties / page_size / maximum
        Added value: +100
      • addedInput schema / properties / page_size / minimum
        Added value: +1
      • changedInput schema / properties / page_size / type
        Previous value: -"number"New value: +"integer"
      • changedOutput schema / properties / notice / description
        Previous value: -"Zero-hit guidance — names the likely cause and the concrete next call."New value: +"The served page size when it differs from page_size, then zero-hit guidance — the likely cause and the concrete next call."
      • addedOutput schema / properties / results / items / properties / in_force_from
        Added value: +{
        +  "description": "First day this version is in force (Inkrafttretensdatum), relayed as RIS writes it — consolidated-law rows only. RIS writes 9000-01-01 for a start still awaiting an event. The version is in force on date D when in_force_from ≤ D and in_force_until is absent or ≥ D.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / results / items / properties / in_force_until
        Added value: +{
        +  "description": "Last day this version is in force (Ausserkrafttretensdatum), relayed as RIS writes it — consolidated-law rows only. Absent when RIS records no end date, which does not mean the version is in force now: it can start in the future. RIS writes 9000-01-01 for an end still awaiting an event, the day the version after it starts. The version is in force on date D when in_force_from ≤ D and in_force_until is absent or ≥ D.",
        +  "type": "string"
        +}
  3. 6 tool updates
    • Changedris_lookup_citation2 fields changed
      • changedInput schema / properties / citation / description
        Previous 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\"."New value: +"The legal citation to resolve, e.g. \"§ 6 DSG\" or \"DSG §1\", \"Art 10 B-VG\", \"BGBl. I Nr. 165/1999\" or \"BGBl I 2018/24\", \"Ro 2026/03/0016\" or \"VfGH G 13/2025\", \"ECLI:AT:VFGH:2026:G13.2025\", or \"VfSlg 19.632/2012\"."
      • changedInput schema / properties / court / description
        Previous 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)."New value: +"Court hint for a case number — short-circuits court detection, and a leading court name, to this court. An ECLI’s own court segment takes precedence; the hint is searched only for a segment this lookup does not map. Codes: ris_list_reference topic courts, minus normenliste (a norm index, which carries no case numbers)."
    • Changedris_search_announcements16 fields changed
      • changedInput schema / properties / type / description
        Previous 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."New value: +"Document type (Typ) — trade_exam_rules (Befaehigungspruefungsordnung | Meisterpruefungsordnung | HoehereBerufsqualifikation | Fachdiplom | HoeheresFachdiplom), court_rules (Geschaeftsordnung | Geschaeftsverteilung), veterinary (Kundmachungen | VeroeffentlichungenAufGrundVEVO | SonstigeVeroeffentlichungen). Only these values, in any letter case. Omit to leave unfiltered; a blank value is rejected."
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous 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."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 type outside the collection’s values, 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."
      • addedOutput schema / properties / results / items / properties / approved
        Added value: +{
        +  "description": "Approval date (Genehmigungsdatum) — ministerial_decrees only, which carry no publication date.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / results / items / properties / case_numbers
        Added value: +{
        +  "description": "Business reference numbers (Geschäftszahl / GZ) — present on ministerial_decrees, veterinary, court_rules, and trade_exam_rules (empty when the entry carries none), absent on other collections. The case_number filter takes one on veterinary and ministerial_decrees.",
        +  "items": {
        +    "description": "One business reference number, trimmed.",
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / results / items / properties / court_name
        Added value: +{
        +  "description": "Court whose rules these are (Gericht, e.g. \"LVwG Tirol\") — court_rules only.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / results / items / properties / department
        Added value: +{
        +  "description": "Ministry department (Abteilung) — ministerial_decrees only; the department filter takes this value.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / results / items / properties / in_force_from
        Added value: +{
        +  "description": "Entry-into-force date (Inkrafttretensdatum), where recorded.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / results / items / properties / in_force_until
        Added value: +{
        +  "description": "Repeal date (Ausserkrafttretensdatum), where recorded.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / results / items / properties / keywords
        Added value: +{
        +  "description": "Subject keywords (Schlagworte), comma-separated as RIS writes them.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / results / items / properties / legislature
        Added value: +{
        +  "description": "Legislative period (Gesetzgebungsperiode, e.g. \"XXVIII\") — council_minutes only; the legislature filter takes this value.",
        +  "type": "string"
        +}
      • changedOutput schema / properties / results / items / properties / norms_cited / description
        Previous value: -"Norms the document cites (veterinary notices and decrees) — copy an entry verbatim into a norm filter to find siblings. Empty when none."New value: +"Norms the document cites (veterinary notices and decrees), one entry per RIS item and never split — a decree entry often names several norms (\"TP1 GGG, TP2 GGG\"). Copy an entry verbatim into the norm filter to find the document and its siblings. Empty when none."
      • addedOutput schema / properties / results / items / properties / note
        Added value: +{
        +  "description": "Annotation (Anmerkung) — e.g. the earlier notice this one replaces.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / results / items / properties / plan_state
        Added value: +{
        +  "description": "Plan region as RIS writes it (Land — Oesterreich for the federal ÖSG, else the Bundesland, e.g. Salzburg) — health_structure_plans only.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / results / items / properties / promulgation
        Added value: +{
        +  "description": "Gazette citation of a decree (Fundstelle, e.g. \"eJABl Nr. 13/2026\") — ministerial_decrees only.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / results / items / properties / session_number
        Added value: +{
        +  "description": "Council session number (Sitzungsnummer, e.g. \"65\", \"58b\") — council_minutes only; the session_number filter takes this value.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / results / items / properties / type
        Added value: +{
        +  "description": "Document type (Typ — e.g. Erlass, Rundschreiben, Kundmachung, Geschaeftsverteilung, Meisterpruefungsordnung, RsgVerordnung).",
        +  "type": "string"
        +}
    • Changedris_search_case_law3 fields changed
      • changedInput schema / properties / issuing_body / description
        Previous 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."New value: +"Deciding body (EntscheidendeBehoerde) — dsk, dok, pvak, and verg only. dsk: Datenschutzbehoerde (2014+), Datenschutzkommission (up to 2013), or ParlamentarischesDatenschutzkomitee (2025+); pvak: Personalvertretungsaufsichtsbehoerde (2014+) or PersonalvertretungsAufsichtskommission (up to 2013) — dsk and pvak take only these values, in any letter case. dok and verg take the body name as free text: ris_list_reference topic issuing_bodies. Omit to leave unfiltered; a blank value is rejected."
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"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."New value: +"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, issuing_body checked locally against the dsk/pvak value lists, 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."
      • changedOutput schema / properties / results / items / properties / case_numbers / description
        Previous value: -"Case numbers (Geschäftszahl) — a decision can carry several."New value: +"Case numbers (Geschäftszahl), one per element in upstream order — a headnote lists every decision it covers, the leading decision first. Pass a value back as case_number to find that decision."
    • Changedris_search_gazette7 fields changed
      • changedInput schema / properties / number / description
        Previous 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."New value: +"Gazette number, e.g. \"171/2026\" (federal; the cited form \"BGBl. II Nr. 171/2026\" works from 2004 only — earlier tiers match the bare \"194/1961\"), \"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."
      • addedOutput schema / properties / results / items / properties / celex_references
        Added value: +{
        +  "description": "CELEX numbers of the EU acts this entry transposes — RIS CelexNummer metadata (BgblAuth, BgblPdf, LgblAuth; LgblNO CelexNummern) plus [CELEX-Nr.: …] title markers. LgblNO keeps the older form without the sector digit (383L0189) and corrigendum suffixes (394L0010R(01)). Empty when none.",
        +  "items": {
        +    "description": "One CELEX number of a transposed EU act, as RIS writes it.",
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / results / items / properties / issue
        Added value: +{
        +  "description": "Gazette issue (Stück) the entry appeared in — LgblNO StueckNummer, BgblAlt Stueck.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / results / items / properties / promulgation
        Added value: +{
        +  "description": "The gazette that carried the entry — on the 1945–2003 federal tier its citation (Fundstelle, e.g. \"StGBl. Nr. 1/1945\", \"BGBl. I Nr. 50/1999\"), on the 1848–1940 tier the gazette title (Kundmachungsorgan, e.g. \"Staatsgesetzblatt für die Republik Österreich\"). Gazettes filed in one tier can share a gazette_number — the 1945 StGBl. and BGBl., and the 1848–1940 gazettes in their changeover years — and this tells them apart.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / results / items / properties / start_page
        Added value: +{
        +  "description": "First page of the entry in the gazette volume (Anfangsseite) — BgblAlt only.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / results / items / properties / systematic_number
        Added value: +{
        +  "description": "Niederösterreich systematic classification number (Gliederungszahl, e.g. 0001/1-62) — LgblNO only, which carries no gazette number; cite an LgblNO entry by this plus issue.",
        +  "type": "string"
        +}
      • changedOutput schema / properties / results / items / required
        Previous value: -[
        -  "document_number",
        -  "binding",
        -  "content_urls"
        -]New value: +[
        +  "document_number",
        +  "celex_references",
        +  "binding",
        +  "content_urls"
        +]
    • Changedris_search_legislation1 field changed
      • addedOutput schema / properties / results / items / properties / keywords
        Added value: +{
        +  "description": "Keywords (Schlagworte), where present (consolidated federal and state law).",
        +  "type": "string"
        +}
    • Changedris_track_changes4 fields changed
      • addedOutput schema / properties / results / items / properties / case_numbers
        Added value: +{
        +  "description": "Case numbers (Geschäftszahl), one per element in upstream order — a headnote row lists every decision it covers, the leading decision first. Court-decision rows only, which carry no title.",
        +  "items": {
        +    "description": "One case number (Geschäftszahl).",
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / results / items / properties / decision_date
        Added value: +{
        +  "description": "Decision date (Entscheidungsdatum) — court-decision rows only.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / results / items / properties / law_id
        Added value: +{
        +  "description": "RIS law number (Gesetzesnummer) the section belongs to — consolidated-law rows only. Group a feed by law with it, or pass it to ris_search_legislation law_id for the law’s versions.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / results / items / properties / section_label
        Added value: +{
        +  "description": "Section, article, or annex the changed document holds (ArtikelParagraphAnlage, e.g. \"§ 16\", \"Anl. 1\"; \"§ 0\" is the law’s heading document) — consolidated-law rows (BrKons, LrKons) only.",
        +  "type": "string"
        +}
  4. 7 tool updates
    • Changedris_get_document10 fields changed
      • changedInput schema / properties / document_url / description
        Previous 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."
      • changedInput schema / properties / format / description
        Previous 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."
      • changedInput schema / properties / sections / description
        Previous 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."
      • changedOutput schema / properties / byte_size / description
        Previous 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."
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous 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."
      • changedOutput schema / properties / kind / description
        Previous 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."
      • changedOutput schema / properties / kind / enum
        Previous value: -[
        -  "full",
        -  "outline"
        -]New value: +[
        +  "full",
        +  "outline",
        +  "link"
        +]
      • changedOutput schema / properties / notice / description
        Previous 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)."
      • changedOutput schema / properties / text / description
        Previous 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)."
      • changedOutput schema / properties / truncated / description
        Previous 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."
    • Changedris_search_announcements27 fields changed
      • changedInput schema / properties / case_number / description
        Previous 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."
      • addedInput schema / properties / case_number / pattern
        Added value: +"\\S"
      • changedInput schema / properties / changed_since / description
        Previous 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."
      • changedInput schema / properties / department / description
        Previous value: -"Ministry department (Abteilung) — ministerial_decrees only."New value: +"Ministry department (Abteilung) — ministerial_decrees only. Omit to leave unfiltered; a blank value is rejected."
      • addedInput schema / properties / department / pattern
        Added value: +"\\S"
      • changedInput schema / properties / issuer / description
        Previous 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."
      • addedInput schema / properties / issuer / pattern
        Added value: +"\\S"
      • changedInput schema / properties / legislature / description
        Previous 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."
      • addedInput schema / properties / legislature / pattern
        Added value: +"\\S"
      • changedInput schema / properties / norm / description
        Previous 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."
      • addedInput schema / properties / norm / pattern
        Added value: +"\\S"
      • changedInput schema / properties / number / description
        Previous 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."
      • addedInput schema / properties / number / pattern
        Added value: +"\\S"
      • removedInput schema / properties / page_size / anyOf
        Removed value: -[
        -  {
        -    "const": 10,
        -    "type": "number"
        -  },
        -  {
        -    "const": 20,
        -    "type": "number"
        -  },
        -  {
        -    "const": 50,
        -    "type": "number"
        -  },
        -  {
        -    "const": 100,
        -    "type": "number"
        -  }
        -]
      • changedInput schema / properties / page_size / description
        Previous 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."
      • addedInput schema / properties / page_size / enum
        Added value: +[
        +  10,
        +  20
        +]
      • addedInput schema / properties / page_size / type
        Added value: +"number"
      • changedInput schema / properties / query / description
        Previous 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."
      • addedInput schema / properties / query / pattern
        Added value: +"\\S"
      • changedInput schema / properties / session_number / description
        Previous 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."
      • addedInput schema / properties / session_number / pattern
        Added value: +"\\S"
      • changedInput schema / properties / title / description
        Previous 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."
      • addedInput schema / properties / title / pattern
        Added value: +"\\S"
      • changedInput schema / properties / type / description
        Previous 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."
      • addedInput schema / properties / type / pattern
        Added value: +"\\S"
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous 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."
      • changedOutput schema / properties / error / properties / data / properties / reason / examples
        Previous value: -[
        -  "collection_filter_mismatch",
        -  "invalid_query",
        -  "upstream_error",
        -  "upstream_timeout"
        -]New value: +[
        +  "collection_filter_mismatch",
        +  "unresolved_ministry",
        +  "invalid_query",
        +  "upstream_error",
        +  "upstream_timeout"
        +]
    • Changedris_search_case_law24 fields changed
      • changedInput schema / properties / case_number / description
        Previous 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."
      • addedInput schema / properties / case_number / pattern
        Added value: +"\\S"
      • changedInput schema / properties / collection_number / description
        Previous 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."
      • addedInput schema / properties / collection_number / pattern
        Added value: +"\\S"
      • changedInput schema / properties / court_name / description
        Previous 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."
      • addedInput schema / properties / court_name / pattern
        Added value: +"\\S"
      • changedInput schema / properties / decision_kind / description
        Previous 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."
      • addedInput schema / properties / decision_kind / pattern
        Added value: +"\\S"
      • changedInput schema / properties / issuing_body / description
        Previous 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."
      • addedInput schema / properties / issuing_body / pattern
        Added value: +"\\S"
      • changedInput schema / properties / norm / description
        Previous 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."
      • addedInput schema / properties / norm / pattern
        Added value: +"\\S"
      • removedInput schema / properties / page_size / anyOf
        Removed value: -[
        -  {
        -    "const": 10,
        -    "type": "number"
        -  },
        -  {
        -    "const": 20,
        -    "type": "number"
        -  },
        -  {
        -    "const": 50,
        -    "type": "number"
        -  },
        -  {
        -    "const": 100,
        -    "type": "number"
        -  }
        -]
      • changedInput schema / properties / page_size / description
        Previous 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."
      • addedInput schema / properties / page_size / enum
        Added value: +[
        +  10,
        +  20
        +]
      • addedInput schema / properties / page_size / type
        Added value: +"number"
      • changedInput schema / properties / party / description
        Previous 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."
      • addedInput schema / properties / party / pattern
        Added value: +"\\S"
      • changedInput schema / properties / query / description
        Previous 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."
      • addedInput schema / properties / query / pattern
        Added value: +"\\S"
      • changedInput schema / properties / subject_area / description
        Previous 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."
      • addedInput schema / properties / subject_area / pattern
        Added value: +"\\S"
      • changedInput schema / properties / subject_law / description
        Previous 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."
      • addedInput schema / properties / subject_law / pattern
        Added value: +"\\S"
    • Changedris_search_drafts12 fields changed
      • changedInput schema / properties / ministry / description
        Previous 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."
      • addedInput schema / properties / ministry / pattern
        Added value: +"\\S"
      • removedInput schema / properties / page_size / anyOf
        Removed value: -[
        -  {
        -    "const": 10,
        -    "type": "number"
        -  },
        -  {
        -    "const": 20,
        -    "type": "number"
        -  },
        -  {
        -    "const": 50,
        -    "type": "number"
        -  },
        -  {
        -    "const": 100,
        -    "type": "number"
        -  }
        -]
      • changedInput schema / properties / page_size / description
        Previous 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."
      • addedInput schema / properties / page_size / enum
        Added value: +[
        +  10,
        +  20
        +]
      • addedInput schema / properties / page_size / type
        Added value: +"number"
      • changedInput schema / properties / query / description
        Previous 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."
      • addedInput schema / properties / query / pattern
        Added value: +"\\S"
      • changedInput schema / properties / title / description
        Previous 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."
      • addedInput schema / properties / title / pattern
        Added value: +"\\S"
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous 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."
      • changedOutput schema / properties / error / properties / data / properties / reason / examples
        Previous value: -[
        -  "stage_filter_mismatch",
        -  "invalid_query",
        -  "upstream_error",
        -  "upstream_timeout"
        -]New value: +[
        +  "stage_filter_mismatch",
        +  "unresolved_ministry",
        +  "invalid_query",
        +  "upstream_error",
        +  "upstream_timeout"
        +]
    • Changedris_search_gazette18 fields changed
      • changedInput schema / properties / district_authority / description
        Previous 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."
      • addedInput schema / properties / district_authority / pattern
        Added value: +"\\S"
      • changedInput schema / properties / issuer / description
        Previous 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."
      • addedInput schema / properties / issuer / pattern
        Added value: +"\\S"
      • changedInput schema / properties / municipality / description
        Previous 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."
      • addedInput schema / properties / municipality / pattern
        Added value: +"\\S"
      • changedInput schema / properties / number / description
        Previous 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."
      • addedInput schema / properties / number / pattern
        Added value: +"\\S"
      • removedInput schema / properties / page_size / anyOf
        Removed value: -[
        -  {
        -    "const": 10,
        -    "type": "number"
        -  },
        -  {
        -    "const": 20,
        -    "type": "number"
        -  },
        -  {
        -    "const": 50,
        -    "type": "number"
        -  },
        -  {
        -    "const": 100,
        -    "type": "number"
        -  }
        -]
      • changedInput schema / properties / page_size / description
        Previous 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."
      • addedInput schema / properties / page_size / enum
        Added value: +[
        +  10,
        +  20
        +]
      • addedInput schema / properties / page_size / type
        Added value: +"number"
      • changedInput schema / properties / query / description
        Previous 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."
      • addedInput schema / properties / query / pattern
        Added value: +"\\S"
      • changedInput schema / properties / title / description
        Previous 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."
      • addedInput schema / properties / title / pattern
        Added value: +"\\S"
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous 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."
      • changedOutput schema / properties / error / properties / data / properties / reason / examples
        Previous 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"
        +]
    • Changedris_search_legislation18 fields changed
      • changedInput schema / properties / index / description
        Previous 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."
      • addedInput schema / properties / index / pattern
        Added value: +"\\S"
      • changedInput schema / properties / law_id / description
        Previous 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."
      • addedInput schema / properties / law_id / pattern
        Added value: +"\\S"
      • changedInput schema / properties / municipality / description
        Previous 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."
      • addedInput schema / properties / municipality / pattern
        Added value: +"\\S"
      • removedInput schema / properties / page_size / anyOf
        Removed value: -[
        -  {
        -    "const": 10,
        -    "type": "number"
        -  },
        -  {
        -    "const": 20,
        -    "type": "number"
        -  },
        -  {
        -    "const": 50,
        -    "type": "number"
        -  },
        -  {
        -    "const": 100,
        -    "type": "number"
        -  }
        -]
      • changedInput schema / properties / page_size / description
        Previous 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."
      • addedInput schema / properties / page_size / enum
        Added value: +[
        +  10,
        +  20
        +]
      • addedInput schema / properties / page_size / type
        Added value: +"number"
      • changedInput schema / properties / query / description
        Previous 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."
      • addedInput schema / properties / query / pattern
        Added value: +"\\S"
      • changedInput schema / properties / section_from / description
        Previous 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."
      • addedInput schema / properties / section_from / pattern
        Added value: +"\\S"
      • changedInput schema / properties / section_to / description
        Previous 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."
      • addedInput schema / properties / section_to / pattern
        Added value: +"\\S"
      • changedInput schema / properties / title / description
        Previous 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."
      • addedInput schema / properties / title / pattern
        Added value: +"\\S"
    • Changedris_track_changes4 fields changed
      • removedInput schema / properties / page_size / anyOf
        Removed value: -[
        -  {
        -    "const": 10,
        -    "type": "number"
        -  },
        -  {
        -    "const": 20,
        -    "type": "number"
        -  },
        -  {
        -    "const": 50,
        -    "type": "number"
        -  },
        -  {
        -    "const": 100,
        -    "type": "number"
        -  }
        -]
      • changedInput schema / properties / page_size / description
        Previous 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."
      • addedInput schema / properties / page_size / enum
        Added value: +[
        +  10,
        +  20
        +]
      • addedInput schema / properties / page_size / type
        Added value: +"number"
  5. 9 tool updates
    • Changedris_get_document6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / anyOf
        Added value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "format",
        +      "kind",
        +      "binding_status",
        +      "content_urls",
        +      "document_number",
        +      "application"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / error
        Added 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"
        +}
      • removedOutput schema / required
        Removed value: -[
        -  "format",
        -  "kind",
        -  "binding_status",
        -  "content_urls",
        -  "document_number",
        -  "application"
        -]
    • Changedris_list_reference6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / anyOf
        Added value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "topic",
        +      "summary",
        +      "entries",
        +      "notes"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / error
        Added 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"
        +}
      • removedOutput schema / required
        Removed value: -[
        -  "topic",
        -  "summary",
        -  "entries",
        -  "notes"
        -]
    • Changedris_lookup_citation6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / anyOf
        Added value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "found",
        +      "kind"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / error
        Added 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"
        +}
      • removedOutput schema / required
        Removed value: -[
        -  "found",
        -  "kind"
        -]
    • Changedris_search_announcements6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / anyOf
        Added value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "results",
        +      "totalCount",
        +      "page",
        +      "pageSize"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / error
        Added 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"
        +}
      • removedOutput schema / required
        Removed value: -[
        -  "results",
        -  "totalCount",
        -  "page",
        -  "pageSize"
        -]
    • Changedris_search_case_law6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / anyOf
        Added value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "results",
        +      "totalCount",
        +      "page",
        +      "pageSize"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / error
        Added 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"
        +}
      • removedOutput schema / required
        Removed value: -[
        -  "results",
        -  "totalCount",
        -  "page",
        -  "pageSize"
        -]
    • Changedris_search_drafts6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / anyOf
        Added value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "results",
        +      "totalCount",
        +      "page",
        +      "pageSize"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / error
        Added 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"
        +}
      • removedOutput schema / required
        Removed value: -[
        -  "results",
        -  "totalCount",
        -  "page",
        -  "pageSize"
        -]
    • Changedris_search_gazette6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / anyOf
        Added value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "results",
        +      "totalCount",
        +      "page",
        +      "pageSize",
        +      "servedApplication"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / error
        Added 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"
        +}
      • removedOutput schema / required
        Removed value: -[
        -  "results",
        -  "totalCount",
        -  "page",
        -  "pageSize",
        -  "servedApplication"
        -]
    • Changedris_search_legislation6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / anyOf
        Added value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "results",
        +      "totalCount",
        +      "page",
        +      "pageSize"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / error
        Added 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"
        +}
      • removedOutput schema / required
        Removed value: -[
        -  "results",
        -  "totalCount",
        -  "page",
        -  "pageSize"
        -]
    • Changedris_track_changes7 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / application / description
        Previous 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."
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / anyOf
        Added value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "results",
        +      "totalCount",
        +      "page",
        +      "pageSize",
        +      "application"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / error
        Added 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"
        +}
      • removedOutput schema / required
        Removed value: -[
        -  "results",
        -  "totalCount",
        -  "page",
        -  "pageSize",
        -  "application"
        -]
  6. 2 tool updates
    • Changedris_get_document7 fields changed
      • changedInput schema / properties / document_url / description
        Previous 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."
      • changedInput schema / properties / sections / description
        Previous 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."
      • changedOutput schema / properties / content_urls / description
        Previous 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."
      • changedOutput schema / properties / kind / description
        Previous 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."
      • changedOutput schema / properties / sections / description
        Previous 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."
      • changedOutput schema / properties / sections / items / description
        Previous 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."
      • changedOutput schema / properties / truncated / description
        Previous 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."
    • Changedris_search_drafts4 fields changed
      • changedOutput schema / properties / results / items / properties / materials / description
        Previous 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."
      • addedOutput schema / properties / results / items / properties / materials / items / properties / url
        Added 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"
        +}
      • removedOutput schema / properties / results / items / properties / materials / items / properties / urls
        Removed 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"
        -}
      • changedOutput schema / properties / results / items / properties / materials / items / required
        Previous value: -[
        -  "type",
        -  "urls"
        -]New value: +[
        +  "type",
        +  "url"
        +]
  7. 3 tool updates
    • Changedris_get_document3 fields changed
      • changedInput schema / properties / document_url / description
        Previous 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."
      • changedInput schema / properties / sections / description
        Previous 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."
      • changedOutput schema / properties / content_urls / description
        Previous 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."
    • Changedris_search_announcements1 field changed
      • addedOutput schema / properties / results / items / properties / document_url
        Added 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"
        +}
    • Changedris_search_drafts4 fields changed
      • changedOutput schema / properties / results / items / properties / content_urls / description
        Previous value: -"Rendition URLs of the main document (attachments are excluded)."New value: +"Rendition URLs of the main document (companion documents ride in materials)."
      • addedOutput schema / properties / results / items / properties / document_url
        Added value: +{
        +  "description": "RIS web view of the draft document (DokumentUrl) — for humans.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / results / items / properties / materials
        Added 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"
        +}
      • changedOutput schema / properties / results / items / required
        Previous value: -[
        -  "document_number",
        -  "stage",
        -  "content_urls"
        -]New value: +[
        +  "document_number",
        +  "stage",
        +  "materials",
        +  "content_urls"
        +]
  8. 1 tool update
    • Changedris_search_case_law1 field changed
      • changedInput schema / properties / sort_by / description
        Previous value: -"Sort column. Default: upstream order."New value: +"Sort column. Default: upstream order. Not available for court: normenliste, which indexes laws rather than decisions."
  9. 2 tool updates
    • Changedris_lookup_citation1 field changed
      • changedInput schema / properties / state / description
        Previous 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)."
    • Changedris_search_case_law1 field changed
      • changedInput schema / properties / collection_number / description
        Previous 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."
  10. 1 tool update
    • Changedris_search_gazette3 fields changed
      • changedInput schema / properties / published_from / description
        Previous 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."
      • changedInput schema / properties / published_to / description
        Previous 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."
      • changedOutput schema / properties / servedApplication / description
        Previous 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."
  11. 7 tool updates
    • Changedris_lookup_citation4 fields changed
      • changedInput schema / properties / citation / description
        Previous 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\"."
      • changedInput schema / properties / court / description
        Previous 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)."
      • changedInput schema / properties / court / enum
        Previous 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"
        +]
      • changedInput schema / properties / in_force_as_of / pattern
        Previous value: -"^\\d{4}-\\d{2}-\\d{2}$"New value: +"^\\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\\d|3[01])$"
    • Changedris_search_announcements5 fields changed
      • changedInput schema / properties / entered_force_from / pattern
        Previous value: -"^\\d{4}-\\d{2}-\\d{2}$"New value: +"^\\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\\d|3[01])$"
      • changedInput schema / properties / entered_force_to / pattern
        Previous value: -"^\\d{4}-\\d{2}-\\d{2}$"New value: +"^\\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\\d|3[01])$"
      • changedInput schema / properties / in_force_as_of / pattern
        Previous value: -"^\\d{4}-\\d{2}-\\d{2}$"New value: +"^\\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\\d|3[01])$"
      • changedInput schema / properties / published_from / pattern
        Previous value: -"^\\d{4}-\\d{2}-\\d{2}$"New value: +"^\\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\\d|3[01])$"
      • changedInput schema / properties / published_to / pattern
        Previous value: -"^\\d{4}-\\d{2}-\\d{2}$"New value: +"^\\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\\d|3[01])$"
    • Changedris_search_case_law2 fields changed
      • changedInput schema / properties / decided_from / pattern
        Previous value: -"^\\d{4}-\\d{2}-\\d{2}$"New value: +"^\\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\\d|3[01])$"
      • changedInput schema / properties / decided_to / pattern
        Previous value: -"^\\d{4}-\\d{2}-\\d{2}$"New value: +"^\\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\\d|3[01])$"
    • Changedris_search_drafts3 fields changed
      • changedInput schema / properties / decided_from / pattern
        Previous value: -"^\\d{4}-\\d{2}-\\d{2}$"New value: +"^\\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\\d|3[01])$"
      • changedInput schema / properties / decided_to / pattern
        Previous value: -"^\\d{4}-\\d{2}-\\d{2}$"New value: +"^\\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\\d|3[01])$"
      • changedInput schema / properties / in_review_on / pattern
        Previous value: -"^\\d{4}-\\d{2}-\\d{2}$"New value: +"^\\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\\d|3[01])$"
    • Changedris_search_gazette2 fields changed
      • changedInput schema / properties / published_from / pattern
        Previous value: -"^\\d{4}-\\d{2}-\\d{2}$"New value: +"^\\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\\d|3[01])$"
      • changedInput schema / properties / published_to / pattern
        Previous value: -"^\\d{4}-\\d{2}-\\d{2}$"New value: +"^\\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\\d|3[01])$"
    • Changedris_search_legislation5 fields changed
      • changedInput schema / properties / entered_force_from / pattern
        Previous value: -"^\\d{4}-\\d{2}-\\d{2}$"New value: +"^\\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\\d|3[01])$"
      • changedInput schema / properties / entered_force_to / pattern
        Previous value: -"^\\d{4}-\\d{2}-\\d{2}$"New value: +"^\\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\\d|3[01])$"
      • changedInput schema / properties / in_force_as_of / pattern
        Previous value: -"^\\d{4}-\\d{2}-\\d{2}$"New value: +"^\\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\\d|3[01])$"
      • changedInput schema / properties / left_force_from / pattern
        Previous value: -"^\\d{4}-\\d{2}-\\d{2}$"New value: +"^\\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\\d|3[01])$"
      • changedInput schema / properties / left_force_to / pattern
        Previous value: -"^\\d{4}-\\d{2}-\\d{2}$"New value: +"^\\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\\d|3[01])$"
    • Changedris_track_changes2 fields changed
      • changedInput schema / properties / changed_from / pattern
        Previous value: -"^\\d{4}-\\d{2}-\\d{2}$"New value: +"^\\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\\d|3[01])$"
      • changedInput schema / properties / changed_to / pattern
        Previous value: -"^\\d{4}-\\d{2}-\\d{2}$"New value: +"^\\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\\d|3[01])$"
  12. 2 tool updates
    • Changedris_search_case_law7 fields changed
      • changedOutput schema / properties / results / description
        Previous 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."
      • changedOutput schema / properties / results / items / description
        Previous 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)."
      • addedOutput schema / properties / results / items / properties / indexes
        Added 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"
        +}
      • addedOutput schema / properties / results / items / properties / norm_index
        Added 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"
        +}
      • addedOutput schema / properties / results / items / properties / note
        Added value: +{
        +  "description": "Annotation (Anmerkung) — a renaming or lifecycle note on a normenliste law, an editorial note on a justiz or dsk decision.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / results / items / properties / state
        Added value: +{
        +  "description": "Bundesland whose administrative court decided (lvwg and uvs records) — the German name, e.g. \"Tirol\".",
        +  "type": "string"
        +}
      • changedOutput schema / properties / results / items / required
        Previous value: -[
        -  "document_number",
        -  "court",
        -  "case_numbers",
        -  "norms_cited",
        -  "content_urls"
        -]New value: +[
        +  "document_number",
        +  "court",
        +  "case_numbers",
        +  "norms_cited",
        +  "indexes",
        +  "content_urls"
        +]
    • Changedris_search_legislation1 field changed
      • addedOutput schema / properties / results / items / properties / translation
        Added 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"
        +}
  13. 1 tool update
    • Changedris_get_document5 fields changed
      • changedInput schema / properties / sections / description
        Previous 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."
      • changedOutput schema / properties / kind / description
        Previous 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."
      • changedOutput schema / properties / notice / description
        Previous 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)."
      • changedOutput schema / properties / sections / description
        Previous 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."
      • changedOutput schema / properties / truncated / description
        Previous 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."
  14. 1 tool update
    • Changedris_search_gazette2 fields changed
      • removedInput schema / properties / include_non_authentic
        Removed 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"
        -}
      • addedInput schema / properties / state_era
        Added 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"
        +}

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables searching and reading Austria's consolidated federal law by provision as of any date, and searching and reading decisions of the constitutional, administrative and ordinary courts by case number or ECLI. Text is returned in the original German, paged in full, with in-force dates kept separate from publication dates.
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.