Prototype · Preview: every server in the official registry, synced every 30 minutes. Reviews and accounts come in a later step.
PopNx MCPMCP servers for people who use AI · explained in plain words

Ris Austria MCP Server

by cyanheadsversion 0.6.1i★ –iComputer or cloud
Registry nameio.github.cyanheads/ris-austria-mcp-server

Install

Overview

Description from the maker (original English)

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

PopNx MCP’s three pillars

These three are never merged into one score: opinions, measurements and popularity are different things.

What you can do with it

We have not written a plain-language summary for this one yet. Below are the facts we read from the registry.

Install

Pick the AI app you use, then copy the settings.

Before you install

  • Basic checks: 3 of 3 passed
  • Runs on the maker’s server: what you ask it goes through their server.
  • Can do 9 things (tools) ris_search_legislation, ris_search_case_law, ris_search_gazette, ris_search_drafts …
  • You fill in yourself: MCP_LOG_LEVEL, RIS_CONTACT, RIS_API_BASE_URL, RIS_CONTENT_BASE_URL

You need

  • Runs in the cloudNothing to install; it connects over the internet
  • npmNode.js installed (for the npx command)

Which app do you use?

Pick your app above. We remember it, so next time the button says “Install in …”.

Works in Claude on the web, desktop and mobile:

  1. Open Settings → Connectors
  2. Press Add custom connector
  3. Paste the address below and press Add
  4. If it asks you to sign in, sign in with the maker
SettingsConnectors1+ Add2https://…3
https://ris-austria.caseyjhand.com/mcp

Or run it on your computer

Open Claude Desktop → Settings → Developer → Edit Config, and paste this into claude_desktop_config.json

{
  "mcpServers": {
    "ris-austria": {
      "command": "npx",
      "args": [
        "-y",
        "@cyanheads/ris-austria-mcp-server"
      ],
      "env": {
        "MCP_LOG_LEVEL": "your-value",
        "RIS_CONTACT": "your-value",
        "RIS_API_BASE_URL": "your-value",
        "RIS_CONTENT_BASE_URL": "your-value"
      }
    }
  }
}

Run this in your terminal

claude mcp add --transport http ris-austria https://ris-austria.caseyjhand.com/mcp

Or run it on your computer

claude mcp add ris-austria --env MCP_LOG_LEVEL=your-value --env RIS_CONTACT=your-value --env RIS_API_BASE_URL=your-value --env RIS_CONTENT_BASE_URL=your-value -- npx -y @cyanheads/ris-austria-mcp-server

Fill in the empty values before running it.

Open in Cursor

Or copy the settings yourself

Paste into .cursor/mcp.json in your project, or ~/.cursor/mcp.json

{
  "mcpServers": {
    "ris-austria": {
      "url": "https://ris-austria.caseyjhand.com/mcp"
    }
  }
}

Or run it on your computer

Open in Cursor

Or copy the settings yourself

Paste into .cursor/mcp.json in your project, or ~/.cursor/mcp.json

{
  "mcpServers": {
    "ris-austria": {
      "command": "npx",
      "args": [
        "-y",
        "@cyanheads/ris-austria-mcp-server"
      ],
      "env": {
        "MCP_LOG_LEVEL": "your-value",
        "RIS_CONTACT": "your-value",
        "RIS_API_BASE_URL": "your-value",
        "RIS_CONTENT_BASE_URL": "your-value"
      }
    }
  }
}

Your browser asks to open the app, then the app shows the settings and asks you to confirm. Key values are left empty for you to fill in.

Open in VS Code

Or copy the settings yourself

Paste into .vscode/mcp.json in your project

{
  "servers": {
    "ris-austria": {
      "type": "http",
      "url": "https://ris-austria.caseyjhand.com/mcp"
    }
  }
}

Or run it on your computer

Open in VS Code

Or copy the settings yourself

Paste into .vscode/mcp.json in your project

{
  "servers": {
    "ris-austria": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "@cyanheads/ris-austria-mcp-server"
      ],
      "env": {
        "MCP_LOG_LEVEL": "your-value",
        "RIS_CONTACT": "your-value",
        "RIS_API_BASE_URL": "your-value",
        "RIS_CONTENT_BASE_URL": "your-value"
      }
    }
  }
}

