Aller au contenu
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.

Application et services Fork Docker
  • Mis à jour
  • Python · 98.28%
  • MIT
Python pytest Crédit amont
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.

Python98.28%
98.28%157 778 octets
Shell1.36%
1.36%2 183 octets
Dockerfile0.36%
0.36%574 octets
Langage%Octets
Python98.28%157 778
Shell1.36%2 183
Dockerfile0.36%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.

Diagramme de cas d’utilisation de donneesqc-mcp : Chercher des jeux de données; Lancer du SQL en lecture; Chercher et interroger en un; Explorer les couches géo; Géocoder et convertirdonneesqc-mcpChercher des jeux de donnéesLancer du SQL en lectureChercher et interroger en unExplorer les couches géoGéocoder et convertirAnalyste avec un agent«système»Portails CKAN ouverts«système»Services géo IGO
Acteurs à gauche (personnes) et à droite (systèmes externes) ; chaque ovale est un cas d’utilisation appuyé par les fichiers cités ci-dessous.
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

  1. 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.
  2. L’inscrire dans le client, par exemple claude mcp add --transport http donneesqc http://localhost:8000/mcp.
  3. Demander à l’agent les données sur les arbres publics ; il appelle search_montreal_datasets pour trouver le jeu.
  4. L’agent appelle query_montreal_data pour voir les colonnes de la ressource DataStore.
  5. 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.

README.md · Installation manuelle
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.py
README.md · Quick start
git clone https://github.com/Stefen-Taime/donneesqc-mcp.git
cd donneesqc-mcp
docker compose up -d

4. 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 :

VariableDéfautDescription
MCP_HOST0.0.0.0Adresse d’écoute. Utilisez 127.0.0.1 en développement local.
MCP_PORT8000Port du serveur HTTP.
MCP_ENVlocalNom de l’environnement (Sentry).
HTTP_TIMEOUT30.0Timeout HTTP en secondes.
HTTP_MAX_RETRIES3Nombre de tentatives en cas d’erreur réseau ou 5xx.
DOWNLOAD_MAX_BYTES52428800 (50 Mo)Taille maximale pour le téléchargement de fichiers.
LOG_LEVELINFONiveau de journalisation Python.
SENTRY_DSN(non défini)DSN Sentry pour le monitoring.
Lire les instructions complètes ↗
Configuration et utilisation

4.2. Gemini CLI

README.md

Ajoutez dans ~/.gemini/settings.json :
Lire les instructions complètes ↗
Documentation source

1 documents lus parmi 1 candidats.

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.

Composants du système Contexte
Mermaid Diagramme interactif

Vue générale des composants et des échanges vérifiés dans le dépôt.

Vue statique de l’architecture de donneesqc-mcp
Aperçu statique. Le diagramme interactif le remplace après le chargement de Mermaid.
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 &amp; 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
Modules et couche principale
ModuleCoucheFichiersTypesExtensions
toolsPoints d’entrée et API290.py
helpersSource principale60.py
(root)Points d’entrée et API20.py .sh

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
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
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
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
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
  1. AI Agent vers MCP Entry connects MCP
  2. MCP Entry vers Tool Registry registers tools
  3. MCP Entry vers Configuration loads server settings
  4. Tool Registry vers DQ Catalog Tools registers
  5. Tool Registry vers Montréal Tools registers
  6. Tool Registry vers Data Intelligence registers
  7. Tool Registry vers Resource Access registers
  8. Tool Registry vers OGC Tools registers
  9. Tool Registry vers Geocoding Tools registers
  10. Tool Registry vers Coordinate Tools registers
  11. DQ Catalog Tools vers CKAN API calls
  12. DQ Catalog Tools vers Données Québec queries catalogue
  13. Montréal Tools vers CKAN API calls
  14. Montréal Tools vers Montréal CKAN queries catalogue
  15. Data Intelligence vers CKAN API searches and queries
  16. Resource Access vers CKAN API gets resource metadata
  17. OGC Tools vers OGC API calls
  18. Geocoding Tools vers Address Geocoder geocodes addresses
  19. Coordinate Tools vers Coordinate Conversion converts coordinates
  20. CKAN API vers HTTP Client fetches JSON
  21. OGC API vers HTTP Client fetches OGC data
  22. OGC API vers IGO Services requests WFS/WMS
  23. OGC API vers Configuration uses endpoints
  24. 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
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

Points 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

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.py
list_tools_with_examples
tools/download_resource.py
download_resource, _parse_csv, _parse_json, _parse_xlsx_headers
helpers/geo_api.py
_get_cached, _set_cached, clear_cache, get_wfs_capabilities, get_wms_capabilities, get_features
helpers/http_client.py
get_client, _get_retry_after, _retry, fetch_json, fetch_text, fetch_bytes

7.7. Intégrations externes

Clients HTTP

httpx

Hôtes nommés dans le code

7.8. Stack et dépendances

Python pyproject.toml 6 à l’exécution, 6 dev

Python >=3.11

Ouvrir le manifeste

Dépendances externes

11 paquets déclarés (5 à l’exécution, 6 pour le développement) dans pyproject.toml.

Tableau des paquets 11
Dépendances externes
PaquetVersionUsageRôleRegistre
mcp>=1.9.0exécutionModel Context Protocolpypi.org
uvicorn>=0.34.0exécutionServeur d’applicationpypi.org
sentry-sdk>=2.19.0exécutionJournalisation et observabilitépypi.org
defusedxml>=0.7.1exécutionXML bomb protection for Python stdlib modulespypi.org
pyproj>=3.6.0exécutionPython interface to PROJ (cartographic projections and coordinate transformations library)pypi.org
pytest>=8.0développementTestspypi.org
pytest-asyncio>=0.25.0développementTestspypi.org
respx>=0.22.0développementA utility for mocking out the Python HTTPX and HTTP Core libraries.pypi.org
ruff>=0.9.0développementAnalyse et formatagepypi.org
ty>=0.0.1a0développementAn extremely fast Python type checker, written in Rust.pypi.org
pre-commit>=4.0.0développementAnalyse et formatagepypi.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
Workflows, déclencheurs, tâches et cibles
WorkflowDéclencheursTâchesPublie vers
CI
.github/workflows/ci.yml
push, demande de fusion
  • Lint & Format ubuntu-latest
    actions/checkout · Install uv · Set up Python · Install dependencies · Ruff lint and import sorting · Ruff format check
  • Tests ← lint ubuntu-latest
    actions/checkout · Install uv · Set up Python · Install dependencies · Run tests · Upload test results
—

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

python:3.12-slim

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

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

  1. antoinebou12. (2026, 5 novembre). donneesqc-mcp. [Software repository] github.com.
  2. antoinebou12. (2026, 5 novembre). donneesqc-mcp: README. [Repository documentation] github.com.
  3. antoinebou12. (2026, 5 novembre). main.py. [Source file] github.com.
  4. antoinebou12. (2026, 5 novembre). tools/__init__.py. [Source file] github.com.
  5. antoinebou12. (2026, 5 novembre). README.md. [Source file] github.com.
  6. 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.