ris-austria-mcp-server

v0.1.6 pre-1.0

Search Austrian consolidated federal & state law, court decisions, and the authentic Bundesgesetzblatt from the official RIS via MCP. Keyless. STDIO or Streamable HTTP.

ris-austria.caseyjhand.com/mcp
claude mcp add --transport http ris-austria-mcp-server https://ris-austria.caseyjhand.com/mcp
codex mcp add ris-austria-mcp-server --url https://ris-austria.caseyjhand.com/mcp
{
  "mcpServers": {
    "ris-austria-mcp-server": {
      "url": "https://ris-austria.caseyjhand.com/mcp"
    }
  }
}
gemini mcp add --transport http ris-austria-mcp-server https://ris-austria.caseyjhand.com/mcp
{
  "mcpServers": {
    "ris-austria-mcp-server": {
      "command": "bunx",
      "args": [
        "mcp-remote",
        "https://ris-austria.caseyjhand.com/mcp"
      ]
    }
  }
}
{
  "mcpServers": {
    "ris-austria-mcp-server": {
      "type": "http",
      "url": "https://ris-austria.caseyjhand.com/mcp"
    }
  }
}
curl -X POST https://ris-austria.caseyjhand.com/mcp \
  -H "Content-Type: application/json" \
  -H "MCP-Protocol-Version: 2025-11-25" \
  -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-11-25","capabilities":{},"clientInfo":{"name":"curl","version":"1.0.0"}}}'

Tools

9

ris_search_legislation

open-world

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.

read
invocation
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "ris_search_legislation",
    "arguments": {}
  }
}
schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "query": {
      "description": "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.",
      "type": "string"
    },
    "title": {
      "description": "Title search (Titel) — matches title, short title, and official abbreviation (\"ABGB\", \"DSG\"). Phrase field: * allowed leading or trailing with ≥2 characters beside it.",
      "type": "string"
    },
    "scope": {
      "default": "federal",
      "description": "Jurisdiction: federal (default) searches consolidated federal law; a Bundesland searches that state’s consolidated law (or, with municipality set, its municipal law).",
      "type": "string",
      "enum": [
        "federal",
        "burgenland",
        "kaernten",
        "niederoesterreich",
        "oberoesterreich",
        "salzburg",
        "steiermark",
        "tirol",
        "vorarlberg",
        "wien"
      ]
    },
    "municipality": {
      "description": "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).",
      "type": "string"
    },
    "language": {
      "default": "german",
      "description": "german (default) searches the authoritative German corpus; english searches the ~138 unofficial English translations of selected federal laws (requires scope: federal; combines only with query and title).",
      "type": "string",
      "enum": [
        "german",
        "english"
      ]
    },
    "in_force_as_of": {
      "description": "Return only the version in force on this date (YYYY-MM-DD). DEFAULTS TO TODAY in Austria — omitting it never searches all historical versions; opt into that with include_all_versions.",
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
    },
    "include_all_versions": {
      "description": "true searches every historical version (no in-force date filter) — version-history research. Overrides in_force_as_of; mutually exclusive with the force-window filters.",
      "type": "boolean"
    },
    "entered_force_from": {
      "description": "Provisions that entered force on/after this date (YYYY-MM-DD) — new-law tracking. Federal/state consolidated law only; mutually exclusive with in_force_as_of and include_all_versions.",
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
    },
    "entered_force_to": {
      "description": "Provisions that entered force on/before this date (YYYY-MM-DD).",
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
    },
    "left_force_from": {
      "description": "Provisions that left force on/after this date (YYYY-MM-DD) — repeal tracking. Same exclusivity as entered_force_from.",
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
    },
    "left_force_to": {
      "description": "Provisions that left force on/before this date (YYYY-MM-DD).",
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
    },
    "section_from": {
      "description": "Start of a § / Artikel / Anlage number range, digits with optional letter (\"6\", \"1a\"). Federal/state consolidated law only.",
      "type": "string"
    },
    "section_to": {
      "description": "End of the section range. Equal to section_from for a single section.",
      "type": "string"
    },
    "section_type": {
      "description": "Which section kind the range addresses. Defaults to Paragraph when a section range is set. Values: ris_list_reference topic section_types.",
      "type": "string",
      "enum": [
        "Alle",
        "Artikel",
        "Paragraph",
        "Anlage"
      ]
    },
    "law_id": {
      "description": "Law-level grouping key (Gesetzesnummer, e.g. 10001597 = DSG) — exact match; returns every section of that law. Federal/state consolidated law only.",
      "type": "string"
    },
    "index": {
      "description": "Systematik classification filter (e.g. \"10/10 Datenschutz\"). Federal/state consolidated law only.",
      "type": "string"
    },
    "changed_since": {
      "description": "Coarse recency filter — documents changed in RIS within the interval. For exact windows and deletions use ris_track_changes.",
      "type": "string",
      "enum": [
        "one_week",
        "two_weeks",
        "one_month",
        "three_months",
        "six_months",
        "one_year"
      ]
    },
    "sort_by": {
      "description": "Sort column: section (§/Artikel/Anlage label) or in_force_date. Default: upstream order. Federal/state consolidated law only.",
      "type": "string",
      "enum": [
        "section",
        "in_force_date"
      ]
    },
    "sort_direction": {
      "description": "Sort direction; applies with sort_by.",
      "type": "string",
      "enum": [
        "ascending",
        "descending"
      ]
    },
    "page": {
      "description": "1-based result page. Default 1.",
      "type": "integer",
      "minimum": 1,
      "maximum": 9007199254740991
    },
    "page_size": {
      "description": "Documents per page — RIS accepts 10, 20, 50, or 100. Default 20.",
      "anyOf": [
        {
          "type": "number",
          "const": 10
        },
        {
          "type": "number",
          "const": 20
        },
        {
          "type": "number",
          "const": 50
        },
        {
          "type": "number",
          "const": 100
        }
      ]
    }
  },
  "required": [
    "scope",
    "language"
  ],
  "additionalProperties": false
}
view source ↗

