io.github.cyanheads/ris-austria-mcp-server
REMOTE · RIS-AUSTRIA.CASEYJHAND.COM · 2 COMPONENTS
Search Austrian federal and state law, court decisions, and the authentic Bundesgesetzblatt (RIS).
Available components
Last scanned (47 minutes ago)
Scores higher than 87% of remote servers
Reachable. Last reached 5 Nov 2026.
Category Education and Research
How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score → Why this is hard to score →
Endpoint Security83
- The endpoint's TLS certificate is valid, in date, and uses a strong key. View diagnostics → Pass
- No authorisation is required to call this server. Every tool declares its destructiveHint and none is destructive, so open access doesn't expose one. See how to fix → View diagnostics → Partial
- HTTPS is enforced; there's no plaintext access path. View diagnostics → Pass
- The HSTS (Strict-Transport-Security) header is present. View diagnostics → Pass
- DNSSEC is configured correctly; the domain's records validate against the full chain to the root. View diagnostics → Pass
Transport & Reachability100
- Verified streamable-http transport via a live MCP handshake. View diagnostics → Pass
Schema Quality & AI Usability71
- 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
- AI-judged instruction clarity (excellent).Pass
- Context-footprint check failed: tool/resource definitions use about 10311 tokens (~1031/item across 10 items; 9 tools + 1 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management67
- Stability check failed: schema churn in the 30 days we've observed: 0 tool removals, 6 breaking changes, 0 auth/transport breaks, 0 additions. See how to fix → Fail
Tool Coverage100
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 100% of tool parameters carry a description.Pass
- Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- We read all 9 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
- An AI judge read all 11 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a current MCP spec version (2026-07-28).Pass
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 31 Oct 26 0
- Tool “ris_get_document” rewrote its description, which is the text the model reads security
- Tool “ris_lookup_citation” rewrote its description, which is the text the model reads security
- Server version: 0.6.0 → 0.6.1 functional
- “ris_search_legislation” reworded the description of “entered_force_to” cosmetic
- “ris_search_legislation” reworded the description of “left_force_from” cosmetic
- “ris_search_announcements” reworded the description of “in_force_as_of” cosmetic
- “ris_get_document” reworded the description of “format” cosmetic
- “ris_search_announcements” reworded the description of “entered_force_from” cosmetic
- “ris_search_announcements” reworded the description of “entered_force_to” cosmetic
- 28 Oct 26 +3
- Schema quality: unverified → 100 ▲ functional
- New resource “ris-austria-guide” functional
- Server version: 0.5.5 → 0.6.0 functional
- 25 Oct 26 −5
- Stability: pass → fail ▼ security
- Tool “ris_lookup_citation” rewrote its description, which is the text the model reads security
- Server version: 0.5.4 → 0.5.5 functional
- 24 Oct 26 0
- Tool “ris_lookup_citation” rewrote its description, which is the text the model reads security
- Tool “ris_track_changes” rewrote its description, which is the text the model reads security
- “ris_search_legislation” changed the type of “page_size”: number → integer ▼ functional
- “ris_search_gazette” changed the type of “page_size”: number → integer ▼ functional
- “ris_search_drafts” changed the type of “page_size”: number → integer ▼ functional
- “ris_search_case_law” changed the type of “page_size”: number → integer ▼ functional
- “ris_search_announcements” changed the type of “page_size”: number → integer ▼ functional
- “ris_track_changes” changed the type of “page_size”: number → integer ▼ functional
- Server version: 0.5.3 → 0.5.4 functional
- Server version: 0.5.2 → 0.5.3 functional
- “ris_search_legislation” reworded the description of “page_size” cosmetic
- “ris_search_gazette” reworded the description of “page_size” cosmetic
- “ris_search_drafts” reworded the description of “page_size” cosmetic
- “ris_search_case_law” reworded the description of “page_size” cosmetic
- “ris_search_announcements” reworded the description of “page_size” cosmetic
- “ris_track_changes” reworded the description of “page_size” cosmetic
- 17 Oct 26 −1
- The server rewrote its instructions, which are the text every model session reads security
- Tool “ris_track_changes” rewrote its description, which is the text the model reads security
- Tool “ris_search_case_law” rewrote its description, which is the text the model reads security
- Tool “ris_lookup_citation” rewrote its description, which is the text the model reads security
- Tool “ris_get_document” rewrote its description, which is the text the model reads security
- Schema quality: 941 → 1038 ▼ functional
- Server version: 0.5.1 → 0.5.2 functional
- “ris_search_gazette” reworded the description of “number” cosmetic
- “ris_search_case_law” reworded the description of “issuing_body” cosmetic
- “ris_lookup_citation” reworded the description of “court” cosmetic
- “ris_lookup_citation” reworded the description of “citation” cosmetic
- “ris_search_announcements” reworded the description of “type” cosmetic
- 28 Sept 26 0
- We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
- 25 Sept 26 0
- We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
- 19 Sept 26 0
- Server version: 0.4.3 → 0.4.4 functional
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 5 Nov 2026 · Probed https://ris-austria.caseyjhand.com/mcp
TLS valid
Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .
| Subject | Issuer | Valid from | Valid until | Key | Signature | Serial |
|---|---|---|---|---|---|---|
| CN=caseyjhand.com | CN=WE1,O=Google Trust Services,C=US | 2 Nov 2026 | 31 Jan 2027 | ECDSA 256 | ECDSA-SHA256 | 995a30681ab772540e934241ca1d576c |
| SANs: caseyjhand.com, *.caseyjhand.com | ||||||
| CN=WE1,O=Google Trust Services,C=US (CA) | CN=GTS Root R4,O=Google Trust Services LLC,C=US | 13 Dec 2023 | 20 Feb 2029 | ECDSA 256 | ECDSA-SHA384 | 7ff31977972c224a76155d13b6d685e3 |
| CN=GTS Root R4,O=Google Trust Services LLC,C=US (CA) | CN=GlobalSign Root CA,OU=Root CA,O=GlobalSign nv-sa,C=BE | 15 Nov 2023 | 28 Jan 2028 | ECDSA 384 | SHA256-RSA | 7fe530bf331343bedd821610493d8a1b |
Background: What to check on a remote MCP endpoint →
DNSSEC secure
Validation of ris-austria.caseyjhand.com. — Secure
| Zone | DS | Keys | Algorithms | Outcome |
|---|---|---|---|---|
| . | trust_anchor | 20326, 38696 | 8, 8 | Verified |
| com. | present | 19718 | 13 | Verified |
| caseyjhand.com. | present | 2371 | 13 | Verified |
| ris-austria.caseyjhand.com. | Verified address RRset verified with the apex keys |
Authentication No authorisation required
The endpoint answered without asking for a token. Anyone who knows the URL can reach it.
| Result | No authorisation required |
|---|---|
| HTTP status | 200 |
| Header | Value |
|---|---|
| strict-transport-security | max-age=63072000; includeSubDomains; preload |
| x-content-type-options | nosniff |
Background: How OAuth 2.1 works in the 2026 MCP spec →
Transports 2 probes
| Transport | URL | Outcome | Status | Location |
|---|---|---|---|---|
| streamable-http | https://ris-austria.caseyjhand.com/mcp | Verified | 200 | |
| http (plaintext) | http://ris-austria.caseyjhand.com/mcp | HTTPS enforced | 301 | https://ris-austria.caseyjhand.com/mcp |
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
ris_get_document Get RIS Document ~1,363
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, or the PDF’s extracted text where a PDF is the only rendition), 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. Where a PDF is the only rendition — those PDF-only and authentic-PDF-only applications, and a draft companion filed with no html twin — markdown returns the text extracted from it (text_source: pdf, a "--- Page N of M ---" line before each page, a notice naming the PDF); for an authentic application the signed PDF stays the binding artifact to cite. html and xml there, every format on BgblAlt, and a PDF whose text cannot be extracted (a scan with no text layer — no OCR is performed — or an oversized, unreadable, or unreachable file) return 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…
| Name | Type | Req | Description |
|---|---|---|---|
| application | string | – | RIS application the document belongs to (e.g. BrKons, Dsk, BgblAuth) — copy verbatim from the same result. Required with document_number. Codes and coverage: ris_list_reference topic applications. |
| document_number | string | – | 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 wi… |
| document_url | string | – | A /Dokumente/… rendition URL on https://www.ris.bka.gv.at or https://ogd.ris.bka.gv.at, passed exactly as a result’s content_urls returned it — the alternative to document_number + application. Also… |
| format | string | – | markdown (default — the HTML rendition converted to markdown, or the text extracted from the PDF where a PDF is the document’s only rendition; the format for reading), html (raw HTML rendition), xml… |
| sections | array | – | Entry names to retrieve, each copied verbatim from a prior outline response (kind: outline) — §/Artikel/Anlage section names, or window names of the form "Part 2 of 6". Omit for the full document, wh… |
| Name | Type | Req | Description |
|---|---|---|---|
| application | string | – | RIS application the document belongs to (echoed). |
| authentic_pdf_url | string | – | The amtssigniert authentic PDF (.pdfsig, Authentisch DataType) — the legally binding artifact — where the application publishes one. |
| binding_status | string | – | Legal binding status: authentic (amtssigniert, legally binding), consolidated_informational (consolidated view — not binding), historical_record (superseded/pre-e-Recht promulgation), decision (court… |
| byte_size | number | – | Full UTF-8 byte size of the document text. Present when text was fetched — for an overflowed document (kind: outline) or an over-budget html/xml rendition (kind: link) this reports the full text’s si… |
| content_urls | object | – | Constructed rendition URLs. Empty for authentic-PDF-only (Bvb/GrA/KmGer) and metadata-only (BgblAlt) applications — see authentic_pdf_url and the notice. For a companion document (a draft’s Erläuteru… |
| document_number | string | – | Technical RIS document number (echoed). |
| error | object | – | Present when the call failed. Absent on success. |
| format | string | – | The format served — echoes the requested format. |
| kind | string | – | full — the complete response (document text, selected entries, or rendition URLs). outline — sections lists the retrievable entries instead of the text, either because the markdown overflowed the byt… |
| notice | string | – | Present when the text was extracted from a PDF (names the PDF and what extraction loses, ahead of any other notice below), when an html rendition carries only page images and its PDF has no extractab… |
| sections | array | – | Present when kind = outline: the document’s addressable entries, each with its UTF-8 byte size — §/Artikel/Anlage sections listed largest first, or, when the markdown carries no such headings, Part n… |
| text | string | – | The document text in the requested format. Markdown writes every image as an absolute URL on the content host. For markdown on a document whose only rendition is a PDF, or whose html rendition carrie… |
| text_source | string | – | Where the markdown text (or the outline it was cut from) came from: html — converted from the HTML rendition; pdf — extracted from the PDF, the document’s only readable rendition, so line breaks, tab… |
| truncated | boolean | – | Present and true when the full text isn’t inline. kind: outline — the markdown overflowed the byte budget or a sections:[…] selector matched nothing (the notice names which); retrieve entries via the… |
No examples provided.
ris_list_reference RIS Reference Lists ~243
Ground the opaque German codes across the RIS surface — static and offline, no upstream call. Topics: applications (all 39, with coverage windows, binding status, and content formats), courts (17 codes with Geschäftszahl examples and successor mapping), states (the three Bundesland request spellings), decision_types, decision_kinds (per-court Entscheidungsart values), issuing_bodies (dsk/dok/pvak/verg bodies and social-insurance issuers), ministries (abbreviations and full designations, historical included), collections (the 7 announcement collections and their parameter matrix), stages (lawmaking pipeline), changed_since_intervals, section_types, gazette_parts (BGBl parts and era tiers), law_types, district_authorities (all Bezirksverwaltungsbehörden), justiz_subject_areas (Fachgebiet taxonomy), search_syntax (operators and wildcard rules), and citation_formats (the shapes ris_lookup_citation parses). Recovery hints from the other ris_* tools route here.
| Name | Type | Req | Description |
|---|---|---|---|
| topic | string | yes | Which reference table to return. Pick the topic named in the error recovery hint or zero-hit notice that sent you here. |
| Name | Type | Req | Description |
|---|---|---|---|
| entries | array | – | Reference entries for the topic. |
| error | object | – | Present when the call failed. Absent on success. |
| notes | array | – | Topic-level caveats and usage guidance. Empty when none apply. |
| summary | string | – | What this topic covers and which tool parameters consume its values. |
| topic | string | – | The requested topic, echoed back. |
No examples provided.
ris_lookup_citation Resolve Austrian Legal Citation ~1,471
Resolve a single Austrian legal citation to its canonical RIS document deterministically — no keyword search. Four routes are auto-detected from the citation shape (or forced with kind): a norm citation — section-first ("§ 6 DSG", "Art 10 B-VG"), abbreviation-first ("DSG §1", "EMRK Art8", the shape ris_search_case_law returns in norms_cited; a comma-joined entry like "DSG §1, §24", or one joining full norms with ". " like "ZPO §179. ZPO §275 Abs2", resolves its first provision and names the rest), or a bare abbreviation like "ABGB" or "1. COVID-19-JuBG", with sub-provisions (Abs, Z, lit, "(1)"), the version a law is cited in ("ABGB idF 2. ErwSchG §254", "ABGB aF §140"), and a terminal ";" dropped, and a long title read by its short form after the dash ("StaatsanwaltschaftsG - StAG §35") — resolves through consolidated federal law, or a Bundesland with a state hint, as in force today or on in_force_as_of, while an EU act RIS does not consolidate (DSGVO, the Charter, EuGVVO, the EC Treaty as EG, EGV, or EG-Vertrag), or an EU act cited by its number ("RL 2006/123/EG", "VO (EG) 178/2002"), returns found: false pointing to EUR-Lex without a search; a gazette citation ("BGBl. I Nr. 165/1999", year-first "BGBl I 2018/24", pre-2004 "BGBl. Nr. 194/1961", imperial "RGBl. Nr. 189/1902", "StGBl. Nr. 1/1945", or "LGBl. Nr. 61/2026" with a state hint) routes to the right federal era tier by year — the 1945 Staatsgesetzblatt sits in the 1945–2003 tier beside the BGBl. — or to a state Landesgesetzblatt — falling back to that Bundesland’s pre-e-Recht series when the citation predates its switch; a case number ("Ro 2026/03/0016", "G 287/2022", "14Os49/26a", "2025-0.934.677", "W256 …") is matched to its court — a leading VfGH, VwGH, OGH, BVwG, or DSB names it ("VfGH G 13/2025"), court skips detection, and ambiguous formats probe up to two courts; an ECLI ("ECLI:AT:VFGH:2026:G13.2025") resolves to the decision that carries it; a collection number ("VfSlg 19.632/2012", "VwSlg 18.000 A/…
| Name | Type | Req | Description |
|---|---|---|---|
| citation | string | yes | The legal citation to resolve, e.g. "§ 6 DSG" or "DSG §1", "Art 10 B-VG", "BGBl. I Nr. 165/1999" or "BGBl I 2018/24", "Ro 2026/03/0016" or "VfGH G 13/2025", "ECLI:AT:VFGH:2026:G13.2025", or "VfSlg 19… |
| court | string | – | Court hint for a case number — short-circuits court detection, and a leading court name, to this court. An ECLI’s own court segment takes precedence; the hint is searched only for a segment this look… |
| in_force_as_of | string | – | For a norm, resolve the version in force on this date (YYYY-MM-DD). Defaults to today in Austria. |
| kind | string | – | Force a route, or auto (default) to classify by shape. Set explicitly when the citation shape is ambiguous. |
| state | string | – | Bundesland hint — routes a norm to that state’s consolidated law (LrKons) and an LGBl. gazette to that state’s Landesgesetzblatt (LgblAuth, then the legacy Lgbl series for a citation predating the st… |
| Name | Type | Req | Description |
|---|---|---|---|
| alternatives_count | number | – | Documents that also matched beyond the one returned — present only when more than one matched. List them all with the search tool named in resolution_note. |
| error | object | – | Present when the call failed. Absent on success. |
| found | boolean | – | True when the citation resolved to a single best-matching document. |
| guidance | string | – | Next-step guidance naming a concrete tool. Present when found is false. |
| kind | string | – | What the citation parsed as — "unknown" when it did not classify into any route. |
| record | object | – | The resolved document, in the same normalized shape the corresponding search tool returns — ris_search_legislation for a norm, ris_search_case_law for a case or collection number, ris_search_gazette… |
| resolution_note | string | – | Which application and filter resolved the citation. Present when found is true. |
No examples provided.
ris_search_announcements Search Official Announcements ~1,486
Search Austria’s sectoral official gazettes and executive documents — seven collections behind one collection enum: social_insurance (Amtliche Verlautbarungen der Sozialversicherung, authentic), veterinary (Amtliche Veterinärnachrichten, authentic), court_rules (Kundmachungen der Gerichte — rules of procedure and case-allocation plans, authentic; currently LVwG Tirol and Vorarlberg only), trade_exam_rules (Prüfungsordnungen gemäß Gewerbeordnung, authentic), health_structure_plans (Strukturpläne Gesundheit — federal ÖSG and per-state RSG, authentic), ministerial_decrees (Erlässe der Bundesministerien — decrees interpreting law; bind the administration, not citizens), and council_minutes (Ministerratsprotokolle — council-of-ministers session records). Each collection accepts a different filter set: query and title are broadly available; number, published_from/to, in_force_as_of, issuer (ministry and social-insurance carrier abbreviations expanded), norm ("decrees citing the DSG"), case_number, type, department, plan_type/plan_state (health plans), session_number/legislature (council minutes), and changed_since (all but social_insurance and veterinary) apply where the collection supports them — a filter outside its set is rejected locally. Every result carries a binding label, the authentic PDF where it exists, and the RIS web view (document_url) — the only browsable surface for the PDF-only council minutes and for ministerial decrees. Per-collection parameter matrix and issuers: ris_list_reference topic collections or issuing_bodies.
| Name | Type | Req | Description |
|---|---|---|---|
| case_number | string | – | Business reference number (Geschäftszahl) — veterinary and ministerial_decrees only. Omit to leave unfiltered; a blank value is rejected. |
| changed_since | string | – | Coarse recency filter — documents changed in RIS within the interval. Every collection except social_insurance and veterinary, where RIS ignores it: use published_from there, or ris_track_changes for… |
| collection | string | yes | Which collection to search — one per call. social_insurance | veterinary | court_rules | trade_exam_rules | health_structure_plans | ministerial_decrees | council_minutes. Per-collection filter matri… |
| department | string | – | Ministry department (Abteilung) — ministerial_decrees only. Omit to leave unfiltered; a blank value is rejected. |
| entered_force_from | string | – | Provisions that entered force on/after this date (YYYY-MM-DD) — ministerial_decrees only. RIS also returns decrees with no recorded entry-into-force date, for any date; they carry no in_force_from. |
| entered_force_to | string | – | Provisions that entered force on/before this date (YYYY-MM-DD) — ministerial_decrees only. RIS also returns decrees with no recorded entry-into-force date, for any date; they carry no in_force_from. |
| in_force_as_of | string | – | Version in force on this date (YYYY-MM-DD) — veterinary, court_rules, trade_exam_rules, health_structure_plans, ministerial_decrees (the consolidated-ish collections). RIS also returns documents with… |
| issuer | string | – | Issuing body — social_insurance (Urheber: a carrier abbreviation such as ÖGK, DVSV, SVS, BVAEB, AUVA, or PVA is expanded to its full designation; a full designation or a "<ABBR> Gesamtvertrag" series… |
| legislature | string | – | Legislative period (Gesetzgebungsperiode, e.g. "XXVII") — council_minutes only. Omit to leave unfiltered; a blank value is rejected. |
| norm | string | – | Cited-provision filter (Norm) — "DSG §1", "DSGVO Art32" style. veterinary and ministerial_decrees only ("decrees citing the DSG"). Omit to leave unfiltered; a blank value is rejected. |
| number | string | – | Serial number (Avsvnummer / Avnnummer / Spgnummer) — social_insurance, veterinary, health_structure_plans. Omit to leave unfiltered; a blank value is rejected. |
| page | integer | – | 1-based result page. Default 1. |
| page_size | integer | – | Documents per page, 1–100 (default 20). Served as a page of 10 (1–10) or 20 (11–100), with a notice when that differs. For more results, keep the size and raise page. |
| plan_state | string | – | 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. |
| plan_type | string | – | health_structure_plans only. Plan kind — all (default), expert_opinion (Gutachten), or regulation (Verordnungen). Searches the federal ÖSG unless plan_state is set. |
| published_from | string | – | 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). |
| published_to | string | – | Latest publication/session date (YYYY-MM-DD). |
| query | string | – | Full-text search (Suchworte). Boolean operators UND/ODER/NICHT or AND/OR/NOT, parentheses, quoted phrases; wildcard * is trailing-only. Valid for all collections. Omit to leave unfiltered; a blank va… |
| session_number | string | – | Council session number (Sitzungsnummer) — council_minutes only. Omit to leave unfiltered; a blank value is rejected. |
| sort_by | string | – | Sort column: published or number, where the collection has the column. Default: upstream order. |
| sort_direction | string | – | Sort direction; applies with sort_by. |
| title | string | – | Title search (Titel) — phrase field. Valid for all collections except council_minutes. Omit to leave unfiltered; a blank value is rejected. |
| type | string | – | Document type (Typ) — trade_exam_rules (Befaehigungspruefungsordnung | Meisterpruefungsordnung | HoehereBerufsqualifikation | Fachdiplom | HoeheresFachdiplom), court_rules (Geschaeftsordnung | Gescha… |
| Name | Type | Req | Description |
|---|---|---|---|
| error | object | – | Present when the call failed. Absent on success. |
| notice | string | – | The served page size when it differs from page_size; then, under an in-force filter, how many rows on this page have no in_force_from (RIS returns undated documents for any date); then zero-hit guida… |
| page | number | – | 1-based page number RIS served. |
| pageSize | number | – | Page size RIS applied. |
| results | array | – | Matching documents for the requested page. Totals and paging in enrichment. |
| totalCount | number | – | Total matching documents across all pages. |
| truncated | boolean | – | Present and true when more pages exist beyond this one — raise page to continue. |
No examples provided.
ris_search_case_law Search Austrian Case Law ~1,597
Search Austrian case law (Judikatur) in ONE court or tribunal per call — court is required: vfgh (Constitutional Court), vwgh (Supreme Administrative Court), justiz (ordinary courts incl. OGH, selected decisions), bvwg (federal administrative), lvwg (state administrative), dsk (data protection authority), normenliste (VwGH norm index), dok, pvak, gbk, verg, upts (party transparency), and the historical uvs, asylgh, ubas, umse, bks. Cross-court research is one call per court (calls are cheap); historical bodies are closed windows with successors — codes, windows, and Geschäftszahl examples: ris_list_reference topic courts. Filter by full-text query, cited norm ("DSG §1", "DSGVO Art32" — the highest-value filter), exact case_number (Geschäftszahl), decision date range, decision_type (headnote vs full text), decision_kind, or the court-conditional filters: issuing_body (dsk/dok/pvak/verg), court_name/legal_area/subject_area (justiz), state (lvwg/uvs), party (upts), commission/senate/discrimination_ground (gbk), subject_law (bks), collection_number (vfgh/vwgh/uvs). For a known Geschäftszahl, ECLI, or VfSlg/VwSlg cite, ris_lookup_citation resolves it directly.
| Name | Type | Req | Description |
|---|---|---|---|
| case_number | string | – | Exact Geschäftszahl — returns that decision’s documents. Formats differ per court (examples: ris_list_reference topic courts). Not available for normenliste. Omit to leave unfiltered; a blank value i… |
| changed_since | string | – | Coarse recency filter — decisions changed in RIS within the interval. For exact windows use ris_track_changes. |
| collection_number | string | – | Official collection number (Sammlungsnummer). vfgh, vwgh, and uvs only, and the accepted form differs: vfgh and uvs store the bare number and match it dotted or undotted ("19632", "19.632"), while vw… |
| commission | string | – | Equal-treatment commission (gbk only): federal (Bundes-Gleichbehandlungskommission) or general (Gleichbehandlungskommission). |
| court | string | yes | Which court/tribunal application to search — one per call. Codes, coverage windows, and successor mapping: ris_list_reference topic courts. |
| court_name | string | – | Filter within the ordinary courts (justiz only) — "OGH", "OLG Wien", "LG Linz". Omit to leave unfiltered; a blank value is rejected. |
| decided_from | string | – | Earliest decision date (YYYY-MM-DD). Not available for normenliste. |
| decided_to | string | – | Latest decision date (YYYY-MM-DD). |
| decision_kind | string | – | 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 justi… |
| decision_type | string | – | Search headnotes (Rechtssätze), full decision texts (Entscheidungstexte), or both (all, the default). Not available for gbk, upts, or normenliste. |
| discrimination_ground | string | – | Discrimination ground (gbk only): Alter (age), EthnischeZugehoerigkeit (ethnic origin), Geschlecht (gender/sex), Mehrfachdiskriminierung (multiple grounds), Religion (religion), SexuelleOrientierung… |
| issuing_body | string | – | Deciding body (EntscheidendeBehoerde) — dsk, dok, pvak, and verg only. dsk: Datenschutzbehoerde (2014+), Datenschutzkommission (up to 2013), or ParlamentarischesDatenschutzkomitee (2025+); pvak: Pers… |
| legal_area | string | – | Legal area (Rechtsgebiet, justiz only): civil (Zivilrecht) or criminal (Strafrecht). |
| norm | string | – | Cited-provision filter (Norm) — "DSG §1", "DSGVO Art32", "GewO 1994 §129", matching the format returned in norms_cited. The highest-value case-law filter. Omit to leave unfiltered; a blank value is r… |
| page | integer | – | 1-based result page. Default 1. |
| page_size | integer | – | Documents per page, 1–100 (default 20). Served as a page of 10 (1–10) or 20 (11–100), with a notice when that differs. For more results, keep the size and raise page. |
| party | string | – | 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"). Om… |
| query | string | – | Full-text search over decisions (Suchworte). Boolean UND/ODER/NICHT or AND/OR/NOT, quoted phrases, trailing-only * wildcard. Omit to leave unfiltered; a blank value is rejected. |
| senate | string | – | Commission senate (gbk only). |
| sort_by | string | – | Sort column. Default: upstream order. Not available for court: normenliste, which indexes laws rather than decisions. |
| sort_direction | string | – | Sort direction; applies with sort_by. |
| state | string | – | Which of the nine state administrative courts/senates to search (lvwg and uvs only). |
| subject_area | string | – | 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… |
| subject_law | string | – | Media statute the case concerns (Bereich, bks only) — e.g. "ORF-Gesetz", "Privatradiogesetz". Omit to leave unfiltered; a blank value is rejected. |
| Name | Type | Req | Description |
|---|---|---|---|
| error | object | – | Present when the call failed. Absent on success. |
| notice | string | – | The served page size when it differs from page_size, then zero-hit guidance — the likely cause and the concrete next call. A reversed window (decided_from later than decided_to) is answered without a… |
| page | number | – | 1-based page number RIS served. |
| pageSize | number | – | Page size RIS applied. |
| results | array | – | Matching documents for the requested page — decisions, or indexed laws under court normenliste. Totals and paging in enrichment. |
| totalCount | number | – | Total matching documents across all pages. |
| truncated | boolean | – | Present and true when more pages exist beyond this one — raise page to continue. |
No examples provided.
ris_search_drafts Search Draft Legislation ~734
Search Austria’s federal lawmaking pipeline BEFORE promulgation — the monitoring counterpart to ris_search_gazette (what will become law). stage selects the phase: review_drafts (Begutachtungsentwürfe — draft laws a ministry has put into public review, before any government bill exists) or government_bills (Regierungsvorlagen — bills the council of ministers adopted and submitted to parliament, 2004+). Filter by query (full text), title, ministry (accepts an abbreviation like "BMF" — expanded to RIS’s exact designation; the historical name at submission time counts), in_review_on (review_drafts only — drafts whose review window covers the date; today = "what is in Begutachtung right now"), or decided_from/to (government_bills only — council adoption date). changed_since gives coarse recency. Each record carries materials — the companion documents filed with the draft (Erläuterungen, Textgegenüberstellung, Vorblatt/WFA, covering letter, annexes); the Erläuterungen carry the drafting reasoning the bill text omits, and passing a materials[].url to ris_get_document as document_url is the only way to read one (format there picks the rendition returned). Documents are preparatory, not binding law. Ministry codes: ris_list_reference topic ministries.
| Name | Type | Req | Description |
|---|---|---|---|
| changed_since | string | – | Coarse recency filter — documents changed in RIS within the interval. For exact windows use ris_track_changes. |
| decided_from | string | – | government_bills only. Earliest council-of-ministers adoption date (YYYY-MM-DD). |
| decided_to | string | – | government_bills only. Latest adoption date (YYYY-MM-DD). |
| in_review_on | string | – | review_drafts only. Drafts whose public-review window covers this date (YYYY-MM-DD). Today = drafts currently in Begutachtung. |
| ministry | string | – | Submitting ministry (EinbringendeStelle). Accepts an abbreviation ("BMF", "BMWET") or a full designation; use the ministry’s name at the time of submission. An abbreviation missing from the table is… |
| page | integer | – | 1-based result page. Default 1. |
| page_size | integer | – | Documents per page, 1–100 (default 20). Served as a page of 10 (1–10) or 20 (11–100), with a notice when that differs. For more results, keep the size and raise page. |
| query | string | – | Full-text search (Suchworte). Boolean operators UND/ODER/NICHT or AND/OR/NOT, parentheses, quoted phrases; wildcard * is trailing-only. Omit to leave unfiltered; a blank value is rejected. |
| sort_by | string | – | Sort column: date (review deadline or adoption date per stage), ministry, or title. Default: upstream order. |
| sort_direction | string | – | Sort direction; applies with sort_by. |
| stage | string | yes | Which pipeline stage to search — one per call. review_drafts (Begut, ministerial review) or government_bills (RegV, council-adopted bills). Details: ris_list_reference topic stages. |
| title | string | – | Title search (Titel) — phrase field: * allowed leading or trailing with ≥2 characters beside it. Omit to leave unfiltered; a blank value is rejected. |
| Name | Type | Req | Description |
|---|---|---|---|
| error | object | – | Present when the call failed. Absent on success. |
| notice | string | – | The served page size when it differs from page_size, then zero-hit guidance — the likely cause and the concrete next call. A reversed window (decided_from later than decided_to) is answered without a… |
| page | number | – | 1-based page number RIS served. |
| pageSize | number | – | Page size RIS applied. |
| results | array | – | Matching pipeline documents for the requested page. Totals and paging in enrichment. |
| totalCount | number | – | Total matching documents across all pages. |
| truncated | boolean | – | Present and true when more pages exist beyond this one — raise page to continue. |
No examples provided.
ris_search_gazette Search Austrian Gazettes ~1,384
Browse Austria’s promulgation record — the authentic, legally binding gazettes — at every level of government. scope picks the jurisdiction: federal (default; the Bundesgesetzblatt across three era tiers auto-routed by year — BgblAuth 2004+ authentic, BgblPdf 1945–2003, BgblAlt 1848–1940 metadata-only ÖNB scans; one call serves one tier, so a published_from/published_to interval crossing 2004-01-01 or 1945-01-01 is rejected with the boundaries to split at, and RIS carries no federal gazette for 1941–1944), one Bundesland (its Landesgesetzblatt), district (Bezirke promulgations), or municipal (Gemeinde promulgations). For a state scope, series selects law gazettes (law_gazette, the default → LGBl) vs ordinance gazettes (ordinance_gazette → Verordnungsblätter, currently Tirol only), and state_era picks which era of that series to search: current (the default → the authentic LGBl) or legacy (the state’s earlier non-authentic series — Niederösterreich’s systematic LgblNO, or the older Lgbl elsewhere; Wien carries neither, and ordinance gazettes have no legacy series). Filter by query (full text), title, number ("171/2026" — a pre-2004 number auto-routes to the right era tier), part (federal I/II/III or pre_1997), type (laws/regulations/announcements/other), published_from/to, issuer (federal or ordinance gazettes only), district_authority (district only), or municipality (municipal only). Every result carries a binding label (authentic vs historical_record vs consolidated_informational) and the amtssigniert authentic PDF wherever it exists — the binding artifact, never a paraphrase. For one known gazette number, ris_lookup_citation resolves it directly. Coverage windows, era tiers, and part semantics: ris_list_reference topic applications or gazette_parts.
| Name | Type | Req | Description |
|---|---|---|---|
| district_authority | string | – | District only. Bezirksverwaltungsbehörde name, e.g. "Bezirkshauptmannschaft Liezen" — full list: ris_list_reference topic district_authorities. Omit to leave unfiltered; a blank value is rejected. |
| issuer | string | – | Issuing body — federal (EinbringendeStelle: a ministry abbreviation such as "BMF" or a full designation; an abbreviation missing from ris_list_reference topic ministries is rejected, a full designati… |
| municipality | string | – | Municipal only. Exact municipality name (Gemeinde), RIS’s spelling. Omit to leave unfiltered; a blank value is rejected. |
| number | string | – | Gazette number, e.g. "171/2026" (federal; the cited form "BGBl. II Nr. 171/2026" works from 2004 only — earlier tiers match the bare "194/1961"), "61/2026" (state), a Kundmachungsnummer (district/mun… |
| page | integer | – | 1-based result page. Default 1. |
| page_size | integer | – | Documents per page, 1–100 (default 20). Served as a page of 10 (1–10) or 20 (11–100), with a notice when that differs. For more results, keep the size and raise page. |
| part | string | – | 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_re… |
| published_from | string | – | Earliest promulgation date (YYYY-MM-DD). A pre-2004 range routes a federal query to an earlier era tier. Federal: the interval must stay inside one tier — set published_to as well, since a one-sided… |
| published_to | string | – | Latest promulgation date (YYYY-MM-DD). Federal: the interval must stay inside one era tier, so pair it with published_from — an interval crossing 2004-01-01 or 1945-01-01 is rejected with the boundar… |
| query | string | – | Full-text search (Suchworte). Boolean operators UND/ODER/NICHT or AND/OR/NOT, parentheses, quoted phrases; wildcard * is trailing-only. Syntax: ris_list_reference topic search_syntax. Omit to leave u… |
| scope | string | – | Jurisdiction level: federal (default — the Bundesgesetzblatt, era tier auto-routed), a Bundesland (burgenland … wien, its Landesgesetzblatt), district (Bezirke promulgations), or municipal (Gemeinde… |
| series | string | – | State scopes only. law_gazette (default when omitted) searches the authentic Landesgesetzblatt; ordinance_gazette searches the Verordnungsblätter (Vbl — currently Tirol only, 2022+). |
| sort_by | string | – | Sort column: published (Kundmachungsdatum) or number. Availability varies by tier; default: upstream order. |
| sort_direction | string | – | Sort direction; applies with sort_by. |
| state_era | string | – | State scopes only. current (default when omitted) searches the authentic Landesgesetzblatt; legacy searches the state’s earlier non-authentic series — Niederösterreich’s systematic LgblNO collection,… |
| title | string | – | Title search (Titel) — phrase field: * allowed leading or trailing with ≥2 characters beside it. Omit to leave unfiltered; a blank value is rejected. |
| type | string | – | Document-type filter (Typ) for federal and state law gazettes: laws (Gesetze) | regulations (Verordnungen) | announcements (Kundmachungen) | other (Sonstiges). |
| Name | Type | Req | Description |
|---|---|---|---|
| error | object | – | Present when the call failed. Absent on success. |
| notice | string | – | The served page size when it differs from page_size, then zero-hit guidance — the likely cause and the concrete next call. A reversed window (published_from later than published_to) is answered witho… |
| page | number | – | 1-based page number RIS served. |
| pageSize | number | – | Page size RIS applied. |
| results | array | – | Matching gazette entries for the requested page. Totals, paging, and the served application in enrichment. |
| servedApplication | string | – | The RIS application that served the query — for federal, the single era tier auto-routed from the number’s year or the publication-date interval (BgblAuth 2004+, BgblPdf 1945–2003, BgblAlt 1848–1940)… |
| totalCount | number | – | Total matching entries across all pages. |
| truncated | boolean | – | Present and true when more pages exist beyond this one — raise page to continue. |
No examples provided.
ris_search_legislation Search Austrian Legislation ~1,174
Search Austrian consolidated law and English translations: federal law (scope: federal, the default), one Bundesland (scope: burgenland … wien), municipal law (municipality plus a state scope — selected norms in 6 Bundesländer), or English translations of selected federal laws (language: english, federal only, ~138 documents). One document is one § / Artikel / Anlage; fetch a whole law by filtering law_id. Searches apply the version in force today in Austria by default — set in_force_as_of for another date, include_all_versions: true for full version history, or an entered_force / left_force window for new-law and repeal tracking; the three version filters are mutually exclusive, and the applied date is echoed back in the result. query is full text (boolean UND/ODER/NICHT or AND/OR/NOT, trailing-only * wildcard); title matches title, short title, and abbreviation ("DSG"). For a specific citation like "§ 6 DSG", ris_lookup_citation resolves it deterministically instead. Consolidated text is informational, not legally binding — the authentic gazette artifact lives in ris_search_gazette.
| Name | Type | Req | Description |
|---|---|---|---|
| changed_since | string | – | Coarse recency filter — documents changed in RIS within the interval. For exact windows and deletions use ris_track_changes. |
| entered_force_from | string | – | 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. |
| entered_force_to | string | – | Provisions that entered force on/before this date (YYYY-MM-DD). Without entered_force_from, RIS also returns versions with no recorded entry-into-force date, which carry no in_force_from; set both bo… |
| in_force_as_of | string | – | 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. |
| include_all_versions | boolean | – | 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. |
| index | string | – | Systematik classification filter (e.g. "10/10 Datenschutz"). Federal/state consolidated law only. Omit to leave unfiltered; a blank value is rejected. |
| language | string | – | 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 ti… |
| law_id | string | – | Law-level grouping key (Gesetzesnummer, e.g. 10001597 = DSG) — exact match; returns every section of that law. Federal/state consolidated law only. Omit to leave unfiltered; a blank value is rejected. |
| left_force_from | string | – | Provisions that left force on/after this date (YYYY-MM-DD) — repeal tracking. Same exclusivity as entered_force_from. Without left_force_to, RIS also returns versions with no recorded end date, which… |
| left_force_to | string | – | Provisions that left force on/before this date (YYYY-MM-DD). |
| municipality | string | – | 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 Bund… |
| page | integer | – | 1-based result page. Default 1. |
| page_size | integer | – | Documents per page, 1–100 (default 20). Served as a page of 10 (1–10) or 20 (11–100), with a notice when that differs. For more results, keep the size and raise page. |
| query | string | – | 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 to… |
| scope | string | – | Jurisdiction: federal (default) searches consolidated federal law; a Bundesland searches that state’s consolidated law (or, with municipality set, its municipal law). |
| section_from | string | – | Start of a § / Artikel / Anlage number range, digits with optional letter ("6", "1a"). Federal/state consolidated law only. Omit to leave unfiltered; a blank value is rejected. |
| section_to | string | – | End of the section range. Equal to section_from for a single section. Omit to leave unfiltered; a blank value is rejected. |
| section_type | string | – | Which section kind the range addresses. Defaults to Paragraph when a section range is set. Values: ris_list_reference topic section_types. |
| sort_by | string | – | Sort column: section (§/Artikel/Anlage label) or in_force_date. Default: upstream order. Federal/state consolidated law only. |
| sort_direction | string | – | Sort direction; applies with sort_by. |
| title | string | – | Title search (Titel) — matches title, short title, and official abbreviation ("ABGB", "DSG"). Phrase field: * allowed leading or trailing with ≥2 characters beside it. Omit to leave unfiltered; a bla… |
| Name | Type | Req | Description |
|---|---|---|---|
| appliedInForceAsOf | string | – | The in-force date the server actually applied (defaulted to today in Austria when omitted). Absent when include_all_versions, a force-window, or language: english searched without a date filter. |
| error | object | – | Present when the call failed. Absent on success. |
| notice | string | – | The served page size when it differs from page_size; then, under a force window open on one side (entered_force_to without entered_force_from, left_force_from without left_force_to), how many rows on… |
| page | number | – | 1-based page number RIS served. |
| pageSize | number | – | Page size RIS applied. |
| results | array | – | Matching documents for the requested page. Totals and paging in enrichment. |
| totalCount | number | – | Total matching documents across all pages. |
| truncated | boolean | – | Present and true when more pages exist beyond this one — raise page to continue. |
No examples provided.
ris_track_changes Track RIS Changes ~417
Track every document added or changed in one RIS application within an exact date window (changed_from/changed_to), optionally including deletions (include_deleted) — the delta-sync and monitoring primitive for mirrors and watchers, and the only surface that reports removals. Unlike the search tools’ coarse, additive-only changed_since intervals, this is exact-dated and deletion-aware. application accepts every RIS application code listed by ris_list_reference topic applications, including BrKons, LrKons, Dsk, and BgblAuth. Each changed document comes back in a compact cross-class record — document_number (for ris_get_document), title, the section_label, law_id, and in-force window (in_force_from/in_force_until) of a consolidated-law row or the case_numbers and decision_date of a court decision, dates, binding_status, and rendition URLs — plus its last-changed date; removed documents come back as deleted records with a deletion timestamp. One application per call; page explicitly for large windows.
| Name | Type | Req | Description |
|---|---|---|---|
| application | string | yes | RIS application whose change feed to read, e.g. BrKons, LrKons, Dsk, or BgblAuth. All supported codes: ris_list_reference topic applications. |
| changed_from | string | – | Include documents changed on/after this date (YYYY-MM-DD, AenderungenVon). Exact date, not a coarse interval. |
| changed_to | string | – | Include documents changed on/before this date (YYYY-MM-DD, AenderungenBis). |
| include_deleted | boolean | – | true also returns documents removed from RIS in the window, as deleted records — the only way to observe deletions. |
| page | integer | – | 1-based result page. Default 1. |
| page_size | integer | – | Documents per page, 1–100 (default 20). Served as a page of 10 (1–10) or 20 (11–100), with a notice when that differs. For more results, keep the size and raise page. |
| Name | Type | Req | Description |
|---|---|---|---|
| application | string | – | The application whose change feed was read. |
| changedFrom | string | – | The changed_from bound as requested (echo), when set. |
| changedTo | string | – | The changed_to bound as requested (echo), when set. |
| error | object | – | Present when the call failed. Absent on success. |
| notice | string | – | The served page size when it differs from page_size, then zero-hit guidance — the likely cause and the concrete next call. A reversed window (changed_from later than changed_to) is answered without a… |
| page | number | – | 1-based page number RIS served. |
| pageSize | number | – | Page size RIS applied. |
| results | array | – | Change-feed entries for the requested page. Totals, paging, and the applied window in enrichment. |
| totalCount | number | – | Total change-feed entries across all pages. |
| truncated | boolean | – | Present and true when more pages exist beyond this one — raise page to continue. |
No examples provided.
How do I install the io.github.cyanheads/ris-austria-mcp-server server?
io.github.cyanheads/ris-austria-mcp-server is a hosted endpoint at https://ris-austria.caseyjhand.com/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
remote · ris-austria.caseyjhand.com
claude mcp add --transport http cyanheads-ris-austria-mcp-server 'https://ris-austria.caseyjhand.com/mcp'
What is the io.github.cyanheads/ris-austria-mcp-server server?
io.github.cyanheads/ris-austria-mcp-server is listed in the public MCP registry as io.github.cyanheads/ris-austria-mcp-server. Search Austrian federal and state law, court decisions, and the authentic Bundesgesetzblatt (RIS). This page covers its hosted endpoint (https://ris-austria.caseyjhand.com/mcp).
Is the io.github.cyanheads/ris-austria-mcp-server server safe to use?
io.github.cyanheads/ris-austria-mcp-server scores 83 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the io.github.cyanheads/ris-austria-mcp-server server expose?
io.github.cyanheads/ris-austria-mcp-server exposes 9 tools: ris_search_legislation, ris_search_case_law, ris_search_gazette, ris_search_drafts, ris_search_announcements, and 4 more. Their descriptions and schemas cost roughly 9,869 tokens of context every time the server is loaded.
Does the io.github.cyanheads/ris-austria-mcp-server server require authentication?
No. We connected to io.github.cyanheads/ris-austria-mcp-server without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.
Is the io.github.cyanheads/ris-austria-mcp-server server still maintained?
io.github.cyanheads/ris-austria-mcp-server is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.