PluginBench
MCP Server
Active
MIT

io.github.Honeyfield-Org/ris MCP Server

io.github.Honeyfield-Org/ris

Access Austrian laws, court decisions & legal documents via Austria's official RIS API.

What is the io.github.Honeyfield-Org/ris MCP server?

The RIS MCP Server is an MCP (Model Context Protocol) server that gives AI assistants access to Austria's official legal database — the Rechtsinformationssystem (RIS). It enables natural language queries against federal laws, state laws, court decisions, law gazettes, government bills, and other legal documents from Austria's Open Government Data API, with no API key required.

This server connects your AI assistant to Austria's comprehensive legal information system. You can search federal and state laws (ABGB, StGB, etc.), court decisions from 16 court types, law gazettes, government bills, and retrieve full document texts. It's useful for legal research, understanding Austrian legislation, tracking court precedents, and accessing official government legal documents in German.

How to install io.github.Honeyfield-Org/ris

Copy-paste configuration for popular MCP clients.

transport: stdio
Config generated by PluginBench — verify against the source before use.
~/Library/Application Support/Claude/claude_desktop_config.json
{
  "mcpServers": {
    "ris": {
      "command": "npx",
      "args": [
        "-y",
        "ris-mcp-ts"
      ]
    }
  }
}

Tools & capabilities

Tools this server exposes to the agent.

  • ris_bundesrecht — Search federal laws (ABGB, StGB, UGB, etc.) by full-text, title, section number, or historical version
  • ris_landesrecht — Search state/provincial laws for all 9 Austrian provinces by full-text, title, section, or province
  • ris_judikatur — Search court decisions from 16 court types (Supreme Court, Constitutional Court, Administrative Court, etc.) by full-text, court, legal area, or case number
  • ris_bundesgesetzblatt — Search Federal Law Gazette (BGBl I/II/III) publications by gazette number, year, or full-text
  • ris_landesgesetzblatt — Search State Law Gazettes (LGBl) by gazette number, year, province, or full-text
  • ris_regierungsvorlagen — Search government bills and draft legislation submitted to parliament
  • ris_dokument — Retrieve full document text by document ID or URL with smart prefix-based routing
  • ris_dokument_abschnitt — Return one section of a document by character offset for the document viewer widget
  • ris_bezirke — Search district authority announcements
  • ris_gemeinden — Search municipal law and regulations
  • ris_sonstige — Search miscellaneous legal collections (8 sub-applications)
  • ris_history — Track document change history across 36 application types
  • ris_verordnungen — Search state ordinance gazettes

Use cases

  • Search Austrian federal and state laws by keyword, section number, or title to understand legal requirements
  • Look up court decisions and case law from Austrian courts (Supreme Court, Constitutional Court, Administrative Court, etc.) by legal area or case number
  • Retrieve full text of specific laws, court decisions, or government bills by document ID
  • Track changes and historical versions of Austrian legal documents
  • Research Austrian law on specific topics like tenancy rights, consumer protection, or constitutional matters

io.github.Honeyfield-Org/ris MCP server FAQ

What is the RIS MCP Server?

It's an MCP server that connects your AI assistant to Austria's official legal database (Rechtsinformationssystem). You can ask your AI about Austrian laws, court decisions, and legal documents in natural language, and it retrieves results from the government's Open Government Data API.

Is it free to use?

Yes, it's completely free. It uses Austria's Open Government Data API and requires no API key.

How do I install it in Claude Desktop?

Add this to your Claude Desktop config file (Settings > Developer > Edit Config): {"mcpServers": {"ris": {"command": "npx", "args": ["-y", "ris-mcp-ts"]}}}

How do I use it in Cursor?

Add this to `.cursor/mcp.json` (or `~/.cursor/mcp.json` for global access): {"mcpServers": {"ris": {"command": "npx", "args": ["-y", "ris-mcp-ts"]}}}

What languages does it support?

The RIS database is in German, so queries work best in German. You can search for laws, court decisions, and legal documents in German.

Does it support interactive result lists?

Yes, in hosts that support MCP Apps (Claude, ChatGPT) you get an interactive result list with pagination and document links. In other clients you get full text results instead.

README (reference)

Source of truth, from the repository.

RIS MCP Server

CI npm version License: MIT Node.js MCP MCP Registry