ris_search_case_law

open-world

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.

read
invocation
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "ris_search_case_law",
    "arguments": {
      "court": "<court>"
    }
  }
}
schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "court": {
      "type": "string",
      "enum": [
        "vfgh",
        "vwgh",
        "justiz",
        "bvwg",
        "lvwg",
        "dsk",
        "normenliste",
        "dok",
        "pvak",
        "gbk",
        "uvs",
        "asylgh",
        "ubas",
        "umse",
        "bks",
        "verg",
        "upts"
      ],
      "description": "Which court/tribunal application to search — one per call. Codes, coverage windows, and successor mapping: ris_list_reference topic courts."
    },
    "query": {
      "description": "Full-text search over decisions (Suchworte). Boolean UND/ODER/NICHT or AND/OR/NOT, quoted phrases, trailing-only * wildcard.",
      "type": "string"
    },
    "norm": {
      "description": "Cited-provision filter (Norm) — \"DSG §1\", \"DSGVO Art32\", \"GewO 1994 §129\", matching the format returned in norms_cited. The highest-value case-law filter.",
      "type": "string"
    },
    "case_number": {
      "description": "Exact Geschäftszahl — returns that decision’s documents. Formats differ per court (examples: ris_list_reference topic courts). Not available for normenliste.",
      "type": "string"
    },
    "decision_type": {
      "default": "all",
      "description": "Search headnotes (Rechtssätze), full decision texts (Entscheidungstexte), or both (all, the default). Not available for gbk, upts, or normenliste.",
      "type": "string",
      "enum": [
        "headnote",
        "full_text",
        "all"
      ]
    },
    "decided_from": {
      "description": "Earliest decision date (YYYY-MM-DD). Not available for normenliste.",
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
    },
    "decided_to": {
      "description": "Latest decision date (YYYY-MM-DD).",
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
    },
    "decision_kind": {
      "description": "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.",
      "type": "string"
    },
    "collection_number": {
      "description": "Official collection number (Sammlungsnummer) — VfSlg/VwSlg cites. vfgh, vwgh, and uvs only.",
      "type": "string"
    },
    "issuing_body": {
      "description": "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.",
      "type": "string"
    },
    "court_name": {
      "description": "Filter within the ordinary courts (justiz only) — \"OGH\", \"OLG Wien\", \"LG Linz\".",
      "type": "string"
    },
    "legal_area": {
      "description": "Legal area (Rechtsgebiet, justiz only): civil (Zivilrecht) or criminal (Strafrecht).",
      "type": "string",
      "enum": [
        "civil",
        "criminal"
      ]
    },
    "subject_area": {
      "description": "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.",
      "type": "string"
    },
    "state": {
      "description": "Which of the nine state administrative courts/senates to search (lvwg and uvs only).",
      "type": "string",
      "enum": [
        "burgenland",
        "kaernten",
        "niederoesterreich",
        "oberoesterreich",
        "salzburg",
        "steiermark",
        "tirol",
        "vorarlberg",
        "wien"
      ]
    },
    "party": {
      "description": "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\").",
      "type": "string"
    },
    "commission": {
      "description": "Equal-treatment commission (gbk only): federal (Bundes-Gleichbehandlungskommission) or general (Gleichbehandlungskommission).",
      "type": "string",
      "enum": [
        "federal",
        "general"
      ]
    },
    "senate": {
      "description": "Commission senate (gbk only).",
      "type": "string",
      "enum": [
        "I",
        "II",
        "III"
      ]
    },
    "discrimination_ground": {
      "description": "Discrimination ground (gbk only): Alter (age), EthnischeZugehoerigkeit (ethnic origin), Geschlecht (gender/sex), Mehrfachdiskriminierung (multiple grounds), Religion (religion), SexuelleOrientierung (sexual orientation), Weltanschauung (worldview/belief). Upstream German enum values, sent verbatim.",
      "type": "string",
      "enum": [
        "Alter",
        "EthnischeZugehoerigkeit",
        "Geschlecht",
        "Mehrfachdiskriminierung",
        "Religion",
        "SexuelleOrientierung",
        "Weltanschauung"
      ]
    },
    "subject_law": {
      "description": "Media statute the case concerns (Bereich, bks only) — e.g. \"ORF-Gesetz\", \"Privatradiogesetz\".",
      "type": "string"
    },
    "changed_since": {
      "description": "Coarse recency filter — decisions changed in RIS within the interval. For exact windows use ris_track_changes.",
      "type": "string",
      "enum": [
        "one_week",
        "two_weeks",
        "one_month",
        "three_months",
        "six_months",
        "one_year"
      ]
    },
    "sort_by": {
      "description": "Sort column. Default: upstream order.",
      "type": "string",
      "enum": [
        "decision_date",
        "case_number"
      ]
    },
    "sort_direction": {
      "description": "Sort direction; applies with sort_by.",
      "type": "string",
      "enum": [
        "ascending",
        "descending"
      ]
    },
    "page": {
      "description": "1-based result page. Default 1.",
      "type": "integer",
      "minimum": 1,
      "maximum": 9007199254740991
    },
    "page_size": {
      "description": "Documents per page — RIS accepts 10, 20, 50, or 100. Default 20.",
      "anyOf": [
        {
          "type": "number",
          "const": 10
        },
        {
          "type": "number",
          "const": 20
        },
        {
          "type": "number",
          "const": 50
        },
        {
          "type": "number",
          "const": 100
        }
      ]
    }
  },
  "required": [
    "court",
    "decision_type"
  ],
  "additionalProperties": false
}
view source ↗

