mcpField
S
switzerland-parliament-mcp-server

switzerland-parliament-mcp-server

リモート
github.com/cyanheads法務・行政13 日前に更新
リポジトリ

switzerland-parliament-mcp-server について

Curia Vista と Amtliches Bulletin の公開データを検索する、スイス連邦議会向け MCP サーバーです。議会案件、討論、投票、議員、申告された利害関係を扱い、stdio と Streamable HTTP に対応します。

主な機能

  1. 01案件を題名、提出者、状態で検索
  2. 02案件本文と手続き履歴の取得
  3. 03国民議会の記名投票を取得
  4. 04討論記録と原文の検索
  5. 05議員と申告された利害関係の検索
  6. 06識別子、言語、会期の参照情報を表示

活用シーン

  1. 01議会案件の手続き経過を追跡
  2. 02国民議会の投票と議員の判断を確認
  3. 03議員や議題から討論発言を検索
  4. 04議員の委員会所属と申告利害を確認

MCP 対応

スイス議会の案件、投票、討論、議員、申告された利害関係を扱う 7 つの読み取り専用ツールを MCP クライアントに提供します。stdio と Streamable HTTP に対応します。

設定

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

エンドポイントhttps://switzerland-parliament.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/switzerland-parliament-mcp-server0.1.2

ツール

7
パラメーター型必須説明
limitintegerいいえページサイズの要求値。既定値は 20、上限は 100。委員会のページは役職候補を数え、バイト数の制限により案件数が少なくなる場合があります。
querystringいいえタイトルの部分文字列を 1 つ指定します。句読点とダイアクリティカルマークは保持してください。
authorstringいいえ公開された提出者ラベルの部分文字列。すべての共同署名者が対象になるわけではありません。
cursorstringいいえ前回の呼び出しで返された不透明な nextCursor を、同一のフィルターで使用します。省略すると最初から開始します。
typeIdstringいいえchparl_list_reference の business_types トピックにある案件種別コード。
languageenumいいえメタデータの言語:de(既定)、fr、または it。de | fr | it
statusIdstringいいえchparl_list_reference の statuses トピックにある現在のステータスコード。
sessionIdstringいいえchparl_list_reference の sessions トピックにある提出会期 ID。
committeeIdstringいいえchparl_list_reference の committees トピックにある委員会番号。公開済みの委員会役職のいずれかに一致します。
submittedTostringいいえ提出日の上限(指定日を含む)。形式は YYYY-MM-DD。
submittedFromstringいいえ提出日の下限(指定日を含む)。形式は YYYY-MM-DD。

詳細

@cyanheads/switzerland-parliament-mcp-server

MCP を通じて、スイスの議会案件、投票、討論、議員、申告された利害関係を検索できます。STDIO または Streamable HTTP に対応しています。

7 個のツール • 0 個のリソース • 0 個のプロンプト

Version License Docker MCP SDK npm TypeScript Bun

Install in Claude Desktop Install in Cursor Install in VS Code

Framework


概要

Curia Vista と Amtliches Bulletin に掲載されたスイス連邦議会の記録を扱います。議会案件を検索し、原文や手続きの履歴を読み、いずれかの院での討論を追い、国民議会の記名投票を確認し、議員や申告された利害関係を調べられます。公開 OData サービスを API キーなしで利用します。stdio プロセスまたはローカルの Streamable HTTP サーバーとして動作します。

検索結果には、出典 URL とダウンロード日とともに、Parlamentsdienste der Bundesversammlung, Bernをクレジットとして表示します。これは非公式な複製です。出典コンテンツには議会のオープンデータ利用条件が適用されます。基礎となる著作者の権利は保持されます。

ツール
ツール説明
chparl_search_businessタイトル、提出者、種別、ステータス、提出会期、日付、委員会での役割を指定して案件を検索します
chparl_get_business案件のメタデータ、原文、ステータス履歴、法案、関連案件、委員会審査、討論テーマを取得します
chparl_get_votes国民議会の記名投票を検索し、議員の投票内容をページ単位で取得するか、投票数と会派別集計の全体を読み取ります
chparl_search_transcripts案件、テーマ、発言者、会期、議会、日付で討論の発言箇所を検索し、原文を取得します
chparl_search_members氏名、議会、州、政党、会派で現職または元議員の所属記録を検索します
chparl_get_member議員の基本情報、議会の在任期間、委員会所属、申告された利害関係を取得します
chparl_list_reference識別子、対象範囲、言語、コード、委員会、会期を確認します

