mcpField
P
plateau-creative-mcp

plateau-creative-mcp

ローカル
github.com/pixelx-jpメディア・デザイン3321 週間前に更新

plateau-creative-mcp について

plateau-creative-mcp は PLATEAU の 3D 都市データを、クリエイティブ向け LLM エージェントが使えるシーン編集・glTF 出力ツールに変換する MCP サーバーです。公式 PLATEAU MCP がデータ参照を担うのに対し、シーン作成と DCC への書き出しを担当します。

主な機能

  1. 01都市エリアを scene_id 付きのシーンとして読み込み
  2. 02高さ、建築年、用途などによる建物の絞り込み
  3. 03建物の削除と高さの倍率変更
  4. 04単一 GLB または scene_manifest の書き出し
  5. 05PLATEAU のクレジットとライセンスファイルの付与
  6. 06公式 PLATEAU MCP および Blender MCP との任意の連携

活用シーン

  1. 01地区から高層ビルを除いた GLB の書き出し
  2. 02三次元都市モデルの Blender・Unity・Unreal への受け渡し
  3. 03ツール呼び出しによる都市レイアウトの代替案作成

MCP 対応

本プロジェクトは MCP サーバーであり、シーンの読み込み・編集・書き出しツールを MCP クライアントに公開します。上流機能を有効にすると、公式 PLATEAU MCP のツールも中継します。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"pixelx-jp-plateau-creative": {
"command": "npx",
"args": [
"-y",
"@yodolabs/plateau-creative-mcp"
]
}
}
}
起動コマンドnpx -y @yodolabs/plateau-creative-mcp

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
npm@yodolabs/plateau-creative-mcp0.1.1

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

Yodo Labs

@yodolabs/plateau-creative-mcp

Project PLATEAU の 3D 都市データを、クリエイティブな LLM エージェント向けのシーン編集および glTF エクスポートツールに変換する MCP サーバーです。

npm License: MIT Data: CC BY 4.0 Node

英語 · 日本語

Project PLATEAU から読み込み、plateau-creative-mcp によって単一の .glb としてエクスポートされた、実際の渋谷の街区。シーンのグリッド上に編集可能な 3D ジオメトリとして配置された数百棟の建物を、Blender / Unity / Unreal ですぐに利用できます。
PLATEAU から読み込み、編集し、export_glb ツールで 1 つの .glb としてエクスポートした、実際の渋谷の街区です。ここでは three.js でレンダリングしています。LLM が Blender / Unity / Unreal に渡すものと同じジオメトリです。データ © Project PLATEAU / MLIT(CC BY 4.0)。

このサーバーはツールを提供します。オーケストレーションは LLM の役割です。このサーバーと Blender MCP / Unity MCP / Unreal MCP をあわせて Claude / Cursor / 任意の MCP クライアントに接続し、ワークフローを組み立てさせてください。

PLATEAU には、データアクセス(カタログ、仕様、CityGML、属性)向けの公式 MCP サーバーがあります。このサーバーは、欠けている作成、シーン編集、DCC エクスポートのレイヤーを補います。東京の近隣地域を読み込み、すべての高層ビルを削除したり、街区の高さを 3 倍に拡大したりして、Blender / Unity / Unreal ですぐに使える .glb を出力できます。すべてツール呼び出しで操作します。

flowchart LR
  CLIENT["Claude / Cursor<br/>(any MCP client)"] -->|tool calls| MCP["plateau-creative-mcp"]
  MCP -->|download_area| DATA["plateau-bridge<br/>artifact index + bundles"]
  MCP -->|"load → filter → edit"| SCENE["scene_id<br/>(in-memory)"]
  MCP -->|export_glb| OUT[".glb + LICENSE.txt"]
  OUT --> DCC["Blender / Unity / Unreal"]

ステータス

v0.1.0 — 初の一般公開リリースです。 10 個の MCP ツール(オンデマンドのアーティファクトダウンロードを含むため、データのクローンは不要)、メッシュ結合に対応したポリゴンフットプリントの押し出し、1 km² 以下の単一 GLB エクスポート(gltf-transform による約 40%の圧縮)と、より広い範囲向けの scene_manifest 3D Tiles フォールバック、3 つのデータアクセスモード(TS+duckdb アーティファクト / Python サブプロセス / JSON-RPC 経由の上流 MCP)、Overpass POI リンク、BlenderMCP との任意のクロス MCP ブリッジを備えています。MCP 上でベンダーに依存せず、Claude、Cursor、あらゆるクライアントで利用できます。