An MCP (Model Context Protocol) server that gives AI assistants access to Austria's official legal database — the Rechtsinformationssystem (RIS).

Ask your AI assistant about Austrian law, and it will search and retrieve legal documents directly from the official government API. No API key required.

What You Can Do

Once connected, you can ask your AI assistant things like:

"What does Austrian law say about tenancy rights?"

"Find Constitutional Court decisions on freedom of expression."

"Show me §1295 of the ABGB (Austrian Civil Code)."

"What laws about climate protection were published in 2024?"

"Look up the building code for the province of Salzburg."

"Get the full text of document NOR40052761."

The server translates these natural language requests into structured API calls against the RIS Open Government Data API.

Features

  • 13 specialized tools covering all major RIS collections
  • Federal law (ABGB, StGB, UGB, ...) and state law for all 9 provinces
  • Court decisions from 16 court types (Supreme Court, Constitutional Court, Administrative Court, ...)
  • Law gazettes — Federal (BGBl) and state (LGBl)
  • Government bills, ministerial decrees, cabinet protocols
  • Full document retrieval with smart prefix-based routing
  • Change history tracking across 36 application types
  • Interactive result list (MCP Apps) in hosts that support it — with a full text answer everywhere else
  • Markdown and JSON output formats
  • Free and open — uses Austria's Open Government Data API, no API key needed

Quick Start

Run directly without installation:

pnpm dlx ris-mcp-ts

Or install globally:

pnpm add -g ris-mcp-ts

Configuration

Claude Desktop

Add to your Claude Desktop config (Settings > Developer > Edit Config):

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows: %APPDATA%\Claude\claude_desktop_config.json
{
  "mcpServers": {
    "ris": {
      "command": "npx",
      "args": ["-y", "ris-mcp-ts"]
    }
  }
}

Note: The "Add custom connector" UI in Claude Desktop only supports remote MCP servers (HTTP/SSE). Local stdio servers like this one must be configured via the JSON file.

Tip: You can also use pnpm dlx instead of npx in all configuration examples if you prefer pnpm.

Claude Code

Add to your project or user settings:

claude mcp add ris -- npx -y ris-mcp-ts

VS Code (GitHub Copilot)

Add to .vscode/mcp.json in your project:

{
  "servers": {
    "ris": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "ris-mcp-ts"]
    }
  }
}

Cursor

Add to .cursor/mcp.json in your project (or ~/.cursor/mcp.json for global access):

{
  "mcpServers": {
    "ris": {
      "command": "npx",
      "args": ["-y", "ris-mcp-ts"]
    }
  }
}

Windsurf

Add to your Windsurf MCP config at ~/.codeium/windsurf/mcp_config.json:

{
  "mcpServers": {
    "ris": {
      "command": "npx",
      "args": ["-y", "ris-mcp-ts"]
    }
  }
}

Other MCP Clients

Any MCP-compatible client can connect via stdio transport:

npx -y ris-mcp-ts
# or: pnpm dlx ris-mcp-ts

Available Tools

ToolDescription
ris_bundesrechtSearch federal laws (ABGB, StGB, UGB, etc.)
ris_landesrechtSearch state/provincial laws (all 9 provinces)
ris_judikaturSearch court decisions (16 court types)
ris_bundesgesetzblattSearch Federal Law Gazettes (BGBl I/II/III)
ris_landesgesetzblattSearch State Law Gazettes (LGBl)
ris_regierungsvorlagenSearch government bills
ris_dokumentRetrieve full document text by ID or URL
ris_dokument_abschnittReturn one section of an open document by character offset (feeds the document viewer widget)
ris_bezirkeSearch district authority announcements
ris_gemeindenSearch municipal law and regulations
ris_sonstigeSearch miscellaneous collections (8 sub-apps)
ris_historyTrack document change history (36 app types)
ris_verordnungenSearch state ordinance gazettes

Interactive Result List

One widget, all eleven search tools. There is a single interactive result list, and every search tool renders into it: federal law, state law, case law, the federal and state law gazettes, government bills, district authority announcements, municipal law, the miscellaneous collections, change history and the ordinance gazettes. The screenshots below are the same widget in two different hosts, not two different features.

ris_dokument opens a reader instead. A single document can run to a quarter of a million characters, far past what one answer may carry, so the viewer loads it section by section as you scroll, offers an outline to jump by where the document has one, and links back into RIS. The full text still reaches the chat either way — the widget is never the only copy.

