コンテンツにスキップ
コンソール

MCP サーバー

DPIP MCP は読み取り専用の MCP(Model Context Protocol)サーバーです。ExpTech の地震、気象、雨量、雷、台風、津波、防災イベントのデータを 25 個のツールにまとめています。Claude Code や Claude Desktop など、MCP に対応した AI クライアントに追加すると、モデルが各 API の形式を自分で扱わなくても、現在と過去のデータを直接照会できます。

  • ツールごとに異なります。TREM-net のデータを返すツールは非商用、その他は対応する API の区分に従います。

表記の場所、例、商用利用の申請はデータの利用条件と出典表記をご覧ください。

現在は API Token は不要です。ツールはすべて読み取り専用で、データを変更しません。

POSThttps://api.core.exptech.dev/mcp
ヘッダー
  • Content-Type必須

    application/json

  • Accept必須

    application/json, text/event-stream

リクエストボディ
  • bodyJSON-RPC 2.0必須

    MCP メッセージ。例:initialize、tools/list、tools/call

リクエスト例
curl "https://api.core.exptech.dev/mcp" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
--data '{"jsonrpc":"2.0","id":1,"method":"<method>","params":{}}'
レスポンス

成功(tools/call のレスポンス)

{
"jsonrpc": "2.0",
"id": 2,
"result": {
"content": [
{
"type": "text",
"text": "與 structuredContent 相同內容的 JSON 字串"
}
],
"structuredContent": {
"fetched_at": "2026-11-14T14:00:05+08:00",
"data": {
"updateTime": 1794636120000,
"forecast": [
{
"time": "15:00",
"temperature": 24,
"apparentTemp": 26,
"humidity": 75,
"weather": "多雲",
"weatherCode": 200,
"pop": 20,
"wind": {
"direction": "NE",
"speed": 3,
"beaufort": 2
}
}
]
}
}
}
}

ブラウザのクロスオリジンリクエストは拒否されますレスポンスボディなし

項目 内容
URL https://api.core.exptech.dev/mcp。ノードを指定することもできます:https://api.core-tnn1.exptech.dev/mcp、https://api.core-tyo1.exptech.dev/mcp
トランスポート Streamable HTTP(MCP 仕様 2025-03-26 以降)。同じ URL は旧版の HTTP + SSE(仕様 2024-11-05)にも対応します
セッション Streamable HTTP はセッションを使いません(stateless)。サーバーは Mcp-Session-Id を発行せず、リクエストはそれぞれ独立して処理します
サーバー名 dpip(表示名「DPIP 防災情報」)
認証 なし
接続タイムアウト 3600 秒

Streamable HTTP:POST /mcp で JSON-RPC メッセージを送ります。Accept は application/json と text/event-stream の両方を受け入れる必要があります。レスポンスは JSON のことも、SSE のこともあります(JSON-RPC メッセージは data: 行に入ります)。一般的な MCP クライアントと SDK は、どちらも自動で処理します。

旧版の HTTP + SSE:GET /mcp でイベントストリームを開きます(リクエストに Mcp-Session-Id と MCP-Protocol-Version ヘッダを付けません)。ストリームが、続く POST に使う URL /mcp?sessionid=... を知らせます。この方式のセッションは単一ノードにしかなく、api.core.exptech.dev は DNS がノードを割り当てるため、前後のリクエストが別のノードに落ちることがあります。旧版 SSE を使うときは api.core-tnn1 か api.core-tyo1 を指定してください。新しい組み込みには Streamable HTTP を使ってください。

ターミナルウィンドウ
claude mcp add --transport http dpip https://api.core.exptech.dev/mcp

--scope user を付けると、すべてのプロジェクトで使えます。追加したあとは claude mcp list で接続状態を確認してください。

「設定」→「コネクタ」(Connectors)→「カスタムコネクタを追加」を開き、名前に DPIP、URL に https://api.core.exptech.dev/mcp を入れます。カスタムコネクタを使えるかは、Claude のプランによります。

リモート MCP に対応したクライアント(たとえば Cursor、Claude Code プロジェクトの .mcp.json)は、だいたい次の設定を受けます。フィールド名はクライアントによります。

{
"mcpServers": {
"dpip": {
"type": "http",
"url": "https://api.core.exptech.dev/mcp"
}
}
}

stdio だけに対応したクライアントは、mcp-remote で中継できます。

{
"mcpServers": {
"dpip": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://api.core.exptech.dev/mcp"]
}
}
}

旧版 SSE だけに対応したクライアントは、ノードを指定してください。

