mcpField
R
ris-austria-mcp-server

ris-austria-mcp-server

リモート
github.com/cyanheads法務・行政2今日更新
リポジトリ

ris-austria-mcp-server について

法律実務家や研究者向けに、オーストリア政府の RIS から法令、裁判例、公報、法案を検索する MCP サーバーです。法令引用の解決に加え、文書の拘束力の状態も示します。

主な機能

  1. 01連邦・州・自治体の法令検索
  2. 0217種類の裁判所コードで判例検索
  3. 031848年まで遡る公報の閲覧
  4. 04引用の解決と文書の取得
  5. 05文書の変更・削除の追跡

活用シーン

  1. 01特定日時に有効な法令の確認
  2. 02裁判所や事件番号による判例検索
  3. 03官報の掲載情報の取得
  4. 04RIS コレクションの変更監視

MCP 対応

検索、照会、変更追跡の9つのツールと文書リソースを MCP クライアントに提供します。STDIO と Streamable HTTP に対応し、公開ホスト型エンドポイントも利用できます。

設定

リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。

エンドポイントhttps://ris-austria.caseyjhand.com/mcp
インストールコマンドをコピー
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。

パッケージ
npm@cyanheads/ris-austria-mcp-server0.6.0

ツール

9
パラメーター型必須説明
pageintegerいいえ結果ページ番号。1 から始まります。デフォルトは 1 です。
indexstringいいえSystematik 分類フィルター(例:"10/10 Datenschutz")。連邦/州の統合法令のみが対象です。省略すると絞り込みません。空の値は拒否されます。
querystringいいえ全文検索(Suchworte)。ブール演算子 UND/ODER/NICHT または AND/OR/NOT、括弧、引用符で囲んだフレーズを使用できます。ワイルドカード * は末尾のみ使用できます("Datenschutz*"。"*schutz" は不可)。構文:ris_list_reference topic search_syntax。省略すると絞り込みません。空の値は拒否されます。
scopeenumいいえ管轄範囲:federal(デフォルト)は連邦統合法令を検索します。州を指定すると、その州の統合法令を検索します(municipality も指定した場合は、その州の市町村法を検索します)。federal | burgenland | kaernten | niederoesterreich | oberoesterreich | salzburg | steiermark | tirol | vorarlberg | wien
titlestringいいえタイトル検索(Titel)— タイトル、短縮タイトル、公式略称("ABGB"、"DSG")に一致します。フレーズフィールド:* は先頭または末尾に使用でき、その隣に 2 文字以上必要です。省略すると絞り込みません。空の値は拒否されます。
law_idstringいいえ法律単位のグループ化キー(Gesetzesnummer、例:10001597 = DSG)— 完全一致し、その法律の全条文を返します。連邦/州の統合法令のみが対象です。省略すると絞り込みません。空の値は拒否されます。
sort_byenumいいえソート列:条文(§/Artikel/Anlage ラベル)または in_force_date。デフォルト:上流の順序。連邦/州の統合法令のみが対象です。section | in_force_date
languageenumいいえgerman(デフォルト)は正式なドイツ語コーパスを検索します。english は一部の連邦法の非公式英訳(約 138 件)を検索します(scope: federal が必要。query および title とのみ併用可能)。german | english
page_sizeenumいいえページあたりの文書数:10 または 20(デフォルトは 20)。さらに結果を取得するには、この値を維持して page を増やしてください。10 | 20
section_tostringいいえ条文範囲の終端。単一の条文の場合は section_from と同じ値です。省略すると絞り込みません。空の値は拒否されます。
municipalitystringいいえ市町村法の市町村名(例:"Graz" — "Stadt Graz" ではなく、RIS の表記を使用)。州の scope が必要です。query、title、in_force_as_of とのみ併用できます。収録対象は 6 州の一部規範です(Burgenland/Tirol/Vorarlberg は対象外)。省略すると統合法令を検索します。空の値は拒否されます。
section_fromstringいいえ§ / Artikel / Anlage 番号範囲の開始値。数字に任意の英字を付けられます("6"、"1a")。連邦/州の統合法令のみが対象です。省略すると絞り込みません。空の値は拒否されます。
section_typeenumいいえ範囲の対象となる条文の種類。条文範囲を指定すると、デフォルトで Paragraph が使用されます。値:ris_list_reference topic section_types。Alle | Artikel | Paragraph | Anlage
changed_sinceenumいいえ大まかな更新時期フィルター — 指定期間内に RIS で変更された文書を対象にします。正確な期間や削除を確認するには ris_track_changes を使用してください。one_week | two_weeks | one_month | three_months | six_months | one_year
left_force_tostringいいえこの日付(YYYY-MM-DD)以前に失効した条文。
in_force_as_ofstringいいえ指定した日付(YYYY-MM-DD)に施行中のバージョンのみを返します。デフォルトはオーストリアの今日の日付です。この項目を省略しても、すべての過去バージョンが検索されるわけではありません。過去バージョンをすべて検索するには include_all_versions を指定してください。
sort_directionenumいいえソート方向。sort_by と併用します。ascending | descending
left_force_fromstringいいえこの日付(YYYY-MM-DD)以降に失効した条文 — 廃止の追跡に使用します。entered_force_from と同じ排他条件が適用されます。
entered_force_tostringいいえこの日付(YYYY-MM-DD)以前に施行された条文。
entered_force_fromstringいいえこの日付(YYYY-MM-DD)以降に施行された規定 — 新法の追跡用。連邦/州の統合版法令のみ対象で、in_force_as_of および include_all_versions とは併用できません。
include_all_versionsbooleanいいえtrue の場合、すべての過去バージョンを検索します(施行日による絞り込みなし)— バージョン履歴の調査用です。in_force_as_of より優先され、施行期間の絞り込み条件とは併用できません。