Your browser asks to open the app, then the app shows the settings and asks you to confirm. Key values are left empty for you to fill in.

ChatGPT connects only to servers on the internet:

  1. Open ChatGPT on the web → Settings → Connectors (Apps)
  2. Press Create or Add (some plans need Developer mode under Advanced first)
  3. Paste the address below, give it a name and save
  4. If it asks you to sign in, sign in with the maker
SettingsConnectors1+ Create2https://…3
https://ris-austria.caseyjhand.com/mcp

Menu names can differ slightly by plan and over time.

Your choice stays on this device in a cookie; no account needed.

Values you fill in

  • MCP_LOG_LEVEL env
    Sets the minimum log level for output (e.g., 'debug', 'info', 'warn').
  • RIS_CONTACT env
    Optional contact string appended to the User-Agent (RIS netiquette asks integrators to be identifiable).
  • RIS_API_BASE_URL env
    RIS OGD REST API base URL.
  • RIS_CONTENT_BASE_URL env
    RIS document content host that rendition URLs are built on and documents are fetched from. The default serves automated clients; www.ris.bka.gv.at answers them with a bot-check page. document_url als…

These settings are generated from the maker’s registry entry. If the README says otherwise, follow the README.

What it can do

Tool names and descriptions exactly as the server reported them on Nov 6, 2026. The maker wrote them, not us; we show them as plain text.

  • ris_search_legislation

    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 (l

  • ris_search_case_law

    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 (d

  • ris_search_gazette

    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 1

  • ris_search_drafts

    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

  • ris_search_announcements

    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

  • ris_lookup_citation

    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", "EM

  • ris_get_document

    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_l

  • ris_track_changes

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

  • 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 Bundesla

Basic checksi

We check information anyone can see; we have not read the code. Checks that do not apply are left out of the count. · Checked Nov 7, 2026

  • ✓ Pass

    Maker matches the repo

    The registry name was verified with the GitHub account cyanheads, which owns the repo

  • … Not checked yet

    Still maintained

    We have not read this repo from GitHub yet

  • … Not checked yet

    Has a licence

    We have not read this repo from GitHub yet

  • ✓ Pass

    Endpoint responds

    Responded in 222 ms (HTTP 200)

  • – Not applicable

    Sign-in with OAuth

    No sign-in needed

  • ✓ Pass

    No hidden instructions in tool descriptions

    Read 9 tool descriptions and found no hidden instructions to the AI

Compared with others in Search & AI memoryi

  • More stars than 0% of the other 7254 servers in this category
  • Published to the registry more recently than 84% of the other 7254 servers in this category
  • Basic checks equal to or better than 100% of the other 7254 servers in this category

Compared with every active server in this category in the registry. Stars count only when the publisher owns the repo.

Common questions

Is Ris Austria MCP Server safe?

It passed 3 of 3 applicable basic checks. We have not read the code. Before adding a key or token, see what access the server asks for and use a key with only the permissions you need.

What keys or codes does it need?

The registry does not list a required key, though some servers ask you to sign in on first use.

Does it run on my computer or in the cloud?

Either way works: install it on your computer or connect to the cloud version.

Is it still maintained?

The GitHub repo last changed –, and the latest version (0.6.1) reached the registry 7 days ago.

Which apps can use it?

Apps that support MCP, such as Claude Desktop, Claude Code, Cursor and VS Code. It connects by URL, so apps that accept remote MCP servers work too, such as ChatGPT in developer mode.

What can I use instead?

In the same category: Context7, Codebase Memory, Exa

Alternatives

Servers in the same category from other makers, sorted by stars.

Reading a card:★ GitHub starsiThree pillars: reviews · checks · usageiUpdated = latest version published to the registryi

Context7

by upstash

Feeds AI the latest docs for libraries and frameworks before it answers, so code it writes does not use outdated, removed functions.

Computer or cloud★ 64,224MITUpdated today
Install

Codebase Memory

by DeusData

Codebase knowledge graph for AI agents — 162 languages, sub-ms queries, 99% fewer tokens.

Runs on your computer★ 48,148MITUpdated 20 days ago
Install

Exa

by exa-labs

Connect AI agents to Exa for web search, content fetching, and multi-step research.

Runs in the cloud★ 5,213MITUpdated last month
Install

README from the maker

Open the README

Copied from the maker’s repo as written. PopNx MCP has not reviewed or endorsed it. HTML, images and scripts are removed. Links lead off this site.

@cyanheads/ris-austria-mcp-server Search Austrian consolidated federal & state law, court decisions, and the authentic Bundesgesetzblatt from the official RIS via MCP. Keyless. STDIO or Streamable HTTP. 9 Tools • 1 Resource

Public Hosted Server: https://ris-austria.caseyjhand.com/mcp


Overview

Austrian law from RIS, the government's official legal information system: federal, state, and municipal law, court decisions, official gazettes back to 1848, draft legislation, and ministerial decrees. Every document is labeled with its binding status. No API key required.

Tools
ToolDescription
ris_search_legislationSearch consolidated federal, state, and municipal law as in force on a date (default today), plus English translations of selected laws
ris_search_case_lawSearch case law in one court or tribunal per call, across 17 court codes
ris_search_gazetteBrowse the federal, state, district, and municipal gazettes, with federal history auto-routed back to 1848
ris_search_draftsSearch ministerial review drafts (Begutachtungsentwürfe) and government bills (Regierungsvorlagen)
ris_search_announcementsSearch seven sectoral collections, from social-insurance notices to ministerial decrees and council-of-ministers minutes
ris_lookup_citationResolve one Austrian legal citation ("§ 6 DSG", "BGBl. I Nr. 165/1999", a Geschäftszahl or ECLI) to its document
ris_get_documentFetch one document as markdown, HTML, or XML, or just its rendition URLs, with its binding status
ris_track_changesList every document added, changed, or deleted in one application within a date window
ris_list_referenceLook up RIS vocabularies offline: applications, courts, states, ministries, gazette parts, citation formats, search syntax
Resources
ResourceDescription
ris://document/{application}/{documentNumber}Markdown text of one RIS document

The resource mirrors ris_get_document, so tool-only clients lose nothing.

Capability reference

ris_search_legislation tool
  • Search by query (full text) or title (title, short title, or abbreviation such as "DSG"). scope is federal (default) or a Bundesland, municipality switches a state scope to municipal law, and language: english searches the ~138 English translations
  • in_force_as_of defaults to today in Austria and is echoed as appliedInForceAsOf; include_all_versions and the entered_force_* / left_force_* windows are mutually exclusive alternatives
  • Records carry law_id (filter on it for every section of a law), section_label, abbreviation, keywords, in-force dates, eli, celex_references, and content_urls

ris_search_case_law tool
  • court is required, one code per call. Filter by query, cited norm ("DSG §1"), case_number, decided_from/decided_to, and decision_type (headnote, full_text, or all, the default). Court-specific filters include court_name (justiz), state (lvwg/uvs), and collection_number (vfgh/vwgh/uvs); one sent to the wrong court fails as court_filter_mismatch
  • Records carry case_numbers (a headnote lists every decision it covers), decision_date, ecli, norms_cited, and guiding_principle on headnotes
  • court: normenliste returns indexed laws under norm_index instead of decisions

ris_search_gazette tool
  • scope is federal (default), a Bundesland, district, or municipal. Filter by number, part, type, published_from/published_to, issuer, district_authority, or municipality; state scopes also take series and state_era
  • Federal queries are served from one era (BgblAuth 2004+, BgblPdf 1945–2003, BgblAlt 1848–1940), echoed as servedApplication; a date range spanning two eras fails as cross_tier_range with the dates to split at
  • Records carry binding (authentic, historical_record, consolidated_informational), authentic_pdf_url where one exists, alex_url (ÖNB scan) for 1848–1940, celex_references where applicable, and promulgation on federal entries from 1848–2003

ris_search_drafts tool
  • stage is required: review_drafts (with in_review_on) or government_bills (2004+, with decided_from/decided_to); ministry accepts an abbreviation such as "BMF" or a full designation
  • Records carry review_start and review_deadline or decided, abbreviation and keywords where RIS supplies them, plus materials[] (Erläuterungen, Textgegenüberstellung, Vorblatt/WFA, annexes) classified by type. Pass a materials[].url to ris_get_document to read one

ris_search_announcements tool
  • collection is required: social_insurance, veterinary, court_rules, trade_exam_rules, health_structure_plans, ministerial_decrees, or council_minutes. A filter its collection doesn't accept fails as collection_filter_mismatch, including changed_since on social_insurance and veterinary. issuer expands ministry ("BMF") and social-insurance carrier ("ÖGK") abbreviations
  • Records carry binding (authentic, administrative_directive, or preparatory), authentic_pdf_url, and document_url, the only browsable view of council minutes and decrees
  • Each collection adds its own metadata where RIS supplies it, such as case_numbers, in_force_from/in_force_until, keywords, court_name, plan_state, and session_number

ris_lookup_citation tool
  • One citation per call, classified as a norm ("§ 6 DSG"), gazette number ("BGBl. I Nr. 165/1999"), case number ("VfGH G 13/2025") or ECLI, or collection number ("VfSlg 19.632/2012"). kind forces a route, court and state narrow it, and in_force_as_of pins a norm's version (default today)
  • Returns found, kind, and a record in the matching search tool's shape, with alternatives_count when several documents matched. A miss returns found: false with guidance instead of an error
  • A norm resolves to the cited law:
  • the law is matched as RIS files it ("§ 2 EStG" → EStG 1988 § 2; "AlVG 1977" → the AlVG, filed without its year; "VwGVG 2014 §28" → VwGVG § 28), and a long title is read by its short form ("StaatsanwaltschaftsG - StAG §35" → StAG § 35)
  • sub-provisions and a trailing ";" are set aside ("Art. 6 (1) B-VG" → B-VG Art 6), and an ordinal-led abbreviation reads like any other ("1. COVID-19-JuBG §1")
  • a cited version is set aside ("ABGB idF BGBl I 2010/28 §988" → ABGB § 988 as in force on the requested date, never the amending act's gazette entry), with a note saying the cited version was not applied
  • an entry citing several provisions ("DSG §1, §24", "ZPO §179. ZPO §275 Abs2") resolves the first and names the rest
  • An EU act RIS does not consolidate ("DSGVO Art32", "RL 2006/123/EG", "VO (EG) 178/2002 Art3") returns found: false with its EUR-Lex link, without a RIS request
  • A gazette number without its part ("BGBl. Nr. 50/2025") comes back ambiguous, naming parts I, II, and III

ris_get_document tool
  • Address by document_number + application, or by a document_url from content_urls or a draft's materials[].url; format is markdown (default), html, xml, or urls_only
  • Every result carries binding_status and authentic_pdf_url where one exists. Where a PDF is the only rendition (district and municipal promulgations, court rules, party-transparency decisions, council minutes, and draft companions filed without HTML), markdown returns the text extracted from it: plain text with a --- Page N of M --- line before each page, text_source: pdf, and a notice naming the PDF. A scanned PDF with no text layer, one over 16 MiB, or one that cannot be fetched in time returns a notice with the usable URL instead of failing, as do html and xml there and the 1848–1940 gazettes, which have no PDF to read
  • Markdown writes image references as absolute URLs on the content host. A rendition that is nothing but page images reads its PDF's text, and keeps the image URLs with a notice when the PDF has none
  • Markdown over 40,000 bytes returns kind: outline; re-call with sections to fetch entries. html and xml over 40,000 bytes return kind: link with byte_size and content_urls, so read with markdown

ris_track_changes tool
  • application (any of the 39 codes) plus changed_from/changed_to; include_deleted adds removals, which no other tool reports
  • Records carry changed, published, and binding_status; deletions set deleted: true with deleted_at
  • Law rows carry section_label, law_id, and in_force_from/in_force_until (no end date is not the same as in force now), and decision rows carry case_numbers and decision_date

ris_list_reference tool
  • topic selects one of 17 static tables: applications, courts, states, decision types and kinds, issuing bodies, ministries, collections, stages, changed-since intervals, section types, gazette parts, law types, district authorities, justiz subject areas, search syntax, and citation formats
  • Returns summary and entries (value, label, details) with no upstream call

ris://document/{application}/{documentNumber} resource
  • text/markdown of one document, addressed by application + documentNumber from a search or lookup result; same content as ris_get_document with format: markdown
  • Applications that publish only a PDF return its extracted text in a fenced block with a note naming the PDF; the 1848–1940 gazettes and a PDF with no extractable text return a note pointing at the PDF or scan. Oversized text returns the outline, so use the tool to fetch

Only the beginning is shown; read the rest in the repo

Ask PopNx