BMKG MCP Server
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@BMKG MCP Serverwhat's the weather forecast for Bandung for the next 3 days?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
BMKG MCP Server (Unofficial)
Server MCP (Model Context Protocol) untuk mengakses data dari BMKG (Badan Meteorologi, Klimatologi, dan Geofisika Indonesia). Server ini menyediakan akses mudah ke data gempa bumi, prakiraan cuaca, dan peringatan dini cuaca untuk seluruh wilayah Indonesia.
β¨ Fitur
π Data Gempa Bumi
Gempa Terkini: Info gempa bumi terbaru dengan shakemap
15 Gempa M 5.0+: Daftar gempa berkekuatan 5.0 atau lebih
15 Gempa Dirasakan: Daftar gempa yang dirasakan masyarakat
βοΈ Prakiraan Cuaca
Prakiraan 3 Hari: Data lengkap hingga level kelurahan/desa
Update Per 3 Jam: 8 forecast per hari (total Β±24 forecast)
Data Lengkap: Suhu, kelembaban, angin, tutupan awan, jarak pandang
β οΈ Peringatan Dini Cuaca
Nowcast: Peringatan cuaca ekstrem aktif di seluruh Indonesia
Berbasis CAP: Mengikuti standar Common Alerting Protocol
Level Kecamatan: Detail wilayah terdampak hingga kecamatan
Bilingual: Tersedia dalam Bahasa Indonesia dan English
πΊοΈ Pencarian Kode Wilayah
Database Lokal: 91,220+ wilayah dari provinsi hingga desa
Pencarian Fleksibel: Cari berdasarkan nama di semua level
Hierarki Lengkap: Tampilan struktur provinsi > kabupaten > kecamatan > desa
Related MCP server: wems-mcp-server
π¦ Instalasi
Prasyarat
Python 3.8 atau lebih baru
uv (package manager) atau pip
Langkah Instalasi
Clone repository
git clone https://github.com/revomkg/bmkg-mcp.git
cd bmkg-mcpInstall dependencies
Menggunakan uv (disarankan):
uv syncAtau menggunakan pip:
pip install httpx xmltodict mcpPastikan file base.csv ada
File base.csv berisi database kode wilayah Indonesia. Pastikan file ini ada di direktori yang sama dengan bmkg-server.py.
π Penggunaan
Konfigurasi di Claude Desktop
Tambahkan konfigurasi berikut ke file claude_desktop_config.json:
Lokasi file konfigurasi:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.jsonLinux:
~/.config/Claude/claude_desktop_config.json
Isi konfigurasi:
{
"mcpServers": {
"bmkg": {
"command": "python",
"args": ["/path/to/bmkg-mcp/bmkg-server.py"]
}
}
}Atau dengan uv:
{
"mcpServers": {
"bmkg": {
"command": "uv",
"args": ["run", "/path/to/bmkg-mcp/bmkg-server.py"]
}
}
}π§ Tools yang Tersedia
1. get_latest_earthquake()
Mendapatkan informasi gempa bumi terkini dengan shakemap.
Return:
Waktu kejadian
Magnitudo
Kedalaman
Lokasi
Potensi tsunami
URL shakemap
2. get_significant_earthquakes()
Daftar 15 gempa bumi terkini dengan magnitudo 5.0+.
Return:
Array of earthquakes dengan detail lengkap
Potensi tsunami untuk setiap gempa
3. get_felt_earthquakes()
Daftar 15 gempa bumi yang dirasakan masyarakat.
Return:
Array of earthquakes
Info daerah yang merasakan
4. search_location_code(location_name, admin_level)
Mencari kode wilayah berdasarkan nama lokasi.
Parameters:
location_name(string): Nama lokasi yang dicariadmin_level(string, optional): Filter level administratif"all"- Semua level (default)"province"/"provinsi"- Provinsi"regency"/"kabkota"- Kabupaten/Kota"district"/"kecamatan"- Kecamatan"village"/"desa"- Kelurahan/Desa
Contoh:
search_location_code("Pandak", "village")
# Returns: 33.02.07.2005 - Pandak di Jawa Tengah > Banyumas > Sumpiuh5. get_villages_in_district(district_code)
Mendapatkan semua kelurahan/desa dalam kecamatan tertentu.
Parameters:
district_code(string): Kode kecamatan (contoh: "33.02.07")
Return:
Daftar lengkap kelurahan/desa dengan kode siap pakai
6. get_weather_forecast(kode_wilayah)
Prakiraan cuaca 3 hari untuk wilayah tertentu.
Parameters:
kode_wilayah(string): Kode wilayah level desa (4 segmen)
Return:
Prakiraan 3 hari dengan 8 forecast per hari
Suhu, kelembaban, cuaca, angin, tutupan awan, jarak pandang
Total Β±24 forecast points
Contoh:
get_weather_forecast("33.02.07.2005") # Pandak, Sumpiuh, Banyumas7. get_weather_alerts(language)
Daftar peringatan dini cuaca aktif di Indonesia.
Parameters:
language(string, optional): "id" atau "en" (default: "id")
Return:
RSS feed peringatan cuaca aktif
Link ke detail CAP tiap provinsi
8. get_weather_alert_detail(cap_code, language)
Detail peringatan dini cuaca untuk provinsi tertentu.
Parameters:
cap_code(string): Kode CAP dari link di weather alertslanguage(string, optional): "id" atau "en" (default: "id")
Return:
Detail lengkap CAP
Wilayah kecamatan terdampak
Waktu berlaku dan berakhir
Tingkat bahaya (severity, urgency, certainty)
9. search_weather_alerts_by_kecamatan(kecamatan, language)
Mencari peringatan dini untuk kecamatan tertentu.
Parameters:
kecamatan(string): Nama kecamatanlanguage(string, optional): "id" atau "en" (default: "id")
Return:
Peringatan yang mempengaruhi kecamatan tersebut
Detail wilayah terdampak
π‘ Contoh Penggunaan
Mencari Cuaca untuk Lokasi Tertentu
User: "Bagaimana cuaca di Pandak, Sumpiuh?"
Claude akan:
Memanggil
search_location_code("Pandak", "village")Menemukan kode:
33.02.07.2005Memanggil
get_weather_forecast("33.02.07.2005")Menampilkan prakiraan 3 hari lengkap
Cek Gempa Terkini
User: "Ada gempa apa hari ini?"
Claude akan:
Memanggil
get_latest_earthquake()Menampilkan info gempa terkini + shakemap
Bisa memanggil
get_significant_earthquakes()untuk daftar lengkap
Cek Peringatan Cuaca di Daerah Saya
User: "Ada peringatan cuaca untuk Jagakarsa?"
Claude akan:
Memanggil
search_weather_alerts_by_kecamatan("Jagakarsa")Menampilkan peringatan aktif (jika ada)
Detail tingkat bahaya dan waktu berlaku
π Sumber Data
Data yang digunakan server ini berasal dari:
BMKG (data.bmkg.go.id): Data gempa bumi dan cuaca resmi
BMKG API (api.bmkg.go.id): API prakiraan cuaca dan peringatan dini
Kode Wilayah: Database lokal berdasarkan Keputusan Mendagri No. 100.1.1-6117 Tahun 2022
π Batasan Akses
Sesuai dokumentasi BMKG:
Prakiraan Cuaca: 60 permintaan per menit per IP
Peringatan Dini: 60 permintaan per menit per IP
Gunakan dengan bijak untuk menghindari rate limiting.
π€ Kontribusi
Kontribusi selalu diterima! Silakan:
Fork repository ini
Buat branch baru (
git checkout -b feature/fitur-baru)Commit perubahan (
git commit -am 'Tambah fitur baru')Push ke branch (
git push origin feature/fitur-baru)Buat Pull Request
π Lisensi
Proyek ini dilisensikan di bawah MIT License.
Proyek ini adalah unofficial dan tidak berafiliasi dengan BMKG. Data yang digunakan berasal dari sumber publik BMKG.
β οΈ Disclaimer
Server ini dibuat untuk memudahkan akses data BMKG melalui Model Context Protocol. Pengguna bertanggung jawab untuk mematuhi syarat dan ketentuan penggunaan data dari BMKG.
π Credits
Data gempa dan cuaca dari BMKG
Database kode wilayah berdasarkan Keputusan Mendagri
Menggunakan FastMCP untuk MCP server
π§ Kontak
Untuk pertanyaan, saran, atau laporan bug, silakan buat issue di repository ini.
β Jika proyek ini bermanfaat, berikan bintang di GitHub!
Available Tools
9 toolsget_felt_earthquakesA
Mengambil daftar 15 gempabumi terkini yang dirasakan masyarakat.
Mengembalikan detail waktu, lokasi, magnitudo, kedalaman, dan daerah yang merasakan.
Sumber Data: BMKG (Badan Meteorologi, Klimatologi, dan Geofisika)
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes the tool's behavior: it retrieves a fixed list of 15 items, specifies the data source (BMKG), and details the returned information (time, location, magnitude, depth, and felt areas). This covers key aspects like output format and data origin, though it could mention rate limits or update frequency for a higher score.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is highly concise and well-structured in three sentences: the first states the purpose, the second details the return values, and the third specifies the data source. Every sentence adds value without redundancy, making it front-loaded and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (0 parameters, no annotations, but has an output schema), the description is complete. It explains what the tool does, what it returns, and the data source, which is sufficient for an AI agent to understand and invoke it correctly without needing to cover parameters or output details that are handled by the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has 0 parameters with 100% schema description coverage, so the baseline is 4. The description does not need to add parameter information, and it correctly focuses on the tool's function without unnecessary details, maintaining an appropriate baseline score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with specific verbs ('Mengambil daftar' - 'Retrieves list') and resources ('15 gempabumi terkini yang dirasakan masyarakat' - '15 latest earthquakes felt by the public'), distinguishing it from siblings like 'get_latest_earthquake' and 'get_significant_earthquakes' by specifying it's about felt earthquakes with a fixed count of 15.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context by specifying '15 gempabumi terkini yang dirasakan masyarakat' (15 latest earthquakes felt by the public), which suggests when to use this tool (for recent felt earthquakes) versus alternatives like 'get_latest_earthquake' or 'get_significant_earthquakes'. However, it does not explicitly state when not to use it or name alternatives, keeping it at a 4.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_latest_earthquakeA
Mengambil data gempa bumi terbaru yang dirasakan (M 5.0+ atau signifikan).
Mengembalikan detail waktu, lokasi, magnitudo, dan potensi tsunami.
Sumber Data: BMKG (Badan Meteorologi, Klimatologi, dan Geofisika)
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses key behavioral traits: it's a read operation ('Mengambil'), specifies the data source (BMKG), and outlines return details (time, location, magnitude, tsunami potential). It doesn't mention rate limits or authentication needs, but for a public data tool, this is reasonably transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficiently structured in three sentences: purpose, return details, and data source. Each sentence adds value without redundancy, and it's front-loaded with the core functionality. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (0 parameters, no annotations, but has output schema), the description is complete. It explains what the tool does, the data source, and what to expect in returns. With an output schema, it doesn't need to detail return values further, making this sufficient for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has 0 parameters, and schema description coverage is 100%. The description doesn't need to explain parameters, so it meets the baseline of 4 for zero-parameter tools. It appropriately focuses on what the tool does rather than input details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Mengambil data gempa bumi terbaru yang dirasakan' (Retrieve latest felt earthquake data). It specifies the criteria (M 5.0+ or significant) and distinguishes from siblings like 'get_felt_earthquakes' and 'get_significant_earthquakes' by focusing on the single latest event rather than multiple events.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use this tool: for the latest felt/significant earthquake data. It doesn't explicitly state when not to use it or name alternatives, but the context is sufficient given the sibling tool names imply different scopes (e.g., 'get_felt_earthquakes' for multiple events).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_significant_earthquakesA
Mengambil daftar 15 gempabumi terkini dengan magnitudo 5.0 atau lebih.
Mengembalikan detail waktu, lokasi, magnitudo, kedalaman, dan potensi tsunami.
Sumber Data: BMKG (Badan Meteorologi, Klimatologi, dan Geofisika)
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses key behavioral traits: it returns 15 items, filters by magnitude β₯5.0, includes specific data fields (time, location, magnitude, depth, tsunami potential), and cites the data source (BMKG). However, it doesn't mention potential limitations like rate limits, data freshness, or error conditions, which would be helpful for a tool with no annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is highly concise and well-structured: two sentences that efficiently convey purpose, scope, return details, and data source. Every sentence adds value without redundancy. The first sentence states what the tool does, and the second provides additional context about the returned data and source.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (0 parameters, no annotations, but with an output schema), the description is reasonably complete. It explains what the tool returns and the data source, which complements the output schema. However, it could be more complete by mentioning any constraints (e.g., data update frequency) or typical use cases, though the output schema likely covers return structure.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has 0 parameters, and schema description coverage is 100% (empty schema). The description doesn't need to add parameter semantics since there are none. A baseline of 4 is appropriate for a zero-parameter tool where the schema fully covers the absence of inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Mengambil daftar 15 gempabumi terkini dengan magnitudo 5.0 atau lebih' (Retrieves a list of 15 recent earthquakes with magnitude 5.0 or higher). It specifies the exact resource (earthquakes), quantity (15), and magnitude threshold (5.0+), distinguishing it from siblings like 'get_latest_earthquake' (singular) and 'get_felt_earthquakes' (different criteria).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use this tool: when you need recent significant earthquakes (magnitude β₯5.0). It doesn't explicitly mention when not to use it or name alternatives, but the context is sufficiently clear given the sibling tools. For example, 'get_latest_earthquake' might return a single latest event regardless of magnitude, while this tool returns multiple filtered events.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_villages_in_districtA
Mendapatkan daftar semua kelurahan/desa dalam kecamatan tertentu dari database lokal.
Args:
district_code: Kode kecamatan (contoh: "33.02.07" untuk Sumpiuh)
Returns:
Daftar kelurahan/desa dengan kode lengkap yang siap digunakan untuk prakiraan cuaca.
| Name | Required | Description | Default |
|---|---|---|---|
| district_code | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It discloses this is a read operation from a local database and mentions the output format ('daftar kelurahan/desa dengan kode lengkap'), but doesn't cover important behavioral aspects like error handling, data freshness, rate limits, or authentication requirements. It adds some context about the data's purpose but leaves significant gaps in behavioral understanding.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately sized with three focused sentences: purpose statement, parameter explanation with example, and return value clarification. It's front-loaded with the core functionality. The bilingual presentation (Indonesian/English) is slightly redundant but still efficient. Every sentence adds value, though the structure could be slightly more streamlined.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simple nature (single parameter, read-only operation, has output schema), the description provides adequate context. It covers the purpose, parameter meaning with example, and output purpose. The existence of an output schema means the description doesn't need to detail return structure. However, for a database query tool, additional context about data source reliability or update frequency would be beneficial.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage (schema has no parameter descriptions), the description fully compensates by providing essential semantic information: it explains what 'district_code' represents ('Kode kecamatan'), provides a concrete example ('33.02.07 untuk Sumpiuh'), and clarifies this is a required input. The description adds substantial value beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Mendapatkan daftar semua kelurahan/desa' - Getting a list of all villages/subdistricts) and resource ('dalam kecamatan tertentu dari database lokal' - within a specific district from the local database). It distinguishes from siblings by focusing on village-level data retrieval rather than earthquake or weather data, which are handled by other tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context by specifying it retrieves village data for weather forecasting purposes ('siap digunakan untuk prakiraan cuaca'), but doesn't explicitly state when to use this tool versus alternatives like 'search_location_code' or 'search_weather_alerts_by_kecamatan'. It provides some directional guidance but lacks explicit comparison or exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_weather_alert_detailA
Mengambil detail peringatan dini cuaca untuk provinsi tertentu berdasarkan CAP code.
Mengembalikan informasi detail wilayah kecamatan terdampak.
Args:
cap_code: Kode detail CAP (contoh: "20231125120000_BMKG001")
language: Bahasa output, "id" untuk Indonesia atau "en" untuk English (default: "id")
Returns:
Detail CAP meliputi: event, effective, expires, senderName, headline,
description, web (infografik), dan area polygon wilayah terdampak.
| Name | Required | Description | Default |
|---|---|---|---|
| cap_code | Yes | ||
| language | No | id |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It describes what the tool returns (detailed CAP information including affected areas) but doesn't mention important behavioral aspects like error handling (e.g., what happens with invalid CAP codes), rate limits, authentication requirements, or whether it's a read-only operation. The description is accurate but incomplete for behavioral transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and appropriately sized. It starts with the core purpose, then provides parameter explanations in a clear 'Args' section, and concludes with return value details. Every sentence adds value with no redundancy or unnecessary information. The bilingual nature (Indonesian/English) is efficiently handled.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that there's an output schema (though not shown here), the description doesn't need to fully explain return values, which it acknowledges by listing key return fields. With no annotations and 2 parameters well-explained, the description provides good context for a read-only retrieval tool. However, it could be more complete by addressing potential errors or behavioral constraints that aren't covered by annotations or schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description must compensate for the lack of parameter documentation in the schema. It successfully explains both parameters: 'cap_code' is described as a CAP code with an example, and 'language' is explained as the output language with options and default value. This adds significant meaning beyond the bare schema, though it could provide more context about CAP code format or validation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with specific verbs ('Mengambil detail peringatan dini cuaca' - retrieving early weather alert details) and resources ('untuk provinsi tertentu berdasarkan CAP code' - for a specific province based on CAP code). It distinguishes itself from sibling tools like 'get_weather_alerts' (likely listing alerts) and 'search_weather_alerts_by_kecamatan' (searching by district) by focusing on detailed information for a specific alert identified by CAP code.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use this tool: when detailed information about a specific weather alert is needed, identified by its CAP code. It doesn't explicitly state when NOT to use it or name specific alternatives, but the context implies it's for detailed retrieval rather than listing or searching, which is covered by sibling tools. This gives good guidance but lacks explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_weather_alertsA
Mengambil peringatan dini cuaca ekstrem (hujan lebat/petir) yang sedang aktif di Indonesia.
Data berbasis Common Alerting Protocol (CAP) hingga level kecamatan.
Args:
language: Bahasa output, "id" untuk Indonesia atau "en" untuk English (default: "id")
Returns:
Daftar peringatan dini cuaca aktif dengan informasi provinsi terdampak,
waktu publikasi, deskripsi wilayah, dan tautan detail CAP.
| Name | Required | Description | Default |
|---|---|---|---|
| language | No | id |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses the data source (CAP-based), geographic granularity (kecamatan level), and return format (list with province, time, area description, CAP links). However, it does not mention rate limits, authentication needs, or potential errors, leaving some behavioral gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficiently structured with three sentences: purpose, parameter details, and return information. Each sentence adds value without redundancy, and it is front-loaded with the core functionality.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (1 parameter, no annotations, but with an output schema), the description is mostly complete. It covers purpose, parameter semantics, and return content. However, it could improve by addressing potential limitations or error cases, though the output schema may handle return values.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% description coverage, but the description compensates by explaining the 'language' parameter's purpose, options ('id' or 'en'), and default value. Since there is only one parameter, this provides adequate semantic context beyond the schema's basic structure.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Mengambil peringatan dini cuaca ekstrem') and resource ('di Indonesia'), with precise scope ('yang sedang aktif', 'berbasis Common Alerting Protocol (CAP) hingga level kecamatan'). It distinguishes from siblings by focusing on active weather alerts rather than forecasts, earthquakes, or detailed searches.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for retrieving active extreme weather alerts in Indonesia, but does not explicitly state when to use this tool versus alternatives like 'get_weather_forecast' or 'search_weather_alerts_by_kecamatan'. It provides clear context but lacks explicit exclusions or named alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_weather_forecastA
Mengambil prakiraan cuaca berdasarkan kode wilayah (adm4).
Args:
kode_wilayah: Kode wilayah Indonesia level desa/kelurahan (adm4).
Default: 31.71.01.1001 (Gambir, Jakarta Pusat).
Returns:
Prakiraan cuaca 3 hari dengan interval 3 jam (Β±24 forecast total).
Termasuk: suhu, kelembaban, kondisi cuaca, angin, tutupan awan, jarak pandang.
Sumber Data: BMKG (Badan Meteorologi, Klimatologi, dan Geofisika)
Note:
Untuk mencari kode wilayah, gunakan search_location_code() terlebih dahulu
Format kode: [kode_provinsi].[kode_kabkota].[kode_kecamatan].[kode_desa]
Contoh: 31.71.01.1001 = DKI Jakarta > Jakarta Pusat > Gambir > Gambir
| Name | Required | Description | Default |
|---|---|---|---|
| kode_wilayah | No | 31.71.01.1001 |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden and does well by disclosing key behavioral traits: data source (BMKG), forecast scope (3 days with 3-hour intervals, ~24 forecasts total), and return format details. It doesn't mention rate limits or error conditions, but provides substantial operational context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (Args, Returns, Sumber Data, Note) and efficiently conveys necessary information. While comprehensive, it maintains appropriate length with each sentence adding value. Minor room for tightening exists in the example explanation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity, no annotations, and the presence of an output schema, the description provides excellent completeness. It covers purpose, parameter semantics, return content, data source, usage prerequisites, and format examples - everything needed for effective tool invocation despite the structured data gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage for the single parameter, the description fully compensates by explaining the parameter's meaning ('Kode wilayah Indonesia level desa/kelurahan adm4'), format ('[kode_provinsi].[kode_kabkota].[kode_kecamatan].[kode_desa]'), providing a concrete example ('31.71.01.1001 = DKI Jakarta > Jakarta Pusat > Gambir > Gambir'), and noting the default value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Mengambil prakiraan cuaca' - Get weather forecast) and resource ('berdasarkan kode wilayah adm4' - based on adm4 region code), distinguishing it from sibling tools like earthquake or alert tools. It precisely defines what the tool does without being tautological.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly provides when-to-use guidance: 'Untuk mencari kode wilayah, gunakan search_location_code() terlebih dahulu' (To find region codes, use search_location_code() first). It names the specific alternative tool and establishes a clear prerequisite workflow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_location_codeA
Mencari kode wilayah Indonesia berdasarkan nama lokasi menggunakan database lokal.
Mendukung pencarian di semua level: provinsi, kabupaten/kota, kecamatan, kelurahan/desa.
Args:
location_name: Nama lokasi yang dicari (contoh: "Pandak", "Sumpiuh", "Banyumas")
admin_level: Level administratif yang dicari:
- "province" atau "provinsi" untuk provinsi
- "regency" atau "kabkota" untuk kabupaten/kota
- "district" atau "kecamatan" untuk kecamatan
- "village" atau "desa" untuk kelurahan/desa
- "all" untuk mencari di semua level (default)
Returns:
Daftar kode wilayah yang cocok dengan pencarian, dengan hierarki lengkap.
Note:
Kode level desa (4 segmen) dapat langsung digunakan untuk get_weather_forecast()
| Name | Required | Description | Default |
|---|---|---|---|
| location_name | Yes | ||
| admin_level | No | all |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden and does well by explaining the tool searches a local database, supports all administrative levels, returns hierarchical results, and provides integration guidance with get_weather_forecast(). It doesn't mention performance characteristics, error handling, or authentication requirements, but covers core behavioral aspects adequately.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (purpose, Args, Returns, Note), uses bullet points for admin_level values, and every sentence serves a purpose. It's appropriately sized for a tool with 2 parameters and provides necessary information without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity, no annotations, and the presence of an output schema, the description is quite complete. It explains what the tool does, documents parameters thoroughly, describes the return format, and provides integration guidance. The main gap is lack of explicit error cases or limitations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description fully compensates by providing detailed parameter documentation including examples for location_name and a comprehensive explanation of admin_level values with translations and default behavior. The Args section adds significant value beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with specific verb ('Mencari' - search) and resource ('kode wilayah Indonesia' - Indonesian region codes), and distinguishes it from siblings by focusing on location code lookup rather than earthquake or weather data retrieval. The opening sentence provides a complete functional statement.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context about when to use this tool (searching Indonesian location codes at various administrative levels) and includes a helpful note about using village codes with get_weather_forecast(). However, it doesn't explicitly state when NOT to use it or provide direct alternatives among the sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_weather_alerts_by_kecamatanA
Mencari peringatan dini cuaca yang aktif untuk kecamatan tertentu.
Tool ini akan mencari di seluruh peringatan aktif dan mengembalikan yang relevan dengan kecamatan.
Args:
kecamatan: Nama kecamatan yang ingin dicari (contoh: "Kebayoran Baru", "Bogor Barat")
language: Bahasa output, "id" untuk Indonesia atau "en" untuk English (default: "id")
Returns:
Daftar peringatan dini cuaca yang mempengaruhi kecamatan tersebut,
termasuk detail waktu berlaku, jenis kejadian, dan wilayah terdampak.
| Name | Required | Description | Default |
|---|---|---|---|
| kecamatan | Yes | ||
| language | No | id |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It does well by specifying it searches 'di seluruh peringatan aktif' (across all active alerts) and returns relevant ones, but doesn't mention important behavioral aspects like rate limits, authentication requirements, error handling, or whether results are paginated. The description doesn't contradict any annotations since none exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with purpose statement, parameter explanations, and return value description in separate sections. It's appropriately sized at 4 sentences, though the Args/Returns formatting could be more integrated with the natural language flow. Every sentence adds value with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (search with filtering), no annotations, but with an output schema present, the description does well. It covers purpose, parameters, and return content adequately. The output schema existence means the description doesn't need to detail return structure, but it could benefit from mentioning error cases or prerequisites.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage (titles only, no descriptions), the description fully compensates by providing clear semantic meaning for both parameters. It explains 'kecamatan' as the subdistrict name to search for with examples, and 'language' as the output language with valid values and default. This adds significant value beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Mencari peringatan dini cuaca' - search for early weather warnings) and resource ('untuk kecamatan tertentu' - for a specific subdistrict). It distinguishes itself from sibling tools like 'get_weather_alerts' (general alerts) and 'get_weather_alert_detail' (detailed view) by specifying the kecamatan-based filtering scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use this tool: when searching for active weather alerts affecting a specific kecamatan. However, it doesn't explicitly state when NOT to use it or mention alternatives like 'get_weather_alerts' for broader searches or 'get_weather_forecast' for non-alert weather information.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
9 tool updates
v0.1.0- First observed
get_felt_earthquakes - First observed
get_latest_earthquake - First observed
get_significant_earthquakes - First observed
get_villages_in_district - First observed
get_weather_alert_detail - First observed
get_weather_alerts - First observed
get_weather_forecast - First observed
search_location_code - First observed
search_weather_alerts_by_kecamatan
TDQS
Most tools have distinct purposes, but there is some overlap between earthquake-related tools. get_felt_earthquakes, get_latest_earthquake, and get_significant_earthquakes all retrieve earthquake data with subtle differences in criteria (felt vs. latest vs. magnitude β₯5.0), which could cause confusion for an agent. The weather and location tools are clearly distinct.
All tool names follow a consistent snake_case pattern with a clear verb_noun structure (e.g., get_weather_forecast, search_location_code). The naming is uniform across all tools, making them predictable and easy to understand.
With 9 tools, the count is well-scoped for a BMKG (meteorology and geophysics) server. It covers earthquakes, weather forecasts, alerts, and location searches without being overwhelming, allowing for comprehensive functionality in a manageable set.
The tool set provides good coverage for BMKG data, including earthquakes, weather forecasts, and alerts with search capabilities. A minor gap is the lack of tools for historical data or more granular weather parameters, but core workflows are supported with tools like get_weather_forecast and search_location_code working together.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Geospatial MCP server for earthquake, tsunami, volcano, disaster, and FX data queries.
This MCP server provides seamless access to Malaysia's government open data, including datasets, wβ¦
Hosted MCP server for Xweather weather data: conditions, forecasts, alerts, and more.
An MCP server for weather information by @kulybaba
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceAn MCP server that provides real-time weather data, hourly forecasts, and daily summaries using the free Open-Meteo API with no API key required. It enables users to search for weather conditions by specific coordinates or city names across multiple measurement units.1MIT
- AlicenseNot gradedqualityDmaintenanceA powerful MCP server that connects AI assistants to authoritative natural hazard data sources, enabling monitoring of earthquakes, tsunamis, volcanoes, and solar events with configurable alerts and webhooks.1MIT
- AlicenseAqualityCmaintenanceMCP server wrapping the USGS Earthquake Hazards API, enabling AI assistants to search the global earthquake catalog, look up event details, count quakes, find 'Did You Feel It' reports, and read realtime feeds.5MIT
- AlicenseNot gradedqualityDmaintenanceAn MCP server providing AI-powered weather tools via Google Generative AI, enabling real-time weather data retrieval through natural language queries.MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/revomkg/mcp-bmkg'
If you have feedback or need assistance with the MCP directory API, please join our Discord server