Skip to main content

MCP server for Canadian federal government data โ€” bilingual, multi-source, AI-ready.

Project description

๐Ÿ mcp-canada

MCP server giving AI agents structured access to Canadian federal government data

PyPI CI Coverage 96% Integration Tests Python 3.12+ License: MIT MCP Compatible Built with FastMCP


128 tools, ~64 prompts, and ~88 resources across 9 federal APIs + 1 provincial API + 1 municipal API + 1 local SQLite datastore โ€” exchange rates, parliamentary data, product recalls, drug information, 80K+ open datasets, food nutrition data, real-time weather, immigration statistics, Ontario provincial data, Toronto municipal data, and persistent local storage. All bilingual (English/French).

Quick Start

# Auto-configure your platform (interactive)
uvx mcp-canada install

# Or name platforms directly
uvx mcp-canada install claude-desktop cursor vscode

Supports 14 platforms: Claude Desktop, Claude Code, Cursor, VS Code, Windsurf, Zed, Codex CLI, Gemini CLI, Amazon Q, OpenCode, Cline, Roo Code, Goose CLI, Junie CLI.

Manual Setup

Claude Desktop

Add to ~/Library/Application Support/Claude/claude_desktop_config.json:

{
  "mcpServers": {
    "mcp-canada": {
      "command": "uvx",
      "args": ["mcp-canada"]
    }
  }
}
Claude Code
claude mcp add mcp-canada -- uvx mcp-canada
From Source
git clone https://github.com/reyemtech/mcp-canada.git
cd mcp-canada
uv run mcp-canada

Options

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

Examples

See EXAMPLES.md for 23 cross-API intelligence scenarios โ€” from tracing prairie drought to the Canadian dollar, to building pharmaceutical safety audits, to assembling MP accountability briefs, to joining data from multiple APIs in a single SQL query. Each example includes the exact prompt and tool chain you can run today.

How Discovery Works

With 110 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

Tool Catalog

All tools accept lang: "en" | "fr" for bilingual support. Responses include a _meta envelope with source attribution and cache status.

๐Ÿ” Meta / Discovery โ€” 5 tools (always visible)

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

๐Ÿฆ Bank of Canada โ€” 8 tools

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": "..."}
  ]
}

๐Ÿ›๏ธ Open Parliament โ€” 10 tools

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_record returns house-wide totals, not individual MP votes. Use parl_get_ballots for how a specific MP voted on a specific division.


โš ๏ธ Recalls & Safety Alerts โ€” 6 tools

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 Product Database โ€” 8 tools

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_code is the internal database ID (from drug_search results), NOT the DIN.


๐Ÿ“Š CKAN Open Data โ€” 7 tools

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). โ€”

๐Ÿฅ— Canadian Nutrient File โ€” 8 tools

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

