uk-parliament-mcp-server について
英国議会の公式 API を通じてウェストミンスターの記録を検索する MCP サーバーです。法案、議員、投票、Hansard、書面質問、委員会を扱い、stdio または Streamable HTTP で動作します。
主な機能
- 01議題、議院、段階で法案を検索
- 02法案の段階、修正案、動議を取得
- 03議員のプロフィール、役割、投票を確認
- 04分院投票と党派別集計を検索
- 05Hansard の発言と原文を検索
- 06質問、回答、委員会記録を検索
活用シーン
- 01法案の段階と修正案を追跡
- 02指定日の議員所属を確認
- 03特定の議院投票の記録を確認
- 04討論発言や書面質問への回答を検索
MCP 対応
英国議会の法案、議員、投票、Hansard、質問、委員会を扱う 9 つの読み取り専用ツールを MCP クライアントに提供します。stdio と Streamable HTTP に対応します。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://uk-parliament.caseyjhand.com/mcpclaude mcp add --transport http cyanheads-uk-parliament https://uk-parliament.caseyjhand.com/mcp{"mcpServers":{"cyanheads-uk-parliament":{"type":"http","url":"https://uk-parliament.caseyjhand.com/mcp"}}}Cursor で開く{"servers":{"cyanheads-uk-parliament":{"type":"http","url":"https://uk-parliament.caseyjhand.com/mcp"}}}VS Code で開く{"mcpServers":{"cyanheads-uk-parliament":{"type":"http","url":"https://uk-parliament.caseyjhand.com/mcp"}}}{"mcpServers":{"cyanheads-uk-parliament":{"serverUrl":"https://uk-parliament.caseyjhand.com/mcp"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
ツール
9| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| house | enum | いいえ | Commons または Lords。在任中の政党を取得する場合は必須です。commons | lords |
| limit | integer | いいえ | 要求する参照行数。安全な正の整数で、デフォルトは 10、有効な上限は 20 です。 |
| topic | enum | はい | 参照トピック、または静的な識別子/対応範囲ガイド。identifiers | coverage | bill_stages | bill_types | parties | departments | answering_bodies |
| cursor | string | いいえ | 不透明なコレクションカーソル。同じ正規化済みフィルターを再使用してください。 |
| nameContains | string | いいえ | 名前付き参照セット全体を対象に、大文字と小文字を区別せず、トークンを AND 条件で照合します。 |
| contentCursor | string | いいえ | 同じ選択内容の再帰的なコンテンツ継続に使う不透明なカーソル。 |
詳細
@cyanheads/uk-parliament-mcp-server
MCP 経由で、英国議会の法案、議員、採決、ハンサード、質問書、委員会を検索します。STDIO または Streamable HTTP に対応しています。
概要
英国議会の法案、議員、庶民院および貴族院の採決、ハンサード、質問書、委員会に関する公式 API の記録を利用できます。議会の審議事項を検索し、選択した記録と出典リンクを取得して、それぞれ異なる識別子を使って議員、法案、採決、回答、委員会の証拠資料をたどれます。stdio プロセスまたはローカルの Streamable HTTP サーバーとして動作し、API キーは不要です。
ツール
| ツール | 説明 |
|---|---|
ukparl_lookup_reference | フィルター ID、識別子の名前空間、過去のデータ範囲に関するガイダンスを確認します |
ukparl_search_bills | タイトル、院、会期、提出者、段階、法案の種類で法案の概要を検索します |
ukparl_get_bill | 法案の詳細、段階、刊行物、修正案、ピンポン動議を取得します |
ukparl_search_members | 日付を指定した議員検索を含め、現職および元下院議員・貴族院議員を検索します |
ukparl_get_member | プロフィール、役職、委員会の議席、公式連絡先、利害関係、投票履歴を取得します |
ukparl_search_divisions | 院ごとの採決を検索し、メタデータ、投票者、政党別集計を確認します |
ukparl_search_hansard | 提供されている場合は完全な出典テキストとともに、議場での発言を検索します |
ukparl_search_questions | 質問と回答のプレビューを検索するか、質問の詳細全体を取得します |
ukparl_get_committee | 委員会を検索し、委員、議事、刊行物のメタデータを取得します |
機能リファレンス
ukparl_lookup_reference ツール
topic:identifiers、coverage、bill_stages、bill_types、parties、departments、answering_bodiesのいずれかです。ライブディレクトリはデフォルトで10行、最大20行を返し、任意のnameContainsによるANDトークンフィルタリングに対応しますhouseが必須なのはpartiesの場合のみです。このディレクトリには選択した院で活動中の政党が含まれ、過去のすべての政党は含まれません。静的ガイドでは、院と名前のフィルターはいずれも使用できません- 識別子のガイダンスでは、参照用の
stageIdと法案固有のbillStageId、院ごとの会期別表決ID、Questions APIのIDとUIN、委員会の人物IDとMembers APIのIDを区別します
ukparl_search_bills ツール
query、house、sessionId、memberId、stageIds、billTypeIdsは任意です。各ID配列には最大20件を指定できます。デフォルトでは10件の法案を返し、最大20件です- 結果は
detailLevel: "summary"で、billId、出典情報、コレクションの続きに関する情報が含まれます。現在の会期に限定されるとは推定されません。参照フィルターの解決にはukparl_lookup_referenceを使用してください
ukparl_get_bill ツール
billIdは必須です。sectionはデフォルトでoverviewです。またはstages、stage、publications、amendments、amendment、motions、motionを選択できます。コレクションはデフォルトで20件、最大50件を返します- ステージ、修正案、動議を選択するには、
stagesから取得した法案固有のbillStageIdが必要です。修正案または動議を個別に取得する場合は、親コレクションのitemIdも必要です(修正案にはamendmentId、動議にはmotion.id)。修正案と動議の一覧は要約形式です。個別のセレクターでは全文を取得します - エンティティが見つからない場合は、
found: falseとguidanceが返されます。legislationHandoff.statusはauthoritative_link、not_enacted、unavailableのいずれかです。実際に提供された legislation.gov.uk のリンクがある場合に限り、法令への引き継ぎが確立されます
ukparl_search_members ツール
name、constituency(出典にある所在地テキスト)、partyId、houseは任意です。currentOnlyはデフォルトでfalseで、現職と元議員の両方が含まれます。デフォルトでは10行、最大20行を返しますasOfでは、実在するYYYY-MM-DD形式の日付を指定して、その日時点の議員構成を選択できます。この指定と併用できるのはnameとページネーションのみです。返される最新のプロフィール項目は過去のスナップショットではありません- 要約形式の検索結果には、
ukparl_get_member用のmemberId、source、pageが含まれます。不明な出典フィールドは省略されるか、nullのままです
ukparl_get_member ツール
memberIdは必須です。sectionはprofile(デフォルト)、roles、committee_seats、contact、interests、votingのいずれかです。categoryを指定せずに役職を取得すると、利用可能な項目の概要が返されます。役職期間全体を取得するには、返されたカテゴリを選択してくださいinterestsとvotingではhouseが必須で、それ以外では省略します。ローカルの履歴はデフォルトで20行、最大50行です。投票ではlimitに関係なく、ネイティブの20行ページを使用しますfoundとguidanceにより、議員が見つからない場合と出典コレクションが利用できない場合を区別します。利益相反のツリーと委員会の関係には出典ポインターが保持されます。投票情報では記録されたロビーと計数係の情報が保持され、棄権や生涯にわたる参加を推定することはありません
ukparl_search_divisions ツール
houseは必須で、commonsまたはlordsを指定します。modeはsearch(デフォルト)、detail、voters、party_totalsのいずれかです。検索ではquery、memberId、範囲の始点と終点を含むstartDate/endDateを指定できます。デフォルトでは5件の会期別表決を返し、最大10件です- 他のモードでは、同じ院の
divisionIdが必要です。投票者はデフォルトで20行、最大50行を返し、出典どおりの正確なpartyラベルとlobbyを使用します。Commonsではaye、no、not_recorded、Lordsではcontent、not_contentです - 詳細情報では見出しの集計数と計数係の氏名が保持されます。
partyTotalsでは、計数係以外の記載者と計数係を分けて数えます。not_recordedは出典の一覧を示すもので、棄権を意味するものではありません。議員検索には計数係としての参加も含まれます
ukparl_search_hansard ツール
- 任意の
query、memberId、house、両端を含むstartDate/endDate、数値のdebateSectionIdを指定できます。既定では5件の発言を返し、上限は20件です。日付はYYYY-MM-DD形式で、期間は推定されません detailLevel: "complete"は、HTML を含む発言のソース全文を返します。summaryは、ソースからプレビューのみが提供されたことを意味します。セクションによる絞り込みでは、討論の完全な記録であることは保証されませんcoverageは、2004~2006年のウェブサイトに関する警告を含め、過去のデータの制約を示します。結果が空でも、討論がなかったことの証明にはなりません。タイムアウトした場合は日付範囲を狭めてください。アーカイブについては、topic: "coverage"を指定してukparl_lookup_referenceを使用してください
ukparl_search_questions ツール
mode: "search"(既定)は、query、memberId、house、最大20件のansweringBodyIds、answered、および両端を含むtabledFrom/tabledTo/answeredFrom/answeredToの日付(YYYY-MM-DD)を受け付けます。既定ではプレビューを10件返し、上限は20件です- 検索対象には、すべての会期と取り下げられた質問が含まれます。
answeredを省略すると、どちらの状態も含まれます。mode: "detail"には、返されたquestionIdのみを指定すると、質問と回答の完全な HTML、訂正、添付ファイルのメタデータが返されます。UIN はquestionIdではありません - 結果では
detailLevel: "summary"と"complete"が区別されます。詳細が見つからない場合は、found: falseとguidanceが返されます。添付ファイルはリンクとメタデータとして示され、ファイルはダウンロードされません
ukparl_get_committee ツール
mode: "search"(既定)は、queryとhouse(commons、lords、joint)を受け付けます。既定値は10件、上限は20件です。detail、members、inquiries、publicationsにはcommitteeIdが必要です。ネストされたコレクションの既定値は20件、上限は50件ですinquiryにはbusinessIdが必要です。publicationにはpublicationIdが必要です。businessIdは出版物の絞り込みにも使用できます。membershipは members モードでall(既定)、current、formerを選択します。inquiries/publications のqueryには2文字以上が必要ですinquiriesには、isInquiryでラベル付けされたすべての委員会業務種別が含まれます。レコードには型付きエンティティとsourcePathの関連が保持されます。出版物では証拠/報告書のメタデータと文書リンクが返されますが、ダウンロードやテキスト抽出は行われません
特長
@cyanheads/mcp-ts-core を基盤としています。stdio および Streamable HTTP トランスポート、差し替え可能な認証(none / jwt / oauth)、切り替え可能なストレージ(in-memory、filesystem、Supabase、Cloudflare KV/R2/D1)、構造化ログとオプションの OpenTelemetry トレースに対応しています。
英国議会に特化した機能:
- 7 つの公式 Westminster API オリジンに、API キー不要の読み取り専用アクセスを提供します。権限委譲された議会は対象外です
- 識別子の名前空間を分離し、ソースを明示的に選択します。現在の会期や日付範囲を推測することはありません
- 関連するリクエスト間でオリジンごとのバックプレッシャーを共有し、再試行回数に上限を設け、呼び出しのタイムアウトを 45 秒に設定します
- 過去のデータの対象範囲はソースごとに異なります。Hansard アーカイブの開始日は 1803 年 11 月 22 日、Spoken API の最小日付は不明で、自動的な過去アーカイブへのフォールバックは行いません
エージェントに適した出力:
- 出典情報 — ソースレコードにはソース API、リクエスト URL、取得日時、ライセンスへのリンクが付属します。
appliedには適用された選択内容と上限が報告されます - レコード全体を対象とするページネーション —
page.returned、hasMore、nextCursorは実際に出力されたレコードを示し、totalは判明している場合のみ含まれます。カーソルを使用して続行する際は、同じフィルターと適用済みの上限を指定してください - 大きなレコードを損失なく取得 —
delivery: "full" | "outline" | "fragment"により、完全なペイロードとcontentPageによる続きの内容を区別します。元のツール入力と各contentCursorを再指定し、すべてのアウトライン項目と続きの内容を取得してください。連続するフラグメントを連結してから JSON として一度だけデコードし、collectionPageを進める前に選択したレコードを再構築してください - 明示的な復旧 —
invalid_cursorの場合は選択を最初からやり直し、source_changedの場合は上流で改訂された後にコンテンツ取得をやり直します。検索プレビュー、見つからないレコード、利用できないコレクションは、それぞれ別の状態として扱われます
はじめに
以下を MCP クライアントの設定ファイルに追加します。
{
"mcpServers": {
"uk-parliament-mcp-server": {
"type": "stdio",
"command": "bunx",
"args": ["@cyanheads/uk-parliament-mcp-server@latest"],
"env": { "MCP_TRANSPORT_TYPE": "stdio", "MCP_LOG_LEVEL": "info" }
}
}
}
または、npx を使用する場合(Bun は不要です):
{
"mcpServers": {
"uk-parliament-mcp-server": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@cyanheads/uk-parliament-mcp-server@latest"],
"env": { "MCP_TRANSPORT_TYPE": "stdio", "MCP_LOG_LEVEL": "info" }
}
}
}
または、Docker を使用する場合:
{
"mcpServers": {
"uk-parliament-mcp-server": {
"type": "stdio",
"command": "docker",
"args": ["run", "-i", "--rm", "-e", "MCP_TRANSPORT_TYPE=stdio", "ghcr.io/cyanheads/uk-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 以上)。
- 公式 Parliament API へのインターネット接続。API キーは不要です。
インストール
- リポジトリをクローンします:
git clone https://github.com/cyanheads/uk-parliament-mcp-server.git
- ディレクトリに移動します:
cd uk-parliament-mcp-server
- 依存関係をインストールします:
bun install
- 環境を設定します:
cp .env.example .env
# edit .env for transport, logging, or authentication overrides as needed
設定
| 変数 | 説明 | デフォルト |
|---|---|---|
MCP_TRANSPORT_TYPE | トランスポート:stdio または http。 | stdio |
MCP_HTTP_PORT | HTTP サーバーの初期ポート。起動ログには、ポートの競合時に再試行した後の割り当て済みポートが表示されます。 | 3010 |
MCP_HTTP_HOST | HTTP のバインドアドレス。 | 127.0.0.1 |
MCP_HTTP_ENDPOINT_PATH | HTTP MCP エンドポイント。 | /mcp |
MCP_SESSION_MODE | HTTP セッションモード: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_ENABLED | OpenTelemetry を有効にします。 | 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/mcp-server/tools/definitions | 9 つのツール定義(*.tool.ts)。 |
src/services/parliament-http | 固定オリジンのトランスポート、出典情報、カーソル、損失のないコンテンツ配信。 |
src/services/bills | 法案の検索、審査記録、刊行物、参照用ディレクトリ。 |
src/services/members | 議員の検索、プロフィール、略歴、利害関係、投票履歴。 |
src/services/divisions | 庶民院/貴族院の採決メタデータと、記録された投票者の一覧。 |
src/services/hansard | 発言の検索と過去の収録範囲に関するメタデータ。 |
src/services/questions | 書面質問のプレビューと、質問・回答の完全な記録。 |
src/services/committees | 委員会の活動、委員構成、刊行物のメタデータ、型付きの関連情報。 |
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 ファイルを参照してください。
該当する場合、本ソフトウェアには Open Parliament Licence v3.0 の下でライセンスされた議会情報が含まれます。個人データ、議会関連の標章、および第三者の権利は対象外です。対象外の資料を再利用する前に、原典の表示を保持し、権利を確認してください。このソフトウェアは独立したものであり、議会の承認を意味するものではありません。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。