Hosts that support the MCP Apps extension render the hits as an interactive list — page through results without retyping the search, open a document in the browser, or request its full text with one click. The widget follows the host's light or dark theme; the shots below show both.

<table> <tr> <td width="50%"><img src="https://raw.githubusercontent.com/Honeyfield-Org/ris-mcp-ts/main/docs/assets/widget-in-claude.png" alt="The RIS widget running inside Claude: a connector row reading 'ris-mcp / ris_bundesrecht', below it the result list for 'Verbrauchergewährleistungsgesetz' with 40 hits and its first sections, each tagged 'Bundesrecht'." width="100%"></td> <td width="50%"><img src="https://raw.githubusercontent.com/Honeyfield-Org/ris-mcp-ts/main/docs/assets/widget-in-chatgpt.png" alt="The same RIS widget running inside ChatGPT: the result list for 'Verbrauchergewährleistungsgesetz' with 40 hits and its first sections, above ChatGPT's own composer with the placeholder 'ChatGPT fragen'." width="100%"></td> </tr> <tr> <td align="center"><em>In Claude</em></td> <td align="center"><em>In ChatGPT</em></td> </tr> </table> <p align="center"> <img src="https://raw.githubusercontent.com/Honeyfield-Org/ris-mcp-ts/main/docs/assets/readme-judikatur-light.png" alt="Case law search for 'Verjährung' in the light theme: 7,466 hits, with court, decision date and case number on the expanded result, the actions 'Im RIS öffnen', 'PDF' and 'Volltext in den Chat', and pagination controls at the bottom." width="820"> <br> <em>The expanded detail view, light theme — metadata, the three actions, and pagination</em> </p>

Example Prompts

RIS is a German-language database, so these work best in German. Each of these lands on a different tool:

"Zeig mir das Verbrauchergewährleistungsgesetz" — ris_bundesrecht

"Finde aktuelle OGH-Rechtsprechung zu Verjährung" — ris_judikatur

"Was steht im Tiroler Landesrecht zum Naturschutz?" — ris_landesrecht

"Zeig mir BGBl. I Nr. 175/2021" — ris_bundesgesetzblatt

In a host without MCP Apps support the same prompts return the full text answer instead — see the table below.

HostWhat you get
claude.aiResult list (pagination, document links) + document viewer (outline navigation, lazy loading)
ChatGPTResult list (pagination) + document viewer (outline navigation, lazy loading)
Claude Code, and any client without MCP Apps supportThe regular text results, unchanged

The chat answer is always complete. The widgets are an addition to it, never a replacement — a host that does not render them loses nothing.

Tool Reference

<details> <summary><strong>ris_bundesrecht</strong> — Federal Laws</summary>

Search Austrian federal laws such as ABGB, StGB, UGB, and more.

Inputs:

ParameterTypeDescription
suchwortestringFull-text search (e.g., "Mietrecht", "Schadenersatz")
titelstringSearch in law titles (e.g., "ABGB", "Strafgesetzbuch")
paragraphstringSection number (e.g., "1295" for §1295, "7" for Art 7)
abschnitt_typstringType of section paragraph refers to: "Paragraph" (default), "Artikel" (article-based laws like B-VG), "Anlage" (annex)
applikationstring"BrKons" (consolidated, default), "Begut" (drafts), "BgblAuth" (gazette), "Erv" (English translations)
fassung_vomstringDate for historical version (YYYY-MM-DD)
seitenumberPage number (default: 1)
limitnumberResults per page: 10, 20, 50, 100 (default: 20). Prefer 20; a page over the structured-payload budget is delivered at the next smaller size (see Result size)
response_formatstring"markdown" (default) or "json"

All parameters are optional. At least one search parameter (suchworte, titel, or paragraph) should be provided.

Note: applikation="Erv" (English translations) uses a different parameter vocabulary internally (SearchTerms/Title) and does not support paragraph/abschnitt_typ or fassung_vom.

</details> <details> <summary><strong>ris_landesrecht</strong> — State/Provincial Laws</summary>

Search state laws of the nine Austrian provinces.

Inputs:

ParameterTypeDescription
suchwortestringFull-text search
titelstringSearch in law titles
bundeslandstringProvince: Wien, Niederoesterreich, Oberoesterreich, Salzburg, Tirol, Vorarlberg, Kaernten, Steiermark, Burgenland
paragraphstringSection number (e.g., "1" for §1, "7" for Art 7)
abschnitt_typstringType of section paragraph refers to: "Paragraph" (default), "Artikel", "Anlage"
fassung_vomstringDate for historical version (YYYY-MM-DD)
gesetzesnummerstringExact law number (Gesetzesnummer) of a specific state law
applikationstring"LrKons" (consolidated, default)
seitenumberPage number
limitnumberResults per page: 10, 20, 50, 100 (default: 20). Prefer 20; a page over the structured-payload budget is delivered at the next smaller size (see Result size)
response_formatstring"markdown" or "json"
</details> <details> <summary><strong>ris_judikatur</strong> — Court Decisions</summary>

Search court decisions from Austrian courts.

Inputs:

ParameterTypeDescription
suchwortestringFull-text search in decisions
gerichtsbarkeitstringCourt system / data collection to search — the RIS "Applikation" (see below; default "Justiz")
dokumenttypstring"rechtssatz" (headnotes only), "entscheidungstext" (full texts only), or "beide" (both, default)
gerichtstringActual court within the jurisdiction (e.g., "OGH", "OLG Wien"); applies to gerichtsbarkeit="Justiz"
rechtsgebietstringBroad legal area: "Zivilrecht" or "Strafrecht" (Justiz)
fachgebietstringOGH subject area (e.g., "Arbeitsrecht"); Justiz, needs dokumenttyp "entscheidungstext"/"beide"
entscheidungsartstringDecision type (e.g., "Erkenntnis", "Beschluss"); allowed values differ by jurisdiction
sammlungsnummerstringCollection number: VfSlg (Vfgh) or VwSlg (Vwgh)
normstringLegal norm (e.g., "1319a ABGB")
geschaeftszahlstringCase number (e.g., "5Ob234/20b")
entscheidungsdatum_vonstringDecision date from (YYYY-MM-DD)
entscheidungsdatum_bisstringDecision date to (YYYY-MM-DD)
sortierungstringSort by decision date: "datum_auf" (oldest first) or "datum_ab" (newest first)
seitenumberPage number
limitnumberResults per page: 10, 20, 50, 100 (default: 20). Prefer 20; a page over the structured-payload budget is delivered at the next smaller size (see Result size)
response_formatstring"markdown" or "json"

Available gerichtsbarkeit values (16):

ValueCourt system
JustizSupreme Court (OGH), Higher Regional Courts (OLG), Regional Courts (LG) — default
VfghConstitutional Court
VwghSupreme Administrative Court
BvwgFederal Administrative Court
LvwgProvincial Administrative Courts
DskData Protection Authority
AsylGHAsylum Court (historical, until 2013)
NormenlisteIndex of legal norms
PvakPersonnel Representation Supervisory Commission
GbkEqual Treatment Commission
DokDisciplinary Commission
VergFederal Procurement Office (historical, dissolved 2014)
UvsIndependent Administrative Senates (historical, dissolved 2014)
UbasIndependent Federal Asylum Senate (historical, dissolved 2014)
UmseEnvironmental Senate (historical, dissolved 2014)
BksFederal Communications Board (historical, dissolved 2014)
</details> <details> <summary><strong>ris_bundesgesetzblatt</strong> — Federal Law Gazette</summary>

Search the Federal Law Gazette (BGBl) — official publications of federal legislation.

Inputs:

ParameterTypeDescription
bgblnummerstringGazette number (e.g., "120")
teilstring"1" (I = Acts), "2" (II = Regulations), "3" (III = Treaties)
jahrgangstringYear (e.g., "2023")
suchwortestringFull-text search
titelstringSearch in titles
applikationstring"BgblAuth" (authentic from 2004, default), "BgblPdf" (PDF), "BgblAlt" (1945–2003)
seitenumberPage number
limitnumberResults per page: 10, 20, 50, 100 (default: 20). Prefer 20; a page over the structured-payload budget is delivered at the next smaller size (see Result size)
response_formatstring"markdown" or "json"
</details> <details> <summary><strong>ris_landesgesetzblatt</strong> — State Law Gazette</summary>

Search State Law Gazettes (LGBl) — official publications of state legislation.

Inputs:

ParameterTypeDescription
lgblnummerstringGazette number (e.g., "50")
jahrgangstringYear (e.g., "2023")
bundeslandstringProvince name
suchwortestringFull-text search
titelstringSearch in titles
applikationstring"LgblAuth" (authentic, default), "Lgbl" (general), "LgblNO" (Niederoesterreich)
seitenumberPage number
limitnumberResults per page: 10, 20, 50, 100 (default: 20). Prefer 20; a page over the structured-payload budget is delivered at the next smaller size (see Result size)
response_formatstring"markdown" or "json"
</details> <details> <summary><strong>ris_regierungsvorlagen</strong> — Government Bills</summary>

Search government bills — draft legislation submitted to parliament.

Inputs:

ParameterTypeDescription
suchwortestringFull-text search
titelstringSearch in titles
beschlussdatum_vonstringApproval date from (YYYY-MM-DD)
beschlussdatum_bisstringApproval date to (YYYY-MM-DD)
einbringende_stellestringSubmitting ministry (e.g., BKA, BMF, BMJ, BMK)
im_ris_seitstringAdded recently: EinerWoche, ZweiWochen, EinemMonat, DreiMonaten, SechsMonaten, EinemJahr
sortierung_richtungstringAscending or Descending
sortierung_spaltestringKurztitel, EinbringendeStelle, Beschlussdatum
seitenumberPage number
limitnumberResults per page: 10, 20, 50, 100 (default: 20). Prefer 20; a page over the structured-payload budget is delivered at the next smaller size (see Result size)
response_formatstring"markdown" or "json"
</details> <details> <summary><strong>ris_dokument</strong> — Full Document Retrieval</summary>

Retrieve the full text of a legal document by its ID or URL. Uses a dual strategy: direct URL access first, then search API fallback.

Inputs:

ParameterTypeDescription
dokumentnummerstringRIS document number (e.g., "NOR40052761")
urlstringDirect URL to document content
response_formatstring"markdown" (default) or "json"

At least one of dokumentnummer or url is required. Long documents are truncated to 25,000 characters.

Supported document prefixes:

PrefixType
NORFederal norms
LBG, LKT, LNO, LOO, LSB, LST, LTI, LVB, LWIState laws (9 provinces)
JWR, JWTSupreme Administrative Court (VwGH)
JFR, JFTConstitutional Court (VfGH)
JJR, JJTOrdinary courts (Justiz)
BVWG, LVWGFederal / State Administrative Courts
DSB, PDK, GBK, PVAB, DKT, NL, ASYLGHData protection, equal treatment, personnel, disciplinary, norm lists, asylum
VERG, JUR, JUT, UBAS, UMSE, BKSHistorical jurisdictions (dissolved 2014)
BGBLA, BGBL, BGBLPDFFederal Law Gazette (authentic / 1945–2003 / PDF)
REGVGovernment bills
BVBDistrict authorities
VBLOrdinance gazettes
MRP, ERL, PRUEF, AVSV, SPG, KMGERCabinet protocols, decrees, trade exams, social insurance, health plans, court announcements

The full routing registry lives in DOCUMENT_ROUTES (src/client.ts); unknown prefixes fall back to a Justiz search.

</details> <details> <summary><strong>ris_dokument_abschnitt</strong> — Document Section</summary>

Return one section of a document already open in the RIS document viewer. Intended for the viewer widget, not for direct use — for the full text of a document use ris_dokument.

The tool is declared app-only (_meta.ui.visibility: ["app"]): hosts that honour the flag hide it from the model and let only the viewer widget call it. It serves the same text ris_dokument produced, from the document cache where possible, so the offsets the viewer holds address the same document.

Inputs:

ParameterTypeDescription
dokumentnummerstringRIS document number of the open document - from the ris_dokument call that opened it
urlstringDirect URL of the open document, for documents opened by URL rather than by number
offsetnumberCharacter offset into the document text; 0 returns the first section and the outline (default: 0)

At least one of dokumentnummer or url is required. Each section is 25,000 characters long.

Output (structuredContent):

FieldTypeDescription
textstringThe requested section of the document text
total_lengthnumberLength of the complete document text — compare across calls to detect that the document was re-fetched and offsets shifted
next_offsetnumber | nullOffset to request for the following section, or null at the end of the document
outlinearrayJump targets of the document. Only returned for offset 0; empty when the document has no headings
dokumentnummerstringRIS document number of the document this section belongs to (absent for documents opened by URL)
source_urlstringRIS URL the document text was rendered from
</details> <details> <summary><strong>ris_bezirke</strong> — District Authority Announcements</summary>