๐ŸŒค๏ธ MSC GeoMet Weather โ€” 34 tools

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 observations for a weather station. station_id, start_date, end_date, limit
wx_get_climate_monthly Get monthly climate summary data for a weather station. station_id, year, limit
wx_get_climate_normals Get 30-year climate normals for a weather station. station_id
wx_get_climate_projections Get CMIP5 or CMIP6 climate projection collection metadata. model, scenario, variable
wx_get_drought_index Get SPEI drought index collection metadata. lat, lon, spei_period
wx_compare_climate_periods Compare daily climate averages between two time periods for a station. station_id, period1_start, period1_end, period2_start, period2_end
wx_get_climate_trends Get long-term climate trends from the AHCCD dataset. station_id, measurement_type
wx_list_collections Browse all available MSC GeoMet weather data collections. โ€”
wx_get_collection_items Query any MSC GeoMet weather collection by ID and return its items. collection_id, bbox, datetime_filter, properties, limit
wx_get_current_conditions Get current weather conditions for a Canadian location. location, lat, lon, province
wx_get_forecast Get the multi-day weather forecast for a Canadian location. location, lat, lon, province, days
wx_get_weather_alerts Get active weather alerts and warnings for Canada or a specific province. province, alert_type, limit
wx_search_stations Search for Environment Canada climate observation stations. province, lat, lon, name
wx_get_station_data Get hourly climate observations from a specific Environment Canada station. station_id, date, limit
wx_get_water_levels Get real-time water level readings at a Canadian hydrometric station. station_number, lat, lon
wx_get_water_flow Get real-time water discharge (flow rate) at a Canadian hydrometric station. station_number, lat, lon
wx_get_daily_mean_water Get daily mean water level and discharge for a hydrometric station. station_number, start_date, end_date
wx_search_hydro_stations Search for hydrometric water monitoring stations by province or location. province, lat, lon, name
wx_get_flood_risk Get flood risk assessment for a hydrometric station by comparing current to historical max. station_number
wx_get_marine_forecast Get marine weather forecasts for Canadian coastal and offshore waters. province, lat, lon
wx_get_hurricane_tracks Get active hurricane and tropical storm track data for Canada and adjacent waters. โ€”
wx_get_thunderstorm_outlook Get thunderstorm outlook regions and risk levels for Canada. province
wx_get_radar_data Get radar precipitation accumulation data for a location in Canada. lat, lon
wx_get_lightning Get lightning strike information for Canada. โ€”
wx_get_uv_index Get UV index forecast for a location in Canada. lat, lon, location
wx_get_snow_depth Get snow depth from the nearest SWOB real-time weather observation station. station_id, lat, lon
wx_get_snow_water_equivalent Get estimated snow water equivalent (SWE) from snow depth observations. station_id, lat, lon, density_factor
wx_get_weather_summary Get a comprehensive weather summary combining current conditions, forecast, active alerts, and air quality. lat, lon, location, province
wx_get_historical_extremes Get all-time weather records for a climate station: highest/lowest temperatures, most precipitation, most snowfall. station_id
wx_get_growing_season Get growing season dates and frost-free period for a climate station based on 30-year normals. station_id
wx_get_heating_cooling_days Get cumulative heating and cooling degree days for energy analysis at a climate station. station_id, start_date, end_date

๐Ÿ“Š Statistics Canada WDS + SDMX โ€” 15 tools

Time series data, cube metadata, catalog search, and SDMX server-side filtering from the Statistics Canada Web Data Service.

Inspired by mcp-statcan by Aryan Jhaveri.

Tool Description Key Parameters
sc_search_cubes Search Statistics Canada tables (cubes) by keyword using BM25 ranking. query, limit
sc_get_cube_metadata Get full metadata and dimension structure for a Statistics Canada table. product_id
sc_get_code_sets Get all WDS code sets for decoding numeric codes in StatCan responses. โ€”
sc_get_series_info_by_vector Get series metadata by vectorId (title, frequency, scalar factor, units). vector_id
sc_get_series_info_by_coord Get series metadata by productId + coordinate (dot-separated dimension members). product_id, coordinate
sc_get_data_by_vector Get the latest N observations for a Statistics Canada series by vectorId. vector_id, n
sc_get_data_by_coord Get the latest N observations for a Statistics Canada series by productId + coordinate. product_id, coordinate, n
sc_get_data_by_date_range Get Statistics Canada observations within a reference period date range. vector_id, start_date, end_date
sc_get_bulk_vector_data Get observations for multiple Statistics Canada series within a release date range. vector_ids, start_release, end_release
sc_get_changed_series Get the list of Statistics Canada series (vectors) that changed today. โ€”
sc_get_changed_cubes Get the list of Statistics Canada tables (cubes) that changed on a specific date. date
sc_get_sdmx_structure Get SDMX dimension codelists for a Statistics Canada table. product_id
sc_get_sdmx_data Get server-side filtered StatCan observations using SDMX key syntax. product_id, key, last_n, start_period, end_period, dimensions
sc_get_sdmx_vector_data Get observations for a single StatCan vector via SDMX with date range filtering. vector_id, start_period, end_period
sc_fetch_vectors_to_store Fetch multiple StatCan vectors and store them to the shared datastore for SQL queries. vector_ids, start_release, end_release, table_name

๐Ÿ—„๏ธ Local Datastore โ€” 6 tools

Local SQLite persistence layer for storing agent-generated data, fetched API results, or any structured data. Tables persist across sessions at ~/.mcp-canada/datastore.db.

