mcpField
S
sweden-parliament-mcp-server

sweden-parliament-mcp-server

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

sweden-parliament-mcp-server について

Riksdagen Open Data の記録を検索する MCP サーバーです。議会文書、演説、投票、議員、SFS 法令を扱い、stdio または Streamable HTTP で動作します。

主な機能

  1. 01議会文書と SFS 法令の検索
  2. 02文書本文と決定情報の取得
  3. 03会期や議員による演説検索
  4. 04報告書と議員投票の取得
  5. 05議員と任務履歴の検索

活用シーン

  1. 01委員会や会期で議会文書を検索
  2. 02議会討論の発言内容を確認
  3. 03報告書の決定と会派別投票数を確認
  4. 04議員の公開された任務履歴を調査

MCP 対応

スウェーデン議会の文書、法令、演説、投票、議員情報を検索する 7 つの読み取り専用ツールを MCP クライアントに提供します。stdio と Streamable HTTP に対応します。

設定

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

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

ツール

7
パラメーター型必須説明
limitintegerいいえ要求する項目数。100 を超える値は 100 に制限され、その旨が通知されます。
topicenumはい参照する語彙またはガイダンストピック。document_types | committees | parties | constituencies | speech_types | sessions | identifiers | coverage
offsetintegerいいえ0 始まりのローカル項目オフセット。

詳細

@cyanheads/sweden-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


概要

リクスダーゲンのオープンデータから、スウェーデンの議会記録を検索できます。法案や委員会報告を探し、公表された決定や本会議投票を確認し、演説を読み、議員の役職を調べ、統合版 SFS 法令を取得できます。stdio プロセスまたはローカルの Streamable HTTP サーバーとして動作し、API キーは不要です。

情報源:スウェーデン議会。この独立したサービスは、スウェーデン議会(Sveriges riksdag)が運営または推奨するものではありません。スウェーデン語のタイトル、ラベル、決定、本文は情報源の表記を保持しています。英語のラベルは、情報源に記載されている場合に限り表示されます。

ツール
ツール説明
riksdag_list_reference公式の文書種別、委員会、政党、選挙区、会期を参照し、識別子と対象範囲に関するガイダンスを確認します
riksdag_search_documentsキーワード、種別、会期、委員会、政党、日付で議会文書と統合版 SFS 法令を検索します
riksdag_get_document公表情報、決定、留保意見、活動、リンク、ページ分割された本文を読み取ります
riksdag_search_speeches会期内の討論見出し、議員、政党から演説を検索し、get モードで全文を取得します
riksdag_get_votes報告書の決定と政党別の本会議投票集計、または会期中の特定議員の本会議投票を読み取ります
riksdag_search_members名前、政党、選挙区、情報源サービスの分類で名簿項目を検索します
riksdag_get_member指定した議員 IID と公表済みの役職履歴を読み取ります

機能リファレンス

riksdag_list_reference ツール
  • topic:document_types、committees、parties、constituencies、speech_types、sessions、identifiers、または coverage
  • スウェーデン語ラベル、利用可能なソースの英語ラベル、ソースへのリンク、referenceVerifiedAt を含む日付付きオフラインスナップショットです。文書のサブタイプは親コードとは別に維持され、会期カタログは現在の会期に追いついていない場合があります
  • offset によるページネーションです。limit のデフォルトは 20 で、上限は 100 です。totalCount と完全な nextCall 引数が含まれます

riksdag_search_documents ツール
  • query、documentType、session、committee、party、dateFrom、dateTo は任意です。日付には YYYY-MM-DD を使用し、コードまたは完全一致する参照ラベルを指定できます
  • リモートの page は 1 から始まります。pageSize のデフォルトは 10 で、上限は 50 です。取得したすべての行がソース順で返され、利用可能な totalCount と nextCall も含まれます
  • 統合版法令には documentType: "sfs" を使用します。時間のかかる全文検索は session または documentType で絞り込んでください

riksdag_get_document ツール
  • 検索で取得した documentId、または 1974:152 などの曖昧さのない SFS 識別子が必須です。レコードが見つからない場合は found: false が返されます
  • メタデータ、完全なアウトライン、最初のテキストページを取得する場合は sections を省略します。metadata、decisions、reservations、activities、properties、attachments、references、text、または source_html を選択できます
  • テキストと HTML では Unicode コードポイントのオフセット(textOffset / htmlOffset)を使用します。長さのデフォルトは 1,000 で、明示的に指定した textLength / htmlLength の値が優先されます。配列セクションでは sectionOffset / sectionLimit を使用します(デフォルトは 20、適用される上限は 100)
  • nextTextCall、nextHtmlCall、または各 sectionPages[].nextCall を使用し、revision を保持してください。レコードが変更されている場合は revision_changed エラーになります。添付ファイルはリンクであり、ダウンロードされたファイルではありません
  • SFS の versionKind: "consolidated" は公表された統合版テキストを示しており、将来施行される規定が含まれる場合があります。制定時点の法的バージョンや特定時点の法的バージョンではありません

riksdag_search_speeches ツール
  • mode: "search"(デフォルト)では session が必須です。任意の memberId、party、speechType: "all" | "speech" で選択を絞り込めます。speech を指定すると答弁を除外します
  • headingContains は大文字小文字とダイアクリティカルマークを無視し、すべてのトークンが見出しと小見出しに含まれるかを照合します。演説本文は検索しません
  • ローカルの offset によるページネーションです。limit のデフォルトは 5 で、上限は 20 です。textCount のデフォルトは 1 で、上限は 5 です。メタデータのみを取得する場合は 0 を指定できます
  • mode: "get" では、検索結果からコピーした取得用の speechId が必須です。sourceSpeechId は使用できません。get モードでは検索フィルターが拒否されます。textOffset と任意の textLength を指定すると、nextTextCall を通じて公表された本文全体を読み取れます。テキストページのデフォルトは 1,000 コードポイントです
  • textState は included、not_requested、unavailable、または failed です。一時的なハイドレーションの失敗には復旧の詳細が含まれます。検索またはテキストの継続呼び出しでは revision を保持してください

riksdag_get_votes ツール
  • mode と session が必須です。mode: "report" では report(議案番号、または session:designation)またはレポートの documentId を指定します。mode: "member" では memberId が必須で、party を指定できます
  • レポートモードでは、権威ある決定と完全な会派グループが返されます。1 つの point を選択するか、pointOffset / pointLimit を使用します(デフォルトは 5、適用される上限は 10)。メンバーモードでは offset / limit を使用します(デフォルトは 20、適用される上限は 500)
  • 公表された主要な投票のみが対象で、すべての投票ラウンドが対象ではありません。rollCallState は available、acclamation、not_published、または unknown です。acclamation と判定するには明示的な決定の証拠が必要で、投票行が空であることだけを根拠にしてはなりません
  • 集計数が欠けている場合、その値は不明のままです。ソースにある追加の投票ラベルは otherVotes に保持されます。残りの全ポイントまたはメンバー行を取得するには、revision を指定して nextCall を使用してください

riksdag_search_members ツール
  • 任意の nameContains は、大文字・小文字と発音区別符号を無視してすべてのトークンに一致します。party と constituency には、コードまたは参照ラベルの完全一致を指定できます
  • sitting: "all" | "serving" | "not_serving" のデフォルトは all です。これは、実際の在職状況や選出された議員かどうかではなく、ソースの在職分類で絞り込みます。過去の登録情報や大臣が含まれる場合があり、分類が不明なものは all に含まれます
  • ローカルの offset ページネーションです。limit のデフォルトは 20 で、最大 100 に制限されます。candidateCount、絞り込み後の正確な totalCount、revision、nextCall を返します
  • memberId の先頭のゼロは保持してください。一部の欧州議会の登録情報には IID がなく、detailAvailable: false が返されます。その sourceRecordId は別の識別子であり、riksdag_get_member では使用できません

riksdag_get_member ツール
  • 検索結果から取得した、先頭のゼロを含む数値文字列の memberId が必須です。該当する登録情報がない場合は、ガイダンスとともに found: false を返します
  • 公開されている登録メタデータと役職をソース順に返します。assignmentOffset / assignmentLimit のデフォルトはそれぞれ 0 / 20 で、適用される上限は 100 です
  • assignmentTotal、nextCall、revision により、すべての情報を順に取得できます。役職の日付はソースの精度を維持しており、過去の在職状況を示すものではありません。連絡先情報と写真は除外されます

機能

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

Riksdag 固有の機能:

  • API キー不要で、公式の文書、発言、投票、議員の各エンドポイントに加え、日付付きの公式参照テーブルにアクセスできます
  • 文書テキストは、標準の Markdown または SFS のソーステキストとして取得でき、元の HTML は個別に選択できます
  • アップストリームの同時実行制御、上限付きの公開レスポンスキャッシュ、キュー処理、再試行、テキストの取得に適用される 55 秒の共通期限を備えています
  • 過去のデータの範囲はレコードの種類によって異なります。発言と投票のデータは 1993/94 年からで、それ以前の投票データには欠落があります

エージェント向けの出力:

  • content[] と structuredContent の両方に、ソースの帰属、取得時刻、有効なフィルター、ソースに関する警告を含めます
  • 行、セクション、テキストに対する完全な継続呼び出しを用意し、ローカルでの継続処理ではリビジョンを確認します。変化し続けるリモートの文書検索は、固定されたスナップショットではありません
  • 該当なし、利用できないテキスト、不明な件数、ソースの在職分類を明示します。候補が上限に達した場合は、不完全な取得結果を返さず、candidate_limit_reached として失敗します

はじめに

以下を MCP クライアントの設定ファイルに追加してください。

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

または npx を使用する場合(Bun は不要です):

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

または Docker を使用する場合:

{
  "mcpServers": {
    "sweden-parliament-mcp-server": {
      "type": "stdio",
      "command": "docker",
      "args": ["run", "-i", "--rm", "-e", "MCP_TRANSPORT_TYPE=stdio", "ghcr.io/cyanheads/sweden-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 以降)。
  • Riksdagen Open Data の利用に API キーやアカウントは不要です。
インストール
  1. リポジトリをクローンします:
git clone https://github.com/cyanheads/sweden-parliament-mcp-server.git
  1. ディレクトリに移動します:
cd sweden-parliament-mcp-server
  1. 依存関係をインストールします:
bun install
  1. 環境を設定します:
cp .env.example .env
# edit .env for optional transport, authentication, or logging overrides

設定

変数説明デフォルト
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.ts7 つのツールを登録し、サービスを初期化して、ステートレス HTTP セッションを選択します。
src/mcp-server/tools/definitions7 つの読み取り専用ツール定義。リソースとプロンプトはありません。
src/services/riksdagRiksdagen エンドポイントの解析、参照テーブル、トランスポート、キャッシュ、テキスト変換、継続処理。
tests/src/ の構成に対応するユニットテストと統合テスト。

完全なファイルツリーについては、docs/tree.md を参照してください。

開発ガイド

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

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

貢献

課題の報告を歓迎します。提出前にチェックとテストを実行してください:

bun run devcheck
bun run test

ライセンス

Apache-2.0 — 詳細は LICENSE を参照してください。

コメント

MCP は初めてですか?

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

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