MapleStats MCP
An MCP server providing access to Canadian open data from Statistics Canada, the Bank of Canada, CMHC, and various open-data portals. It supports querying census profiles, trade data, daily releases, and geographic layers in English and French.
Endpoint and access
No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.
https://maplestats-mcp.onrender.com/mcpWhat you can do with it
- Get 2021 Census Profile values for specific geographies and characteristics
- Retrieve Canadian merchandise exports or imports by month and commodity
- Search the full archive of Statistics Canada's Daily release bulletin
- List and read data points from StatCan's Delta File real-time tables
Source and maintenance
- Maintenance checked
Protocol and capabilities
- Server
- maplestats-mcp 0.4.3
- MCP protocol
- 2025-06-18
- Tools
- 3 advertised
- Resources
- 21 advertised
- Resource templates
- 0 advertised
- Prompts
- 14 advertised
{
"tools": {
"listChanged": true
},
"logging": {},
"prompts": {
"listChanged": true
},
"resources": {
"subscribe": false,
"listChanged": true
}
}Server-provided instructions
Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.
Tools
3 advertised
plan_query — Plan query
Plan which sources answer a question that may span several agencies. Use for: the first call on a substantive question ("How have rents and interest rates moved in Calgary since 2020?"). Returns the topics it touches, the tools to call for each in order, local portals for any province or city named, and caveats on combining them. Then run the steps with call_tool. Read-only and offline: it matches the question against this server's source map and calls no external API. Use search_tools instead to find a single tool for a narrow, single-source need. lang='fr' gives the labels, purposes, caveats and guidance in French; tool and argument names stay as they are. Keywords: plan, which data source, where to find, combine sources, cross-source, question, research, Canada data. Mots-clés : planifier, quelle source de données, où trouver, combiner des sources, question, recherche, données canadiennes, statistiques.
{
"type": "object",
"required": [
"question"
],
"properties": {
"lang": {
"enum": [
"en",
"fr"
],
"type": "string",
"default": "en"
},
"question": {
"type": "string"
}
},
"additionalProperties": false
}{
"type": "object",
"required": [
"question",
"topics",
"places",
"fallback_steps",
"guidance",
"provenance"
],
"properties": {
"places": {
"type": "array",
"items": {
"type": "object",
"required": [
"place",
"kind",
"steps"
],
"properties": {
"kind": {
"enum": [
"province",
"city"
],
"type": "string"
},
"place": {
"type": "string"
},
"steps": {
"type": "array",
"items": {
"type": "object",
"required": [
"tool",
"purpose"
],
"properties": {
"tool": {
"type": "string",
"description": "Tool to invoke with call_tool."
},
"purpose": {
"type": "string"
}
}
},
"description": "Local portals and sources for this place."
}
}
}
},
"topics": {
"type": "array",
"items": {
"type": "object",
"required": [
"topic",
"label",
"matched_terms",
"steps",
"caveats"
],
"properties": {
"label": {
"type": "string"
},
"steps": {
"type": "array",
"items": {
"type": "object",
"required": [
"tool",
"purpose"
],
"properties": {
"tool": {
"type": "string",
"description": "Tool to invoke with call_tool."
},
"purpose": {
"type": "string"
}
}
}
},
"topic": {
"type": "string"
},
"caveats": {
"type": "array",
"items": {
"type": "string"
}
},
"matched_terms": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"description": "Best match first; at most 4."
},
"guidance": {
"type": "array",
"items": {
"type": "string"
}
},
"question": {
"type": "string"
},
"provenance": {
"type": "object",
"required": [
"source",
"url",
"queried_at",
"cached",
"schema_name"
],
"properties": {
"url": {
"type": "string",
"description": "The exact upstream URL this result was fetched from."
},
"as_of": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
],
"default": null,
"description": "The upstream data's own reference/release date, when the source states one."
},
"cached": {
"type": "boolean",
"description": "Whether this result was served from MapleStats's cache."
},
"limits": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Any cap or truncation applied, e.g. 'rows capped at 500'."
},
"source": {
"type": "string",
"description": "Short name of the upstream API, e.g. 'statcan-wds'."
},
"caveats": {
"type": "array",
"items": {
"type": "string"
},
"description": "Fitness-for-use cautions for this table or source, from MapleStats' rules (docs://planner/fitness-rules)."
},
"licence": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Licence and attribution the upstream publisher requires, when it has one (set for every Statistics Canada result)."
},
"coverage": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "What the result does NOT include, e.g. 'first 100 of 3,204 cubes'."
},
"freshness": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Update cadence in plain language, e.g. 'daily at 8:30am ET'."
},
"reproduce": {
"type": "string",
"default": "For R, Python, Stata and Julia scripts that fetch and clean these data, call reproduce_code with this tool's name and arguments.",
"description": "How to get retrieval and cleaning code for this result."
},
"queried_at": {
"type": "string",
"format": "date-time",
"description": "When MapleStats made the upstream request."
},
"schema_name": {
"type": "string",
"description": "Name of this result's schema, e.g. 'statcan.CubeSummary'."
},
"commercial_use": {
"anyOf": [
{
"enum": [
"allowed",
"not_allowed",
"varies",
"unknown"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Whether the licence allows commercial reuse without asking the publisher: 'allowed', 'not_allowed' (non-commercial use only, or written permission needed), 'varies' (each dataset or feed has its own licence: read licence) or 'unknown' (terms silent, conflicting or not found). Null when no licence applies. The conditions themselves are in licence."
}
},
"description": "Where a result came from and how fresh/complete it is.\n\nEmbedded in every module's response models (composition, not\ninheritance) so a tool can return `MyResult(provenance=..., ...)`\nwithout fighting Pydantic's model-inheritance rules for extra fields."
},
"out_of_scope": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Set when the question is about a place outside Canada that this server has no data for; topics and fallback steps are then empty."
},
"fallback_steps": {
"type": "array",
"items": {
"type": "object",
"required": [
"tool",
"purpose"
],
"properties": {
"tool": {
"type": "string",
"description": "Tool to invoke with call_tool."
},
"purpose": {
"type": "string"
}
}
},
"description": "Only when no topic matched."
}
}
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}search_tools — Search tools
Find the right data tool for one specific need by plain-language search. Use for: locating a tool when you know roughly what data you want (a StatCan table, Bank of Canada series, a city's open-data portal). Returns the best-matching tool definitions, ranked by relevance, each with its name, description and full input schema, in the same format as list_tools. Read-only; it searches this server's catalogue only and calls no external API. Use plan_query instead when a question may span several sources or you do not know where to start; use call_tool to run a tool once you have its name. Queries in English or French both work. An empty result means no tool matched: rephrase with topic words (e.g. 'housing starts' rather than 'CMHC table').
{
"type": "object",
"required": [
"query"
],
"properties": {
"query": {
"type": "string",
"description": "What you need, in plain English or French, e.g. 'Calgary rent index' or 'taux de chômage Québec'. Topic words work better than tool names."
}
},
"additionalProperties": false
}{
"type": "object",
"required": [
"result"
],
"properties": {
"result": {
"anyOf": [
{
"type": "string"
},
{
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
}
}
]
}
},
"x-fastmcp-wrap-result": true
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}call_tool — Call a tool
Run one data tool found through search_tools or plan_query. Use for: executing a tool by exact name with arguments that match the inputSchema search_tools returned for it. Data tools read public sources (StatCan, Bank of Canada, open-data portals). reproduce_workbook can save an Excel file on a local stdio server; hosted exports return base64. Returns that tool's typed result, including a provenance block (source, URL, query time, freshness). Errors come back as MCP tool errors, not as data: an unknown or misspelled name raises 'Unknown tool' (search again for the exact name), invalid arguments raise a validation error naming the field, and upstream outages or empty matches raise a typed error explaining what to change. search_tools, call_tool and plan_query cannot be called through it; call them directly. Tool calls are subject to the server's timeout (MAPLE_TOOL_TIMEOUT_SECONDS, default 120).
{
"type": "object",
"required": [
"name"
],
"properties": {
"name": {
"type": "string",
"description": "Exact tool name as returned by search_tools or plan_query, e.g. 'boc_get_observations'."
},
"arguments": {
"anyOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "null"
}
],
"default": null,
"description": "Object matching that tool's inputSchema from search_tools. Omit or pass {} for a tool with no required parameters."
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": false
}Prompts
14 advertised
compare_boc_series
Guided workflow: fetch several Bank of Canada series together for comparison over the same date range. Use lang="fr" for the French version.
- series_names
- No description (required)
- lang
- Language: 'en' or 'fr' Provide a value matching the following JSON schema: {"enum":["en","fr"],"type":"string"}. Encode non-string values as JSON.
find_and_fetch_boc_series
Guided workflow: find a Bank of Canada Valet series on a topic and fetch its recent observations. Use lang="fr" for the French version.
- topic
- No description (required)
- lang
- Language: 'en' or 'fr' Provide a value matching the following JSON schema: {"enum":["en","fr"],"type":"string"}. Encode non-string values as JSON.
find_and_query_cmhc_table
Guided workflow: find a CMHC HMIP category on a topic and fetch its data. Use lang="fr" for the French version.
- topic
- No description (required)
- lang
- Language: 'en' or 'fr' Provide a value matching the following JSON schema: {"enum":["en","fr"],"type":"string"}. Encode non-string values as JSON.
eccc_severe_weather_check
Guided workflow: check for active weather alerts affecting a Canadian location. Use lang="fr" for the French version.
- location
- No description (required)
- lang
- Language: 'en' or 'fr' Provide a value matching the following JSON schema: {"enum":["en","fr"],"type":"string"}. Encode non-string values as JSON.
find_and_query_eccc_collection
Guided workflow: find an MSC GeoMet collection on a topic and query its data. Use lang="fr" for the French version.
- topic
- No description (required)
- lang
- Language: 'en' or 'fr' Provide a value matching the following JSON schema: {"enum":["en","fr"],"type":"string"}. Encode non-string values as JSON.
compare_province_with_peers
Guided workflow: compare one province with the others on an indicator, from one table, like with like. Use lang="fr" for the French version.
- province
- No description (required)
- indicator
- No description (required)
- lang
- Language: 'en' or 'fr' Provide a value matching the following JSON schema: {"enum":["en","fr"],"type":"string"}. Encode non-string values as JSON.
find_and_cite_dataset
Guided workflow: find a dataset on a topic across sources, then cite it from its provenance and licence and hand over reproducible code. Use lang="fr" for the French version.
- topic
- No description (required)
- lang
- Language: 'en' or 'fr' Provide a value matching the following JSON schema: {"enum":["en","fr"],"type":"string"}. Encode non-string values as JSON.
housing_affordability_scan
Guided workflow: housing affordability in a city or province from CMHC rents and vacancy, CPI shelter prices and Bank of Canada rates. Use lang="fr" for the French version.
- place
- No description (required)
- lang
- Language: 'en' or 'fr' Provide a value matching the following JSON schema: {"enum":["en","fr"],"type":"string"}. Encode non-string values as JSON.
inflation_check
Guided workflow: all-items CPI, the Bank of Canada's core measures, and the first estimates published at a past date (as_of, YYYY-MM-DD, optional). Use lang="fr" for the French version.
- as_of
- No description
- lang
- Language: 'en' or 'fr' Provide a value matching the following JSON schema: {"enum":["en","fr"],"type":"string"}. Encode non-string values as JSON.
labour_market_snapshot
Guided workflow: a province's labour market from the Labour Force Survey (employment, unemployment, participation) and SEPH earnings, with the caution on comparing the two. Use lang="fr" for the French version.
- province
- No description (required)
- lang
- Language: 'en' or 'fr' Provide a value matching the following JSON schema: {"enum":["en","fr"],"type":"string"}. Encode non-string values as JSON.
refresh_with_latest_release
Guided workflow: bring an article or table up to date with StatCan's latest release (release calendar, The Daily, changed tables, revisions and vintages). Use lang="fr" for the French version.
- subject
- No description (required)
- lang
- Language: 'en' or 'fr' Provide a value matching the following JSON schema: {"enum":["en","fr"],"type":"string"}. Encode non-string values as JSON.
build_sdmx_or_key
Guided workflow: build a complete SDMX OR key for a large dimension. Use lang="fr" for the French version.
- product_id
- Provide a value matching the following JSON schema: {"type":"integer"}. Encode non-string values as JSON. (required)
- dimension_position
- Provide a value matching the following JSON schema: {"type":"integer"}. Encode non-string values as JSON. (required)
- lang
- Language: 'en' or 'fr' Provide a value matching the following JSON schema: {"enum":["en","fr"],"type":"string"}. Encode non-string values as JSON.
find_and_fetch_series
Guided workflow: find a StatCan series on a topic and fetch its latest data. Use lang="fr" for the French version.
- topic
- No description (required)
- lang
- Language: 'en' or 'fr' Provide a value matching the following JSON schema: {"enum":["en","fr"],"type":"string"}. Encode non-string values as JSON.
look_up_classification
Guided workflow: look up a StatCan classification (e.g. NAICS) for a topic. Use lang="fr" for the French version.
- topic
- No description (required)
- lang
- Language: 'en' or 'fr' Provide a value matching the following JSON schema: {"enum":["en","fr"],"type":"string"}. Encode non-string values as JSON.
Resources
21 advertised
module_catalogue_doc
Bilingual (EN/FR) directory of every module this server exposes, by name and description — use this to see what a source covers in French before deciding which tools to call.
docs://cataloguereport_issue_doc
When and how to offer the user a bug report for this server, with the template to fill in. Read it when a tool misbehaves.
docs://report-issueupstream_status_doc
Upstream hosts MapleStats has paused after repeated failures (EN/FR), with when each is tried again. Read it when tools for one source keep failing with UpstreamUnavailable.
docs://statusboc_gotchas_doc
List known Bank of Canada Valet API quirks that are easy to get wrong. French version: docs://boc/fr/pieges.
docs://boc/gotchasboc_gotchas_doc_fr
Pièges connus de l'API Valet de la Banque du Canada, faciles à manquer. Version française de docs://boc/gotchas.
docs://boc/fr/piegesboc_well_known_series_doc
List well-known Bank of Canada Valet series/groups for FX, interest rates, CPI/inflation, and commodity prices. French version: docs://boc/fr/series-courantes.
docs://boc/well-known-seriesboc_well_known_series_doc_fr
Liste des séries et groupes courants de l'API Valet de la Banque du Canada : taux de change, taux d'intérêt, IPC et inflation, prix des produits de base. Version française de docs://boc/well-known-series.
docs://boc/fr/series-courantescmhc_gotchas_doc
List known CMHC HMIP quirks that are easy to get wrong. French version: docs://cmhc/fr/pieges.
docs://cmhc/gotchascmhc_gotchas_doc_fr
Particularités connues du HMIP de la SCHL, faciles à manquer. Version française de docs://cmhc/gotchas.
docs://cmhc/fr/piegescmhc_well_known_categories_doc
List well-known CMHC HMIP categories for rental market, housing starts, seniors housing, and population/household indicators. French version: docs://cmhc/fr/categories-courantes.
docs://cmhc/well-known-categoriescmhc_well_known_categories_doc_fr
Catégories courantes du HMIP de la SCHL : marché locatif, mises en chantier, logements pour personnes âgées, population et ménages. Version française de docs://cmhc/well-known-categories.
docs://cmhc/fr/categories-couranteseccc_gotchas_doc
List known MSC GeoMet-OGC-API quirks that are easy to get wrong. French version: docs://eccc/fr/pieges.
docs://eccc/gotchaseccc_gotchas_doc_fr
Pièges connus de MSC GeoMet (OGC-API), faciles à manquer. Version française de docs://eccc/gotchas.
docs://eccc/fr/piegeseccc_well_known_collections_doc
List well-known MSC GeoMet collections for alerts, current conditions, AQHI, climate normals/observations, hydrometric, and marine data. French version: docs://eccc/fr/collections-courantes.
docs://eccc/well-known-collectionseccc_well_known_collections_doc_fr
Collections courantes de MSC GeoMet : alertes, conditions actuelles, cote air santé, normales et observations climatiques, hydrométrie et météo marine. Version française de docs://eccc/well-known-collections.
docs://eccc/fr/collections-courantesplanner_fitness_rules_doc
Fitness-for-use rules: when and how a Statistics Canada, Bank of Canada or CMHC number can be used, with the official sources. French version: docs://planner/fr/regles-d-usage.
docs://planner/fitness-rulesplanner_fitness_rules_doc_fr
Règles d'usage des données : quand et comment utiliser un chiffre de Statistique Canada, de la Banque du Canada ou de la SCHL, avec les sources officielles. Version française de docs://planner/fitness-rules.
docs://planner/fr/regles-d-usagestatcan_addressing_doc
Explain StatCan's productId/vectorId/coordinate addressing system. French version: docs://statcan/fr/adressage.
docs://statcan/addressingstatcan_addressing_doc_fr
Explique le système d'adressage de Statistique Canada : productId, vectorId et coordonnée. Version française de docs://statcan/addressing.
docs://statcan/fr/adressagestatcan_gotchas_doc
List known StatCan API quirks that are easy to get wrong. French version: docs://statcan/fr/pieges.
docs://statcan/gotchasstatcan_gotchas_doc_fr
Pièges connus des API de Statistique Canada, faciles à manquer. Version française de docs://statcan/gotchas.
docs://statcan/fr/pieges30-day availability
Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.
- Successful checks
- 1 of 1 (100%)
- Average latency
- 452 ms
- 95th percentile latency
- 452 ms
Maintenance history
Public check and source-refresh events. Editorial and ownership records remain private.
- · probe · passed · 452 ms · metadata changed · 3 tool(s), 21 resource(s), 0 resource template(s), 14 prompt(s)
Connect from your client
Each snippet registers the same endpoint; pick the client you use.
Claude Code
claude mcp add --transport http maplestats-mcp-onrender https://maplestats-mcp.onrender.com/mcpCodex
codex mcp add maplestats-mcp-onrender --url https://maplestats-mcp.onrender.com/mcpCursor
{
"mcpServers": {
"maplestats-mcp-onrender": {
"url": "https://maplestats-mcp.onrender.com/mcp"
}
}
}Cline
{
"mcpServers": {
"maplestats-mcp-onrender": {
"type": "streamableHttp",
"url": "https://maplestats-mcp.onrender.com/mcp",
"disabled": false
}
}
}VS Code
{
"servers": {
"maplestats-mcp-onrender": {
"type": "http",
"url": "https://maplestats-mcp.onrender.com/mcp"
}
}
}Gemini CLI
gemini mcp add --transport http maplestats-mcp-onrender https://maplestats-mcp.onrender.com/mcpClaude Desktop
{
"mcpServers": {
"maplestats-mcp-onrender": {
"url": "https://maplestats-mcp.onrender.com/mcp"
}
}
}Windsurf
{
"mcpServers": {
"maplestats-mcp-onrender": {
"serverUrl": "https://maplestats-mcp.onrender.com/mcp"
}
}
}Let your agent find its tools
Find servers like MapleStats MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.