Skip to main content
Glama

Server Details

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

Status
Healthy
Last Tested
Transport
Streamable HTTP
URL
Repository
cyanheads/ris-austria-mcp-server
GitHub Stars
1
Server Listing
ris-austria-mcp-server

Glama MCP Gateway

Connect through Glama MCP Gateway for full control over tool access and complete visibility into every call.

MCP client
Glama
MCP server

Full call logging

Every tool call is logged with complete inputs and outputs, so you can debug issues and audit what your agents are doing.

Tool access control

Enable or disable individual tools per connector, so you decide what your agents can and cannot do.

Managed credentials

Glama handles OAuth flows, token storage, and automatic rotation, so credentials never expire on your clients.

Usage analytics

See which tools your agents call, how often, and when, so you can understand usage patterns and catch anomalies.

100% free. Your data is private.
Tool DescriptionsA

Average 4.7/5 across 9 of 9 tools scored. Lowest: 4/5.

Server CoherenceA
Disambiguation5/5

Each tool targets a clearly distinct resource and action: search domains (legislation, gazette, case law, drafts, announcements), deterministic citation lookup, document fetching, reference data, and change tracking. There is no meaningful overlap, and descriptions reinforce the boundaries.

Naming Consistency5/5

All tool names follow the consistent pattern ris_<verb>_<noun> with lowercase and underscores. Verbs (get, list, lookup, search, track) and nouns (document, reference, citation, announcements, case_law, drafts, gazette, legislation, changes) are predictable and uniform.

Tool Count5/5

Nine tools is well within the optimal range for a domain this size. Each tool represents a fundamental operation on the RIS legal information system, and none feel redundant or excessive.

Completeness5/5

The surface covers the full lifecycle of legal information retrieval: searching each major publication type, resolving citations deterministically, fetching documents in multiple formats, accessing static reference data, and tracking changes in an exact, deletion-aware manner. No obvious gaps remain for the stated domain.

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 and return whole at any size. Markdown drops the screen-reader expansions RIS ships alongside each abbreviated citation, keeping the visible citation form; raw html/xml renditions are returned exactly as published.

ParametersJSON Schema
NameRequiredDescriptionDefault
formatNomarkdown (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).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, xml, and urls_only are never sliced and return in full.
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 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.
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

ParametersJSON Schema
NameRequiredDescription
kindYesfull — 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.
textNoThe document text in the requested format. Absent for urls_only and when the application carries no text rendition (see the notice).
formatYesThe 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), or when a sections:[…] entry matched no section (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) this reports the full text’s size, not the outline payload’s.
truncatedNoPresent 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.
applicationYesRIS application the document belongs to (echoed).
content_urlsYesConstructed 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_statusYesLegal 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_numberYesTechnical RIS document number (echoed).
authentic_pdf_urlNoThe amtssigniert authentic PDF (.pdfsig, Authentisch DataType) — the legally binding artifact — where the application publishes one.
Behavior5/5

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

The description goes far beyond the readOnly/idempotent annotations, specifying exact degradation behavior ('the tool degrades explicitly, never silently'), the format_unavailable notice for PDF-only/metadata-only collections, the 40,000-byte outline/truncation mechanism with window boundaries, and the fact that html/xml renditions are never sliced. It also discloses that markdown strips screen-reader expansions. No annotation contradiction.

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 information-dense; each clause covers a distinct behavior or constraint necessary for correct use (addressing modes, format availability, outline fallback, slicing boundaries). It is front-loaded with the primary purpose, then progressively details edge cases. While verbose, the complexity of the tool justifies it, and no sentence is filler.

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?

The description covers all major usage scenarios and edge cases: how to address documents via document_number or URL, which applications carry which formats, what happens on overflow, how to retrieve specific sections, and what happens with raw renditions. Combined with the presence of an output schema, the agent has comprehensive context for invocation.

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?

