Luxembourg MCP について
Luxembourg MCPは、ルクセンブルクの公共データを一貫したツールとしてAIエージェントやMCPクライアントに提供します。法律や統計からモビリティまでを扱い、APIキーなしで結果に出典URLを付けます。
主な機能
- 01公共データを扱う44種類のツール
- 02法律・統計データの検索
- 03モビリティや最新状況の照会
- 04住所・地理空間データの検索
- 05各結果に出典URLを付与
- 06stdioとStreamable HTTPに対応
活用シーン
- 01法律や統計データの検索
- 02交通・駐車場・天気の確認
- 03住所や公共交通停留所の特定
- 04ルクセンブルクのオープンデータ検索
MCP 対応
MCPサーバーは、法律、統計、モビリティ、環境データなど28の公共データシステムを扱う44種類のツールを提供します。クライアントはホスト済みのStreamable HTTPエンドポイントに接続するか、stdioで実行できます。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://mcp.luxembourg-mcp.com/mcpclaude mcp add --transport http amirdaraee-luxembourg https://mcp.luxembourg-mcp.com/mcp{"mcpServers":{"amirdaraee-luxembourg":{"type":"http","url":"https://mcp.luxembourg-mcp.com/mcp"}}}Cursor で開く{"servers":{"amirdaraee-luxembourg":{"type":"http","url":"https://mcp.luxembourg-mcp.com/mcp"}}}VS Code で開く{"mcpServers":{"amirdaraee-luxembourg":{"type":"http","url":"https://mcp.luxembourg-mcp.com/mcp"}}}{"mcpServers":{"amirdaraee-luxembourg":{"serverUrl":"https://mcp.luxembourg-mcp.com/mcp"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
ツール
44| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| page | integer | いいえ | |
| query | string | はい | |
| page_size | integer | いいえ |
詳細
Luxembourg MCP
ルクセンブルクの公共データに、キー不要でアクセスできる Model Context Protocol です。
ホスト型エンドポイント — インストール不要: 任意の MCP クライアントから https://mcp.luxembourg-mcp.com/mcp(ストリーミング可能な HTTP)に接続してください。または、uvx luxembourg-mcp を使ってご自身で実行できます。ウェブサイト:luxembourg-mcp.com
Luxembourg MCP は、断片化された公共 API とオープンデータセットを、AI エージェントが直接呼び出せる一貫性のある 44 個のツールにまとめます。法律、公式統計、モビリティ、環境測定、議会、アクセシビリティ、住所、地理空間データ、国のオープンデータカタログを扱います。
- 44 個の MCP ツール
- 28 の公共データシステム
- API キーやアカウントは不要
- スクレイピングなし
- すべての結果にソース URL を返します
- Stdio と Streamable HTTP のトランスポート
起源と謝辞
このプロジェクトは、Thomas Heggelund が作成した Allemannsdata に直接着想を得ています。
Heggelund の当初のアイデアは、ノルウェーの allemannsretten(自然享受権)が示す開放性を公共データにもたらすことでした。公共情報には、簡単にアクセスし、組み合わせ、利用できることが求められます。Allemannsdata は、関連のない多数のデータソースを一貫性のあるキー不要の MCP ツールとして提供することで、エージェントとノルウェーの公共サービスとの間で繰り返される統合作業をなくします。
Luxembourg MCP は、このアイデアをルクセンブルク大公国に適用したものです。ルクセンブルク向けの独立した実装であり、フォーク、公式の地域版、または提携プロジェクトではありません。MCP を通じた公共データカタログという独自のコンセプトに対する謝辞は、Thomas Heggelund と Allemannsdata に帰属します。
利用可能なツール
| ツール | 公開ソース | 目的 |
|---|---|---|
search_datasets | data.public.lu | 全国オープンデータカタログを検索します |
get_dataset | data.public.lu | メタデータと現在のリソースを確認します |
geocode_address | Geoportail | 公式住所を特定します |
reverse_geocode | Geoportail | 最寄りの公式住所を検索します |
list_geo_collections | Geoportail OGC API | クエリ可能な地理空間レイヤーを探します |
get_geo_features | Geoportail OGC API | 範囲を指定してGeoJSONフィーチャーを取得します |
get_weather_alerts | MeteoLux | 現在の気象警報を確認します |
search_legislation | Legilux | 法令と統合版法令を検索します |
search_statistics | STATEC LUSTAT | 統計データフローを探します |
get_statistics | STATEC LUSTAT | ラベル付きSDMX観測値を取得します |
get_city_parking | Ville de Luxembourg | 市内駐車場のリアルタイム空き状況を確認します |
list_cfl_parking | CFL | パーク・アンド・ライド施設を一覧表示します |
get_cfl_parking | CFL | P+Rのリアルタイム利用状況と空き台数を確認します |
get_traffic | CITA | 高速道路のリアルタイム交通量を確認します |
get_water_levels | Water Management Administration | 現在の水位観測所の水位を確認します |
get_air_quality | Environment Administration | 全国の大気質測定値を確認します |
search_chamber_bodies | Chamber of Deputies | 組織、所属、役職を検索します |
get_accessibility_figures | Digital Accessibility Observatory | 全国のアクセシビリティ統計を確認します |
get_accessibility_audits | Digital Accessibility Observatory | 最近の公共部門の監査を一覧表示します |
search_transit_stops | Public Transport Administration | 全国のGTFS停留所を検索します |
get_city_mobility | Ville de Luxembourg Maps | モビリティ関連施設をGeoJSONとして取得します |
get_weather_observations | MeteoLux | Findelの気温、風、気圧をリアルタイムで確認します |
get_public_holidays | data.public.lu | 4言語で法定祝日を確認します |
search_parliamentary_questions | Chamber of Deputies | 議会質問と回答を検索します |
get_housing_prices | Observatoire de l'Habitat | コミューン別の住宅売出価格を確認します |
get_election_results | CTIE | 2023年の国政選挙結果を確認します |
get_ev_charging | Chargy | 公共EV充電とリアルタイムの利用可能状況を確認します |
get_waste_collections | Environment Administration | コミューン別の今後のごみ収集日を確認します |
get_weather_forecast | MeteoLux | 公式予報、UV指数、日の出・日の入りを確認します |
get_fuel_prices | Ministère de l'Économie | 燃料、水素、EV充電の月間価格を確認します |
get_public_alerts | LU-Alert | 食品リコールを含む全国警報を確認します |
get_commune_leaders | Ministère des Affaires intérieures | コミューンごとの現職市長と市会議員を確認します |
get_commune_population | CTIE | コミューン別、年齢層別、性別の居住人口を確認します |
get_pharmacies_on_duty | Pharmacie.lu | 当番薬局の住所と電話番号を確認します |
get_electricity_prices | Open Data Lëtzebuerg | 15分ごとの前日電力価格を確認します |
get_carsharing | CFL Mobility | 利用可能なFLEXカーシェア車両を確認します |
get_bike_sharing | Vël'OK | 南部の自転車シェアリングのリアルタイム利用状況を確認します |
search_tenders | Portail des marchés publics | 公共調達の公募案件を検索します |
get_plenary_votes | Chamber of Deputies | 会派別・議員別の集計を含む本会議の採決を確認します |
get_deputies | Chamber of Deputies | 現職議員の氏名、政党、選挙区、メールアドレスを確認します |
lookup_luxembourgish | Lëtzebuerger Online Dictionnaire | 翻訳、発音、用例を確認します |
get_traffic_events | CITA | 道路工事、通行止め、事故をリアルタイムで確認します |
get_electricity_grid | Open Data Lëtzebuerg | 日次の電力需要、電源構成、越境電力潮流を確認します |
get_unemployment | ADEM | 全国またはコミューン別の月間求職者数と求人件数を確認します |
クイックスタート
Python 3.11 以降が必要です。
python -m venv .venv
. .venv/bin/activate
pip install -e .
luxembourg-mcp --transport http --port 8000
起動後:
| インターフェース | URL |
|---|---|
| ツールカタログ | http://127.0.0.1:8000/ |
| MCP エンドポイント | http://127.0.0.1:8000/mcp |
| ヘルスチェック | http://127.0.0.1:8000/health |
| 上流ステータス | http://127.0.0.1:8000/status |
/status は、各ツールの公式上流サービスに到達できるかどうかを報告します。カタログでは、各ツールカードにランプとして表示されます。各上流サービスに対して、ページを読み込む人数にかかわらず、少なくとも 10 分に 1 回、軽量チェックを 1 回実行します(最初の数キロバイトのみを読み取ります)。チェックに 1 回失敗すると上流サービスは 劣化、2 回連続で失敗すると 停止 として扱われます。
Stdio クライアント
{
"mcpServers": {
"luxembourg": {
"command": "luxembourg-mcp"
}
}
}
Docker
docker build -t luxembourg-mcp .
docker run --rm -i luxembourg-mcp # stdio (default)
docker run --rm -p 8000:8000 luxembourg-mcp --transport http --host 0.0.0.0 # HTTP
質問の例
MCP クライアントに接続すると、エージェントは次のような質問に回答できます。
- ルクセンブルクで現在発令中の気象警報は何ですか?
- CFL のパークアンドライドで空いている駐車スペースはいくつありますか?
- Mersch の最新の水位はいくつですか?
- 年金に関する法律を探してください。
- 人口の数値を含む STATEC のデータセットはどれですか?
- A6 の最新の交通量測定値は何ですか?
- A4 で現在、道路工事や車線閉鎖は行われていますか?
- 最新の路面電車法案について、各政党はどのように投票しましたか?
- ルクセンブルク語の「Schiertech」はどういう意味ですか?
- ルクセンブルク市の住所の公式座標を探してください。
- Hamilius に該当するバス停または路面電車停留所はどれですか?
プロトコルの動作
サーバーは次の処理を行います。
- 公開するすべてのツール入力スキーマに照らして、引数を検証します。
- JSON-RPC バッチや、その他のオブジェクト以外の JSON を
-32600 Invalid Requestで拒否します。 - 同じエンドポイントと stdio で、MCP
2026-07-28(ステートレス:リクエストごとの_meta、server/discover、キャッシュヒント)に加えて、initializeハンドシェイク方式のリビジョン2025-11-25、2025-06-18、2025-03-26をサポートします。 - HTTP リクエストでは、
MCP-Protocol-Version、Mcp-Method、Mcp-Nameヘッダーの値をリクエスト本文と照合して検証します。 - ツールの失敗は、サーバーを終了させずに MCP ツールの結果として返します。
- 大きな上流レスポンスを、エージェントのコンテキストに入れる前に制限します。
組み込みの HTTP サーバーはステートレスで、SSE ストリームを提供しません。デフォルトでは、ブラウザーのオリジンはループバックアドレスからのもののみを受け入れます。ホスト型デプロイでは LUXEMBOURG_MCP_ALLOWED_ORIGINS(カンマ区切りのオリジン一覧、または *)で許可範囲を拡張できます。これにより、許可されたオリジン向けの CORS プリフライトとレスポンスヘッダーも有効になります。公開環境にデプロイする場合は、リバースプロキシまたはアプリケーションゲートウェイで TLS、レスポンスキャッシュ、可観測性を追加してください。
セキュリティとデプロイ
組み込みサーバーには基本的な制御が含まれていますが、本番環境向けの API ゲートウェイの代わりにはなりません。
- HTTP リクエストボディの上限は 1 MiB です。
- 上流レスポンスの上限は 25 MiB です。
- メタデータ由来のダウンロードは、リダイレクト先を含め、信頼できる
data.public.luの HTTPS リソースホストに制限されます。固定された上流 URL では、同じホストへの HTTPS リダイレクトのみが許可されます。 - DTD エンティティを宣言する上流 XML は解析前に拒否されます。また、ユーザー指定の識別子によって URL のパスセグメントに
./..を含めることはできません。 - GTFS ZIP 内の各ファイルは、展開前に展開後のサイズ、暗号化の有無、不審な圧縮率が確認されます。
- HTTP クライアントの MCP リクエスト数は、デフォルトで 1 分あたり 60 件に制限されます。IPv6 クライアントは /64 プレフィックス単位でグループ化されます。
- HTTP サーバーが処理する同時接続数はデフォルトで最大 32 件で、30 秒間アイドル状態の接続は閉じられます。
- Docker イメージは、ダイジェストで固定されたベースイメージ上で、非特権の
appユーザーとして実行されます。
クライアントごとの 1 分あたりの上限を変更するには、LUXEMBOURG_MCP_RATE_LIMIT を設定します。値を 0 にすると、組み込みのレートリミッターは無効になります。レートリミッターは意図的に直接の TCP ピアアドレスを使用し、LUXEMBOURG_MCP_CLIENT_IP_HEADER で明示的に指定されない限り、転送ヘッダーを信頼しません(たとえば、Cloudflare の背後で CF-Connecting-IP を使用する場合)。クライアントがヘッダーを偽装して制限を回避できてしまうため、信頼できるプロキシがそのヘッダーを管理している場合にのみ設定してください。同時接続数の上限を変更するには、LUXEMBOURG_MCP_MAX_CONNECTIONS を設定します。上限を超えた接続は直ちに閉じられます。
ツールの出力は、信頼できない外部データです。データセットの説明、法律のタイトル、その他の公開テキストには、誤解を招く指示や敵対的な指示が含まれる場合があります。MCP クライアントとエージェントホストは、ツールの結果をシステム指示ではなくデータとして扱う必要があります。また、ここで返された内容に対して強力な兄弟ツールを実行する前に、確認やポリシーチェックを必須にしてください。
テスト
デフォルトのテストスイートは決定論的で、ネットワークを使用しません。JSON-RPC の動作、スキーマの検証、プロバイダーのパーサー、カタログのパッケージング、および 28 個すべてのツールの tools/call コントラクトを対象としています。
PYTHONPATH=src python -m unittest discover -s tests -v
オプトインのライブテストスイートでは、実際の上流サービスをすべて呼び出します。
LUXEMBOURG_MCP_LIVE=1 PYTHONPATH=src \
python -m unittest tests.test_live_tools -v
ライブテストは、データソースが利用できない場合や公開データが変更された場合に失敗することがあります。また、STATEC、air-quality、Chamber、GTFS の大容量リソースもダウンロードします。
現在の制限事項
- リアルタイムの出発情報と経路計画を提供する公式 ATP API の利用には、個人用アクセスキーが必要です。このプロジェクトでは代わりに、公式 GTFS フィードから取得した、キー不要の静的な停留所情報を公開しています。
- キャッシュには上限がありますが、単一のプロセス内でのみ有効です。複数のワーカー間でキャッシュデータは共有されません。
- 上流データの可用性、更新頻度、スキーマ、ライセンスは、各データ提供者の管理下にあります。
- ツールの対応範囲は、まだ Allemannsdata と同等ではありません。候補には、議会での投票、裁判所の判決、過去の気象情報、EV 充電、道路工事、その他の環境測定データが含まれます。
独立性とデータの所有権
Luxembourg MCP はコミュニティプロジェクトです。Thomas Heggelund、Allemannsdata、ルクセンブルク政府、または公開するデータを所管する機関とは提携していません。
このプロジェクトは上流データを所有していません。各データ提供者のライセンスと利用規約は引き続き適用されます。ツールの結果には上流のソース URL が保持されるため、エージェントやユーザーは正式な記録を確認できます。
ライセンス
Luxembourg MCP のソースコードは MIT ライセンスで公開されています。上流の公開データには、それぞれのデータ提供者が定める別個のライセンスが適用されます。
mcp-name: io.github.amirdaraee/luxembourg-mcp
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。