Table of contents
donneesqc-mcp: An MCP gateway to public data
donneesqc-mcp is a fork exposing Québec and Montréal open-data operations through MCP tools. Its entry point registers the tool collection and starts an HTTP transport, leaving dataset access and geographic helpers in separate modules.
- Languages
- 3Code breakdown
- Documented components
- 2Explore modules
- Source documents
- 1Read the instructions
Repository languagesPython 98.28%3
Shares calculated from GitHub Linguist bytes.
| Language | % | Bytes |
|---|---|---|
| Python | 157,778 | |
| Shell | 2,183 | |
| Dockerfile | 574 |
1. Overview
1.1. Why it exists
Production MCP server connecting AI assistants to Quebec & Montreal open data APIs with strict schema validation.
1.2. Best fit
Natural language querying of public municipal and provincial datasets across transportation, demographics, and municipal services.
2. Use cases
An MCP server that lets AI agents search, query in SQL and map Québec and Montréal open data in conversation.
- Search open datasets
- Analyst with an agentCKAN open data portals
search_datasets and search_montreal_datasets call the CKAN APIs of Données Québec and Montréal (DQ_API_URL, MTL_API_URL) through helpers/ckan_api.py.
- Run read-only SQL queries
- Analyst with an agentCKAN open data portals
query_resource_sql and query_montreal_sql send SQL to the CKAN DataStore after validate_sql() rejects anything that is not a SELECT.
- Find and query in one call
- Analyst with an agentCKAN open data portals
find_and_query chains search, resource listing and DataStore query so the agent avoids three round trips.
- Explore geospatial layers
- Analyst with an agentIGO geo services
list_geospatial_layers, get_geospatial_features and get_map_url query the IGO WFS and build WMS GetMap URLs through helpers/geo_api.py.
- Geocode, convert coordinates
- Analyst with an agentIGO geo services
geocode and reverse_geocode use the icherche geocoder (GEOCODER_URL); convert_coordinates switches between EPSG:32198 and EPSG:4326.
2.1. Scenario: Counting public trees per borough in Montréal
- Start the server with docker compose up -d (or uv sync then uv run python main.py); it listens on port 8000 with streamable HTTP.
- Register it in the client, for example claude mcp add --transport http donneesqc http://localhost:8000/mcp.
- Ask the agent for public tree data; it calls search_montreal_datasets to find the dataset.
- The agent calls query_montreal_data to see the columns of the DataStore resource.
- It sends a SELECT … GROUP BY query through query_montreal_sql and answers with the per-borough counts.
Files readREADME.mdmain.pydocker-compose.ymlhelpers/config.pyhelpers/ckan_api.pyhelpers/geo_api.pytools/find_and_query.pytools/query_resource_sql.pytools/convert_coordinates.py
3. Getting started
These commands come from the repository documentation. They were not run during this review.
git clone https://github.com/Stefen-Taime/donneesqc-mcp.git
cd donneesqc-mcp
uv sync
cp .env.example .env
set -a && source .env && set +a
uv run python main.pygit clone https://github.com/Stefen-Taime/donneesqc-mcp.git
cd donneesqc-mcp
docker compose up -d4. Repository references
Excerpts from the repository’s guides, in their original language. Links open the inspected source revision.
Prerequisites and first run
4.1. Installation manuelle
README.md
Variables d’environnement :
| Variable | Défaut | Description |
|---|---|---|
| MCP_HOST | 0.0.0.0 | Adresse d’écoute. Utilisez 127.0.0.1 en développement local. |
| MCP_PORT | 8000 | Port du serveur HTTP. |
| MCP_ENV | local | Nom de l’environnement (Sentry). |
| HTTP_TIMEOUT | 30.0 | Timeout HTTP en secondes. |
| HTTP_MAX_RETRIES | 3 | Nombre de tentatives en cas d’erreur réseau ou 5xx. |
| DOWNLOAD_MAX_BYTES | 52428800 (50 Mo) | Taille maximale pour le téléchargement de fichiers. |
| LOG_LEVEL | INFO | Niveau de journalisation Python. |
| SENTRY_DSN | (non défini) | DSN Sentry pour le monitoring. |
Configuration and usage
4.2. Gemini CLI
README.md
5. Features and components 2
- Server bootstrap
- main.py configures logging, optionally initializes Sentry, calls register_all_tools and runs the MCP object with streamable-http. Monitoring is optional; it is not the mechanism that serves dataset queries.
- Data-service boundary
- The documented tool groups cover catalog discovery, CKAN DataStore access, resource downloads and geographic enrichment. A catalog result describes a resource; the actual table or file is a separate request and may use a different format.
6. Architecture
Expand a component to follow its connections, or explore the full diagram.
MCP client
Registered HTTP tools
- From MCP client
- To Catalog search
Catalog search
Table or file resource
- From Catalog search
- To Structured result
Structured result
- From Table or file resource
- To MCP client
Mermaid Interactive diagram
System overview of the components and connections verified in the repository.

