Un serveur MCP expérimental pour data.public.lu

Publié le 2 mars 2026

data.public.lu dispose dorénavant d'un serveur MCP expérimental qui permet d'interagir avec les données ouvertes luxembourgeoises depuis une IA conversationnelle.

Photo de Milad Fakurian sur Unsplash

Serveur MCP et IA

Model Context Protocol (MCP) est un protocole standardisé qui permet à des IA conversationnelles d'interagir avec des outils ou services tiers. Cette fonctionnalité est disponible dans de nombreuses IA du marché.

L'expérimentation de la DINUM

Les collègues de la DINUM en France développent actuellement un serveur MCP dans le projet datagouv-mcp pour dialoguer avec les plateformes udata. Data.public.lu utilisant cette plateforme udata, nous avons créé un fork de ce projet adapté aux caractéristiques de data.public.lu: opendatalu/datagouv-mcp.

Que peut-on faire avec ce serveur MCP ?

Ce serveur MCP permet de réaliser diverses opérations sur data.public.lu, notamment de rechercher des jeux de données, d'accéder aux métadonnées d'un jeu de données et de lister les ressources associées à un jeu de données. Les fichiers d'un dataset et autres API peuvent bien entendu être téléchargés et interrogés.

Voici quelques exemples de prompts et les réponses associées, réalisées à l'aide de ce serveur MCP et du logiciel Claude Code:

Quelle est la dernière image aérienne du Luxembourg disponible sur data.public.lu ? Quelle est sa résolution? Comment puis-je la télécharger?

Voici un résumé complet des informations trouvées via l'outil MCP data.public.lu :

  ---
  Dernière image aérienne du Luxembourg

  Jeu de données : Orthophoto officielle du Grand-Duché de Luxembourg, édition 2023
  Producteur : Administration du cadastre et de la topographie (ACT)
  Publié le : 8 mars 2024 | Mis à jour le : 12 juin 2024
  Licence : CC0 (domaine public)
  URL : https://data.public.lu/datasets/orthophoto-officielle-du-grand-duche-de-luxembourg-edition-2023/

  ---
  Résolution

  - Résolution au sol (GSD) : ≤ 10 cm/pixel
  - Précision planimétrique absolue (EMQ) : ≤ 20 cm
  - Déversement : ≤ 15 % sur la Ville de Luxembourg, ≤ 25 % ailleurs
  - Couverture : tout le territoire du Grand-Duché + au moins 50 m au-delà des frontières

  ---
  Comment télécharger

  Le dataset propose 204 fichiers au format JPEG2000 (.jp2), avec deux options :

  Option 1 — Pays entier (fichiers volumineux)

  ┌─────────────┬───────┬───────────────────────────────────────────────────────────┐
  │  Variante   │ Taill │  URL directe                                              │
  │             │   e   │                                                           │
  ├─────────────┼───────┼───────────────────────────────────────────────────────────┤
  │ RGB         │ 75,4  │ https://s3.eu-central-1.amazonaws.com/download.data.public|
  │ (couleurs)  │ GB    │ .lu/resources/orthophoto-officielle-du-grand-duche-de-luxe|
  |             |       | mbourg-edition-2023/orthophoto_2023_10cm_rgb.jp2          | 
  ├─────────────┼───────┼───────────────────────────────────────────────────────────┤
  │ PIR (infrar │ 64,3  │ https://s3.eu-central-1.amazonaws.com/download.data.public|
  │ ouge)       │ GB    │ .lu/resources/orthophoto-officielle-du-grand-duche-de-luxe|
  |             |       | mbourg-edition-2023/orthophoto_2023_10cm_ir.jp2           | 
  └─────────────┴───────┴───────────────────────────────────────────────────────────┘

  Option 2 — Par commune (recommandé, ~400–800 MB chacun)

  Des fichiers individuels existent pour chaque commune, ex. :
  https://download.data.public.lu/resources/orthophoto-officielle-du-grand-duche-de-
  luxembourg-edition-2023/20240612-092257/orthophoto-2023-10cm-rgb-beaufort.jp2

  Téléchargement en ligne de commande

  # Exemple pour une commune
  wget "https://download.data.public.lu/resources/orthophoto-officielle-du-grand-
  duche-de-luxembourg-edition-2023/20240612-092257/orthophoto-2023-10cm-rgb-beaufort.jp2"

  # Ou avec curl
  curl -O "https://download.data.public.lu/.../orthophoto-2023-10cm-rgb-beaufort.jp2"

  Logiciels compatibles

  Les fichiers JPEG2000 géoréférencés se lisent avec QGIS, ArcGIS, GDAL, ou tout autre SIG.

  ---
  Note : Il n'existe pas encore d'édition 2024 sur data.public.lu à ce jour (mars 2026). 
  L'édition 2023 est bien la plus récente disponible.