The input schema already has 100% parameter coverage with rich descriptions, so the baseline is 3. The main description adds details about line-break window cuts and the relationship between document_url and companion documents, which enriches the semantics of the `sections` and `document_url` parameters. It also clarifies that application must be copied verbatim from a result, reinforcing mutual exclusivity.

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 opens with a crisp specification: 'Fetch one RIS document’s full text or its rendition URLs, with explicit binding status and the amtssigniert authentic PDF surfaced wherever it exists.' It distinguishes from sibling search/lookup tools by stating that metadata comes from the preceding search step, and describes the two addressing modes. This clearly identifies the tool's unique job.

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 instructs when to use this tool (after a ris_search_* or ris_lookup_citation result) and provides alternatives/exclusions, e.g., 'This tool returns content, not fresh metadata — the metadata rides the search/lookup step.' It also names the exact sibling source for each input ('a ris_search_drafts record’s materials[].url'), and explains that certain applications are PDF-only. This is exemplary usage guidance.

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.

ParametersJSON Schema
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

ParametersJSON Schema
NameRequiredDescription
notesYesTopic-level caveats and usage guidance. Empty when none apply.
topicYesThe requested topic, echoed back.
entriesYesReference entries for the topic.
summaryYesWhat this topic covers and which tool parameters consume its values.
Behavior5/5

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

The description aligns with annotations (readOnlyHint, idempotentHint) and adds behavioral context: the tool is static, offline, makes no upstream calls, and serves as the destination for recovery hints. No contradictions with annotations.

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

Conciseness3/5

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

The description is comprehensive but somewhat verbose, listing all 17 topics in detail. While this is informative, it could be more concise by moving the list to schema enum descriptions. Front-loads the key purpose but is longer than necessary.

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's simplicity (single parameter, output schema exists), the description sufficiently covers purpose, usage, and behavioral context. Annotations handle safety, and the output schema clarifies return values. No gaps remain.

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?

The parameter description for 'topic' adds meaningful usage context beyond the schema enum, tying it to error recovery hints. With 100% schema coverage, the baseline is 3, but the extra guidance merits a 4.

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 clearly states the tool's purpose: to ground opaque German codes across the RIS surface, returning static reference tables for various topics. It explicitly distinguishes itself from sibling tools by noting that recovery hints from other ris_* tools route here.

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 provides explicit guidance on when to use this tool: when an error recovery hint or zero-hit notice from another ris_* tool directs the agent here. It also notes the tool is static and offline, implying it is safe and fast for quick lookups.

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", "DSGVO Art32", the shape ris_search_case_law returns in norms_cited), or a bare abbreviation like "ABGB" — resolves through consolidated federal law, or a Bundesland with a state hint, as in force today or on in_force_as_of; a gazette citation ("BGBl. I Nr. 165/1999", pre-2004 "BGBl. Nr. 194/1961", imperial "RGBl. Nr. 189/1902", or "LGBl. Nr. 61/2026" with a state hint) routes to the right federal era tier by year, or to a state Landesgesetzblatt — falling back to that Bundesland’s pre-e-Recht series when the citation predates its switch; a case number ("Ro 2026/03/0016", "G 287/2022", "14Os49/26a", "2025-0.934.677", "W256 …") is matched to its court — pass court to skip detection, and ambiguous formats probe up to two courts; a collection number ("VfSlg 19.632/2012", "VwSlg 18.000 A/2010") resolves through the VfGH/VwGH collection — a VwSlg cite given without its part letter can name one decision in each of the two VwGH series, and comes back as ambiguous with both cites named rather than resolved to one of them. Returns the single best-matching document in the same shape as the corresponding search tool, with alternatives_count when more than one matched. A citation that cannot be classified or resolved returns found: false with next-step guidance — it never throws for a miss; only an upstream RIS outage is an error. For keyword rather than citation lookup, use ris_search_legislation or ris_search_case_law.

ParametersJSON Schema
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 to this court. 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", "Ro 2026/03/0016", 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

ParametersJSON Schema
NameRequiredDescription
kindYesWhat the citation parsed as — "unknown" when it did not classify into any route.
foundYesTrue 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.
Behavior5/5

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

