<strong>MCP server giving AI agents structured access to Canadian federal government data</strong>
<a href="https://pypi.org/project/mcp-canada/"><img src="https://img.shields.io/pypi/v/mcp-canada?color=blue&label=PyPI" alt="PyPI"></a>
<a href="https://github.com/ReyemTech/mcp-canada/actions/workflows/ci.yml"><img src="https://github.com/ReyemTech/mcp-canada/actions/workflows/ci.yml/badge.svg" alt="CI"></a>
<a href="https://github.com/ReyemTech/mcp-canada/actions/workflows/integration.yml"><img src="https://github.com/ReyemTech/mcp-canada/actions/workflows/integration.yml/badge.svg" alt="Integration Tests"></a>
<a href="https://www.python.org/downloads/"><img src="https://img.shields.io/badge/python-3.12+-blue" alt="Python 3.12+"></a>
<a href="https://github.com/reyemtech/mcp-canada/blob/main/LICENSE"><img src="https://img.shields.io/badge/license-MIT-green" alt="License: MIT"></a>
<a href="https://modelcontextprotocol.io"><img src="https://img.shields.io/badge/MCP-compatible-purple" alt="MCP Compatible"></a>
<a href="https://github.com/jlowin/fastmcp"><img src="https://img.shields.io/badge/built%20with-FastMCP-orange" alt="Built with FastMCP"></a>
83 tools across 7 no-auth federal APIs — exchange rates, parliamentary data, product recalls, drug information, 80K+ open datasets, food nutrition data, and real-time weather. All bilingual (English/French).
Complementary to mcp-statcan — which covers Statistics Canada. Together they form a complete Canadian government data toolkit.
uvx mcp-canada
Add to your MCP config (~/Library/Application Support/Claude/claude_desktop_config.json):
{
"mcpServers": {
"mcp-canada": {
"command": "uvx",
"args": ["mcp-canada"]
}
}
}
claude mcp add mcp-canada -- uvx mcp-canada
git clone https://github.com/reyemtech/mcp-canada.git
cd mcp-canada
uv run mcp-canada
| Flag | Description | Example |
|---|---|---|
--transport |
Transport protocol | --transport sse |
--port |
Port for SSE/HTTP | --port 8000 |
--modules |
Load only specific modules | --modules bank_of_canada,recalls |
--verbose |
INFO-level logging | --verbose |
--debug |
DEBUG-level logging | --debug |
Environment variable: MCP_CANADA_MODULES=bank_of_canada,recalls
With 81 tools, listing all of them would consume half an agent's context window. Instead, BM25 search lets agents find exactly what they need:
Agent: "What tools do you have for exchange rates?"
→ discover_tools("exchange rate CAD")
→ Returns: boc_get_exchange_rates, boc_get_observations
→ call_tool("boc_get_exchange_rates", {"currency": "USD", "recent": 3})
→ Returns: {"_meta": {...}, "data": [{"date": "2026-04-02", "value": 1.3918, ...}]}
Agents see 5 always-visible tools:
| Tool | Purpose |
|---|---|
discover_tools |
BM25 natural language search across all tools |
call_tool |
Execute any discovered tool by name |
list_modules |
List available API modules with tool counts |
plan_query |
Plan a multi-step query across Canadian government data APIs |
execute_batch |
Run multiple tool calls in parallel with per-step error isolation |
All tools accept lang: "en" | "fr" for bilingual support. Responses include a _meta envelope with source attribution and cache status.
Orchestration tools always available to agents — no discovery required.
| Tool | Description | Key Parameters |
|---|---|---|
execute_batch |
Execute multiple tool calls in parallel and return aggregated results. | calls |
list_modules |
List all registered API modules with tool counts and descriptions. | — |
plan_query |
Plan a multi-step query across Canadian government data APIs. | query, top_k |
Exchange rates, interest rates, commodity prices, and inflation data from the Valet API.
| Tool | Description | Key Parameters |
|---|---|---|
boc_get_exchange_rates |
Get daily CAD exchange rates for one or all foreign currencies. | currency, start_date, end_date, recent |
boc_get_interest_rates |
Get Bank of Canada interest rates including policy rate, CORRA, and bond yields. | rate_type, start_date, end_date, recent |
boc_get_commodity_prices |
Get Bank of Canada Commodity Price Index (BCPI) data by commodity category. | commodity_type, start_date, end_date, recent |
boc_get_inflation_data |
Get Consumer Price Index (CPI) inflation data from the Bank of Canada. | indicator, start_date, end_date, recent |
boc_search_series |
Search available Bank of Canada Valet API data series by keyword. | keyword |
boc_get_series_metadata |
Get metadata (label, description, link) for a specific Valet API series. | series_name |
boc_get_observations |
Get raw time-series observations for any Bank of Canada Valet API series. | series_names, start_date, end_date, recent |
boc_list_groups |
List all available data group collections in the Bank of Canada Valet API. | — |
Example: Get USD/CAD exchange rate
call_tool("boc_get_exchange_rates", {"currency": "USD", "recent": 3})
{
"_meta": {
"source": {"api": "bank-of-canada-valet", "url": "https://www.bankofcanada.ca/valet/"},
"cached": false,
"lang": "en",
"timestamp": "2026-04-04T22:16:54.133649+00:00"
},
"data": [
{"date": "2026-04-02", "series_name": "FXUSDCAD", "value": 1.3918, "label": "USD/CAD", "description": "US dollar to Canadian dollar daily exchange rate"},
{"date": "2026-04-01", "series_name": "FXUSDCAD", "value": 1.3888, "label": "USD/CAD", "description": "..."},
{"date": "2026-03-31", "series_name": "FXUSDCAD", "value": 1.3939, "label": "USD/CAD", "description": "..."}
]
}
Bills, MPs, votes, ballots, and Hansard debates from the Open Parliament API.
| Tool | Description | Key Parameters |
|---|---|---|
parl_search_bills |
List Canadian federal bills filtered by session or status. | keyword, session, status, page |
parl_get_bill_details |
Get full details for a specific Canadian federal bill including sponsor and status history. | bill_id |
parl_get_politicians |
Search or list Canadian Members of Parliament by name, party, or province. | name, party, province, page |
parl_search_by_riding |
Find the MP or politician for a specific electoral riding in Canada. | riding |
parl_get_party_members |
Get the current Members of Parliament for a specific political party. | party |
parl_get_votes |
Get House of Commons vote records, optionally filtered by session, bill, or result. | session, bill, result, page |
parl_get_voting_record |
Get votes an MP participated in, with house-wide totals per division. | politician, session, page |
parl_get_debates |
Get Hansard debate transcripts from the House of Commons. | date, politician, page |
parl_search_hansard |
Full-text search of Canadian Hansard debate transcripts. | query, page |
parl_get_ballots |
Get individual MP yea/nay ballots for a specific House of Commons vote. | vote_id, politician, page |
Example: How did an MP vote on a specific bill?
call_tool("parl_get_ballots", {"vote_id": "44-1/333", "politician": "anna-roberts"})
{
"_meta": {"source": {"api": "Open Parliament", "url": "https://api.openparliament.ca/"}, "cached": false, "lang": "en", "timestamp": "..."},
"data": [
{"vote_url": "/votes/44-1/333/", "politician_url": "/politicians/anna-roberts/", "ballot": "No"}
]
}
Note:
parl_get_voting_recordreturns house-wide totals, not individual MP votes. Useparl_get_ballotsfor how a specific MP voted on a specific division.
Food, vehicle, and health product recalls from Healthy Canadians.
| Tool | Description | Key Parameters |
|---|---|---|
recalls_get_recent |
Get the most recent product recalls across all Health Canada categories. | limit, offset |
recalls_search |
Search Health Canada recalls by keyword with optional category filter. | keyword, category, limit, offset |
recalls_get_details |
Get full details of a specific Health Canada recall by recall ID. | recall_id |
recalls_get_food |
Get food product recalls from Health Canada. | keyword, limit, offset |
recalls_get_vehicles |
Get vehicle recalls from Transport Canada and Health Canada. | keyword, limit, offset |
recalls_get_health_products |
Get health product recalls from Health Canada. | keyword, limit, offset |
Drug information from Health Canada's DPD.
| Tool | Description | Key Parameters |
|---|---|---|
drug_search |
Search Health Canada's Drug Product Database for drug products. | brand_name, din, company |
drug_get_details |
Get comprehensive details for a drug product in one call. | drug_code |
drug_get_ingredients |
Get active ingredients for a Health Canada drug product. | drug_code |
drug_get_routes |
Get routes of administration for a Health Canada drug product. | drug_code |
drug_search_companies |
Search for pharmaceutical companies in Health Canada's Drug Product Database. | company_name |
drug_get_schedule |
Get schedule classification for a Health Canada drug product. | drug_code |
drug_get_therapeutic_class |
Get ATC therapeutic classification for a Health Canada drug product. | drug_code |
drug_get_status |
Get market status for a Health Canada drug product. | drug_code |
Note:
drug_codeis the internal database ID (fromdrug_searchresults), NOT the DIN.
80,000+ federal datasets from open.canada.ca.
| Tool | Description | Key Parameters |
|---|---|---|
ckan_search_datasets |
Search Canada's Open Data portal (open.canada.ca) for datasets by keyword. | query, filters, rows, start, sort |
ckan_get_dataset_details |
Get full details for a specific Canadian Open Data dataset including all resources. | dataset_id |
ckan_list_organizations |
List all Canadian federal government organizations on the Open Data portal. | sort |
ckan_search_by_tag |
Search Canadian Open Data portal datasets by tag or keyword label. | tag, rows |
ckan_get_resource |
Get details for a specific data resource (file) from Canada's Open Data portal. | resource_id |
ckan_list_groups |
List thematic dataset groups available on Canada's Open Data portal. | — |
ckan_get_dataset_stats |
Get aggregate statistics for Canada's Open Data portal (open.canada.ca). | — |
Food nutrition data from Health Canada's CNF.
| Tool | Description | Key Parameters |
|---|---|---|
nutrient_search_foods |
Search Canadian Nutrient File foods by name using client-side filtering. | query |
nutrient_get_food_details |
Get detailed information about a specific food item from the Canadian Nutrient File. | food_id |
nutrient_get_nutrient_amounts |
Get all nutrient amounts per 100g for a specific food from the Canadian Nutrient File. | food_id |
nutrient_get_serving_sizes |
Get serving size measures and conversion factors for a food item. | food_id |
nutrient_search_by_food_group |
List all foods within a specific food group from the Canadian Nutrient File. | food_group_id |
nutrient_list_nutrients |
List all nutrients available in the Canadian Nutrient File database. | — |
nutrient_list_food_groups |
List all food group categories in the Canadian Nutrient File database. | — |
nutrient_compare_foods |
Compare nutritional content of 2-5 foods from the Canadian Nutrient File. | food_ids, format, nutrients |
Real-time weather, climate, air quality, hydrology, and more from MSC GeoMet OGC API.
| Tool | Description | Key Parameters |
|---|---|---|
wx_get_aqhi |
Get current Air Quality Health Index (AQHI) reading for a location. | lat, lon, location_id |
wx_get_aqhi_forecast |
Get AQHI air quality forecast periods for a location. | lat, lon, location_id |
wx_get_aqhi_history |
Get historical AQHI observations for a location with optional date range. | location_id, start_date, end_date, limit |
wx_get_climate_daily |
Get historical daily climate ob |
$ claude mcp add mcp-canada \
-- python -m otcore.mcp_server <graph>