loading…
Search for a command to run...
loading…
An experimental MCP server providing access to the services and data of the french Geoplateform
An experimental MCP server providing access to the services and data of the french Geoplateform
Serveur MCP expérimental fournissant du contexte spatial pour les LLM sur la base des services de la Géoplateforme de l'IGN.
Les LLM peuvent donner l'impression de disposer nativement de certaines capacités, mais ils dépendent, en pratique, des outils qui leur sont connectés. Par exemple, pour accéder à la date et à l'heure, un assistant doit être interfacé avec un serveur comme MCP time. De la même manière, pour lire une page web, il doit être relié à un outil tel que MCP fetch.
S'il est techniquement possible de brancher des API REST/GeoJSON telle APICARTO à un LLM, la conception de ces dernières n'est pas adaptée (5000 résultat par défaut, grosse géométrie dans les réponses, géométries complexes à fournir,...).
L'idée est ici d'expérimenter la conception d'un MCP rendant les données et les services de la Géoplateforme accessibles par un LLM.
IGNF/mcp-gpf-server)feature_ref) aux objets géométriques dans les réponses et outils du MCP.Par exemple, avec "Cursor Settings / MCP / Add server" :
{
"mcpServers": {
"geocontext": {
"command": "npx",
"args": ["-y", "@ignfab/geocontext"]
}
}
}
docker compose build
docker compose up -d
Ensuite :
{
"mcpServers": {
"geocontext": {
"url": "http://localhost:3000/mcp"
}
}
}
git clone https://github.com/ignfab/geocontext
cd geocontext
npm install
npm run build
{
"mcpServers": {
"geocontext": {
"command": "node",
"args":["/chemin/absolu/vers/geocontext/dist/index.js"]
}
}
}
Cette commande lance MCP Inspector, l’outil de développement de MCP pour tester et déboguer un serveur local.
npx -y @modelcontextprotocol/inspector node dist/index.js
Pour une utilisation avancée :
| Nom | Description | Valeur par défaut |
|---|---|---|
TRANSPORT_TYPE |
Transport permet de choisir entre "stdio" et "http" | "stdio" |
HTTP_HOST |
Adresse d'écoute en mode HTTP. Utile avec Docker pour exposer le service via 0.0.0.0. |
défaut mcp-framework (127.0.0.1) |
GPF_WFS_MINISEARCH_OPTIONS |
Chaîne JSON optionnelle pour ajuster les options MiniSearch utilisées par gpf_wfs_search_types (fields, combineWith, fuzzy, boost.namespace, boost.name, boost.title, boost.description, boost.properties, boost.enums, boost.identifierTokens). |
options par défaut de @ignfab/gpf-schema-store |
LOG_FORMAT |
Le format d'écriture des logs : "json" ou "simple". | "simple" |
LOG_LEVEL |
Le niveau d'écriture des logs : "error", "info", ou "debug" | "debug" |
Exemple :
export GPF_WFS_MINISEARCH_OPTIONS='{"fields":["title","identifierTokens"],"combineWith":"OR","fuzzy":0.05,"boost":{"title":4,"name":5}}'
Si GPF_WFS_MINISEARCH_OPTIONS est absent ou vide, les options par défaut restent celles de @ignfab/gpf-schema-store, y compris le comportement par défaut OR de MiniSearch pour combineWith.
Remarque :
gpf_wfs_search_types et gpf_wfs_describe_type s'appuient sur un catalogue de schémas embarqué fourni par @ignfab/gpf-schema-store.gpf_wfs_get_features et gpf_wfs_get_feature_by_id interrogent toujours le service WFS de la Géoplateforme en direct.Une description avancée des tools équivalente au niveau de détail de la méthode tools/list est disponible ici.
On décrit ci-dessous succinctement les différents tools MCP proposés par geocontext.
Ex : Quelle est la position (lon,lat) de la mairie de Vincennes?
Ex : Quelle est l'altitude de la mairie de Loray (25)?
L'idée est ici de répondre à des questions précises en traitant côté serveur les appels aux services WFS de la Géoplateforme :
Ex : Quelles sont les informations administrative pour la mairie de Vincennes?
Ex : Quelles sont les informations du cadastre pour la mairie de Vincennes?
Ex : Quel est le document PLU en vigueur pour le port de Marseille?
Ex: Quelles assiettes de SUP sont présentes autour de la mairie de Vincennes ?
Les tools WFS orientés "objet" (adminexpress, cadastre, urbanisme, assiette_sup) exposent un feature_ref { typename, feature_id } quand l'objet source est réutilisable tel quel dans un appel ultérieur à gpf_wfs_get_feature_by_id ou gpf_wfs_get_features (ex : spatial_operator="intersects_feature").
typename valide. La recherche est textuelle et configurable via GPF_WFS_MINISEARCH_OPTIONS.
- Quels sont les millésimes ADMINEXPRESS disponibles sur la Géoplateforme?
- Quelle est la table de la BDTOPO correspondant aux bâtiments?
- Dans quelle table de la BDTOPO peut-on trouver les ponts?
id, namespace, name, title, description, properties), en particulier avant d'appeler gpf_wfs_get_features
- Quelles sont les informations disponibles pour les communes avec ADMINEXPRESS-COG.LATEST?
- Compare le modèle des communes entre ADMINEXPRESS-COG:2024 et ADMINEXPRESS-COG.LATEST
feature_id.Le tool accepte un contrat structuré :
select pour choisir les propriétés à renvoyerresult_type="request" pour récupérer la requête compilée (POST + get_url éventuelle) pour utilisation par un autre tool (ex: affichage cartographique)result_type="results" pour renvoyer une FeatureCollection normalisée contenant exactement un seul objetExemple :
typename="ADMINEXPRESS-COG.LATEST:commune", feature_id="commune.8952"Le tool accepte un contrat structuré :
select pour choisir les propriétés à renvoyerwhere pour filtrer les objetsorder_by pour trier les résultatsspatial_operator et ses paramètres dédiés pour le spatialresult_type="request" pour récupérer la requête compilée en POST, ainsi qu'une get_url dérivée quand elle reste raisonnablement portable en GETExemples :
where=[{ property: "code_insee", operator: "eq", value: "25000" }]spatial_operator="bbox" avec bbox_west, bbox_south, bbox_east, bbox_northspatial_operator="dwithin_point" avec dwithin_lon, dwithin_lat, dwithin_distance_mspatial_operator="intersects_feature" avec intersects_feature_typename et intersects_feature_id issus d'une feature_ref
- Quelles sont les 5 communes les plus peuplées du Doubs (25)?
- Combien y-a-t'il de bâtiments à moins de 5 km de la tour Eiffel?
N'hésitez pas à créer une issue si vous rencontrez un problème! Merci de fournir :
N'hésitez pas :
@ignfab/gpf-schema-store.Добавь это в claude_desktop_config.json и перезапусти Claude Desktop.
{
"mcpServers": {
"geocontext": {
"command": "npx",
"args": [
"-y",
"@ignfab/geocontext"
]
}
}
}