Beyond the annotations (readOnly, idempotent, openWorld), the description discloses critical behavior: it never throws for a miss, returns found:false with guidance, probes up to two courts for ambiguous case numbers, and returns ambiguous VwSlg cites as ambiguous rather than resolving arbitrarily. These details substantially exceed annotation-provided information.

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 each sentence contributes unique information—purpose, route taxonomy, examples, ambiguity handling, and alternatives. It is front-loaded with the core purpose and structured logically by routes, though a bulleted layout would improve readability without cutting content.

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 tool with four routes, five parameters, and an output schema, the description is remarkably complete: it covers all citation shapes, edge cases (ambiguous VwSlg, pre-e-Recht fallback), return shape (same as search tools), and error behavior. The existing output schema covers return values, so the description's focus on selection and behavior is appropriate.

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 baseline is 3, but the description adds valuable semantics: it illustrates kind routes with concrete citation examples, clarifies that court skips detection, and explains the state hint's pre-e-Recht fallback. The description enriches the enum meanings and edge-case behavior beyond the schema's descriptions.

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 opens with 'Resolve a single Austrian legal citation to its canonical RIS document deterministically — no keyword search,' providing a specific verb and resource. It distinguishes itself from siblings by explicitly directing keyword lookups to ris_search_legislation or ris_search_case_law, making the tool's unique purpose unmistakable.

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?

Usage guidance is explicit and detailed: the description enumerates the four citation routes, explains when to force or skip detection (kind, court, state hints), and directly names alternative tools for keyword search. It also covers ambiguous VwSlg citations and the fallback for state gazettes, giving clear when/why instructions.

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 abbreviations expanded), norm ("decrees citing the DSG"), case_number, type, department, plan_type/plan_state (health plans), and session_number/legislature (council minutes) 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
normNoCited-provision filter (Norm) — "DSG §1", "DSGVO Art32" style. veterinary and ministerial_decrees only ("decrees citing the DSG").
pageNo1-based result page. Default 1.
typeNoDocument type (Typ) — trade_exam_rules (Befaehigungspruefungsordnung | Meisterpruefungsordnung), court_rules (Geschaeftsordnung | Geschaeftsverteilung), veterinary (Kundmachungen | VeroeffentlichungenAufGrundVEVO | SonstigeVeroeffentlichungen).
queryNoFull-text search (Suchworte). Boolean operators UND/ODER/NICHT or AND/OR/NOT, parentheses, quoted phrases; wildcard * is trailing-only. Valid for all collections.
titleNoTitle search (Titel) — phrase field. Valid for all collections except council_minutes.
issuerNoIssuing 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.
numberNoSerial number (Avsvnummer / Avnnummer / Spgnummer) — social_insurance, veterinary, health_structure_plans.
sort_byNoSort column: published or number, where the collection has the column. Default: upstream order.
page_sizeNoDocuments per page — RIS accepts 10, 20, 50, or 100. Default 20.
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.
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.
legislatureNoLegislative period (Gesetzgebungsperiode, e.g. "XXVII") — council_minutes only.
published_toNoLatest publication/session date (YYYY-MM-DD).
changed_sinceNoCoarse recency filter — documents changed in RIS within the interval. 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.
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

ParametersJSON Schema
NameRequiredDescription
pageYes1-based page number RIS served.
noticeNoZero-hit guidance — names the likely cause and the concrete next call.
resultsYesMatching documents for the requested page. Totals and paging in enrichment.
pageSizeYesPage size RIS applied.
truncatedNoPresent and true when more pages exist beyond this one — raise page to continue.
totalCountYesTotal matching documents across all pages.
Behavior5/5

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

Going beyond the readOnlyHint and idempotentHint annotations, the description discloses important behavioral traits: filters outside a collection's set are 'rejected locally,' council minutes and ministerial decrees are PDF-only with document_url as 'the only browsable surface,' and the legal status of each collection (authentic vs. decrees that do not bind citizens) is spelled out. It also reveals a current geographic limitation for court_rules. These details give an agent a realistic expectation of behavior and constraints.

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?

