跳到內容
主控台

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
Header
  • 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
}
}
]
}
}
}
}

瀏覽器的跨來源請求被拒絕沒有回應本文

項目 內容
網址 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 起)。同一個網址也支援舊版 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 用的網址 /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,網址填 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 網址;離線工具(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;差量時間已還原成實際時間;欄位化快照已轉成每站一列,並附上測站名稱、縣市、鄉鎮與座標。
  • 需要指定時刻的工具使用參數 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 不可商用 測站即時震動,一幀約一秒,依強度排序並附測站位置與鄉鎮 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 可商用 鄉鎮逐時預報,見鄉鎮逐時預報 code(必填,3 碼)
rain_hour_forecast 可商用 鄉鎮未來 1 小時的逐分鐘降雨預報 code(必填,3 碼)
meteor_snapshot 可商用 全部測站的天氣、雨量或閃電快照,每站一列,可篩選與排序 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、風場則附圖磚網址模板 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);
  • 伺服器會快取上游資料,同時間相同的查詢共用一次上游請求。快取時間依資料而定:即時的 RTS 1 秒;列表類 30 秒;觀測、颱風與時間列表 1 分鐘;預報與地震報告內容 10 分鐘;指定時刻或編號的歷史資料與測站目錄 1 小時。
  • 上游暫時無法使用(429、5xx 或逾時)時,會改回最多 10 倍快取時間內的舊資料,並在 note 說明;fetched_at 是那份資料實際取得的時間。
  • 參數不合法或查詢失敗時,工具呼叫會回傳錯誤訊息,不會回傳空資料。
  • 不支援瀏覽器跨網域直接呼叫,跨來源的請求會被拒絕(403)。請從 MCP 用戶端或伺服器端連線。
  • Streamable HTTP 不保留工作階段,伺服器不會主動推送通知或向用戶端發出請求。