ツール

ツール目的
download_areaplateau-bridge アーティファクトインデックスからビルド済みの都市バンドルを取得してキャッシュします(スラッグを解決し、.tar.zst をダウンロードして sha256 を検証し、buildings.parquet と manifest.json を展開します)。これにより、データパイプラインをクローンせずに load_area を使用できます。
load_area都市、bbox、LOD を新しい scene_id に読み込みます。
filter_buildingsシーン内の building_uid[] を高さ、建築年、用途、用途地域、浸水深で検索します。
delete_buildings反実仮想編集を行い、建物を削除済みとしてマークします。
extrude_buildings高さに係数を掛けて拡大します。
compose_sceneレンダリングのヒント(時刻、天候、カメラ)を設定します。
export_glb.glb(single_glb。parquet から実際のジオメトリを使用)または 3D Tiles を参照する scene_manifest を出力します。scene_manifest のタイル情報の拡充には、ローカルでビルドした 3D Tiles が必要です。ダウンロードした都市では、タイルを含まないマニフェスト(編集内容、bbox、帰属情報)と tileset_note が出力されます。
link_buildings_to_pois建物を近隣の OSM POI に関連付けます(Overpass)。
get_attributionシーンのデータセット、ライセンス、URL に関するメタデータをすべて取得します。
render_via_blenderシーンを GLB としてエクスポートし、(任意で)JSON-RPC を介して BlenderMCP 互換の HTTP MCP サーバーに橋渡しします。ドライランでは、代わりに推奨される MCP 間の呼び出し手順を返します。

PLATEAU_UPSTREAM_ENABLED=true の場合、サーバーは公式 Project PLATEAU MCP サーバーからプロキシされた 13 個のツールも公開します:plateau_spec_outline、plateau_spec_read、plateau_get_metadata、plateau_search_areas、plateau_get_area、plateau_search_datasets、plateau_get_dataset、plateau_list_dataset_types、plateau_citygml_get_attributes、plateau_citygml_get_features、plateau_citygml_get_geoid_height、plateau_get_citygml_files、plateau_explain_spatial_id。LLM クライアントには、2 つの MCP サーバーを別々に接続する必要なく、単一のカタログ内に 23 個のツールが表示されます。

各ツールは { result, attribution_metadata } を返します。export_glb は GLB の asset.extras.attribution と、その隣にある LICENSE.txt に帰属情報を書き込みます。派生した動画、画像、アセットにも、この帰属情報を必ず保持してください。

クイックスタート

npm install
npm run build

都市データを用意する方法は 2 つあります。

オプション A — セットアップ不要(推奨)

データパイプラインをクローンする必要はありません。サーバーは初期設定のまま、公開されている plateau-bridge アーティファクトインデックスを読み込むため、設定なしで download_area を使用できます。都市のビルド済みバンドルを取得し、sha256 を検証して、ローカルにキャッシュします。

export PLATEAU_AUTO_DOWNLOAD=true     # load_area auto-fetches a missing city (optional)
export PLATEAU_OUTPUT_DIR=./out
npx @yodolabs/plateau-creative-mcp             # stdio MCP server

download_area(city="shibuya") を 1 回呼び出してください(または PLATEAU_AUTO_DOWNLOAD=true を設定して load_area を呼び出すと、不足している都市が最初に取得されます)。展開されるのは buildings.parquet と manifest.json のみです。バンドルは PLATEAU_ARTIFACT_DIR(デフォルトは ~/.cache/plateau-creative-mcp/artifacts)にキャッシュされるため、各都市のダウンロードは 1 回だけです。独自のミラーを使用するには、PLATEAU_ARTIFACT_INDEX_URL に別のインデックスを指定してください。

ダウンロードしたバンドルには 3D Tiles は含まれません(都市ごとに数 GB になるためです)。parquet を使って、load_area、すべての編集、export_glb の single_glb(実際のジオメトリ、≤ 1 km² / ≤ 5000 棟)を利用できます。ダウンロードした都市でタイル参照が失われるのは scene_manifest エクスポートのみです(編集リスト、bbox、帰属情報は引き続き出力され、tileset_note に範囲を single_glb に絞るか、ローカルでビルドするよう記載されます)。より広い範囲を完全なジオメトリでエクスポートするには、ローカルビルドを使うオプション B を利用してください。

Claude Desktop の場合は、claude_desktop_config.json に追加してください。