flowchart LR
node_agent(("AI Agent"))
node_dqportal["Données Québec"]
node_mtlportal["Montréal CKAN"]
node_geoservice["IGO Services"]
node_geocoder["Address Geocoder"]
subgraph group_server["MCP Server"]
node_entry["MCP Entry<br/>[main.py]"]
node_registry["Tool Registry<br/>[__init__.py]"]
end
subgraph group_geo["Geospatial"]
node_geo_tools["OGC Tools"]
node_geocoding["Geocoding Tools"]
node_coordinates["Coordinate Tools"]
end
subgraph group_shared["Shared Services"]
node_ckan["CKAN API<br/>[ckan_api.py]"]
node_geoapi["OGC API<br/>[geo_api.py]"]
node_coords["Coordinate Conversion<br/>[coords.py]"]
node_http["HTTP Client<br/>[http_client.py]"]
node_config["Configuration<br/>[config.py]"]
end
subgraph group_catalog["Catalog & Data"]
node_dqtools["DQ Catalog Tools"]
node_mtltools["Montréal Tools"]
node_intelligence["Data Intelligence"]
node_downloads["Resource Access"]
end
node_agent -->|"connects MCP"| node_entry
node_entry -->|"registers tools"| node_registry
node_ckan -->|"fetches JSON"| node_http
node_dqtools -->|"queries catalogue"| node_dqportal
node_mtltools -->|"queries catalogue"| node_mtlportal
node_geo_tools -->|"calls"| node_geoapi
node_geoapi -->|"fetches OGC data"| node_http
node_geoapi -->|"requests WFS/WMS"| node_geoservice
node_geocoding -.->|"geocodes addresses"| node_geocoder
node_coordinates -->|"converts coordinates"| node_coords
node_http -->|"uses settings"| node_config
node_geoapi -->|"uses endpoints"| node_config
node_entry -->|"loads server settings"| node_config
group_server -->|"registers"| group_catalog
group_server -->|"registers"| group_geo
group_catalog --> group_shared
class node_entry,node_registry toneBlue
class node_dqtools,node_mtltools,node_intelligence,node_downloads toneAmber
class node_geo_tools,node_geocoding,node_coordinates toneMint
class node_ckan,node_geoapi,node_coords,node_http,node_config toneRose
class node_agent,node_dqportal,node_mtlportal,node_geoservice,node_geocoder toneIndigo
An MCP server that gives agents access to Québec open-data catalogues, DataStore queries, geospatial services, geocoding and coordinate conversion through registered tools and shared HTTP helpers.
- Components
- 19
- Connections
- 24
- Evidence-backed links
- 23/24
Text version of the diagram
The diagram merges parallel links between groups, so it shows 16 of 24. Full list:
- AI Agent → MCP Entry (connects MCP)
- MCP Entry → Tool Registry (registers tools)
- Tool Registry → DQ Catalog Tools (registers)
- Tool Registry → Montréal Tools (registers)
- Tool Registry → Data Intelligence (registers)
- Tool Registry → Resource Access (registers)
- Tool Registry → OGC Tools (registers)
- Tool Registry → Geocoding Tools (registers)
- Tool Registry → Coordinate Tools (registers)
- DQ Catalog Tools → CKAN API (calls)
- Montréal Tools → CKAN API (calls)
- Data Intelligence → CKAN API (searches and queries)
- Resource Access → CKAN API (gets resource metadata)
- CKAN API → HTTP Client (fetches JSON)
- DQ Catalog Tools → Données Québec (queries catalogue)
- Montréal Tools → Montréal CKAN (queries catalogue)
- OGC Tools → OGC API (calls)
- OGC API → HTTP Client (fetches OGC data)
- OGC API → IGO Services (requests WFS/WMS)
- Geocoding Tools → Address Geocoder (geocodes addresses)
- Coordinate Tools → Coordinate Conversion (converts coordinates)
- HTTP Client → Configuration (uses settings)
- OGC API → Configuration (uses endpoints)
- MCP Entry → Configuration (loads server settings)
Follow one path through the code
Follow main into register_all_tools, then choose the dataset-access tool behind a catalog result. Resource identifiers, formats and geographic coordinate systems matter more than a dataset title alone.
7. Technical dossier
Built from the source at commit 53a6ee4 (52 files). Each item comes from a pattern match in the code, so open the linked file before relying on it.
7.1. Layers and modules
Folders are sorted into layers by name, from the user interface down to data access. Because the sorting uses names only, the diagram says nothing about calls between layers.
Mermaid Layered view
flowchart TB
subgraph L_interface["Entry points and API"]
direction TB
interface_0["tools<br/>29 files"]
interface_1["helpers<br/>2 files"]
interface_2["(root)<br/>1 file"]
end
subgraph L_infrastructure["Data and infrastructure"]
direction TB
infrastructure_0["helpers<br/>1 file"]
end
subgraph L_core["Core source"]
direction TB
core_0["helpers<br/>3 files"]
core_1["(root)<br/>1 file"]
end
subgraph L_tests["Tests"]
direction TB
tests_0["tests<br/>10 files"]
end
subgraph L_hosting["Build, CI and hosting"]
direction TB
hosting_0["(root)<br/>2 files"]
hosting_1[".github<br/>1 file"]
end
L_interface ~~~ L_infrastructure
L_infrastructure ~~~ L_core
L_core ~~~ L_tests
L_core ~~~ L_hosting
7.2. C4 model
From system context to code declarations. Each level reflects the available source evidence.
UML 1 · System context
The widest C4 view: who uses the project and which outside systems and data stores it relies on. Rendered with uml-mcp.
PlantUML source
@startuml
!include <C4/C4_Context>
LAYOUT_LEFT_RIGHT()
Person(P_mcp, "MCP client")
System(SYS, "donneesqc-mcp", "donneesqc-mcp is a fork exposing Québec and Montréal open-data operat…")
System_Ext(E0, "Open data portal (CKAN)")
System_Ext(E1, "Sentry")
Rel(P_mcp, SYS, "Uses")
Rel(SYS, E0, "Calls")
Rel(SYS, E1, "Calls")
@enduml
UML 2 · Containers
One level closer: the parts that run separately inside the project, their main language and how calls flow between them. Rendered with uml-mcp.
PlantUML source
@startuml
!include <C4/C4_Container>
LAYOUT_LEFT_RIGHT()
Person(P_mcp, "MCP client")
System_Boundary(SYS, "donneesqc-mcp") {
Container(C0, "donneesqc-mcp", "Docker")
}
System_Ext(E0, "Open data portal (CKAN)")
System_Ext(E1, "Sentry")
Rel(P_mcp, C0, "Uses")
Rel(C0, E0, "Calls")
Rel(C0, E1, "Calls")
@enduml
UML 3 · Components and layers
Modules grouped by source-layer classification. Boundaries show organization, not runtime isolation or call relationships. Rendered with uml-mcp.
PlantUML source
@startuml
!include <C4/C4_Component>
LAYOUT_TOP_DOWN()
System_Boundary(SYS, "donneesqc-mcp") {
Boundary(L0, "Entry points and API", "layer") {
Component(M0_0, "tools", "Python", "29 files")
Component(M0_1, "helpers", "Python", "2 files")
Component(M0_2, "(root)", "Python", "1 files")
}
Boundary(L1, "Data and infrastructure", "layer") {
Component(M1_0, "helpers", "Python", "1 files")
}
Boundary(L2, "Core source", "layer") {
Component(M2_0, "helpers", "Python", "3 files")
Component(M2_1, "(root)", ".sh", "1 files")
}
Boundary(L3, "Tests", "layer") {
Component(M3_0, "tests", "Python", "10 files")
}
Boundary(L4, "Build, CI and hosting", "layer") {
Component(M4_0, "(root)", "Dockerfile, .yml", "2 files")
Component(M4_1, ".github", ".yml", "1 files")
}
}
@enduml
UML 4 · Code
Selected declarations, fields and methods grouped by source file. No inheritance or call edges are inferred. Rendered with uml-mcp.
PlantUML source
@startuml
skinparam backgroundColor transparent
skinparam shadowing false
skinparam roundCorner 10
skinparam defaultFontName Arial
skinparam defaultFontSize 13
skinparam ArrowColor #4e6070
skinparam ArrowFontColor #3d4f5f
skinparam titleFontSize 14
skinparam actorBorderColor #006a62
skinparam actorBackgroundColor #e9f3f4
skinparam usecaseBorderColor #006a62
skinparam usecaseBackgroundColor #e9f3f4
skinparam componentBorderColor #006a62
skinparam componentBackgroundColor #e9f3f4
skinparam interfaceBorderColor #006a62
skinparam interfaceBackgroundColor #ffffff
skinparam nodeBorderColor #4e6070
skinparam nodeBackgroundColor #f4f8fb
skinparam databaseBorderColor #006a62
skinparam databaseBackgroundColor #ffffff
skinparam cloudBorderColor #4e6070
skinparam cloudBackgroundColor #f0f5fa
skinparam artifactBorderColor #006a62
skinparam artifactBackgroundColor #ffffff
skinparam rectangleBorderColor #b0c2d3
skinparam activityBorderColor #006a62
skinparam activityBackgroundColor #e9f3f4
skinparam partitionBorderColor #b0c2d3
skinparam stereotypeCBackgroundColor #ffffff
top to bottom direction
hide empty members
package "donneesqc-mcp" {
object "tools/list_tools_with_examples.py" as FN0 {
list_tools_with_examples()
}
object "tools/download_resource.py" as FN1 {
download_resource()
_parse_csv()
_parse_json()
_parse_xlsx_headers()
}
object "helpers/geo_api.py" as FN2 {
_get_cached()
_set_cached()
clear_cache()
get_wfs_capabilities()
get_wms_capabilities()
get_features()
}
object "tools/find_and_query.py" as FN3 {
find_and_query()
}
object "helpers/http_client.py" as FN4 {
get_client()
_get_retry_after()
_retry()
fetch_json()
fetch_text()
fetch_bytes()
}
object "tools/suggest_sql.py" as FN5 {
suggest_sql()
}
}
@enduml
7.3. Data flow
The calls from the GitDiagram graph, in the order you meet them from the entry points. GitDiagram generates the graph with AI; the file paths it cites were checked against the repository tree.
Mermaid Sequence diagram
sequenceDiagram
autonumber
participant P0 as AI Agent
participant P1 as MCP Entry
participant P2 as Tool Registry
participant P3 as Configuration
participant P4 as DQ Catalog Tools
participant P5 as Montréal Tools
participant P6 as Data Intelligence
participant P7 as Resource Access
participant P8 as OGC Tools
participant P9 as Geocoding Tools
participant P10 as Coordinate Tools
participant P11 as CKAN API
participant P12 as Données Québec
participant P13 as Montréal CKAN
P0->>P1: connects MCP
P1->>P2: registers tools
P1->>P3: loads server settings
P2->>P4: registers
P2->>P5: registers
P2->>P6: registers
P2->>P7: registers
P2->>P8: registers
P2->>P9: registers
P2->>P10: registers
P4->>P11: calls
P4->>P12: queries catalogue
P5->>P11: calls
P5->>P13: queries catalogue
P6->>P11: searches and queries
P7->>P11: gets resource metadata
Steps as text
- AI Agent to MCP Entry connects MCP
- MCP Entry to Tool Registry registers tools
- MCP Entry to Configuration loads server settings
- Tool Registry to DQ Catalog Tools registers
- Tool Registry to Montréal Tools registers
- Tool Registry to Data Intelligence registers
- Tool Registry to Resource Access registers
- Tool Registry to OGC Tools registers
- Tool Registry to Geocoding Tools registers
- Tool Registry to Coordinate Tools registers
- DQ Catalog Tools to CKAN API calls
- DQ Catalog Tools to Données Québec queries catalogue
- Montréal Tools to CKAN API calls
- Montréal Tools to Montréal CKAN queries catalogue
- Data Intelligence to CKAN API searches and queries
- Resource Access to CKAN API gets resource metadata
- OGC Tools to OGC API calls
- Geocoding Tools to Address Geocoder geocodes addresses
- Coordinate Tools to Coordinate Conversion converts coordinates
- CKAN API to HTTP Client fetches JSON
- OGC API to HTTP Client fetches OGC data
- OGC API to IGO Services requests WFS/WMS
- OGC API to Configuration uses endpoints
- HTTP Client to Configuration uses settings
7.4. Public interface
Outside code can use everything listed here. The project also declares 0 public types.
UML Use cases
Each actor is a kind of caller, linked to what it can ask the project to do. Rendered with uml-mcp.
PlantUML source
@startuml
skinparam backgroundColor transparent
skinparam shadowing false
skinparam roundCorner 10
skinparam defaultFontName Arial
skinparam defaultFontSize 13
skinparam ArrowColor #4e6070
skinparam ArrowFontColor #3d4f5f
skinparam titleFontSize 14
skinparam actorBorderColor #006a62
skinparam actorBackgroundColor #e9f3f4
skinparam usecaseBorderColor #006a62
skinparam usecaseBackgroundColor #e9f3f4
skinparam componentBorderColor #006a62
skinparam componentBackgroundColor #e9f3f4
skinparam interfaceBorderColor #006a62
skinparam interfaceBackgroundColor #ffffff
skinparam nodeBorderColor #4e6070
skinparam nodeBackgroundColor #f4f8fb
skinparam databaseBorderColor #006a62
skinparam databaseBackgroundColor #ffffff
skinparam cloudBorderColor #4e6070
skinparam cloudBackgroundColor #f0f5fa
skinparam artifactBorderColor #006a62
skinparam artifactBackgroundColor #ffffff
skinparam rectangleBorderColor #b0c2d3
skinparam activityBorderColor #006a62
skinparam activityBackgroundColor #e9f3f4
skinparam partitionBorderColor #b0c2d3
skinparam stereotypeCBackgroundColor #ffffff
left to right direction
actor "MCP client" as A_mcp
rectangle "donneesqc-mcp" {
usecase "Tool auto_detect_resource" as U0
usecase "Tool compare_datasets" as U1
usecase "Tool convert_coordinates" as U2
usecase "Tool describe_geospatial_layer" as U3
usecase "Tool download_resource" as U4
usecase "Tool find_and_query" as U5
}
A_mcp --> U0
A_mcp --> U1
A_mcp --> U2
A_mcp --> U3
A_mcp --> U4
A_mcp --> U5
@enduml
MCP tools, resources and prompts 28
- tool
auto_detect_resource - tool
compare_datasets - tool
convert_coordinates - tool
describe_geospatial_layer - tool
download_resource - tool
find_and_query - tool
geocode - tool
get_catalog_stats - tool
get_dataset_info - tool
get_geospatial_features - tool
get_map_url - tool
get_organization_info - tool
get_resource_info - tool
get_version - tool
list_dataset_resources - tool
list_geospatial_layers - tool
list_organizations - tool
list_tools_with_examples - tool
preview_resource - tool
query_montreal_data - tool
query_montreal_sql - tool
query_resource_data - tool
query_resource_sql - tool
reverse_geocode
Entry points
main.pyentry file
7.5. Private interface
These names are internal by the language’s conventions: a leading underscore, private, static or pub(crate).
- underscore helper
- 11
_extract_resulthelpers/ckan_api.py:15_get_cachedhelpers/geo_api.py:20_set_cachedhelpers/geo_api.py:31
7.6. Business logic
No classes were extracted, so these are the largest source files and their functions.
tools/list_tools_with_examples.pylist_tools_with_examplestools/download_resource.pydownload_resource, _parse_csv, _parse_json, _parse_xlsx_headershelpers/geo_api.py_get_cached, _set_cached, clear_cache, get_wfs_capabilities, get_wms_capabilities, get_featurestools/find_and_query.pyfind_and_queryhelpers/http_client.pyget_client, _get_retry_after, _retry, fetch_json, fetch_text, fetch_bytestools/suggest_sql.pysuggest_sql
7.7. External integrations
HTTP clients
Hosts named in the code
www.donneesquebec.ca4 fileshelpers/config.py:12donnees.montreal.ca2 fileshelpers/config.py:16geoegl.msp.gouv.qc.ca1 fileshelpers/config.py:20
7.8. Stack and dependencies
External dependencies
11 declared packages (5 runtime, 6 development) in pyproject.toml.
Package table 11
| Package | Version | Scope | Purpose | Registry |
|---|---|---|---|---|
mcp | >=1.9.0 | runtime | Model Context Protocol | pypi.org |
uvicorn | >=0.34.0 | runtime | Application server | pypi.org |
sentry-sdk | >=2.19.0 | runtime | Logging and observability | pypi.org |
defusedxml | >=0.7.1 | runtime | XML bomb protection for Python stdlib modules | pypi.org |
pyproj | >=3.6.0 | runtime | Python interface to PROJ (cartographic projections and coordinate transformations library) | pypi.org |
pytest | >=8.0 | development | Testing | pypi.org |
pytest-asyncio | >=0.25.0 | development | Testing | pypi.org |
respx | >=0.22.0 | development | A utility for mocking out the Python HTTPX and HTTP Core libraries. | pypi.org |
ruff | >=0.9.0 | development | Linting and formatting | pypi.org |
ty | >=0.0.1a0 | development | An extremely fast Python type checker, written in Rust. | pypi.org |
pre-commit | >=4.0.0 | development | Linting and formatting | pypi.org |
7.9. CI/CD pipeline
1 GitHub Actions workflow, 2 jobs. Each box is a job; double-bordered boxes publish or deploy, and arrows follow needs.
Mermaid Pipeline flow
flowchart LR
subgraph wf0["CI"]
direction LR
wf0_lint["Lint & Format<br/>ubuntu-latest"]
wf0_test[["Tests<br/>ubuntu-latest"]]
end
t0(["push · pull request"])
t0 --> wf0_lint
wf0_lint --> wf0_test
| Workflow | Triggers | Jobs | Publishes to |
|---|---|---|---|
CI.github/workflows/ci.yml | push, pull request |
| — |
7.10. Deployment
Mermaid Deployment diagram
flowchart LR
repo[("GitHub repository")]
ci[["GitHub Actions<br/>1 workflow"]]
image["Docker image<br/>FROM python:3.12-slim"]
subgraph compose["Docker Compose"]
svc_donneesqc_mcp["donneesqc-mcp"]
end
repo -->|"push or pull request"| ci
ci -->|"docker build"| image
image -->|"docker compose up"| compose
UML Deployment
The outer node is where the code runs. Each base image points to what it builds, solid arrows lead to databases and dashed ones to outside services. Rendered with uml-mcp.
PlantUML source
@startuml
skinparam backgroundColor transparent
skinparam shadowing false
skinparam roundCorner 10
skinparam defaultFontName Arial
skinparam defaultFontSize 13
skinparam ArrowColor #4e6070
skinparam ArrowFontColor #3d4f5f
skinparam titleFontSize 14
skinparam actorBorderColor #006a62
skinparam actorBackgroundColor #e9f3f4
skinparam usecaseBorderColor #006a62
skinparam usecaseBackgroundColor #e9f3f4
skinparam componentBorderColor #006a62
skinparam componentBackgroundColor #e9f3f4
skinparam interfaceBorderColor #006a62
skinparam interfaceBackgroundColor #ffffff
skinparam nodeBorderColor #4e6070
skinparam nodeBackgroundColor #f4f8fb
skinparam databaseBorderColor #006a62
skinparam databaseBackgroundColor #ffffff
skinparam cloudBorderColor #4e6070
skinparam cloudBackgroundColor #f0f5fa
skinparam artifactBorderColor #006a62
skinparam artifactBackgroundColor #ffffff
skinparam rectangleBorderColor #b0c2d3
skinparam activityBorderColor #006a62
skinparam activityBackgroundColor #e9f3f4
skinparam partitionBorderColor #b0c2d3
skinparam stereotypeCBackgroundColor #ffffff
node "Docker Compose" as H {
node "donneesqc-mcp" as N0 <<container>>
}
artifact "FROM python:3.12-slim" as IMG0
IMG0 ..> N0 : builds
cloud "Open data portal (CKAN)" as E0
N0 ..> E0
cloud "Sentry" as E1
N0 ..> E1
@enduml
Where it runs
Compose services
donneesqc-mcp
Docker base images
7.11. Monitoring
What the code logs, measures and exposes to tell whether it is working.
Container health checks
7.12. Security
Supply chain
Environment variables 16
The page lists names without their values and underlines the ones that look like secrets.
SENTRY_DSN DOWNLOAD_MAX_BYTES DQ_API_URL DQ_BASE_URL GEOCODER_URL GEO_WFS_URL GEO_WMS_URL HTTP_MAX_RETRIES HTTP_TIMEOUT LOG_LEVEL MCP_ENV MCP_HOST MCP_PORT MTL_API_URL MTL_BASE_URL SENTRY_SAMPLE_RATE
7.13. Testing
- Test files
- 10
- Source files
- 37
- Test cases, about
- 101
- Unit tests
- 10
No measured coverage report in the analyzed sources.
Where the tests are
tests 10
Continuous integration
- CI
ruff, pytest
UML CI pipeline
The main GitHub Actions workflow runs these steps. Jobs that run in parallel sit side by side. Rendered with uml-mcp.
PlantUML source
@startuml
skinparam backgroundColor transparent
skinparam shadowing false
skinparam roundCorner 10
skinparam defaultFontName Arial
skinparam defaultFontSize 13
skinparam ArrowColor #4e6070
skinparam ArrowFontColor #3d4f5f
skinparam titleFontSize 14
skinparam actorBorderColor #006a62
skinparam actorBackgroundColor #e9f3f4
skinparam usecaseBorderColor #006a62
skinparam usecaseBackgroundColor #e9f3f4
skinparam componentBorderColor #006a62
skinparam componentBackgroundColor #e9f3f4
skinparam interfaceBorderColor #006a62
skinparam interfaceBackgroundColor #ffffff
skinparam nodeBorderColor #4e6070
skinparam nodeBackgroundColor #f4f8fb
skinparam databaseBorderColor #006a62
skinparam databaseBackgroundColor #ffffff
skinparam cloudBorderColor #4e6070
skinparam cloudBackgroundColor #f0f5fa
skinparam artifactBorderColor #006a62
skinparam artifactBackgroundColor #ffffff
skinparam rectangleBorderColor #b0c2d3
skinparam activityBorderColor #006a62
skinparam activityBackgroundColor #e9f3f4
skinparam partitionBorderColor #b0c2d3
skinparam stereotypeCBackgroundColor #ffffff
title CI
start
partition "Lint & Format" {
:actions/checkout;
:Install uv;
:Set up Python;
:Install dependencies;
:Ruff lint and import sorting;
:Ruff format check;
:Type check (ty);
}
partition "Tests" {
:actions/checkout;
:Install uv;
:Set up Python;
:Install dependencies;
:Run tests;
:Upload test results;
}
stop
@enduml
Nothing found for: Services, Entities, Database.
8. Deployment and operations
The ports, storage, and startup relationships below come from the repository configuration. depends_on records startup order, not service readiness.
9. Types and file structure
1 declared types, with 1 in the base-relationship overview.
Type diagram
classDiagram
direction TB
class t5a13289447b1["TestValidateSQL"] {
test_select_simple()
test_select_with_where()
test_select_with_semicolon()
test_select_with_whitespace()
}
Unresolved bases remain labelled; full signatures are not reconstructed.
10. Reference
50 / 50 eligible files read (59 in the tree); 0 oversized, 0 failed reads and 0 syntax diagnostics.
What the scan covers
Known dependency/build folders, credential files and binaries are excluded. The scan covers READMEs, recognized manifests and parser-supported source files.
Linguist statistics cover the whole repository and may include other languages.
12. Files to read 3
13. Glossary
Repository
The versioned source files, configuration, and history of a project.
README
The repository’s entry document, usually covering its purpose and initial setup.
Dependency
A library, tool, or service that another component needs to build or run.
HTTP
A request-and-response protocol used by browsers and web services. A method, path, headers, and optional body describe a request.
Container
An isolated process environment created from an image. Persistent data needs storage outside the container’s disposable filesystem.
Published port
A host port mapped to a service’s container port. Publishing a port can expose that service beyond its container network.
CLI
A text interface in which commands and arguments select operations. Exit codes let scripts detect success or failure.
MCP
Model Context Protocol: a protocol through which an AI client discovers and calls tools and reads resources from a server.
Fork
A separate repository derived from another project. A change in a fork is not automatically a change in the upstream project.
14. References
- antoinebou12. (2026, November 5). donneesqc-mcp. [Software repository] github.com.
- antoinebou12. (2026, November 5). donneesqc-mcp: README. [Repository documentation] github.com.
- antoinebou12. (2026, November 5). main.py. [Source file] github.com.
- antoinebou12. (2026, November 5). tools/__init__.py. [Source file] github.com.
- antoinebou12. (2026, November 5). README.md. [Source file] github.com.
- Boucher, A. (2026, October 23). donneesqc-mcp: An MCP gateway to public data. [Project article] antoineboucher.info.
Sources without a publication date show the date they were last checked, November 5, 2026. File links retain the inspected revision where available.