Skip to main content
Glama
Thinaakar

Monstarx Indonesia MCP

by Thinaakar
README.md
# Monstarx Indonesia MCP (Free Sources First)

Separate Indonesia MCP service for public data that requires **no account and no API key**.

This is the Indonesia counterpart to [Monstarx Japan MCP](../JP-MCP).

## Free sources included

| Source | Agency | Auth | Tools |
|---|---|---|---|
| [BMKG prakiraan cuaca](https://data.bmkg.go.id/prakiraan-cuaca/) | Badan Meteorologi, Klimatologi, dan Geofisika | None | Weather areas/overview/warnings |
| [Open-Meteo Forecast / Air Quality / Elevation](https://open-meteo.com/) | Open-Meteo | None | 24h/4day weather, rain, temp, humidity, UV, air quality, elevation |
| [BMKG Data Gempabumi](https://data.bmkg.go.id/gempabumi/) | BMKG InaTEWS | None | Earthquake list, tsunami potential |
| [Nominatim](https://nominatim.openstreetmap.org/) | OpenStreetMap | None | Address search, geocode, reverse geocode |
| [CariKodePos](https://carikodepos.id/api/docs) | CariKodePos.ID | None | Postal code lookup |
| [Nager.Date](https://date.nager.at/) | Nager.Date | None | Public holidays |
| [Frankfurter BI provider](https://frankfurter.dev/providers/bi/) | Bank Indonesia via Frankfurter | None | USD/IDR and other FX series |
| [HDX CKAN](https://data.humdata.org/) | OCHA / HDX | None | Dataset search, metadata, datastore query |
| [OpenStreetMap Overpass](https://overpass-api.de/) | OpenStreetMap contributors | None | Tourism spots, evacuation shelters, nearby hospitals/clinics |
| [API Wilayah Indonesia](https://emsifa.github.io/api-wilayah-indonesia/) | EMSIFA / Kemendagri codes | None | Provinces, kabupaten/kota, kecamatan, desa |
| [Berita Indo API](https://berita-indo-api.vercel.app/) | Indonesian news RSS | None | CNN/CNBC/Detik/Kompas/Tempo/Republika headlines, category, search |
| [Comuline API](https://api.comuline.com/) | Community KAI Commuter mirror | None | KRL stations and schedules |
| [KPU SIREKAP storage](https://sirekap-obj-data.kpu.go.id/) | Komisi Pemilihan Umum | None | 2024 presidential archive only |
| Local NIK parser | Kemendagri digit layout | None | 16-digit NIK format decode (not Dukcapil) |
| [KBBI Open API](https://openapi.x-labs.my.id/kbbi) | Kamus Besar Bahasa Indonesia | None | Dictionary lookup |
| [MyQuran API v2](https://api.myquran.com/v2/) | Kemenag prayer times | None | City search, monthly prayer schedule |
| [EQuran.id](https://equran.id/api/v2/) | EQuran.id | None | Quran surah list and verses |
| [PetaBencana.id](https://data.petabencana.id/) | PetaBencana | None | Jakarta flood reports |
| [Logam Mulia API](https://logam-mulia-api.iamutaki.workers.dev/api/prices/anekalogam) | Community Antam listings | None | Gold sell/buyback prices |
| [MyQuran husna/hadits](https://api.myquran.com/v2/) | MyQuran | None | Asmaul Husna, hadith |
| [API Hari Libur](https://api-hari-libur.vercel.app/) | National holidays + cuti bersama | None | Cuti bersama calendar |
| [Indonesia Public Static API](https://indonesia-public-static-api.vercel.app/) | yogski | None | Volcanoes, national heroes |
| [Seme Bank ID](https://bank.thecloudalert.com/) | OJK bank directory | None | Bank search |
| [OJK Invest API](https://ojk-invest-api.vercel.app/api) | Unofficial OJK lists | None | Illegal vs legal investments |
| [Indodax Public REST](https://indodax.com/api/ticker/btcidr) | Indodax | None | Crypto tickers |
| [Doa Harian API](https://doa-doa-api-ahmadramadhan.fly.dev) | Community doa list | None | Daily doa |

## Not included (need keys / sandboxes)

BPS Web API, RajaOngkir, BinderByte, SATUSEHAT FHIR, SNAP BI / Midtrans / Xendit / Duitku, Bapanas Web API, MAGMA official REST, KAI `stations2` (POST-only booking route), Dayoff API (HTTP 402), Indiwtf (token), data.go.id CKAN (not a stable public endpoint), Pasal.id / BPJS / GoAPI (signup keys), and HTML-only portals (fuel, crime, SIPP, PLN). The GitHub dump sometimes cited as a Kemenkes faskes GeoJSON is not a live public JSON feed; nearby facilities use OpenStreetMap instead.

## Endpoints

| Path | Purpose |
|---|---|
| `GET /` | Server info + tool list |
| `GET /health` | Health check |
| `POST /mcp` | MCP Streamable HTTP |

| Environment | MCP URL |
|---|---|
| Local | `http://localhost:8787/mcp` |
| Staging | `https://id-mcp-staging.monstarxapp.com/mcp` |
| Production | `https://id-mcp.monstarxapp.com/mcp` |

```bash
npm run deploy:staging      # Worker + route id-mcp-staging.monstarxapp.com
npm run deploy:production   # Worker + route id-mcp.monstarxapp.com
npm run smoke staging       # smoke against staging /mcp
npm run smoke:local         # smoke against local wrangler dev
```

## Tools

| Tool | Purpose |
|---|---|
| `id_weather_areas` | List starter BMKG adm4 village codes |
| `id_weather_overview` | Daily / next-hours overview text |
| `id_weather_week_overview` | BMKG 3-day overview |
| `id_weather_warnings` | Severe weather slots from BMKG forecast |
| `id_weather_24h` | 24-hour hourly forecast |
| `id_weather_4day` | 4-day daily forecast |
| `id_uv_index` | Hourly UV index |
| `id_rainfall` | Hourly rainfall |
| `id_air_temperature` | Hourly air temperature |
| `id_relative_humidity` | Hourly relative humidity |
| `id_air_quality` | Hourly air quality (PM2.5 etc.) |
| `id_earthquake_list` | Recent earthquakes |
| `id_tsunami_list` | Recent tsunami-potential events |
| `id_postal_code` | Postal code → address |
| `id_public_holidays` | Indonesia public holidays |
| `id_elevation` | Elevation at lat/lon |
| `id_bi_finance` | Bank Indonesia FX via Frankfurter |
| `id_disease_reports` | Search infectious-disease open datasets |
| `id_evacuation_shelters` | Nearby evacuation / assembly points |
| `id_tourism_spots` | Nearby tourism spots (OpenStreetMap) |
| `id_address_search` | Search Indonesian addresses |
| `id_geocode` | Address → latitude/longitude |
| `id_reverse_geocode` | Latitude/longitude → address |
| `id_datasets_search` | Search HDX Indonesia open datasets |
| `id_dataset_show` | Dataset metadata + resource URLs by id/name |
| `id_dataset_metadata` | Alias of `id_dataset_show` |
| `id_dataset_query` | Query tabular datastore records by resource_id |
| `id_provinces` | List 38 provinces |
| `id_regencies` | Kabupaten/kota by province_id |
| `id_districts` | Kecamatan by regency_id |
| `id_villages` | Desa/kelurahan by district_id |
| `id_news` | Latest headlines by source |
| `id_news_category` | Headlines for a source category (CNN nasional, etc.) |
| `id_news_search` | Search headlines by title/snippet |
| `id_krl_stations` | KAI Commuter station list (Comuline) |
| `id_krl_schedule` | KRL departures for a station id (MRI, GMR, …) |
| `id_kpu_election_2024` | 2024 presidential archive (not a live election) |
| `id_parse_nik` | Decode 16-digit NIK format (not Dukcapil) |
| `id_faskes` | Nearby hospitals/clinics (OpenStreetMap) |
| `id_kbbi` | Indonesian dictionary lookup |
| `id_prayer_cities` | Search prayer-time city ids |
| `id_prayer_schedule` | Monthly sholat timetable |
| `id_quran_list` | List 114 surahs |
| `id_quran_surah` | Surah text (AR/Latin/ID) |
| `id_flood_reports` | Jakarta flood reports |
| `id_gold_price` | Antam / logam mulia sell and buyback |
| `id_asmaul_husna` | 99 names of Allah |
| `id_cuti_bersama` | National holidays + cuti bersama |
| `id_volcanoes` | Indonesian volcano catalog |
| `id_heroes` | National heroes |
| `id_banks` | Bank directory search |
| `id_ojk_invest` | Illegal / legal investment check |
| `id_indodax_ticker` | Indodax public crypto ticker |
| `id_hadith` | Hadith by narrator + number |
| `id_doa` | Daily doa (AR/Latin/ID) |

## Local development

```bash
npm install
npm run dev
```

No `.dev.vars` or API keys are required for the free sources above.

## Checks

```bash
npm run typecheck
npm test
npm run check
```

## Smoke test (local)

With `npm run dev` running:

```bash
npm run smoke:local
```

## Example curl

```bash
curl http://localhost:8787/mcp \
  -X POST \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d "{\"jsonrpc\":\"2.0\",\"method\":\"tools/call\",\"id\":1,\"params\":{\"name\":\"id_weather_overview\",\"arguments\":{\"area_code\":\"31.71.03.1001\"}}}"
```

```bash
curl http://localhost:8787/mcp \
  -X POST \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d "{\"jsonrpc\":\"2.0\",\"method\":\"tools/call\",\"id\":2,\"params\":{\"name\":\"id_reverse_geocode\",\"arguments\":{\"latitude\":-6.175392,\"longitude\":106.827153}}}"
```

```bash
curl http://localhost:8787/mcp \
  -X POST \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d "{\"jsonrpc\":\"2.0\",\"method\":\"tools/call\",\"id\":3,\"params\":{\"name\":\"id_datasets_search\",\"arguments\":{\"query\":\"earthquake\",\"rows\":3}}}"
```

## Architecture

```text
AI client
  → POST /mcp
  → id_* tools
  → BMKG / Open-Meteo / Nominatim / HDX / Wilayah / Comuline / KPU 2024 archive / news / KBBI / gold / OJK / OSM faskes (no keys)
  → normalized JSON response
```

Same Worker shell as Japan MCP. Only adapters and tools differ.