Geo Home MCP
Enables comparison of residential candidate areas by land price, station walking time, and public transit commute, with PMTiles-powered interactive maps. Provides MCP tools for listing layers, retrieving land prices, computing commutes, finding and comparing areas, and building area maps.
README
Geo Home MCP
地価、駅徒歩、公共交通の移動時間から居住候補地域を比較し、PMTiles対応のインタラクティブ地図を表示するStreamable HTTP MCPサーバーです。
含まれるもの
- Cloud Run向けMCPサーバー (
/mcp) list_layers,get_land_price,compute_commute,find_candidate_areas,compare_areas,build_area_map- MCP Appとして表示できるMapLibre地図
- GCS上のPMTilesと地価JSONの読み込み
- オープンデータから事前計算した公共交通時間(未収録の目的地は明示付きデモ推定)
- GemiHub Business Agent PluginとCodex Pluginのmanifest
ローカル起動
npm install
npm run dev
- 地図: http://localhost:8080/map
- MCP: http://localhost:8080/mcp
- Health check: http://localhost:8080/health
初期状態は data/land-prices.demo.json を使用します。この値はUI・ツール動作確認専用です。
実データ
LAND_PRICE_DATA_PATH にローカルJSONまたは gs://bucket/object.json を指定します。Cloud Runのサービスアカウントには対象オブジェクトの storage.objects.get を付与してください。JSONの配列要素は次の形です。
{
"id": "unique-id",
"area": "地域名",
"station": "最寄駅",
"municipality": "自治体",
"lat": 35.6812,
"lng": 139.7671,
"pricePerSqm": 1000000,
"previousPricePerSqm": 950000,
"stationWalkMinutes": 8,
"source": "国土交通省 不動産情報ライブラリ",
"sourceUrl": "https://www.reinfolib.mlit.go.jp/",
"observedAt": "2026-01-01",
"commuteProfiles": [
{
"destination": "東京駅",
"lat": 35.6812,
"lng": 139.7671,
"durationMinutes": 35,
"transfers": 1,
"source": "GTFS等からの事前計算",
"observedAt": "2026-01-01"
}
]
}
国土交通省APIの利用申請・利用条件を確認し、ETLでこの正規化形式へ変換してください。公示地価、基準地価、実取引価格は意味が異なるため、同一系列として混ぜないでください。本番では series などの列を追加して別レイヤー化することを推奨します。公共交通時間はGTFSなど再配布条件を確認できるオープンデータから事前計算し、出典と観測日を commuteProfiles に保持します。PMTilesは地価・候補地点の地図配信に使い、経路計算結果はこのJSONプロファイルから参照します。
PMTiles
.pmtiles をCloud Storageへアップロードし、CORSで Range リクエストを許可した配信URLを PMTILES_URL に設定します。ベクトルタイル内のsource layer名を PMTILES_SOURCE_LAYER に指定してください。
同梱デモデータからPMTilesを生成してTerraform管理のGCSバケットへ配置する場合:
gcloud builds submit \
--region=asia-northeast1 \
--config=cloudbuild-data.yaml \
--service-account="projects/PROJECT_ID/serviceAccounts/geo-home-build@PROJECT_ID.iam.gserviceaccount.com" \
.
このビルドはGeoJSONを生成し、tippecanoe 2.29.0で land-price source layerのPMTilesへ変換します。
例となるCORS設定:
[
{
"origin": ["https://YOUR_APP.example.com"],
"method": ["GET", "HEAD"],
"responseHeader": ["Content-Type", "Range", "Content-Range", "Accept-Ranges"],
"maxAgeSeconds": 3600
}
]
機密性が不要な地図タイルは公開読み取り+CDN、テナント固有データは認証付きRange proxyを推奨します。
Google Cloudインフラ
Geo Home専用GCPプロジェクトで自己完結する構成です。
- Project:
terraform.tfvarsで指定する専用プロジェクト - Region:
asia-northeast1(変更可能) - Artifact Registry:
geo-home - Cloud Run runtime SA:
geo-home-run - Cloud Build SA:
geo-home-build - Terraform root module:
terraform/ - Cloud Run service:
geo-home-mcp - GCS bucket:
${project_id}-geo-home(上書き可能)
Terraformが次を管理します。
- Cloud Runサービス、スケーリング、health check、公開Invoker
- GCSバケット、PMTiles用CORS、Cloud Run読み取り権限
- 地価JSONとPMTilesのCloud Run環境変数
Cloud RunのコンテナイメージだけはTerraformの ignore_changes 対象です。既存メインサービスと同様、Terraformがインフラ、Cloud Buildがアプリケーションイメージを管理します。
1. インフラを作成
GCPプロジェクトを作成して課金アカウントへ接続した後、Terraform変数を設定します。プロジェクト作成自体をTerraformへ含めないことで、組織・Folder・Billing Accountのbootstrap権限とサービス用stateを分離しています。
project_id = "your-geo-home-project-id"
region = "asia-northeast1"
bucket_name = "your-geo-home-project-id-geo-home"
public_tiles = true
cors_origins = ["https://YOUR_GEMIBIZ_DOMAIN"]
land_price_object = "land-prices.json"
pmtiles_object = "land-price.pmtiles"
pmtiles_source_layer = "land-price"
オブジェクト名とSecret IDは、実データをまだ用意しない場合は空のままで構いません。その場合、組み込みデモデータと推定移動時間で起動します。
cp terraform/terraform.tfvars.example terraform/terraform.tfvars
# terraform/terraform.tfvars を編集
terraform -chdir=terraform init
terraform -chdir=terraform plan
terraform -chdir=terraform apply
初回Terraform applyではCloud Run公式helloイメージを使い、まだ存在しないGeo Homeイメージへの循環依存を避けます。
2. アプリケーションをデプロイ
Geo Home MCPリポジトリのルートから実行します。
./scripts/deploy.sh
スクリプトはこのリポジトリのTerraform outputからプロジェクト、リージョン、Artifact Registry、Cloud Build専用SAを取得してCloud Buildを実行します。Cloud Buildは作成済みCloud Runサービスのイメージだけを更新します。デプロイ後にCloud Run URLを取得し、mcp.json と .mcp.json の接続先も自動更新します。更新された2ファイルはGitへcommitしてからAgent Pluginをインストールしてください。
別環境へ出す場合だけ GEO_PROJECT_ID、GEO_REGION、GEO_SERVICE を上書きできます。ただしCloud Build側の _PROJECT_ID なども --substitutions で一致させてください。
Plugin接続先の更新
デプロイ後、発行されたCloud Run URLを次の2ファイルへ設定します。
mcp.json: GemiHub Business Agent Plugin用(streamable-http).mcp.json: Codex Plugin用(http)
現在の geo-home-mcp.example.com は安全なplaceholderです。scripts/deploy.sh がデプロイ後に実URLへ更新します。GemiHub Businessでは、更新をGitHubへpushした後にrepositoryをAgent Plugin設定画面からpreview・installします。インストール時に tools/list が自動実行されるため、通常はそのままチャットで利用できます。警告が表示された場合だけ、Settings > MCP Servers の接続テストで再試行してください。
チャット内で地図カードを表示するには、find_candidate_areas の後に build_area_map を呼び出します。build_area_map は _meta.ui.resourceUri と候補を含む structuredContent を返し、GemiHub BusinessがPMTiles/MapLibre製のインタラクティブなMCP Appとして新しいアシスタントメッセージに表示します。修正前に保存済みの回答へカードを後付けすることはできないため、その場合は検索を再実行してください。
手動でURLだけ設定する場合:
node scripts/configure-plugin-url.mjs https://YOUR_SERVICE_URL/mcp
セキュリティ
MCPクライアントから到達できるよう、TerraformはCloud Run Invokerを allUsers に付与します。本番で認証を必須にする場合は google_cloud_run_v2_service_iam_member.geo_home_public をOAuth/API Gateway構成へ置き換え、Agent Plugin側にも認証設定を追加してください。
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。