ris_search_gazette

open-world

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 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 include_non_authentic adds the historical non-authentic state gazette (Niederösterreich’s systematic LgblNO, or the older Lgbl elsewhere). 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.

read
invocation
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "ris_search_gazette",
    "arguments": {}
  }
}
schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "scope": {
      "default": "federal",
      "description": "Jurisdiction level: federal (default — the Bundesgesetzblatt, era tier auto-routed), a Bundesland (burgenland … wien, its Landesgesetzblatt), district (Bezirke promulgations), or municipal (Gemeinde promulgations).",
      "type": "string",
      "enum": [
        "federal",
        "burgenland",
        "kaernten",
        "niederoesterreich",
        "oberoesterreich",
        "salzburg",
        "steiermark",
        "tirol",
        "vorarlberg",
        "wien",
        "district",
        "municipal"
      ]
    },
    "series": {
      "description": "State scopes only. law_gazette (default when omitted) searches the authentic Landesgesetzblatt; ordinance_gazette searches the Verordnungsblätter (Vbl — currently Tirol only, 2022+).",
      "type": "string",
      "enum": [
        "law_gazette",
        "ordinance_gazette"
      ]
    },
    "include_non_authentic": {
      "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"
    },
    "query": {
      "description": "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.",
      "type": "string"
    },
    "title": {
      "description": "Title search (Titel) — phrase field: * allowed leading or trailing with ≥2 characters beside it.",
      "type": "string"
    },
    "number": {
      "description": "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.",
      "type": "string"
    },
    "part": {
      "description": "Federal only. part1 (Gesetze) | part2 (Verordnungen) | part3 (Staatsverträge) — parts exist from 1997; pre_1997 searches the older partless BGBl (routes to the 1945–2003 tier). Semantics: ris_list_reference topic gazette_parts.",
      "type": "string",
      "enum": [
        "part1",
        "part2",
        "part3",
        "pre_1997"
      ]
    },
    "type": {
      "description": "Document-type filter (Typ) for federal and state law gazettes: laws (Gesetze) | regulations (Verordnungen) | announcements (Kundmachungen) | other (Sonstiges).",
      "type": "string",
      "enum": [
        "laws",
        "regulations",
        "announcements",
        "other"
      ]
    },
    "published_from": {
      "description": "Earliest promulgation date (YYYY-MM-DD). A pre-2004 range routes a federal query to an earlier era tier.",
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
    },
    "published_to": {
      "description": "Latest promulgation date (YYYY-MM-DD).",
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
    },
    "issuer": {
      "description": "Issuing body — federal (EinbringendeStelle, e.g. \"BMF\") or ordinance gazettes (Vbl Einbringer: Landeshauptmann/frau, Landesregierung, Amt der Landesregierung, Sonstige Landesbehörden) only. Phrase field.",
      "type": "string"
    },
    "district_authority": {
      "description": "District only. Bezirksverwaltungsbehörde name, e.g. \"Bezirkshauptmannschaft Liezen\" — full list: ris_list_reference topic district_authorities.",
      "type": "string"
    },
    "municipality": {
      "description": "Municipal only. Exact municipality name (Gemeinde), RIS’s spelling.",
      "type": "string"
    },
    "sort_by": {
      "description": "Sort column: published (Kundmachungsdatum) or number. Availability varies by tier; default: upstream order.",
      "type": "string",
      "enum": [
        "published",
        "number"
      ]
    },
    "sort_direction": {
      "description": "Sort direction; applies with sort_by.",
      "type": "string",
      "enum": [
        "ascending",
        "descending"
      ]
    },
    "page": {
      "description": "1-based result page. Default 1.",
      "type": "integer",
      "minimum": 1,
      "maximum": 9007199254740991
    },
    "page_size": {
      "description": "Documents per page — RIS accepts 10, 20, 50, or 100. Default 20.",
      "anyOf": [
        {
          "type": "number",
          "const": 10
        },
        {
          "type": "number",
          "const": 20
        },
        {
          "type": "number",
          "const": 50
        },
        {
          "type": "number",
          "const": 100
        }
      ]
    }
  },
  "required": [
    "scope"
  ],
  "additionalProperties": false
}
view source ↗