Tool Description Key Parameters
ds_create_table Create a named table in the local SQLite datastore. table_name, columns, data
ds_insert_data Insert rows of data into an existing table in the local SQLite datastore. table_name, rows
ds_query Run a read-only SQL query against the local SQLite datastore. sql
ds_list_tables List all tables in the local SQLite datastore. โ€”
ds_get_schema Get the column schema for a table in the local SQLite datastore. table_name
ds_drop_table Drop (delete) a table from the local SQLite datastore. table_name

Note: ds_query supports SELECT, PRAGMA, EXPLAIN, and CREATE INDEX only โ€” no mutations via query. Use ds_insert_data to write data. Table and column names are validated against an allowlist regex to prevent SQL injection.


๐Ÿ IRCC Immigration โ€” 10 tools

Permanent residents, temporary workers, study permits, Express Entry, asylum, and refugee data from IRCC Open Data.

Tool Description Key Parameters
ircc_get_permanent_residents Get IRCC permanent resident admissions data by breakdown dimension. breakdown, year
ircc_get_study_permits Get IRCC study permit issuance data by breakdown dimension. breakdown, year
ircc_get_work_permits Get IRCC work permit data for IMP or TFWP programs. permit_type, breakdown, year
ircc_get_express_entry Get IRCC Express Entry data for admissions or invited candidates. stream, breakdown, year
ircc_get_tr_to_pr Get IRCC data on temporary residents who transitioned to permanent residence. breakdown, year
ircc_get_asylum Get IRCC asylum claimant data by province and demographic breakdown. breakdown, year
ircc_get_ops Get IRCC operational processing statistics (monthly snapshots). breakdown
ircc_get_afghan Get IRCC data on Afghan refugees admitted to Canada. breakdown, year
ircc_get_adhoc_pr Get IRCC ad-hoc historical permanent resident data (1980-2023, English-only). breakdown
ircc_list_datasets List all available IRCC open data datasets with their breakdown dimensions. โ€”

Note: IRCC suppresses values between 0-5 (shown as null) and rounds all other values to the nearest multiple of 5 for privacy protection. Ad-hoc PR files (ircc_get_adhoc_pr) are English-only.


๐Ÿ›๏ธ Ontario Government Open Data โ€” 6 tools

Provincial datasets from the Ontario Open Data Catalogue (CKAN 3 API) with 3,000+ datasets from Ontario ministries and agencies. Includes curated population projections from the Ministry of Finance.

Tool Description Key Parameters
ontario_search_datasets Search Ontario's Open Data Catalogue (data.ontario.ca) for datasets by keyword. query, filters, rows
ontario_get_dataset_details Get full details for a specific Ontario Open Data dataset including all resources. dataset_id
ontario_get_resource Get details for a specific data resource (file) from the Ontario Open Data Catalogue. resource_id
ontario_list_organizations List all Ontario government ministries and agencies that publish open data. sort
ontario_get_dataset_stats Get aggregate statistics for the Ontario Open Data Catalogue (data.ontario.ca). โ€”
ontario_get_population_projections Fetch Ontario Ministry of Finance population projections by region (2024-2051). year, recent, filter

๐Ÿ™๏ธ Toronto Open Data โ€” 12 tools

Municipal datasets from the City of Toronto Open Data Portal (CKAN 2.9 API) with 500+ datasets. Includes TTC transit schedules (GTFS), neighbourhood census profiles, 311 service requests, RentSafeTO apartment evaluations, and short-term rental registrations.

Discovery (5)

Tool Description Key Parameters
toronto_search_datasets Search Toronto's Open Data portal (open.toronto.ca) for datasets by keyword. query, filter_query, rows
toronto_get_dataset_details Get full details for a specific Toronto Open Data dataset including all resources. dataset_id
toronto_get_resource Get details for a specific data resource (file) from the Toronto Open Data portal. resource_id
toronto_list_organizations List all City of Toronto divisions and agencies that publish open data. โ€”
toronto_get_dataset_stats Get aggregate statistics for the Toronto Open Data portal (open.toronto.ca). โ€”

Curated (7)

