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 Code
claude mcp add --transport http bmkg https://mcp-bmkg.dhanypedia.com/mcp

Memakai instance API sendiri

Server lokal membaca dari instance publik ini secara default. Environment variable berikut mengarahkannya ke instance lain:

Konfigurasi client MCP
{
  "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.

ToolArgumenHasil
get_latest_earthquaketidak adaGempa terbaru
get_recent_earthquakestidak ada15 gempa terakhir bermagnitudo 5,0 ke atas
get_felt_earthquakestidak ada15 gempa terakhir yang dirasakan
get_nearby_earthquakeslatitude, longitude, radius_kmGempa terkini di sekitar satu titik
get_weather_forecastadm4_codePrakiraan 3 hari tiap 3 jam
get_current_weatheradm4_codePrakiraan untuk slot 3 jam berjalan
get_weather_warningslanguagePeringatan dini cuaca aktif per provinsi
check_location_warningslocation, languagePeringatan aktif yang menyebut satu tempat
search_regionsquery, limitWilayah yang cocok dengan nama, beserta kodenya
get_provincestidak adaProvinsi dengan kode dua digit
get_districtsprovince_codeKabupaten dan kota dalam satu provinsi
get_subdistrictsdistrict_codeKecamatan dalam satu kabupaten atau kota
get_villagessubdistrict_codeDesa 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.

Hasil tool
{
  "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:

KodeArti
INVALID_ARGUMENTAPI menolak salah satu argumen
NOT_FOUNDTidak ada data untuk input itu, misalnya kode yang tidak punya prakiraan
RATE_LIMITEDTerlalu banyak request. Tunggu satu menit
UPSTREAM_UNAVAILABLEBMKG atau API sedang tidak terjangkau
INTERNAL_ERRORKegagalan 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.