機能リファレンス

chparl_search_business tool
  • query はタイトル内の文字列に一致します。author は公開されている提出者ラベルに一致し、共同署名者すべてを対象とするものではありません。任意の typeId、statusId、sessionId、committeeId、submittedFrom、submittedTo で検索を絞り込めます。日付は範囲に含まれ、会期は提出会期を指します
  • 新しい正規案件 ID から順に並び、1ページあたりのデフォルト件数は 20 件、最大件数は 100 件です。nextCursor を変更せずにフィルターを指定して続行します。一致しないカーソルを指定すると invalid_cursor エラーになります
  • 委員会での検索では役割候補を調べ、重複のない案件を返すため、ページの件数が少なくなる場合があり、totalCount が省略されることもあります。委員会フィルターを指定しない場合、totalCount はフィルター適用前の案件数です(指定されている場合)
  • 返された businessId を chparl_get_business、chparl_get_votes、または chparl_search_transcripts に渡します

chparl_get_business tool
  • 正規の 8 桁の businessId または 99.1234 のような公開されている短縮番号を受け付けます。短縮番号が曖昧な場合は ambiguous_business_number エラーになります。overview(デフォルト)はメタデータと、UTF-8 のサイズを含む availableTextFields を返します
  • section: "texts" は textDocument.kind: "full" | "outline" を返します。複数のフィールドに内容があり、完全な結果が 24,000 バイトに達する場合、自動開示ではフィールドごとのサイズを示す概要が返されます。textFields を明示的に選択した場合、または内容のあるフィールドが 1 つだけの場合は、このしきい値を超えても全文が返されます
  • description、initialSituation、proceedings、draftText、submittedText、reasonText、documentationText、motionText、federalCouncilResponseText、または federalCouncilProposalText を選択します。未公開の選択項目は unavailableTextFields に表示されます。原文の HTML、空白、改行コードはそのまま保持されます
  • status_history、bills、related_business、preconsultations、subjects はそれぞれ個別にページ分割されます。デフォルトは 20 件、最大は 100 件で、続行には nextOffset を使います。ページ分割はこれらのセクションにのみ適用され、textFields は texts のみに適用されます
  • 該当案件がない場合は found: false を返します。関連付けられた法案は議会記録であり、制定法の本文ではありません。大規模な討論を絞り込むには subjects を使います

chparl_get_votes ツール
  • mode: "votes" と businessId で開始すると、採決記録のメタデータが返されます。1ページあたりの件数はデフォルトで10件、最大50件です。返された voteId を mode: "members"(デフォルト50件、最大100件、任意の personNumber を指定可能)または mode: "groups"(全件、ページ分割なし)とともに使用します
  • 会員の採決記録は、2003年冬会期以降の国民議会を対象としています。全州議会の会員の採決結果はここでは利用できません。結果が空でも、採決がなかったことを示すものではありません
  • members は decisionCounts.scope: "page" を返します。groups は公開されている会員の全行を読み込んでから、scope: "vote"、complete: true、および会派別の合計を返します。会員データが利用できない場合、投票数がゼロの完全な合計は推定されません
  • 件数は現在の所属ではなく、採決記録に公開されている所属情報に基づきます。元の決定ラベル、不明なコード、欠落している決定はそのまま表示されます。文書化されているコードは、1=賛成、2=反対、3=棄権、6=第57条第4項に基づく欠席、7=議長は投票しない、です
  • ページ分割のあるモードでは nextOffset を使って続行します。found: false は、案件または選択した採決が存在しないことを、子コレクションが空であることと区別します