Tool Description Key Parameters
toronto_get_ttc_stops Search TTC (Toronto Transit Commission) stops by name from GTFS static schedule. query
toronto_get_ttc_routes List TTC (Toronto Transit Commission) routes from GTFS static schedule data. route_type
toronto_get_neighbourhood_profile Get census indicator data for Toronto neighbourhoods from the Neighbourhood Profiles dataset. neighbourhood, characteristic, limit
toronto_compare_neighbourhoods Compare a single census indicator across all 140 Toronto neighbourhoods. characteristic, limit
toronto_get_311_requests Fetch Toronto 311 service requests (citizen complaints and service calls) for a given year. year, ward, service_type, status, limit
toronto_get_rentsafe_evaluations Query RentSafeTO apartment building evaluation scores from City of Toronto inspections. ward, min_score, limit
toronto_get_short_term_rentals Query Toronto short-term rental (STR) operator registration records. ward, status, limit

Prompt Catalog

~64 workflow prompts across 12 modules. Prompts appear as slash-commands in Claude Desktop and other MCP-compatible clients. Discoverable via client.list_prompts().

All prompts accept lang: "en" | "fr". Guided workflows return list[Message] (user + assistant roles for multi-step chaining). Quick lookups return a single user message with tool invocation instructions.

๐Ÿฆ Bank of Canada (5 prompts)

Prompt Type Description
boc_analyze_rates Guided Exchange rate analysis workflow โ€” chains boc_search_series โ†’ boc_get_exchange_rates
boc_get_policy_rate Quick Get current BoC overnight policy rate
boc_compare_currencies Guided Compare two currencies over a date range
boc_explore_commodities Guided Explore BCPI commodity prices โ€” chains boc_list_groups โ†’ boc_get_commodity_prices
boc_check_inflation Quick Get CPI inflation data

๐Ÿ“Š Statistics Canada (6 prompts)

Prompt Type Description
statcan_find_data Guided Search for StatCan cubes and get vector data
statcan_quick_vector Quick Get the latest N observations for a known vectorId
statcan_explore_sdmx Guided Explore and filter StatCan data using SDMX key syntax
statcan_store_and_query Guided Cross-module flagship: fetch vectors โ†’ store โ†’ SQL JOIN
statcan_monitor_changes Quick Check which StatCan series changed today
statcan_compare_series Guided Compare multiple StatCan time series

๐Ÿ—„๏ธ Local Datastore (4 prompts)

Prompt Type Description
ds_create_and_query Guided Create a table, insert data, and run SQL queries
ds_quick_query Quick Run a SQL query against an existing datastore table
ds_explore_tables Quick List tables and inspect schemas
ds_cross_module_join Guided Fetch data from two APIs and JOIN in SQL

๐Ÿ“Š CKAN Open Data (5 prompts)

Prompt Type Description
ckan_explore_federal_data Guided Discover and download federal datasets from open.canada.ca
ckan_quick_search Quick Search for federal datasets by keyword
ckan_browse_organizations Quick Browse datasets by government organization
ckan_browse_by_tag Quick Browse datasets by topic tag
ckan_portal_overview Quick Get portal statistics and popular tags

๐Ÿ›๏ธ Open Parliament (5 prompts)

Prompt Type Description
parl_research_bill Guided Research a federal bill โ€” search โ†’ details โ†’ sponsor โ†’ votes
parl_find_mp Quick Look up an MP's profile and riding
parl_track_voting Guided Track how an MP votes on bills
parl_search_debates Quick Search Hansard debate transcripts
parl_party_breakdown Guided Get all MPs from a political party

โš ๏ธ Recalls (4 prompts)

Prompt Type Description
recalls_investigate_alert Guided Investigate a recall โ€” search โ†’ details โ†’ related alerts
recalls_quick_search Quick Search for recalls by keyword
recalls_check_food_safety Quick Check for food product recalls
recalls_vehicle_safety Quick Check for vehicle recalls

๐Ÿ’Š Drug Database (5 prompts)

Prompt Type Description
drug_research_medication Guided Research a drug โ€” search โ†’ ingredients โ†’ schedule โ†’ status
drug_quick_search Quick Search drugs by brand name or DIN
drug_check_company Quick Look up a pharmaceutical company's products
drug_compare_generics Guided Compare a brand drug to its generic equivalents
drug_check_status Quick Get market status for a drug product

๐Ÿฅ— Canadian Nutrient File (5 prompts)