{
"mcpServers": {
"dpip": {
"type": "sse",
"url": "https://api.core-tnn1.exptech.dev/mcp"
}
}
}

各ツールの結果は、structuredContent と、内容が同じ JSON テキストの両方に入ります。形は固定です。

フィールド 説明
source データを取った ExpTech API の URL。オフラインのツール(township_lookup)にはこのフィールドはありません
fetched_at データを取得した時刻。RFC 3339、台湾時間(+08:00)
note 任意。上流が一時的に使えず、キャッシュしたデータに戻したときの説明
data ツールが返すデータ
{
"source": "https://api.core-tnn1.exptech.dev/api/v5/meteor/weather/realtime/25.033,121.5654",
"fetched_at": "2026-11-14T14:00:05+08:00",
"data": {
"id": "C0A9C0",
"station": { "name": "信義", "lat": 25.0378, "lon": 121.5646, "altitude": 26, "distance": 0.55 },
"time": 1794636000,
"data": {
"weather": "多雲",
"weatherCode": 200,
"temperature": 24.6,
"humidity": 72,
"rain": 0,
"wind": { "direction": "東北", "speed": 2.1, "beaufort": 2 },
"gust": { "speed": null, "beaufort": null },
"visibility": null,
"visibility_text": "無觀測",
"pressure": null,
"sunshine": null
}
}
}

共通の慣例(サーバーは初期化のとき、これらの説明もクライアントに送ります):

  • 時刻は Unix 秒です。フィールドに別の説明があるときは例外です。地震情報、津波、RTS の ts は Unix ミリ秒です。TREM の検知は RFC 3339 の文字列です。
  • 市区町村コードは 3 桁の郵便番号です(例:台北市中正区は 100)。township_lookup で地名または座標から調べられます。
  • 震度は 0–9 の数値です。5 は震度5弱、6 は震度5強、7 は震度6弱、8 は震度6強、9 は震度7です。結果には別に _label フィールド(例:int_label)が付きます。表示するときはそれを使ってください。
  • 気象データの欠測 -99 は null に変換済みです。差分の時刻は実際の時刻に復元済みです。フィールドごとの配列は観測点ごとの 1 行に変換済みで、観測点名、県・市、郷鎮、座標が付きます。
  • 時刻を指定するツールはパラメータ at(Unix 秒)を使います。照会できる時刻は timeline で取得します。

「必須」と書いたパラメータ以外は任意です。「ライセンス」の列は、各ツールが返すデータの区分です。データライセンスを参照してください。

ツール ライセンス 用途 パラメータ
cwa_links 非商用 地震情報と TREM の検知の対応 cwa_id、cwa_event_id、trem_event_id、limit(1–500)
earthquake_reports 商用可 地震情報のリスト。震度、規模、深さ、日付、県・市で絞り込み、並べ替えできます limit(1–100、既定 20)、page、min_intensity、max_intensity、min_magnitude、max_magnitude、min_depth、max_depth、start_date、end_date(YYYY-MM-DD)、sort(time、intensity、magnitude、depth)、order(desc、asc)、city、city_min_intensity、city_max_intensity
earthquake_report 商用可 単一の地震情報。各県・市と各市区町村の震度を含む id(必須)
gdms 商用可 単一の地震情報の強震観測点の記録。PGA、PGV、計測震度、観測点の座標 id(必須)、min_intensity、min_pga、limit(1–500、既定 40)
tsunami_reports 商用可 中央気象署の津波情報のリスト なし
tsunami_report 商用可 単一の津波情報 id(必須)

TREM データは非公式の観測で、中央気象署の発表が常に優先されます。気象法により、地震の予測や地震警報の発表に使うことはできません。 注意事項をすべて読む

