Server data from the Official MCP Registry
Singapore government data for AI agents: ACRA, HDB, COE, URA, SingStat, MAS, IRAS. 87 tools.
Singapore government data for AI agents: ACRA, HDB, COE, URA, SingStat, MAS, IRAS. 87 tools.
A well-architected Singapore government data MCP server with no authentication requirements (data is public), careful credential handling (no API keys needed), and appropriate network permissions for its purpose. The codebase demonstrates good security practices: server-side filtering via datastore_search to avoid full dataset ingestion, bounded fetch operations with safety caps, and proper error handling. Minor code quality observations (broad catch-all handlers, some verbose patterns) do not substantially impact security. Supply chain analysis found 1 known vulnerability in dependencies (0 critical, 1 high severity). Package verification found 1 issue.
3 files analyzed · 6 issues found
Security scores are indicators to help you make informed decisions, not guarantees. Always review permissions before connecting any MCP server.
This plugin requests these system permissions. Most are normal for its category.
Add this to your MCP configuration file:
{
"mcpServers": {
"io-github-sypherin-sgdata-mcp": {
"args": [
"-y",
"@altronis/sgdata-mcp"
],
"command": "npx"
}
}
}From the project's GitHub README.
A Singapore government data MCP server. 87 tools — 24 curated datasets + 7 SingStat tables + 6 live real-time feeds, CLI mode, data visualization, cross-dataset queries, natural language queries. Covering ACRA + HDB + URA + COE + CPI + GDP + employment + IRAS + MAS FX + MOE + ECDA + tourism + retail + population + crime + health + energy + hawkers + air quality + weather + carparks + live dengue. No API keys. Runs anywhere MCP runs. Full write-up: https://altronis.sg/blog/sgdata-mcp
@altronis/sgdata-mcp is an MCP server that
lets Claude, Cursor, Continue, or any other MCP-compatible client query
Singapore government open data directly from data.gov.sg — corporate registry,
real estate, labour, prices, public services, capital flows, crime, health,
demographics, energy, and more.
It runs as a local stdio process on your machine. No hosted backend, no API
keys. Small curated datasets cache locally at ~/.sgdata-mcp/sgdata.sqlite;
large datasets (ACRA, HDB resale) and real-time feeds query data.gov.sg
server-side so they never download a whole dataset onto your disk.
v0.5.0: 13 new tools + a smaller footprint. Real-time feeds — sg_psi
(air quality), sg_weather_forecast, sg_air_temperature, sg_rainfall,
sg_carpark_availability, and sg_dengue_clusters (live NEA clusters — current
dengue, vs the frozen weekly-bulletin feed). SingStat tables —
sg_household_income, sg_wages, sg_deaths, sg_marriages, sg_divorces,
sg_trade, sg_labour_force. sg_search_datasets now actually searches
(data.gov.sg's q param is a no-op upstream, so it filters a cached catalog
locally). ACRA + HDB-resale tools query server-side (datastore_search)
instead of ingesting the full 56 MB / 23 MB datasets — no more multi-GB local
cache. FX tools fixed (upstream metadata endpoint 404s; they now read live data
via datastore_search).
⚠️
sg_acra_formations_by_ssicis a heavy tool. ACRA's SSIC+year filter can't be pushed server-side, so it crawls 27 shards with rate-limit backoff — expect ~1–3 minutes, and for older years the count is a lower bound (bounded: true). For fast formation counts by SSIC use the SingStatsg_formations_history/sg_formations_compare/sg_formations_monthlytools instead.
v0.4.1: sg_dataset_query no longer hangs on very large datasets
(size-gated server-side paging via datastore_search + a 60s ingest guard);
sg_fx_rate / sg_fx_history now accept ISO currency codes (USD, GBP,
JPY, EUR, …); sg_tourism_latest now emits data_freshness (its upstream
stops at 2014); and the _history tools return an available label list on a
no-match so callers can self-correct.
v0.4.0 highlights: data_freshness metadata block emitted on every
_latest tool — last_period, last_record_date, age_days, and a
categorical level of fresh / ok / stale / frozen so agents can
detect when an upstream data.gov.sg feed has gone silent. Fixes silent
stale-data on sg_disease_latest (MOH stopped publishing the Weekly
Infectious Disease Bulletin via data.gov.sg around epi week 2022-W52).
v0.3.2: Monthly business formations + cessations + net growth tools via SingStat Table Builder. Track month-by-month company creation vs closure for any SSIC industry. 74 tools total.
v0.3.1: Annual formation counts by industry via SingStat Table Builder.
v0.3.0: 8 new datasets, CLI mode, ASCII sparkline visualization, cross-dataset correlation queries, natural language query routing.
@altronis/sgdata-mcp is only as fresh as data.gov.sg. Some datasets are
updated weekly (COE bidding, CPI), some monthly (unemployment, CPI sub-items),
some quarterly (URA private property), and some have effectively stopped
updating. Starting in v0.4.0 every _latest tool returns a data_freshness
block so you can detect drift programmatically:
{
"datasetId": "d_ca168b2cb763640d72c4600a68f9909e",
"epi_week": "2022-W52",
"cases": [...],
"data_freshness": {
"last_period": "2022-W52",
"last_record_date": "2023-01-01",
"age_days": 1234,
"level": "frozen",
"warning": "Upstream dataset appears frozen — latest record is 2022-W52..."
}
}
Known frozen datasets (as of v0.4.1):
| Tool | Upstream dataset | Last update | Recommended action |
|---|---|---|---|
sg_disease_latest, sg_disease_trend, sg_disease_list | MOH Weekly Infectious Disease Bulletin | 2022-W52 | Cross-check moh.gov.sg weekly bulletin PDFs. PRs welcome to swap in a live source. |
sg_tourism_latest, sg_tourism_history | STB Annual Tourism Receipts | 2014 | Cross-check stb.gov.sg / SingStat for newer receipts. PRs welcome. |
If you find another upstream feed has gone silent, please open an issue — we'll add it to this table and surface the warning in the tool description.
Drop this server into Claude Desktop and you immediately unlock questions like:
Your model picks the right tool, fills in the filters, and returns structured rows. You never write a URL.
Edit ~/Library/Application Support/Claude/claude_desktop_config.json
(macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):
{
"mcpServers": {
"sg-data": {
"command": "npx",
"args": ["-y", "@altronis/sgdata-mcp"]
}
}
}
Restart Claude Desktop. The 74 sg_* tools appear in the MCP tools menu.
Add to ~/.cursor/mcp.json:
{
"mcpServers": {
"sg-data": {
"command": "npx",
"args": ["-y", "@altronis/sgdata-mcp"]
}
}
}
claude mcp add sg-data -- npx -y @altronis/sgdata-mcp
Query Singapore data directly from the terminal — no MCP client needed:
# Natural language query
npx @altronis/sgdata-mcp query "What is Singapore's unemployment rate?"
npx @altronis/sgdata-mcp query "How many dengue cases this week?"
npx @altronis/sgdata-mcp query "Latest COE prices"
# Call a specific tool
npx @altronis/sgdata-mcp tool sg_crime_compare '{"year":"2024"}'
npx @altronis/sgdata-mcp tool sg_hawker_search '{"query":"bedok"}'
# List available tools and datasets
npx @altronis/sgdata-mcp list
npx @altronis/sgdata-mcp datasets
# Run the MCP server directly
npx -y @altronis/sgdata-mcp
# Smoke-test via stdio
printf '%s\n' \
'{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"test","version":"0"}}}' \
'{"jsonrpc":"2.0","method":"notifications/initialized"}' \
'{"jsonrpc":"2.0","id":2,"method":"tools/list"}' \
| npx -y @altronis/sgdata-mcp
| # | Dataset | Agency | Tools |
|---|---|---|---|
| 1 | ACRA Corporate Entities (~2M+) | ACRA | 3 |
| 2 | HDB Resale Flat Prices (2017+) | HDB | 2 |
| 3 | COE Bidding Results | LTA | 3 |
| 4 | MOE Schools | MOE | 3 |
| 5 | HDB Carpark Information | HDB | 3 |
| 6 | GDP YoY Growth (quarterly) | SingStat | 3 |
| 7 | Consumer Price Index (monthly) | SingStat | 3 |
| 8 | MOM Median Gross Monthly Income | MOM | 2 |
| 9 | Employment by Sector (annual) | SingStat | 3 |
| 10 | URA Private Residential Transactions | URA | 3 |
| 11 | International Visitor Arrivals | STB | 3 |
| 12 | Retail Sales Index (monthly) | SingStat | 3 |
| 13 | MAS Exchange Rates (monthly avg) | MAS | 3 |
| 14 | IRAS Tax Collection (annual) | IRAS | 3 |
| 15 | ECDA Childcare & Kindergarten Centres | ECDA | 3 |
| 16 | Unemployment Rate (quarterly) | MOM | 2 |
| 17 | Population Indicators (annual) | SingStat | 2 |
| 18 | Infectious Disease Cases (weekly) | MOH | 3 |
| 19 | Electricity Generation (monthly) | EMA | 2 |
| 20 | Live-Births by Sex/Ethnicity (monthly) | SingStat | 2 |
| 21 | Crime Cases Recorded (annual) | SPF | 3 |
| 22 | Tourism Receipts (annual) | STB | 2 |
| 23 | Government Hawker Centres | NEA | 2 |
| 24 | Business Entity Formations & Cessations | ACRA/DOS | 6 |
Plus 3 generic fallback tools, 1 visualization tool, 2 cross-dataset tools, and 1 natural language query tool. Total: 74 tools.
sg_visualizeGenerate ASCII sparkline charts and summary statistics from any time series. Returns sparklines, min/max/mean/latest, period-over-period change, and chart-ready JSON for frontend rendering.
SG Unemployment Rate (SA): ▁█████▄▄████
Latest: 2 % | Change: +0 (+0%) | Range: 1.8–2 | Mean: 1.97
sg_cross_datasetCompare any two datasets side-by-side over time. Automatically aligns different time granularities (monthly, quarterly, annual):
{
"dataset_a": "cpi_monthly",
"dataset_b": "retail_sales",
"limit": 5
}
Returns aligned rows with both values for correlation analysis.
sg_askAsk questions in plain English — the tool routes to the right dataset automatically:
"What is Singapore's unemployment rate?" → sg_unemployment_latest
"How many dengue cases?" → sg_disease_latest
"COE prices" → sg_coe_latest
"Crime statistics" → sg_crime_latest
Query data directly from your terminal:
sgdata-cli query "Singapore population growth"
sgdata-cli tool sg_crime_compare '{"year":"2024"}'
sgdata-cli datasets
| Tool | Description |
|---|---|
sg_ask | Natural language query — ask any question about Singapore data in plain English |
sg_visualize | ASCII sparkline + summary stats + chart-ready JSON from any numeric series |
sg_cross_dataset | Compare two datasets over time with automatic period alignment |
sg_list_datasets | List all 24 curated datasets with IDs, names, and agencies |
| Tool | Description |
|---|---|
sg_search_datasets | Full-text discovery across all data.gov.sg datasets |
sg_dataset_schema | Column labels, agency, format for any dataset ID |
sg_dataset_query | Query any dataset with filters, auto-downloads and caches |
ACRA (3): sg_acra_search_entities, sg_acra_get_entity, sg_acra_formations_by_ssic
HDB Resale (2): sg_hdb_resale_search, sg_hdb_resale_stats
COE (3): sg_coe_latest, sg_coe_history, sg_coe_demand_supply
MOE Schools (3): sg_moe_search_schools, sg_moe_school_by_name, sg_moe_schools_near
HDB Carparks (3): sg_hdb_carpark_lookup, sg_hdb_carparks_by_address, sg_hdb_carparks_by_type
GDP (3): sg_gdp_latest, sg_gdp_history, sg_gdp_industry_compare
CPI (3): sg_cpi_latest, sg_cpi_history, sg_cpi_yoy
Income (2): sg_median_income_lookup, sg_median_income_history
Employment (3): sg_employment_by_sector, sg_employment_sector_history, sg_employment_growth
URA Property (3): sg_ura_private_txn_latest, sg_ura_private_txn_history, sg_ura_new_sale_pipeline
Visitor Arrivals (3): sg_visitors_latest, sg_visitors_history, sg_visitors_top_sources
Retail Sales (3): sg_retail_sales_latest, sg_retail_sales_history, sg_retail_sales_yoy
MAS FX (3): sg_fx_rate, sg_fx_history, sg_fx_basket
IRAS Tax (3): sg_iras_collection, sg_iras_collection_history, sg_iras_tax_mix
ECDA Childcare (3): sg_ecda_search_centres, sg_ecda_centres_near, sg_ecda_vacancy_summary
Unemployment (2): sg_unemployment_latest, sg_unemployment_history
Population (2): sg_population_latest, sg_population_history
Disease/Health (3): sg_disease_latest, sg_disease_trend, sg_disease_list
Electricity (2): sg_electricity_latest, sg_electricity_history
Births (2): sg_births_latest, sg_births_history
Crime (3): sg_crime_latest, sg_crime_history, sg_crime_compare
Tourism (2): sg_tourism_latest, sg_tourism_history
Hawker Centres (2): sg_hawker_search, sg_hawker_stats
Business Formations & Cessations (6): sg_formations_latest, sg_formations_history, sg_formations_compare, sg_formations_monthly, sg_cessations_monthly, sg_net_formations
┌─────────────────┐ spawn ┌──────────────────────┐
│ Claude Desktop │ ──────────▶ │ sgdata-mcp (node) │
│ /Cursor/Code │ ◀── stdio ─▶│ runs on your machine │
└─────────────────┘ └──────┬───────────────┘
│ HTTPS (first fetch only)
▼
api.data.gov.sg/v2/...
│
▼
~/.sgdata-mcp/sgdata.sqlite
(shared local SQLite cache)
~/.sgdata-mcp/sgdata.sqlite by default.SGDATA_MCP_CACHE_DIR=/custom/path.rm ~/.sgdata-mcp/sgdata.sqlite — next query rebuilds.@altronis/sgdata-mcp | sgdata-mcp (by vdineshk) | |
|---|---|---|
| Tools | 74 | 5 |
| Coverage | Corporate registry, real estate, prices, labour, tourism, FX, tax, public services, crime, health, demographics, energy | Real-time weather, traffic, carpark availability |
| CLI mode | Yes | No |
| Data visualization | Yes (sparklines + chart-ready JSON) | No |
| Cross-dataset queries | Yes | No |
| NL query routing | Yes | No |
| Caching | Yes (SQLite) | No |
| API keys | None | None |
Both packages complement each other — install both for the full picture.
This tool fetches and caches data from data.gov.sg. While we take care to preserve data integrity during ingestion, you should independently verify any data before making decisions based on it.
ingestedAt timestamps if freshness
matters.Do I need an API key? No. data.gov.sg open datasets are public.
Where is the data stored? On your machine, in ~/.sgdata-mcp/sgdata.sqlite.
How often is data refreshed? Per-dataset, from daily to annually.
Is this production-ready? Yes. 74 tools, all tested against live data. File issues on GitHub if you hit anything sharp.
Can I add my own dataset? Yes — either use the generic tools for ad-hoc
queries, or open a PR adding a handler under src/datasets/.
MIT
Contains information from data.gov.sg under the Singapore Open Data Licence v1.0.
Found a bug? Want a dataset added? Open an issue or PR on GitHub.
Be the first to review this server!
by Modelcontextprotocol · Developer Tools
Web content fetching and conversion for efficient LLM usage
by Toleno · Developer Tools
Toleno Network MCP Server — Manage your Toleno mining account with Claude AI using natural language.
by mcp-marketplace · Developer Tools
Create, build, and publish Python MCP servers to PyPI — conversationally.