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


193 tools, ~81 prompts, and ~110 resources across 9 federal APIs + 4 provincial APIs + 2 municipal APIs + 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, York Region ArcGIS Hub data, British Columbia CKAN + WFS geospatial data, Quebec Donnรฉes Quรฉbec CKAN + ArcGIS IQA data, and persistent local storage. All bilingual (English/French).

First ArcGIS Hub module โ€” shared infrastructure in shared/arcgis_hub.py is reusable for future Canadian municipal modules (BC, Calgary, Edmonton, and other cities publishing via ArcGIS Hub). First OGC WFS module โ€” BC introduces WFS 2.0 (OGC) support via shared/ogc.py, making WFS the third portal technology alongside CKAN and ArcGIS Hub. See docs://bc/wfs-query-guide for the CKANโ†’WFS two-step workflow.

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

๐Ÿ—๏ธ York Region Municipal Open Data โ€” 27 tools

Municipal datasets from 4 verified ArcGIS Hub portals (York Region regional government, Markham, Newmarket, Aurora). York Region is the first ArcGIS Hub module in mcp-canada โ€” a second portal technology alongside CKAN, covering Canada's 4th-largest regional municipality and its 1.17M residents. 6 of the 10 York Region area municipalities have no public ArcGIS Hub portal and are explicitly out of scope.

Note: Each portal gets the same 5 discovery tools with a portal-specific prefix (york_region_, markham_, newmarket_, aurora_). York Region regional portal additionally gets 5 curated tools (transit, census, health, roads, waste). Markham gets 2 curated tools (addresses, road network).

Discovery Tools โ€” 20 (5 per portal)

Tool Description Key Parameters
york_region_search_datasets Search York Region regional ArcGIS Hub portal by keyword. query, limit, offset
york_region_get_dataset_details Get full details for a York Region regional Hub dataset by ID. dataset_id
york_region_query_features Query any York Region FeatureServer layer with WHERE clause and field selection. service_url, layer_id, where, out_fields, max_records
york_region_list_organizations List publisher organizations on the York Region Hub portal. โ€”
york_region_list_categories List dataset category tags on the York Region Hub portal. โ€”
markham_search_datasets Search City of Markham ArcGIS Hub portal by keyword. query, limit, offset
markham_get_dataset_details Get full details for a Markham Hub dataset by ID. dataset_id
markham_query_features Query any Markham FeatureServer layer. service_url, layer_id, where, out_fields
markham_list_organizations List publisher organizations on the Markham Hub portal. โ€”
markham_list_categories List dataset category tags on the Markham Hub portal. โ€”
newmarket_search_datasets Search Town of Newmarket ArcGIS Hub portal by keyword. query, limit, offset
newmarket_get_dataset_details Get full details for a Newmarket Hub dataset by ID. dataset_id
newmarket_query_features Query any Newmarket FeatureServer layer. service_url, layer_id, where, out_fields
newmarket_list_organizations List publisher organizations on the Newmarket Hub portal. โ€”
newmarket_list_categories List dataset category tags on the Newmarket Hub portal. โ€”
aurora_search_datasets Search Town of Aurora ArcGIS Hub portal by keyword. query, limit, offset
aurora_get_dataset_details Get full details for an Aurora Hub dataset by ID. dataset_id
aurora_query_features Query any Aurora FeatureServer layer. service_url, layer_id, where, out_fields
aurora_list_organizations List publisher organizations on the Aurora Hub portal. โ€”
aurora_list_categories List dataset category tags on the Aurora Hub portal. โ€”

York Region Curated โ€” 5

Tool Description Key Parameters
york_region_get_transit_stops Search YRT/Viva bus stops by name from York Region Transportation FeatureServer. query, include_geometry, max_records
york_region_get_transit_routes List YRT/Viva transit routes from York Region Transportation FeatureServer. route_short_name, include_geometry
york_region_get_road_network Fetch York Region regional road network (~762 roads) from FeatureServer. name, include_geometry, max_records
york_region_get_public_health Query York Region public health & safety data by location type (beach_water, hospital, drinking_water). location_type, include_geometry
york_region_get_census_demographics Query York Region 2021 Census demographics by Dissemination Area with optional municipality filter. dataset, csdname, max_records
york_region_get_waste_data Query York Region waste management data (diversion_statistics or sites). dataset, include_geometry

Markham Curated โ€” 2

Tool Description Key Parameters
markham_get_addresses Search Markham civic address registry with optional street name filter. street, include_geometry, max_records
markham_get_road_network Query Markham SLRN (Street Location Reference Network) road network by road name. name, include_geometry, max_records

๐ŸŒฒ British Columbia Open Data โ€” 20 tools

Provincial datasets from the BC Data Catalogue (CKAN 2.9 API) and the BC Geographic Warehouse WFS 2.0 endpoint. 13,000+ datasets including active wildfires, fire perimeters, protected areas, mining tenure, water wells, and highway infrastructure.

Discovery (5)

Tool Description Key Parameters
bc_search_datasets Search BC Data Catalogue for datasets by keyword, organization, or filter query. q, rows, start, fq
bc_get_dataset_details Get full metadata for a BC Data Catalogue dataset including WFS queryability. package_id
bc_query_features Query any BCGW WFS layer by object_name with optional CQL filter. object_name, cql, max_records, include_geometry
bc_list_organizations List all BC Data Catalogue organizations (ministries and agencies). โ€”
bc_list_categories List available BC Data Catalogue tags for subject-area discovery. โ€”

Curated WFS (15)

Tool Description Key Parameters
bc_get_active_fires Fetch current active wildfire point locations from BCGW. fire_centre, fire_cause, min_size, max_records, include_geometry
bc_get_fire_perimeters Fetch historical wildfire perimeter polygons from BCGW. fire_year, min_size, max_records, include_geometry
bc_get_forest_tenure Fetch active BC forest tenure agreements from BCGW. client_name, max_records, include_geometry
bc_get_cut_blocks Fetch BC cut block (harvested area) polygons from BCGW. admin_district, max_records, include_geometry
bc_get_protected_areas Fetch BC provincial parks and protected areas from BCGW. designation, min_area_ha, max_records, include_geometry
bc_get_water_wells Fetch BC groundwater well records from BCGW. city, well_class, aquifer_id, max_records, include_geometry
bc_get_wildfire_weather_stations Fetch BC wildfire weather monitoring station locations from BCGW. station_name, max_records, include_geometry
bc_get_local_parks Fetch BC local and regional park boundaries from BCGW. municipality, park_type, max_records, include_geometry
bc_get_mining_tenure Fetch BC active mining tenure claims from BCGW. tenure_type, owner_name, max_records, include_geometry
bc_get_fish_habitat Fetch BC fish habitat and holding area features from BCGW. max_records, include_geometry
bc_get_emergency_rooms Fetch BC emergency room and urgent care facility locations from BCGW. locality, max_records, include_geometry
bc_get_walk_in_clinics Fetch BC walk-in clinic locations from BCGW. locality, max_records, include_geometry
bc_get_highway_profiles Fetch BC provincial highway profile segments from BCGW. highway_number, max_records, include_geometry
bc_get_road_structures Fetch BC road structure (bridge, tunnel, overpass) records from BCGW. structure_type, max_records, include_geometry
bc_get_climate_stations Fetch BC climate monitoring station locations from BCGW. station_name, max_records, include_geometry

๐Ÿ›๏ธ Quebec (Donnรฉes Quรฉbec) Open Data โ€” 18 tools

Provincial datasets from Donnรฉes Quรฉbec โ€” a federated CKAN instance with 1,593 datasets across 139 organizations (provincial ministries, municipalities, and parastatal entities like Hydro-Quรฉbec). All metadata is French-primary.

