geocontext
Geocontext is a read-only MCP server that lets AI assistants query French reference geographic data (IGN Géoplateforme) in natural language.
Geocode places, addresses and POIs (
geocode), returning lon/lat, label, kind, city, zipcode.Get elevation and accuracy for any point (
altitude).Fetch administrative units covering a point — commune, département, région, EPCI, etc. (
adminexpress), including INSEE codes.Access cadastral data near a point (parcelle, feuille, commune...) within 10 m (
cadastre).Retrieve urbanism documents from the Géoportail de l'Urbanisme — PLU zoning, prescriptions, etc. (
urbanisme).List public utility servitudes (SUP) around a point (
assiette_sup).Discover WFS data layers by keyword (
gpf_wfs_search_types).Inspect a layer's schema — exact property names, types, enums (
gpf_wfs_describe_type).Query any WFS layer with attribute filters (
where), sorting,select, and spatial filters (bbox, point intersection, distance, or intersection with a referenced feature) (gpf_wfs_get_features), or just get counts viaresult_type="hits".Fetch a single object by ID (
gpf_wfs_get_feature_by_id).Chain tools —
feature_reffrom the contextual tools is reusable to query other layers on the same footprint.Produce map-ready requests —
result_type="request"returns a compiled WFS URL (geometry included) for mapping or debugging.
Note: no data is downloaded; everything is queried live from IGN services.
Provides spatial context for LLMs by integrating with French geographic data services, including geocoding, altitude calculation, administrative boundaries (AdminExpress), cadastral information, urban planning documents, and WFS data exploration from the Géoplateforme.
Supports deployment via Docker Compose for running the geocontext MCP server.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@geocontext what's the altitude at the Eiffel Tower in Paris?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Geocontext
Geocontext est un serveur MCP qui permet aux assistants IA d’interroger les données géographiques françaises de référence publiées sur la Géoplateforme de l'IGN.
Pourquoi Geocontext ?
Pas de téléchargement — Geocontext interroge directement les services de la Géoplateforme IGN, sans copie locale ni synchronisation à maintenir.
Données de référence à jour — les réponses s’appuient sur les référentiels géographiques publiés en continu par l’IGN et ses partenaires.
Réponses optimisées pour les LLM — les traitements et filtrages sont faits côté serveur pour limiter les tokens transmis au modèle.
Moins d’hallucinations — les descriptions et schémas enrichis aident l’assistant à identifier les bonnes données et les bons champs (implémentation anticipée de OGC API Feature - schema dans ignfab/gpf-schema-store).
Compatible MCP — utilisable avec des clients compatibles MCP comme Claude Desktop ou Cursor, mais aussi directement dans certaines interfaces de chat en ligne compatibles, comme Claude, Mistral Vibe ou ChatGPT, via leurs connecteurs MCP.
Related MCP server: French Open Data & IGN
Démo en 30 secondes
Question
Combien y a-t-il de bâtiments de plus de 20 mètres à Vincennes ?
Réponse
À Vincennes (94300, Val-de-Marne), il y a 509 bâtiments de plus de 20 mètres de hauteur, selon les données de la BD TOPO® de l'IGN.
La hauteur prise en compte est celle mesurée entre le sol et le point haut de la gouttière du bâtiment.
Trace complète
💬 Je vais d'abord rechercher les informations nécessaires :
les coordonnées de Vincennes et le type GPF pour les bâtiments.
🔧 Appel outil: geocode({'text': 'Vincennes'})
🔧 Appel outil: gpf_search_types({'query': 'bâtiment hauteur'})
💬 Parfait ! J'ai trouvé le type GPF BDTOPO_V3:batiment.
Je vais maintenant récupérer le schéma de ce type pour connaître
les propriétés exactes, notamment la hauteur et le code INSEE de Vincennes.
🔧 Appel outil: gpf_describe_type({'typename': 'BDTOPO_V3:batiment'})
🔧 Appel outil: adminexpress({'lon': 2.437785,'lat': 48.847279})
💬 J'ai toutes les informations nécessaires.
La commune de Vincennes a le feature_id commune.33667.
Je vais maintenant compter les bâtiments de plus de 20 mètres
de hauteur sur cette commune.
🔧 Appel outil: gpf_count_features({
'typename': 'BDTOPO_V3:batiment',
'where': [
{
'property': 'hauteur',
'operator': 'gt',
'value': '20'
}
],
'intersects_feature_filter': {
'typename': 'ADMINEXPRESS-COG.LATEST:commune',
'feature_id': 'commune.33667'
}
})
💬 À Vincennes (`94300`, Val-de-Marne), il y a **509 bâtiments**
de plus de **20 mètres de hauteur**, selon les données
de la **BD TOPO®** de l'IGN.
La hauteur prise en compte est celle mesurée entre le sol
et le point haut de la gouttière du bâtiment.Démarrage rapide
☁️ Instance HTTP prête à l'emploi
Geocontext est disponible comme serveur MCP distant en HTTP : https://geollm.beta.ign.fr/geocontext/mcp
Exemple de configuration pour un client compatible MCP acceptant les serveurs HTTP distants :
{
"mcpServers": {
"geocontext": {
"type": "http",
"url": "https://geollm.beta.ign.fr/geocontext/mcp"
}
}
}Selon le client utilisé, la syntaxe exacte peut varier. Certaines interfaces de chat compatibles MCP demandent simplement l’URL du serveur distant dans leurs paramètres de connecteurs.
💻 Utilisation en local
Prérequis : Node.js (
>=22.21.0 <23,>=24.5.0recommandé, à contrôler avecnode --version) avecnpx.
Vous pouvez lancer Geocontext vous-même en local avec la commande npx -y @ignfab/geocontext qui démarrera la dernière version publiée de @ignfab/geocontext ou laisser un client MCP comme Cursor le démarrer pour vous via sa configuration.
Par exemple, dans Cursor ("Settings" > "MCP" > "Add server"):
{
"mcpServers": {
"geocontext": {
"command": "npx",
"args": ["-y", "@ignfab/geocontext"]
}
}
}Exemples d’utilisation
Géocodage et altimétrie
ADMIN-EXPRESS et CADASTRE
BDTOPO
Isochrone
Géoportail de l'Urbanisme
Fonctionnalités disponibles
Les fonctionnalités correspondent aux outils MCP documentés dans docs/mcp-tools.md.
Usage | Outil MCP | Source utilisée | Exemple |
Géocoder un lieu |
| Localiser une mairie | |
Obtenir une altitude |
| Altitude d'un point | |
Calculer une distance ou un temps de trajet |
| Temps de trajet à pied | |
Récupérer le contexte administratif |
| Commune, département, région | |
Récupérer le cadastre |
| Parcelle cadastrale | |
Récupérer les documents d'urbanisme |
| PLU, POS, CC | |
Récupérer les servitudes |
| SUP autour d'un lieu | |
Trouver une couche GPF |
| Trouver la table des bâtiments | |
Décrire une couche GPF |
| Lister les champs disponibles | |
Interroger une couche GPF |
| Extraire des objets | |
Compter les objets résultats d'une interrogation de couche GPF |
| Compter les bâtiments d'une zone | |
Récupérer un objet par identifiant |
| Charger une commune précise | |
Télécharger le résultat d'une interrogation de couche GPF |
| Cartographier un résultat | |
Télécharger un objet par identifiant |
| Cartographier un objet |
Architecture en bref
Geocontext agit comme un intermédiaire entre un assistant compatible MCP et les services de la Géoplateforme IGN.
Il n’héberge pas les données : il expose des outils MCP, interroge les services IGN à la demande, puis retourne au LLM des réponses structurées, filtrées et adaptées à son contexte.
flowchart TB
assistant["Assistant IA / client MCP"]
geocontext["Geocontext<br/>serveur MCP"]
geopf["Géoplateforme IGN<br/>géocodage · altimétrie · WFS · urbanisme · cadastre"]
assistant -->|"appels d'outils MCP"| geocontext
geocontext -->|"requêtes aux services IGN"| geopf
geopf -->|"données de référence"| geocontext
geocontext -->|"réponses structurées"| assistantEn pratique, Geocontext permet à l’assistant de passer d’une question en langage naturel à des appels aux données géographiques de référence, sans téléchargement préalable ni copie locale des référentiels.
Statut et limites
🧪 Ce projet est un prototype en incubation au sein d'IGNfab, basé sur un prototype antérieur désormais archivé. S'il s'avère pertinent de l'industrialiser, il sera migré vers l'organisation IGN principale (ex. :
IGNF/mcp-gpf-server).🪄 Cet outil n'est pas magique : ses capacités sont strictement définies et documentées dans la section Fonctionnalités.
Documentation
La documentation détaillée est répartie par usage :
Installer Geocontext dans un client MCP
Configurer le serveur MCP
Configuration avancée : proxy d’entreprise, modes de transport
stdio/http, paramètres d’exécution.
Comprendre les outils disponibles
Outils MCP : description technique des outils exposés par Geocontext, paramètres attendus et exemples d’appels.
Développer ou contribuer au code
Guide développeur : installation des dépendances, construction de l’application, exécution des tests et organisation du projet.
Contribution
🐛 Signaler un problème
N'hésitez pas à créer une issue si vous rencontrez un problème !
Merci de fournir :
Le client MCP (ex. : GitHub Copilot, Cursor, Claude Desktop) et le mode de transport (stdio ou http) utilisé.
Le modèle utilisé (ex. : Claude Sonnet 4.5)
La version de Geocontext (visible sur npmjs.com/@ignfab/geocontext)
La demande faite à l'assistant (ex. : "Combien y a-t-il de ponts franchissant la Seine ?")
Si possible, un export de la discussion au format Markdown.
✨ Demander une évolution
N'hésitez pas non plus à créer une issue pour demander une évolution.
Merci de fournir la question type pour laquelle vous souhaiteriez que le MCP aide à apporter une réponse. Par exemple :
"Quels sont les fonds de carte disponibles ?" -> nous verrons comment exploiter le service WMTS de la Géoplateforme.
Crédits
mcp-framework : cadre de développement du MCP
@ignfab/gpf-schema-store : couche sémantique / catalogue de schémas embarqué (en attendant OGC API - Features - schema)
@camptocamp/ogc-client : exploration WFS (ex. : parsing GetCapabilities)
MiniSearch : recherche par mot-clé (
gpf_search_types)
jsts : traitements géométriques (ex. : tri des réponses par distance au point recherché).
turfjs/distance : calculs de distance avec la formule de Haversine.
Voir également
https://github.com/datagouv/datagouv-mcp : MCP data.gouv.fr
Exemple : Qui est le maire de la commune de Vincennes ?
https://git.tricoteuses.fr/logiciels/tricoteuses-api-parlement : MCP parlement français non officiel
https://github.com/datagouv/datagouv-skill : Skills data.gouv.fr
Licence
Available Tools
10 toolsadminexpressUnités administrativesARead-onlyIdempotent
Renvoie, pour un point donné par sa longitude et sa latitude, la liste des unités administratives (arrondissement, arrondissement_municipal, canton, collectivite_territoriale, commune, commune_associee_ou_deleguee, departement, epci, region) qui le couvrent, sous forme d'objets typés contenant leurs propriétés administratives.
Les résultats incluent un feature_ref WFS réutilisable. Les propriétés incluent notamment le code INSEE.
Le feature_ref de chaque unité administrative est directement réutilisable dans gpf_wfs_get_features avec spatial_operator="intersects_feature" pour interroger d'autres données sur cette emprise.
Pour récupérer exactement l'objet correspondant au feature_ref, utiliser gpf_wfs_get_feature_by_id.
(source : Géoplateforme (WFS, ADMINEXPRESS-COG.LATEST)).
Inputs: lon (required), lat (required). Returns: results
altitudeAltitude d’une positionARead-onlyIdempotent
Renvoie l'altitude (en mètres) et la précision de la mesure (accuracy) d'un point géographique à partir de sa longitude et de sa latitude. (source : Géoplateforme (altimétrie)).
Inputs: lon (required), lat (required). Returns: lon, lat, altitude, accuracy
assiette_supServitudes d’utilité publiqueARead-onlyIdempotent
Renvoie, pour un point donné par sa longitude et sa latitude, la liste des assiettes de servitudes d'utilité publique (SUP) pertinentes à proximité, avec leurs propriétés associées.
Une SUP est une contrainte légale sur l'usage du sol liée à un équipement ou une infrastructure publique (ex : AC pour patrimoine, EL pour voirie, PT pour télécoms, I pour installations classées...).
Les résultats peuvent inclure des assiettes ponctuelles, linéaires ou surfaciques et exposent un feature_ref WFS réutilisable quand il est disponible.
Pour récupérer exactement l'objet correspondant au feature_ref, utiliser gpf_wfs_get_feature_by_id.
(source : Géoplateforme - (WFS Géoportail de l'Urbanisme)).
Inputs: lon (required), lat (required). Returns: results
cadastreInformations cadastralesARead-onlyIdempotent
Renvoie, pour un point donné par sa longitude et sa latitude, la liste des objets cadastraux (arrondissement, commune, feuille, parcelle, subdivision_fiscale, localisant) les plus proches, avec leurs informations associées.
Les résultats sont retournés au plus une fois par type lorsqu'ils sont disponibles et incluent un feature_ref WFS réutilisable.
Le feature_ref est directement réutilisable dans gpf_wfs_get_features avec spatial_operator="intersects_feature".
La distance de recherche est fixée à 10 mètres. Si aucun objet n'est trouvé dans les 10 mètres, le résultat est vide.
Pour récupérer exactement l'objet correspondant au feature_ref, utiliser gpf_wfs_get_feature_by_id.
(source : Géoplateforme (WFS, CADASTRALPARCELS.PARCELLAIRE_EXPRESS)).
Inputs: lon (required), lat (required). Returns: results
geocodeGéocodage de lieux et d’adressesARead-onlyIdempotent
Renvoie des résultats d'autocomplétion géocodés à partir d'un texte libre (lieu, adresse, POI), avec coordonnées, libellé complet et informations de localisation (kind, city, zipcode).
Les coordonnées lon/lat retournées sont directement réutilisables dans tous les autres tools. Le champ kind indique le type de résultat (ex : monument, street, city, locality).
(source : Géoplateforme (service d'autocomplétion)).
Inputs: text (required), maximumResponses. Returns: results
gpf_wfs_describe_typeDescription d’un type WFSARead-onlyIdempotent
Renvoie le schéma détaillé d'un type WFS à partir de son identifiant (typename) : identifiants, description et liste des propriétés.
Utiliser ce tool après gpf_wfs_search_types pour inspecter les propriétés disponibles avant d'appeler gpf_wfs_get_features.
La sortie inclut notamment le type des propriétés, leur description, leurs valeurs possibles (enum) lorsqu'elles existent
IMPORTANT: Appel fortement recommandé si les noms exacts des propriétés ne sont pas connus : un nom de propriété incorrect provoque une erreur.
Inputs: typename (required). Returns: id, namespace, name, title, +2 more
gpf_wfs_get_feature_by_idLecture d’un objet WFS par identifiantARead-onlyIdempotent
Récupère exactement un objet WFS à partir de typename et feature_id, sans filtre attributaire ni spatial.
Ce tool est le chemin robuste quand vous disposez déjà d'une feature_ref { typename, feature_id } issue d'un autre tool (adminexpress, cadastre, urbanisme, assiette_sup, gpf_wfs_get_features).
Le contrat garantit une cardinalité stricte : 0 résultat ou plusieurs résultats provoquent une erreur explicite.
Utiliser result_type="request" pour récupérer la requête WFS compilée (avec get_url) et l'utiliser ou la visualiser ailleurs.
Inputs: typename (required), feature_id (required), result_type, select.
gpf_wfs_get_featuresLecture d’objets WFSARead-onlyIdempotent
Interroge un type WFS et renvoie des résultats structurés sans demander au modèle d'écrire du CQL ou du WFS.
Utiliser select pour choisir les propriétés, where pour filtrer, order_by pour trier et spatial_operator avec ses paramètres dédiés pour le spatial. Avec result_type="request", la géométrie est automatiquement ajoutée aux propriétés sélectionnées pour garantir une requête cartographiable.
Exemple attributaire : where=[{ property: "code_insee", operator: "eq", value: "75056" }].
Exemple bbox : spatial_operator="bbox" avec bbox_west, bbox_south, bbox_east, bbox_north en lon/lat.
Exemple point dans géométrie : spatial_operator="intersects_point" avec intersects_lon et intersects_lat.
Exemple distance : spatial_operator="dwithin_point" avec dwithin_lon, dwithin_lat, dwithin_distance_m.
Exemple réutilisation : spatial_operator="intersects_feature" avec intersects_feature_typename et intersects_feature_id issus d'une feature_ref.
⚠️ Quand typename et intersects_feature_typename sont identiques, utiliser gpf_wfs_get_feature_by_id pour récupérer exactement l'objet ciblé.
OBLIGATOIRE : toujours appeler gpf_wfs_describe_type avant ce tool, sauf si gpf_wfs_describe_type a déjà été appelé pour ce même typename dans la conversation en cours.
Les noms de propriétés ne peuvent pas être devinés : ils sont spécifiques à chaque typename et diffèrent systématiquement des conventions habituelles (ex : pas de nom_officiel, navigabilite sans accent, etc.). Toute tentative sans appel préalable à gpf_wfs_describe_type provoquera une erreur.
Inputs: typename (required), limit, result_type, select, +14 more.
gpf_wfs_search_typesRecherche de types WFSARead-onlyIdempotent
Recherche des types WFS de la Géoplateforme (GPF) à partir de mots-clés afin de trouver un identifiant de type (typename) valide.
La recherche est textuelle (mini-search) et retourne une liste ordonnée de candidats avec leur identifiant, leur titre, leur description et un score de pertinence éventuel.
Le paramètre max_results permet d'élargir le nombre de candidats retournés (10 par défaut).
Important : Utiliser ce tool avant gpf_wfs_describe_type ou gpf_wfs_get_features lorsque le nom exact du type n'est pas connu.
Important : Privilégier des termes métier en français pour la recherche.
Inputs: query (required), max_results. Returns: results
urbanismeInformations d’urbanismeARead-onlyIdempotent
Renvoie, pour un point donné par sa longitude et sa latitude, la liste des objets d'urbanisme pertinents du Géoportail de l'Urbanisme (document, zones, prescriptions, informations, etc.), avec leurs propriétés associées. (source : Géoplateforme - (WFS Géoportail de l'Urbanisme)).
Les résultats peuvent notamment inclure le document d'urbanisme applicable ainsi que des éléments réglementaires associés à proximité du point.
Quand un objet correspond à une couche WFS réutilisable, il expose aussi un feature_ref compatible avec gpf_wfs_get_features et spatial_operator="intersects_feature".
Le zonage PLU (zone U, AU, A, N...) est inclus dans les zones retournées et constitue souvent l'information principale recherchée.
Pour récupérer exactement l'objet correspondant au feature_ref, utiliser gpf_wfs_get_feature_by_id.
Modèles d'URL Géoportail de l'Urbanisme :
Inputs: lon (required), lat (required). Returns: results
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 10 tools
The tools are mostly distinct: geocode, altitude, cadastre, adminexpress, assiette_sup, and urbanisme each target a different geographic domain. The gpf_wfs_* tools form a clear WFS query pipeline, though gpf_wfs_get_features and gpf_wfs_get_feature_by_id could be confused by name, but their descriptions clarify the difference.
The naming is mixed: French domain nouns (adminexpress, assiette_sup, urbanisme) coexist with a gpf_wfs_* prefix group and geocode/altitude. The gpf_wfs_* tools are consistent, but the overall set lacks a uniform verb_noun or domain_prefix pattern.
10 tools is well-scoped for a geospatial context server: 6 domain-specific point queries plus 4 WFS pipeline tools. Each tool serves a distinct purpose and the count feels appropriate.
The server covers geocoding, elevation, administrative boundaries, cadastre, urbanism, and servitudes, plus a generic WFS query pipeline. Minor gaps exist (e.g., no reverse geocoding, no distance/area calculations), but the core workflows are well covered.
Maintenance
Related MCP Connectors
French address quality, geocoding, routing, company lookup & catchment stats (BAN, INSEE, OSM).
Routing, geocoding, places, matrix and map tools for location-aware AI workflows.
Independent platform exposing French official public territorial data through read-only MCP tools.
Mobility, geocoding and nearby urban services for AI agents.
Related MCP Servers
- AlicenseAqualityDmaintenanceEnhances LLM capabilities with location-based services and geospatial data, enabling users to geocode addresses, find nearby points of interest, get directions, optimize meeting points, and analyze neighborhoods.12233MIT
- FlicenseNot gradedqualityCmaintenanceProvides access to French public data through data.gouv.fr, IGN cartographic services (maps, tiles, geographic data), address geocoding, and administrative divisions with demographic information.6-
- AlicenseAqualityDmaintenanceAccess French geographic data from IGN (Institut national de l'information géographique et forestière) including cadastral parcels, agricultural land registry, protected natural areas, urban planning zones, and wine appellations through natural language queries.913MIT
- AlicenseNot gradedqualityFmaintenanceAn experimental MCP server providing spatial context for LLMs by interfacing with French Geoplateforme services. It enables tasks such as geocoding, altitude lookups, and querying administrative, cadastral, or urban planning data.10 npm4MIT