mcpField
I
InfraNode

InfraNode

リモート
github.com/street1983nk法務・行政143 週間前に更新
リポジトリ

InfraNode について

InfraNodeは、ドイツの都市インフラに関するオープンデータをAPIキー不要のAPIに統一し、リモートMCPサーバーも提供します。出典とライセンス情報付きの一貫したデータを必要とする開発者やAIエージェント向けです。

主な機能

  1. 01ドイツの84都市をカバー
  2. 02天気、交通、エネルギーなどを集約
  3. 03統一されたレスポンス形式
  4. 04データの出典とライセンスを明示
  5. 05上流ソースの状態を通知
  6. 06読み取り専用ツール、プロンプト、リソース

活用シーン

  1. 01都市の天気と大気質の確認
  2. 02公共交通の運行と遅延の確認
  3. 03複数都市のインフラデータの比較
  4. 04統一APIを使った都市データアプリの構築

MCP 対応

リモートMCPサーバーから、12個の読み取り専用ツールとプロンプト、リソースを通じて都市のオープンデータを利用できます。

設定

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

エンドポイントhttps://mcp.infranode.dev/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 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。

ツール

12
パラメーター型必須説明
slugstringはい都市の識別子。例:'berlin'、'hamburg'。柔軟に解決されます。ウムラウトの有無を問わないドイツ語名、大文字・小文字の違い、一般的な英語名や略称も使用できます(München/munich/munchen -> muenchen、cologne -> koeln、frankfurt -> frankfurt-am-main)。不明な名前の場合は、'Meintest du ...?' という候補を添えて 404 を返します。正規の slug は list_cities で確認できます。

詳細

日本語 | English

InfraNode

GitHub stars License: Apache 2.0 Glama score MCP Registry Smithery

ドイツのオープンデータ REST API:公共インフラのオープンデータを扱う、API キー不要の HTTP API です。MCP サーバーとしても利用できます。

ドイツの都市は多くのオープンデータを公開していますが、データソースごとに形式、フィールド、特有の仕様が異なり、複数のポータルではそれぞれ登録が必要です。InfraNode は、84 以上のドイツの都市について、約 20 のカテゴリのデータを正規化し、1 つのインターフェースで提供します。対象には、天気(DWD)、大気質(UBA)、公共交通機関(リアルタイムの出発情報を含む)、交通、電力料金(SMARD)、地価指標(BORIS)、駐車場、充電インフラ、水位、人口統計、エネルギーなどがあります。**API キーもアカウントも不要です。**すべてのレスポンスは、データセットごとのライセンスと帰属表示を含む同一の標準 { data, meta } エンベロープを使用します。同じデータは、MCP サーバーを通じて AI エージェントも利用できます(78 種類のデータを扱う、軽量な読み取り専用ツール 12 個)。 最初に使うのは get_city_overview です。1 回の呼び出しで、その都市で利用できるすべてのデータ種別のカタログと、重要な値のライブ抜粋を取得できます。これにより、エージェントは天気だけでなく、データの全体像を把握できます。InfraNode は継続的に拡張されており、新しいデータ種別や都市が定期的に追加されます。

データソースには、ドイツ気象局(DWD)、連邦環境庁(UBA)、Mobilithek/DELFI、VBB(ベルリン=ブランデンブルク交通連合、CC-BY 4.0)、GovData、OpenStreetMap、連邦ネットワーク庁、KBA などがあります。

利用例

InfraNode のケルン向けライブ概要:現在の天気、公的な大気質、DWD の警報、遅延を含む列車のリアルタイム出発情報、道路工事、データ種別の完全なカタログを、API キー不要で 1 回の呼び出しから取得

get_city_overview("koeln")を 1 回呼び出すだけで、現在の天気、公的な大気質、DWD の警報、遅延を含む列車のリアルタイム出発情報、道路工事、都市の完全なデータカタログを、API キー不要で 1 つのエンドポイントから取得できます。 infranode.devでは、どの都市もライブで試せます。

仕組み

共通の HTTP クライアントが上流のデータソースに問い合わせ、各レスポンスを標準スキーマにマッピングします。その後、帰属表示とともにライセンスゲートを通し、Redis にキャッシュします(エラー時は古いデータにフォールバック)。最後に、REST API と MCP サーバーを通じて配信します。データソースが停止した場合は、その状況が source_status に反映されます。データソースの停止によって呼び出し自体が失敗することはありません。

flowchart LR
    subgraph SRC["25+ deutsche Open-Data-Quellen"]
        direction TB
        S1["DWD, UBA<br/>Wetter, Luft"]
        S2["Mobilithek, DELFI, DB<br/>ÖPNV, Echtzeit"]
        S3["SMARD, BNetzA, MaStR<br/>Energie"]
        S4["BORIS, GovData, OSM,<br/>KBA, ..."]
    end

    subgraph CORE["InfraNode-Kern"]
        direction TB
        N["Normalisieren<br/>ein kanonisches Schema"] --> L["Lizenz-Gate<br/>Attribution je Datensatz"] --> C["Redis-Cache<br/>Stale-on-Error-Fallback"]
    end

    SRC --> CORE
    CORE --> API["REST-API<br/>infranode.dev/api/v1<br/>84 Städte, ohne API-Key"]
    CORE --> MCP["MCP-Server<br/>mcp.infranode.dev<br/>12 Read-only-Tools"]
    API --> APPS["Apps &amp; Dashboards"]
    MCP --> AGENTS["KI-Agenten<br/>Claude, ChatGPT"]

InfraNode によってデータ統合の手間が省けたなら、スターを付けていただけると、ほかの開発者がこのプロジェクトを見つけやすくなります。

クイックスタート

ベース URL は https://infranode.dev/api/v1 です。キーもアカウントも不要で、そのまま 呼び出せます:

curl https://infranode.dev/api/v1/cities/koeln/weather
{
  "data": {
    "city_slug": "koeln",
    "observed_at": "2026-06-18T13:00:00Z",
    "source": "dwd",
    "attribution": { "text": "Datenbasis: Deutscher Wetterdienst", "modified": true },
    "payload": { "kind": "weather", "temperature_c": 30.4, "humidity": 43.0, "station_id": "02667" }
  },
  "meta": { "source_status": "ok", "cache_status": "hit", "correlation_id": "..." }
}

すべての応答は同じ { data, meta } エンベロープに従います。各レコードには attribution(ライセンスと出典)が含まれ、meta.source_status で 上流のデータソースからデータが提供されたかどうかがわかります。データソースが 停止していても、呼び出しが失敗するのではなく、適切に縮退します。

すべてのデータ種別で、フィールド名は snake_case の英語で、同じ 概念には常に同じ名前が使われます:post_code、street、house_number、place、 name、start、end、distance_km、power_kw、lat、lon。post_code は 常に5桁の文字列で(先頭のゼロは保持されます)、タイムスタンプはタイムゾーン付きの ISO 8601 形式です。また、データソースが値を提供しない場合は、 空文字列ではなく常に null になります。一部の応答では、同じ値を持つ古い別名も併記されています (plz、zip、strasse、hausnummer、ort、 city、bezeichnung、beginn、ende、art、dist_km、leistung_kw、 einheit_typ、および Autobahn の交通情報に含まれる camelCase の生フィールド)。 これらの名前は非推奨です。正規の名前を使用してください。

ヒント:まず /api/v1/cities を呼び出して、正規の都市スラッグを 確認してください(例:koeln、berlin、hamburg)。その後、 都市別のエンドポイントを呼び出します。

{slug} は柔軟に解決されるため、ASCII 形式を正確に指定する必要はほとんどありません。ウムラウトの有無を問わないドイツ語名、大文字と 小文字の違い、一般的な英語の別名や略称は、いずれも正規のスラッグに対応します(München/münchen/munich/munchen → muenchen、 cologne → koeln、frankfurt → frankfurt-am-main)。不明な名前を指定すると、 最も近いスラッグを示す Meintest du ...? という案内とともに 404 が返されます。

Postman で実行

完全なインタラクティブリファレンスと都市ごとの対応状況は、 infranode.dev をご覧ください。 Postman API Network の InfraNode API には、すべてのエンドポイントと実際の応答例が掲載されているため、 InfraNode API Postman Collection を API キーなしでブラウザーから直接試すことができます。

データ(84都市、124エンドポイント)

以下の各カテゴリは、/api/v1/cities/{slug}/<key> の下にある REST エンドポイントです。 MCP では、同じデータを12個の軽量なツール経由で利用できます。一部は名前付きのツール(get_city_overview、weather、air_quality、pois、compare、ライブ掲示板)で、さらに汎用の get_city_resource(slug, resource=<key>) を使えば、ほかのあらゆる種類のデータを取得できます(その resource Enum には全81個のキーが含まれています)。

