This site mirrors the complete catalogue of the SingStat Table Builder and reads it live through the official SingStat MCP server. Browse the whole catalogue, drill into any table's series, and pull the current figures straight from the source.
The latest published value for each headline series, with the change against the previous period and a 24-point trend. Figures as returned by SingStat; the change is calculated here.
Twelve of the most-used tables, plotted from the data SingStat returns. Every chart has a table view with the same numbers — hover for exact values, or switch to the table.
The complete SingStat catalogue. Search titles and resource IDs, filter by theme, subject, frequency or publishing agency, then open any table for its full series list and live data.
| ID | Table | Frequency | Coverage | Series | Updated |
|---|
All 6 themes, 52 subjects and 205 topics in the catalogue. Pick a topic to filter the table list above.
Every public sector body that contributes tables to the SingStat Table Builder, with how many each publishes. Click one to filter the table list.
This site is built on the official Model Context Protocol server published by the Singapore Department of Statistics. It needs no API key, and any MCP-capable AI client can connect to it.
https://chatwithsandra.singstat.gov.sg/mcp
Streamable HTTP · no authentication · server DOSTableBuilderMCP v3.2.4 ·
protocol 2025-06-18.
# add the remote server claude mcp add singstat-mcp \ --transport http \ https://chatwithsandra.singstat.gov.sg/mcp # confirm it connected claude mcp list
{
"mcpServers": {
"singstat-mcp": {
"type": "http",
"url": "https://chatwithsandra.singstat.gov.sg/mcp"
}
}
}
Drop into ~/.claude.json, .mcp.json, or your IDE's MCP setup screen.
In chat clients, add it under Settings → Connectors as a custom connector.
Searches the catalogue and returns matching tables grouped by title, with a resource ID per frequency/seasonality variant.
| Parameter | Type | Required |
|---|---|---|
| query_text | string | yes |
Structural metadata for one table. Always call this before fetching data —
it supplies the seriesNo row numbers and the valid period range that the
data call filters on.
| Parameter | Type | Required |
|---|---|---|
| resource_id | string | yes |
Returns the data points. Capped at 3,000 rows per response — narrow with the series and time filters rather than paging blindly.
| Parameter | Type | Required |
|---|---|---|
| resource_id | string | yes |
| seriesNoORrowNo | string · null | no |
| timeFilter | [from, to] · null | no |
| offset | string · null | no |
from fastmcp import Client mcp = Client("https://chatwithsandra.singstat.gov.sg/mcp") async with mcp: tables = await mcp.call_tool( 'get_relevant_table_names', {'query_text': 'GDP'}) meta = await mcp.call_tool( 'get_table_metadata', {'resource_id': 'M015631'}) data = await mcp.call_tool('get_table_data', { 'resource_id': 'M015631', 'seriesNoORrowNo': '1,1.1,1.2', 'timeFilter': ('2024-01', '2026-01')})