DATAPULSE · DOCUMENTATION

MCP reference

Public documentation for the DataPulse MY read-only trust layer.

DataPulse MY exposes 18 read-only tools over 418 datasets and the 10-status health taxonomy at https://mcp.data-pulse.my/mcp.

Tools

search_datasets

Search DataPulse MY's 418 Malaysian public datasets by natural-language query. Filter by licence (e.g. 'CC BY 4.0', 'Open Government Licence (Malaysia)') or source ('OpenDOSM', 'data.gov.my', 'MET Malaysia', etc.). Returns ranked matches: id, title, source, licence, status, score. Use when an agent needs to find datasets covering a topic, by an agency, or under a specific licence.

Input schema:

{
  "additionalProperties": false,
  "properties": {
    "query": {
      "description": "Free-text search terms; natural language is allowed, e.g. 'inflation cpi'.",
      "examples": [
        "inflation cpi"
      ],
      "minLength": 1,
      "type": "string"
    },
    "licence": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Optional exact licence name or supported alias, e.g. 'CC BY 4.0'.",
      "examples": [
        "CC BY 4.0",
        "Open Government Licence (Malaysia)"
      ]
    },
    "source": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Optional case-insensitive source-name substring, e.g. 'OpenDOSM'.",
      "examples": [
        "OpenDOSM",
        "data.gov.my",
        "MET Malaysia"
      ]
    },
    "limit": {
      "default": 10,
      "description": "Maximum ranked matches to return; integer from 1 to 50, e.g. 10.",
      "maximum": 50,
      "minimum": 1,
      "type": "integer"
    }
  },
  "required": [
    "query"
  ],
  "type": "object"
}

get_dataset

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.

Input schema:

{
  "additionalProperties": false,
  "properties": {
    "dataset_id": {
      "description": "Canonical dataset identifier, e.g. 'dosm_cpi_state'. See the registry catalogue for valid IDs.",
      "examples": [
        "dosm_cpi_state"
      ],
      "minLength": 1,
      "type": "string"
    }
  },
  "required": [
    "dataset_id"
  ],
  "type": "object"
}

find_stale

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.

Input schema:

{
  "additionalProperties": false,
  "properties": {
    "max_age_hours": {
      "default": 24,
      "description": "Maximum acceptable age of the latest health check in whole hours; non-negative integer, e.g. 72.",
      "examples": [
        24,
        72
      ],
      "minimum": 0,
      "type": "integer"
    }
  },
  "type": "object",
  "required": []
}

find_anomalies

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.

Input schema:

{
  "additionalProperties": false,
  "properties": {
    "limit": {
      "default": 50,
      "description": "Maximum ranked anomalies to return; integer from 1 to 200, e.g. 50.",
      "examples": [
        10,
        50
      ],
      "maximum": 200,
      "minimum": 1,
      "type": "integer"
    },
    "mode": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Optional exact detection mode; e.g. 'rolling_14d' or 'cadence_fallback'.",
      "examples": [
        "rolling_14d",
        "cadence_fallback"
      ]
    },
    "min_reliability": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Optional minimum publish-reliability grade; e.g. 'C' keeps A, B, and C and excludes insufficient data.",
      "examples": [
        "A",
        "C"
      ]
    }
  },
  "type": "object",
  "required": []
}

find_deteriorating

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.

Input schema:

