Skip to main content
Glama

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", not scalarFactorCode: 3, statusCode: 5. Nothing hardcoded to go stale.

  • Forgiving inputs — vector IDs accepted as v41690973 or 41690973; coordinates padded automatically.

Related MCP server: mcp-canada

Quick start

Claude Code

claude mcp add statcan -- npx -y statcan-mcp

Claude 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

search_tables

Keyword search across all ~8,200 data tables

get_table_metadata

A table's dimensions and members (capped, filterable) — the map you need to pull data

get_data_by_vectors

Time series by vector ID(s), date range or latest-N

get_data_by_coordinate

Time series by table + one member choice per dimension

get_series_info

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 API

Architecture: 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 (*Fr fields are already in the API responses)

  • Full-table CSV download for bulk analysis

  • Streamable HTTP transport for remote deployment

License

MIT

Available Tools

5 tools
get_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

    A4.1/5.0

    Scored across 5 tools

    Disambiguation5/5

    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.

    Naming Consistency5/5

    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.

    Tool Count5/5

    Five tools is well-scoped for a statistical data server, covering discovery, schema exploration, and data extraction without unnecessary redundancy or bloat.

    Completeness4/5

    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

    ActivityMaintained
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      A
      quality
      C
      maintenance
      An 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.
      23
      1
      MIT
    • A
      license
      A
      quality
      B
      maintenance
      MCP server giving AI agents structured access to Canadian federal, provincial, and municipal government data.
      4
      5
      38 PyPI
      61
      MIT
    • A
      license
      Not graded
      quality
      D
      maintenance
      MCP 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