グループデータの種類(エンドポイントキー)
探索list_cities、sources、compare(複数都市にわたる1種類のデータ)、overview(カタログとライブデータの抜粋を1回の呼び出しで取得)
天気・環境weather、weather-warnings、civil-protection-warnings(BBK NINA)、air-uba(公式)、air(ライブ)、pollen-uv、water-level、flood、fire-danger、bathing-water
モビリティtransit、停留所ごとのライブ発着情報(ツール transit_departures)、stations(カタログ)、EVA による駅の発車・到着掲示板(ツール station_board_departures/station_board_arrivals。近距離交通と運行障害を含む)、station-departures、station-arrivals、traffic、road-events、webcams、charging、parking(ライブ空き状況)、parking-onstreet、park-and-ride、mobility-points、bike-parking、sharing、fuel-prices、bike-counts
都市・住民base、geo、demographics、indicators、sustainability(各自治体のSDG指標を時系列で提供、2006~2023年、Wegweiser Kommune/Bertelsmann Stiftung、CC0)、unemployment、tourism、construction、accidents、crime-stats、health、icu-live、holidays、election、events、council-papers(OParl 経由の自治体議会情報:都市ごとの議案、申請、決議)、pois、遊び場、市場、トイレ、その他の OSM タイプ
経済・不動産land-values、tax-rates(各自治体の営業税・固定資産税の税率)、business-registrations(郡ごとの創業動向)、insolvencies(郡ごとの倒産手続き:企業およびその他の債務者、年次)、public-tenders(公共調達:各都市の募集中の入札と落札済み契約)
エネルギー・車両power-load、power-price、energy、solar、solar-roofs、district-heating、vehicle-registrations

運用時の動作

  • キー不要、読み取り専用。 認証情報、書き込みアクセス、ユーザーアカウントは不要です。
  • 標準形式のエンベロープ。 { data, meta } 形式で、各ソースのステータスと出典表示を含みます。
  • 穏やかな縮退。 ソースが利用できない場合はエラーではなく source_status を返します。
  • 安全性を考慮した設計。 SSRF とインジェクションを防ぐゲートですべてのリクエストを検査し、入力は固定の許可リストに照らして検証されます。

セキュリティモデルについては、SECURITY.md をご覧ください。

ページネーションとチャンネルごとの既定値

データ種類のリスト(charging、energy、events、transit、OSM フィーチャーのエンドポイント)は、同じ URL でもチャンネルによって既定値が異なります。

  • REST への直接アクセスでは、完全なリストが1回の呼び出しで返されます(limit=null、returned == total、truncated=false)。
  • GPT Actions(OpenAI ヘッダー)と MCP では、エージェント向けの応答を小さく保つため、既定のページサイズが適用されます。
  • limit=all(または ?all=1)を指定すると、どのチャンネルでも完全なリストを取得できます。limit と offset で明示的にページを指定します。
  • meta.pagination(total/returned/limit/offset/truncated)は、すべてのチャンネルに含まれます。そのため、配信されたデータの範囲は常に確認できます。

traffic では、元のポリラインは任意で指定できます。include=geometry(または ?full=1)を追加してください。標準の応答は軽量なままです。

安定性、変更履歴、ロードマップ

InfraNode を本番環境で利用していますか?変更をいち早く把握しましょう。

  • 変更履歴 には、ユーザーに見えるすべての変更(新しいデータ種別、新しい都市、動作の変更、バグ修正、非推奨化)が新しい順に掲載されています。RSS で購読できます。
  • ロードマップ では、予定されている内容と安定性に関する約束を確認できます。API は機能を追加する形で拡張され、レスポンスの構造は安定して維持されます。既存のレスポンスに変更を加える場合は、事前に告知します(通常は30日以上前)。
  • ステータスページ と GitHub のリリースでは、稼働状況とバージョンごとの変更を確認できます。

MCP サーバーとして利用する

同じ API をリモート MCP サーバーとして利用できるため、AI エージェントは78種類すべての データをツールとして呼び出せます。Claude Code なら、1行で設定できます。

claude mcp add --transport http infranode https://mcp.infranode.dev/mcp

他の MCP クライアントも、同じリモートエンドポイント(Streamable HTTP)を指定します。

{
  "mcpServers": {
    "infranode": { "url": "https://mcp.infranode.dev/mcp" }
  }
}
  • Cursor / Windsurf: 上記のブロックを ~/.cursor/mcp.json に追加します(またはアプリの MCP 設定に追加します)。
  • VS Code: code --add-mcp '{"name":"infranode","url":"https://mcp.infranode.dev/mcp"}'
  • Claude Desktop: 同じ mcpServers ブロックを claude_desktop_config.json に追加します。
  • ChatGPT: URL https://mcp.infranode.dev/mcp を使ってコネクターを作成します。

