ris-austria-mcp-server について
法律実務家や研究者向けに、オーストリア政府の RIS から法令、裁判例、公報、法案を検索する MCP サーバーです。法令引用の解決に加え、文書の拘束力の状態も示します。
主な機能
- 01連邦・州・自治体の法令検索
- 0217種類の裁判所コードで判例検索
- 031848年まで遡る公報の閲覧
- 04引用の解決と文書の取得
- 05文書の変更・削除の追跡
活用シーン
- 01特定日時に有効な法令の確認
- 02裁判所や事件番号による判例検索
- 03官報の掲載情報の取得
- 04RIS コレクションの変更監視
MCP 対応
検索、照会、変更追跡の9つのツールと文書リソースを MCP クライアントに提供します。STDIO と Streamable HTTP に対応し、公開ホスト型エンドポイントも利用できます。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://ris-austria.caseyjhand.com/mcpclaude mcp add --transport http cyanheads-ris-austria https://ris-austria.caseyjhand.com/mcp{"mcpServers":{"cyanheads-ris-austria":{"type":"http","url":"https://ris-austria.caseyjhand.com/mcp"}}}Cursor で開く{"servers":{"cyanheads-ris-austria":{"type":"http","url":"https://ris-austria.caseyjhand.com/mcp"}}}VS Code で開く{"mcpServers":{"cyanheads-ris-austria":{"type":"http","url":"https://ris-austria.caseyjhand.com/mcp"}}}{"mcpServers":{"cyanheads-ris-austria":{"serverUrl":"https://ris-austria.caseyjhand.com/mcp"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
ツール
9| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| page | integer | いいえ | 結果ページ番号。1 から始まります。デフォルトは 1 です。 |
| index | string | いいえ | Systematik 分類フィルター(例:"10/10 Datenschutz")。連邦/州の統合法令のみが対象です。省略すると絞り込みません。空の値は拒否されます。 |
| query | string | いいえ | 全文検索(Suchworte)。ブール演算子 UND/ODER/NICHT または AND/OR/NOT、括弧、引用符で囲んだフレーズを使用できます。ワイルドカード * は末尾のみ使用できます("Datenschutz*"。"*schutz" は不可)。構文:ris_list_reference topic search_syntax。省略すると絞り込みません。空の値は拒否されます。 |
| scope | enum | いいえ | 管轄範囲:federal(デフォルト)は連邦統合法令を検索します。州を指定すると、その州の統合法令を検索します(municipality も指定した場合は、その州の市町村法を検索します)。federal | burgenland | kaernten | niederoesterreich | oberoesterreich | salzburg | steiermark | tirol | vorarlberg | wien |
| title | string | いいえ | タイトル検索(Titel)— タイトル、短縮タイトル、公式略称("ABGB"、"DSG")に一致します。フレーズフィールド:* は先頭または末尾に使用でき、その隣に 2 文字以上必要です。省略すると絞り込みません。空の値は拒否されます。 |
| law_id | string | いいえ | 法律単位のグループ化キー(Gesetzesnummer、例:10001597 = DSG)— 完全一致し、その法律の全条文を返します。連邦/州の統合法令のみが対象です。省略すると絞り込みません。空の値は拒否されます。 |
| sort_by | enum | いいえ | ソート列:条文(§/Artikel/Anlage ラベル)または in_force_date。デフォルト:上流の順序。連邦/州の統合法令のみが対象です。section | in_force_date |
| language | enum | いいえ | german(デフォルト)は正式なドイツ語コーパスを検索します。english は一部の連邦法の非公式英訳(約 138 件)を検索します(scope: federal が必要。query および title とのみ併用可能)。german | english |
| page_size | enum | いいえ | ページあたりの文書数:10 または 20(デフォルトは 20)。さらに結果を取得するには、この値を維持して page を増やしてください。10 | 20 |
| section_to | string | いいえ | 条文範囲の終端。単一の条文の場合は section_from と同じ値です。省略すると絞り込みません。空の値は拒否されます。 |
| municipality | string | いいえ | 市町村法の市町村名(例:"Graz" — "Stadt Graz" ではなく、RIS の表記を使用)。州の scope が必要です。query、title、in_force_as_of とのみ併用できます。収録対象は 6 州の一部規範です(Burgenland/Tirol/Vorarlberg は対象外)。省略すると統合法令を検索します。空の値は拒否されます。 |
| section_from | string | いいえ | § / Artikel / Anlage 番号範囲の開始値。数字に任意の英字を付けられます("6"、"1a")。連邦/州の統合法令のみが対象です。省略すると絞り込みません。空の値は拒否されます。 |
| section_type | enum | いいえ | 範囲の対象となる条文の種類。条文範囲を指定すると、デフォルトで Paragraph が使用されます。値:ris_list_reference topic section_types。Alle | Artikel | Paragraph | Anlage |
| changed_since | enum | いいえ | 大まかな更新時期フィルター — 指定期間内に RIS で変更された文書を対象にします。正確な期間や削除を確認するには ris_track_changes を使用してください。one_week | two_weeks | one_month | three_months | six_months | one_year |
| left_force_to | string | いいえ | この日付(YYYY-MM-DD)以前に失効した条文。 |
| in_force_as_of | string | いいえ | 指定した日付(YYYY-MM-DD)に施行中のバージョンのみを返します。デフォルトはオーストリアの今日の日付です。この項目を省略しても、すべての過去バージョンが検索されるわけではありません。過去バージョンをすべて検索するには include_all_versions を指定してください。 |
| sort_direction | enum | いいえ | ソート方向。sort_by と併用します。ascending | descending |
| left_force_from | string | いいえ | この日付(YYYY-MM-DD)以降に失効した条文 — 廃止の追跡に使用します。entered_force_from と同じ排他条件が適用されます。 |
| entered_force_to | string | いいえ | この日付(YYYY-MM-DD)以前に施行された条文。 |
| entered_force_from | string | いいえ | この日付(YYYY-MM-DD)以降に施行された規定 — 新法の追跡用。連邦/州の統合版法令のみ対象で、in_force_as_of および include_all_versions とは併用できません。 |
| include_all_versions | boolean | いいえ | true の場合、すべての過去バージョンを検索します(施行日による絞り込みなし)— バージョン履歴の調査用です。in_force_as_of より優先され、施行期間の絞り込み条件とは併用できません。 |
詳細
@cyanheads/ris-austria-mcp-server
MCP 経由で、オーストリアの連邦法・州法の現行統合法令、裁判所の判決、公式RISの真正な連邦官報を検索できます。キー不要。STDIOまたはStreamable HTTPに対応。
公開ホストサーバー: https://ris-austria.caseyjhand.com/mcp
概要
政府公式の法情報システムであるRISから、オーストリアの法律を検索できます。連邦、州、自治体の法律、裁判所の判決、1848年まで遡る官報、法案、閣僚令を収録しています。すべての文書に法的拘束力の状況が表示されます。APIキーは不要です。
ツール
| ツール | 説明 |
|---|---|
ris_search_legislation | 指定日時点(デフォルトは今日)で有効な連邦、州、自治体の現行統合法令と、一部法律の英訳を検索します |
ris_search_case_law | 17の裁判所コードを対象に、1回の呼び出しにつき1つの裁判所または法廷の判例法を検索します |
ris_search_gazette | 連邦、州、地区、自治体の官報を閲覧します。連邦官報の履歴は1848年まで自動的に遡って検索されます |
ris_search_drafts | 閣僚審査用草案(Begutachtungsentwürfe)と政府法案(Regierungsvorlagen)を検索します |
ris_search_announcements | 社会保険関連の通知から閣僚令、閣僚評議会議事録まで、7つの分野別コレクションを検索します |
ris_lookup_citation | オーストリアの法律引用(「§ 6 DSG」、「BGBl. I Nr. 165/1999」、GeschäftszahlまたはECLI)を解決し、該当文書を取得します |
ris_get_document | 法的拘束力の状況とともに、文書をMarkdown、HTML、XML形式、または表示用URLのみで取得します |
ris_track_changes | 指定した期間内に、1つのアプリケーションで追加、変更、削除されたすべての文書を一覧表示します |
ris_list_reference | RISの語彙(アプリケーション、裁判所、州、省庁、官報の部、引用形式、検索構文)をオフラインで参照します |
リソース
| リソース | 説明 |
|---|---|
ris://document/{application}/{documentNumber} | 1 件の RIS 文書の Markdown テキスト |
このリソースは ris_get_document を反映しているため、ツールのみを利用するクライアントでも情報を失いません。
機能リファレンス
ris_search_legislation tool
query(全文)またはtitle(タイトル、短縮タイトル、略称。「DSG」など)で検索します。scopeはfederal(既定値)または州です。municipalityを指定すると州のスコープが自治体の法令に切り替わり、language: englishを指定すると約 138 件の英訳を検索します。in_force_as_ofの既定値はオーストリアの今日の日付で、appliedInForceAsOfとして返されます。include_all_versionsとentered_force_*/left_force_*の期間指定は、相互に排他的な選択肢です。- レコードには
law_id(法令の各条項を検索する際に指定)、section_label、abbreviation、keywords、施行日、eli、celex_references、content_urlsが含まれます。
ris_search_case_law tool
courtは必須で、1 回の呼び出しにつき 1 つのコードを指定します。query、引用されたnorm(「DSG §1」など)、case_number、decided_from/decided_to、decision_type(headnote、full_text、all。既定値はall)で絞り込めます。裁判所固有のフィルターにはcourt_name(justiz)、state(lvwg/uvs)、collection_number(vfgh/vwgh/uvs)があります。誤った裁判所に指定すると、court_filter_mismatchとして失敗します。- レコードには
case_numbers(判例要旨には、対象となるすべての決定が記載されます)、decision_date、ecli、norms_cited、判例要旨のguiding_principleが含まれます。 court: normenlisteを指定すると、判例の代わりにnorm_indexの下に索引付き法令が返されます。
ris_search_gazette tool
scopeはfederal(既定値)、州、district、またはmunicipalです。number、part、type、published_from/published_to、issuer、district_authority、municipalityで絞り込めます。州のスコープでは、seriesとstate_eraも指定できます。- 連邦の検索は、1 つの時代のデータ(BgblAuth 2004 年以降、BgblPdf 1945~2003 年、BgblAlt 1848~1940 年)から提供され、
servedApplicationとして返されます。2 つの時代にまたがる日付範囲を指定すると、分割する日付とともにcross_tier_rangeとして失敗します。 - レコードには
binding(authentic、historical_record、consolidated_informational)、存在する場合はauthentic_pdf_url、1848~1940 年の場合はalex_url(ÖNB のスキャン)、該当する場合はcelex_references、1848~2003 年の連邦の項目ではpromulgationが含まれます。
ris_search_drafts tool
stageは必須です。review_drafts(in_review_onを指定)またはgovernment_bills(2004 年以降。decided_from/decided_toを指定)を選びます。ministryには「BMF」などの略称、または正式名称を指定できます。- レコードには
review_startとreview_deadlineまたはdecided、RIS が提供する場合はabbreviationとkeywords、さらにtypeで分類されたmaterials[](Erläuterungen、Textgegenüberstellung、Vorblatt/WFA、付属資料)が含まれます。materials[].urlをris_get_documentに渡すと、文書を読み取れます。
ris_search_announcements tool
collectionは必須です。social_insurance、veterinary、court_rules、trade_exam_rules、health_structure_plans、ministerial_decrees、council_minutesのいずれかを指定します。コレクションで受け付けないフィルターを指定すると、social_insuranceとveterinaryのchanged_sinceも含め、collection_filter_mismatchとして失敗します。issuerに省庁(「BMF」)や社会保険機関(「ÖGK」)の略称を指定すると、正式名称に展開されます。- レコードには
binding(authentic、administrative_directive、preparatory)、authentic_pdf_url、および、議事録と省令を閲覧できる唯一のビューであるdocument_urlが含まれます。 - 各コレクションには、RIS が提供する場合、
case_numbers、in_force_from/in_force_until、keywords、court_name、plan_state、session_numberなど、固有のメタデータが追加されます。
ris_lookup_citation ツール
- 呼び出しごとに
citationを1件指定します。分類は、規範(「§ 6 DSG」)、官報番号(「BGBl. I Nr. 165/1999」)、事件番号(「VfGH G 13/2025」)またはECLI、あるいは判例集番号(「VfSlg 19.632/2012」から選択します。kindで検索経路を指定し、courtとstateで絞り込み、in_force_as_ofで規範のバージョンを指定します(デフォルトは今日です)。 - 一致する検索ツールと同じ形式の
recordと、foundおよびkindを返します。複数の文書が一致した場合はalternatives_countも返します。一致しない場合、エラーの代わりにfound: falseとguidanceを返します。 - 規範は、引用された法律(「§ 2 EStG」→ EStG 1988 § 2、「AlVG 1977」→ RISでは年号なしで収録されているAlVG、「VwGVG 2014 §28」→ VwGVG § 28。タイトルに年号がないため、年号なしでも再検索します)、その下位規定、および末尾の「;」を除いた形(「Art. 6 (1) B-VG」→ B-VG Art 6)に解決されます。序数で始まる略称も通常どおり解釈します(「1. COVID-19-JuBG §1」)。法律の引用時のバージョン指定は除外されます(「ABGB idF BGBl I 2010/28 §988」→ 要求された日付時点で有効なABGB § 988。改正法の官報掲載情報には解決されず、引用されたバージョンが適用されていない旨の注記が表示されます)。長い名称も略称で解釈されます(「StaatsanwaltschaftsG - StAG §35」→ StAG § 35)。また、カンマで結合された項目(「DSG §1, §24」)や、「. 」で完全な規範を結合した項目(「ZPO §179. ZPO §275 Abs2」)は、最初の規定に解決され、残りの項目も示されます。RISが統合していないEU法(「DSGVO Art32」)、または番号で引用されたEU法(「RL 2006/123/EG」、「VO (EG) 178/2002 Art3」)は、RISへのリクエストを行わず、EUR-Lexリンクとともに
found: falseを返します。「BGBl. Nr. 50/2025」は部が指定されていないため曖昧な結果となり、第I部、第II部、第III部を示します。
ris_get_document ツール
document_numberとapplicationを指定するか、content_urlsまたは草案のmaterials[].urlにあるdocument_urlを指定します。formatはmarkdown(デフォルト)、html、xml、urls_onlyのいずれかです。- すべての結果には、存在する場合、
binding_statusとauthentic_pdf_urlが含まれます。テキスト形式での提供がない適用分野(地区および自治体の公布文、裁判所規則、議会議事録、1848~1940年の官報)では、失敗を返す代わりに、使用可能なURLを含む通知を返します。 - 40,000バイトを超えるMarkdownは
kind: outlineを返します。項目を取得するには、sectionsを指定して再度呼び出してください。40,000バイトを超えるhtmlとxmlは、byte_sizeとcontent_urlsを含むkind: linkを返すため、markdownで読み込んでください。
ris_track_changes ツール
application(39種類のコードのいずれか)とchanged_from/changed_toを指定します。include_deletedを指定すると削除分も含まれます。削除分を報告するのはこのツールのみです。- レコードには
changed、published、binding_statusが含まれます。削除分にはdeleted: trueとdeleted_atが設定されます。 - 法律の行には
section_label、law_id、in_force_from/in_force_untilが含まれます(終了日の記載がないことは、現在有効であることと同じではありません)。判決の行にはcase_numbersとdecision_dateが含まれます。
ris_list_reference ツール
topicで17種類の静的テーブルから選択します。内容は、適用分野、裁判所、州、判決の種類と分類、発行機関、省庁、判例集、段階、変更期間、条項の種類、官報の部、法律の種類、地区当局、司法の分野、検索構文、引用形式です。- 上流への呼び出しを行わずに、
summaryとentries(value、label、details)を返します。
ris://document/{application}/{documentNumber} リソース
- 検索結果または照会結果にある
applicationとdocumentNumberを指定して文書を取得する、文書1件分のtext/markdownです。format: markdownを指定したris_get_documentと同じ内容です。 - テキスト形式での提供がない適用分野では、PDFまたはスキャン画像を示す注記が返されます。テキストが大きすぎる場合はアウトラインが返されるため、項目の取得にはツールを使用してください。
特徴
@cyanheads/mcp-ts-core を基盤としており、stdio および Streamable HTTP トランスポート、プラグイン式の認証(none/jwt/oauth)、切り替え可能なストレージ(in-memory、filesystem、Supabase、Cloudflare KV/R2/D1)、オプションの OpenTelemetry トレーシングを備えた構造化ロギングを提供します。
RIS 固有の機能:
- OGD の全 39 アプリケーションに対応:連邦、州、地区、市町村の官報を統合したもの、17 の裁判所および審判所のコレクション、立法プロセス、各分野のお知らせ
- 引用情報はキーワード検索ではなく、正確なフィルター(条項とタイトル、官報番号、Geschäftszahl、Sammlungsnummer)で解決します
- 日付の形式は
YYYY-MM-DDです。検索ツールはpageとpage_size(1~100、10 または 20 件ずつのページとして返されます。既定値は 20)でページ分割します。テキストフィルターは空欄で送信せず、省略してください - 裁判所、アプリケーション、州、省庁のコードは
ris_list_referenceから取得できます - ツールの説明は英語です。タイトル、フィールド値、RIS のエラーメッセージはドイツ語のままです
エージェント向けの出力:
- すべてのレコードに、型付きの拘束力ステータス(
authentic、consolidated_informational、historical_record、decision、preparatory、administrative_directive、translation)が含まれます - ページ分割された結果には
totalCountとtruncatedが含まれ、appliedInForceAsOfやservedApplicationなど、サーバーが適用した内容も返されます - 型付きのエラー理由(
court_filter_mismatch、cross_tier_range、invalid_query、document_not_found、…)と、該当結果がない場合の通知には、次に呼び出すべきツールが示されます
はじめに
公開ホストインスタンス
公開インスタンスを https://ris-austria.caseyjhand.com/mcp で利用できます。インストールは不要です。Streamable HTTP 経由で任意の MCP クライアントを接続してください:
{
"mcpServers": {
"ris-austria-mcp-server": {
"type": "streamable-http",
"url": "https://ris-austria.caseyjhand.com/mcp"
}
}
}
セルフホスト/ローカル
Bun を使って、MCP クライアントの設定にサーバーを追加します:
{
"mcpServers": {
"ris-austria-mcp-server": {
"type": "stdio",
"command": "bunx",
"args": ["@cyanheads/ris-austria-mcp-server@latest"]
}
}
}
または、npx を使います(Bun は不要です):
{
"mcpServers": {
"ris-austria-mcp-server": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@cyanheads/ris-austria-mcp-server@latest"]
}
}
}
または、Docker を使います:
{
"mcpServers": {
"ris-austria-mcp-server": {
"type": "stdio",
"command": "docker",
"args": [
"run", "-i", "--rm",
"-e", "MCP_TRANSPORT_TYPE=stdio",
"ghcr.io/cyanheads/ris-austria-mcp-server:latest"
]
}
}
}
bunx/npx の場合は "env" キーの下に任意の設定変数を追加します。Docker の場合は、追加の -e NAME=value 引数として指定します。
Streamable HTTP を使用するには、トランスポートを設定してサーバーを起動します:
MCP_TRANSPORT_TYPE=http MCP_HTTP_PORT=3010 bun run start:http
# Server listens at http://localhost:3010/mcp
前提条件
- Bun v1.4.0 以上(または Node.js v24 以上)。
- API キーは不要です。RIS OGD API はキーなしで利用できます。
インストール
- リポジトリをクローンします:
git clone https://github.com/cyanheads/ris-austria-mcp-server.git
- ディレクトリに移動します:
cd ris-austria-mcp-server
- 依存関係をインストールしてビルドします:
bun install
bun run rebuild
- MCP クライアントの設定ファイルに追加します:
{
"mcpServers": {
"ris-austria-mcp-server": {
"type": "stdio",
"command": "node",
"args": ["/absolute/path/to/ris-austria-mcp-server/dist/index.js"],
"env": {
"MCP_TRANSPORT_TYPE": "stdio",
"MCP_LOG_LEVEL": "info"
}
}
}
}
設定
| 変数 | 説明 | 既定値 |
|---|---|---|
RIS_API_BASE_URL | RIS OGD REST API のベース URL。 | https://data.bka.gv.at/ris/api/v2.6 |
RIS_CONTENT_BASE_URL | 表示用 URL の生成および文書の取得に使用する文書コンテンツのホスト。https://www.ris.bka.gv.at は自動化されたクライアントにボット確認ページを返します。 | https://ogd.ris.bka.gv.at |
RIS_CONTACT | User-Agent に追加する連絡先文字列。 | なし |
MCP_TRANSPORT_TYPE | トランスポート:stdio または http。 | stdio |
MCP_HTTP_PORT | HTTP サーバーのポート。 | 3010 |
MCP_SESSION_MODE | HTTP セッションモード:stateless、stateful、または auto。 | stateless |
MCP_AUTH_MODE | 認証:none、jwt、または oauth。 | none |
MCP_LOG_LEVEL | ログレベル(debug、info、warning、error など)。 | info |
OTEL_ENABLED | OpenTelemetry を有効にします。 | false |
任意のオーバーライドの全一覧は .env.example を参照してください。
サーバーの実行
ローカル開発
-
ビルドして実行します:
# One-time build bun run rebuild # Run the built server bun run start:stdio # or bun run start:http -
チェックとテストを実行します:
bun run devcheck # Lint, format, typecheck, security bun run test # Vitest test suite bun run lint:mcp # Validate MCP definitions against spec
Docker
docker build -t ris-austria-mcp-server .
docker run --rm -p 3010:3010 ris-austria-mcp-server
Dockerfile は、既定で HTTP トランスポートとステートレスセッションモードを使用し、/var/log/ris-austria-mcp-server にログを出力します。OpenTelemetry のピア依存関係は既定でインストールされます。これらを省略するには、--build-arg OTEL_ENABLED=false を指定してビルドしてください。
プロジェクト構成
| ディレクトリ | 目的 |
|---|---|
src/index.ts | createApp() のエントリーポイント。ツールとリソースを登録します。 |
src/config | オプションの RIS エンドポイントおよび連絡先設定。Zod で解析します。 |
src/mcp-server/tools | ツール定義(*.tool.ts)。 |
src/mcp-server/resources | リソース定義(*.resource.ts)。 |
src/services/ris | RIS リクエストの構築、HTTP アクセス、正規化、静的な参照データ。 |
docs/design.md | 設計メモ:ツールの範囲、サービス仕様、実際に確認した RIS API リファレンス。 |
tests/ | src/ に対応する単体テストと統合テスト。 |
framework-skills/ | @cyanheads/mcp-ts-core から同期した開発スキル。 |
開発ガイド
開発ガイドラインとアーキテクチャ上のルールについては、CLAUDE.md / AGENTS.md を参照してください。要点は次のとおりです。
- ハンドラーは例外をスローし、フレームワークが捕捉します。ツールのロジックで
try/catchは使用しません。 - リクエスト単位のログには
ctx.log、テナント単位のストレージにはctx.stateを使用します。 src/index.tsのcreateApp()を通じて新しいツールとリソースを登録します。- RIS API をラップする際は、生データを検証してからドメイン型に正規化し、出力スキーマを返します。不足しているフィールドを作り出してはいけません。
貢献
Issue を歓迎します。提出前にチェックとテストを実行してください。
bun run devcheck
bun run test
ライセンス
Apache-2.0 — 詳細については LICENSE を参照してください。
RIS OGD データは CC BY 4.0 です(帰属表示:RIS、Bundeskanzleramt Österreich)。基礎となる法令の文書は、著作権の対象外である公式文書です。法的拘束力を持つのは、真正で署名済みの官報の文言のみです。RIS の統合テキストは参考情報です。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。