Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

Lokal

NPM · @LOKAL-ID/MCP

Indonesia-ready agents: NIK, phone, Rupiah, regions, postal codes, holidays, and PII masking.

Available components

81 Trust /100

Last scanned (15 hours ago)

Scores higher than 65% of npm servers

Category Security

Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →

Supply Chain Security100
  • No malware found by supply-chain analysis.Pass
  • No known CVEs affecting this package version or its production dependencies.Pass
  • No install/post-install scripts declared.Pass
  • 0 of 1 dependencies flagged as unhealthy. View diagnostics → Pass
Provenance & Transparency100
  • Source repository is publicly reachable at the declared URL. View diagnostics → Pass
  • Cryptographically verified build provenance (signed, bound to lokal-id/lokal). View diagnostics → Pass
  • Clear OSI-approved license (MIT).Pass
  • Actively maintained (last published 0 days ago).Pass
  • Publishes a security disclosure policy (SECURITY.md).Pass
Schema Quality & AI Usability66
  • AI-judged instruction clarity (good).Pass
  • Context-footprint check failed: tool/resource definitions use about 2045 tokens (~127/item across 16 items; 16 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management20
  • Stability observed for 6 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage80
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 41% of tool parameters carry a description.Partial
Tool Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • We read all 16 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
  • An AI judge read all 17 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 22 Oct 26 +15
    • Tool safety: pass → unverified ▼ security
    • Stability: 0.17 → unverified ▼ security
    • Malware scan: unverified → pass ▲ security
    • Capabilities: pass → unverified ▼ functional
    • Tool coverage: 100 → unverified ▼ functional
    • First check of Schema quality: unverified functional
    • Package version: 0.4.1 → 0.5.0 functional
  • 21 Oct 26 −14
    • Malware scan: pass → unverified ▼ security
    • Package version: 0.4.0 → 0.4.1 functional
  • 19 Oct 26 +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.

  • 18 Oct 26 +26
    • Malware scan: unverified → pass ▲ security
    • Known CVEs: unverified → pass ▲ security
    • Dependency health: unverified → 1.00 ▲ functional
  • 17 Oct 26 −14
    • Malware scan: pass → unverified ▼ security
    • Known CVEs: pass → unverified ▼ security
    • Provenance: fail → pass ▲ security
    • The attested source repository moved: lokal-id/lokal security
    • Schema quality: 1508 → 2045 ▼ functional
    • Dependency health: 0.85 → unverified ▼ functional
    • Tool coverage: 23% → 41% ▲ functional
    • Package version: 0.2.2 → 0.4.0 functional
    • Package version: 0.2.2 → 0.3.0 functional
  • 16 Oct 26 67

    First indexed and scored.

Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 22 Oct 2026 · Analysed npm/@lokal-id/mcp@0.5.0

Provenance Verified

A signed build attestation was found and verified, binding this exact artifact to the source repository it claims to come from.

Result Verified
Ecosystem npm
Reason Verified
Discovered via Registry attestation endpoint
Source repo lokal-id/lokal
Certificate issuer https://token.actions.githubusercontent.com
Certificate SAN https://github.com/lokal-id/lokal/.github/workflows/release.yml@refs/tags/v0.5.0
Rekor log index 3379400427
Predicate type SLSA build provenance https://slsa.dev/provenance/v1
Subject digest sha512:42a6b4de22a207ff8659ed1c4bfa697171de5fb5362fe859457cdf95581672d5b1eb70032bb6ee42374e66db4e821d663f04faba76f2da31e5fc51d7f

Background: How many MCP packages publish verified provenance →

Dependencies 1 package
Packages resolved 1
Tree resolution Complete

Background: SBOMs and build attestations, explained →

MCP tools · 16 exposed · ~1,715 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
anonymize_file ~251

Copy SQL dumps, CSV, JSON, or log files with every piece of Indonesian personal data replaced by a realistic stand-in, for staging, seeders, tests, or sharing with a vendor: valid NIKs in the same district with the same gender and birth year, phone numbers on the same operator, names with the same casing, addresses in the same area, e-mail at example.com. The same value gets the same stand-in in every file of one call, so joins still work. Runs on the user's machine and returns only counts: you never see the data. Use it instead of reading production data, and when asked to copy production data to staging or build seeders from it.

NameTypeReqDescription
keeparray–Types to leave as they are, e.g. ["FINANCIAL"] for a credit simulation
keep_birth_dateboolean–Keep whole birth dates instead of only the year
outputstringyesOutput file, or a folder when there are several inputs
overwriteboolean––
pathsarrayyesInput files, relative to the project root
secretstring–The same secret gives the same stand-ins on every run

No output schema declared.

No examples provided.

format_rupiah ~62

Format an amount as Rupiah the Indonesian way (Rp1.500.000), short form (Rp1,5 jt), and spelled out in words (terbilang) for receipts and invoices.

NameTypeReqDescription
amountnumberyesAmount in rupiah

No output schema declared.

No examples provided.

list_holidays ~55

Libur nasional and cuti bersama for a year, from the official SKB 3 Menteri. Only years with a published decree are available; other years return an error rather than a guess.

NameTypeReqDescription
yearintegeryes–

No output schema declared.

No examples provided.

list_wilayah ~73

List the direct children of a region code — the data behind cascading address dropdowns. No code returns the 38 provinces; "32" returns the kabupaten/kota in Jawa Barat, and so on down to kelurahan/desa (which include their kode pos).

NameTypeReqDescription
parent_codestring––

No output schema declared.

No examples provided.

lookup_kode_pos ~76

Kode pos (postal codes) for Indonesian regions. Give kode_pos to find the kelurahan/desa that use it, or wilayah_code to list every kode pos inside a region (e.g. "32.76" Kota Depok).

NameTypeReqDescription
kode_posstring––
wilayah_codestring––

No output schema declared.

No examples provided.

parse_nik ~73

Validate an Indonesian NIK (16-digit national ID) by structure and decode it: province, regency, district (Kemendagri), birth date, gender. Cannot prove the NIK is registered at Dukcapil.

NameTypeReqDescription
nikstringyes16-digit NIK; spaces and dots are ignored

No output schema declared.

No examples provided.

parse_phone ~70

Normalize an Indonesian phone number (08xx, +62, 62, landline with area code) to E.164, display format, WhatsApp form, and original operator (Telkomsel, Indosat, Tri, XL, Axis, Smartfren).

NameTypeReqDescription
phonestringyes–

No output schema declared.

No examples provided.

parse_qris ~89

Read and check a QRIS payload (the text inside an Indonesian QRIS payment code): static or dynamic, merchant name and city, NMID, merchant criteria (UMI, UKE, …), amount, tip, merchant accounts, and whether the CRC checksum is intact. Errors and warnings are in Indonesian.

NameTypeReqDescription
payloadstringyesThe QRIS text, starting with 000201

No output schema declared.

No examples provided.

parse_rupiah ~81

Turn how Indonesians write money into a number: "Rp 25.000", "1,5jt", "2jtan", "50rb-an", "goceng", "2 ceban", "sejuta setengah", "dua ratus ribu". "m" means miliar.

NameTypeReqDescription
textstringyes–

No output schema declared.

No examples provided.

read_file_masked ~146

Read a text, CSV, JSON, log, .xlsx, .docx, or text-based PDF file with Indonesian personal data replaced by stable placeholders ([NIK_1], [PHONE_2], [RELIGION_1] …). The same value always gets the same placeholder in this session, so joins, counts, grouping and deduplication still work. Real values never leave the user's machine. Spreadsheets come back as CSV, one block per sheet; Word documents as their text plus each table as CSV; PDFs one block per page.

NameTypeReqDescription
max_linesinteger––
pathstringyes–
start_lineinteger––

No output schema declared.

No examples provided.

scan_pii ~197

Scan a file or directory (text, CSV, JSON, logs, SQL, .xlsx, .docx, text-based PDF; up to 100 MB each) for personal data — identifiers (NIK, KK, NPWP, phone, email, bank account, BPJS, passport, SIM, NIP, card, plate, IP, coordinates), names, addresses, birth dates, and UU PDP categories (religion, marital status, gender, nationality, health, finances, criminal records, biometrics) — without revealing it: findings show only partially masked values. Also lists files and pages it could not scan (scanned or encrypted PDFs, .xls, .doc, images, archives). Use before reading data files and before committing fixtures or seeders.

NameTypeReqDescription
min_confidencestring––
pathstring–File or directory, relative to the project root
typesarray––

No output schema declared.

No examples provided.

search_wilayah ~129

Find official Kemendagri regions by name (provinsi, kabupaten/kota, kecamatan, kelurahan/desa) with their codes. Use for address forms, normalizing user-typed locations, and seed data instead of inventing region names.

NameTypeReqDescription
level––1 provinsi, 2 kabupaten/kota, 3 kecamatan, 4 kelurahan/desa
limitinteger––
querystringyes–
withinstring–Only search inside this region code, e.g. "32" for Jawa Barat

No output schema declared.

No examples provided.

set_qris_amount ~126

Turn a QRIS payload into a dynamic one for an amount in Rupiah, optionally with a fixed or percentage fee, and recompute the CRC. The merchant account is unchanged. Returns the new payload, ready to render as a QR code.

NameTypeReqDescription
amountnumber|stringyesRupiah, at most 2 decimals, e.g. 25000
fee_fixednumber|string–A fixed fee in Rupiah on top of the amount
fee_percentnumber|string–A percentage fee on top of the amount
payloadstringyes–

No output schema declared.

No examples provided.

validate_npwp ~85

Validate the format of an Indonesian tax ID (NPWP): legacy 15-digit (XX.XXX.XXX.X-XXX.XXX), 16-digit, or NIK used as NPWP for individuals. Returns the 16-digit form DJP uses today. Format only: it does not check the DJP check digit or registration.

NameTypeReqDescription
npwpstringyes–

No output schema declared.

No examples provided.

working_days ~114

Working-day math with Indonesian holidays: is a date a working day, the date N working days after a date (SLA, delivery estimates), or the number of working days between two dates (inclusive). Cuti bersama counts as a day off unless cuti_bersama is false (private companies may work on them).

NameTypeReqDescription
addinteger–Working days to add (negative to go back)
cuti_bersamaboolean––
fromstringyes–
tostring––

No output schema declared.

No examples provided.

write_file_unmasked ~88

Write content to a file after replacing Samaran placeholders ([NIK_1], [PHONE_2] …) from this session with the real values, locally. Use this to produce output (cleaned CSV, reports, migrations) from data you read with read_file_masked.

NameTypeReqDescription
contentstringyes–
overwriteboolean––
pathstringyes–

No output schema declared.

No examples provided.

Install

How do I install the Lokal MCP server?

Lokal runs locally as an npm package, launched with npx -y @lokal-id/mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

npm · @lokal-id/mcp

# add to Claude Code
claude mcp add lokal-id-lokal -- npx -y @lokal-id/mcp
Common questions

What is the Lokal MCP server?

Lokal is an MCP server listed in the public MCP registry as io.github.lokal-id/lokal. Indonesia-ready agents: NIK, phone, Rupiah, regions, postal codes, holidays, and PII masking. This page covers its npm package (@lokal-id/mcp).

Is the Lokal MCP server safe to use?

Lokal scores 81 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 22 October 2026. It declares no install or post-install scripts. Its build provenance is signed and verified. 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 Lokal MCP server expose?

Lokal exposes 16 tools: parse_nik, validate_npwp, parse_qris, set_qris_amount, parse_phone, and 11 more. Their descriptions and schemas cost roughly 1,715 tokens of context every time the server is loaded.

Is the Lokal MCP server still maintained?

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

What licence is the Lokal MCP server under?

Lokal declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.