← SingStatCONTENT HISTORY

Update to SingStat

Snapshot Oct 24, 2026 · 13:52 UTC · version 1.0.0

Collection source: downloaded plugin package.

WHAT CHANGED

First saved snapshot

No earlier snapshot is available to establish a change.

Save SingStat and check future changes in Following.

Up to 10 plugins free · no card required.

Compare saved observations

Download comparison JSON
Full technical diff · 0 changed fields
Full snapshot data
{
  "description": "Find, retrieve, compare, and explain official Singapore economic, population, household, industry, trade, and social statistics using the SingStat MCP tools. Use when answering questions requiring official Singapore statistics, table metadata, or series discovery from the SingStat Table Builder.",
  "included_files": [],
  "name": "Explore Singstat data",
  "skill_md_contents": "---\nname: Explore Singstat data\ndescription: Find, retrieve, compare, and explain official Singapore economic, population, household, industry, trade, and social statistics using the SingStat MCP tools. Use when answering questions requiring official Singapore statistics, table metadata, or series discovery from the SingStat Table Builder.\n---\n\n# SingStat Skill\n\nUse this skill to answer questions that require official Singapore statistics from the SingStat Table Builder. Follow the continuous execution pipeline below, routing dynamically based on user intent.\n\n## Execution Pipeline\n\n### Step 1: Table Discovery (If Resource ID is not provided)\n1. If the user provided a direct `resource_id` matching `M######` (e.g., `M015321`), **skip to Step 2**.\n2. Otherwise, call `get_relevant_table_names` with `query_text` (capped at 500 characters).\n3. **Intent Check & Decision:**\n   - **Table Discovery Only:** If the user only asked to find or list available datasets (e.g., *\"What tables exist for CPI?\"*), present the matching table names, subjects, frequencies, and resource IDs, then **stop**.\n   - **Ambiguous Match:** If multiple candidates fit and no single best match exists that fulfills the query, list top candidate tables with resource IDs and briefly ask the user to select.\n   - **Unambiguous Match / General Data Query:** Select the strongest matching table, state which resource ID is chosen, and **continue immediately to Step 2**.\n\n### Step 2: Metadata Inspection\n1. Verify `resource_id` matches pattern `M######` (letter M followed by 6 digits). Reject invalid formats prior to tool invocation.\n2. Call `get_table_metadata` for the target `resource_id`.\n3. **Intent Check & Decision:**\n   - **Metadata / Structure Query Only:** If the user only asked about table structure, series numbers, coverage ranges, or definitions (e.g., *\"What series are in table M015321?\"*), report the metadata details directly and **stop**.\n   - **Data Query:** Extract the relevant `seriesNo`, `unit`, `frequency`, and `startPeriod`/`endPeriod` boundaries, and **continue immediately to Step 3**.\n\n### Step 3: Data Retrieval & Pagination\nCall `get_table_data` using parameters configured from Step 2:\n- `resource_id` (required): `M######` format.\n- `seriesNoORrowNo` (optional): Digits, commas, and periods only (e.g., `1` or `1,2,3`). Use `seriesNo` values from metadata `row[]`, not descriptive labels.\n- `timeFilter` (optional): `[start, end]` array in `yyyy-mm` format. Both bounds must lie within metadata `startPeriod` and `endPeriod`, with `start` $\\le$ `end`.\n- `offset` (optional): Digits only for response pagination.\n\n### Step 4: Formatting, Output Presentation & Partial Results\n1. **Tables:** Format requested time series or comparative figures as a clean Markdown table. State the table title, resource ID, period, frequency, and unit.\n2. **Partial Results & Pagination Disclosures:**\n   - The service caps responses at 3,000 rows per request.\n   - When the data limit is reached or the tool returns a message indicating a truncated set (e.g., `Set time filter to [start, end] to retrieve next set of data`):\n     - Present the partial results retrieved so far immediately rather than omitting them.\n     - State clearly that the displayed results are incomplete for the full requested window.\n     - Identify the exact coverage retrieved (e.g., date range or series numbers returned).\n     - Inform the user how to retrieve the next chunk by specifying the suggested time filter range (e.g., `Set time filter to [start, end]`) or by narrowing `seriesNoORrowNo`.\n3. **Footnotes:** Surface any row-level or top-level footnotes that impact data interpretation.\n4. **Integrity:** Never silently convert SingStat's `na` or `-` notations to zero. Do not invent or interpolate missing data points.\n5. **Calculations:** Mark user-facing derived figures (e.g., growth rates, averages, percentage changes) explicitly as assistant calculations—do not attribute derived math to SingStat.\n\n---\n\n## Tool Input Validation Rules\n\n| Parameter | Validation Rule | Action on Failure |\n| --- | --- | --- |\n| `resource_id` | Must match `M######` (e.g., `M015321`) | Reject before call |\n| `query_text` | String length $\\le 500$ characters | Shorten input |\n| `seriesNoORrowNo` | Digits, commas, and periods only | Cross-reference against metadata `seriesNo` |\n| `timeFilter` | Array `[\"yyyy-mm\", \"yyyy-mm\"]` within `startPeriod`/`endPeriod` | Re-check bounds from metadata |\n| `offset` | Numeric digits only | Omit or correct |\n\n---\n\n## Tool Error & System Messages\n\n| Response Message Pattern | Meaning | Handling Procedure |\n| --- | --- | --- |\n| `Set time filter to [start, end] to retrieve next set of data` | Response row limit reached; tool returned next suggested date range | Display retrieved partial data, inform user results are partial, and explicitly state the recommended `timeFilter` range to fetch the remaining data |\n| `\"Invalid Resource ID input.\"` | `resource_id` format mismatch | Fix string; do not retry unchanged |\n| `\"Invalid seriesNoORrowNo input.\"` | Contains illegal characters | Re-verify `seriesNo` from `get_table_metadata` |\n| `\"Invalid timeFilter input.\"` | Out of range or invalid date format | Adjust dates to match table metadata bounds |\n| `\"Search input exceeds character limit.\"` | `query_text` exceeded 500 chars | Truncate search terms |\n| `\"Error occured. Please try again later.\"` | Server exception | Retry once; if persistent, state service is temporarily unavailable |\n\n---\n\n## Resource Links & Connection Info\n\n- **Time-Series Link:** `https://tablebuilder.singstat.gov.sg/table/TS/<resource_id>`\n- **Cross-Sectional Link:** `https://tablebuilder.singstat.gov.sg/table/CT/<resource_id>`\n- **Official Documentation:** `https://www.singstat.gov.sg/data-tools-services/singstat-mcp`\n- **MCP Endpoint:** `https://chatwithsandra.singstat.gov.sg/mcp`"
}

SHA-256 of public snapshot: 17f96b8bb3f01db5fb468008c465075d80fb4f7a296e94ff5a7aedace048e7cb