Prompt Type Description
nutrient_analyze_food Guided Full nutrition analysis โ€” search โ†’ amounts โ†’ serving sizes
nutrient_quick_search Quick Search for foods in the Canadian Nutrient File
nutrient_compare_foods Guided Compare nutritional content across multiple foods
nutrient_browse_food_groups Quick List all foods in a food group category
nutrient_check_daily_values Quick Look up daily value nutrient thresholds

๐ŸŒค๏ธ MSC GeoMet Weather (6 prompts)

Prompt Type Description
wx_check_weather Guided Current conditions + forecast + alerts for a location
wx_quick_forecast Quick Get a quick weather forecast
wx_analyze_climate Guided Analyze historical climate data for a station
wx_check_air_quality Guided Get AQHI readings and health recommendations
wx_water_conditions Guided Check water levels and flood risk at a hydrometric station
wx_severe_weather Quick Check for active severe weather alerts

๐Ÿ IRCC Immigration (5 prompts)

Prompt Type Description
ircc_explore_immigration Guided Explore IRCC immigration data โ€” choose dataset โ†’ breakdown โ†’ year
ircc_quick_pr Quick Get permanent resident admissions data
ircc_track_express_entry Guided Track Express Entry admissions and invite rounds
ircc_compare_pathways Guided Compare immigration pathways (PR vs study vs work)
ircc_analyze_trends Guided Analyze multi-year immigration trends

๐Ÿ›๏ธ Ontario Open Data (4 prompts)

Prompt Type Description
ontario_explore_data Guided Discover and download Ontario provincial datasets
ontario_quick_search Quick Search for Ontario datasets by keyword
ontario_browse_ministries Quick Browse datasets by Ontario ministry
ontario_population_data Guided Get Ontario population projections by region

๐Ÿ™๏ธ Toronto Open Data (6 prompts)

Prompt Type Description
toronto_explore_city_data Guided Discover and download Toronto municipal datasets
toronto_quick_search Quick Search for Toronto datasets by keyword
toronto_explore_neighbourhood Guided Explore census and service data for a neighbourhood
toronto_ttc_transit Guided Look up TTC stops and routes from GTFS data
toronto_check_311 Guided Analyze 311 service requests by year/ward/type
toronto_rental_analysis Guided Analyze rental data โ€” RentSafeTO + short-term rentals

Resource Catalog

~88 reference resources across 12 modules. Resources provide instant context without tool calls โ€” agents can read them without consuming API rate limits. Discoverable via client.list_resources().

URI scheme conventions:

  • data:// โ€” JSON catalogs (machine-parseable keyโ†’value mappings)
  • docs:// โ€” Markdown documentation guides (human-readable explanations)
  • template:// โ€” Markdown response templates with {placeholder} syntax

๐Ÿฆ Bank of Canada (7 resources)

URI Type Description
data://boc/currency-codes Catalog 17 FX currency codes with bilingual labels
data://boc/interest-rate-types Catalog Rate types mapped to Valet series codes
data://boc/commodity-types Catalog BCPI commodity categories with bilingual descriptions
data://boc/inflation-indicators Catalog CPI measures with series codes and bilingual descriptions
docs://boc/series-naming Guide FX/rate/CPI/BCPI series naming conventions
docs://boc/api-quirks Guide Date formats, null values, cache TTLs, common 404 causes
template://boc/rate-report Template Exchange rate report with {currency}, {start_date}, {latest_value}

๐Ÿ“Š Statistics Canada (8 resources)

URI Type Description
data://statcan/frequency-codes Catalog WDS frequency codes with bilingual labels
data://statcan/scalar-factor-codes Catalog WDS scalar factor codes (units multipliers)
data://statcan/status-codes Catalog WDS data status codes (provisional, revised, etc.)
data://statcan/uom-codes Catalog WDS unit of measure codes with bilingual labels
docs://statcan/wds-guide Guide WDS API overview, productId structure, coordinate system
docs://statcan/sdmx-key-syntax Guide SDMX key syntax for filtered data retrieval
docs://statcan/coordinate-system Guide How to build dot-separated dimension coordinates
template://statcan/time-series-report Template Time series report with {product_id}, {vector_id}, {observations}

๐Ÿ—„๏ธ Local Datastore (6 resources)

