statcan-mcp
statcan-mcp gives Claude and other LLMs live, no-API-key access to Statistics Canada's 8,200+ data tables — CPI, GDP, labour force, housing, population, trade and more.
Search all ~8,200 StatCan data tables by keyword (
search_tables, up to 50 results)Explore a table's structure — its dimensions and member IDs — with keyword filtering and caps for large dimensions (
get_table_metadata)Pull time series for up to 10 vector IDs at once, by date range or latest-N periods (
get_data_by_vectors)Pull data by table coordinate, choosing one member ID per dimension (
get_data_by_coordinate)Decode an unknown vector ID into its title, source table and coordinate (
get_series_info)Forgiving inputs: vector IDs as
v41690973or41690973; coordinates padded automaticallyHuman-readable output — code enums decoded at runtime (e.g. "thousands", "use with caution") instead of raw numeric code sets
API failures surface as MCP tool errors carrying StatCan's own message so the model can self-correct
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@statcan-mcp What's Canada's current unemployment rate, and how has it trended over 12 months?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
statcan-mcp
An MCP server that gives Claude and other LLMs live access to Statistics Canada — all 8,200+ data tables from the Web Data Service: CPI, GDP, labour force, housing starts, population, trade, and more.
No API key required.
Sibling project: bank-of-canada-mcp for Bank of Canada rates and FX.
Why this exists
StatCan's API is powerful but hostile: POST-only lookups, opaque numeric vector IDs, 10-position "coordinate" addressing, and numeric code enums everywhere (scalarFactorCode: 3). This server translates it into something an LLM can actually drive:
Discovery flow built into the tools — search tables → inspect dimensions → fetch data, with each tool description pointing to the next step.
Context-friendly by default — a CPI dimension has 359 members and a series can span a century; members are capped and keyword-filterable, data defaults to the last 12 periods.
Codes decoded at runtime via StatCan's own code-set endpoint — responses say
"scale": "thousands"and"note": "use with caution", notscalarFactorCode: 3, statusCode: 5. Nothing hardcoded to go stale.Forgiving inputs — vector IDs accepted as
v41690973or41690973; coordinates padded automatically.
Related MCP server: mcp-canada
Quick start
Claude Code
claude mcp add statcan -- npx -y statcan-mcpClaude Desktop — add to claude_desktop_config.json:
{
"mcpServers": {
"statcan": {
"command": "npx",
"args": ["-y", "statcan-mcp"]
}
}
}The same npx invocation works in Cursor, Windsurf, and any other MCP client.
Tools
Tool | What it does |
| Keyword search across all ~8,200 data tables |
| A table's dimensions and members (capped, filterable) — the map you need to pull data |
| Time series by vector ID(s), date range or latest-N |
| Time series by table + one member choice per dimension |
| Decode a mystery vector ID into its title and source table |
Example prompts
"What's Canada's current unemployment rate, and how has it trended over 12 months?"
"Compare gasoline price inflation in Ontario vs Quebec since 2024."
"How many housing starts were there in Canada last quarter?"
"What is vector v41690973?"
Development
npm install
npm test # offline unit tests (vitest)
npm run build # tsc → dist/
node scripts/smoke.mjs # live smoke test against the real APIArchitecture: src/wds.ts is a plain WDS client with pure, unit-tested logic (catalogue search, coordinate padding, code decoding); src/index.ts is the MCP wiring. API failures (unknown vector, bad coordinate) come back as MCP tool errors carrying StatCan's own message so the model can self-correct.
Notes
Data is © Statistics Canada, used under the Statistics Canada Open Licence. This project is not affiliated with or endorsed by Statistics Canada.
English output only for now (the API also carries French — see roadmap).
Roadmap
French-language output (
*Frfields are already in the API responses)Full-table CSV download for bulk analysis
Streamable HTTP transport for remote deployment
License
MIT
Available Tools
5 toolsget_data_by_coordinateGet time series by table coordinateA
Fetch observations by choosing one member ID per dimension of a table (get them from get_table_metadata). Example: table 18100004 with member_ids [2, 2] = CPI, Canada, all-items.
Inputs: member_ids (required), product_id (required), latest_n.
get_data_by_vectorsGet time series by vector IDA
Fetch observations for up to 10 Statistics Canada vector IDs (a vector uniquely identifies one time series, e.g. v41690973 = CPI all-items Canada). Give a date range, or latest_n most recent periods (default 12).
Inputs: vectors (required), end_date, latest_n, start_date.
get_series_infoDecode a vector IDA
What is this vector? Returns the series title, source table, and coordinate for a vector ID.
Inputs: vector (required).
get_table_metadataGet table dimensions and membersA
Structure of a Statistics Canada table: its dimensions and their members with member IDs. Large dimensions are truncated — pass member_filter (e.g. 'gasoline') to find specific members. Use the member IDs with get_data_by_coordinate.
Inputs: product_id (required), max_members, member_filter.
search_tablesSearch Statistics Canada data tablesA
Keyword search across all ~8,200 Statistics Canada data tables (CPI, GDP, labour force, housing, population...). Returns product IDs to explore with get_table_metadata.
Inputs: query (required), limit.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 5 tools
Each tool has a distinct role: searching tables, inspecting metadata, fetching data via vectors, fetching data via coordinates, and identifying series. The two data-fetch tools are clearly separated by their ID system, with descriptions explaining the difference.
All tool names use a consistent verb_noun pattern in snake_case (search_tables, get_table_metadata, get_data_by_vectors, get_data_by_coordinate, get_series_info). The verbs and nouns are clear and uniform in style.
Five tools is well-scoped for a statistical data server, covering discovery, schema exploration, and data extraction without unnecessary redundancy or bloat.
The tools cover the full workflow from finding a table to retrieving specific data values. A minor gap exists in the lack of a direct table-level description tool, but get_table_metadata provides sufficient structural information to work around this.
Maintenance
Related MCP Connectors
Hosted MCP server for live public-data APIs and Skills for AI agents.
MCP server giving Claude AI access to 22+ NYC public-record databases for real estate due diligence
This MCP server provides seamless access to Malaysia's government open data, including datasets, w…
Related MCP Servers
- AlicenseAqualityCmaintenanceAn MCP server for discovering, downloading, querying, and analyzing datasets from Ontario's open data portals, allowing natural language questions and high-performance analytics via DuckDB.231MIT
- AlicenseAqualityBmaintenanceMCP server giving AI agents structured access to Canadian federal, provincial, and municipal government data.4538 PyPI61MIT
- AlicenseNot gradedqualityDmaintenanceMCP server for accessing India's Ministry of Statistics and Programme Implementation (MoSPI) data APIs. Enables natural language queries for economic, demographic, and social indicators via a 4-tool workflow.MIT
- AlicenseNot gradedqualityBmaintenanceMCP server providing access to Statistics Canada time-series data via web data.332 npmMIT