Server MCP
Tiga belas tool read-only untuk prakiraan cuaca, gempa bumi, peringatan dini cuaca, dan pencarian wilayah. Servernya di-hosting, jadi sebagian besar client hanya butuh satu URL.
Menghubungkan client
Endpoint memakai Streamable HTTP dan tidak butuh API key: https://mcp-bmkg.dhanypedia.com/mcp
Satu perintah. Tersedia juga sebagai plugin: claude plugin marketplace add dhanyyudi/bmkg-api, lalu claude plugin install bmkg@bmkg-api.
claude mcp add --transport http bmkg https://mcp-bmkg.dhanypedia.com/mcpMemakai instance API sendiri
Server lokal membaca dari instance publik ini secara default. Environment variable berikut mengarahkannya ke instance lain:
{
"mcpServers": {
"bmkg": {
"command": "uvx",
"args": ["bmkg-api-mcp"],
"env": { "BMKG_API_BASE_URL": "http://localhost:8099/v1" }
}
}
}Tool
Tool cuaca membutuhkan adm4_code tingkat desa, misalnya 31.74.04.1006. Kode itu didapat dari search_regions, atau dengan menelusuri provinsi, kabupaten, kecamatan, lalu desa.
| Tool | Argumen | Hasil |
|---|---|---|
get_latest_earthquake | tidak ada | Gempa terbaru |
get_recent_earthquakes | tidak ada | 15 gempa terakhir bermagnitudo 5,0 ke atas |
get_felt_earthquakes | tidak ada | 15 gempa terakhir yang dirasakan |
get_nearby_earthquakes | latitude, longitude, radius_km | Gempa terkini di sekitar satu titik |
get_weather_forecast | adm4_code | Prakiraan 3 hari tiap 3 jam |
get_current_weather | adm4_code | Prakiraan untuk slot 3 jam berjalan |
get_weather_warnings | language | Peringatan dini cuaca aktif per provinsi |
check_location_warnings | location, language | Peringatan aktif yang menyebut satu tempat |
search_regions | query, limit | Wilayah yang cocok dengan nama, beserta kodenya |
get_provinces | tidak ada | Provinsi dengan kode dua digit |
get_districts | province_code | Kabupaten dan kota dalam satu provinsi |
get_subdistricts | district_code | Kecamatan dalam satu kabupaten atau kota |
get_villages | subdistrict_code | Desa dan kelurahan, dengan kode adm4 |
Server juga menyediakan tujuh prompt: gempa bumi, cuaca, pencarian wilayah, kesiapsiagaan darurat, perjalanan, riset, dan ringkasan harian.
Format response
Semua tool mengembalikan envelope yang sama. Nilai status diperiksa lebih dulu.
{
"status": "success",
"data": { "magnitude": 5.4, "region": "18 km TimurLaut Pekalongan" },
"error": null,
"meta": {
"tool_version": "2.0.0",
"operation": "get_latest_earthquake",
"trace_id": "4b1f0c7e9d2a4f6c8e3b5a7d9c1e2f30",
"latency_ms": 84.2,
"source": "BMKG (Badan Meteorologi, Klimatologi, dan Geofisika)",
"fetched_at": "2026-02-16T08:30:00Z",
"cache_ttl_seconds": 60,
"served_from_cache": false,
"details": {},
"warnings": []
}
}Saat gagal, status bernilai "error", data bernilai null, dan error.code berisi salah satu kode berikut:
| Kode | Arti |
|---|---|
INVALID_ARGUMENT | API menolak salah satu argumen |
NOT_FOUND | Tidak ada data untuk input itu, misalnya kode yang tidak punya prakiraan |
RATE_LIMITED | Terlalu banyak request. Tunggu satu menit |
UPSTREAM_UNAVAILABLE | BMKG atau API sedang tidak terjangkau |
INTERNAL_ERROR | Kegagalan lain. Sertakan meta.trace_id saat melaporkannya |
Argumen yang tidak sesuai schema tool, seperti kode yang salah bentuk atau lintang di luar rentang, ditolak oleh protokol sebelum tool berjalan.
Pindah dari versi 1.x
- Hasil dibungkus envelope di atas. Yang dulu menjadi seluruh hasil kini berada di data.
- Kegagalan dulu berbentuk {"error": "<teks>"}. Kini berbentuk status "error" dengan kode.
- Tool debug_ping dan get_cache_stats dihapus.
- search_regions mengembalikan 20 hasil secara default. Argumen limit menambahnya.