BPS — Badan Pusat Statistik (Statistics Indonesia) WebAPI MCP. Provides access to Indonesia's official statistics: subjects, variables, dynamic table data, static tables, publications, press releases, and news.
Three tools with complete input schemas and descriptions. Tool names follow verb_noun pattern (bps_list, bps_get_data, bps_view). Descriptions are detailed (150-250 chars) and explain discovery flow. However, output schemas are NOT documented, LLMs cannot predict response structure. Parameters lack enums for constrained values (model, lang, domain). No error handling guidance. API key exposed as parameter (_apiKey) violates secret-injection pattern. Missing parameter validation rules in descriptions (e.g., domain format, page number constraints).
Get dynamic statistical table data for a BPS variable id (model=data). Returns the datacontent values keyed by composite dimension codes, plus the dimension label arrays (var, vervar/region, turvar, tahun/period, turtahun) needed to decode them. Discover the variable id first via bps_list(model="var"). domain "0000" = national.
List BPS (Statistics Indonesia) objects for a given model — the workhorse for discovery. Use model="subject" to find subject ids, then model="var" (optionally filtered by subject) to find variable ids for bps_get_data. Other models: statictable, publication, pressrelease, news, subcat/subcsa, vervar, turvar, th. domain "0000" = national; regional domains are BPS region codes. Returns the BPS envelope { status, data-availability, data: [...] }.
Fetch a single BPS object by id — full detail for one statictable, publication, pressrelease, or news item. Discover ids first via bps_list with the matching model. domain "0000" = national.
Output schemas not documented. LLMs cannot predict response structure (envelope format, data array contents, field types). Breaks downstream tool chaining and forces agents to guess field names.
API key exposed as _apiKey parameter. Credentials must use server-side injection via environment variables. Agent traces log all parameters, secrets leak into logs and prompt history.
Constrained parameters lack enums. 'model' accepts 13 values but is free-form string. 'lang' accepts 2 values but no enum. 'domain' format undocumented. LLMs will hallucinate invalid values.
No error handling guidance. Code detects Cloudflare bot protection and JSON parse errors but returns raw error strings. LLMs cannot determine if errors are retryable or require user intervention.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 60 | 2026-07-28+ | v2 |
Parameter constraints missing from descriptions. 'page' parameter has no min/max bounds. 'domain' format (4-digit code) not specified. 'var' and 'subject' discovery flow not documented.