ris_search_drafts

open-world

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 server-side 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. Documents are preparatory, not binding law. Ministry codes: ris_list_reference topic ministries.

read
invocation
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "ris_search_drafts",
    "arguments": {
      "stage": "<stage>"
    }
  }
}
schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "stage": {
      "type": "string",
      "enum": [
        "review_drafts",
        "government_bills"
      ],
      "description": "Which pipeline stage to search — one per call. review_drafts (Begut, ministerial review) or government_bills (RegV, council-adopted bills). Details: ris_list_reference topic stages."
    },
    "query": {
      "description": "Full-text search (Suchworte). Boolean operators UND/ODER/NICHT or AND/OR/NOT, parentheses, quoted phrases; wildcard * is trailing-only.",
      "type": "string"
    },
    "title": {
      "description": "Title search (Titel) — phrase field: * allowed leading or trailing with ≥2 characters beside it.",
      "type": "string"
    },
    "ministry": {
      "description": "Submitting ministry (EinbringendeStelle). Accepts an abbreviation (\"BMF\") — expanded server-side to RIS’s exact-match designation; use the ministry’s name at the time of submission. Table: ris_list_reference topic ministries.",
      "type": "string"
    },
    "in_review_on": {
      "description": "review_drafts only. Drafts whose public-review window covers this date (YYYY-MM-DD). Today = drafts currently in Begutachtung.",
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
    },
    "decided_from": {
      "description": "government_bills only. Earliest council-of-ministers adoption date (YYYY-MM-DD).",
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
    },
    "decided_to": {
      "description": "government_bills only. Latest adoption date (YYYY-MM-DD).",
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
    },
    "changed_since": {
      "description": "Coarse recency filter — documents changed in RIS within the interval. For exact windows use ris_track_changes.",
      "type": "string",
      "enum": [
        "one_week",
        "two_weeks",
        "one_month",
        "three_months",
        "six_months",
        "one_year"
      ]
    },
    "sort_by": {
      "description": "Sort column: date (review deadline or adoption date per stage), ministry, or title. Default: upstream order.",
      "type": "string",
      "enum": [
        "date",
        "ministry",
        "title"
      ]
    },
    "sort_direction": {
      "description": "Sort direction; applies with sort_by.",
      "type": "string",
      "enum": [
        "ascending",
        "descending"
      ]
    },
    "page": {
      "description": "1-based result page. Default 1.",
      "type": "integer",
      "minimum": 1,
      "maximum": 9007199254740991
    },
    "page_size": {
      "description": "Documents per page — RIS accepts 10, 20, 50, or 100. Default 20.",
      "anyOf": [
        {
          "type": "number",
          "const": 10
        },
        {
          "type": "number",
          "const": 20
        },
        {
          "type": "number",
          "const": 50
        },
        {
          "type": "number",
          "const": 100
        }
      ]
    }
  },
  "required": [
    "stage"
  ],
  "additionalProperties": false
}
view source ↗