Discovery (5)

Tool Description Key Parameters
quebec_search_datasets Search the Donnรฉes Quรฉbec open data catalogue (1,593 datasets, 139 orgs). q, rows, start, organization, group
quebec_get_dataset_details Get full details for a Donnรฉes Quรฉbec dataset including resources list and datastore_active flags. package_id
quebec_query_dataset Query records from a Donnรฉes Quรฉbec dataset's best resource (CSV > GeoJSON > JSON > XLSX). package_id, limit
quebec_list_organizations List all 139 organizations in the Donnรฉes Quรฉbec federated catalog with package counts. โ€”
quebec_list_categories List the 10 thematic groups (Santรฉ, Environnement, etc.) used to categorize Donnรฉes Quรฉbec datasets. โ€”

Curated (13)

Tool Description Key Parameters
quebec_get_health_installations Get Quebec health installations (hospitals, CLSCs, CHSLDs, psychiatric) from MSSS datastore. instal_type, rss_name, limit
quebec_get_er_wait_times Get current Quebec emergency room wait times and stretcher occupancy (hourly refresh from MSSS). installation, limit
quebec_get_population_by_municipality Get Quebec municipality population, area, and administrative region from the MAMH municipal registry. region, limit
quebec_get_road_conditions Get current Quebec winter road conditions (pavement state, visibility) from MTQ WFS. โ€”
quebec_get_road_works Get current Quebec road construction zones and work sites from MTQ live WFS CSV. โ€”
quebec_get_road_events Get current Quebec road events (accidents, incidents, warnings) from MTQ live WFS CSV. โ€”
quebec_get_bridge_structures Get Quebec bridge, culvert, tunnel, and retaining wall inventory from MTQ structure registry. route, municipality, region, limit
quebec_get_forest_fires_history Get the MFFP/MRN historical forest fire archive metadata and download URLs from Donnรฉes Quรฉbec. โ€”
quebec_get_air_quality_stations Get the RSQAQ air quality monitoring station network across Quebec (MELCCFP). active_only, limit
quebec_get_air_quality_index Get current Quebec air quality index (IQA) readings from the MELCCFP ArcGIS FeatureServer. limit
quebec_get_water_quality_monitoring Get the MELCCFP physicochemical water quality monitoring dataset metadata and download URLs. โ€”
quebec_get_electricity_data Get historical Quebec electricity production and consumption data from Hydro-Quรฉbec (via Donnรฉes Quรฉbec CSV). limit
quebec_get_protected_areas Get the MELCCFP protected areas registry (Registre des aires protรฉgรฉes) metadata and download URLs. โ€”

Prompt Catalog

~75 workflow prompts across 14 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

๐Ÿ—๏ธ York Region Municipal Open Data (5 prompts)

Prompt Type Description
york_region_explore_transit Guided YRT/Viva transit analysis โ€” chains york_region_get_transit_stops โ†’ york_region_get_transit_routes
york_region_explore_census Guided Compare 2021 Census demographics across York Region municipalities
york_region_explore_health Guided Explore public health data โ€” beach water, hospitals, drinking water
york_region_quick_dataset_search Quick One-shot search across York Region and municipality portals
markham_explore_infrastructure Guided Explore Markham civic addresses and SLRN road network

๐ŸŒฒ British Columbia Open Data (6 prompts)

Prompt Type Description
bc_explore_wildfires Guided Multi-step wildfire analysis โ€” chains bc_get_active_fires โ†’ bc_get_fire_perimeters โ†’ bc_get_wildfire_weather_stations
bc_explore_forestry Guided Forestry land use analysis โ€” chains bc_get_forest_tenure โ†’ bc_get_cut_blocks โ†’ bc_get_protected_areas
bc_explore_environment Guided Environmental pressure analysis โ€” chains bc_get_water_wells โ†’ bc_get_local_parks โ†’ bc_get_mining_tenure
bc_quick_dataset_search Quick Two-step BC dataset discovery: CKAN search โ†’ WFS queryability check
bc_check_water_quality Quick Retrieve BC groundwater well records by city, well class, or aquifer ID
bc_wildfire_status_now Quick Get current active wildfire status filtered by urgency or fire centre

