datapulse-my
This server is a read-only MCP interface to DataPulse's 418-dataset Malaysian public-data catalogue, letting agents discover, assess, verify, and cite dataset freshness, licence, provenance, and evidence.
Discover:
search_datasetsfinds datasets by topic/source/licence;find_by_licencescopes reusable data.Inspect:
get_dataset,get_data_passport, andget_freshness_summaryreturn health status, freshness signals, and catalogue counts.Risk triage:
find_stale,find_anomalies,find_deteriorating,find_recovering,find_unreliable, andfind_schema_driftsurface freshness, reliability, and schema risks.Reconcile:
check_reconciliationcompares cross-source counts/dates/statuses with tolerances.Provenance/citation:
get_provenanceprovides source, steward, licence, canonical URL, and evidence context for citations.Audit/verify:
get_evidencereturns full evidence receipts;verify_datasetperforms fail-closed signed-receipt verification;verify_evidencedoes live transport checks;verify_attestationverifies the signed attestation chain;trust_verdictaggregates trust scores and evidence.Operations:
usage_summaryreports aggregate anonymous tool usage over an inclusive date range.
DataPulse
Live dashboard: https://www.data-pulse.my
Open in Google Colab:
๐ค 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.
This is DataPulse
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
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.
Related MCP server: Data.gov.my MCP Server
What we do, simply
We watch the sources. A scheduled probe revisits each dataset under its declared cadence and records what it actually finds โ reachability, an honest freshness signal, schema shape, record counts, and collection quirks.
We state the truth plainly. Instead of a blanket green checkmark, each dataset carries one of ten honest health statuses (
fresh,aging,stale,discontinued,degraded,browser-dependent,unreachable,unknown,unknown-freshness,reference). A dataset that cannot be proven fresh is labelledunknown-freshnessโ not silently treated as healthy.We publish evidence, not just claims. Each dated observation is signed and recorded to an immutable public log, so you can verify when DataPulse observed the source and that the record has not been altered.
We make it machine-readable first. The whole portfolio is discoverable from one index and queryable over a read-only MCP server, so an agent receives the same freshness, licence, and provenance signal a careful human reviewer would.
Who this serves
AI builders and agent developers, who want a model to check a Malaysian figure's freshness and licence before it cites the number โ without building a bespoke integration or trusting a scraping pipeline.
Researchers, analysts, and journalists, who need to ground coursework, a thesis, a dashboard, or a published figure in data whose currency and licence they can actually verify.
Compliance and regulatory-monitoring teams, who must keep a tamper-evident trail that an official figure was checked at a known time before it reached a product or a public statement.
Civic technologists and public servants, who want a transparent, reproducible view of how discoverable and reliably described public data is.
Why you can trust the verification
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 |
|
Source of record | The served observation byte-matches the versioned Git source |
|
Temporal witness | The health statement carries a Rekor/Sigstore public-log inclusion proof |
|
Run it yourself, from anywhere, with no checkout and no DataPulse code:
curl -fsSLO https://raw.githubusercontent.com/r3dz4r/datapulse-my/main/scripts/verify_external.py
python3 verify_external.pySee Verify DataPulse externally for the full guide, and our methodology below for how health is judged.
Verify an observation receipt
scripts/observation_verify.py verifies receipt identity, signature, key
registry validity, and any available chain linkage from local files. It makes
no network calls in any mode. Supplying --health <artifact> additionally
reproduces the normalized artifact digest and re-derives its dataset and
freshness-status claims: only health_binding: checked and
artifact_claims: verified attest those claims. Without --health, the report
explicitly says artifact_claims: NOT verified; use
--require-health-binding when that incomplete result must fail.
For receipts with a signed <commit>@<path> artifact locator, pass
--repo owner/name to print the corresponding immutable raw-GitHub URL. The
repository is supplied, never guessed or hardcoded. Fetch that URL separately,
then give the saved file to --health; the URL is a discovery aid, not proof
until the local digest and claims check succeeds.
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.
Dataset health
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): 143 fresh ยท 94 aging ยท 153 stale ยท 1 discontinued ยท 3 degraded ยท 5 browser-dependent ยท 1 unreachable ยท 4 unknown-freshness ยท 14 reference
Subscribe: RSS feed โ get notified when dataset health changes.
Browser-dependent datasets
The current health summary identifies 5 browser-dependent sources (1.2% of the catalogue) that require a real browser to probe because their source pages render client-side JavaScript.
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:
Run the Camofox Docker sidecar on a reachable address (default
http://localhost:9377). The probe script and the GitHub Actions workflow pick this up from theCAMOFOX_BASE_URLenvironment variable; nothing in this repo encodes a public IP.Set
CAMOFOX_BASE_URLto that address.Restart the timer with
systemctl restart datapulse-health.timer.
Without Camofox, these 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.
Methodology
Topic | DataPulse's position |
Health status | Ten-status taxonomy, judged by reachability + an honest freshness signal ( |
Licence | Every dataset declares its licence machine-readably. Creative Commons Attribution 4.0 (285); MBPP Government Open Data Terms (attribution required) (1); MIT License (8); Open Government Licence (Malaysia) (115); Publisher licence not stated; portal disclaimer applies (4); Singapore Open Data Licence v1.0 (attribution required) (5). A second party can reproduce this from |
Freshness cadence | Each dataset is probed on its own tiered schedule (5-minute timer, cadence-aware) โ |
Provenance | Stable |
Observed claim | The platform proves what an official source was observed to be at a known time โ it does not claim upstream data is semantically true |
Read-only + lawful | Publicly available, authenticated sources only โ never bypassed; rate-limited; identifies itself to sources |
Verification | Fresh days are Rekor-witnessed; signed envelopes + Git source-of-record + public-log inclusion, checkable by anyone |
Connect an AI agent
DataPulse exposes an AI-ready, read-only MCP server so agents can query the catalogue natively. It provides the same freshness, licence, schema-drift, and provenance evidence available to a human reviewer.
Endpoint:
https://mcp.data-pulse.my/mcp(Streamable HTTP, no auth) Graded by mcpgrade โ replay withbash scripts/audit_mcpgrade.sh(pinned version, writesartifacts/mcpgrade/). The canonical tool count lives inmcp.json.
19 tools:
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
The public endpoint serves all 19 read-only tools over the 418-dataset catalogue.
get_evidence exposes pipeline receipts; verify_evidence performs cached
transport-only live checks and does not update health.
Connect from Claude Desktop:
{
"mcpServers": {
"datapulse-my": {
"transport": "streamable-http",
"url": "https://mcp.data-pulse.my/mcp"
}
}
}See llms.txt for the full
discovery index, and docs/mcp-deploy.md for the
deployment architecture.
Wire it into Claude Desktop via claude_desktop_config.json (30 seconds, no
API key):
{
"mcpServers": {
"datapulse-my": {
"transport": "streamable-http",
"url": "https://mcp.data-pulse.my/mcp"
}
}
}Restart Claude Desktop, confirm the hammer icon shows "datapulse-my" with the read-only tools listed above. Cursor / Cline use the same JSON in their MCP config panel.
Included datasets
418 official datasets across 44 publishers, including 30 GTFS transit feeds. Browse the published reports for plain-language health assessments, or use datapulse.json as the machine-readable index of every source, licence, health-report path, and declared refresh cadence.
Current coverage
Declared refresh cadences: annual (144); monthly (119); daily (48); as-required (35); quarterly (35); 30 seconds (14); biennial to triennial (survey years) (11); hourly (4); daily (weekdays) (2); weekly (2); daily (weekdays, 0900 MYT) (1); daily (weekdays, 1130 MYT) (1); daily (weekdays, 1200 MYT) (1); daily (weekdays, 1700 MYT) (1). Per-dataset cadence remains available in datapulse.json and each published health report.
How to use it
Start with datapulse.json to discover datasets and their
official sources. Follow each health_report link for a plain-language
assessment. Non-GTFS datasets also have matching machine-readable report
envelopes under data/json/; the 30 GTFS transit feeds intentionally do not,
and instead publish their health reports and GTFS samples.
For example, a data pipeline can inspect status, content_freshness_date, and
freshness_signal_source before processing a source, while a researcher can
review the known quirks before designing a collection method.
External verification
For a clone-less, independent check of the published Ed25519 dataset envelope, GitHub source parity, and Rekor/Sigstore health witness, see Verify DataPulse externally.
Every dataset in this catalogue ships with a publicly-signed Sigstore
DSSE evidence receipt that an agent can verify offline, without trusting
the DataPulse server. An agent (human or MCP) can obtain, for any dataset,
the full health row + evidence + signed-receipt-verification in three MCP
tool calls or fewer: verify_dataset โ get_freshness_summary. The standard
offline path is the verify_external.py command above.
For the portfolio-level health bundle, verify
/signatures/health.latest.sigstore.json with the exact companion manifest
at /signatures/datapulse.json. That signed-manifest snapshot is distinct
from /datapulse.json, the current discovery manifest: the latter can change
when generated metadata is refreshed. A valid signature proves the integrity
of DataPulse's attested observation, not that upstream data is semantically
true. Every refresh publishes signed bundles to the public Rekor log.
Monitoring
The VPS
datapulse-health.timerwakes every 5 minutes and runs only the datasets whose cadence tier is due.GitHub Actions performs a full weekly probe as a fallback and republishes the generated health, badge, feed, README, catalog snapshot, and delta artifacts.
RSS feed โ available.
Status badges โ available.
More datasets โ planned.
Adopt a dataset
Know a Malaysian public dataset that deserves dependable health metadata? Adopt it: verify its source and licence, document its schema and quirks, and submit a health report. See CONTRIBUTING.md for the expected three-file contribution model.
New contributors can start with the repository's
Good first issues
or propose a dataset through the GitHub issue forms. Maintainers use
good first issue (yellow), adopt-a-dataset (blue), freshness-check
(blue), bug (red), documentation (blue), question (purple), and
wontfix (gray) to route contributions.
Licence
DataPulse is released under the MIT License. Source datasets remain subject to the licences and attribution requirements stated in their individual health reports.
Privacy
See PRIVACY.md for what DataPulse collects (transient operational logs for rate limiting and usage aggregation) and what it does not collect (no credentials, no accounts, no personal data).
Legal
DataPulse probes publicly-published open-data sources. We do not bypass authentication, CAPTCHAs, or terms-of-service restrictions. Every source we probe is publicly available without login; the data is aggregate/non-personal; and the probe respects each dataset's declared refresh frequency.
All scraping is rate-limited (5-minute cadence, dataset-tier cadence applied)
and identifies itself via User-Agent. Sources we cannot probe without
authentication, CAPTCHA bypass, or ToS violation are marked unreachable or
browser-dependent โ never silently scraped through a workaround.
If you are a data source maintainer and would like DataPulse to adjust its probe cadence, exclude a dataset, or remove it from the manifest, please open a GitHub issue or contact the maintainers.
Available Tools
19 toolscheck_reconciliationCheck Cross-Source ReconciliationARead-onlyIdempotentInspect
Return the published cross-source reconciliation group for a dataset name or id, including per-member counts, dates, statuses, tolerances, and contextual deltas. A discrepancy requires human review and does not prove either source is wrong. Use it to compare a dataset with its published cross-source group; do not use it for provenance or evidence receiptsโuse get_provenance or get_evidence instead. It reads precomputed reconciliation data, and single_source means no group contains the resolved dataset; DataPulse is read-only, requires no API key, and the edge limits clients to roughly one request per second with a small burst, so pace or retry.
| Name | Required | Description | Default |
|---|---|---|---|
| dataset_name | Yes | Stable dataset slug or exact display name to resolve, e.g. 'interestrates' or 'Monthly Interest Rates'; use search_datasets to discover valid values. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and non-destructive behavior. The description adds valuable context beyond that: interpretation guidance ('does not prove either source is wrong'), the semantic meaning of 'single_source', the read-only/precomputed nature, and rate-limit behavior. Slight gap: no detail on what 'contextual deltas' means, but annotations carry the safety profile.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense and informative without being wasteful. The core purpose is front-loaded in the first sentence, followed by usage boundaries and behavioral caveats. It packs many distinct pieces of guidance into a compact space, though the last sentence is slightly long and could be split for readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a single parameter, 100% schema coverage, rich annotations, and an output schema, the description covers key context: purpose, alternatives, interpretation, read-only behavior, and rate limiting. It lacks a mention of pagination or potential error conditions, but these are minor given the output schema and simple parameter surface.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the schema already provides a clear description and examples. The description adds the resolution detail (slug or exact display name) by pointing to discoverability via search_datasets)Skip? It enriches the parameter meaning by tying it to the tool's purpose, though the schema already does most of the work.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Return') and resource ('published cross-source reconciliation group'), and enumerates the returned content (per-member counts, dates, statuses, tolerances, contextual deltas). It also explicitly differentiates from provenance/evidence tools, making its purpose unambiguous against siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to use (compare a dataset with its published cross-source group) and when not to use, naming the alternatives (get_provenance or get_evidence). It also warns that discrepancies require human review)Skip? It explains interpretation caveat, read-only nature, and rate limiting.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_anomaliesIdentify Dataset Update AnomaliesARead-onlyIdempotentInspect
Return datasets flagged by the latest published anomaly detection (anomalies), ranked by how far the observed update interval exceeds its threshold. Optionally require a minimum publish-reliability grade; includes pipeline-computed anomaly and reliability evidence so agents do not recompute it. Use it for unusual update intervals; do not use it for worsening freshness, recovery, reliability grades, or structural driftโuse find_deteriorating, find_recovering, find_unreliable, or find_schema_drift instead. It reads precomputed anomaly data, so an empty result means no published row survives the selected filters; DataPulse is read-only, requires no API key, and the edge limits clients to roughly one request per second with a small burst, so pace or retry.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Optional exact published detection mode filter, e.g. 'rolling_14d' or 'cadence_fallback'; omit it to include every mode. | |
| limit | No | Maximum highest-ranked anomalies to return, e.g. 50; omit it to use 50 without changing the ranking. | |
| min_reliability | No | Optional inclusive published reliability floor, e.g. 'C' keeps A, B, and C; omit it to retain rows regardless of grade. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark read-only, idempotent, and non-destructive, but the description adds new context: it reads precomputed data, empty result semantics, no API key requirement, and rate limiting ('roughly one request per second with a small burst'). This exceeds what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, each carrying distinct value: purpose, evidence inclusion, usage routing, and operational caveats. No repetition of schema fields or annotations. Front-loaded with the core action and ranking, then conditional and exclusion guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Complete for a read-only query tool with an output schema. It covers purpose, alternatives, empty-result handling, authentication, and rate limits. The output schema already handles return value details, so no further description is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds nominal context ('minimum publish-reliability grade' maps to min_reliability; 'ranked' relates to limit) but does not materially exceed the schema's parameter descriptions. No compensation needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Return datasets flagged by the latest published anomaly detection') and the ranking criterion ('how far the observed update interval exceeds its threshold'). Explicitly distinguishes from sibling tools by naming what it is not for and pointing to find_deteriorating, find_recovering, find_unreliable, and find_schema_drift.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use ('Use it for unusual update intervals') and when-not-to-use ('do not use it for worsening freshness, recovery, reliability grades, or structural drift') with named alternatives. This leaves no ambiguity about tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_by_licenceScope Reusable Data by LicenceARead-onlyIdempotentInspect
Return all datasets with the given licence, summarised. Use to enumerate what's available under a specific licence for compliance/reuse scoping. Use it to enumerate one licence; do not use it to discover by topic or inspect a dataset's citation contextโuse search_datasets or get_provenance instead. It reads published manifest data, so an empty list means no published dataset has the resolved licence; DataPulse is read-only, requires no API key, and the edge limits clients to roughly one request per second with a small burst, so pace or retry.
| Name | Required | Description | Default |
|---|---|---|---|
| licence | Yes | Exact published licence name or supported alias, e.g. 'Creative Commons Attribution 4.0'; use search_datasets to discover licence values. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds meaningful behavioral context beyond annotations: it reads published manifest data, an empty list means no published dataset has the resolved licence, DataPulse is read-only and requires no API key, and the edge limits clients to roughly one request per second with a small burst. This is useful operational context that annotations do not provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: the core action and output are in the first sentence, followed by usage boundaries and operational notes. Every sentence earns its place, and there is no redundant restating of the tool name or schema fields.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter tool with a rich schema, clear annotations, and an output schema, the description covers the essential selection and invocation context: what it returns, when to use it, when not to, and operational constraints. Nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents the licence parameter with examples and a pointer to search_datasets for discovering values. The description adds the notion of 'resolved licence' and the exact-match/alias behavior, which slightly enriches the schema. Since the schema carries most of the burden, a 4 is appropriate rather than a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Return all datasets with the given licence'), a clear resource (datasets by licence), and a summarised output. It also distinguishes itself from siblings by explicitly naming search_datasets and get_provenance as alternatives for different intents, so an agent can select it correctly without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit when-to-use guidance ('enumerate what's available under a specific licence for compliance/reuse scoping') and explicit when-not-to-use guidance ('do not use it to discover by topic or inspect a dataset's citation contextโuse search_datasets or get_provenance instead'). It also clarifies the single-licence scope, leaving no ambiguity about alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_deterioratingIdentify Deteriorating Dataset TrendsARead-onlyIdempotentInspect
Return datasets whose published freshness trend is deteriorating, ranked by staleness slope. Optionally require a minimum historical anomaly rate; includes pipeline-computed trend and reliability evidence so agents do not recompute it. Use it for worsening freshness trends; do not use it for anomalies, recovery, reliability grades, or structural driftโuse find_anomalies, find_recovering, find_unreliable, or find_schema_drift instead. It reads precomputed trend data, so an empty result means no published deteriorating row survives the selected filters; DataPulse is read-only, requires no API key, and the edge limits clients to roughly one request per second with a small burst, so pace or retry.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum highest-ranked deteriorating datasets to return, e.g. 50; omit it to use 50 without changing ranking. | |
| min_anomaly_rate | No | Optional inclusive anomaly-rate filter on published history, e.g. 25.0; omit it to retain every deteriorating row. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds meaningful behavioral context beyond annotations: it reads precomputed trend data, an empty result means no deteriorating row survives the filters, DataPulse is read-only and requires no API key, and there is a rate limit of roughly one request per second with a small burst. This is useful operational context that annotations do not provide. It does not contradict annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single dense paragraph that front-loads the core purpose and ranking criterion, then covers exclusions, alternatives, and operational notes. It earns its length by packing in usage guidance and rate-limit context, though it could be slightly more scannable with sentence breaks. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has only 2 optional parameters, a rich output schema, and annotations covering read-only/idempotent behavior, the description is complete. It explains what the tool returns, how results are ranked, when to use it, when not to use it, what an empty result means, and the rate limit. An agent has everything needed to select and invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters thoroughly, including defaults, ranges, examples, and semantics. The description adds a small amount of context by mentioning 'minimum historical anomaly rate' and 'staleness slope' ranking, but it does not need to compensate for any schema gap. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Return'), a specific resource ('datasets whose published freshness trend is deteriorating'), and a ranking criterion ('staleness slope'). It also explicitly distinguishes itself from four sibling tools by name, so an agent can tell it apart from find_anomalies, find_recovering, find_unreliable, and find_schema_drift without opening their schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says when to use it ('Use it for worsening freshness trends') and when not to use it ('do not use it for anomalies, recovery, reliability grades, or structural drift'), naming the exact alternative tools. It also clarifies that it reads precomputed trend data, so agents know not to recompute it. This is explicit when/when-not/alternatives guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_recoveringIdentify Recovering Dataset TrendsARead-onlyIdempotentInspect
Return datasets whose published freshness trend is recovering, with the fastest staleness reductions first. Includes pipeline-computed trend and publish-reliability evidence. Use it for improving freshness trends; do not use it for deterioration, anomalies, reliability grades, or structural driftโuse find_deteriorating, find_anomalies, find_unreliable, or find_schema_drift instead. It reads precomputed trend data, so an empty result means no published recovering row exists; DataPulse is read-only, requires no API key, and the edge limits clients to roughly one request per second with a small burst, so pace or retry.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum fastest-recovering datasets to return, e.g. 50; omit it to use 50 without changing ranking. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds substantial behavioral context beyond the annotations: it reads precomputed trend data, explains the meaning of an empty result, states that it requires no API key, and discloses the rate limit with pacing advice. All of this is useful and consistent with the readOnlyHint, idempotentHint, openWorldHint, and destructiveHint annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: purpose first, then usage guidance, then behavioral/rate-limit details. Every sentence adds necessary information without redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read-only tool with an output schema, the description covers purpose, selection criteria, output semantics, authentication, and rate limits. Nothing an agent needs to invoke it correctly is missing from the textual description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single 'limit' parameter is already well-documented with defaults, bounds, and examples. The description adds a small clarification that omitting limit keeps ranking unchangedebb, but the parameter's core meaning is fully conveyed by the schema, so the baseline score applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Return datasets whose published freshness trend is recovering' with a clear ordering ('fastest staleness reductions first'). It also distinguishes itself by naming exact alternatives for other cases, so an agent can immediately tell it apart from sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says when to use this tool ('Use it for improving freshness trends') and when not to use it, listing the specific sibling tools for deterioration, anomalies, reliability grades, and structural drift. This is the strongest possible guidance for tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_schema_driftIdentify Schema and Content DriftARead-onlyIdempotentInspect
Return datasets with published structural or record-count drift evidence, ranked with structural changes first. Optionally require a minimum number of structural transitions; includes pipeline-computed evidence so agents do not infer drift from freshness alone. Use it for structural or record-count changes; do not use it for freshness risk, anomalies, trends, or reliabilityโuse find_stale, find_anomalies, find_deteriorating, or find_unreliable instead. It reads precomputed drift data, so an empty result means no published drift row survives the selected filters; DataPulse is read-only, requires no API key, and the edge limits clients to roughly one request per second with a small burst, so pace or retry.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum structural-first ranked drift results to return, e.g. 50; omit it to use 50 without changing ranking. | |
| min_change_count | No | Inclusive filter on the larger published shape or column transition count, e.g. 1; omit it to include every drift row. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, and non-destructive behavior, but the description adds valuable operational context: it reads precomputed drift data, explains that an empty result means no published drift row survives filters, notes DataPulse requires no API key, and warns about the rate limit with pacing guidance. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every clause earns its place: core behavior, parameter nuance, usage boundaries, empty-result interpretation, auth/rate-limit context, and alternative tools. It front-loads the primary purpose and avoids filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers purpose, parameter semantics, behavioral caveats, rate limits, and sibling routing. With an output schema present, the return shape is already documented, so no critical information is missing for an agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds meaningful nuance by framing min_change_count as 'a minimum number of structural transitions' and reinforcing that results are ranked structural-first, which goes slightly beyond the schema's raw parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Return datasets with published structural or record-count drift evidence, ranked with structural changes first.' It clearly distinguishes the tool from siblings by naming the exact purpose (drift detection) and later lists what it is not for.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use the tool and when not to: 'Use it for structural or record-count changes; do not use it for freshness risk, anomalies, trends, or reliabilityโuse find_stale, find_anomalies, find_deteriorating, or find_unreliable instead.' This is model guidance with named alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_staleIdentify Freshness and Schema RisksARead-onlyIdempotentInspect
Return datasets whose status is aging, stale, or degraded, plus datasets missing from the latest health snapshot. Use when an agent needs to know which data has a freshness or schema-validity risk. Use it to enumerate freshness or schema-risk candidates; do not use it for anomalies, trends, reliability, or driftโuse find_anomalies, find_deteriorating, find_unreliable, or find_schema_drift instead. It reads the published health snapshot, so an empty result means no rows met this snapshot-based rule; DataPulse is read-only, requires no API key, and the edge limits clients to roughly one request per second with a small burst, so pace or retry.
| Name | Required | Description | Default |
|---|---|---|---|
| max_age_hours | No | Maximum published-snapshot age before otherwise healthy rows are included, e.g. 72; omit it to use 24 hours. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description adds meaningful behavioral context: it reads the published health snapshot, empty results mean no rows met the snapshot-based rule, DataPulse is read-only, no API key is required, and there is a one-request-per-second edge limit with a small burst. These details help an agent set expectations and handle retries.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence earns its place: the first defines the function, the second and third cover usage and exclusions, and the fourth adds essential behavioral and rate-limit context. It is front-loaded with the core purpose before routing to alternatives.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with one optional parameter, rich annotations, an output schema, and explicit sibling distinctions, this description is complete. It covers what the tool returns, when to use it, what not to use it for, empty-result semantics, authentication, and rate-limit behaviorโnothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents max_age_hours with examples and defaults. The main description does not add extra meaning about the parameter beyond what the input schema already provides, which aligns with the baseline of 3 for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Return datasets whose status is aging, stale, or degraded, plus datasets missing from the latest health snapshot.' It clearly distinguishes this tool from siblings by naming the relevant risk categories and by referencing the published health snapshot, which anchors its scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit when-to-use guidance: use when an agent needs to know freshness or schema-validity risk and to enumerate candidates. It also gives strong negative guidance: do not use for anomalies, trends, reliability, or drift, and explicitly names find_anomalies, find_deteriorating, find_unreliable, and find_schema_drift as alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_unreliableIdentify Unreliable Dataset PublishingARead-onlyIdempotentInspect
Return datasets whose evaluated publish-reliability grade is at or below a threshold (the unreliable ones), with the worst grades and lowest on-time percentages first. Reliability measures timeliness of successful freshness observations, not uptime; sample days are included so agents can judge evidence depth. Use it for timeliness reliability grades; do not use it for individual anomalies, trends, or structural driftโuse find_anomalies, find_deteriorating, find_recovering, or find_schema_drift instead. It reads precomputed reliability data, so an empty result means no published grade meets the threshold; DataPulse is read-only, requires no API key, and the edge limits clients to roughly one request per second with a small burst, so pace or retry.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum worst-ranked unreliable datasets to return, e.g. 50; omit it to use 50 without changing ranking. | |
| at_or_below_grade | No | Inclusive published reliability threshold; e.g. 'C' returns grades C, D, and F; omit it to use C. | C |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds valuable behavioral context beyond annotations: it clarifies that reliability measures timeliness of successful freshness observations (not uptime), that sample days are included for evidence depth, that it reads precomputed data, and that DataPulse is read-only with rate limits (roughly one request per second with burst). This is rich behavioral disclosure. The only minor gap is not describing the exact output structure, but the output schema exists, so that's not required.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single dense paragraph that front-loads the core purpose and ranking order, then adds usage exclusions, behavioral context, and rate-limit guidance. Every sentence earns its place, though the paragraph is long and could benefit from slight structural separation (e.g., a second sentence for rate limits). It is appropriately sized for the complexity and contains no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (2 optional params, output schema present, rich annotations), the description is complete. It covers what the tool returns, how results are ordered, what reliability means, when to use alternatives, how to interpret empty results, and operational constraints (rate limits). An agent has everything needed to select and invoke this tool correctly without opening the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters (limit and at_or_below_grade) with defaults, examples, and inclusive threshold semantics. The description adds the ranking context ('worst grades and lowest on-time percentages first') and the inclusive threshold meaning ('at or below'), which slightly enhances the schema. However, the schema already explains the inclusive behavior in the at_or_below_grade description, so the added value is marginal. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Return'), a specific resource ('datasets whose evaluated publish-reliability grade is at or below a threshold'), and a clear scope ('the unreliable ones'). It also distinguishes itself from siblings by naming find_anomalies, find_deteriorating, find_recovering, and find_schema_drift as alternatives for different concerns. This is a clear, specific purpose that an agent can act on.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says when to use it ('Use it for timeliness reliability grades') and when not to use it ('do not use it for individual anomalies, trends, or structural drift'), and names the exact sibling tools to use instead. It also clarifies that an empty result means no published grade meets the threshold, which is a key interpretation guideline. This is exemplary usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_data_passportRead Dataset Evidence PassportARead-onlyIdempotentInspect
Return one bounded, machine-readable Dataset Passport v1 for a canonical dataset ID. It reads the published Passport artifact only; it does not fetch an upstream source or create evidence. The Passport describes observed metadata and evidence availability, not semantic truth, completeness, certification, legal permission, safety, or AI admission. Use it for the bounded Passport artifact; do not use it for current health detail or citation contextโuse get_dataset or get_provenance instead. It reads precomputed published data, and evidence_available=false identifies an unavailable or unsupported Passport; DataPulse is read-only, requires no API key, and the edge limits clients to roughly one request per second with a small burst, so pace or retry.
| Name | Required | Description | Default |
|---|---|---|---|
| dataset_id | Yes | Stable dataset slug returned by search_datasets, e.g. 'fuelprice'; this tool requires the slug, not a display name. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint, but the description adds substantial context: it reads precomputed published data, does not fetch upstream or create evidence, and describes a bounded artifact not representing semantic truth, completeness, certification, legal permission, safety, or AI admission. It also discloses DataPulse is read-only, needs no API key, and is rate-limited to roughly one request per second with a burst, giving the agent realistic expectations beyond the structured annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is longer than typical, but every sentence earns its place: core action, artifact scope, semantic limitations, alternative tools, and rate-limit guidance are all distinct, non-redundant facts. It is front-loaded with the primary purpose and then layers caveats in a logical order, though it could be slightly tightened without losing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity, the description is thorough: it specifies the artifact version, what the passport describes and does not describe, the exact meaning of evidence_available=false, authentication and rate limits, and clear routing to sibling tools. The output schema exists, so return values need no description, but all other operational context required for correct invocation is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% coverage, including a detailed description of dataset_id as a stable slug returned by search_datasets, an example, and the requirement that it must be a slug rather than a display name. The description calls it a 'canonical dataset ID' but adds nothing beyond that; the schema already carries the semantic weight. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description begins with a specific verb and resource: 'Return one bounded, machine-readable Dataset Passport v1 for a canonical dataset ID.' It also distinguishes itself from siblings by explicitly stating it 'reads the published Passport artifact only; it does not fetch an upstream source or create evidence' and contrasts with 'get_dataset or get_provenance'. This leaves no ambiguity about the tool's function.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit when-to-use and when-not-to-use guidance: 'Use it for the bounded Passport artifact; do not use it for current health detail or citation contextโuse get_dataset or get_provenance instead.' It further clarifies the semantics of evidence_available=false and rate-limit behavior, so an agent can decide when to invoke it and what to expect.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_datasetInspect Dataset Health and DetailsARead-onlyIdempotentInspect
Return full detail for one dataset id, including its latest health status and last-verified timestamp, content_freshness_date, and freshness_signal_source (last_modified, content_parse, or none). Use to fetch the provenance/citation metadata for a dataset found via search_datasets and distinguish unknown-freshness from proven stale data. Use it for one dataset's current published detail; do not use it for citation context or a Passportโuse get_provenance or get_data_passport instead. It reads published data, so an absent health row is reported as unknown rather than probed live; DataPulse is read-only, requires no API key, and the edge limits clients to roughly one request per second with a small burst, so pace or retry.
| Name | Required | Description | Default |
|---|---|---|---|
| dataset_id | Yes | Stable dataset slug returned by search_datasets, e.g. 'dosm_cpi_state'; this tool requires the slug, not a display name. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false, so the safety profile is known. The description adds valuable behavioral context: it states that absent health rows are reported as unknown rather than probed live (open-world behavior), that DataPulse is read-only and requires no API key, and that rate limits are roughly one request per second with a small burst. This goes beyond the annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is fairly long but packs essential information: purpose, key fields, usage guidance, exclusions, and rate-limit warnings. It is front-loaded with the core functionality before getting into alternatives and constraints. It could be slightly more concise, but every sentence earns its place through actionable details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple (one parameter, no nested objects) and has an output schema, so the description doesn't need to detail return values. It covers the main use case, alternatives, and operational constraints (rate limiting, no API key, unknown-freshness behavior). The only minor gap is not specifying the exact format of the freshness_signal_source values, but the description does list the possible values.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already describes the parameter dataset_id with an example and the requirement of a slug. The description reinforces this by stating it requires the slug, not a display name, which adds slight value. However, since schema coverage is 100%, the baseline of 3 is appropriate; the description's additional clarification is helpful but not critical.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's verb ('fetch full detail') and resource ('one dataset id'), and specifies the exact fields returned (health status, last-verified timestamp, content_freshness_date, freshness_signal_source). It distinguishes itself from sibling tools by explicitly listing what to use instead for other purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit when-to-use ('for one dataset's current published detail', 'to fetch provenance/citation metadata for a dataset found via search_datasets') and when-not-to-use ('do not use it for citation context or a Passportโuse get_provenance or get_data_passport instead'). It also names alternatives clearly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_evidenceAudit Published Evidence ReceiptARead-onlyIdempotentInspect
Use for a deep evidence audit or to inspect a provenance and evidence receipt. Returns the complete published evidence receipt for one dataset: probe time, transport, access dependency, freshness, schema drift / record-count drift, tolerance, status, anomaly fields, and receipt/evidence references. It reads published pipeline evidence, not a live source fetch: you may report what the pipeline observed, but must not infer the source is currently reachable or semantically true. Use it for a deep audit before or alongside verification. search_datasets โ get_evidence โ verify_evidence โ verify_attestation. Use it for a complete published receipt; do not use it for a live transport check or signature verificationโuse verify_evidence or verify_attestation instead. It reads precomputed evidence, so evidence_available=false means no published health row; DataPulse is read-only, requires no API key, and the edge limits clients to roughly one request per second with a small burst, so pace or retry.
| Name | Required | Description | Default |
|---|---|---|---|
| dataset_id | Yes | Stable dataset slug returned by search_datasets for its complete receipt, e.g. 'fuelprice'; this tool requires the slug, not a display name. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly, openWorld, idempotent, and non-destructive annotations, the description discloses crucial runtime behavior: it reads precomputed pipeline evidence rather than live sources, evidence_available=false semantics, the one-request-per-second rate limit with burst, and the DataPulse read-only/no-API-key property. It also warns against inferring current source reachability or truth.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but every sentence carries useful information: field list, workflow sequence, exclusions, caveats, and rate limiting. It is front-loaded with the core purpose and then adds necessary operational detail. Slight redundancy around 'use it for a complete published receipt' and the earlier audit phrasing prevents a perfect 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complex sibling landscape and the need to route agents to correct verification tools, the description covers purpose, alternatives, workflow, behavioral caveats, rate limits, and failure semantics. The presence of an output schema and full annotations further reduces the need to document return values or safety, so nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the dataset_id parameter is already well described in the schema, including 'stable dataset slug returned by search_datasets' and the requirement to use a slug rather than a display name. The tool description adds little beyond the schema's parameter documentation, so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a precise verb and resource: it retrieves the complete published evidence receipt for one dataset and lists the exact fields included. It also distinguishes itself from sibling verification tools by explicitly naming what it is not for, making its purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit when-to-use guidance ('deep audit before or alongside verification'), a recommended pipeline order (search_datasets โ get_evidence โ verify_evidence โ verify_attestation), and clear exclusions ('do not use it for a live transport check or signature verificationโuse verify_evidence or verify_attestation instead'). This is model usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_freshness_summarySummarize Catalogue FreshnessARead-onlyIdempotentInspect
Return a freshness-at-a-glance summary of the published catalogue: fresh, aging, stale, and reference counts plus the latest health check time. Use it for catalogue-level freshness context; do not use it to enumerate affected datasetsโuse find_stale instead. It reads the latest published snapshot, so missing counts or check time mean the artifact omitted them; DataPulse is read-only, requires no API key, and the edge limits clients to roughly one request per second with a small burst, so pace or retry.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark it read-only, idempotent, and non-destructive. The description goes beyond this by disclosing that it reads the latest published snapshot (and what missing counts mean), that DataPulse requires no API key, and that the edge imposes a rate limit of roughly one request per second with a small burst. This adds meaningful behavioral context that annotations alone do not convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense, well-organized sentences. The first sentence front-loads the core function and outputs; the second covers usage, limitations, and operational guidance. Every clause earns its placeโno fluff or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists (so return structure doesn't need detailing), the description still summarizes key return contents, specifies when to use it, clarifies data source and completeness implications, and includes rate-limit guidance. Nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the baseline is 4 per the rubric. The description does not include any parameter-specific details, which is appropriate since there are none to document. It correctly avoids fabricating meaning for a schema with no properties.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a precise verb ('Return') and resource ('freshness-at-a-glance summary of the published catalogue'), lists the exact outputs (fresh, aging, stale, and reference counts plus latest health check time), and immediately distinguishes it from a sibling ('do not use it to enumerate affected datasetsโuse find_stale instead'). This is unambiguous and self-sufficient.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states when to use ('catalogue-level freshness context') and when not to ('enumerate affected datasets'), names the alternative tool (find_stale), and adds practical constraints (reads latest snapshot, rate limiting with pace/retry advice). The agent gains clear decision rules without needing to infer anything.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_provenanceCite Dataset ProvenanceARead-onlyIdempotentInspect
Use when asked 'can I cite this source?', for licence and attribution, or for citation-ready provenance. Returns source, steward, licence/attribution context, canonical URL, and compact published evidence context: probe time, transport, access dependency, freshness signal, schema drift / record-count drift context, anomaly flag, and status. Bind a citation to dataset identity, source/evidence URL, observed-at or last-checked time, DataPulse status/verdict, licence/attribution, and a receipt/evidence digest when available. You may cite the returned provenance and describe its published evidence; it is not a freshness guarantee and does not itself verify the source is current. For pre-trust use search_datasets โ verify_dataset โ get_provenance. Use it for citation-ready provenance; do not use it for full evidence or a live comparisonโuse get_evidence or verify_evidence instead. It reads published evidence context, so absent fields mean the pipeline did not publish that value; DataPulse is read-only, requires no API key, and the edge limits clients to roughly one request per second with a small burst, so pace or retry.
| Name | Required | Description | Default |
|---|---|---|---|
| dataset_ids | Yes | Dataset slugs returned by search_datasets for a batched citation lookup, e.g. ['fuelprice', 'pricecatcher']; preserve order and use get_dataset for display-name resolution. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, and destructiveHint=false, covering safety and mutability. The description adds critical behavioral context beyond annotations: it explains the data source (published evidence context), the meaning of absent fields, that it is not a freshness guarantee, that DataPulse requires no API key, and the rate limit (one request per second with small burst). This is strong but not perfectโit could clarify the response shape or error handling, but it goes far beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but front-loaded with the primary use case and return-list summary, then provides usage routing, behavioral caveats, and rate limits. Every sentence serves a purpose, but the density is high and some details (e.g., 'compact published evidence context') are repeated. It is structured logically and not redundant, so it earns a 4.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a complex tool with a rich output schema, but the description covers all essential context: when to use, what it returns, what it does not do, the data source semantics, rate limits, and how it fits with sibling tools. Given the existence of an output schema, the description does not need to detail return values, and it is complete enough for an agent to call it correctly. A 5 is justified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents the parameter well, including examples and the note about preserving order. The description adds value by explaining the expected format (dataset slugs from search_datasets) and the relationship to get_provenance, which is useful for correct invocation. It slightly over-extends by mentioning get_dataset for display-name resolution, but that is helpful context. Baseline 3 is exceeded because of the added guidance, but not a 5 since the description doesn't add much beyond what the schema has.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('get') and resource (provenance) and clearly enumerates what the tool returns (source, steward, licence/attribution, canonical URL, evidence context, etc.). It is distinct from siblings like get_evidence and verify_evidence, and the description explicitly contrasts it with those tools, so an agent can tell them apart.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use the tool ('Use when asked can I cite this source?', for citation-ready provenance) and when not to use it ('do not use it for full evidence or a live comparisonโuse get_evidence or verify_evidence instead'). Provides a recommended pipeline ('search_datasets โ verify_dataset โ get_provenance') and notes rate limits and retry behavior. This is exemplary guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_datasetsFind Malaysian Public DataARead-onlyIdempotentInspect
Use for discovery only: find DataPulse's 418 Malaysian public datasets by topic, source, or licenceโfor example, 'Malaysian public data inflation', licence and attribution, or a government dataset source. Returns ranked matches with id, title, source, licence, published status, and score. This is not trust verification: a status is published pipeline context, not proof that a dataset is current or reliable. For pre-trust use search_datasets โ verify_dataset โ get_provenance. Use it to discover candidates; do not use it for a trust decisionโuse verify_dataset instead. It reads published catalogue data, so no match means the published catalogue has no matching entry; DataPulse is read-only, requires no API key, and the edge limits clients to roughly one request per second with a small burst, so pace or retry.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum highest-ranked discovery matches to return, e.g. 10; omitted defaults to 10 and does not change ranking. | |
| query | Yes | Topic or task phrasing used to rank discovery candidates, e.g. 'Malaysian public data inflation'; use a returned id with get_dataset. | |
| source | No | Optional publisher/source substring filter applied before ranking, e.g. 'OpenDOSM'; omit it to search every source. | |
| licence | No | Optional exact licence name or supported alias applied before ranking, e.g. 'CC BY 4.0'; omit it to search every licence. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds valuable behavioral context beyond that: it is discovery-only, not trust verification, and it discloses the rate limit ('roughly one request per second with a small burst, so pace or retry'). It also explains that 'published status' is pipeline context, not a reliability proof. Minor gap: it doesn't describe pagination or what happens when limit is exceeded, but the rate-limit disclosure is strong.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but well-structured: it front-loads the core purpose, then the trust caveat, then the pipeline guidance, then the rate-limit note. Every sentence earns its place, though the final sentence is long and packs several distinct facts (read-only, no API key, rate limit) into one clause, which slightly reduces scannability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a discovery tool with a rich output schema, full parameter documentation, and safety annotations, the description covers the essential context: what it returns, how to use it in the larger workflow, what it does not do, and operational constraints. Nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all four parameters with examples and defaults. The description adds a little context by explaining that source and licence filters are applied before ranking, and that query is topic/task phrasing, but it mostly restates what the schema already provides. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('find'), a resource ('DataPulse's 418 Malaysian public datasets'), and the dimensions by which to search (topic, source, licence). It also explicitly contrasts with trust verification and names the sibling verify_dataset, so an agent can distinguish it from the many sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit when-to-use guidance ('Use it to discover candidates; do not use it for a trust decisionโuse verify_dataset instead') and even names the intended pre-trust pipeline: search_datasets โ verify_dataset โ get_provenance. It also clarifies the meaning of no matches, which is a usage-relevant edge case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trust_verdictAggregate a Published Trust VerdictARead-onlyIdempotentInspect
Return published attestation facts, the unsigned methodology-versioned trust score, numeric components, and component_availability reasons, plus existing health/trend/drift/reconciliation evidence for one canonical dataset id, e.g. 'fuelprice'. This tool does not re-probe or verify the signature; call verify_attestation separately. Use it to assemble the published trust view; do not use it for receipt verification, live comparison, or signature verificationโuse verify_dataset, verify_evidence, or verify_attestation instead. It reads precomputed artifacts, so missing component availability explains omitted evidence rather than a live probe; DataPulse is read-only, requires no API key, and the edge limits clients to roughly one request per second with a small burst, so pace or retry.
| Name | Required | Description | Default |
|---|---|---|---|
| dataset_id | Yes | Stable dataset slug returned by search_datasets to aggregate, e.g. 'fuelprice'; display names are not resolved here. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, and destructiveHint=false. The description adds valuable context beyond annotations: it explains the tool reads precomputed artifacts rather than probing live, that missing component availability explains omitted evidence, and that DataPulse is read-only with no API key required. It also clarifies the tool does not verify signatures, which is a meaningful behavioral disclosure. Minor gap: it doesn't detail the exact structure of the returned trust score or evidence objects, but the output schema likely covers that.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but well-organized, front-loading the core purpose and then covering exclusions, usage guidance, and operational constraints. Every sentence adds information. It could be slightly more concise, but the density is justified given the need to distinguish from many sibling tools.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only aggregation tool with a single parameter, full schema coverage, and an output schema, the description is complete. It covers what the tool returns, what it does not do, when to use it, and operational constraints. The output schema handles return-value details, so nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents the single parameter. The description adds value by explaining the parameter is a stable dataset slug returned by search_datasets, giving an example ('fuelprice'), and clarifying that display names are not resolved here. This goes beyond the schema's basic description and examples.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool aggregates published attestation facts, trust score, numeric components, and evidence for one canonical dataset id. It distinguishes itself from sibling verification tools by explicitly naming verify_attestation, verify_dataset, and verify_evidence as alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use this tool ('assemble the published trust view') and when not to use it ('do not use it for receipt verification, live comparison, or signature verification'), naming the specific sibling tools to use instead. It also provides operational guidance about rate limits and retry behavior.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
usage_summarySummarize Aggregate Tool UsageARead-onlyIdempotentInspect
Aggregate anonymous tool usage for an inclusive ISO date range, e.g. 2026-08-01 to 2026-08-07. Returns total_calls, by_outcome, by_tool, by_dataset, trust_verdict_calls (the count of trust_verdict records regardless of outcome or result shape), and trust_distribution (counts of returned trust verdicts by published score band: 90-100, 75-89, 50-74, 25-49, 0-24) for the inclusive range. Use it for aggregate tool activity; do not use it to find data-quality risksโuse find_stale, find_anomalies, find_deteriorating, find_recovering, find_unreliable, or find_schema_drift instead. It reads persisted usage records, so zero totals mean no retained records in that range; DataPulse is read-only, requires no API key, and the edge limits clients to roughly one request per second with a small burst, so pace or retry.
| Name | Required | Description | Default |
|---|---|---|---|
| since | Yes | Inclusive first day of the persisted-record window, e.g. '2026-08-01'; it must not be after until. | |
| until | Yes | Inclusive last day of the persisted-record window, e.g. '2026-08-07'; it must not be before since. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/openWorld/idempotent, and the description adds non-redundant behavioral context: it reads persisted records, zero totals mean no retained records, requires no API key, and the edge is rate-limited to roughly one request per second. This goes beyond the structured annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Every sentence earns its place: purpose, return shape, when-to-use/alternatives, and behavioral caveats. The most important scoping and exclusion information is front-loaded before lower-level details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Complete for a read-only aggregate tool: parameters are fully covered, return values are explained, alternatives are named, and operational constraints (rate limit, no API key, zero-total meaning) are given. Nothing needed to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters with examples and constraints. The description adds the aggregate 'inclusive ISO date range' framing and an example range, but does not carry the semantic burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('aggregate') and resource ('tool usage') with an explicit inclusive ISO date range and enumerates the exact return metrics. It also distinguishes itself from the data-quality find_* siblings, so an agent can select it correctly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says to use it for 'aggregate tool activity' and clearly says not to use it for data-quality risks, naming six alternatives in the same tool family. This is unambiguous routing guidance with no reliance on inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify_attestationVerify Signed Attestation ChainARead-onlyIdempotentInspect
Use to verify a signed published probe attestation after an evidence audit. Returns L1 signature, key, time, and chain-link checks; optional L2 replay of daily heads to a Git-tag anchor; and L3 scope, which requires verify_evidence for live transport. A valid signature proves attestation integrity and scope, not upstream semantic truth or currentness. For a deep audit use search_datasets โ get_evidence โ verify_evidence โ verify_attestation. Use it for signed-attestation integrity; do not use it for published receipt verification, a live transport comparison, or an aggregate verdictโuse verify_dataset, verify_evidence, or trust_verdict instead. L2 is not run unless replay_chain is set, and a failed level reports an unsatisfied check rather than upstream semantic truth; DataPulse is read-only, requires no API key, and the edge limits clients to roughly one request per second with a small burst, so pace or retry.
| Name | Required | Description | Default |
|---|---|---|---|
| reference | Yes | Dataset slug returned by search_datasets or an exact published digest reference, e.g. 'fuelprice'; the slug resolves through the attestation index. | |
| replay_chain | No | Set true to perform the slower L2 daily-head replay to a Git tag, e.g. true; omit it to run L1 only. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, and destructiveHint=false. The description adds substantial behavioral context beyond those hints: L2 replay is not run unless replay_chain is set, a failed level reports an unsatisfied check rather than upstream semantic truth, a valid signature proves attestation integrity and scope but not semantic truth or currentness, and DataPulse is read-only with no API key and rate limits of roughly one request per second with a small burst. This is rich, non-obvious behavioral disclosure that an agent needs for correct invocation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence earns its place: purpose, scope, exclusions, alternatives, behavioral caveats, and rate limits are all covered. It is somewhat long, but the density of useful routing and behavioral information justifies the length. The most important scoping information is front-loaded in the first sentence, and the rate-limit note is placed at the end where it is still discoverable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (three verification levels, optional replay, rate limits, and multiple sibling tools), the description is complete. It covers what the tool verifies, what it does not verify, when to use it, when not to use it, the effect of the optional parameter, and operational constraints. The output schema exists, so return values need not be described. An agent has everything needed to select and invoke this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters well. The description adds value by explaining the behavioral consequence of replay_chain (slower L2 daily-head replay to a Git tag, omitted for L1 only) and by clarifying that reference can be a dataset slug or an exact published digest reference. It doesn't add syntax details beyond the schema, but it reinforces the semantic distinction between the two parameters and their runtime effects.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'verify a signed published probe attestation after an evidence audit.' It clearly distinguishes the tool from siblings by naming verify_dataset, verify_evidence, and trust_verdict as alternatives for other verification tasks. The scope of L1/L2/L3 checks is explicitly stated, so an agent can tell exactly what this tool does and what it does not do.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit when-to-use and when-not-to-use guidance: use it for signed-attestation integrity, not for published receipt verification, live transport comparison, or aggregate verdicts. It also names the alternatives (verify_dataset, verify_evidence, trust_verdict) and gives a recommended deep-audit sequence: search_datasets โ get_evidence โ verify_evidence โ verify_attestation. This is exemplary routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify_datasetVerify Dataset Before RelyingARead-onlyIdempotentInspect
This is the preferred single-call pre-trust check for 'is this dataset current?', stale, unknown-freshness, degraded, or browser-dependent questions, and whenever an agent must verify before relying on data. Returns dataset metadata, published evidence and fail-closed signed receipt verification with artifact references. It verifies published artifacts, not a live source check: you may infer whether their receipt verifies, but must not infer current upstream availability or semantic truth. Use search_datasets โ verify_dataset โ get_provenance. Use it for one published pre-trust check; do not use it for a live transport comparison or attestation-chain verificationโuse verify_evidence or verify_attestation instead. It verifies precomputed published artifacts, so a failed check does not identify current upstream availability; DataPulse is read-only, requires no API key, and the edge limits clients to roughly one request per second with a small burst, so pace or retry.
| Name | Required | Description | Default |
|---|---|---|---|
| dataset_id | Yes | Stable dataset slug returned by search_datasets for the published receipt check, e.g. 'fuelprice'; this tool requires the slug, not a display name. | |
| include_proof_steps | No | Set true to include bounded verifier diagnostics for an audit, e.g. false; omit it to suppress diagnostics without changing verification. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint, idempotentHint, openWorldHint, and non-destructive hints. The description goes beyond them by disclosing that this verifies precomputed published artifacts rather than live sources, that a failed check does not indicate current upstream availability, that verification is fail-closed, and that semantic truth must not be inferred. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but each sentence carries useful information: purpose, scope, limitations, pipeline, alternatives, and rate limits. There is minor redundancy around the 'verifies published artifacts, not a live source' point, but the front-loaded purpose and the clear structure keep it effective.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with this complexity and an existing output schema, the description covers all needed operational context: when to use, what it returns, what it cannot tell the agent, alternatives, pipeline ordering, read-only auth behavior, and rate limits. Nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already fully documents both parameters, including the required slug semantics and the include_proof_steps behavior. The description does not meaningfully add parameter-level detail beyond what the schema provides, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (verify) and resource (dataset), plus a clear scope: a single-call pre-trust check for questions about currentness/staleness/freshness. It also distinguishes itself from the sibling verify_evidence and verify_attestation by naming what it is not, so an agent can route correctly without opening other schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to use it ('pre-trust check', 'before relying on data'), when not to use it ('live transport comparison' or 'attestation-chain verification'), names the alternative tools, and even gives the intended pipeline order: search_datasets โ verify_dataset โ get_provenance. Rate-limit pacing guidance is also included.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify_evidenceLive-check Published Transport EvidenceARead-onlyIdempotentInspect
Use when a fresh, rate-limited live-vs-published comparison is needed for a direct-access dataset, for example after asking whether a government dataset is reachable now. Performs a rate-limited live GET and returns comparable transport receipts plus a match, mismatch, unreachable, or not_verifiable verdict. This live check is an observation, not semantic truth: it does not recompute content dates, record counts, or shape fingerprints. Results are ephemeral and do not update published health artifacts. For a deep audit use search_datasets โ get_evidence โ verify_evidence โ verify_attestation. Use it for a live transport comparison; do not use it for published receipt integrity or signed-attestation verificationโuse verify_dataset or verify_attestation instead. An unreachable or not_verifiable verdict reports that this live comparison could not establish a match, while cached results are still ephemeral; DataPulse is read-only, requires no API key, and the edge limits clients to roughly one request per second with a small burst, so pace or retry.
| Name | Required | Description | Default |
|---|---|---|---|
| dataset_id | Yes | Stable direct-access dataset slug returned by search_datasets for a live transport observation, e.g. 'fuelprice'; browser-dependent sources return not_verifiable. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the annotations by disclosing that the live check is an observation, not semantic truth; that it does not recompute content dates, record counts, or shape fingerprints; that results are ephemeral and do not update published health artifacts; and that an unreachable or not_verifiable verdict only means the live comparison could not establish a match. It also discloses rate limits (roughly one request per second with a small burst) and that DataPulse is read-only and requires no API key. This is rich behavioral context that complements the readOnlyHint and idempotentHint annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but well-structured, front-loading the primary use case and verdict types before moving to exclusions and rate-limit details. It is longer than strictly necessary, but every sentence carries meaningful information: the observation caveat, ephemeral results, workflow sequence, exclusions, and rate limits all earn their place. The only minor issue is that the final sentence packs several distinct facts (unreachable verdict meaning, ephemerality, read-only, no API key, rate limit) into one long sentence, which slightly reduces scannability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with one parameter, a rich output schema, and comprehensive annotations, the description is complete. It covers what the tool does, when to use it, what it does not do, what the verdicts mean, rate limits, authentication requirements, and how it fits into a broader audit workflow. An agent has everything needed to select and invoke this tool correctly without opening the schema or output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already covers the single parameter dataset_id with 100% coverage, including an example and a note about browser-dependent sources returning not_verifiable. The description adds context by explaining the parameter is a stable direct-access dataset slug returned by search_datasets, which helps the agent understand where the value comes from. Since schema coverage is 100%, the baseline is 3, and the description's added context about the slug's origin and the browser-dependent caveat justifies a 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool performs a rate-limited live-vs-published comparison for a direct-access dataset and returns a verdict. It distinguishes itself from siblings by explicitly naming verify_dataset and verify_attestation as alternatives for different purposes, and the title 'Live-check Published Transport Evidence' reinforces the specific verb and resource.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit when-to-use guidance ('Use when a fresh, rate-limited live-vs-published comparison is needed'), gives a concrete example ('after asking whether a government dataset is reachable now'), and explicitly states what not to use it for ('do not use it for published receipt integrity or signed-attestation verificationโuse verify_dataset or verify_attestation instead'). It also outlines a deep-audit workflow sequence, which is strong usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
18 tool updates
v3.36.1- Changed
check_reconciliation1 field changed- changed
Input schema / properties / dataset_name / descriptionPrevious value: -"Dataset id or name to reconcile, e.g. 'interestrates' or 'Monthly Interest Rates'."New value: +"Stable dataset slug or exact display name to resolve, e.g. 'interestrates' or 'Monthly Interest Rates'; use search_datasets to discover valid values."
- Changed
find_anomalies3 fields changed- changed
Input schema / properties / limit / descriptionPrevious value: -"Maximum ranked anomalies to return; integer from 1 to 200, e.g. 50."New value: +"Maximum highest-ranked anomalies to return, e.g. 50; omit it to use 50 without changing the ranking." - changed
Input schema / properties / min_reliability / descriptionPrevious value: -"Optional minimum publish-reliability grade; e.g. 'C' keeps A, B, and C and excludes insufficient data."New value: +"Optional inclusive published reliability floor, e.g. 'C' keeps A, B, and C; omit it to retain rows regardless of grade." - changed
Input schema / properties / mode / descriptionPrevious value: -"Optional exact detection mode; e.g. 'rolling_14d' or 'cadence_fallback'."New value: +"Optional exact published detection mode filter, e.g. 'rolling_14d' or 'cadence_fallback'; omit it to include every mode."
- Changed
find_by_licence1 field changed- changed
Input schema / properties / licence / descriptionPrevious value: -"Exact licence name or supported alias, e.g. 'Creative Commons Attribution 4.0'."New value: +"Exact published licence name or supported alias, e.g. 'Creative Commons Attribution 4.0'; use search_datasets to discover licence values."
- Changed
find_deteriorating2 fields changed- changed
Input schema / properties / limit / descriptionPrevious value: -"Maximum ranked deteriorating datasets to return; integer from 1 to 200, e.g. 50."New value: +"Maximum highest-ranked deteriorating datasets to return, e.g. 50; omit it to use 50 without changing ranking." - changed
Input schema / properties / min_anomaly_rate / descriptionPrevious value: -"Optional minimum percent of anomaly-evaluable history days, e.g. 25.0."New value: +"Optional inclusive anomaly-rate filter on published history, e.g. 25.0; omit it to retain every deteriorating row."
- Changed
find_recovering1 field changed- changed
Input schema / properties / limit / descriptionPrevious value: -"Maximum ranked recovering datasets to return; integer from 1 to 200, e.g. 50."New value: +"Maximum fastest-recovering datasets to return, e.g. 50; omit it to use 50 without changing ranking."
- Changed
find_schema_drift2 fields changed- changed
Input schema / properties / limit / descriptionPrevious value: -"Maximum ranked drift results to return; integer from 1 to 200, e.g. 50."New value: +"Maximum structural-first ranked drift results to return, e.g. 50; omit it to use 50 without changing ranking." - changed
Input schema / properties / min_change_count / descriptionPrevious value: -"Minimum structural fingerprint or column-count transitions; integer from 0 to 100, e.g. 1."New value: +"Inclusive filter on the larger published shape or column transition count, e.g. 1; omit it to include every drift row."
- Changed
find_stale1 field changed- changed
Input schema / properties / max_age_hours / descriptionPrevious value: -"Maximum acceptable age of the latest health check in whole hours; non-negative integer, e.g. 72."New value: +"Maximum published-snapshot age before otherwise healthy rows are included, e.g. 72; omit it to use 24 hours."
- Changed
find_unreliable2 fields changed- changed
Input schema / properties / at_or_below_grade / descriptionPrevious value: -"Inclusive reliability threshold; e.g. 'C' returns grades C, D, and F."New value: +"Inclusive published reliability threshold; e.g. 'C' returns grades C, D, and F; omit it to use C." - changed
Input schema / properties / limit / descriptionPrevious value: -"Maximum ranked unreliable datasets to return; integer from 1 to 200, e.g. 50."New value: +"Maximum worst-ranked unreliable datasets to return, e.g. 50; omit it to use 50 without changing ranking."
- Changed
get_data_passport1 field changed- changed
Input schema / properties / dataset_id / descriptionPrevious value: -"Canonical dataset identifier for its published Passport v1, e.g. 'fuelprice'."New value: +"Stable dataset slug returned by search_datasets, e.g. 'fuelprice'; this tool requires the slug, not a display name."
- Changed
get_dataset1 field changed- changed
Input schema / properties / dataset_id / descriptionPrevious value: -"Canonical dataset identifier, e.g. 'dosm_cpi_state'. See the registry catalogue for valid IDs."New value: +"Stable dataset slug returned by search_datasets, e.g. 'dosm_cpi_state'; this tool requires the slug, not a display name."
- Changed
get_evidence1 field changed- changed
Input schema / properties / dataset_id / descriptionPrevious value: -"Canonical dataset identifier for its complete published evidence receipt, e.g. 'fuelprice'; this tool does not fetch the live source."New value: +"Stable dataset slug returned by search_datasets for its complete receipt, e.g. 'fuelprice'; this tool requires the slug, not a display name."
- Changed
get_provenance1 field changed- changed
Input schema / properties / dataset_ids / descriptionPrevious value: -"JSON array of 1 to 50 canonical dataset IDs for provenance and citation, e.g. ['fuelprice', 'pricecatcher']; this is not a live freshness check."New value: +"Dataset slugs returned by search_datasets for a batched citation lookup, e.g. ['fuelprice', 'pricecatcher']; preserve order and use get_dataset for display-name resolution."
- Changed
search_datasets4 fields changed- changed
Input schema / properties / licence / descriptionPrevious value: -"Optional exact licence name or supported alias for reuse discovery, e.g. 'CC BY 4.0'; this does not verify attribution compliance."New value: +"Optional exact licence name or supported alias applied before ranking, e.g. 'CC BY 4.0'; omit it to search every licence." - changed
Input schema / properties / limit / descriptionPrevious value: -"Maximum discovery matches to return; integer from 1 to 50, e.g. 10."New value: +"Maximum highest-ranked discovery matches to return, e.g. 10; omitted defaults to 10 and does not change ranking." - changed
Input schema / properties / query / descriptionPrevious value: -"Topic or task phrasing for Malaysian public-data discovery only, e.g. 'Malaysian public data inflation'; verify a result separately."New value: +"Topic or task phrasing used to rank discovery candidates, e.g. 'Malaysian public data inflation'; use a returned id with get_dataset." - changed
Input schema / properties / source / descriptionPrevious value: -"Optional case-insensitive publisher/source filter, e.g. 'OpenDOSM'."New value: +"Optional publisher/source substring filter applied before ranking, e.g. 'OpenDOSM'; omit it to search every source."
- Changed
trust_verdict1 field changed- changed
Input schema / properties / dataset_id / descriptionPrevious value: -"Canonical dataset identifier to aggregate, e.g. 'fuelprice'."New value: +"Stable dataset slug returned by search_datasets to aggregate, e.g. 'fuelprice'; display names are not resolved here."
- Changed
usage_summary2 fields changed- changed
Input schema / properties / since / descriptionPrevious value: -"Inclusive ISO start date YYYY-MM-DD, e.g. '2026-08-01'."New value: +"Inclusive first day of the persisted-record window, e.g. '2026-08-01'; it must not be after until." - changed
Input schema / properties / until / descriptionPrevious value: -"Inclusive ISO end date YYYY-MM-DD, e.g. '2026-08-07'."New value: +"Inclusive last day of the persisted-record window, e.g. '2026-08-07'; it must not be before since."
- Changed
verify_attestation2 fields changed- changed
Input schema / properties / reference / descriptionPrevious value: -"Dataset id or safe relative published digest reference for signed-attestation verification, e.g. 'fuelprice'."New value: +"Dataset slug returned by search_datasets or an exact published digest reference, e.g. 'fuelprice'; the slug resolves through the attestation index." - changed
Input schema / properties / replay_chain / descriptionPrevious value: -"Replay signed daily heads to a Git-tag anchor for L2 verification, e.g. true for an auditor."New value: +"Set true to perform the slower L2 daily-head replay to a Git tag, e.g. true; omit it to run L1 only."
- Changed
verify_dataset2 fields changed- changed
Input schema / properties / dataset_id / descriptionPrevious value: -"Canonical dataset identifier for the published pre-trust receipt check, e.g. 'fuelprice'; this does not perform a live source fetch."New value: +"Stable dataset slug returned by search_datasets for the published receipt check, e.g. 'fuelprice'; this tool requires the slug, not a display name." - changed
Input schema / properties / include_proof_steps / descriptionPrevious value: -"Include bounded signed-receipt verifier diagnostics for an audit, e.g. false; the result still does not establish upstream semantic truth."New value: +"Set true to include bounded verifier diagnostics for an audit, e.g. false; omit it to suppress diagnostics without changing verification."
- Changed
verify_evidence1 field changed- changed
Input schema / properties / dataset_id / descriptionPrevious value: -"Canonical direct-access dataset identifier for a rate-limited live transport observation, e.g. 'fuelprice'; browser-dependent sources cannot be fetched here."New value: +"Stable direct-access dataset slug returned by search_datasets for a live transport observation, e.g. 'fuelprice'; browser-dependent sources return not_verifiable."
8 tool updates
v0.12.0- Added
get_data_passport - Changed
get_evidence1 field changed- changed
Input schema / properties / dataset_id / descriptionPrevious value: -"Canonical dataset identifier for a deep receipt, e.g. 'fuelprice'."New value: +"Canonical dataset identifier for its complete published evidence receipt, e.g. 'fuelprice'; this tool does not fetch the live source."
- Changed
get_provenance1 field changed- changed
Input schema / properties / dataset_ids / descriptionPrevious value: -"JSON array of 1 to 50 canonical dataset IDs, e.g. ['fuelprice', 'pricecatcher']."New value: +"JSON array of 1 to 50 canonical dataset IDs for provenance and citation, e.g. ['fuelprice', 'pricecatcher']; this is not a live freshness check."
- Changed
search_datasets5 fields changed- changed
Input schema / properties / licence / descriptionPrevious value: -"Optional exact licence name or supported alias, e.g. 'CC BY 4.0'."New value: +"Optional exact licence name or supported alias for reuse discovery, e.g. 'CC BY 4.0'; this does not verify attribution compliance." - changed
Input schema / properties / limit / descriptionPrevious value: -"Maximum ranked matches to return; integer from 1 to 50, e.g. 10."New value: +"Maximum discovery matches to return; integer from 1 to 50, e.g. 10." - changed
Input schema / properties / query / descriptionPrevious value: -"Free-text search terms; natural language is allowed, e.g. 'inflation cpi'."New value: +"Topic or task phrasing for Malaysian public-data discovery only, e.g. 'Malaysian public data inflation'; verify a result separately." - changed
Input schema / properties / query / examplesPrevious value: -[ - "inflation cpi" -]New value: +[ + "Malaysian public data inflation" +] - changed
Input schema / properties / source / descriptionPrevious value: -"Optional case-insensitive source-name substring, e.g. 'OpenDOSM'."New value: +"Optional case-insensitive publisher/source filter, e.g. 'OpenDOSM'."
- Changed
usage_summary2 fields changed- removed
Input schema / properties / buyer_idRemoved value: -{ - "description": "Buyer identifier, e.g. 'pro-default' or 'anonymous'.", - "examples": [ - "pro-default" - ], - "minLength": 1, - "type": "string" -} - changed
Input schema / requiredPrevious value: -[ - "buyer_id", - "since", - "until" -]New value: +[ + "since", + "until" +]
- Changed
verify_attestation2 fields changed- changed
Input schema / properties / reference / descriptionPrevious value: -"Dataset id or relative digest reference, e.g. 'fuelprice'."New value: +"Dataset id or safe relative published digest reference for signed-attestation verification, e.g. 'fuelprice'." - changed
Input schema / properties / replay_chain / descriptionPrevious value: -"Replay daily heads to the newest tag anchor, e.g. true for an auditor."New value: +"Replay signed daily heads to a Git-tag anchor for L2 verification, e.g. true for an auditor."
- Changed
verify_dataset2 fields changed- changed
Input schema / properties / dataset_id / descriptionPrevious value: -"Canonical dataset identifier to verify before trust, e.g. 'fuelprice'."New value: +"Canonical dataset identifier for the published pre-trust receipt check, e.g. 'fuelprice'; this does not perform a live source fetch." - changed
Input schema / properties / include_proof_steps / descriptionPrevious value: -"Include bounded Cosign verifier output for audit steps, e.g. false."New value: +"Include bounded signed-receipt verifier diagnostics for an audit, e.g. false; the result still does not establish upstream semantic truth."
- Changed
verify_evidence1 field changed- changed
Input schema / properties / dataset_id / descriptionPrevious value: -"Canonical direct-access dataset identifier to re-fetch, e.g. 'fuelprice'."New value: +"Canonical direct-access dataset identifier for a rate-limited live transport observation, e.g. 'fuelprice'; browser-dependent sources cannot be fetched here."
18 tool updates
v1.0.2- Added
check_reconciliation - Added
find_anomalies - Added
find_by_licence - Added
find_deteriorating - Added
find_recovering - Added
find_schema_drift - Added
find_stale - Added
find_unreliable - Added
get_dataset - Added
get_evidence - Added
get_freshness_summary - Added
get_provenance - Added
search_datasets - Added
trust_verdict - Added
usage_summary - Added
verify_attestation - Added
verify_dataset - Added
verify_evidence
TDQS
Scored across 19 tools
The find_* family is clearly distinct, but there is meaningful overlap among get_dataset, get_data_passport, get_provenance, get_evidence, verify_dataset, trust_verdict, and verify_attestation, all of which return related trust/evidence information. The descriptions use explicit 'use X not Y' guidance, yet an agent could still misselect, especially since get_dataset itself mentions provenance/citation metadata.
Names are uniformly lowercase snake_case and mostly follow a verb_noun pattern like search_datasets, find_stale, and verify_evidence. A few names such as usage_summary and trust_verdict are noun-phrase style, but the overall convention is predictable and readable.
With 19 tools, the server sits in the 16-25 range that feels heavy. Many tools are narrowly scoped variants of finding risk signals or verifying evidence, so the surface could plausibly be consolidated without losing much functionality.
For a read-only data-trust server, the surface is remarkably complete: discovery, metadata, freshness summaries, stale/anomaly/trend/reliability/drift detection, reconciliation, provenance, evidence receipts, live verification, attestation, trust verdicts, and licence filtering are all present. No obvious dead ends or missing lifecycle operations for the stated domain.
Maintenance
Related MCP Connectors
This MCP server provides seamless access to Malaysia's government open data, including datasets, wโฆ
data.gov.my / OpenDOSM (Department of Statistics Malaysia) โ official Malaysian open-data API.
Official UK, US and Australia public datasets as filtered CSV, REST API and MCP for AI agents.
data.gov.sg MCP โ Singapore open data + real-time environment/transport feeds
Related MCP Servers
- AlicenseAqualityDmaintenanceModel Context Protocol (MCP) server that provides weather forecast, warnings, water level associated with flood, and earthquake reports from Malaysia Government's Open API.41MIT
- AlicenseAqualityDmaintenanceProvides seamless access to Malaysia's official government data catalogue, enabling developers to discover, explore, and fetch datasets from the Malaysian government's open data platform through a simple, unified interface.42 npm12ISC
- AlicenseNot gradedqualityDmaintenance26 US federal data domains as 23 MCP tools. Ed25519 signed responses. Free, no API key.68 npm1MIT
- AlicenseNot gradedqualityCmaintenanceConnects to Malaysia's OpenDOSM open data API via Pipeworx, enabling access to official statistics through MCP tools or natural language queries.2 npmMIT