ris_search_announcements

open-world

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 server-side), 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 and the authentic PDF where it exists. Per-collection parameter matrix and issuers: ris_list_reference topic collections or issuing_bodies.

read
invocation
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "ris_search_announcements",
    "arguments": {
      "collection": "<collection>"
    }
  }
}
schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "collection": {
      "type": "string",
      "enum": [
        "social_insurance",
        "veterinary",
        "court_rules",
        "trade_exam_rules",
        "health_structure_plans",
        "ministerial_decrees",
        "council_minutes"
      ],
      "description": "Which collection to search — one per call. social_insurance | veterinary | court_rules | trade_exam_rules | health_structure_plans | ministerial_decrees | council_minutes. Per-collection filter matrix: ris_list_reference topic collections."
    },
    "query": {
      "description": "Full-text search (Suchworte). Boolean operators UND/ODER/NICHT or AND/OR/NOT, parentheses, quoted phrases; wildcard * is trailing-only. Valid for all collections.",
      "type": "string"
    },
    "title": {
      "description": "Title search (Titel) — phrase field. Valid for all collections except council_minutes.",
      "type": "string"
    },
    "number": {
      "description": "Serial number (Avsvnummer / Avnnummer / Spgnummer) — social_insurance, veterinary, health_structure_plans.",
      "type": "string"
    },
    "published_from": {
      "description": "Earliest publication/session date (YYYY-MM-DD). All collections except ministerial_decrees (decrees date by force — use in_force_as_of / entered_force_from/to).",
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
    },
    "published_to": {
      "description": "Latest publication/session date (YYYY-MM-DD).",
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
    },
    "in_force_as_of": {
      "description": "Version in force on this date (YYYY-MM-DD) — veterinary, court_rules, trade_exam_rules, health_structure_plans, ministerial_decrees (the consolidated-ish collections).",
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
    },
    "entered_force_from": {
      "description": "Provisions that entered force on/after this date (YYYY-MM-DD) — ministerial_decrees only.",
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
    },
    "entered_force_to": {
      "description": "Provisions that entered force on/before this date (YYYY-MM-DD) — ministerial_decrees only.",
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
    },
    "issuer": {
      "description": "Issuing body — social_insurance (Urheber, e.g. ÖGK/SVS/BVAEB/AUVA/PVA), ministerial_decrees (Bundesministerium — abbreviation expanded server-side), council_minutes (Einbringer ministry). Values: ris_list_reference topic issuing_bodies or ministries.",
      "type": "string"
    },
    "norm": {
      "description": "Cited-provision filter (Norm) — \"DSG §1\", \"DSGVO Art32\" style. veterinary and ministerial_decrees only (\"decrees citing the DSG\").",
      "type": "string"
    },
    "case_number": {
      "description": "Business reference number (Geschäftszahl) — veterinary and ministerial_decrees only.",
      "type": "string"
    },
    "type": {
      "description": "Document type (Typ) — trade_exam_rules (Befaehigungspruefungsordnung | Meisterpruefungsordnung), court_rules (Geschaeftsordnung | Geschaeftsverteilung), veterinary (Kundmachungen | VeroeffentlichungenAufGrundVEVO | SonstigeVeroeffentlichungen).",
      "type": "string"
    },
    "department": {
      "description": "Ministry department (Abteilung) — ministerial_decrees only.",
      "type": "string"
    },
    "plan_type": {
      "description": "health_structure_plans only. Plan kind — all (default), expert_opinion (Gutachten), or regulation (Verordnungen). Searches the federal ÖSG unless plan_state is set.",
      "type": "string",
      "enum": [
        "all",
        "expert_opinion",
        "regulation"
      ]
    },
    "plan_state": {
      "description": "health_structure_plans only. Restrict to one Bundesland’s regional health-structure plan (RSG) — setting it switches the search from the federal ÖSG to that state’s RSG.",
      "type": "string",
      "enum": [
        "burgenland",
        "kaernten",
        "niederoesterreich",
        "oberoesterreich",
        "salzburg",
        "steiermark",
        "tirol",
        "vorarlberg",
        "wien"
      ]
    },
    "session_number": {
      "description": "Council session number (Sitzungsnummer) — council_minutes only.",
      "type": "string"
    },
    "legislature": {
      "description": "Legislative period (Gesetzgebungsperiode, e.g. \"XXVII\") — council_minutes only.",
      "type": "string"
    },
    "changed_since": {
      "description": "Coarse recency filter — documents changed in RIS within the interval. For exact windows use ris_track_changes.",
      "type": "string",
      "enum": [
        "one_week",
        "two_weeks",
        "one_month",
        "three_months",
        "six_months",
        "one_year"
      ]
    },
    "sort_by": {
      "description": "Sort column: published or number, where the collection has the column. Default: upstream order.",
      "type": "string",
      "enum": [
        "published",
        "number"
      ]
    },
    "sort_direction": {
      "description": "Sort direction; applies with sort_by.",
      "type": "string",
      "enum": [
        "ascending",
        "descending"
      ]
    },
    "page": {
      "description": "1-based result page. Default 1.",
      "type": "integer",
      "minimum": 1,
      "maximum": 9007199254740991
    },
    "page_size": {
      "description": "Documents per page — RIS accepts 10, 20, 50, or 100. Default 20.",
      "anyOf": [
        {
          "type": "number",
          "const": 10
        },
        {
          "type": "number",
          "const": 20
        },
        {
          "type": "number",
          "const": 50
        },
        {
          "type": "number",
          "const": 100
        }
      ]
    }
  },
  "required": [
    "collection"
  ],
  "additionalProperties": false
}
view source ↗