The description is a single dense paragraph that enumerates seven collections, a dozen filter types, and result characteristics. While logically ordered, it repeats information already present in the schema (e.g., parameter scope details) and could be more scannable with bullet points or a tighter summary. The length is partly justified by the tool's complexity, but it feels over-packaged for quick agent parsing.

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

Completeness4/5

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

Given the high parameter count and existing schema/annotations, the description covers key contextual gaps: collection semantics, authenticity, PDF-only limitations, and where to find the detailed matrix. The presence of an output schema means return values are already documented, so the description's note about result labels and links is supplementary. It's a thorough overview, though it could have explicitly mentioned pagination or distinct use cases for each collection.

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?

Since schema description coverage is 100%, the structured schema already tells the agent which parameter applies to which collection (e.g., norm is 'veterinary and ministerial_decrees only'). The description adds a high-level conceptual grouping of filters and points to ris_list_reference for the full matrix, but it doesn't introduce new parameter-specific semantics that aren't already in the schema. It earns a baseline 3 for not adding meaningful depth beyond the schema.

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 opens with a specific verb and resource: 'Search Austria’s sectoral official gazettes and executive documents.' It immediately clarifies the tool's unique scope by enumerating seven distinct collections behind a single `collection` enum, distinguishing it from sibling search tools. The level of detail about what each collection contains leaves no ambiguity about what the tool does.

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

Usage Guidelines3/5

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

The description provides rich context about when to use specific collections (e.g., ministerial_decrees 'bind the administration, not citizens') and notes limitations like court_rules being 'currently LVwG Tirol and Vorarlberg only.' However, it never explicitly states when this tool should be preferred over sibling tools like ris_search_gazette or ris_search_legislation, nor does it offer direct 'when not to use' guidance. The mention of ris_list_reference for the parameter matrix is helpful but not a true alternative-selection guideline.

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

ParametersJSON Schema
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.
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").
queryNoFull-text search over decisions (Suchworte). Boolean UND/ODER/NICHT or AND/OR/NOT, quoted phrases, trailing-only * wildcard.
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 — RIS accepts 10, 20, 50, or 100. Default 20.
commissionNoEqual-treatment commission (gbk only): federal (Bundes-Gleichbehandlungskommission) or general (Gleichbehandlungskommission).
court_nameNoFilter within the ordinary courts (justiz only) — "OGH", "OLG Wien", "LG Linz".
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.
subject_lawNoMedia statute the case concerns (Bereich, bks only) — e.g. "ORF-Gesetz", "Privatradiogesetz".
decided_fromNoEarliest decision date (YYYY-MM-DD). Not available for normenliste.
issuing_bodyNoDeciding 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.
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.
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.
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.
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

ParametersJSON Schema
NameRequiredDescription
pageYes1-based page number RIS served.
noticeNoZero-hit guidance — names the likely cause and the concrete next call.
resultsYesMatching documents for the requested page — decisions, or indexed laws under court normenliste. Totals and paging in enrichment.
pageSizeYesPage size RIS applied.
truncatedNoPresent and true when more pages exist beyond this one — raise page to continue.
totalCountYesTotal matching documents across all pages.
Behavior5/5

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

Even with readOnlyHint, openWorldHint, and idempotentHint annotations, the description adds substantial behavioral context: one-court-per-call constraint, 'historical bodies are closed windows with successors', explicit warnings about filters that return 0 hits due to corpus gaps (e.g., subject_area and decision_kind for justiz), and court-specific format quirks like vwgh collection_number matching. It also notes 'calls are cheap' for cross-court research, a useful operational trait.

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

Conciseness5/5

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

The description is a single dense paragraph that front-loads the core action and then uses compact semicolon-separated lists to enumerate courts and filters. It delegates detailed enumerations to ris_list_reference topics rather than repeating them, so every sentence carries unique information without fluff or redundancy.

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?

