关于 DataPulse
DataPulse 是面向马来西亚公共数据的只读核验层,服务于 AI 开发者、研究者、记者及合规团队。它追踪数据新鲜度、许可、结构变化和来源,并发布可独立验证的签名观测记录。
主要功能
- 01收录 440 个公共数据集
- 02采用十种明确的健康状态
- 03提供新鲜度、许可和来源信息
- 04签名观测记录及公开日志证据
- 05只读数据集发现与核查
适用场景
- 01引用数据前检查其新鲜度
- 02核查马来西亚数据的再利用条款
- 03追踪分析所用数据源的变化
- 04保存可验证的数据源检查记录
MCP 相关
其公开且无需认证的 MCP 端点提供 19 个只读工具,用于搜索和核查 440 个数据集目录,涵盖新鲜度、许可、结构、证据及来源查询。
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
https://mcp.data-pulse.my/mcpclaude mcp add --transport http r3dz4r-datapulse-my https://mcp.data-pulse.my/mcp{"mcpServers":{"r3dz4r-datapulse-my":{"type":"http","url":"https://mcp.data-pulse.my/mcp"}}}在 Cursor 中打开{"servers":{"r3dz4r-datapulse-my":{"type":"http","url":"https://mcp.data-pulse.my/mcp"}}}在 VS Code 中打开{"mcpServers":{"r3dz4r-datapulse-my":{"type":"http","url":"https://mcp.data-pulse.my/mcp"}}}{"mcpServers":{"r3dz4r-datapulse-my":{"serverUrl":"https://mcp.data-pulse.my/mcp"}}}命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。
工具
19| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| limit | integer | 否 | 返回的最高排名发现匹配项的最大数量,例如 10。省略时默认为 10,且不会改变排名。 |
| query | string | 是 | 用于为发现候选项排序的主题或任务描述,例如“马来西亚公共数据通胀”;使用返回的 id 调用 get_dataset。 |
| source | any | 否 | 可选的发布方/来源子字符串筛选条件,在排序前应用,例如“OpenDOSM”;省略则搜索所有来源。 |
| licence | any | 否 | 可选的精确许可名称或支持的别名筛选条件,在排序前应用,例如“CC BY 4.0”;省略则搜索所有许可。 |
详细介绍
DataPulse
实时仪表板: https://www.data-pulse.my
🤖 已为 AI Agent 做好接入准备 — 只需一段配置,即可将 DataPulse 接入 Claude Desktop、Cursor、Cline 或任何兼容 MCP 的客户端。你的 Agent 可访问
440 个马来西亚官方数据集——包括 30 个 GTFS 公共交通数据源(KTMB、 Prasarana、BAS.MY)——每个数据集均注明许可,并采用坦诚的十级状态分类, 而不是一概标为绿色勾号。
认识 DataPulse
AI 给出的数据引用有误时,问题往往出在底层数据已过时、许可不明确或无法核验,而非模型产生了幻觉。一个看似官方的页面,无法告诉 Agent 其背后的数据集最近何时更新、由谁发布、是否可合法重复使用,或第二方能否复现该观测结果。
DataPulse 是一个面向马来西亚公共数据的开放、只读验证层。它持续监测马来西亚官方开放数据集——这些数据由 data.gov.my、Bank Negara Malaysia、DOSM、Department of Environment、Ministry of Health、KPDN 和 MET Malaysia 发布——并为每个数据集提供机器可读的证据:来源是否可访问、内容的新鲜度、适用的许可、数据结构或记录数量是否发生变化,以及观测何时签署。每个数据集都带有十种明确状态之一,而非一概标为绿色勾号;第三方还可以核验每条已发布的观测结果:回执经过签名,签名密钥及其有效期和轮换历史均已公开,并且无需安装 DataPulse,即可通过单文件验证器复现核验。DataPulse 不会取代官方来源,也不会认证发布方数据的实质正确性——它让来源状况可供观察,并让观测结果可复现。
440 个官方数据集
简单来说,我们做什么
- 我们监测数据来源。 定时探测会按照各数据集声明的更新频率重新访问,并记录实际发现的情况——可访问性、真实的新鲜度信号、架构形态、记录数量及数据收集方面的特殊情况。
- 我们直截了当地说明情况。 每个数据集都标注十种真实的健康状态之一(
fresh、aging、stale、discontinued、degraded、browser-dependent、unreachable、unknown、unknown-freshness、reference),而不是一概标为绿色勾号。无法证明为最新的数据集会标注为unknown-freshness,不会被悄悄视为健康。 - 我们发布证据,而不只是声明。 每条带日期的观测记录都经过签名,并写入不可变的公开日志,因此你可以核验 DataPulse 何时观测了来源,以及记录是否被篡改。
- 我们优先采用机器可读形式。 所有数据集都可通过一个索引发现,并可通过只读 MCP 服务查询,因此 Agent 可以获得与谨慎的人类审核者相同的新鲜度、许可和来源信息。
服务对象
- AI 构建者和 Agent 开发者,希望模型在引用马来西亚数据前,先检查其时效性和许可——无需构建定制集成,也无需信任抓取流程。
- 研究人员、分析师和记者,需要将课程作业、论文、仪表板或已发布的数据图表建立在其时效性和许可均可实际核验的数据之上。
- 合规与监管监测团队,必须保留防篡改的记录,证明某项官方数据在用于产品或公开声明之前,已在已知时间完成核查。
- 公民科技人员和公务人员,希望透明、可复现地了解公共数据的可发现性,以及其描述的可靠程度。
为什么你可以信任这项核验
三个相互独立且可核查的层面。你不必只听信 DataPulse 的说法——可以使用已发布的公钥、公开的 Git 源记录和公开的透明度日志,逐一核验:
| 层面 | 证明内容 | 如何自行核查 |
|---|---|---|
| 签名信封 | 每项数据集观测都由已发布注册表中的密钥,对其确切内容进行 Ed25519 签名 | python3 scripts/verify_external.py |
| 记录源 | 所提供的观测与版本化 Git 源逐字节匹配 | python3 scripts/verify_external.py |
| 时间见证 | 健康状态声明附带 Rekor/Sigstore 公共日志的包含证明 | python3 scripts/verify_external.py |
无需克隆代码库,也无需使用任何 DataPulse 代码,你可以从任何位置自行运行:
curl -fsSLO https://raw.githubusercontent.com/r3dz4r/datapulse-my/main/scripts/verify_external.py
python3 verify_external.py
完整指南请参阅在外部核验 DataPulse;下文的我们的方法介绍了健康状态的判定方式。
核验观测回执
scripts/observation_verify.py 可从本地文件核验回执身份、签名、密钥注册表有效性,以及任何可用的链路关联。它在任何模式下都不会发起网络请求。额外提供 --health <artifact>,还会重新计算规范化制品摘要,并重新推导其数据集和时效状态声明:只有 health_binding: checked 和 artifact_claims: verified 才能证明这些声明。若未提供 --health,报告会明确显示 artifact_claims: NOT verified;当这种不完整结果必须判定为失败时,请使用 --require-health-binding。
对于带有已签名 <commit>@<path> 制品定位符的回执,传入 --repo owner/name 可打印对应的不可变 raw-GitHub URL。代码库由你提供,程序不会猜测或硬编码。请另行获取该 URL,然后将保存的文件传给 --health;在本地摘要和声明核验成功之前,该 URL 仅用于发现,不构成证明。
核验层的可信度取决于其方法,因此 DataPulse 会有意告知你何时无法确定——无法证明为最新的数据源会被相应标记,绝不会在未告知的情况下被标记为健康。这就是我们坚守的边界:平台证明的是其观测的完整性和时间,而不是上游政府数据在语义上的真实性。这一区别正是证据层的核心,我们不会将两者混为一谈。
数据集健康状况
健康状态包括 fresh、aging、stale、discontinued、degraded、
browser-dependent、unreachable、unknown、unknown-freshness 或
reference。新鲜度未知表示 URL 和内容格式均可正常使用,但既没有
Last-Modified 标头,也没有可解析的内容日期能证明数据何时更新。参考数据表示有版本的数据可供查询,且已测量记录数,但不适用基于日期的新鲜度判断。在目录中,data_type 用于细分参考数据类别,但不会改变状态:policy-reference
行(在被取代前始终有效的政策状态——BNM OPR 在未变更时仍是当前状态,不会过期)和 reference-current 行(仍须通过新鲜度检查的查询数据,例如可能本身会过期的银行利率表)按照各自声明的政策进行评估,而普通的 reference 行则是静态数据。公开的
_trust_summary 会显示分布,并明确统计缺失的新鲜度和行数信号。
已停止更新 — 来源已停止发布新数据。数据冻结在最后已知的内容日期。这并非新鲜度检查失败,而是发布方的决定。
当前分布(_trust_summary):143 新鲜 · 130 临近过期 · 120 已过期 · 1 已停止更新 · 1 已降级 · 3 无法访问 · 6 新鲜度未知 · 36 参考数据
订阅: RSS 订阅源 — 当数据集健康状态发生变化时接收通知。
依赖浏览器的数据集
当前健康状况摘要显示,**0 个依赖浏览器的数据源(占目录的 0.0%)**需要使用真实浏览器进行探测,因为其来源页面通过客户端 JavaScript 渲染。
DataPulse 使用 Camofox,这是一个
可自托管、经过修补的无头 Chromium 辅助服务,用于探测这些数据源。探测路径为
check.sh → Camofox 辅助服务 → DOM 快照 →
内容日期提取。
启用浏览器探测:
- 在可访问的地址上运行 Camofox Docker 辅助服务(默认地址为
http://localhost:9377)。探测脚本和 GitHub Actions 工作流会通过CAMOFOX_BASE_URL环境 变量获取该地址;此仓库中没有编码任何公共 IP。 - 将
CAMOFOX_BASE_URL设置为该地址。 - 使用
systemctl restart datapulse-health.timer重启定时器。
如果没有 Camofox,这些数据集将保持 browser-dependent 状态——这是
如实的状态:DataPulse 无法在没有浏览器的情况下探测它们,因此会明确说明,
而不会静默失败。请参阅
scripts/smoke_browser_probes.sh 进行
隔离的冒烟测试。
方法论
| 主题 | DataPulse 的立场 |
|---|---|
| 健康状态 | 采用十种状态分类,根据可访问性和可靠的新鲜度信号(Last-Modified、可解析的内容日期或声明的政策)进行判断——绝不伪造绿色勾选标记。停止发布的系列属于 discontinued(发布方决定,数据已冻结),而非新鲜度问题。 |
| 许可 | 每个数据集都以机器可读的方式声明其许可。CC0-1.0(15);Creative Commons Attribution 4.0(285);Department of Statistics Malaysia Open Data License(7);MBPP Government Open Data Terms(需署名)(1);MIT License(8);Open Government Licence (Malaysia)(115);未声明发布方许可;适用门户免责声明(4);Singapore Open Data Licence v1.0(需署名)(5)。第二方可通过 datapulse.json → .datasets[].licence 复现此信息。 |
| 新鲜度频率 | 每个数据集都按自身的分级计划进行探测(5 分钟计时器,感知更新频率)——例如 daily 参考资料、weekly 燃油价格、monthly 调查等。始终提供便于人阅读的 steward,以及用于标明发布方来源的稳定 custodian ID。 |
| 来源溯源 | 每个数据集都有稳定的 custodian;每次观测均有签名的探测证明 |
| 观测声明 | 平台证明官方来源在已知时间点被观测到的状态——不声称上游数据在语义上真实 |
| 只读且合法 | 仅使用公开可访问且经过身份验证的来源——绝不绕过验证;限制速率;向来源表明自身身份 |
| 验证 | 最近 30 天的记录由 Rekor 见证;签名信封 + Git 源记录 + 公开日志收录,任何人均可检查 |
连接 AI Agent
DataPulse 提供面向 AI、只读的 MCP 服务,方便 Agent 原生查询目录。 它提供与人工审核者相同的新鲜度、许可、架构漂移和来源溯源证据。
-
端点:
https://mcp.data-pulse.my/mcp(Streamable HTTP,无需身份验证) 由 mcpgrade 评测 — 使用bash scripts/audit_mcpgrade.sh重放(固定版本,写入artifacts/mcpgrade/)。规范工具数量记录在mcp.json中。 -
19 个工具:
search_datasets、get_dataset、get_data_passport、find_stale、find_anomalies、find_deteriorating、find_recovering、find_unreliable、find_schema_drift、check_reconciliation、get_provenance、get_evidence、verify_dataset、get_freshness_summary、verify_evidence、trust_verdict、verify_attestation、find_by_licence、usage_summary
公共端点通过 440 个数据集的目录提供全部 19 个只读工具。
get_evidence 提供流水线回执;verify_evidence 执行缓存的纯传输实时检查,不会更新健康状态。
有关完整的发现索引,请参阅 llms.txt;有关部署架构,请参阅 docs/mcp-deploy.md。
通过 claude_desktop_config.json 接入 Claude Desktop(30 秒,无需
API 密钥):
{
"mcpServers": {
"datapulse-my": {
"type": "http",
"url": "https://mcp.data-pulse.my/mcp"
}
}
}
重启 Claude Desktop,确认锤子图标显示 "datapulse-my",并列出上述只读工具。Cursor / Cline 在其 MCP 配置面板中使用相同的 JSON。
包含的数据集
来自 45 个发布方的 440 个官方数据集,其中包括 30 个 GTFS 公共交通数据源。浏览已发布的报告查看通俗易懂的健康评估,或使用 datapulse.json 作为机器可读索引,查看每个来源、许可、健康报告路径和声明的更新频率。
当前覆盖情况
声明的刷新频率:每年(145);每月(106);按需(57);每日(49);每季度(35);每两年至三年(调查年份)(22);每 30 秒(14);每小时(4);每日(工作日)(2);每周(2);每日(工作日,0900 MYT)(1);每日(工作日,1130 MYT)(1);每日(工作日,1200 MYT)(1);每日(工作日,1700 MYT)(1)。每个数据集的刷新频率仍可在 datapulse.json 和各份已发布的健康报告中查看。
如何使用
从 datapulse.json 开始,查找数据集及其
官方来源。点击每个 health_report 链接,查看通俗易懂的
评估。非 GTFS 数据集也有对应的机器可读报告信封,位于 data/json/;
30 个 GTFS 公共交通数据源则有意不提供此类信封,而是发布健康报告和
GTFS 示例。
例如,数据管道可以在处理数据源前检查 status、content_freshness_date 和
freshness_signal_source;研究人员则可以在设计数据采集方法前
了解已知的特殊情况。
外部验证
如需在不克隆仓库的情况下,独立检查已发布的 Ed25519 数据集信封、 GitHub 源码一致性和 Rekor/Sigstore 健康证明,请参阅 外部验证 DataPulse。
本目录中的每个数据集都附带一份公开签名的 Sigstore
DSSE 证据收据,Agent 无需信任
DataPulse 服务即可离线验证。对于任意数据集,Agent(人工或 MCP)只需最多调用 3 次 MCP
工具即可获取完整健康记录 + 证据 + 签名收据验证结果:verify_dataset → get_freshness_summary。标准
离线路径是上文所述的 verify_external.py 命令。
对于项目组合级别的健康数据包,请使用位于 /signatures/datapulse.json 的
准确配套清单验证 /signatures/health.latest.sigstore.json。此签名清单快照不同于
/datapulse.json(当前发现清单):后者可能会在生成的元数据刷新时发生变化。有效签名能证明 DataPulse
经证明的观测数据完整无误,但不能证明上游数据在语义上属实。每次刷新都会将签名数据包发布到公共 Rekor 日志。
监控
- VPS 上的
datapulse-health.timer每 5 分钟唤醒一次,只运行到达相应频率时限的 数据集。 - GitHub Actions 每周执行一次完整探测作为备用,并重新发布生成的健康数据、徽章、数据源、 README、目录快照和差异构件。
- RSS 数据源 — 可用。
- 状态徽章 — 可用。
- 更多数据集 — 计划中。
认领数据集
知道有哪些值得提供可靠健康元数据的马来西亚公共数据集吗? 认领它:验证其来源和许可证,记录其架构及特殊情况,并 提交健康报告。有关预期的三文件贡献模式,请参阅 CONTRIBUTING.md。
新贡献者可以从仓库的
适合新手的问题
开始,也可以通过 GitHub 问题表单提出数据集。维护者使用
good first issue(黄色)、adopt-a-dataset(蓝色)、freshness-check
(蓝色)、bug(红色)、documentation(蓝色)、question(紫色)和
wontfix(灰色)来分流贡献。
许可证
DataPulse 根据 MIT License 发布。源数据集仍须遵守各自 健康报告中列明的许可证和署名要求。
隐私
请参阅 PRIVACY.md,了解 DataPulse 收集的内容(用于速率限制和使用情况汇总的临时运行 日志)以及不会收集的内容(无凭据、无账户、无个人数据)。
法律声明
DataPulse 探测公开发布的开放数据源。我们不会绕过身份验证、CAPTCHA 或服务条款限制。我们探测的所有数据源都无需登录即可公开访问;数据为汇总数据,不含个人信息;探测频率也遵循各数据集声明的刷新频率。
所有抓取都受到速率限制(每 5 分钟一次,并应用数据集级别的频率限制),且会通过 User-Agent 标明自身身份。对于需要身份验证、绕过 CAPTCHA 或违反服务条款才能探测的数据源,我们会标记为 unreachable 或 browser-dependent,绝不会通过变通方式暗中抓取。
如果您是数据源维护者,希望 DataPulse 调整探测频率、排除某个数据集或将其从清单中移除,请提交 GitHub issue 或联系维护者。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。