Table des matières
donneesqc-mcp : Une passerelle MCP vers les données ouvertes
donneesqc-mcp est un fork qui expose des opérations de données ouvertes du Québec et de Montréal par MCP. Le point d’entrée enregistre les outils et démarre le transport HTTP; les accès aux données et outils géographiques restent séparés.
- Langages
- 3Répartition du code
- Composants documentés
- 2Explorer les modules
- Documents source
- 1Lire les instructions
Langages du dépôtPython 98.28%3
Parts calculées à partir des octets GitHub Linguist.
| Langage | % | Octets |
|---|---|---|
| Python | 157 778 | |
| Shell | 2 183 | |
| Dockerfile | 574 |
1. Aperçu
1.1. Pourquoi il existe
Serveur MCP robuste reliant les assistants IA aux données ouvertes du Québec et de Montréal avec validation stricte.
1.2. Cas d’usage
Interrogation en langage naturel des jeux de données municipaux et provinciaux ouverts.
2. Cas d’utilisation
Un serveur MCP qui laisse les agents IA chercher, interroger en SQL et cartographier les données ouvertes du Québec.
- Chercher des jeux de données
- Analyste avec un agentPortails CKAN ouverts
search_datasets et search_montreal_datasets appellent les API CKAN de Données Québec et de Montréal (DQ_API_URL, MTL_API_URL) via helpers/ckan_api.py.
- Lancer du SQL en lecture
- Analyste avec un agentPortails CKAN ouverts
query_resource_sql et query_montreal_sql envoient du SQL au DataStore CKAN après que validate_sql() a rejeté tout ce qui n’est pas un SELECT.
- Chercher et interroger en un
- Analyste avec un agentPortails CKAN ouverts
find_and_query enchaîne recherche, liste des ressources et requête DataStore pour éviter trois allers-retours à l’agent.
- Explorer les couches géo
- Analyste avec un agentServices géo IGO
list_geospatial_layers, get_geospatial_features et get_map_url interrogent le WFS IGO et construisent des URL WMS GetMap via helpers/geo_api.py.
- Géocoder et convertir
- Analyste avec un agentServices géo IGO
geocode et reverse_geocode utilisent le géocodeur icherche (GEOCODER_URL) ; convert_coordinates passe d’EPSG:32198 à EPSG:4326 et inversement.
2.1. Scénario : Compter les arbres publics par arrondissement à Montréal
- Démarrer le serveur avec docker compose up -d (ou uv sync puis uv run python main.py) ; il écoute sur le port 8000 en HTTP streamable.
- L’inscrire dans le client, par exemple claude mcp add --transport http donneesqc http://localhost:8000/mcp.
- Demander à l’agent les données sur les arbres publics ; il appelle search_montreal_datasets pour trouver le jeu.
- L’agent appelle query_montreal_data pour voir les colonnes de la ressource DataStore.
- Il envoie une requête SELECT … GROUP BY via query_montreal_sql et répond avec le compte par arrondissement.
Fichiers consultésREADME.mdmain.pydocker-compose.ymlhelpers/config.pyhelpers/ckan_api.pyhelpers/geo_api.pytools/find_and_query.pytools/query_resource_sql.pytools/convert_coordinates.py
3. Démarrage
Ces commandes viennent de la documentation du dépôt. Elles n’ont pas été exécutées pendant cette revue.
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. Références du dépôt
Extraits des guides du dépôt, dans leur langue d’origine. Les liens ouvrent la version du code consultée.
Prérequis et premier essai
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 et utilisation
4.2. Gemini CLI
README.md
5. Fonctions et composants 2
- Démarrage du serveur
- main.py configure les logs, initialise Sentry si demandé, appelle register_all_tools et lance MCP en streamable-http. La surveillance est optionnelle et ne sert pas elle-même les requêtes de données.
- Frontière des services de données
- Les groupes d’outils couvrent découverte du catalogue, accès CKAN DataStore, téléchargement et enrichissement géographique. Un résultat de catalogue décrit une ressource; le tableau ou fichier demande un accès distinct, parfois dans un autre format.
6. Architecture
Ouvrez un composant pour suivre ses connexions, ou explorez le diagramme complet.
Client MCP
- Vers Outils HTTP enregistrés
- Depuis Résultat structuré
Outils HTTP enregistrés
- Depuis Client MCP
- Vers Recherche au catalogue
Recherche au catalogue
- Depuis Outils HTTP enregistrés
- Vers Table ou fichier
Table ou fichier
- Depuis Recherche au catalogue
- Vers Résultat structuré
Résultat structuré
- Depuis Table ou fichier
- Vers Client MCP
Mermaid Diagramme interactif
Vue générale des composants et des échanges vérifiés dans le dépôt.

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
Un serveur MCP qui donne aux agents accès aux catalogues de données ouvertes du Québec, aux requêtes DataStore, aux services géospatiaux, au géocodage et à la conversion de coordonnées par des outils enregistrés et des clients HTTP communs.
- Composants
- 19
- Connexions
- 24
- Liens appuyés par le code
- 23/24
Version texte du diagramme
Le diagramme regroupe les liens parallèles entre groupes : il en montre 16 sur 24. Liste complète :
- 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)
Suivre un parcours dans le code
Suivez main vers register_all_tools, puis l’outil d’accès derrière le résultat du catalogue. Les identifiants, formats et systèmes de coordonnées comptent davantage que le seul titre.
7. Dossier technique
Établi à partir du code au commit 53a6ee4 (52 fichiers). Chaque élément vient d’une correspondance de motif dans le code: ouvrez le fichier lié avant de vous y fier.
7.1. Couches et modules
Les dossiers sont classés par couche selon leur nom, de l’interface utilisateur jusqu’à l’accès aux données. Comme le classement repose sur les noms seulement, le diagramme ne dit rien des appels entre couches.
Mermaid Vue en couches
flowchart TB
subgraph L_interface["Points d’entrée et API"]
direction TB
interface_0["tools<br/>29 fichiers"]
interface_1["helpers<br/>2 fichiers"]
interface_2["(root)<br/>1 fichier"]
end
subgraph L_infrastructure["Données et infrastructure"]
direction TB
infrastructure_0["helpers<br/>1 fichier"]
end
subgraph L_core["Source principale"]
direction TB
core_0["helpers<br/>3 fichiers"]
core_1["(root)<br/>1 fichier"]
end
subgraph L_tests["Tests"]
direction TB
tests_0["tests<br/>10 fichiers"]
end
subgraph L_hosting["Build, CI et hébergement"]
direction TB
hosting_0["(root)<br/>2 fichiers"]
hosting_1[".github<br/>1 fichier"]
end
L_interface ~~~ L_infrastructure
L_infrastructure ~~~ L_core
L_core ~~~ L_tests
L_core ~~~ L_hosting
7.2. Modèle C4
Du contexte du système aux déclarations du code. Chaque niveau conserve les limites des sources disponibles.
UML 1 · Contexte du système
La vue C4 la plus large : qui utilise le projet et sur quels systèmes et stockages externes il s’appuie. Rendu avec uml-mcp.
Source PlantUML
@startuml
!include <C4/C4_Context>
LAYOUT_LEFT_RIGHT()
Person(P_mcp, "Client MCP")
System(SYS, "donneesqc-mcp", "donneesqc-mcp est un fork qui expose des opérations de données ouvert…")
System_Ext(E0, "Portail de données ouvertes (…")
System_Ext(E1, "Sentry")
Rel(P_mcp, SYS, "Utilise")
Rel(SYS, E0, "Appelle")
Rel(SYS, E1, "Appelle")
@enduml
UML 2 · Conteneurs
Un niveau plus près : les parties qui s’exécutent séparément dans le projet, leur langage principal et le chemin des appels entre elles. Rendu avec uml-mcp.
Source PlantUML
@startuml
!include <C4/C4_Container>
LAYOUT_LEFT_RIGHT()
Person(P_mcp, "Client MCP")
System_Boundary(SYS, "donneesqc-mcp") {
Container(C0, "donneesqc-mcp", "Docker")
}
System_Ext(E0, "Portail de données ouvertes (…")
System_Ext(E1, "Sentry")
Rel(P_mcp, C0, "Utilise")
Rel(C0, E0, "Appelle")
Rel(C0, E1, "Appelle")
@enduml
UML 3 · Composants et couches
Modules regroupés par couche du code. Les limites indiquent l’organisation, sans affirmer une isolation à l’exécution ni des appels. Rendu avec uml-mcp.
Source PlantUML
@startuml
!include <C4/C4_Component>
LAYOUT_TOP_DOWN()
System_Boundary(SYS, "donneesqc-mcp") {
Boundary(L0, "Points d’entrée et API", "layer") {
Component(M0_0, "tools", "Python", "29 fichiers")
Component(M0_1, "helpers", "Python", "2 fichiers")
Component(M0_2, "(root)", "Python", "1 fichiers")
}
Boundary(L1, "Données et infrastructure", "layer") {
Component(M1_0, "helpers", "Python", "1 fichiers")
}
Boundary(L2, "Source principale", "layer") {
Component(M2_0, "helpers", "Python", "3 fichiers")
Component(M2_1, "(root)", ".sh", "1 fichiers")
}
Boundary(L3, "Tests", "layer") {
Component(M3_0, "tests", "Python", "10 fichiers")
}
Boundary(L4, "Build, CI et hébergement", "layer") {
Component(M4_0, "(root)", "Dockerfile, .yml", "2 fichiers")
Component(M4_1, ".github", ".yml", "1 fichiers")
}
}
@enduml
UML 4 · Code
Déclarations, champs et méthodes sélectionnés, regroupés par fichier source. Aucun héritage ni appel n’est déduit. Rendu avec uml-mcp.
Source PlantUML
@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. Flux de données
Les appels du diagramme GitDiagram, dans l’ordre où on les rencontre depuis les points d’entrée. GitDiagram produit ce graphe par IA; les chemins de fichiers cités ont été comparés à l’arbre du dépôt.
Mermaid Diagramme de séquence
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
Étapes en texte
- AI Agent vers MCP Entry connects MCP
- MCP Entry vers Tool Registry registers tools
- MCP Entry vers Configuration loads server settings
- Tool Registry vers DQ Catalog Tools registers
- Tool Registry vers Montréal Tools registers
- Tool Registry vers Data Intelligence registers
- Tool Registry vers Resource Access registers
- Tool Registry vers OGC Tools registers
- Tool Registry vers Geocoding Tools registers
- Tool Registry vers Coordinate Tools registers
- DQ Catalog Tools vers CKAN API calls
- DQ Catalog Tools vers Données Québec queries catalogue
- Montréal Tools vers CKAN API calls
- Montréal Tools vers Montréal CKAN queries catalogue
- Data Intelligence vers CKAN API searches and queries
- Resource Access vers CKAN API gets resource metadata
- OGC Tools vers OGC API calls
- Geocoding Tools vers Address Geocoder geocodes addresses
- Coordinate Tools vers Coordinate Conversion converts coordinates
- CKAN API vers HTTP Client fetches JSON
- OGC API vers HTTP Client fetches OGC data
- OGC API vers IGO Services requests WFS/WMS
- OGC API vers Configuration uses endpoints
- HTTP Client vers Configuration uses settings
7.4. Interface publique
Du code extérieur peut utiliser tout ce qui est listé ici. Le projet déclare aussi 0 types publics.
UML Cas d’utilisation
Chaque acteur est un type d’appelant, relié à ce qu’il peut demander au projet. Rendu avec uml-mcp.
Source PlantUML
@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 "Client MCP" as A_mcp
rectangle "donneesqc-mcp" {
usecase "Outil auto_detect_resource" as U0
usecase "Outil compare_datasets" as U1
usecase "Outil convert_coordinates" as U2
usecase "Outil describe_geospatial_layer" as U3
usecase "Outil download_resource" as U4
usecase "Outil find_and_query" as U5
}
A_mcp --> U0
A_mcp --> U1
A_mcp --> U2
A_mcp --> U3
A_mcp --> U4
A_mcp --> U5
@enduml
Outils, ressources et prompts MCP 28
- outil
auto_detect_resource - outil
compare_datasets - outil
convert_coordinates - outil
describe_geospatial_layer - outil
download_resource - outil
find_and_query - outil
geocode - outil
get_catalog_stats - outil
get_dataset_info - outil
get_geospatial_features - outil
get_map_url - outil
get_organization_info - outil
get_resource_info - outil
get_version - outil
list_dataset_resources - outil
list_geospatial_layers - outil
list_organizations - outil
list_tools_with_examples - outil
preview_resource - outil
query_montreal_data - outil
query_montreal_sql - outil
query_resource_data - outil
query_resource_sql - outil
reverse_geocode
Points d’entrée
main.pyfichier d’entrée
7.5. Interface privée
Ces noms sont internes selon les conventions du langage: tiret bas initial, private, static ou pub(crate).
- Assistant préfixé _
- 11
_extract_resulthelpers/ckan_api.py:15_get_cachedhelpers/geo_api.py:20_set_cachedhelpers/geo_api.py:31
7.6. Logique métier
Aucune classe n’a été extraite. Voici les plus gros fichiers source et leurs fonctions.
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. Intégrations externes
Clients HTTP
Hôtes nommés dans le code
www.donneesquebec.ca4 fichiershelpers/config.py:12donnees.montreal.ca2 fichiershelpers/config.py:16geoegl.msp.gouv.qc.ca1 fichiershelpers/config.py:20
7.8. Stack et dépendances
Dépendances externes
11 paquets déclarés (5 à l’exécution, 6 pour le développement) dans pyproject.toml.
Tableau des paquets 11
| Paquet | Version | Usage | Rôle | Registre |
|---|---|---|---|---|
mcp | >=1.9.0 | exécution | Model Context Protocol | pypi.org |
uvicorn | >=0.34.0 | exécution | Serveur d’application | pypi.org |
sentry-sdk | >=2.19.0 | exécution | Journalisation et observabilité | pypi.org |
defusedxml | >=0.7.1 | exécution | XML bomb protection for Python stdlib modules | pypi.org |
pyproj | >=3.6.0 | exécution | Python interface to PROJ (cartographic projections and coordinate transformations library) | pypi.org |
pytest | >=8.0 | développement | Tests | pypi.org |
pytest-asyncio | >=0.25.0 | développement | Tests | pypi.org |
respx | >=0.22.0 | développement | A utility for mocking out the Python HTTPX and HTTP Core libraries. | pypi.org |
ruff | >=0.9.0 | développement | Analyse et formatage | pypi.org |
ty | >=0.0.1a0 | développement | An extremely fast Python type checker, written in Rust. | pypi.org |
pre-commit | >=4.0.0 | développement | Analyse et formatage | pypi.org |
7.9. Pipeline CI/CD
1 workflow GitHub Actions, 2 tâches. Chaque boîte est une tâche ; les boîtes à double bord publient ou déploient, et les flèches suivent les dépendances needs.
Mermaid Déroulement du pipeline
flowchart LR
subgraph wf0["CI"]
direction LR
wf0_lint["Lint & Format<br/>ubuntu-latest"]
wf0_test[["Tests<br/>ubuntu-latest"]]
end
t0(["push · demande de fusion"])
t0 --> wf0_lint
wf0_lint --> wf0_test
| Workflow | Déclencheurs | Tâches | Publie vers |
|---|---|---|---|
CI.github/workflows/ci.yml | push, demande de fusion |
| — |
7.10. Déploiement
Mermaid Schéma de déploiement
flowchart LR
repo[("Dépôt GitHub")]
ci[["GitHub Actions<br/>1 workflow"]]
image["Image Docker<br/>FROM python:3.12-slim"]
subgraph compose["Docker Compose"]
svc_donneesqc_mcp["donneesqc-mcp"]
end
repo -->|"push ou demande de fusion"| ci
ci -->|"docker build"| image
image -->|"docker compose up"| compose
UML Déploiement
Le nœud extérieur est l’endroit où le code s’exécute. Chaque image de base pointe vers ce qu’elle construit, les flèches pleines mènent aux bases de données et les pointillées aux services externes. Rendu avec uml-mcp.
Source PlantUML
@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 : construit
cloud "Portail de données ouvertes (…" as E0
N0 ..> E0
cloud "Sentry" as E1
N0 ..> E1
@enduml
Où il s’exécute
Services Compose
donneesqc-mcp
Images Docker de base
7.11. Supervision
Ce que le code consigne, mesure et expose pour savoir s’il fonctionne.
Vérifications de santé des conteneurs
7.12. Sécurité
Chaîne d’approvisionnement
- Fichier de verrouillage (dépendances figées)
- Hooks pre-commit
- Exemple de fichier d’environnement (sans valeurs)
Variables d’environnement 16
La page reprend les noms sans leurs valeurs et souligne ceux qui ressemblent à des 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. Tests automatisés
- Fichiers de test
- 10
- Fichiers source
- 37
- Cas de test, environ
- 101
- Tests unitaires
- 10
Aucun rapport chiffré de couverture dans les sources analysées.
Où sont les tests
tests 10
Intégration continue
- CI
ruff, pytest
UML Pipeline CI
Le workflow GitHub Actions principal suit ces étapes. Les tâches lancées en parallèle sont côte à côte. Rendu avec uml-mcp.
Source PlantUML
@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
Rien trouvé pour: Services, Entités, Base de données.
8. Déploiement et exploitation
Les ports, le stockage et les relations de démarrage ci-dessous viennent de la configuration du dépôt. depends_on indique l’ordre de démarrage, pas la disponibilité du service.
9. Types et structure des fichiers
1 types déclarés, dont 1 dans l’aperçu des relations de base.
Diagramme des types
classDiagram
direction TB
class t5a13289447b1["TestValidateSQL"] {
test_select_simple()
test_select_with_where()
test_select_with_semicolon()
test_select_with_whitespace()
}
Les bases non résolues restent identifiées; les signatures complètes ne sont pas reconstruites.
10. Référence
50 / 50 fichiers admissibles lus (59 dans l’arbre); 0 trop volumineux, 0 échec de lecture et 0 diagnostic de syntaxe.
Ce que couvre l’analyse
Les dossiers connus de dépendances et de compilation, les fichiers d’identifiants et les binaires sont exclus. La collecte couvre les README, les manifestes reconnus et les fichiers source pris en charge.
Les statistiques Linguist couvrent l’ensemble du dépôt et peuvent inclure d’autres langages.
12. Fichiers à lire 3
13. Glossaire
Dépôt
Les fichiers source, la configuration et l’historique versionné d’un projet.
README
Le document d’entrée du dépôt, qui présente généralement son rôle et son installation.
Dépendance
Une bibliothèque, un outil ou un service nécessaire à la compilation ou à l’exécution d’un composant.
HTTP
Un protocole de requête et réponse utilisé par les navigateurs et services web. Une requête comprend une méthode, un chemin, des en-têtes et parfois un corps.
Conteneur
Un environnement de processus isolé créé à partir d’une image. Les données persistantes nécessitent un stockage hors de son système de fichiers temporaire.
Port publié
Un port de l’hôte associé au port d’un service dans un conteneur. Sa publication peut rendre le service accessible hors du réseau des conteneurs.
Interface en ligne de commande
Une interface textuelle où les commandes et arguments choisissent les opérations. Les codes de retour permettent aux scripts de détecter un succès ou un échec.
MCP
Model Context Protocol : un protocole permettant à un client IA de découvrir et appeler des outils, et de lire les ressources d’un serveur.
Fork
Un dépôt distinct dérivé d’un autre projet. Une modification du fork ne devient pas automatiquement une modification du projet amont.
14. Références
- antoinebou12. (2026, 5 novembre). donneesqc-mcp. [Software repository] github.com.
- antoinebou12. (2026, 5 novembre). donneesqc-mcp: README. [Repository documentation] github.com.
- antoinebou12. (2026, 5 novembre). main.py. [Source file] github.com.
- antoinebou12. (2026, 5 novembre). tools/__init__.py. [Source file] github.com.
- antoinebou12. (2026, 5 novembre). README.md. [Source file] github.com.
- Boucher, A. (2026, 23 octobre). donneesqc-mcp : Une passerelle MCP vers les données ouvertes. [Project article] antoineboucher.info.
Les sources sans date de publication indiquent la date de leur dernière vérification, le 5 novembre 2026. Les liens des fichiers conservent la révision inspectée lorsqu’elle est disponible.