URI Type Description
data://datastore/column-types Catalog Supported SQLite column types with examples
data://datastore/identifier-rules Catalog Identifier regex pattern and allowed characters
docs://datastore/sql-guide Guide Supported SQL statements, query examples, safety rules
docs://datastore/cross-module-patterns Guide Fetch-store-JOIN workflow for cross-API analytics
template://datastore/query-report Template SQL query result report template
template://datastore/schema-report Template Table schema description template

๐Ÿ“Š CKAN Open Data (7 resources)

URI Type Description
data://ckan/federal-organizations Catalog Federal org slugs for use in organization= search filter
data://ckan/popular-tags Catalog Most-used dataset tags on open.canada.ca
data://ckan/resource-formats Catalog Available resource file formats (CSV, XLSX, GeoJSON, etc.)
docs://ckan/search-tips Guide Advanced CKAN search syntax and filter examples
docs://ckan/api-quirks Guide Pagination, bilingual fields, resource vs dataset distinction
template://ckan/dataset-summary Template Dataset summary with {title}, {organization}, {resources}
template://ckan/resource-report Template Resource download report template

๐Ÿ›๏ธ Open Parliament (7 resources)

URI Type Description
data://parliament/party-codes Catalog Political party codes and bilingual names
data://parliament/session-format Catalog Session ID format and recent sessions
data://parliament/bill-types Catalog Bill type codes (C-, S-, M-) with descriptions
docs://parliament/voting-guide Guide How divisions work, yea/nay/paired, how to look up ballots
docs://parliament/hansard-guide Guide Hansard transcript structure and full-text search tips
docs://parliament/api-quirks Guide Pagination, URL slug format, URL-based IDs
template://parliament/mp-profile Template MP profile with {name}, {party}, {riding}, {votes}

โš ๏ธ Recalls (6 resources)

URI Type Description
data://recalls/categories Catalog Recall category codes (food, vehicle, health-product, etc.)
data://recalls/severity-levels Catalog Recall risk severity levels
docs://recalls/search-tips Guide Search strategies, category filtering, pagination
docs://recalls/food-safety-guide Guide How to interpret food recall risk levels and actions
template://recalls/safety-alert Template Safety alert summary with {product}, {hazard}, {action}
template://recalls/recall-report Template Full recall report template

๐Ÿ’Š Drug Database (7 resources)

URI Type Description
data://drug/schedule-codes Catalog Health Canada schedule classification (Prescription/OTC/Schedule I-III)
data://drug/route-codes Catalog Routes of administration with bilingual labels
data://drug/status-codes Catalog Market status codes (marketed, discontinued, etc.)
data://drug/therapeutic-classes Catalog ATC therapeutic class codes and descriptions
docs://drug/din-guide Guide DIN vs drug_code distinction, how to find a drug_code
docs://drug/search-tips Guide Brand vs generic search, company name matching
template://drug/medication-report Template Drug profile with {drug_code}, {brand_name}, {schedule}, {ingredients}

๐Ÿฅ— Canadian Nutrient File (7 resources)

URI Type Description
data://nutrient/food-groups Catalog CNF food group IDs (1-25) with bilingual names
data://nutrient/common-nutrients Catalog Key nutrient IDs for common dietary analysis
data://nutrient/serving-size-measures Catalog Common measure units used in CNF serving sizes
docs://nutrient/cnf-guide Guide CNF data structure, food_id vs food_code, API overview
docs://nutrient/interpretation-guide Guide How to interpret per-100g nutrient values and daily values
template://nutrient/food-profile Template Food nutrition profile with {food_name}, {nutrients}, {serving_size}
template://nutrient/comparison-report Template Multi-food comparison report template

๐ŸŒค๏ธ MSC GeoMet Weather (8 resources)

URI Type Description
data://weather/province-codes Catalog Two-letter province/territory codes for station search
data://weather/common-stations Catalog Well-known climate station IDs across provinces
data://weather/aqhi-scale Catalog AQHI risk categories 1-10+ with health messages
data://weather/climate-normals-periods Catalog Available 30-year climate normal periods
docs://weather/station-guide Guide How to find station IDs, station types, coverage
docs://weather/climate-data-guide Guide Daily vs monthly vs normals vs AHCCD distinctions
docs://weather/ogc-api-guide Guide OGC API collections structure, bbox/datetime filtering
template://weather/forecast-report Template Weather forecast report with {location}, {conditions}, {forecast}

๐Ÿ IRCC Immigration (7 resources)

