Read-only discovery for 389 Malaysian public datasets with freshness, licence, and provenance.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
π‘ Paste the JSON block into your client's configuration file under mcpServers, then restart the application.
Live dashboard: https://www.data-pulse.my
π€ AI-agent-ready β Wire DataPulse into Claude Desktop, Cursor, Cline, or any MCP-compatible client with one config block. Your agent gets
418 official Malaysian datasets β including 30 GTFS transit feeds (KTMB, Prasarana, BAS.MY) β with declared licences and an honest ten-status trust taxonomy instead of a blanket green checkmark.
When an AI quote is wrong, it is often wrong because the underlying data was stale, mis-licensed, or unverifiable β not because the model hallucinated. An official-looking page does not tell an agent when the dataset behind it last updated, who published it, whether it may legally be reused, or whether the observation can be reproduced by a second party.
DataPulse exists to make that uncertainty explicit. It is an open, read-only verification layer for Malaysian public data: it continuously probes
**418 official datasets**,and publishes β for each one β machine-readable evidence about whether the source is reachable, how fresh the content is, what licence applies, how the schema behaves, and when the observation was signed.
It does not replace the official source. It documents, on an honest and reproducible basis, what the official portal states and whether that material is current, so you know what you are reusing or citing. The verification speaks for itself: every claim here is a live, checkable artefact, not a promise.
fresh, aging, stale,
discontinued, degraded, browser-dependent, unreachable, unknown,
unknown-freshness, reference). A dataset that cannot be proven fresh is
labelled unknown-freshness β not silently treated as healthy.Three independent, checkable layers. You do not have to take DataPulse's word β you can verify each with the published public key, the public Git source record, and the public transparency log:
| Layer | What it proves | How to check it yourself |
|---|---|---|
| Signed envelope | Each per-dataset observation is Ed25519-signed over its exact content by a key in the published registry | python3 scripts/verify_external.py |
| Source of record | The served observation byte-matches the versioned Git source | python3 scripts/verify_external.py |
| Temporal witness | The health statement carries a Rekor/Sigstore public-log inclusion proof | python3 scripts/verify_external.py |
Run it yourself, from anywhere, with no checkout and no DataPulse code:
See Verify DataPulse externally for the full guide, and our methodology below for how health is judged.
A verification layer is only as honest as its method, so DataPulse deliberately tells you when it cannot be sure β a source that cannot be proven current is labelled accordingly, never silently marked healthy. That is the boundary we hold: the platform proves the integrity and timing of its observations, not that an upstream government figure is semantically true. That distinction is the whole point of an evidence layer, and we do not blur it.
Health is reported as fresh, aging, stale, discontinued, degraded,
browser-dependent, unreachable, unknown, unknown-freshness, or
reference. Unknown freshness means the URL and content shape work, but neither
a Last-Modified header nor a parseable content date proves when the data was
updated. Reference means versioned lookup data is reachable and its record count
is measured, while date-based freshness does not apply. Within the catalogue,
data_type refines the reference family without changing the status: policy-reference
rows (policy state that stays valid until superseded β BNM OPR is current while
unchanged, not stale) and reference-current rows (lookups that must still pass
freshness, such as a bank-rate table that can itself go stale) are judged by their
declared policy, while plain reference rows are static. The public
_trust_summary shows the distribution and explicitly
counts missing freshness and row-count signals.
Discontinued β The source has stopped publishing new data. The data is frozen at the last known content date. This is not a freshness failure β it's a publisher decision.
Current distribution (_trust_summary): 93 fresh Β· 106 aging Β· 190 stale Β· 1 discontinued Β· 5 browser-dependent Β· 9 unknown-freshness Β· 14 reference
Subscribe: RSS feed β get notified when dataset health changes.
β οΈ Status: active development. Dashboards and health snapshots update as probes complete. Per-dataset reports under
data/{id}.mdmay briefly lag behind the live health snapshot inhealth/latest.json(a regeneration gap that is being closed). Coverage and quality improve with each tagged release; expect rough edges. Track progress via the GitHub Releases page.
Five sources (currently 1.4% of the catalogue) require a real browser to probe because their
source pages render client-side JavaScript: eperolehan-diklankan,
doe_apims, doe_rqims, doe_mqims, and kkm_idengue.
DataPulse uses Camofox, a
self-hosted patched headless-Chromium sidecar, to probe these. The probe path
is check.sh β Camofox sidecar β DOM snapshot β
content-date extraction.
To enable browser probing:
http://localhost:9377). The probe script and the GitHub Actions
workflow pick this up from the CAMOFOX_BASE_URL environment
variable; nothing in this repo encodes a public IP.CAMOFOX_BASE_URL to that address.systemctl restart datapulse-health.timer.Without Camofox, those five datasets will sit at browser-dependent β the
honest status: DataPulse cannot probe them without a browser, so it says
so rather than failing silently. See
scripts/smoke_browser_probes.sh for
isolated smoke tests.
No reviews yet β be the first to share how this listing worked for you.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/datapulse-my)<a href="https://allmcps.com/mcp/datapulse-my"><img src="https://allmcps.com/api/badge/datapulse-my?style=directory" alt="DataPulse MY on AllMCPs" /></a>