chparl_search_transcripts ツール
  • 会議録の対象は1999年冬会期からで、両院が含まれます。businessId、subjectId、personNumber、sessionId、日付の境界値、または完全一致の transcriptId のうち、少なくとも1つを指定してください。院だけの指定では不十分です
  • query は原文テキスト内の部分文字列を1つ検索します。さらに sessionId、または両端を含めて最大31暦日の dateFrom/dateTo 範囲が必要です
  • 検索結果ではデフォルトでメタデータと textSizeBytes が返されます。1ページあたりの件数はデフォルトで20件、最大100件です。includeText: true を指定すると、発言全文が返されます。デフォルトは3件、最大10件です。フィルターを変更せずに nextOffset を使って続行します
  • 完全一致の transcriptId ではデフォルトで全文が返され、併せて指定できるのは language と includeText のみです。includeText: false を明示するとメタデータが返されます。議事録IDと議題IDは10進数の文字列のまま扱われます
  • businessId と subjectId は同時に指定できません。案件の検索では関連するすべての議題(最大20件)が対象になります。議論の対象がそれを超える場合は business_scope_too_broad が返されるため、chparl_get_business の subjects セクションで対象を確認してから、subjectId を1つ指定してください
  • metadataLanguage は発言者のテキストを翻訳しません。languageOfText がない場合、言語は不明のままです。found は完全一致IDが見つからない場合を示し、scopeFound は案件が見つからない場合と、案件に発言記録がない場合を区別します

chparl_search_members ツール
  • query は公開されている名、姓、または正式名称の部分文字列に一致します。membership は current(デフォルト)、former、または all です。任意の council、cantonId、partyId、groupId で絞り込めます
  • 検索結果は、重複を除いた人物ではなく、MemberCouncil の所属記録です。1ページあたりの件数はデフォルトで20件、最大100件で、nextOffset を使って続行します
  • プロフィールの取得と会員の採決結果の絞り込みには personNumber を使います。これは Person.ID と一致するとは限りません。院の指定には N/S、またはドイツ語、フランス語、イタリア語の正式な院名を使用できます

chparl_get_member ツール
  • personNumber が必要です。overview(デフォルト)は、議会での身元情報と、ページ分割なしで基本となるすべての MemberCouncil 所属を返します
  • council_terms、committees、interests はそれぞれ独立してページ分割されます。デフォルトは20件、最大100件で、nextOffset を使って続行します。overview ではページ分割の指定を省略してください
  • 委員会の行は公開されている所属情報であり、過去の委員会所属をすべて網羅した一覧ではありません。paid フラグがない場合は不明を意味します。また、利益情報が空でも利益相反がないことを示すものではありません
  • 身元情報が見つからない場合は、検索方法の案内とともに found: false が返されます

chparl_list_reference ツール
  • トピック:identifiers、coverage、languages、business_types、statuses、councils、cantons、parties、groups、committees、sessions。返された ID は他のツールで使用します
  • ページあたりのデフォルトは 50 件、最大は 100 件で、nextOffset を使って続きを取得します。日付を指定できるのは sessions のみです。dateFrom はセッション開始日、dateTo はセッション終了日を指定し、どちらも指定日を含みます
  • statuses は、2023 年 7 月 1 日時点で有効な公式の旧・現行語彙のスナップショットで、era を含みます。未知の現行コードも表示されます。識別子、対象範囲、言語の説明は静的で、その他の辞書は最新情報です

機能

@cyanheads/mcp-ts-core を基盤としており、stdio と Streamable HTTP トランスポート、切り替え可能な認証(none/jwt/oauth)、交換可能なストレージ(in-memory、filesystem、Supabase、Cloudflare KV/R2/D1)、オプションの OpenTelemetry トレースに対応した構造化ログを備えています。

スイス議会に特化した機能:

  • API キー不要の読み取り専用アクセスで、議案、手続き上の関係、国民議会の採決記録、討論の抜粋、議員、申告済みの利害関係を取得できます
  • 翻訳のフォールバックなしで、de(デフォルト)、fr、it のメタデータを利用できます。イタリア語のすべての項目が揃っているかは確認されていません。英語とロマンシュ語の翻訳は提供されません
  • 公開済みのテキストと HTML は変更されません。併せて提供されるリンク/画像参照インデックスは、元の属性を保持し、利用可能な場合はクリック可能な絶対 HTTP(S) URL を提供します
  • ワークフロー全体に 45 秒の期限が設けられています。上流の検索に時間がかかる場合は、テキストの対象範囲を絞ると役立ちます