URI Type Description
data://ircc/immigration-categories Catalog Immigration category codes and bilingual names
data://ircc/dataset-list Catalog All 10 IRCC datasets mapped to tool names and breakdowns
data://ircc/express-entry-streams Catalog Express Entry stream codes and descriptions
data://ircc/work-permit-types Catalog IMP vs TFWP work permit program codes
docs://ircc/data-guide Guide IRCC open data structure, XLSX format, suppression rules
docs://ircc/xlsx-quirks Guide Multi-sheet XLSX parsing, suppressed values, year totals
template://ircc/immigration-report Template Immigration data report with {dataset}, {breakdown}, {year}, {data}

๐Ÿ›๏ธ Ontario Open Data (6 resources)

URI Type Description
data://ontario/ministries Catalog Ontario ministries and agencies with CKAN org slugs
data://ontario/popular-datasets Catalog Frequently accessed Ontario datasets
data://ontario/resource-formats Catalog Available file formats on data.ontario.ca
docs://ontario/ckan-guide Guide Ontario CKAN API structure, filtering, pagination
docs://ontario/population-projections-guide Guide Population projections XLSX structure, regions, years
template://ontario/dataset-report Template Ontario dataset report with {title}, {organization}, {resources}

๐Ÿ™๏ธ Toronto Open Data (8 resources)

URI Type Description
data://toronto/city-divisions Catalog City of Toronto divisions and agencies
data://toronto/ward-list Catalog All 25 Toronto city council wards with names
data://toronto/neighbourhood-list Catalog All 140 official Toronto neighbourhoods
data://toronto/311-service-types Catalog Common 311 service request type codes
docs://toronto/ckan-guide Guide Toronto CKAN API structure, dataset vs resource distinction
docs://toronto/neighbourhood-profiles-guide Guide Census indicator categories, how to look up characteristics
docs://toronto/gtfs-guide Guide TTC GTFS structure, stop vs route vs trip distinction
template://toronto/neighbourhood-report Template Neighbourhood profile with {neighbourhood}, {indicators}, {ward}

Response Format

All tools return a consistent envelope:

{
  "_meta": {
    "source": {"api": "bank-of-canada-valet", "url": "https://..."},
    "cached": true,
    "lang": "en",
    "timestamp": "2026-04-04T12:00:00Z"
  },
  "data": [ ... ]
}

Errors return:

{
  "error": {
    "code": "INVALID_SERIES",
    "message": "Series 'FXXYZCAD' not found.",
    "suggestions": ["FXUSDCAD", "FXEURCAD"]
  }
}

Architecture

src/mcp_canada/
โ”œโ”€โ”€ server.py              # FastMCP entry point, transport, module loading
โ”œโ”€โ”€ shared/                # Cross-module utilities
โ”‚   โ”œโ”€โ”€ cache.py           # TTL-based in-memory cache (aiocache)
โ”‚   โ”œโ”€โ”€ envelope.py        # Response/error envelope (make_response/make_error)
โ”‚   โ”œโ”€โ”€ http.py            # Shared HTTP client with retry (tenacity)
โ”‚   โ”œโ”€โ”€ rate_limiter.py    # Per-source token bucket
โ”‚   โ””โ”€โ”€ i18n.py            # Bilingual error messages
โ”œโ”€โ”€ meta/
โ”‚   โ””โ”€โ”€ list_modules.py    # list_modules meta-tool
โ””โ”€โ”€ modules/
    โ”œโ”€โ”€ bank_of_canada/    # 8 tools โ€” Valet API
    โ”œโ”€โ”€ open_parliament/   # 10 tools โ€” Parliament API
    โ”œโ”€โ”€ recalls/           # 6 tools โ€” Healthy Canadians API
    โ”œโ”€โ”€ drug_database/     # 8 tools โ€” Health Canada DPD
    โ”œโ”€โ”€ ckan/              # 7 tools โ€” Open Data Portal
    โ”œโ”€โ”€ nutrient_file/     # 8 tools โ€” Canadian Nutrient File
    โ”œโ”€โ”€ datastore/         # 6 tools โ€” local SQLite persistence
    โ”œโ”€โ”€ ircc/              # 10 tools โ€” IRCC Immigration Open Data
    โ”œโ”€โ”€ ontario/           # 6 tools โ€” Ontario Open Data Catalogue
    โ”œโ”€โ”€ toronto/           # 12 tools โ€” City of Toronto Open Data Portal
    โ””โ”€โ”€ weather/           # 34 tools โ€” MSC GeoMet OGC API
        โ”œโ”€โ”€ current/       # 5 tools โ€” realtime conditions, forecast, alerts
        โ”œโ”€โ”€ climate/       # 7 tools โ€” daily/monthly/normals/trends
        โ”œโ”€โ”€ aqhi/          # 3 tools โ€” air quality health index
        โ”œโ”€โ”€ hydro/         # 5 tools โ€” water levels, flow, flood risk
        โ”œโ”€โ”€ marine/        # 3 tools โ€” marine forecasts, hurricane tracks
        โ”œโ”€โ”€ severe/        # 3 tools โ€” radar, lightning, UV index
        โ”œโ”€โ”€ snow/          # 2 tools โ€” snow depth, snow water equivalent
        โ”œโ”€โ”€ collections/   # 2 tools โ€” collection browser and direct query
        โ””โ”€โ”€ summary/       # 4 tools โ€” composite summary, extremes, growing season, degree days