すべてのツールには readOnlyHint: true / destructiveHint: false / idempotentHint: true のアノテーションが付いているため、MCP クライアントは 安全に自動許可できます。MCP レイヤーには、すぐに使える プロンプト(city_briefing、compare_air_quality、commute_check)と リソース(infranode://cities、infranode://sources)も含まれています。 インストール手順の全容、出力例付きの完全なツールマニフェスト、権限モデル、 サンプルのトランスクリプトは docs/mcp-install.md に記載されています。レジストリマニフェストは server.json です。

ChatGPT で利用する(カスタム GPT アクション)

すぐに使える GPT: InfraNode: German City Data - Weather & Transit は GPT Store(Research & Analysis)で公開されており、すぐに利用できます。

独自のバリエーションを作成する場合、InfraNode は GPT アクション向けに厳選した OpenAPI 仕様を提供します。 最も便利な23の操作が含まれており(ChatGPT では1つの アクションにつき最大30個まで)、API キーは不要で、すべて GET です。

  1. GPT エディターで Configure → Actions → Create new action → Import from URL を開き、 https://infranode.dev/actions/openapi.json を入力します。
  2. 認証は None のままにし、プライバシーポリシーとして https://infranode.dev/datenschutz/ を入力します。
  3. GPT の Instructions に、getCityOverview(slug) から開始し、 getCities で都市名を解決し、data.attribution を引用するよう記載します( データライセンスにより出典の明記が求められます)。

詳細と推奨される Instructions: infranode.dev/chatgpt/。仕様は scripts/build_actions_spec.py によって docs/openapi.yaml から生成されます。

代替プロジェクトと InfraNode の位置づけ

ほかの MCP サーバーも、ドイツまたはヨーロッパのデータ空間の一部をカバーしています。 都市レベルのオープンデータでは InfraNode が最も幅広く、以下のプロジェクトは 互いに補完し合うことがよくあります。

  • germany-mcp-server 連邦および政府のデータ(Autobahn、DWD、NINA、SMARD、Bundestag)を扱います。全国を対象としていますが、各都市のデータは詳しくありません。
  • db-mcp-server / db-timetable-mcp は、Deutsche Bahn の時刻表のみを扱います。
  • mcp-server-public-transport ヨーロッパの公共交通機関を扱い、ドイツではベルリン/ブランデンブルク(VBB)をカバーしています。
  • 都市ごとのサーバー(ミュンヘン、ベルリンなど)は、それぞれ1つの都市をカバーしています。

InfraNode は、API キー不要のホスト型エンドポイントを通じて、ドイツの84都市と82種類のデータをカバーしています。環境、モビリティ、エネルギー、経済、都市生活のデータを利用できます。詳細な比較は infranode.dev/mcp-vergleich をご覧ください。

セルフホスト(任意)

必須ではありません。上記のホスト型エンドポイントを使うのが最も手軽です。ただし、コードは公開されています。Docker(Compose v2)で API スタックをローカル起動するには、次のコマンドを実行します。

cp .env.example .env          # example config, contains NO real secrets
docker compose -f deploy/docker-compose.yml up
curl http://localhost/api/v1/health   # -> {"status":"ok","version":"1.0.0","redis":true}

公開 API を利用して、MCP サーバー自体を stdio 経由でローカル実行するには、次のコマンドを実行します。

uv sync --group mcp
INFRANODE_MCP_API_BASE=https://infranode.dev/api/v1 uv run python -m infranode.mcp.server

すべての設定には INFRANODE_ という環境変数プレフィックスを使用します(.env.example を参照)。各データソースには、それぞれ専用の INFRANODE_ENABLE_* スイッチがあります。実際のシークレットをリポジトリに保存することはありません。バージョン管理されるのは .env.example のみで、CI では gitleaks によるスキャンを実施しています。

ライセンス:コードとデータは別々です

  • コード: Apache-2.0(LICENSE を参照)。
  • データ: InfraNode が提供するオープンデータには、上流の提供元のライセンスが引き継がれます(例:OpenStreetMap の ODbL、GovData の DL-DE-BY、DWD の表示義務)。これらのデータライセンスと帰属表示は、別途 DATA-LICENSES.md に記載されています。Apache-2.0 ライセンスが適用されるのは API のソースコードのみであり、中継されるデータには適用されません。

参加する

貢献を歓迎します。セットアップ、チェックコマンド、シークレットのルールについては CONTRIBUTING.md をご覧ください。新しいデータソースを追加する際は、 src/infranode/registry/source_specs.py の宣言型ソースレジストリが出発点です(上流のソースごとに SourceSpec エントリを1つ追加します)。チェックリストの全項目は CONTRIBUTING.md に記載されています。

コメント

MCP は初めてですか?

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

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