Combien de communes ont leur PAG sur data.public.lu?

  Voici la synthèse complète après avoir parcouru les 5 pages de résultats :

  ---
  PAG des communes sur data.public.lu

  La recherche retourne 93 datasets au total avec le mot-clé "PAG", dont :

  - 1 dataset consolidé : "PAG - Géométries de tous les PAG 'version 2011' en vigueur" 
    (couvre toutes les communes au format 2011)
  - 92 datasets individuels par commune

  Soit 92 communes ayant leur propre PAG publié sur data.public.lu.

  ---
  Liste des communes publiées

  ┌─────┬─────────────────────┬─────┬──────────────────────┬─────┬───────────────────┐
  │  #  │       Commune       │  #  │       Commune        │  #  │      Commune      │
  ├─────┼─────────────────────┼─────┼──────────────────────┼─────┼───────────────────┤
  │ 1   │ Beaufort            │ 32  │ Fischbach            │ 63  │ Putscheid         │
  ├─────┼─────────────────────┼─────┼──────────────────────┼─────┼───────────────────┤
  │ 2   │ Bech                │ 33  │ Flaxweiler           │ 64  │ Rambrouch         │
  ├─────┼─────────────────────┼─────┼──────────────────────┼─────┼───────────────────┤
  │ 3   │ Beckerich           │ 34  │ Frisange             │ 65  │ Reckange-sur-Mess │
  ├─────┼─────────────────────┼─────┼──────────────────────┼─────┼───────────────────┤
  │ 4   │ Bertrange           │ 35  │ Garnich              │ 66  │ Redange           │
  ├─────┼─────────────────────┼─────┼──────────────────────┼─────┼───────────────────┤
  │ 5   │ Bettembourg         │ 36  │ Goesdorf             │ 67  │ Reisdorf          │
  ├─────┼─────────────────────┼─────┼──────────────────────┼─────┼───────────────────┤
  │ 6   │ Bettendorf          │ 37  │ Grevenmacher         │ 68  │ Roeser            │
  ├─────┼─────────────────────┼─────┼──────────────────────┼─────┼───────────────────┤
  │ 7   │ Betzdorf            │ 38  │ Grosbous             │ 69  │ Rosport-Mompach   │
  ├─────┼─────────────────────┼─────┼──────────────────────┼─────┼───────────────────┤
  │ 8   │ Bissen              │ 39  │ Habscht              │ 70  │ Rumelange         │
  ├─────┼─────────────────────┼─────┼──────────────────────┼─────┼───────────────────┤
  │ 9   │ Biwer               │ 40  │ Heffingen            │ 71  │ Saeul             │
  ├─────┼─────────────────────┼─────┼──────────────────────┼─────┼───────────────────┤
  │ 10  │ Boulaide            │ 41  │ Helperknapp          │ 72  │ Sanem             │
  ├─────┼─────────────────────┼─────┼──────────────────────┼─────┼───────────────────┤
  │ 11  │ Bourscheid          │ 42  │ Hesperange           │ 73  │ Sandweiler        │
  ├─────┼─────────────────────┼─────┼──────────────────────┼─────┼───────────────────┤
  │ 12  │ Bous                │ 43  │ Junglinster          │ 74  │ Schengen          │
  ├─────┼─────────────────────┼─────┼──────────────────────┼─────┼───────────────────┤
  │ 13  │ Clervaux            │ 44  │ Kaerjeng             │ 75  │ Schieren          │
  ├─────┼─────────────────────┼─────┼──────────────────────┼─────┼───────────────────┤
  │ 14  │ Colmar-Berg         │ 45  │ Kayl                 │ 76  │ Schuttrange       │
  ├─────┼─────────────────────┼─────┼──────────────────────┼─────┼───────────────────┤
  │ 15  │ Contern             │ 46  │ Kehlen               │ 77  │ Stadtbredimus     │
  ├─────┼─────────────────────┼─────┼──────────────────────┼─────┼───────────────────┤
  │ 16  │ Diekirch            │ 47  │ Kiischpelt           │ 78  │ Steinfort         │
  ├─────┼─────────────────────┼─────┼──────────────────────┼─────┼───────────────────┤
  │ 17  │ Differdange         │ 48  │ Koerich              │ 79  │ Steinsel          │
  ├─────┼─────────────────────┼─────┼──────────────────────┼─────┼───────────────────┤
  │ 18  │ Dudelange           │ 49  │ Lac de la Haute-Sûre │ 80  │ Strassen          │
  ├─────┼─────────────────────┼─────┼──────────────────────┼─────┼───────────────────┤
  │ 19  │ Echternach          │ 50  │ Larochette           │ 81  │ Tandel            │
  ├─────┼─────────────────────┼─────┼──────────────────────┼─────┼───────────────────┤
  │ 20  │ Ell                 │ 51  │ Lenningen            │ 82  │ Troisvierges      │
  ├─────┼─────────────────────┼─────┼──────────────────────┼─────┼───────────────────┤
  │ 21  │ Erpeldange-sur-Sûre │ 52  │ Leudelange           │ 83  │ Useldange         │
  ├─────┼─────────────────────┼─────┼──────────────────────┼─────┼───────────────────┤
  │ 22  │ Esch-sur-Alzette    │ 53  │ Lintgen              │ 84  │ Vallée de l'Ernz  │
  ├─────┼─────────────────────┼─────┼──────────────────────┼─────┼───────────────────┤
  │ 23  │ Esch-sur-Sûre       │ 54  │ Lorentzweiler        │ 85  │ Vichten           │
  ├─────┼─────────────────────┼─────┼──────────────────────┼─────┼───────────────────┤
  │ 24  │ Ettelbruck          │ 55  │ Luxembourg (Ville)   │ 86  │ Wahl              │
  ├─────┼─────────────────────┼─────┼──────────────────────┼─────┼───────────────────┤
  │ 25  │ Feulen              │ 56  │ Mamer                │ 87  │ Waldbillig        │
  ├─────┼─────────────────────┼─────┼──────────────────────┼─────┼───────────────────┤
  │ 26  │ Feulen              │ 57  │ Manternach           │ 88  │ Waldbredimus      │
  ├─────┼─────────────────────┼─────┼──────────────────────┼─────┼───────────────────┤
  │ 27  │ Fischbach           │ 58  │ Mersch               │ 89  │ Weiler-la-Tour    │
  ├─────┼─────────────────────┼─────┼──────────────────────┼─────┼───────────────────┤
  │ 28  │ Flaxweiler          │ 59  │ Mertert              │ 90  │ Weiswampach       │
  ├─────┼─────────────────────┼─────┼──────────────────────┼─────┼───────────────────┤
  │ 29  │ Parc Hosingen       │ 60  │ Mertzig              │ 91  │ Wiltz             │
  ├─────┼─────────────────────┼─────┼──────────────────────┼─────┼───────────────────┤
  │ 30  │ Pétange             │ 61  │ Mondercange          │ 92  │ Winseler          │
  ├─────┼─────────────────────┼─────┼──────────────────────┼─────┼───────────────────┤
  │ 31  │ Préizerdaul         │ 62  │ Mondorf-les-Bains    │     │                   │
  └─────┴─────────────────────┴─────┴──────────────────────┴─────┴───────────────────┘

  ---
  Contexte

  Le Luxembourg compte 102 communes au total. Avec 92 PAG individuels publiés, 
  environ 10 communes n'ont pas encore leur PAG disponible en open data sur data.public.lu. Tous les
  datasets sont publiés par le Ministère des Affaires intérieures et sont accessibles librement.

