🎩 You're Invited:Meet the Socket team at Black Hat in Las Vegas, August 3-6.RSVP
Sign In

@altronis/sgdata-mcp

Package Overview
Dependencies
Maintainers
1
Versions
11
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@altronis/sgdata-mcp

Comprehensive Singapore government data MCP server — ACRA, HDB, URA, Singstat, MOM, IRAS, and more. Built by Altronis.

latest
Source
npmnpm
Version
0.5.3
Version published
Weekly downloads
98
-77.93%
Maintainers
1
Weekly downloads
 
Created
Source

@altronis/sgdata-mcp

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

npm version license: MIT node 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 feedssg_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 tablessg_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_ssic is 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 SingStat sg_formations_history / sg_formations_compare / sg_formations_monthly tools 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.

Data freshness

@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):

ToolUpstream datasetLast updateRecommended action
sg_disease_latest, sg_disease_trend, sg_disease_listMOH Weekly Infectious Disease Bulletin2022-W52Cross-check moh.gov.sg weekly bulletin PDFs. PRs welcome to swap in a live source.
sg_tourism_latest, sg_tourism_historySTB Annual Tourism Receipts2014Cross-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.

What you can ask Claude

Drop this server into Claude Desktop and you immediately unlock questions like:

  • "Find all AI/ML companies (SSIC 62019) incorporated in Singapore in 2025."
  • "What's the median resale price of 4-room HDB flats in Punggol over the last 6 months?"
  • "What is the latest COE Category A premium, and how has it trended over 12 months?"
  • "How many dengue cases were reported this week?"
  • "What's Singapore's unemployment rate? Show me the trend."
  • "Compare GDP growth vs crime rates over the last 5 years."
  • "How many scam cases were recorded in 2024?"
  • "What is Singapore's population and how fast is it growing?"
  • "How much electricity did Singapore generate last month?"
  • "Are birth rates declining? Show me the last 12 months."
  • "What were Singapore's tourism receipts by component?"
  • "Find hawker centres near Tampines."
  • "Which CPI categories are running hottest vs headline inflation?"
  • "Look up DBS Bank by UEN 196800306E."

Your model picks the right tool, fills in the filters, and returns structured rows. You never write a URL.

Quick start

Claude Desktop

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.

Cursor

Add to ~/.cursor/mcp.json:

{
  "mcpServers": {
    "sg-data": {
      "command": "npx",
      "args": ["-y", "@altronis/sgdata-mcp"]
    }
  }
}

Claude Code

claude mcp add sg-data -- npx -y @altronis/sgdata-mcp

CLI mode (new in v0.3.0)

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

Standalone (kick the tyres)

# 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

What's in the box

Datasets (24)

#DatasetAgencyTools
1ACRA Corporate Entities (~2M+)ACRA3
2HDB Resale Flat Prices (2017+)HDB2
3COE Bidding ResultsLTA3
4MOE SchoolsMOE3
5HDB Carpark InformationHDB3
6GDP YoY Growth (quarterly)SingStat3
7Consumer Price Index (monthly)SingStat3
8MOM Median Gross Monthly IncomeMOM2
9Employment by Sector (annual)SingStat3
10URA Private Residential TransactionsURA3
11International Visitor ArrivalsSTB3
12Retail Sales Index (monthly)SingStat3
13MAS Exchange Rates (monthly avg)MAS3
14IRAS Tax Collection (annual)IRAS3
15ECDA Childcare & Kindergarten CentresECDA3
16Unemployment Rate (quarterly)MOM2
17Population Indicators (annual)SingStat2
18Infectious Disease Cases (weekly)MOH3
19Electricity Generation (monthly)EMA2
20Live-Births by Sex/Ethnicity (monthly)SingStat2
21Crime Cases Recorded (annual)SPF3
22Tourism Receipts (annual)STB2
23Government Hawker CentresNEA2
24Business Entity Formations & CessationsACRA/DOS6

Plus 3 generic fallback tools, 1 visualization tool, 2 cross-dataset tools, and 1 natural language query tool. Total: 74 tools.

New in v0.3.0

Data visualization — sg_visualize

Generate 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

Cross-dataset queries — sg_cross_dataset

Compare 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.

Natural language queries — sg_ask

Ask 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

CLI mode — no MCP client needed

Query data directly from your terminal:

sgdata-cli query "Singapore population growth"
sgdata-cli tool sg_crime_compare '{"year":"2024"}'
sgdata-cli datasets

Tools (74)

Meta tools

ToolDescription
sg_askNatural language query — ask any question about Singapore data in plain English
sg_visualizeASCII sparkline + summary stats + chart-ready JSON from any numeric series
sg_cross_datasetCompare two datasets over time with automatic period alignment
sg_list_datasetsList all 24 curated datasets with IDs, names, and agencies

Generic tools — any data.gov.sg dataset

ToolDescription
sg_search_datasetsFull-text discovery across all data.gov.sg datasets
sg_dataset_schemaColumn labels, agency, format for any dataset ID
sg_dataset_queryQuery any dataset with filters, auto-downloads and caches

Curated dataset tools (67)

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

Architecture

┌─────────────────┐    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)

Caching policy

  • Location. ~/.sgdata-mcp/sgdata.sqlite by default.
  • Override. Set SGDATA_MCP_CACHE_DIR=/custom/path.
  • Refresh cadence. Per-dataset — daily for ECDA, weekly for HDB/COE/disease, monthly for ACRA/CPI/GDP/FX/retail/visitors/births/electricity, quarterly for MOE/URA/employment/unemployment, annually for IRAS/income/crime/population/tourism.
  • Wipe. rm ~/.sgdata-mcp/sgdata.sqlite — next query rebuilds.
  • Disk. ~480 MB with ACRA, under 20 MB without.

Comparison

@altronis/sgdata-mcpsgdata-mcp (by vdineshk)
Tools745
CoverageCorporate registry, real estate, prices, labour, tourism, FX, tax, public services, crime, health, demographics, energyReal-time weather, traffic, carpark availability
CLI modeYesNo
Data visualizationYes (sparklines + chart-ready JSON)No
Cross-dataset queriesYesNo
NL query routingYesNo
CachingYes (SQLite)No
API keysNoneNone

Both packages complement each other — install both for the full picture.

Disclaimer

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.

  • Data accuracy. All data originates from Singapore government agencies via data.gov.sg. We do not alter source values, but column mappings, wide-to-long transformations, and caching may introduce discrepancies. Always cross-check critical figures against the official source.
  • Not professional advice. This tool is not a substitute for professional financial, legal, medical, or policy advice. GDP figures, crime statistics, disease counts, property prices, and other data are provided for informational purposes only.
  • Staleness. Cached data may be hours to weeks behind the source depending on the dataset's refresh window. Check ingestedAt timestamps if freshness matters.
  • No warranty. This software is provided "as is" under the MIT licence, without warranty of any kind.

FAQ

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/.

License

MIT

Attribution

Contains information from data.gov.sg under the Singapore Open Data Licence v1.0.

Contributing

Found a bug? Want a dataset added? Open an issue or PR on GitHub.

Keywords

mcp

FAQs

Package last updated on 19 Jul 2026

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts