技術者向け
MCP Server ドキュメント
防災DB MCP Server の技術仕様・内部アーキテクチャ・認証フロー・エラーハンドリングを解説します。
AIツールの接続手順は AIと繋げる をご覧ください。
接続情報
| エンドポイント | https://bousaidb.jp/mcp |
| プロトコル | Streamable HTTP(MCP 2025-03-26 spec) |
| 認証 | OAuth 2.1(Googleアカウント) |
| ディスカバリ | /.well-known/oauth-authorization-server |
リクエスト処理の流れ
1回の assess_risk 呼び出しで以下の処理が実行されます。
1
AI が施設名 → 住所に変換
「東京ビッグサイト」→「東京都江東区有明三丁目」。AI側の知識で解決(MCP外の処理)。ツール説明文に「施設名ではなく住所で入力」と記載済み。
2
住所 → 緯度経度(ジオコーディング)
外部API: 国土地理院ジオコーディングAPI(
msearch.gsi.go.jp)。lat+lng直指定時はスキップ。3
緯度経度 → 125mメッシュコード
内部計算: JIS標準地域メッシュコード(11桁)を数式で算出。外部通信なし。
4
メッシュコード → リスクデータ取得
BigQuery: Gold層
mesh_125m_* テーブルをクラスタリングキーで検索(数MB/クエリ)。5
スコアリング → レスポンス
内部計算: フラジリティ曲線・INFORM方式で統合スコアを算出。
外部依存
| 依存先 | 用途 | 障害時の影響 |
|---|---|---|
| 国土地理院 API | 住所→座標変換 | 住所検索が不可(lat/lng直指定は動作) |
| BigQuery | メッシュデータ検索 | 全機能停止 |
認証フロー(OAuth 2.1)
MCP クライアントがOAuthディスカバリを検出し、自動で認証フローを開始します。
1. POST /oauth/register — Dynamic Client Registration(RFC 7591)
2. GET /oauth/authorize — Google Sign-In 画面を表示
3. GET /oauth/callback — 認可コード発行 → クライアントにリダイレクト
4. POST /oauth/token — PKCE検証 → Bearer トークン発行
認証が必要なメソッド
| メソッド | 認証 |
|---|---|
| initialize | 不要 |
| tools/list | 不要 |
| notifications/initialized | 不要 |
| tools/call | Bearer トークン必須 |
assess_risk
住所または座標から統合災害リスクスコアを取得。6種の災害(地震・洪水・津波・土砂災害・高潮・液状化)の個別スコアと統合スコアを返します。
パラメータ
| 名前 | 型 | 必須 | 説明 |
|---|---|---|---|
| address | string | *1 | 日本語の住所(例: 「東京都江東区豊洲3丁目」)。施設名は不可。 |
| lat | number | *1 | 緯度(WGS84)。ジオコーディングをスキップ。 |
| lng | number | *1 | 経度(WGS84)。latと併用必須。 |
| source | string | データソースモード(下記参照) |
*1: address または lat+lng のいずれかが必須
主要レスポンスフィールド
| フィールド | 型 | 説明 |
|---|---|---|
| address | string | ジオコーディング後の正規化住所 |
| lat / lng | number | 緯度・経度(WGS84) |
| mesh_code | string | 125mメッシュコード(11桁) |
| overall_risk_score | int | 統合リスクスコア(0-100) |
| risk_level | string | 極めて低い / 低い / やや高い / 高い / 極めて高い |
| risks.{type}.score | int | 個別ハザードスコア(0-100)。type: earthquake / flood / tsunami / landslide / storm_surge / liquefaction |
| risks.{type}.coverage | string | in_area(区域内)/ outside_designated_area(区域外) |
| elevation_m | number | 標高(m) |
| nearby_active_faults | array | 近傍の活断層(距離・マグニチュード・30年発生確率) |
| fragility_analysis | object | 建物種別ごとの倒壊確率(木造旧耐震/新耐震/RC造等) |
| context | object | 周辺情報(人口・高齢化率・傾斜度) |
| scoring_methodology | object | スコアリングバージョン・算出方式 |
完全なレスポンスは実際にお試しください。スコアの算出ロジックは スコア計算ロジック を参照。
compare_locations
2〜5地点の災害リスクを一括比較。拠点選定やBCP策定に最適。
パラメータ
| 名前 | 型 | 必須 | 説明 |
|---|---|---|---|
| addresses | array | Yes | 住所の配列(2〜5件)。各要素は日本語住所文字列。 |
内部的に各住所で assess_risk を順次呼び出し、結果を統合して返します。5地点の場合、BQクエリ5回+ジオコーディング5回が発生します。
source パラメータ
| 値 | 挙動 | 精度 | 速度 |
|---|---|---|---|
| auto | 125mメッシュ(BQ Gold層)を優先。データなし時はGold市区町村レベルにフォールバック | 高 | 1-3秒 |
| gold | 市区町村レベルのインメモリキャッシュのみ。BQクエリなし。 | 低 | 0.1秒 |
| api | 125mメッシュ + 外部API(J-SHIS・GSI標高)。最も詳細なデータ。 | 最高 | 3-10秒 |
エラーハンドリング
| エラー | 原因と対応 |
|---|---|
| address_not_found | 住所が特定できませんでした。より詳細な住所(丁目まで)を指定してください。 |
| out_of_range | 日本国外の座標が指定されました。 |
| timeout | 外部データソースの応答がタイムアウト。source: "gold" で高速応答可。 |
| rate_limited | 1日の利用上限に達しました。翌日UTC 0:00にリセットされます。 |
| auth_required | Bearer トークンなし。OAuth認証が必要です。 |
レート制限
| 制限単位 | 認証済みメールアドレス単位 |
| 対象メソッド | tools/call のみ |
| リセット | 毎日 UTC 0:00(JST 9:00) |
大量リクエストが必要な場合は bousaidb@cabocia.jp までご連絡ください。
リクエストログ
全ての tools/call リクエストは以下の情報とともにログに記録されます。
- 認証済みメールアドレス
- 呼び出しツール名・引数
- レスポンスタイム(ms)
- ステータス(ok / error / rate_limited)