Skip to main content
Glama

Geocontext

npm version prototype

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.0 recommandé, à contrôler avec node --version) avec npx.

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

geocode

Autocomplétion Géoplateforme

Localiser une mairie

Obtenir une altitude

altitude

Calcul altimétrique Géoplateforme

Altitude d'un point

Calculer une distance ou un temps de trajet

distance

Calcul d'itinéraire Géoplateforme

Temps de trajet à pied

Récupérer le contexte administratif

adminexpress

WFS + ADMIN-EXPRESS

Commune, département, région

Récupérer le cadastre

cadastre

WFS + PARCELLAIRE-EXPRESS

Parcelle cadastrale

Récupérer les documents d'urbanisme

urbanisme

WFS + données GPU

PLU, POS, CC

Récupérer les servitudes

assiette_sup

WFS + données GPU

SUP autour d'un lieu

Trouver une couche GPF

gpf_search_types

gpf-schema-store

Trouver la table des bâtiments

Décrire une couche GPF

gpf_describe_type

gpf-schema-store

Lister les champs disponibles

Interroger une couche GPF

gpf_get_features

WFS + isochrone

Extraire des objets

Compter les objets résultats d'une interrogation de couche GPF

gpf_count_features

WFS

Compter les bâtiments d'une zone

Récupérer un objet par identifiant

gpf_get_feature_by_id

WFS

Charger une commune précise

Télécharger le résultat d'une interrogation de couche GPF

gpf_get_features_layer

WFS + isochrone

Cartographier un résultat

Télécharger un objet par identifiant

gpf_get_feature_by_id_layer

WFS

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

En 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

Documentation

La documentation détaillée est répartie par usage :

  • Installer Geocontext dans un client MCP

  • Configurer le serveur MCP

  • 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

Voir également

Exemple : Qui est le maire de la commune de Vincennes ?

Licence

MIT

Available Tools

10 tools
adminexpressUnités administrativesA
Read-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 positionA
Read-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é publiqueA
Read-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 cadastralesA
Read-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’adressesA
Read-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 WFSA
Read-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 identifiantA
Read-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 WFSA
Read-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 WFSA
Read-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’urbanismeA
Read-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

    A4.2/5.0

    Scored across 10 tools

    Disambiguation4/5

    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.

    Naming Consistency3/5

    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.

    Tool Count5/5

    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.

    Completeness4/5

    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

    ActivityNo data
    ResponsivenessOutdated data

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      A
      quality
      D
      maintenance
      Access 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.
      9
      13
      MIT
    • A
      license
      Not graded
      quality
      F
      maintenance
      An 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 npm
      4
      MIT