Resource Catalog

~103 reference resources across 14 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}

๐Ÿ—๏ธ York Region Municipal Open Data (8 resources)

URI Type Description
data://york_region/portals Catalog All 10 York Region municipalities with portal status (4 verified, 6 no portal)
data://york_region/municipalities Catalog All 9 local municipalities + region with 2021 Census population and area
data://york_region/feature_services Catalog York Region curated FeatureServer catalog with tool names and layer IDs
docs://york_region/esri-field-naming Guide ESRI field naming conventions (OBJECTID, ALL_CAPS, Shape__Length)
docs://york_region/portal-landscape Guide Which 4 of 10 municipalities have ArcGIS Hub portals and why others don't
docs://york_region/census-variables Guide 2021 Census focused field set (10 columns), CSDNAME filter, full 364-field access
docs://york_region/arcgis-query-patterns Guide ArcGIS SQL WHERE clause syntax โ€” LIKE, case sensitivity, quoting, 1=1 pattern
template://york_region/transit-query-response Template YRT/Viva transit results with {stop_name}, {route_short_name}, {wheelchair_boarding}

๐ŸŒฒ British Columbia Open Data (7 resources)

URI Type Description
data://bc/ministries Catalog BC ministry and agency CKAN org slugs with bilingual names and descriptions
data://bc/wildfire-status-codes Catalog FIRE_STATUS codes (Active, Out of Control, Being Held, etc.) + FIRE_CAUSE codes with bilingual labels
data://bc/object-name-prefixes Catalog All 10 WHSE schema prefixes + 15 curated mcp-canada layer object_name mappings
docs://bc/wfs-query-guide Guide CKANโ†’WFS two-step workflow, CQL syntax primer, pagination notes (bilingual)
docs://bc/bcdc-api-quirks Guide BCDC custom fields (bcdc_type, object_name), queryable_via_wfs derivation, no-groups quirk
template://bc/wildfire-report Template Wildfire season report with {fire_season}, {total_active_fires}, {largest_fire}, centre breakdown
template://bc/dataset-report Template Dataset exploration report with {object_name}, {queryable_via_wfs}, {sample_data}

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
    โ”œโ”€โ”€ york_region/       # 27 tools โ€” York Region ArcGIS Hub (4 portals: york_region, markham, newmarket, aurora)
    โ””โ”€โ”€ 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.6.0.tar.gz (1.2 MB 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.6.0-py3-none-any.whl (374.4 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for mcp_canada-0.6.0.tar.gz
Algorithm Hash digest
SHA256 3b6dff3b30815cff6f2b5dfca0e55b514f77c39d96b5ac05b97ab110eee03c06
MD5 eab96598bdb095ed41ce61c64d519130
BLAKE2b-256 e5ab336be319a730bafbfb75e5587ea2e06386233c0c711a51314ab27c086c9b

See more details on using hashes here.

Provenance

The following attestation bundles were made for mcp_canada-0.6.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.6.0-py3-none-any.whl.

File metadata

  • Download URL: mcp_canada-0.6.0-py3-none-any.whl
  • Upload date:
  • Size: 374.4 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.6.0-py3-none-any.whl
Algorithm Hash digest
SHA256 3369eb4734305564a4a87942d60f869e3d2306867427a2073a4e4073ad73c471
MD5 7d4f5075bfba2fb1934d0546977f3345
BLAKE2b-256 509d39be1eb5bcae06c25b7e69e01a5d73f865ffe577486ff36ee5f7a94bcb15

See more details on using hashes here.

Provenance

The following attestation bundles were made for mcp_canada-0.6.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