{
  "mcpServers": {
    "plateau-creative": {
      "command": "npx",
      "args": ["-y", "@yodolabs/plateau-creative-mcp"],
      "env": {
        "PLATEAU_AUTO_DOWNLOAD": "true",
        "PLATEAU_OUTPUT_DIR": "/Users/you/plateau-out"
      }
    }
  }
}
オプション B — 独自のアーティファクトを使用

plateau-bridge の out_<city>/ 出力をすでにお持ちの場合は、その場所を直接指定してください。

export PLATEAU_ARTIFACT_DIR=/path/to/plateau-bridge
export PLATEAU_OUTPUT_DIR=./out
npx @yodolabs/plateau-creative-mcp        # stdio MCP server
{
  "mcpServers": {
    "plateau-creative": {
      "command": "npx",
      "args": ["-y", "@yodolabs/plateau-creative-mcp"],
      "env": {
        "PLATEAU_ARTIFACT_DIR": "/path/to/plateau-bridge",
        "PLATEAU_OUTPUT_DIR": "/Users/you/plateau-out"
      }
    }
  }
}

MCP クライアントを使わずにスモークテストを実行します。

npx tsx scripts/smoke-load-area.ts

ワークフロー例

1. サイバーパンクな渋谷のフライスルー(MCP 間連携)
load_area(city="shibuya", bbox=[139.6975,35.6555,139.7045,35.6605], lod=2)
  -> compose_scene(time="19:30", weather="rain")
  -> export_glb()              # to ./out/<scene>_v3.glb
=> BlenderMCP: import_glb + cyberpunk shader + render
flowchart LR
  LLM(("LLM")) --> A["plateau-creative-mcp<br/>load · edit · export_glb"]
  LLM --> B["Blender MCP<br/>import · shade · render"]
  A -->|".glb + sidecar"| B
2. 超高層ビルのない東京
load_area(...)
  -> filter_buildings({height_min: 100})
  -> delete_buildings(filter={height_min: 100})
  -> export_glb()
3. オフィスタワーのドラフト(成果物にゾーニングフィールドが必要です)
load_area(...)
  -> filter_buildings({zoning_use: ["commercial"], far_max_min: 400})
=> SketchUp MCP: design a new building inside those parcels

アーキテクチャ

src/
  server/   MCP protocol entry, tool registry, unified envelope
  tools/    10 MCP tool handlers
  schemas/  Zod schemas + JSON Schema export
  scene/    scene_id LRU + lock + optional disk persistence
  data/     Artifact (duckdb) access layer + on-demand bundle downloader
  export/   three.js scene builder + GLTFExporter + manifest fallback
  attribution/  Envelope wrapping, attribution merge
  rateLimit/    Token bucket per (client, tool)
  errors/   Stable error codes + AppError
  config/   Env-driven config
  utils/    ids, bbox, paths, logger
  • scene_id は唯一共有される状態です。すべての変更/エクスポートツールでこれを参照する必要があります。ID はサーバーが ULID を生成します。
  • building_uid は唯一の正規参照です。gml_id やバッチインデックスによる代替参照はありません。
  • export_glb の厳格な上限:single_glb では bbox が 1 km² 以下、かつ建物数が 5000 以下です。これを超えるシーンでは EXPORT_LIMIT_EXCEEDED が返され、scene_manifest への切り替えが提案されます。
  • アトリビューションはエグゼキューターのレベルで付与されるため、アトリビューションなしで結果を返すハンドラーはありません。

設定