With 24 parameters, rich annotations, and an output schema present, the description covers all necessary context: court enumeration, filter categories, exclusions, and practical examples for dates and norms. It explicitly flags known data-quality issues (zero-hit filters) and cross-tool pointers, making it complete for safe and effective invocation.

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 meaningful grouping and prioritization: it calls norm 'the highest-value filter', explains case_number 'returns that decision’s documents', and clarifies court-conditional applicability for several filters (e.g., issuing_body, court_name, state, party, commission, subject_law). It also adds caveats like 'Not available for normenliste' for sort_by and case_number, which the schema alone doesn't convey as succinctly.

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 opens with a specific verb and resource: 'Search Austrian case law (Judikatur) in ONE court or tribunal per call' and lists the exact court codes, giving clear scope. It also distinguishes itself from siblings by explicitly referencing ris_lookup_citation for known citations and ris_list_reference for court metadata, so the tool's unique function is well-defined.

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 states when to use this tool versus alternatives: 'For a known Geschäftszahl or VfSlg/VwSlg cite, ris_lookup_citation resolves it directly' and points to ris_list_reference for court codes/windows. However, it does not explicitly compare against other search tools like ris_search_legislation or ris_search_announcements, so guidance is strong within the case-law family but incomplete across the full sibling set.

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.

ParametersJSON Schema
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.
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.
sort_byNoSort column: date (review deadline or adoption date per stage), ministry, or title. Default: upstream order.
ministryNoSubmitting 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.
page_sizeNoDocuments per page — RIS accepts 10, 20, 50, or 100. Default 20.
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

ParametersJSON Schema
NameRequiredDescription
pageYes1-based page number RIS served.
noticeNoZero-hit guidance — names the likely cause and the concrete next call.
resultsYesMatching pipeline documents for the requested page. Totals and paging in enrichment.
pageSizeYesPage size RIS applied.
truncatedNoPresent and true when more pages exist beyond this one — raise page to continue.
totalCountYesTotal matching documents across all pages.
Behavior5/5

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

Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, but the description adds substantial behavioral context: documents are preparatory and not binding law, government_bills are only available from 2004+, ministry lookup uses the historical name at submission time, and materials can only be read via ris_get_document with a materials[].url. It also discloses the coarse nature of changed_since and points to ris_track_changes for finer control.

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

Conciseness5/5

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

The description is dense and front-loaded with the core purpose, then flows logically through stage selection, filter semantics, and output context. Every sentence earns its place: purpose, stage details, filter explanations, materials handling, and cross-references to sibling tools. Despite its length, it is well-structured and free of fluff.

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 complex tool with 12 parameters, an output schema, and annotations, the description fully covers the essential context: what is searched, the two pipeline stages, how filters depend on stage, how to read companion documents, and which sibling tools to use for related tasks. It also clarifies the legal status of results, and since an output schema exists, describing return values is unnecessary.

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 100% (baseline 3), the description enriches meaning well beyond the schema. It explains stage values with full context (Begutachtungsentwürfe vs Regierungsvorlagen), expands on ministry abbreviation handling ('expanded to RIS’s exact designation; the historical name at submission time counts'), clarifies date filter semantics ('today = what is in Begutachtung right now'), and describes the materials structure and how to access it.

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 clearly defines the tool as searching Austria's federal lawmaking pipeline before promulgation, with an explicit verb and resource. It also distinguishes itself from sibling ris_search_gazette by calling itself the 'monitoring counterpart' and describing the two pipeline stages (review_drafts and government_bills) with German terms.

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 contrasts this tool with ris_search_gazette ('what will become law') and directs users to ris_get_document for reading materials, ris_list_reference for ministry codes, and ris_track_changes for exact recency windows. It also clarifies stage-specific filters (in_review_on vs decided_from/to) and notes that changed_since is coarse, giving clear when-to-use and when-not-to-use guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ris_search_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.

