关于 BMKG Gempa & Cuaca
BMKG Gempa & Cuaca 是从 BMKG 开放数据提供印度尼西亚地震信息和村级天气预报的 MCP 服务。它仅提供只读访问,无需 API 密钥,并在回复中注明数据来源。
主要功能
- 01获取最新地震详情
- 02列出近期有感地震和 M 5.0 以上地震
- 03获取村级逐 3 小时天气预报
- 04标注 BMKG 来源和获取时间
- 05缓存响应 60 秒
适用场景
- 01查询印度尼西亚近期地震
- 02查看各地区报告的震感强度
- 03获取村庄未来几天的天气预报
MCP 相关
向 MCP 客户端提供只读地震数据和村级天气预报工具。数据通过 BMKG 开放接口获取,无需 API 密钥。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
npx -y mcp-bmkgMCP_BMKG_TIMEOUT_MSTimeout per BMKG request in ms (default 10000)MCP_BMKG_CACHE_MSCache lifetime per URL in ms (default 60000)MCP_BMKG_BASE_URLOverride base URL for both BMKG hosts (tests or mirrors)本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
工具
4收录的工具列表 · 更新于 2 天前
此工具无需参数。
详细介绍
mcp-bmkg
一个 MCP 服务,为你的 AI 助手提供 BMKG 开放数据中的印度尼西亚地震数据和村级天气预报。无需 API 密钥、无需账号、仅需一个文件、零依赖。
示例:“今天印度尼西亚发生过强震吗?明天下午 Kemayoran(31.71.03.1001)的天气怎么样?”
🇮🇩 印尼语:请查看下方章节。
- 适用于 Claude Desktop、Claude Code、Cursor、OpenCode,以及任何可运行本地 stdio 服务的 MCP 客户端。
- 使用印尼语作答,并附带使用英文键名的 JSON 块(便于代码和 Agent 使用)。
- 每个回答都会以 “Sumber: BMKG” 结尾,并标注 WIB 时区的获取时间,这是 BMKG 开放数据条款的要求。
- 缓存时间为 60 秒,每次请求超时为 10 秒,因此远低于 BMKG 每个 IP 每分钟 60 次请求的限制。
工具
| 工具 | 返回内容 | 输入 |
|---|---|---|
gempa_terbaru | BMKG 以“Gempabumi Terbaru”发布的最新地震:时间(WIB + UTC)、震级、深度、坐标、最近区域、海啸可能性、震感区域(MMI)和烈度图链接。通常为 M 5.0 及以上,但 BMKG 也会通过此数据源发布有震感的较小地震。 | 无 |
gempa_dirasakan | 最近 15 次有震感的地震,以及各区域的 MMI 烈度。 | limit(1-15)、min_magnitude |
gempa_m5 | 最近 15 次 M 5.0 及以上的地震,以及海啸可能性。 | limit(1-15)、min_magnitude |
prakiraan_cuaca | 最多 3 天内某个 kelurahan/desa 的每 3 小时天气预报:天气(印尼语 + 英语)、气温、湿度、风、云量、能见度。 | adm4(必填,例如 31.71.03.1001)、days(1-3) |
所有工具均为只读且免费。以下是 gempa_m5 返回的 JSON 示例(已缩短):
{
"dataset": "gempaterkini",
"count": 1,
"earthquakes": [
{ "datetime_utc": "2026-11-10T15:51:37+00:00", "time_local": "22:51:37 WIB", "magnitude": 5.1, "depth_km": 10,
"latitude": -0.93, "longitude": 128.6, "region": "116 km TimurLaut HALMAHERASELATAN-MALUT", "potential": "Tidak berpotensi tsunami" }
],
"source": "BMKG",
"fetched_at_wib": "2026-11-11 23:17:52 WIB"
}
安装
需要 Node.js 18+(node -v)。使用 npx 无需安装其他内容:应用会运行 npx -y mcp-bmkg。
Claude Desktop:Settings → Developer → Edit Config(claude_desktop_config.json),然后完全退出并重新打开 Claude Desktop。
{
"mcpServers": {
"bmkg": {
"command": "npx",
"args": ["-y", "mcp-bmkg"]
}
}
}
Claude Code
claude mcp add bmkg -- npx -y mcp-bmkg
添加 --scope user,即可在每个项目中使用。运行 claude mcp list 进行检查。
Cursor:~/.cursor/mcp.json(所有项目)或 .cursor/mcp.json(单个项目),使用与 Claude Desktop 相同的 JSON。
OpenCode:项目中的 opencode.json,或 ~/.config/opencode/opencode.json。
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"bmkg": {
"type": "local",
"command": ["npx", "-y", "mcp-bmkg"],
"enabled": true
}
}
}
Windows:如果应用无法启动 npx,请使用 "command": "cmd" 和 "args": ["/c", "npx", "-y", "mcp-bmkg"]。
从源码安装:运行 git clone https://github.com/EzkielynaGroup/mcp-bmkg.git,然后使用 "command": "node" 和 "args": ["/full/path/to/mcp-bmkg.mjs"]。
配置(可选)
| 变量 | 默认值 | 备注 |
|---|---|---|
MCP_BMKG_TIMEOUT_MS | 10000 | 每次请求的超时时间(1000-120000) |
MCP_BMKG_CACHE_MS | 60000 | 每个 URL 的缓存时长;0 会禁用缓存 |
MCP_BMKG_BASE_URL | 未设置 | 两个 BMKG 主机共用的基础 URL,可用于测试或镜像。未设置时使用 https://data.bmkg.go.id(地震)和 https://api.bmkg.go.id(天气预报) |
查找 adm4 村庄代码
prakiraan_cuaca 需要 kelurahan/desa 的 Kemendagri 第 4 级区域代码,格式为 PP.KK.CC.DDDD(省、县/市、区、村)。BMKG 的天气预报页面引用了 Keputusan Menteri Dalam Negeri Nomor 100.1.1-6117 Tahun 2022 中的这些代码,并给出了示例:31.71.03.1001 = Kelurahan Kemayoran,雅加达中部。
此服务不附带代码查询功能:完整列表包含 80,000 多个村庄,而且 BMKG 没有为其提供搜索端点。查找代码的方式:
- **最简单:**添加配套服务 mcp-wilayah-indonesia(
npx -y mcp-wilayah-indonesia,离线运行)。它的cari_wilayah工具可以按名称查找村庄并返回bmkg_adm4,这样你就可以询问“cuaca besok di Kemayoran”,由助手串联调用这两个服务。 - Kemendagri 的区域代码决定(附件列出了每个村庄及其代码)。
- GitHub 上重新发布 Kemendagri 列表的社区数据集(搜索“kode wilayah kemendagri”)。请检查其许可证以及采用的是哪一年的决定。
- Statistics Indonesia(BPS)使用自己的代码,这些代码并不总是与 Kemendagri 代码一致。请勿混用。
如果代码有误,或 BMKG 没有该代码对应的天气预报,工具会明确提示(“Kode wilayah tidak ditemukan”),而不会猜测。
数据来源和条款
所有数据均实时来自 **BMKG(Badan Meteorologi, Klimatologi, dan Geofisika)**开放数据,已于 2026 年 11 月 11 日核查:
| 数据 | 端点 | 更新频率(据 BMKG) |
|---|---|---|
| 最新地震 | https://data.bmkg.go.id/DataMKG/TEWS/autogempa.json | 每次地震发生时 |
| 最新 15 次震级 M 5.0 以上的地震 | https://data.bmkg.go.id/DataMKG/TEWS/gempaterkini.json | 每次地震发生时 |
| 最新 15 次有震感的地震 | https://data.bmkg.go.id/DataMKG/TEWS/gempadirasakan.json | 每次地震发生时 |
| 震动图 | https://data.bmkg.go.id/DataMKG/TEWS/<Shakemap> | 每次地震发生时 |
| 村庄天气预报 | https://api.bmkg.go.id/publik/prakiraan-cuaca?adm4=<code> | 每天两次,每 3 小时一次,预报未来 3 天 |
条款来自 data.bmkg.go.id 和天气预报页面:用户必须注明 BMKG 为数据来源,并在自己的应用中显示该来源:"Wajib untuk mencantumkan BMKG ... sebagai sumber data dan menampilkannya pada aplikasi/sistem Anda." 每个 IP 的访问上限为每分钟 60 次。因此,此服务会在每个答复末尾添加“Sumber: BMKG”,并将响应缓存 60 秒。如果你向其他人展示结果,请保留此来源标注。
此服务不会再分发 BMKG 数据,而是在收到请求时获取数据。test/fixtures/ 中记录的响应(BMKG 数据,2026 年 11 月 11 日)仅用于离线测试,不属于 npm 包。本项目独立开发,与 BMKG 无关联。
BMKG 未说明预报字段 tp 的含义。此服务会将其作为 precipitation_mm 传递,这是我们对该字段的理解(未经核实)。
安全性和限制
- 只读。不写入任何文件,不使用任何密钥或账户。
- 在发起任何请求前,会在本地验证
adm4(00.00.00.0000);无效输入不会发送给 BMKG。 - 每个请求都有超时限制(默认 10 秒),超过 2 MB 的响应会被拒绝,每个答复最多包含 15 条地震记录和 40 条天气预报记录。
- 错误会以简短的印尼语和英语消息返回(超时、速率限制、未找到代码、BMKG 服务不可用),绝不会返回堆栈跟踪。
- 日志写入 stderr;stdout 仅传递 MCP 消息。
- 遇到紧急情况,请遵循 BMKG 官方渠道和当地主管部门的指引。此工具仅转发 BMKG 数据,不会自行添加警告。
常见问题
有没有免费的印度尼西亚地震数据 API? 有。BMKG 在 data.bmkg.go.id 免费提供最新地震、最新 15 起 M 5.0+ 地震和最新 15 起有震感的地震的 JSON 数据,无需密钥。此服务将这些数据源封装起来,供 AI 助手使用。
如何在 Claude 或 Cursor 中获取按村庄划分的 BMKG 天气预报?
添加此服务(npx -y mcp-bmkg),然后使用村庄的 Kemendagri adm4 代码查询天气预报,例如“prakiraan cuaca 31.71.03.1001 besok”。
使用 BMKG 数据时需要注明来源吗? 需要。BMKG 的开放数据页面要求用户在应用或系统中注明 BMKG 为数据来源。此服务的每个回答都会包含“Sumber: BMKG”。
BMKG 数据多久更新一次? 地震数据源会在每次事件发生时更新;村庄天气预报每天生成两次,以 3 小时为间隔,覆盖 3 天。此服务会将每个 URL 缓存 60 秒。
gempa_terbaru 只显示 M 5.0+ 地震吗?
不一定。它会镜像 BMKG 的“Gempabumi Terbaru”数据源;如果较小的地震有震感,也可能显示。要查看 M 5.0+ 地震列表,请使用 gempa_m5。
开发
node --test test/
测试会通过 stdio 启动服务,并针对 BMKG 端点的本地模拟服务运行;该模拟服务提供已记录的固定测试数据,无需联网。测试覆盖所有工具,以及超时、速率限制、错误代码、无效 JSON 和缓存。
印尼语
用于获取 BMKG 开放数据中的地震和按村庄划分的天气预报 的 MCP 服务。无需 API 密钥,只需 Node.js 18+。示例:“今天有强震吗?Kemayoran(31.71.03.1001)明天中午的天气怎么样?”
工具
gempa_terbaru:BMKG 最新地震数据(WIB/UTC 时间、震级、深度、坐标、区域、海啸潜势、有震感的区域、震感地图链接)。通常为 M 5.0+,但 BMKG 也会用此数据源发布有震感的较小地震。gempa_dirasakan:最近 15 起有震感的地震,包含 MMI 烈度。可选参数limit、min_magnitude。gempa_m5:最近 15 起 M 5.0+ 地震,包含海啸潜势。可选参数limit、min_magnitude。prakiraan_cuaca:单个村庄未来最多 3 天的天气预报,每 3 小时更新一次。必须提供adm4,可选参数days(1-3)。
安装:将 npx -y mcp-bmkg 添加到您的应用中(上文提供了 Claude Desktop、Claude Code、Cursor、OpenCode 的配置示例)。在 Windows 上,如果无法直接运行 npx,请使用 cmd /c npx -y mcp-bmkg。
adm4 代码:Kemendagri 的 IV 级行政区划代码(村庄),格式为 00.00.00.0000,例如 31.71.03.1001(Kemayoran)。BMKG 依据 Kemendagri 第 100.1.1-6117 号 2022 年决定。此服务不包含代码列表(村庄超过 80,000 个)。最简单的方式是同时安装 mcp-wilayah-indonesia(npx -y mcp-wilayah-indonesia,可离线使用);其 cari_wilayah 工具可以按名称搜索村庄并提供 bmkg_adm4。也可以在 Kemendagri 决定的附件或转录该附件的社区数据集中查找(请核查许可)。BPS 代码不同,请勿混用。
来源和条款:所有数据均直接来自 BMKG(data.bmkg.go.id 和 api.bmkg.go.id)。BMKG 要求用户注明 BMKG 为数据来源,并在应用中展示;每个 IP 的访问上限为每分钟 60 次。因此,每个回答末尾都会附上“Sumber: BMKG”和数据获取时间(WIB),回答会缓存 60 秒。本项目独立运营,与 BMKG 无关联。BMKG 未说明天气预报中的 tp 字段含义;我们将其显示为 precipitation_mm(尚未验证)。
限制:仅读取数据,不保存文件,无需密钥。超时时间为 10 秒,缓存时间为 60 秒。遇到紧急情况时,请关注 BMKG 和当地政府发布的信息渠道。
由 Ezkielyna 制作,这是一个面向印度尼西亚开发者的独立 AI API 网关(QRIS):ezkielyna.store。
许可证
代码采用 MIT 许可证。数据归 BMKG 所有,并根据 BMKG 的开放数据条款在运行时获取(注明数据来源为“BMKG”)。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。