ris_lookup_citation

open-world

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; a case number ("Ra 2019/22/0184", "G 287/2022", "6Ob56/25k", "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. 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.

read
invocation
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "ris_lookup_citation",
    "arguments": {
      "citation": "<citation>"
    }
  }
}
schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "citation": {
      "type": "string",
      "description": "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\"."
    },
    "kind": {
      "default": "auto",
      "description": "Force a route, or auto (default) to classify by shape. Set explicitly when the citation shape is ambiguous.",
      "type": "string",
      "enum": [
        "auto",
        "norm",
        "gazette",
        "case_number",
        "collection_number"
      ]
    },
    "court": {
      "description": "Court hint for a case number — short-circuits court detection to this court. Codes: ris_list_reference topic courts.",
      "type": "string",
      "enum": [
        "vfgh",
        "vwgh",
        "justiz",
        "bvwg",
        "lvwg",
        "dsk",
        "normenliste",
        "dok",
        "pvak",
        "gbk",
        "uvs",
        "asylgh",
        "ubas",
        "umse",
        "bks",
        "verg",
        "upts"
      ]
    },
    "state": {
      "description": "Bundesland hint — routes a norm to that state’s consolidated law (LrKons) and an LGBl. gazette to that state’s Landesgesetzblatt (LgblAuth).",
      "type": "string",
      "enum": [
        "burgenland",
        "kaernten",
        "niederoesterreich",
        "oberoesterreich",
        "salzburg",
        "steiermark",
        "tirol",
        "vorarlberg",
        "wien"
      ]
    },
    "in_force_as_of": {
      "description": "For a norm, resolve the version in force on this date (YYYY-MM-DD). Defaults to today in Austria.",
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
    }
  },
  "required": [
    "citation",
    "kind"
  ],
  "additionalProperties": false
}
view source ↗