ツール ライセンス 用途 パラメータ
rts 非商用 観測点のリアルタイムの揺れ。1 フレームは約 1 秒。強度順で、観測点の位置と市区町村が付きます at、min_intensity、limit(1–1000、既定 30)
trem_reports 非商用 TREM の地震検知のリスト month、year、alert、limit(1–500、既定 30)
trem_report 非商用 単一の検知の報ごとの内容 id(必須、14 桁)
trem_shakes 非商用 震度速報のリスト month、year、limit(1–500)
trem_shake 非商用 単一の震度速報。各市区町村の計測震度を含む id(必須)、min_intensity、town_limit(1–400、既定 120)
trem_triggers 非商用 単一の検知でトリガした観測点 id(必須)、min_intensity、limit(1–500、既定 50)
trem_trust 非商用 各観測点の信頼度 tier(NO_EVIDENCE、MISFIRING、BLOCKED、SEMI、FAST)、station、limit(1–500)
trem_noise 非商用 各観測点のノイズ倍率 status(adjusted、normal、insufficient)、station、limit(1–500)
trem_picks 非商用 直近の P 波、S 波の検測記録 range(24h、7d、既定 24h)、station、phase(P、S)、limit(既定 40)
trem_debug_triggers 非商用 直近の観測点トリガの記録。地震として成立しなかったものも含む range(24h、7d、既定 24h)、station、coinc_result、event_id、limit(1–200、既定 40)
ツール ライセンス 用途 パラメータ
weather_realtime 商用可 座標に最も近い観測点の現在の天気。現在の天気を参照 lat(必須)、lng(必須)
weather_forecast 商用可 市区町村の 1 時間ごとの予報。市区町村の 1 時間ごとの予報を参照 code(必須、3 桁)
rain_hour_forecast 商用可 市区町村の今後 1 時間の、分ごとの降水予報 code(必須、3 桁)
meteor_snapshot 商用可 全部の観測点の天気、雨量、または雷のスナップショット。観測点ごとに 1 行。絞り込みと並べ替えができます family(必須。weather、rain、lightning)、at、station_ids、city、town、sort_by、order(desc、asc)、limit(1–5000、既定 50)
meteor_trend 商用可 単一の天気または雨量の観測点の、直近 24 時間または 7 日の系列 family(必須。weather、rain)、station_id(必須)、range(24h、7d、既定 24h)
typhoon 商用可 台風の一覧、進路、予報円、入る確率、または警報。台風を参照 kind(cyclones、track、potential、probability、warning、既定 cyclones)、at(cyclones は非対応)
timeline データにより異なる 各データの照会できる時刻。レーダー、衛星、QPESUMS、風向・風速にはタイル URL のテンプレートが付きます source(必須。weather、rain、lightning、typhoon_track、typhoon_potential、typhoon_probability、typhoon_warning、radar、satellite、qpesums、wind)、channel、style(normal、jma、bd)、model(gfs、ecmwf、既定 gfs)、limit(1–1000、既定 24)
ツール ライセンス 用途 パラメータ
dpip_events 商用可 有効、または直近の防災イベント。全国または単一の市区町村。新しい順。レスポンスの text.content と text.description は市区町村コードごとに分かれます state(active、history、既定 active)、code(3 桁。省略すると全国)
township_lookup 対象外 地名、市区町村コード、または座標から、市区町村コード、名称、中心を調べます。接続は不要です query、lat、lng、limit(1–400、既定 10)

MCP クライアントを介さず、JSON-RPC メッセージを直接送ります。先に initialize、次に tools/call でツールを呼びます。実際の組み込みには MCP SDK の使用を推奨します。

ターミナルウィンドウ
curl https://api.core.exptech.dev/mcp \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"curl","version":"1.0"}}}'
curl https://api.core.exptech.dev/mcp \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"weather_forecast","arguments":{"code":"105"}}}'

公式 SDK(@modelcontextprotocol/sdk)がトランスポートとレスポンス形式を処理します。

import { Client } from "@modelcontextprotocol/sdk/client/index.js";
import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";
const client = new Client({ name: "my-app", version: "1.0.0" });
await client.connect(new StreamableHTTPClientTransport(new URL("https://api.core.exptech.dev/mcp")));
const { tools } = await client.listTools();
const result = await client.callTool({ name: "weather_forecast", arguments: { code: "105" } });
console.log(result.structuredContent.data);
  • サーバーは上流のデータをキャッシュし、同時刻の同じ照会は上流リクエストを 1 回にまとめます。キャッシュ時間はデータによります。リアルタイムの RTS は 1 秒。リスト類は 30 秒。観測、台風、時刻リストは 1 分。予報と地震情報の内容は 10 分。指定時刻または番号の過去データと観測点一覧は 1 時間です。
  • 上流が一時的に使えないとき(429、5xx、またはタイムアウト)は、最大でキャッシュ時間の 10 倍以内の古いデータに戻り、note に説明を入れます。fetched_at は、そのデータを実際に取得した時刻です。
  • パラメータが不正、または照会が失敗したときは、ツール呼び出しはエラーメッセージを返します。空のデータは返しません。
  • ブラウザからのクロスオリジン直接呼び出しには対応していません。クロスオリジンのリクエストは拒否されます(403)。MCP クライアントかサーバー側から接続してください。
  • Streamable HTTP はセッションを保持しません。サーバーから通知を送ったり、クライアントへリクエストを出したりはしません。