InfraNode について
InfraNodeは、ドイツの都市インフラに関するオープンデータをAPIキー不要のAPIに統一し、リモートMCPサーバーも提供します。出典とライセンス情報付きの一貫したデータを必要とする開発者やAIエージェント向けです。
主な機能
- 01ドイツの84都市をカバー
- 02天気、交通、エネルギーなどを集約
- 03統一されたレスポンス形式
- 04データの出典とライセンスを明示
- 05上流ソースの状態を通知
- 06読み取り専用ツール、プロンプト、リソース
活用シーン
- 01都市の天気と大気質の確認
- 02公共交通の運行と遅延の確認
- 03複数都市のインフラデータの比較
- 04統一APIを使った都市データアプリの構築
MCP 対応
リモートMCPサーバーから、12個の読み取り専用ツールとプロンプト、リソースを通じて都市のオープンデータを利用できます。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://mcp.infranode.dev/mcpclaude mcp add --transport http dev-infranode-infranode https://mcp.infranode.dev/mcp{"mcpServers":{"dev-infranode-infranode":{"type":"http","url":"https://mcp.infranode.dev/mcp"}}}Cursor で開く{"servers":{"dev-infranode-infranode":{"type":"http","url":"https://mcp.infranode.dev/mcp"}}}VS Code で開く{"mcpServers":{"dev-infranode-infranode":{"type":"http","url":"https://mcp.infranode.dev/mcp"}}}{"mcpServers":{"dev-infranode-infranode":{"serverUrl":"https://mcp.infranode.dev/mcp"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
ツール
12| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| slug | string | はい | 都市の識別子。例:'berlin'、'hamburg'。柔軟に解決されます。ウムラウトの有無を問わないドイツ語名、大文字・小文字の違い、一般的な英語名や略称も使用できます(München/munich/munchen -> muenchen、cologne -> koeln、frankfurt -> frankfurt-am-main)。不明な名前の場合は、'Meintest du ...?' という候補を添えて 404 を返します。正規の slug は list_cities で確認できます。 |
詳細
日本語 | English
InfraNode
ドイツのオープンデータ 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 などがあります。
利用例
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 & 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が返されます。
完全なインタラクティブリファレンスと都市ごとの対応状況は、 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 です。
- GPT エディターで Configure → Actions →
Create new action → Import from URL を開き、
https://infranode.dev/actions/openapi.jsonを入力します。 - 認証は None のままにし、プライバシーポリシーとして
https://infranode.dev/datenschutz/を入力します。 - 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 に記載されています。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。