ris_get_document

open-world

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. 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 byte budget the tool returns a §/Artikel/Anlage section outline (kind: outline) instead of truncating; re-call with sections:[…] naming outline entries to retrieve just those. Raw html/xml renditions, which carry no such headings, return in full.

read
invocation
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "ris_get_document",
    "arguments": {}
  }
}
schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "document_number": {
      "description": "Technical RIS document number (Technisch.ID), e.g. NOR40262691, JJT_…, BGBLA_2026_II_171 — copy verbatim from a ris_search_* or ris_lookup_citation result. Requires application; mutually exclusive with document_url.",
      "type": "string"
    },
    "application": {
      "description": "RIS application the document belongs to (e.g. BrKons, Dsk, BgblAuth) — copy verbatim from the same result. Required with document_number. Codes and coverage: ris_list_reference topic applications.",
      "type": "string",
      "enum": [
        "BrKons",
        "BgblAuth",
        "BgblPdf",
        "BgblAlt",
        "Begut",
        "RegV",
        "Erv",
        "LrKons",
        "LgblAuth",
        "Lgbl",
        "LgblNO",
        "Vbl",
        "Bvb",
        "Gr",
        "GrA",
        "Vfgh",
        "Vwgh",
        "Normenliste",
        "Justiz",
        "Bvwg",
        "Lvwg",
        "Dsk",
        "Dok",
        "Pvak",
        "Gbk",
        "Uvs",
        "AsylGH",
        "Ubas",
        "Umse",
        "Bks",
        "Verg",
        "PruefGewO",
        "Avsv",
        "Spg",
        "Avn",
        "KmGer",
        "Upts",
        "Mrp",
        "Erlaesse"
      ]
    },
    "document_url": {
      "description": "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.",
      "type": "string"
    },
    "format": {
      "default": "markdown",
      "description": "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).",
      "type": "string",
      "enum": [
        "markdown",
        "html",
        "xml",
        "urls_only"
      ]
    },
    "sections": {
      "description": "Section names to retrieve, each copied verbatim from a prior outline response (kind: outline). Omit for the full document — which returns a §/Artikel/Anlage outline instead when the markdown overflows the byte budget. Applies to text formats; ignored for urls_only.",
      "type": "array",
      "items": {
        "type": "string"
      }
    }
  },
  "required": [
    "format"
  ],
  "additionalProperties": false
}
view source ↗