Each module follows a 7-file pattern:

File Purpose
__init__.py Module name and description
constants.py Base URL, rate limits, cache TTLs, API mappings
schemas.py Pydantic v2 response models (always flat)
client.py Async HTTP functions with caching and rate limiting
tools.py @tool decorated MCP tool functions
prompts.py @prompt functions โ€” guided workflows + quick lookups
resources.py @resource functions โ€” catalogs, docs, templates

New modules are auto-discovered โ€” drop a folder in modules/ and it registers via FileSystemProvider.

Development

# Install dependencies
uv sync

# Run tests (653 unit tests, ~10s)
uv run pytest

# Run integration tests against live APIs (~2min)
uv run pytest tests/integration/ -v -m integration --timeout=120

# Type check and lint
uv run pyright
uv run ruff check src/ tests/

# Coverage (must be โ‰ฅ95%)
uv run pytest --cov=src/mcp_canada --cov-fail-under=95

Contributing

Each module is self-contained. To add a new API:

  1. Create src/mcp_canada/modules/your_api/ with the 7-file pattern
  2. Add colocated __tests__/ with unit tests
  3. Add integration tests in tests/integration/test_tool_scenarios.py
  4. Update this README's tool, prompt, and resource catalogs

See CLAUDE.md for coding conventions.

License

MIT โ€” Reyem Tech

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

mcp_canada-0.5.0.tar.gz (793.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

mcp_canada-0.5.0-py3-none-any.whl (277.5 kB view details)

Uploaded Python 3

File details

Details for the file mcp_canada-0.5.0.tar.gz.

File metadata

  • Download URL: mcp_canada-0.5.0.tar.gz
  • Upload date:
  • Size: 793.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for mcp_canada-0.5.0.tar.gz
Algorithm Hash digest
SHA256 0eec488ad6728321d12cf4e99ded8d5c01615bd216d7ef796b09818e54430a51
MD5 c4f058d384ee2ddd8d642e3bdcac560a
BLAKE2b-256 e761ea3ef48b0b13983a869dd039b0790e2efab2f4e94717982a316f3240df27

See more details on using hashes here.

Provenance

The following attestation bundles were made for mcp_canada-0.5.0.tar.gz:

Publisher: release.yml on ReyemTech/mcp-canada

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file mcp_canada-0.5.0-py3-none-any.whl.

File metadata

  • Download URL: mcp_canada-0.5.0-py3-none-any.whl
  • Upload date:
  • Size: 277.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for mcp_canada-0.5.0-py3-none-any.whl
Algorithm Hash digest
SHA256 c03a0d8621e881f06b58f60e4f135f82ea42a49287f62944f93de2f3117b9aa6
MD5 211c7b086efb53b0006a92bd4de00b13
BLAKE2b-256 548fce90eb59007a1aad535605a18085dfbe39fec256a9d8e21764b9b8c41868

See more details on using hashes here.

Provenance

The following attestation bundles were made for mcp_canada-0.5.0-py3-none-any.whl:

Publisher: release.yml on ReyemTech/mcp-canada

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page