エージェントに適した出力:

  • content[] と structuredContent の両方に、同じレコード、出典情報、フィルター、通知、ページ情報が含まれます。複数行のテキストと HTML は、損失なく復元できるよう、フェンス付きテキストブロック内で JSON エンコードされます
  • コレクションには returnedCount、ページ分けがある場合は effectiveLimit、hasMore、利用可能な場合は続きの情報が含まれます。totalCount は判明している場合のみ表示されます。ライブデータの更新により、オフセットページの内容は変わる場合があります
  • コレクションの応答は、24,000 バイトの結果上限内にレコード全体が収まるよう調整されます。そのためページが短くなることはありますが、返されたフィールドが短縮されることはありません。分割できない大きなレコードは通知とともに全体が返されます。テキスト選択、議員の概要、グループの合計もすべて完全な状態で返されます
  • 欠損値は不明のまま扱われます。結果が空の場合はガイダンスが表示され、レート制限時には再試行の案内とともに upstream_rate_limited が返されます

はじめに

セルフホスト/ローカル

以下を MCP クライアントの設定ファイルに追加します。

{
  "mcpServers": {
    "switzerland-parliament-mcp-server": {
      "type": "stdio",
      "command": "bunx",
      "args": ["@cyanheads/switzerland-parliament-mcp-server@latest"],
      "env": {
        "MCP_TRANSPORT_TYPE": "stdio",
        "MCP_LOG_LEVEL": "info"
      }
    }
  }
}

または、npx を使用します(Bun は不要です)。

{
  "mcpServers": {
    "switzerland-parliament-mcp-server": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "@cyanheads/switzerland-parliament-mcp-server@latest"],
      "env": {
        "MCP_TRANSPORT_TYPE": "stdio",
        "MCP_LOG_LEVEL": "info"
      }
    }
  }
}

または、Docker を使用します。

{
  "mcpServers": {
    "switzerland-parliament-mcp-server": {
      "type": "stdio",
      "command": "docker",
      "args": ["run", "-i", "--rm", "-e", "MCP_TRANSPORT_TYPE=stdio", "ghcr.io/cyanheads/switzerland-parliament-mcp-server:latest"]
    }
  }
}

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 キーやアカウントは不要です。
インストール
  1. リポジトリをクローンします:
git clone https://github.com/cyanheads/switzerland-parliament-mcp-server.git
  1. ディレクトリに移動します:
cd switzerland-parliament-mcp-server
  1. 依存関係をインストールします:
bun install
  1. 環境を設定します:
cp .env.example .env
# Optional: edit framework transport, auth, logging, or telemetry settings

設定

サーバー固有の環境変数は必要ありません。

変数説明デフォルト
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
LOGS_DIRログファイルのディレクトリ(Node.js のみ)。<app-root>/logs
STORAGE_PROVIDER_TYPEストレージバックエンド:in-memory、filesystem、supabase、cloudflare-kv/r2/d1。in-memory
OTEL_ENABLEDOpenTelemetry を有効にします。false

共通のフレームワーク設定の上書きについては、.env.example を参照してください。

サーバーの実行

ローカル開発
  • 本番用バージョンをビルドして実行する:

    # One-time build
    bun run rebuild
    
    # Run the built server
    bun run start:http
    # or
    bun run start:stdio
    
  • チェックとテストを実行する:

    bun run devcheck  # Lints, formats, type-checks, and more
    bun run test      # Runs the test suite
    

プロジェクト構成

ディレクトリ目的
src/index.tscreateApp() のエントリーポイントとサービスのセットアップです。ツールは7つで、リソースとプロンプトはありません。
src/mcp-server/toolsツール定義、損失のない共通レンダリング、レコード全体に基づくページ調整です。
src/services/parliamentOData クライアント、ワークフローの期限、ドメインスキーマとサービス、来歴、参照スナップショットです。
tests/src/ の構成に対応する単体テストと統合テストです。

開発ガイド

開発ガイドラインとアーキテクチャ上のルールについては、CLAUDE.md を参照してください。要点は次のとおりです。

  • ハンドラーは例外をスローし、フレームワークがキャッチします。ツールのロジックに try/catch を使用しないでください
  • ロギングには ctx.log、ストレージには ctx.state を使用してください
  • 新しいツールとリソースは、src/index.ts の createApp() 配列に登録してください
  • 外部 API 呼び出しはラップしてください。未加工データを検証し、ドメイン型に正規化してから、出力スキーマに従って返します。不足しているフィールドを捏造しないでください

貢献

Issue を歓迎します。提出前にチェックとテストを実行してください。

bun run devcheck
bun run test

ライセンス

このプロジェクトは Apache 2.0 License のもとでライセンスされています。詳細は LICENSE ファイルを参照してください。

コメント

MCP は初めてですか?

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

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