Garder un esprit critique

Comme vous pouvez le constater dans les exemples ci-dessus, certains résultats d'analyses de l'IA peuvent être erronés. Il y a notamment 100 communes au Luxembourg actuellement et non 102. Le dernier jeu de données sur les orthophotos date de 2025 et non de 2023. S'il y a certainement moyen d'optimiser les prompts pour éviter ces écueils, nous ne pouvons que vous encourager à garder un esprit critique par rapport aux résultats obtenus.

Comment mettre en oeuvre cette solution ?

Ce serveur MCP utilise l'API de data.public.lu. Pour le mettre en oeuvre, il est nécessaire d'avoir au préalable installé Docker.

# téléchargement du projet
git clone https://github.com/opendatalu/datagouv-mcp.git

# lancement du serveur MCP
docker compose up -d

Vous pouvez vérifier que le serveur MCP fonctionne en chargeant l'adresse http://localhost:8080/health dans votre navigateur. Si tout fonctionne, vous pouvez enregistrer l'adresse suivante du serveur MCP dans votre IA: http://localhost:8080/mcp. Des exemples sont donnés pour différents logiciels et plateformes dans le README du projet.

Ça y est, votre environnement est prêt pour accueillir vos premiers prompts.

Vos retours sont les bienvenus !

Vous utilisez ce serveur MCP et vous avez des retours ? N'hésitez pas à nous en parler !