Search announcements from district administrative authorities.

Note: Only available for: Niederoesterreich, Oberoesterreich, Tirol, Vorarlberg, Burgenland, Steiermark.

Inputs:

ParameterTypeDescription
suchwortestringFull-text search
titelstringSearch in titles
bundeslandstringProvince name
bezirksverwaltungsbehoerdestringDistrict authority name
kundmachungsnummerstringAnnouncement number
kundmachungsdatum_vonstringDate from (YYYY-MM-DD)
kundmachungsdatum_bisstringDate to (YYYY-MM-DD)
im_ris_seitstringAdded recently: EinerWoche, ZweiWochen, EinemMonat, DreiMonaten, SechsMonaten, EinemJahr
seitenumberPage number
limitnumberResults per page: 10, 20, 50, 100 (default: 20). Prefer 20; a page over the structured-payload budget is delivered at the next smaller size (see Result size)
response_formatstring"markdown" or "json"
</details> <details> <summary><strong>ris_gemeinden</strong> — Municipal Law</summary>

Search municipal law — local ordinances and regulations.

Inputs:

ParameterTypeDescription
suchwortestringFull-text search
titelstringSearch in titles
bundeslandstringProvince name
gemeindestringMunicipality name (e.g., "Graz")
applikationstring"Gr" (municipal law, default) or "GrA" (official gazettes)
im_ris_seitstringAdded recently
seitenumberPage number
limitnumberResults per page: 10, 20, 50, 100 (default: 20). Prefer 20; a page over the structured-payload budget is delivered at the next smaller size (see Result size)
response_formatstring"markdown" or "json"

Additional parameters depend on the selected application. See Gr (municipal law) and GrA (official gazettes) specific parameters in the source code.

</details> <details> <summary><strong>ris_sonstige</strong> — Miscellaneous Collections</summary>

Search miscellaneous legal collections and specialized databases.

Inputs:

ParameterTypeDescription
applikationstringRequired. Collection to search (see below)
suchwortestringFull-text search
titelstringSearch in titles
datum_vonstringDate from (YYYY-MM-DD)
datum_bisstringDate to (YYYY-MM-DD)
im_ris_seitstringAdded recently
seitenumberPage number
limitnumberResults per page: 10, 20, 50, 100 (default: 20). Prefer 20; a page over the structured-payload budget is delivered at the next smaller size (see Result size)
response_formatstring"markdown" or "json"

Available collections:

ValueDescription
MrpCabinet protocols (Ministerratsprotokolle)
ErlaesseMinisterial decrees
UptsParty transparency reports
KmGerCourt announcements
AvsvSocial insurance regulations
AvnVeterinary notices
SpgHealth structure plans
PruefGewOTrade licensing exams

Each collection has additional specific parameters. See the tool description for details.

</details> <details> <summary><strong>ris_history</strong> — Document Change History</summary>

Track document creation, modification, and deletion across the RIS database.

Inputs:

ParameterTypeDescription
applikationstringRequired. Application type (36 options — see below)
aenderungen_vonstringChanges from date (YYYY-MM-DD)
aenderungen_bisstringChanges to date (YYYY-MM-DD)
include_deletedbooleanInclude deleted documents (default: false)
seitenumberPage number
limitnumberResults per page: 10, 20, 50, 100 (default: 20). Prefer 20; a page over the structured-payload budget is delivered at the next smaller size (see Result size)
response_formatstring"markdown" or "json"

Available applications (36):

Federal law: Bundesnormen, BgblAuth, BgblAlt, BgblPdf, RegV State law: Landesnormen, LgblAuth, Lgbl, LgblNO, Vbl, Gemeinderecht, GemeinderechtAuth Case law: Justiz, Vfgh, Vwgh, Bvwg, Lvwg, Dsk, Gbk, Pvak, AsylGH Other: Bvb, Mrp, Erlaesse, PruefGewO, Avsv, Spg, KmGer, Dok, Normenliste Historical (jurisdictions dissolved on 2014-01-01, change history still tracked): Verg, Upts, Uvs, Ubas, Umse, Bks