ris_track_changes

open-world

Track every document added or changed in one RIS application within an exact date window (changed_from/changed_to) via the History controller, 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 History name aliases are handled internally. 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.

read
invocation
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "ris_track_changes",
    "arguments": {
      "application": "<application>"
    }
  }
}
schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "application": {
      "type": "string",
      "enum": [
        "BrKons",
        "BgblAuth",
        "BgblPdf",
        "BgblAlt",
        "Begut",
        "RegV",
        "Erv",
        "LrKons",
        "LgblAuth",
        "Lgbl",
        "LgblNO",
        "Vbl",
        "Bvb",
        "Gr",
        "GrA",
        "Vfgh",
        "Vwgh",
        "Normenliste",
        "Justiz",
        "Bvwg",
        "Lvwg",
        "Dsk",
        "Dok",
        "Pvak",
        "Gbk",
        "Uvs",
        "AsylGH",
        "Ubas",
        "Umse",
        "Bks",
        "Verg",
        "PruefGewO",
        "Avsv",
        "Spg",
        "Avn",
        "KmGer",
        "Upts",
        "Mrp",
        "Erlaesse"
      ],
      "description": "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."
    },
    "changed_from": {
      "description": "Include documents changed on/after this date (YYYY-MM-DD, AenderungenVon). Exact date, not a coarse interval.",
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
    },
    "changed_to": {
      "description": "Include documents changed on/before this date (YYYY-MM-DD, AenderungenBis).",
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
    },
    "include_deleted": {
      "description": "true also returns documents removed from RIS in the window, as deleted records — the only way to observe deletions.",
      "type": "boolean"
    },
    "page": {
      "description": "1-based result page. Default 1.",
      "type": "integer",
      "minimum": 1,
      "maximum": 9007199254740991
    },
    "page_size": {
      "description": "Documents per page — RIS accepts 10, 20, 50, or 100. Default 20.",
      "anyOf": [
        {
          "type": "number",
          "const": 10
        },
        {
          "type": "number",
          "const": 20
        },
        {
          "type": "number",
          "const": 50
        },
        {
          "type": "number",
          "const": 100
        }
      ]
    }
  },
  "required": [
    "application"
  ],
  "additionalProperties": false
}
view source ↗

ris_list_reference

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.

read
invocation
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "ris_list_reference",
    "arguments": {
      "topic": "<topic>"
    }
  }
}
schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "topic": {
      "type": "string",
      "enum": [
        "applications",
        "courts",
        "states",
        "decision_types",
        "decision_kinds",
        "issuing_bodies",
        "ministries",
        "collections",
        "stages",
        "changed_since_intervals",
        "section_types",
        "gazette_parts",
        "law_types",
        "district_authorities",
        "justiz_subject_areas",
        "search_syntax",
        "citation_formats"
      ],
      "description": "Which reference table to return. Pick the topic named in the error recovery hint or zero-hit notice that sent you here."
    }
  },
  "required": [
    "topic"
  ],
  "additionalProperties": false
}
view source ↗

Resources

1

Markdown text of one RIS document — the injectable twin of ris_get_document (markdown format). Addressed by application code and technical document number, both copied verbatim from a ris_search_* or ris_lookup_citation result. Applications that publish no text rendition (district/municipal promulgations, court rules, party-transparency decisions, council minutes, and the 1848–1940 imperial gazettes) return a short note pointing at the authentic PDF or scan instead.

uri ris://document/{application}/{documentNumber} mime text/markdown