# Refnusa (remote · refnusa.dev)

Indonesia reference data: holidays, wages, regions, postal codes, tax, food prices, KBLI, BPS stats

- Trust score: 70/100 (medium)
- Change this week: +3
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-11-05

## Components

- remote · `refnusa.dev`: 70/100 (this document), [markdown](https://verifymcp.io/servers/dev-refnusa-refnusa/refnusa.md), [page](https://verifymcp.io/servers/dev-refnusa-refnusa/refnusa)

## Channel facts

- Endpoint: `https://refnusa.dev/mcp`
- Transports: `streamable-http`
- Auth: `none`
- Version: `0.2.0`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-11-05.

- **Endpoint Security**: 57/100
  - The endpoint's TLS certificate is valid, in date, and uses a strong key.
  - Authorisation not fully verified: no authorisation is required to call this server, and 33 tool(s) never declared a destructiveHint. The MCP spec treats an absent hint as destructive by default, so we cannot call this surface safe.
  - HTTPS is enforced; there's no plaintext access path.
  - HSTS check failed: the Strict-Transport-Security header is absent.
  - DNSSEC check failed: this domain isn't protected by DNSSEC.
- **Transport & Reachability**: 100/100
  - Verified streamable-http transport via a live MCP handshake.
- **Schema Quality & AI Usability**: 73/100
  - AI-judged instruction clarity (good).
  - Context-footprint check failed: tool/resource definitions use about 3619 tokens (~109/item across 33 items; 33 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 57/100
  - Stability observed for 17 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
- **Tool Safety**: 100/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - We read all 33 captured tool definition(s), and no name or description among them implies an irreversible operation.
  - An AI judge read all 34 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 60/100
  - Spec-recency check failed: implements MCP spec 2025-06-18; the latest is 2026-07-28.

## Install

### How do I install the Refnusa MCP server?

Refnusa is a hosted endpoint at https://refnusa.dev/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

### Claude

```bash
claude mcp add --transport http dev-refnusa-refnusa 'https://refnusa.dev/mcp'
```

### Cursor

```json
{
  "mcpServers": {
    "dev-refnusa-refnusa": {
      "url": "https://refnusa.dev/mcp"
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "dev-refnusa-refnusa": {
      "type": "http",
      "url": "https://refnusa.dev/mcp"
    }
  }
}
```

### Codex

```toml
[mcp_servers.dev-refnusa-refnusa]
url = "https://refnusa.dev/mcp"
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "dev-refnusa-refnusa": {
      "type": "remote",
      "url": "https://refnusa.dev/mcp",
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add dev-refnusa-refnusa --url 'https://refnusa.dev/mcp' --transport streamable-http
```

### Hermes

```yaml
mcp_servers:
  dev-refnusa-refnusa:
    url: "https://refnusa.dev/mcp"
```

### Netclaw

```json
{
  "McpServers": {
    "dev-refnusa-refnusa": {
      "Transport": "http",
      "Url": "https://refnusa.dev/mcp"
    }
  }
}
```

### Vellum

```bash
assistant mcp add dev-refnusa-refnusa -t streamable-http -u 'https://refnusa.dev/mcp'
```

### Other

```json
{
  "mcpServers": {
    "dev-refnusa-refnusa": {
      "type": "http",
      "url": "https://refnusa.dev/mcp"
    }
  }
}
```

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-11-04 (score 70, +1)

No change was recorded against any check on this day. Stability & Change Management went from 50 to 53. That category is still filling its 30-day observation window: 15 days of observed history at the previous scan, 16 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-11-02 (score 69, +1)

No change was recorded against any check on this day. Stability & Change Management went from 43 to 47. That category is still filling its 30-day observation window: 13 days of observed history at the previous scan, 14 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-30 (score 68, +1)

No change was recorded against any check on this day. Stability & Change Management went from 33 to 37. That category is still filling its 30-day observation window: 10 days of observed history at the previous scan, 11 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-28 (score 67, +1)

No change was recorded against any check on this day. Stability & Change Management went from 27 to 30. That category is still filling its 30-day observation window: 8 days of observed history at the previous scan, 9 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-26 (score 66, +1)

No change was recorded against any check on this day. Stability & Change Management went from 20 to 23. That category is still filling its 30-day observation window: 6 days of observed history at the previous scan, 7 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-24 (score 65, +1)

No change was recorded against any check on this day. Stability & Change Management went from 13 to 17. That category is still filling its 30-day observation window: 4 days of observed history at the previous scan, 5 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-22 (score 64, +1)

No change was recorded against any check on this day. Stability & Change Management went from 7 to 10. That category is still filling its 30-day observation window: 2 days of observed history at the previous scan, 3 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-21 (score 63, 0)

- [security] The server rewrote its instructions, which are the text every model session reads
- [security] Tool “get_het_prices” rewrote its description, which is the text the model reads
- [security] Tool “get_stat_series” rewrote its description, which is the text the model reads
- [security] Tool “get_umk_history” rewrote its description, which is the text the model reads
- [security] Tool “list_stat_indicators” rewrote its description, which is the text the model reads
- [functional] New tool “get_fao_indonesia”

## MCP tools (33)

### `list_datasets` (~65 tokens)

Coverage and status of every dataset: status, row count, source instrument, effective date, publisher, official source URL, last check, data period, cadence, maximum age, next expected update, and the catalogue page. The licence, caveat and fallback fields are Indonesian text.

### `get_holidays` (~54 tokens)

Public holidays (libur nasional) and joint leave days (cuti bersama) for one year, from that year's SKB 3 Menteri decree.

Input parameters:

- `year` (integer, required): Calendar year, for example 2026

### `check_holiday` (~52 tokens)

Whether one date is a public holiday or cuti bersama, with the decree it was checked against. Weekends count only when the decree names them.

Input parameters:

- `date` (string, required): Date in YYYY-MM-DD form

### `get_ump` (~130 tokens)

Provincial minimum wage (UMP) for one year (default: the newest loaded), all provinces or one province. For 2026, 29 provinces cite the governor decree and 9 the BPS table; 1997 to 2025 rows cite the BPS yearly table (2017 and Jawa Barat 2016: BPS Statistik Indonesia 2018, Tabel 3.2.23).

Input parameters:

- `province_code` (string): Kemendagri province code, optional
- `year` (integer): Calendar year, for example 2026; omit for the newest year loaded

### `get_ump_history` (~99 tokens)

Every loaded year of the provincial minimum wage (UMP) for one province, oldest first, each row with its source (governor decree or BPS table) and URL. 1997 to 2026. Without province_code: the same rows for all provinces in one response, ordered by province then year (for charts and bulk analysis).

Input parameters:

- `province_code` (string): Kemendagri province code; omit for all provinces

### `get_umk` (~140 tokens)

Regency or city minimum wage (UMK) for one year. With regency_code: that kabupaten/kota (default year: its newest). Without it: every kabupaten/kota with a confirmed figure for the year (default: the newest loaded), in one response, optionally limited to one province_code.

Input parameters:

- `province_code` (string): Kemendagri province code; used only when regency_code is omitted
- `regency_code` (string): Kemendagri kabupaten/kota code; omit to list all
- `year` (integer): Calendar year, for example 2026; omit for the newest year loaded

### `get_umk_history` (~373 tokens)

Every loaded year of the regency or city minimum wage (UMK) for one kabupaten/kota, oldest first, each row with its source instrument and URL: a governor decree, or for some regions the open-data portal of the regional government (source_instrument then starts with Portal and notes that the dataset has no decree number). Covers Jawa Barat 2023 to 2026, Jawa Tengah 2022 to 2026, Jawa Timur 2024 to 2026, a few Riau and Bali regions for 2024, Kalimantan Barat (2019, 2022, 2025), Banten (2020 to 2024), seven Sumatera Selatan regions (2024), five Kalimantan Timur regions (Berau, Kutai Barat, Kutai Timur, Penajam Paser Utara, Samarinda), six Magelang-area regions 2014 to 2020, Kota Tegal 2021 and Rembang (2010, 2019). Where no decree or portal row exists, BPS provincial tables fill in (source_instrument then starts with BPS table, one amount per year, no decree number or effective date): Sumatera Utara 2015 to 2024, Kepulauan Riau 2016 to 2025, Jawa Tengah 2017 to 2021, Banten 2014 to 2019, Nusa Tenggara Timur 2016 to 2025 (not 2019), Lampung 2017 to 2025, DI Yogyakarta 2016 to 2025, plus UMK 2026 for Nusa Tenggara Timur and 12 Lampung regions.

Input parameters:

- `regency_code` (string, required): Kemendagri kabupaten/kota code

### `get_wilayah` (~74 tokens)

Administrative regions: the 38 provinces, the children of one parent code, or one region by code.

Input parameters:

- `code` (string): Return this one region
- `level` (string): Level to list; anything below provinsi needs parent_code
- `parent_code` (string): List the children of this code

### `get_postal_code` (~38 tokens)

Postal codes of one kelurahan or desa by its wilayah code.

Input parameters:

- `wilayah_code` (string, required): Kemendagri wilayah code

### `reverse_postal_code` (~34 tokens)

Regions (kelurahan or desa) that carry one postal code.

Input parameters:

- `postal_code` (string, required): Postal code

### `get_pph21_ter` (~74 tokens)

PPh 21 effective average rate (TER) bracket for a monthly gross income and TER category A, B or C, per PP 58/2023.

Input parameters:

- `category` (string, required): TER category A, B or C
- `income_idr` (integer, required): Monthly gross income in rupiah

### `get_ptkp` (~43 tokens)

Annual non-taxable income (PTKP) for a taxpayer status such as TK/0 or K/1.

Input parameters:

- `status` (string, required): PTKP status code

### `get_prayer_times` (~81 tokens)

Prayer times for one kabupaten/kota and date, computed by a documented hisab method; not an official Kemenag feed.

Input parameters:

- `city_code` (string, required): Kemendagri kabupaten/kota code; a kecamatan or kelurahan code falls back to its parent
- `date` (string, required): Date in YYYY-MM-DD form

### `get_bpjs_rates` (~125 tokens)

BPJS contribution rates as a percent of monthly wage, per program (JHT, JP, JKK, JKM, JKP, JKN), with the decree behind each rate. JKK serves the PP 6/2025 bands; the 2026 JP wage cap is Rp10.547.400 (the BPJS article 18913 says Rp10.547.000, see the row note).

Input parameters:

- `program` (string): Program; omit for all
- `status` (string): current (default) or superseded rows, or all

### `get_bank_codes` (~81 tokens)

Three-digit bank codes (Sandi Bank) of the commercial and sharia banks on the OJK head-office list of June 2026, by code or by part of the bank name; no argument lists all 105.

Input parameters:

- `code` (string): Sandi Bank, optional
- `name` (string): Part of the bank name, optional

### `get_fuel_prices` (~89 tokens)

Retail price per litre of the subsidised and special-assignment fuels (Solar, minyak tanah, RON 90) from Kepmen ESDM 218.K/MG.01/MEM.M/2022. Non-subsidised fuels are not included.

Input parameters:

- `fuel` (string): kerosene, gas_oil (Solar) or ron90; omit for all three

### `list_food_commodities` (~79 tokens)

The 10 staple food groups and their 21 items that PIHPS Nasional (Bank Indonesia) reports per province, with code, Indonesian and English name, unit (Rp/kg), the markets (tradisional, modern) that have a price on the newest day, and for the groups the first and last month of the monthly series.

### `get_food_prices_latest` (~247 tokens)

Latest PIHPS Nasional (Bank Indonesia) price of a staple food per province, in Rp/kg, on the newest observation day, plus PIHPS national averages. Covers the 10 groups and 21 items. Without market you get one row per province and commodity: the traditional-market (tradisional) price when it exists, otherwise the modern-market price; each row names its market and day. Traditional markets report for fewer provinces than modern ones. Pass market for one market only. Filter by commodity, province and market. With month (YYYY-MM): the monthly series price instead, for the 10 groups in traditional markets only.

Input parameters:

- `commodity` (string): Commodity code from list_food_commodities (a group or an item), optional; with month, groups only
- `market` (string): tradisional or modern; omit for one row per province and commodity, tradisional first then modern (with month: tradisional only)
- `month` (string): Return this month instead of the newest on file, optional
- `province_code` (string): Kemendagri province code, optional (Papua and Papua Barat only: 91, 92)

### `get_food_price_series` (~115 tokens)

Monthly PIHPS Nasional (Bank Indonesia) price series, in Rp/kg, for one province and one staple food from May 2017; each point is the price on the first day of the month with data (observed_on). Optional from and to months.

Input parameters:

- `commodity` (string, required): Commodity code from list_food_commodities
- `from` (string): First month, optional
- `province_code` (string, required): Kemendagri province code
- `to` (string): Last month, optional

### `get_passport_fees` (~93 tokens)

Imigrasi PNBP fees from PP 45/2024: passport (biasa 5 and 10 years, electronic and non-electronic, SPLP, same-day service) and visa kunjungan (single and multiple trip). Government fee only.

Input parameters:

- `category` (string): passport or visa; omit for all
- `fee_code` (string): One fee by code, optional

### `search_kbli` (~128 tokens)

Search the KBLI 2020 business-field classification (Peraturan BPS 2/2020) by part of the title or a code prefix, optionally one of its five levels (kategori, golongan_pokok, golongan, subgolongan, kelompok). Returns code, level, parent and title; fetch one code for its description.

Input parameters:

- `level` (string): Restrict to one level, optional
- `limit` (integer): Maximum items returned, default 50
- `q` (string): Part of the title, or the start of a code, optional

### `get_kbli` (~63 tokens)

One KBLI 2020 entry by code (a letter A to U, or 2, 3, 4 or 5 digits) with its description, its ancestors up to the kategori and its children.

Input parameters:

- `code` (string, required): KBLI code

### `get_tax_rates` (~118 tokens)

Tax and duty rates, each with its decree: PPN 12% and the 11/12 DPP (PMK 131/2024), Bea Meterai tariff and threshold (UU 10/2020), and the domestic cukai hasil tembakau table (PMK 97/2024 Lampiran I).

Input parameters:

- `category` (string): ppn, bea_meterai or cukai_hasil_tembakau; omit for all
- `rate_code` (string): One rate by code, optional

### `get_ojol_tariffs` (~85 tokens)

Ride-hailing motorbike fare limits per zone (per-km lower and upper bound, minimum fare for the first 4 km) from KP 667/2022. A 2026 decision may supersede it; see the dataset note.

Input parameters:

- `zone_code` (string): zona_1, zona_2 or zona_3; omit for all

### `get_zakat` (~82 tokens)

BAZNAS RI 2026 zakat figures: fitrah (SK 14/2026) and the nisab and rate of zakat penghasilan dan jasa (SK 15/2026).

Input parameters:

- `category` (string): fitrah or penghasilan; omit for all
- `zakat_code` (string): One figure by code, optional

### `get_het_prices` (~95 tokens)

Harga eceran tertinggi: beras medium and premium by wilayah (Keputusan Kepala Bapanas 299/2025, 22 Aug 2025) and LPG 3 kg in Jawa Timur (Kepgub 801/2024).

Input parameters:

- `commodity` (string): Commodity; omit for all
- `region` (string): Part of the region name, for example Kalimantan, optional

### `list_stat_indicators` (~133 tokens)

Regional statistics from BPS tables: the indicator ids with unit, level (province or kabupaten/kota), every period available, source table and caveats. Includes unemployment (TPT), poverty and poverty lines, HDI (IPM), wages, population, GRDP per capita, life expectancy and monthly inflation and CPI (inflation_mom, inflation_yoy, inflation_ytd, cpi for provinces; inflation_yoy_regency for CPI cities; periods YYYY-MM from 2024-01, base 2022=100). Start here, then call get_stat_values or get_stat_series.

### `get_stat_values` (~92 tokens)

One BPS indicator for one period across all regions in a single call (for a map), plus the national figure. Period is YYYY or YYYY-MM as listed by list_stat_indicators; omit it for the latest. A bare year on a semester indicator resolves to the latest period in that year.

Input parameters:

- `indicator` (string, required): Indicator id
- `period` (string): Period, optional (default: latest)

### `get_stat_series` (~88 tokens)

The time series of one BPS indicator for one region: a province (2 digits), a kabupaten/kota (5 characters like 32.73, hdi_regency and inflation_yoy_regency only) or 00 for Indonesia.

Input parameters:

- `indicator` (string, required): Indicator id
- `region_code` (string, required): Kemendagri region code, or 00 for Indonesia

### `get_fao_indonesia` (~107 tokens)

FAOSTAT series for Indonesia: undernourishment, food insecurity, dietary energy and protein supply, and the supply of main staples (rice, wheat, maize, cassava, sugar, vegetable oils, soyabeans, poultry, eggs, fish). FAO methodology and population estimates, not comparable with BPS figures. Call without series for the list, then with series for the values.

Input parameters:

- `series` (string): Series id; omit for the list of series

### `validate_nik` (~57 tokens)

Checks the structure of a 16-digit NIK and looks up its region digits in the wilayah table. Send the NIK in the JSON body; it is never logged.

Input parameters:

- `nik` (string, required): The 16-digit NIK

### `validate_plate` (~45 tokens)

Checks the format of an Indonesian vehicle plate and names the region of its prefix when the prefix table is loaded.

Input parameters:

- `plate` (string, required): Plate such as B 1234 XYZ

### `calculate_net_salary` (~299 tokens)

Estimated take-home pay from a monthly gross salary: worker BPJS deductions (JHT, JP, JKN), PPh 21 by the PP 58/2023 TER table or the December annual recalculation, and the employer's own contributions, each line with its decree. Give gross, or regency_code to use that kabupaten/kota UMK. An estimate; the employer payslip decides.

Input parameters:

- `gross` (integer): Monthly gross salary in rupiah; omit when regency_code is given
- `jkk_band` (string): JKK risk band of the employer; default sangat_rendah (the lowest band, 0,24%)
- `jkn` (string): Whether BPJS Kesehatan applies, default true
- `jkn_employer_taxable` (string): Count the employer JKN premium as taxable income, default true
- `jp` (string): Whether Jaminan Pensiun applies, default true
- `jp_cap` (integer): JP wage cap in rupiah; default is the stored 2026 cap (Rp10.547.400), give it to use another
- `month` (string): monthly (TER, January to November) or december (annual recalculation), default monthly
- `ptkp` (string, required): PTKP status
- `regency_code` (string): Use this kabupaten/kota newest UMK as the gross, optional

## Diagnostics

Captured diagnostic sections: TLS, DNSSEC, Authorisation, Transports. The full working is on the page: https://verifymcp.io/servers/dev-refnusa-refnusa/refnusa#diagnostics

## Score history

- 2026-11-05: 70
- 2026-11-04: 70
- 2026-11-03: 69
- 2026-11-02: 69
- 2026-11-01: 68
- 2026-10-31: 68
- 2026-10-30: 68
- 2026-10-29: 67
- 2026-10-28: 67
- 2026-10-27: 66
- 2026-10-26: 66
- 2026-10-25: 65
- 2026-10-24: 65
- 2026-10-23: 64
- 2026-10-22: 64
- 2026-10-21: 63
- 2026-10-20: 63
- 2026-10-19: 63

## Common questions

### What is the Refnusa MCP server?

Refnusa is an MCP server listed in the public MCP registry as dev.refnusa/refnusa. Indonesia reference data: holidays, wages, regions, postal codes, tax, food prices, KBLI, BPS stats. This page covers its hosted endpoint (https://refnusa.dev/mcp).

### Is the Refnusa MCP server safe to use?

Refnusa scores 70 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

### What tools does the Refnusa MCP server expose?

Refnusa exposes 33 tools: list_datasets, get_holidays, check_holiday, get_ump, get_ump_history, and 28 more. Their descriptions and schemas cost roughly 3,478 tokens of context every time the server is loaded.

### Does the Refnusa MCP server require authentication?

No. We connected to Refnusa without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.

### Is the Refnusa MCP server still maintained?

Refnusa is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

### What did VerifyMCP test on the Refnusa MCP server?

VerifyMCP ran 12 checks on Refnusa, covering TLS certificate, HTTPS, HSTS header, DNSSEC and 8 more. One item could not be completed, a gap on our side rather than a finding about Refnusa: Authorization. Supply Chain Security and Provenance & Transparency do not apply to a hosted endpoint, so they were not tested. The score does not measure everything, and the scoring documentation lists what it leaves out.

## Links

- Remote endpoint: https://refnusa.dev/mcp
- Website: https://refnusa.dev/
- Changelog RSS feed: https://verifymcp.io/servers/dev-refnusa-refnusa/refnusa.xml
- Changelog JSON feed: https://verifymcp.io/servers/dev-refnusa-refnusa/refnusa/changelog.json
- Trust report (JSON): https://verifymcp.io/servers/dev-refnusa-refnusa/refnusa.json
- HTML version of this page: https://verifymcp.io/servers/dev-refnusa-refnusa/refnusa
