关于 Austrian Law (RIS) — Bundesrecht, Landesrecht & Judikatur
at-ris-mcp 提供 MCP 服务和 Python 客户端库,用于访问奥地利官方 RIS 法律信息系统。它覆盖联邦与州法律、法院判决及相关文件,并支持精确到条款的查询、历史版本和变更监控。
主要功能
- 01搜索联邦法和州法
- 02获取法规与法院判决
- 03访问指定条款或历史版本
- 04以清理后的 Markdown 或原始格式返回文件
- 05监控 RIS 变更,包括已删除文件
- 06使用独立的 Python 客户端库
适用场景
- 01查找现行合并版联邦法律文本
- 02获取指定条款或某部法律的历史版本
- 03搜索奥地利各法院的判决
- 04跟踪 RIS 法律文件变更
MCP 相关
FastMCP 包装层提供 10 个工具,用于搜索、获取奥地利法律文件和监控变更。默认使用 stdio,也支持 streamable HTTP 和 SSE 传输。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
uvx at-ris-mcpRIS_CACHE_DIRDirectory for the SQLite response cache (default: ~/.cache/at-ris-mcp).RIS_AUDIT_DIRIf set, append a JSONL audit line per tool call (no full text, no client data).RIS_RATE_MSMinimum delay between requests in ms (RIS netiquette; default 1200).本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
at-ris-mcp
适用于奥地利 RIS(Rechtsinformationssystem des Bundes,联邦法律信息系统)的通用 MCP 服务和独立 Python 客户端库。RIS 是奥地利共和国的官方法律信息系统,由 Bundeskanzleramt 运营。
该工具覆盖联邦法律(Bundesrecht,包括 汇编法律 BrKons、官方公报、草案和政府法案)、州法律(九个 Bundesländer 的 Landesrecht)、判例法(Judikatur——OGH、VfGH、VwGH、BVwG、LVwG 等)、部委法令、区级和市级法律,以及变更监控信息流;通过无需密钥的 OGD API 访问:
https://data.bka.gv.at/ris/api/v2.6/。
项目缘由
与现有 RIS 工具相比,at-ris-mcp 新增了:
- 汇编法律(
BrKons)——当前有效的正文,而不仅仅是官方公报中的修订法令。 - 精确到条款的访问——获取单个
§/Artikel/Anlage (Abschnitt.*)。 - 历史版本——获取指定日期的法律文本
(
Fassung.FassungVom)。 - 简洁的 Markdown——将 RIS HTML(每份文档约 40 KB 的 CSS 样板内容)清理为法律正文,并提供
raw开关以获取未经处理的原文。
两个包,一个仓库
ris_client——独立于 MCP 的库,可直接导入。ris_mcp——精简的 FastMCP/stdio 封装,提供 10 个工具,不包含自身逻辑。
安装
pip install at-ris-mcp # library only
pip install "at-ris-mcp[mcp]" # + the MCP server (FastMCP)
运行 MCP 服务(stdio)
at-ris-mcp
# or
python -m ris_mcp
远程传输(HTTP / SSE)
对于托管或远程部署,服务也可以使用流式 HTTP 或 SSE,而非 stdio:
at-ris-mcp --transport http --host 0.0.0.0 --port 8000 # streamable HTTP
at-ris-mcp --transport sse --port 9000 # SSE
# or via environment:
RIS_MCP_TRANSPORT=http RIS_MCP_PORT=8000 at-ris-mcp
默认情况下,HTTP 端点位于 /mcp(可通过 --path /
RIS_MCP_PATH 覆盖)。未指定传输方式时,默认使用 stdio。
工具
| 工具 | 用途 |
|---|---|
ris_search_law | 搜索联邦法律(默认 BrKons;还包括 BgblAuth、Begut、RegV 等)。支持条款和版本筛选。 |
ris_get_law_text | 获取法规或条款的全文(markdown | html | xml | raw)。 |
ris_search_case | 搜索判例法(默认 Justiz;涵盖所有法院)。可按适用的 norm 筛选。 |
ris_get_case_text | 获取判决全文。 |
ris_search_state_law | 搜索州法律(9 个 Bundesländer;默认 LrKons)。通过 bundeslaender 选择州。 |
ris_search_misc | 搜索 Sonstige(部委法令 Erlaesse、Avsv 等)。 |
ris_search_district | 搜索区级主管部门公告(Bezirke / Bvb)。 |
ris_search_municipality | 搜索市级法律(Gemeinden / Gemeinderecht Gr/GrA)。 |
ris_list_collections | 查看涵盖的端点/应用。 |
ris_list_changes | 通过 OGD SOAP 端点获取变更/预警信息流(RIS History),包括已删除的文档。 |
库的用法
import asyncio
from ris_client import RisClient, LawSearchRequest, TextFormat
async def main():
async with RisClient() as c:
res = await c.search_law(LawSearchRequest(suchworte="Datenschutzgesetz",
page_size="Ten"))
hit = res.items[0]
print(hit.human_readable_citation, hit.eli_uri)
text = await c.get_text(hit.content_urls["html"], TextFormat.markdown)
print(text.content[:500])
asyncio.run(main())
配置(环境变量)
| 变量 | 默认值 | 含义 |
|---|---|---|
RIS_BASE_URL | https://data.bka.gv.at/ris/api/v2.6 | API 基础地址(版本隔离)。 |
RIS_SOAP_URL | https://data.bka.gv.at/ris/ogd/v2.6/ | OGD SOAP 端点(由 ris_list_changes 使用)。 |
RIS_USER_AGENT | at-ris-mcp/<version> (+…) | 描述性 UA(遵循网络礼仪)。 |
RIS_RATE_MS | 1200 | 请求之间的最小间隔(毫秒)。 |
RIS_TIMEOUT_S | 30 | HTTP 超时时间。 |
RIS_MAX_RETRIES | 3 | 遇到 429/5xx 时的重试次数(包括 503)。 |
RIS_CACHE_DIR | ~/.cache/at-ris-mcp | SQLite 缓存位置。 |
RIS_CACHE_ENABLED | true | 启用或禁用缓存。 |
RIS_AUDIT_DIR | (未设置) | 若设置,则每次调用追加一条 JSONL 审计记录(不含完整文本或客户端数据)。 |
RIS_MCP_TRANSPORT | stdio | 服务传输方式:stdio | http | sse | streamable-http。 |
RIS_MCP_HOST | 127.0.0.1 | http/sse 的绑定主机。 |
RIS_MCP_PORT | 8000 | http/sse 的绑定端口。 |
RIS_MCP_PATH | (传输方式默认值) | HTTP 端点的 URL 路径。 |
网络礼仪与速率限制
根据 RIS OGD 常见问题解答,客户端会强制每页间隔 1–2 秒;批量访问应安排在非办公时间(18:00–06:00)或周末,并告知 [email protected]。默认会发送描述性 User-Agent。
许可
-
代码: Apache-2.0(参见
LICENSE)。 -
数据: 检索到的文档由奥地利共和国根据 CC BY 4.0 提供。每个工具响应都包含一个
attribution字段:来源:RIS – Rechtsinformationssystem des Bundes (data.bka.gv.at),CC BY 4.0
-
不构成法律建议。 只有正式公布的原始文本(Bundesgesetzblatt/Landesgesetzblatt authentisch)具有法律效力。汇编法律及所有其他文档仅供参考。每个响应都包含相应的
legal_notice。
范围(v1.0)
涵盖:Bundesrecht(BrKons、BgblAuth、BgblPdf、BgblAlt、Begut、RegV、Erv——英文译本)、Judikatur(所有法院)、历史变更源(ris_list_changes,包括已删除的文档)、州法律(9 个 Bundesländer:LrKons、LgblAuth、Lgbl、LgblNO、Vbl)、其他(Erlaesse、Avsv、Avn、Spg、KmGer、Upts、Mrp、PruefGewO——带有应用专属精细筛选器)、区(Bvb)和市镇(Gr、GrA)。
英文译本(
Erv): 使用ris_search_law搜索,并设置applikation="Erv"。suchworte/titel会自动映射到 RIS 的SearchTerms/Title参数。
州法律说明: 对于州法律汇编(
LrKons),使用bundeslaender选择各州(例如["Kaernten","Tirol"]);这会映射为 API 所需的带点号的Bundesland.SucheIn<Land>=true标志(对于LrKons,扁平形式会被静默忽略)。
历史记录说明: 汇编联邦法律的监控应用名称为
Bundesnormen(而不是BrKons),汇编州法律的监控应用名称为Landesnormen。历史记录查询使用 OGD SOAP 端点,因为 REST GET API 未提供此功能。
开发
pip install -e ".[dev,mcp]"
pytest # offline tests
RIS_SMOKE=1 pytest -m smoke # live smoke tests against the real API
发布
发布流程已自动化。推送版本标签(vX.Y.Z)后,GitHub
Actions 会构建发行包、发布到 PyPI(通过 Trusted
Publishing / OIDC,无需 API 令牌)、创建 GitHub Release,并在
MCP Registry 中登记新版本。
# bump the version in pyproject.toml, src/ris_client/config.py and server.json,
# update CHANGELOG.md, then:
git tag -a vX.Y.Z -m "vX.Y.Z"
git push origin vX.Y.Z
如需在本地构建而不发布:
python -m build # sdist + wheel into dist/
python -m twine check dist/*
MCP Registry 条目由 server.json 描述
(名称 io.github.paragraflabs/at-ris-mcp);对应的 mcp-name: 标记
嵌入在本 README 顶部附近。
贡献与支持
欢迎在
https://github.com/paragraflabs/at-ris-mcp 提交问题和拉取请求。请参阅 CHANGELOG.md
了解发布历史。本项目与奥地利共和国或 Bundeskanzleramt 无关联,也未获其认可;它是面向公共 RIS OGD 接口的独立客户端。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。