</details> <details> <summary><strong>ris_verordnungen</strong> — State Ordinance Gazettes</summary>

Search state ordinance gazettes (Verordnungsblätter).

Note: Currently only data from Tirol is available (since January 2022).

Inputs:

ParameterTypeDescription
suchwortestringFull-text search
titelstringSearch in titles
bundeslandstringProvince name
kundmachungsnummerstringAnnouncement number
kundmachungsdatum_vonstringDate from (YYYY-MM-DD)
kundmachungsdatum_bisstringDate to (YYYY-MM-DD)
seitenumberPage number
limitnumberResults per page: 10, 20, 50, 100 (default: 20). Prefer 20; a page over the structured-payload budget is delivered at the next smaller size (see Result size)
response_formatstring"markdown" or "json"
</details>

Result size

The text block of every tool is capped at 25,000 characters. The search tools' structuredContent has its own budget of 45,000 characters (serialized); a page that would exceed it is delivered at the next smaller RIS page size (100 → 50 → 20 → 10) with page, page_size, has_more and the query echo rewritten to that size and a German notice in both the text and the payload. Page with query.limit and query.seite as echoed. Prefer limit: 20; 50 suits a broad survey; 100 is only ever delivered when the hits are small. The default is calibrated to Claude Code, which rejects a result whose structured payload exceeds 25,000 tokens (measured: rejected at 58,659 characters, accepted at 46,311; the margin below that covers content that tokenizes worse); claude.ai renders far larger payloads and needs no budget. Self-hosters whose client accepts larger results can raise the budget with the RIS_STRUCTURED_CONTENT_BUDGET environment variable (a positive integer).

Development

Prerequisites

  • Node.js >= 20.19.0 (required by the Vite 7 widget build)

Setup

git clone https://github.com/Honeyfield-Org/ris-mcp-ts.git
cd ris-mcp-ts
pnpm install
pnpm run build

Scripts

ScriptDescription
pnpm run devStart with hot reload (tsx)
pnpm run buildCompile TypeScript
pnpm startRun compiled version
pnpm testRun the server tests
pnpm run test:uiRun the widget tests (jsdom)
pnpm run gen:uiBuild the widget bundle into src/generated/ (runs automatically before dev/test/typecheck)
pnpm run checkTypecheck + lint + format check + both test suites
pnpm run inspectLaunch MCP Inspector for manual testing

Project Structure

src/
├── index.ts           # Entry point (stdio transport)
├── server.ts          # MCP server setup, delegates to tools/
├── client.ts          # HTTP client for RIS API
├── types.ts           # Zod schemas + TypeScript types
├── parser.ts          # JSON parsing and response normalization
├── formatting.ts      # Output formatting (markdown/json)
├── helpers.ts         # Shared helper functions
├── constants.ts       # Static mappings and configuration
├── widgets.ts         # MCP Apps widget resource + tool metadata
├── tools/             # One file per tool handler
│   ├── index.ts
│   ├── bundesrecht.ts
│   ├── landesrecht.ts
│   ├── judikatur.ts
│   └── ...
└── __tests__/         # Unit and integration tests

ui/                    # Widget sources (browser code, built by Vite)
├── trefferliste/      # The result-list widget
└── shared/            # Host bridge, shared states and theme

Contributing

See CONTRIBUTING.md for guidelines.

License

MIT


Built on the Open Government Data API provided by the Austrian Federal Chancellery (Bundeskanzleramt).

Related MCP servers

Webhook signature-verification audit. Stripe, GitHub, Shopify, Twilio +17. Local. Deterministic.

1
TypeScript
Apache-2.0
View repository →

Audit, reschedule and author Microsoft Project schedules. No Java, no Project install.

0
C#
MIT
View repository →

Build, audit and repair Power BI Desktop models and reports with DAX, TMDL and PBIR using plain language.

9
Python
Apache-2.0
View repository →

AI-powered BIM automation for Revit 2023–2027: model, coordinate and deliver with 123 tools.

11
C#
Apache-2.0
View repository →
NANavisCoord logo

Connect Autodesk Navisworks to Claude and ChatGPT for AI-driven clash analysis, root-cause investigation, and coordination planning.

16
C#
MIT
View repository →

24 tools for evidence-graded clinical queries, hormones, peptides, longevity & drug interactions.

1
TypeScript
View repository →