ParametersJSON Schema
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.
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.
issuerNoIssuing body — federal (EinbringendeStelle, e.g. "BMF") or ordinance gazettes (Vbl Einbringer: Landeshauptmann/frau, Landesregierung, Amt der Landesregierung, Sonstige Landesbehörden) only. Phrase field.
numberNoGazette 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.
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 — RIS accepts 10, 20, 50, or 100. Default 20.
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.
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.

Output Schema

ParametersJSON Schema
NameRequiredDescription
pageYes1-based page number RIS served.
noticeNoZero-hit guidance — names the likely cause and the concrete next call.
resultsYesMatching gazette entries for the requested page. Totals, paging, and the served application in enrichment.
pageSizeYesPage size RIS applied.
truncatedNoPresent and true when more pages exist beyond this one — raise page to continue.
totalCountYesTotal matching entries across all pages.
servedApplicationYesThe 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.
Behavior4/5

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

Annotations already cover readOnly/idempotent. Description adds meaningful context: one call per era tier, date interval rejection with boundaries, result labels/PDF. No contradictions.

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 core purpose, then logically expands. Every sentence adds unique information; could be slightly more concise but remains focused and helpful.

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?

Covers all 17 parameters, edge cases (1941-44 gap, Vienna state_era), output characteristics (labels, PDF), and references external resources. Sufficient for correct invocation.

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%, but description adds significant value: number auto-routing, scope era interactions, state_era nuances (Wien none), precedence in filtering. Not just repetition.

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 clearly states the tool browses Austrian gazettes, listing specific jurisdictions and data types. It distinguishes from siblings like ris_lookup_citation (single number) and ris_list_reference (reference topics).

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 says when to use ris_lookup_citation for a known number and ris_list_reference for coverage details. Provides clear context on when the tool is appropriate and when alternatives are better.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo1-based result page. Default 1.
indexNoSystematik classification filter (e.g. "10/10 Datenschutz"). Federal/state consolidated law only.
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.
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.
law_idNoLaw-level grouping key (Gesetzesnummer, e.g. 10001597 = DSG) — exact match; returns every section of that law. Federal/state consolidated law only.
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 — RIS accepts 10, 20, 50, or 100. Default 20.
section_toNoEnd of the section range. Equal to section_from for a single section.
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).
section_fromNoStart of a § / Artikel / Anlage number range, digits with optional letter ("6", "1a"). Federal/state consolidated law only.
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

ParametersJSON Schema
NameRequiredDescription
pageYes1-based page number RIS served.
noticeNoZero-hit guidance — names the likely cause and the concrete next call.
resultsYesMatching documents for the requested page. Totals and paging in enrichment.
pageSizeYesPage size RIS applied.
truncatedNoPresent and true when more pages exist beyond this one — raise page to continue.
totalCountYesTotal 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.
Behavior5/5

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

Annotations (readOnlyHint, openWorldHint, idempotentHint) are complemented by the description's note that 'Consolidated text is informational, not legally binding' and that the authentic version is in ris_search_gazette. It also discloses that the applied date is echoed back. No contradiction with annotations.

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

Conciseness4/5

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