Envデフォルト意味
PLATEAU_ARTIFACT_DIR~/.cache/plateau-creative-mcp/artifactsout_<city>/buildings.parquet を含むディレクトリです。デフォルトではキャッシュディレクトリ(download_area の書き込み先)を使用します。既存の plateau-bridge チェックアウトを指定するには、この値を設定してください。
PLATEAU_ARTIFACT_INDEX_URLplateau-bridge distribution/index.json各都市のバンドル URL と sha256 を記載したキャッシュインデックス(JSON)です。デフォルトでは公開ミラーを使用します。独自のインデックスを使う場合は上書きしてください。
PLATEAU_ARTIFACT_DOWNLOAD_TIMEOUT_MS300000ダウンロードごとのタイムアウト(ミリ秒、5 秒~30 分)です。
PLATEAU_AUTO_DOWNLOADfalsetrue にすると、読み込み前に load_area がインデックスから不足している都市を自動取得します。
PLATEAU_OUTPUT_DIR./out.glb/LICENSE.txt/マニフェストの書き込み先です。
PLATEAU_DATA_MODEartifactartifact(TS + duckdb)または subprocess(Python ヘルパー)です。
PLATEAU_PYTHON_BINpython3subprocess モードで使用する Python インタープリターです(duckdb がインストールされている必要があります)。
PLATEAU_SUBPROCESS_SCRIPTバンドルされた python/plateau_query.pyJSON-stdio ヘルパーのパスを上書きします。
PLATEAU_SCENE_DIR./.scene-storeシーンの永続化が有効な場合に使用するディスク上のディレクトリです。
PLATEAU_PERSIST_SCENESfalsetrue にすると、呼び出し間でシーンをディスクにシリアライズします。
PLATEAU_MAX_SCENES64メモリ内シーンの LRU 上限です。
PLATEAU_SCENE_TTL_MS3600000シーンの TTL(ミリ秒)です。
OSM_OVERPASS_URL未設定link_buildings_to_pois を有効にするには設定してください(例:https://overpass-api.de/api/interpreter)。
OSM_OVERPASS_TIMEOUT_MS25000Overpass リクエストのタイムアウトです。
PLATEAU_UPSTREAM_ENABLEDfalsetrue にすると、ホストされた PLATEAU MCP にプロキシする公式の plateau_* ツールを 13 個登録します。
OFFICIAL_PLATEAU_MCP_URLホスト版のデフォルト公式 PLATEAU MCP エンドポイントを上書きします(まれなケース)。

コピーして使えるテンプレートは .env.example を参照してください。

フットプリント形状とボックスによるフォールバック

DuckDB の spatial 拡張機能を使ったポリゴンの押し出しはデフォルトで有効です。初回実行時に拡張機能が自動インストールされます。インストールまたは読み込みに失敗した場合(オフラインの CI、制限された環境など)、エクスポーターは各建物を重心に配置した 12 m × 12 m のボックスに適切にフォールバックします。高精度な経路が有効な場合、load_area のレスポンス内の available_attributes に footprint_polygon が含まれます。

メッシュのマージとサイドカーインデックス

single_glb エクスポートでは、すべての建物を 1 つの BufferGeometry にマージします。これにより、描画コールが 1 回になり、GLB の JSON オーバーヘッドが大幅に削減されます。後続の編集ツールで建物ごとの識別情報を保持できるよう、各エクスポートでは GLB の隣にサイドカー <basename>.buildings.json が書き込まれます。

{
  "scene_id": "scene_01...",
  "version": 4,
  "merged": true,
  "total_triangles": 73482,
  "ranges": {
    "<building_uid>": [{"triangle_start": 0, "triangle_count": 18}]
  }
}
scene_manifest モード

エクスポートが single-GLB の上限(1 km²/5000 棟)を超える場合は、mode: "scene_manifest" をリクエストできます。マニフェストには対応する 3D Tiles の tileset.json へのリンクが含まれ、シーンの bbox と交差する境界領域を持つリーフタイルのコンテンツ URI が列挙されます。後続のコンシューマーは必要なタイルだけを遅延読み込みできます。

{
  "scene_id": "scene_01...",
  "mode": "scene_manifest",
  "bbox": [139.69, 35.65, 139.72, 35.67],
  "tileset": "/abs/path/out_shibuya/3dtiles/tileset.json",
  "tileset_available": true,
  "tiles": [
    {
      "url": "/abs/path/out_shibuya/3dtiles/15/29096/4943_bldg_Building.glb",
      "relative_uri": "15/29096/4943_bldg_Building.glb",
      "bbox": [139.6984, 35.6577, 139.7060, 35.6644],
      "min_height_m": 39.3,
      "max_height_m": 332.3
    }
  ],
  "edits": { "deleted_building_uids": [], "extrusions": [] },
  "attribution": { "license": "CC BY 4.0" }
}

3D Tiles はローカルビルドで生成され、オンデマンドダウンロードバンドルには含まれません。ダウンロードした都市の場合、scene_manifest はタイルを含まないマニフェスト(編集内容 + bbox + アトリビューション)を tileset_note とともに返します。

POI のリンク付け

link_buildings_to_pois には OSM_OVERPASS_URL が必要です。これを設定すると、ツールはシーンの bbox 内にある amenity/shop/office/tourism/leisure のノードを対象とする Overpass QL クエリを POST し、名前のある各 POI を max_distance_m 以内にある最も近い建物の重心と照合します。ODbL の帰属表示は、返されるエンベロープに自動的に統合されます。

対象外(意図的)

  • export_3dgs — Gaussian スプラットのラウンドトリップは今後の対応予定です。
  • export_usd — 別の Isaac Sim プロジェクトです。
  • simulate_earthquake/simulate_flood — 別のリスク分析の取り組みです。
  • 汎用的な OSM クエリ — OSM-MCP の領域です。
  • MCP 間の自動オーケストレーション — これは LLM が行います。

帰属表示とライセンス

  • ソフトウェア: MIT(このリポジトリ)。
  • データ: PLATEAU は CC BY 4.0(© Project PLATEAU / MLIT)です。OSM POI は ODbL 1.0 です。
  • すべてのツールの応答に attribution_metadata が含まれます。export_glb はこれを asset.extras.attribution に挿入し、GLB と同じ場所に LICENSE.txt を書き出します。このファイルは GLB と一緒に保管し、派生動画やスクリーンショットでは PLATEAU のクレジットを表示してください。
GLB の圧縮

export_glb で options.compress: true を設定すると、gltf-transform のパイプライン(重複排除 → 頂点の溶接 → 不要データの削除 → 量子化)が適用されます。渋谷の 0.4 km² の実データ(建物 507 棟、三角形 138k 個)での数値は、**9.94 MB → 6.05 MB(約 40% 削減)**で、知覚できる劣化はありません。出力では標準の KHR_mesh_quantization 拡張機能を使用しており、Blender、Unity、Unreal、three.js はすべてネイティブでデコードできます。

上流 MCP サーバーとの通信

JsonRpcMcpClient は、上流との連携用の構成要素として公開される最小限の MCP over HTTP クライアント(tools/list + tools/call)です。

OfficialPlateauMcpClient は、公式 PLATEAU MCP サーバー(ホスト先は https://api.plateauview.mlit.go.jp/mcp)を操作するための型付きラッパーです。上流の 13 個のツールすべてに対応しています。

  • 仕様: specOutline、specRead
  • カタログ: getMetadata、searchAreas、getArea、searchDatasets、getDataset、listDatasetTypes
  • CityGML: citygmlGetAttributes、citygmlGetFeatures、citygmlGetGeoidHeight、getCityGmlFiles
  • ヘルパー: explainSpatialId
import { OfficialPlateauMcpClient } from "@yodolabs/plateau-creative-mcp";

const upstream = new OfficialPlateauMcpClient();
const meta = await upstream.getMetadata();
const datasets = await upstream.searchDatasets({ area_codes: ["13113"], year: 2023 });

上流の仕様は現在も変更されているため、応答の形状には [k: string]: unknown のインデックスシグネチャを使用しています。厳密な型が必要な場合は、呼び出し箇所で検証してください。

使用例

再現可能なワークフローのレシピは examples/ にあります。Claude Desktop のプロンプト(examples/claude-prompts.md)、Cursor の .cursorrules(examples/cursor-rules.md)、統合済み GLB とサイドカーの受け渡しを示す Blender Python スニペット(examples/blender-mcp-handoff.py)、そしてサイバーパンクな渋谷の完全な解説(examples/cyberpunk-shibuya.md)を参照してください。

コントリビューション

Issue と PR を歓迎します。CONTRIBUTING.md をご覧ください。PR を作成する前に npm run lint && npm run typecheck && npm test を実行してください。

含まれるもの

独自の MCP ツール 10 個と公式 PLATEAU MCP からのプロキシツール 13 個(PLATEAU_UPSTREAM_ENABLED=true の場合、合計 23 個のツールカタログ)、オンデマンドのアーティファクトダウンロード(download_area +オプションの load_area による自動取得)でデータのクローンが不要、ポリゴンフットプリントの押し出し(DuckDB spatial)とボックスフォールバック、メッシュの統合とサイドカーの識別子インデックス、GLB 圧縮(約 40% 縮小)、3D Tiles タイル情報を追加する scene_manifest モード、Overpass による POI のリンク付け、3 つのデータアクセスモード(TS+duckdb アーティファクト/Python サブプロセス/上流 MCP over HTTP)、および許可リストで制御される BlenderMCP 互換サーバー向けの MCP 間ブリッジ。


Yodo Labs が開発 — PixelX Inc. / ピクセルエックス株式会社

plateau-bridge を基盤として構築 · データ © Project PLATEAU / MLIT(CC BY 4.0)

お問い合わせ:[email protected]

コメント

MCP は初めてですか?

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

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