詳細

@cyanheads/ris-austria-mcp-server

MCP 経由で、オーストリアの連邦法・州法の現行統合法令、裁判所の判決、公式RISの真正な連邦官報を検索できます。キー不要。STDIOまたはStreamable HTTPに対応。

9個のツール • 1個のリソース

Version License Docker MCP SDK npm TypeScript Bun

Install in Claude Desktop Install in Cursor Install in VS Code

Framework

公開ホストサーバー: https://ris-austria.caseyjhand.com/mcp


概要

政府公式の法情報システムであるRISから、オーストリアの法律を検索できます。連邦、州、自治体の法律、裁判所の判決、1848年まで遡る官報、法案、閣僚令を収録しています。すべての文書に法的拘束力の状況が表示されます。APIキーは不要です。

ツール
ツール説明
ris_search_legislation指定日時点(デフォルトは今日)で有効な連邦、州、自治体の現行統合法令と、一部法律の英訳を検索します
ris_search_case_law17の裁判所コードを対象に、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_referenceRISの語彙(アプリケーション、裁判所、州、省庁、官報の部、引用形式、検索構文)をオフラインで参照します
リソース
リソース説明
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 はキーなしで利用できます。
インストール
  1. リポジトリをクローンします:
git clone https://github.com/cyanheads/ris-austria-mcp-server.git
  1. ディレクトリに移動します:
cd ris-austria-mcp-server
  1. 依存関係をインストールしてビルドします:
bun install
bun run rebuild
  1. 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_URLRIS 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_CONTACTUser-Agent に追加する連絡先文字列。なし
MCP_TRANSPORT_TYPEトランスポート:stdio または http。stdio
MCP_HTTP_PORTHTTP サーバーのポート。3010
MCP_SESSION_MODEHTTP セッションモード:stateless、stateful、または auto。stateless
MCP_AUTH_MODE認証:none、jwt、または oauth。none
MCP_LOG_LEVELログレベル(debug、info、warning、error など)。info
OTEL_ENABLEDOpenTelemetry を有効にします。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.tscreateApp() のエントリーポイント。ツールとリソースを登録します。
src/configオプションの RIS エンドポイントおよび連絡先設定。Zod で解析します。
src/mcp-server/toolsツール定義(*.tool.ts)。
src/mcp-server/resourcesリソース定義(*.resource.ts)。
src/services/risRIS リクエストの構築、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 の統合テキストは参考情報です。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。