The description is dense with needed information, but it is front-loaded with the core purpose and then details parameters. While every sentence earns its place, the length (over 10 sentences) could be slightly trimmed without losing clarity. Still well-structured.

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 21 parameters, full schema coverage, and an output schema (mentioned), the description covers all key aspects: version filter windows, mutual exclusivities, default dates, wildcard rules, scope combinations, and the informational nature. No critical gaps remain.

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%, but the description adds significant context beyond names: explains that law_id 'returns every section of that law', that language='english' requires scope='federal' and combines only with query/title, and details wildcard rules ('trailing-only *'). It clarifies mutual exclusivities and default behaviors, substantially enhancing understanding.

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 clearly states 'Search Austrian consolidated law and English translations' and specifies scope options (federal, Bundesland, municipal, English translations). It distinguishes from siblings like ris_lookup_citation ('For a specific citation... resolves it deterministically') and ris_search_gazette ('authentic gazette artifact lives in ris_search_gazette'), making the tool's purpose unambiguous.

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 guidance on when to use this tool vs alternatives: 'For a specific citation... ris_lookup_citation resolves it deterministically' and 'For exact windows and deletions use ris_track_changes.' It also explains mutual exclusivity of version filters ('mutually exclusive') and default behaviors (in_force_as_of defaults to today).

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 takes any RIS application code (e.g. BrKons, Dsk, BgblAuth); the four applications with a different History-feed name are mapped automatically. Each changed document comes back in a compact cross-class record — document_number (for ris_get_document), title, dates, binding_status, and rendition URLs — plus its last-changed date; removed documents come back as deleted records with a deletion timestamp. One application per call; page explicitly for large windows. Application codes and coverage: ris_list_reference topic applications.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo1-based result page. Default 1.
page_sizeNoDocuments per page — RIS accepts 10, 20, 50, or 100. Default 20.
changed_toNoInclude documents changed on/before this date (YYYY-MM-DD, AenderungenBis).
applicationYesRIS 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.
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

ParametersJSON Schema
NameRequiredDescription
pageYes1-based page number RIS served.
noticeNoZero-hit guidance — names the likely cause and the concrete next call.
resultsYesChange-feed entries for the requested page. Totals, paging, and the applied window in enrichment.
pageSizeYesPage 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.
totalCountYesTotal change-feed entries across all pages.
applicationYesThe application whose change feed was read.
changedFromNoThe changed_from bound the server applied (echo), when set.
Behavior5/5

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

Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, indicating the tool is safe, returns possibly new results each time, and can be retried. The description adds important behavioral context: it returns both changed and deleted records, describes the compact record structure (document_number, title, etc.), and mentions automatic mapping of History-feed names. No contradictions with annotations.

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

Conciseness4/5

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

The description is a single dense paragraph covering all key points: purpose, usage guidelines, parameter details, and return structure. It is concise and front-loaded, but could benefit from slightly more structure (e.g., bullet points or breaks) for easier scanning. No extraneous sentences.

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 6 parameters (1 required), an output schema (not shown but summarized), and complexity (delete-aware, exact dates, multiple applications), the description is fully complete. It explains what the tool does, when to use it, what parameters mean, and what the return value looks like. An agent can confidently select and invoke this tool based on the description alone.

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 description coverage is 100%, but the description adds significant meaning beyond the schema: it explains that changed_from/changed_to are exact dates (not coarse intervals), that include_deleted is the only way to observe deletions, and that application codes are mapped automatically. It also advises pagination for large windows.

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 clearly states the tool's purpose: tracking documents added/changed in one RIS application within an exact date window, and specifically calls out its role as a delta-sync and monitoring primitive. It distinguishes from search tools by mentioning exact-dated and deletion-aware capabilities, making it easy to differentiate from siblings like 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 Guidelines5/5

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

The description explicitly states when to use the tool ('the delta-sync and monitoring primitive for mirrors and watchers', 'the only surface that reports removals') and contrasts with alternatives ('Unlike the search tools’ coarse, additive-only changed_since intervals'). It also provides guidance on parameters (one application per call, page for large windows) and references ris_list_reference for application codes.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Discussions

No comments yet. Be the first to start the discussion!

Related MCP Servers

  • A
    license
    A
    quality
    B
    maintenance
    MCP server that provides access to Austria's official legal database (RIS), enabling AI assistants to search and retrieve legal documents from Austrian federal and state law, court decisions, and law gazettes.
    Last updated
    12
    116
    9
    MIT
  • F
    license
    -
    quality
    B
    maintenance
    MCP server that exposes Austrian federal law (Bundesrecht) to LLMs, enabling full-text search, paragraph retrieval, historical versions, statute lookup, BGBl lookups, amendment timelines, and citation searches via the public RIS OGD API.
    Last updated

View all MCP Servers

Try in Browser

Your Connectors

Sign in to create a connector for this server.