{
  "additionalProperties": false,
  "properties": {
    "limit": {
      "default": 50,
      "description": "Maximum ranked deteriorating datasets to return; integer from 1 to 200, e.g. 50.",
      "examples": [
        10,
        50
      ],
      "maximum": 200,
      "minimum": 1,
      "type": "integer"
    },
    "min_anomaly_rate": {
      "anyOf": [
        {
          "maximum": 100,
          "minimum": 0,
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Optional minimum percent of anomaly-evaluable history days, e.g. 25.0.",
      "examples": [
        25.0,
        50.0
      ]
    }
  },
  "type": "object",
  "required": []
}

find_recovering

Return datasets whose published freshness trend is recovering, with the fastest staleness reductions first. Includes pipeline-computed trend and publish-reliability evidence.

Input schema:

{
  "additionalProperties": false,
  "properties": {
    "limit": {
      "default": 50,
      "description": "Maximum ranked recovering datasets to return; integer from 1 to 200, e.g. 50.",
      "examples": [
        10,
        50
      ],
      "maximum": 200,
      "minimum": 1,
      "type": "integer"
    }
  },
  "type": "object",
  "required": []
}

find_unreliable

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.

Input schema:

{
  "additionalProperties": false,
  "properties": {
    "limit": {
      "default": 50,
      "description": "Maximum ranked unreliable datasets to return; integer from 1 to 200, e.g. 50.",
      "examples": [
        10,
        50
      ],
      "maximum": 200,
      "minimum": 1,
      "type": "integer"
    },
    "at_or_below_grade": {
      "default": "C",
      "description": "Inclusive reliability threshold; e.g. 'C' returns grades C, D, and F.",
      "examples": [
        "C",
        "F"
      ],
      "type": "string"
    }
  },
  "type": "object",
  "required": []
}

find_schema_drift

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.

Input schema:

{
  "additionalProperties": false,
  "properties": {
    "limit": {
      "default": 50,
      "description": "Maximum ranked drift results to return; integer from 1 to 200, e.g. 50.",
      "examples": [
        10,
        50
      ],
      "maximum": 200,
      "minimum": 1,
      "type": "integer"
    },
    "min_change_count": {
      "default": 0,
      "description": "Minimum structural fingerprint or column-count transitions; integer from 0 to 100, e.g. 1.",
      "examples": [
        0,
        1
      ],
      "maximum": 100,
      "minimum": 0,
      "type": "integer"
    }
  },
  "type": "object",
  "required": []
}

check_reconciliation

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.

Input schema:

{
  "additionalProperties": false,
  "properties": {
    "dataset_name": {
      "description": "Dataset id or name to reconcile, e.g. 'interestrates' or 'Monthly Interest Rates'.",
      "examples": [
        "interestrates",
        "Monthly Interest Rates"
      ],
      "minLength": 1,
      "type": "string"
    }
  },
  "required": [
    "dataset_name"
  ],
  "type": "object"
}

get_provenance

Return citation-ready provenance metadata for the listed dataset ids, plus compact pipeline-published evidence receipts: row probe time, HTTP status, request URL, access dependency, freshness source, content date, record count, shape fingerprint, anomaly flag, and status. Use when an agent must cite data and show the evidence behind the trust claim without recomputing it.

Input schema:

{
  "additionalProperties": false,
  "properties": {
    "dataset_ids": {
      "description": "JSON array of 1 to 50 canonical dataset IDs, e.g. ['fuelprice', 'pricecatcher'].",
      "examples": [
        [
          "fuelprice",
          "pricecatcher"
        ]
      ],
      "items": {
        "type": "string"
      },
      "maxItems": 50,
      "minItems": 1,
      "type": "array"
    }
  },
  "required": [
    "dataset_ids"
  ],
  "type": "object"
}

get_evidence

Return the complete pipeline-published evidence receipt for one dataset id, including probe time, transport, access dependency, freshness, record-count, shape, tolerance, status, and anomaly fields. Use for a deep audit, e.g. get_evidence('fuelprice'); values are presented without MCP-side recomputation.

Input schema:

{
  "additionalProperties": false,
  "properties": {
    "dataset_id": {
      "description": "Canonical dataset identifier for a deep receipt, e.g. 'fuelprice'.",
      "examples": [
        "fuelprice"
      ],
      "minLength": 1,
      "type": "string"
    }
  },
  "required": [
    "dataset_id"
  ],
  "type": "object"
}

verify_dataset

Verify one dataset before trust in a single read-only call. Returns dataset metadata, the published health and evidence rows, and a fail-closed Sigstore per-dataset receipt verification result with artifact references. Use verify_dataset('fuelprice') before relying on a dataset claim.

Input schema:

{
  "additionalProperties": false,
  "properties": {
    "dataset_id": {
      "description": "Canonical dataset identifier to verify before trust, e.g. 'fuelprice'.",
      "examples": [
        "fuelprice"
      ],
      "minLength": 1,
      "type": "string"
    },
    "include_proof_steps": {
      "default": false,
      "description": "Include bounded Cosign verifier output for audit steps, e.g. false.",
      "examples": [
        false,
        true
      ],
      "type": "boolean"
    }
  },
  "required": [
    "dataset_id"
  ],
  "type": "object"
}

get_freshness_summary

Return a freshness-at-a-glance summary of the published catalogue: fresh, aging, stale, and reference counts plus the latest health check time.

Input schema:

{
  "additionalProperties": false,
  "properties": {},
  "type": "object",
  "required": []
}

verify_evidence

Perform a rate-limited live streamed GET for one direct-access dataset and compare transport receipts with the latest published evidence, e.g. verify_evidence('fuelprice'). Content dates, row counts, and shape fingerprints remain pipeline-only and are explicitly reported as unverified; results are ephemeral and never update health artifacts. Returns a dict with transport receipt fields and a verdict for downstream trust checks without re-fetching.

Input schema:

{
  "additionalProperties": false,
  "properties": {
    "dataset_id": {
      "description": "Canonical direct-access dataset identifier to re-fetch, e.g. 'fuelprice'.",
      "examples": [
        "fuelprice"
      ],
      "minLength": 1,
      "type": "string"
    }
  },
  "required": [
    "dataset_id"
  ],
  "type": "object"
}

trust_verdict

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.

Input schema:

{
  "additionalProperties": false,
  "properties": {
    "dataset_id": {
      "description": "Canonical dataset identifier to aggregate, e.g. 'fuelprice'.",
      "examples": [
        "fuelprice"
      ],
      "minLength": 1,
      "type": "string"
    }
  },
  "required": [
    "dataset_id"
  ],
  "type": "object"
}

verify_attestation

Verify a published Ed25519 probe attestation by canonical dataset id or safe relative digest reference, e.g. 'fuelprice' or 'attestations/2026-08-15/fuelprice.json'. L1 checks signature/key validity; optional L2 replays daily heads to a Git-tag anchor; L3 is provided by verify_evidence. Returns levels.L1.signature_valid and levels.L2.satisfied for signature and replay status.

Input schema:

{
  "additionalProperties": false,
  "properties": {
    "reference": {
      "description": "Dataset id or relative digest reference, e.g. 'fuelprice'.",
      "examples": [
        "fuelprice",
        "attestations/2026-08-15/fuelprice.json"
      ],
      "minLength": 1,
      "type": "string"
    },
    "replay_chain": {
      "default": false,
      "description": "Replay daily heads to the newest tag anchor, e.g. true for an auditor.",
      "examples": [
        false,
        true
      ],
      "type": "boolean"
    }
  },
  "required": [
    "reference"
  ],
  "type": "object"
}

find_by_licence

Return all datasets with the given licence, summarised. Use to enumerate what's available under a specific licence for compliance/reuse scoping.

Input schema:

{
  "additionalProperties": false,
  "properties": {
    "licence": {
      "description": "Exact licence name or supported alias, e.g. 'Creative Commons Attribution 4.0'.",
      "examples": [
        "Creative Commons Attribution 4.0",
        "CC BY 4.0",
        "OGL"
      ],
      "minLength": 1,
      "type": "string"
    }
  },
  "required": [
    "licence"
  ],
  "type": "object"
}

usage_summary

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_distribution (per-status counts of cited datasets) for the inclusive range. Legacy identity fields are ignored.

Input schema:

{
  "additionalProperties": false,
  "properties": {
    "since": {
      "description": "Inclusive ISO start date YYYY-MM-DD, e.g. '2026-08-01'.",
      "examples": [
        "2026-08-01"
      ],
      "type": "string"
    },
    "until": {
      "description": "Inclusive ISO end date YYYY-MM-DD, e.g. '2026-08-07'.",
      "examples": [
        "2026-08-07"
      ],
      "type": "string"
    }
  },
  "required": [
    "since",
    "until"
  ],
  "type": "object"
}

Resources

  • datapulse://index — Read first; lightweight list of all DataPulse MY dataset ids with current status, title, source, licence, and namespace.
  • datapulse://anomalies — Datasets flagged by the latest published anomaly detection, ranked by severity with pipeline-computed evidence.
  • datapulse://trends — Published per-dataset freshness trends and publish-reliability evidence, including methodology and aggregate counts.
  • datapulse://reliability — Live count of DataPulse MY datasets by evaluated publish-reliability grade; reliability is timeliness, not uptime.
  • datapulse://drift — Published per-dataset schema and record-count drift evidence, including methodology and aggregate verdict counts.
  • datapulse://reconciliation — Published cross-source reconciliation groups with pairwise count, date, status, tolerance, and verdict evidence.
  • datapulse://attestations — Latest signed probe attestation index and daily chain head.
  • datapulse://licences — Live count of DataPulse MY datasets grouped by licence.

Resource templates

  • datapulse://citation/{dataset_id} — Canonical evidence-bound citation for one exact DataPulse MY dataset id.
  • datapulse://{dataset_id} — Full published manifest entry for one exact DataPulse MY dataset id.