GeoTrek MCP
Provides geocoding of place names via Nominatim (based on OpenStreetMap data) to enable proximity-based trek searches, such as finding treks near a named location.
Click on "Install 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., "@GeoTrek MCPFind easy hiking trails under 2 hours near Grenoble"
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.
GeoTrek MCP
Serveur MCP (Model Context Protocol) pour rechercher des treks (randonnées, VTT, équestre, raquette, ...) sur une instance GeoTrek via son API publique v2, avec géocodage de lieux via Nominatim.
Outils exposés
search_treks— recherche des treks selon la durée (h), le dénivelé positif (m), les labels de réglementation, le type d'activité, et la proximité d'un lieu (nom, géocodé via Nominatim) ou de coordonnées (lat/lon+radius_km).list_activities— liste les types d'activité (pratiques) de l'instance GeoTrek, à utiliser danssearch_treks(practice_names=...).list_labels— liste les labels de réglementation de l'instance GeoTrek, à utiliser danssearch_treks(label_names=...).
Related MCP server: chuk-mcp-geocoder
Installation
pip install -e .Configuration
L'adresse de l'instance GeoTrek est un paramètre du serveur, fourni au démarrage via variable d'environnement ou argument CLI :
export GEOTREK_BASE_URL="https://geotrek-admin.ecrins-parcnational.fr"
geotrek-mcp
# ou
geotrek-mcp --base-url https://geotrek-admin.ecrins-parcnational.frVariables/arguments optionnels :
NOMINATIM_URL/--nominatim-url: instance Nominatim à utiliser pour le géocodage (défaut :https://nominatim.openstreetmap.org).MCP_TRANSPORT/--transport:stdio(défaut, usage local) oustreamable-http(serveur distant accessible en HTTP, voir ci-dessous).MCP_HOST/--host: adresse d'écoute pourstreamable-http(défaut0.0.0.0).MCP_PORT/--port: port d'écoute pourstreamable-http(défaut8000).
Déploiement à distance (Claude.ai, ChatGPT, ...)
Pour être ajouté comme connecteur distant sur Claude.ai ou ChatGPT, le serveur
doit tourner en transport HTTP (pas stdio, qui n'est utilisable que par un
client lancé sur la même machine) et être exposé en HTTPS.
Sur votre serveur, après avoir cloné le dépôt et installé le package :
export GEOTREK_BASE_URL="https://geotrek-admin.ecrins-parcnational.fr"
export MCP_TRANSPORT=streamable-http
export MCP_HOST=0.0.0.0
export MCP_PORT=8000
geotrek-mcpLe serveur écoute alors sur http://0.0.0.0:8000/mcp. Il vous reste à :
Le garder en vie : lancez-le via un gestionnaire de process (
systemd,supervisor,pm2, un service Docker...) plutôt qu'un simple&/nohup, pour qu'il redémarre en cas de crash ou de reboot.Le mettre en HTTPS : Claude.ai et ChatGPT exigent une URL en HTTPS pour les connecteurs distants. Mettez un reverse proxy devant (nginx, Caddy, Traefik...) qui termine le TLS et transfère vers
http://127.0.0.1:8000/mcp(dans ce cas, faites plutôt écoutergeotrek-mcpsur127.0.0.1uniquement, et laissez le reverse proxy être le seul point d'entrée public).Ajouter le connecteur : dans Claude.ai (Réglages → Connecteurs → Ajouter un connecteur personnalisé) ou ChatGPT (mode développeur → Connecteurs), collez l'URL publique, ex.
https://mcp.mon-domaine.fr/mcp. Aucune authentification n'est requise ici puisque le serveur ne fait que relayer des données déjà publiques.
Exemple minimal de systemd unit (/etc/systemd/system/geotrek-mcp.service) :
[Unit]
Description=GeoTrek MCP server
After=network.target
[Service]
Environment=GEOTREK_BASE_URL=https://geotrek-admin.ecrins-parcnational.fr
Environment=MCP_TRANSPORT=streamable-http
Environment=MCP_HOST=127.0.0.1
Environment=MCP_PORT=8000
ExecStart=/chemin/vers/GeoTrekMCP/.venv/bin/geotrek-mcp
Restart=on-failure
User=www-data
[Install]
WantedBy=multi-user.targetExemple de configuration MCP (Claude Desktop / Claude Code)
{
"mcpServers": {
"geotrek": {
"command": "geotrek-mcp",
"env": {
"GEOTREK_BASE_URL": "https://geotrek-admin.ecrins-parcnational.fr"
}
}
}
}Développement
pip install -e ".[dev]" 2>/dev/null || pip install -e . pytest
pytestPour tester interactivement avec l'inspecteur MCP :
mcp dev geotrek_mcp/server.pyAvailable Tools
3 toolslist_activitiesB
Liste les types d'activité (pratiques) disponibles sur l'instance GeoTrek configurée (ex : "A pied", "VTT", "Cheval", "Raquette"...).
Les noms retournés peuvent être utilisés tels quels dans le paramètre
practice_names de l'outil search_treks.
| Name | Required | Description | Default |
|---|---|---|---|
| force_refresh | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Aucune annotation n'est fournie, donc la description doit assumer seule la transparence comportementale. Elle précise que les valeurs sont compatibles avec search_treks et proviennent de l'instance configurée, mais elle ne dit rien sur l'effet de force_refresh, d'éventuels caches, des autorisations ou des limites.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
La description est concise, en deux phrases, avec des exemples utiles et une information principale en tête. Aucun mot superflu.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
La présence d'un schéma de sortie et l'indication d'usage avec search_treks fournissent un contexte utile. Cependant, le seul paramètre d'entrée force_refresh reste non expliqué, ce qui constitue une lacune notable pour une description qui se veut complète.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Le paramètre force_refresh n'est absolument pas mentionné dans la description, alors que la couverture du schéma est de 0% et que le nom seul n'apporte pas de sens. La description ne compense pas ce manque, ce qui laisse l'utilisateur sans information sur le comportement du paramètre.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Le verbe 'Liste' et le complément 'types d'activité (pratiques) disponibles' identifient clairement l'objet et le périmètre. Les exemples et le lien explicite vers search_treks distinguent bien l'outil de list_labels et search_treks.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
La description indique précisément un cas d'usage concret : les noms retournés peuvent être injectés tels quels dans practice_names de search_treks. En revanche, elle ne mentionne pas de cas où l'outil ne doit pas être utilisé, ni d'alternative explicite.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_labelsA
Liste les labels de réglementation disponibles sur l'instance GeoTrek configurée (ex : "En coeur de parc", "Chiens de protection des troupeaux"...).
Les noms retournés peuvent être utilisés tels quels dans le paramètre
label_names de l'outil search_treks.
| Name | Required | Description | Default |
|---|---|---|---|
| force_refresh | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the behavioral burden. It clearly indicates a read/list operation and adds context about compatibility with search_treks. However, it does not explain the behavior of the force_refresh parameter, caching, or the return format, leaving meaningful gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two tight sentences: the first front-loads the purpose with examples, and the second gives a concrete usage tip. Every sentence earns its place and there is no redundant filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple with an output schema, and the description covers its core purpose and integration with search_treks. However, the undocumented force_refresh parameter and lack of explicit differentiation from list_activities make the description not fully complete for an agent selecting and invoking the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter, force_refresh, has no schema description and is not mentioned in the tool description at all. With 0% schema description coverage, the description provides no compensatory meaning for this parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Liste') with a clear resource ('labels de réglementation disponibles sur l'instance GeoTrek configurée') and includes concrete examples. It is clearly distinguished from the sibling tool list_activities (labels vs activities) and explicitly relates to search_treks via the label_names parameter.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains that returned names can be used directly in search_treks' label_names parameter, providing concrete usage context. It does not explicitly state when not to use this tool or contrast it with list_activities, so it stops short of full guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_treksA
Recherche des treks (randos, VTT, ...) sur l'instance GeoTrek configurée.
Filtres disponibles : durée en heures (duration_min_h/duration_max_h),
dénivelé positif en mètres (ascent_min_m/ascent_max_m), réglementation
(label_names, noms tels que renvoyés par list_labels), type d'activité
(practice_names, noms tels que renvoyés par list_activities), et
proximité géographique soit par nom de lieu (place, géocodé via
Nominatim) soit par coordonnées directes (lat/lon), combinée à un
rayon de recherche radius_km (défaut 10 km).
| Name | Required | Description | Default |
|---|---|---|---|
| lat | No | ||
| lon | No | ||
| limit | No | ||
| place | No | ||
| radius_km | No | ||
| query_text | No | ||
| label_names | No | ||
| ascent_max_m | No | ||
| ascent_min_m | No | ||
| duration_max_h | No | ||
| duration_min_h | No | ||
| practice_names | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so well: it discloses filter behavior, units, default radius, and the use of Nominatim for geocoding. It omits return format and error behavior, but an output schema exists to cover some of that.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single organized paragraph, front-loaded with the purpose and then a structured enumeration of filters. It is efficient with no wasted words, though bullet points could improve scannability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 12 parameters and no annotations, the description covers most filters but leaves `limit` and `query_text` unexplained, and lacks details on search result ordering or pagination. The output schema helps, but the overall guidance feels slightly incomplete for full agent decision-making.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds significant meaning for 10 of 12 parameters, explaining units, filter semantics, and naming sources. It does not explain `limit` or `query_text`, which remain ambiguous gaps despite the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Recherche des treks' (search treks) on the GeoTrek instance. It distinguishes itself from sibling list tools by focusing on searching with filters rather than listing available values.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides context on how to use filters, notably referencing list_labels and list_activities for valid names, and explains the two geographic proximity options. It does not explicitly contrast with alternatives, but the intent is clear given the sibling tools are list tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Each tool has a distinctly different purpose: listing activities, listing labels, and searching treks. There is no overlap or potential for misselection.
All tool names follow a consistent verb_noun pattern in snake_case (list_activities, list_labels, search_treks), making the API predictable.
Three tools is a minimal but appropriate set for a search-focused server. Each tool is needed to support the core search workflow, though the count is at the lower boundary of the typical range.
The core workflow of listing valid filter values and searching treks is fully covered. Minor gaps exist, such as lack of a dedicated get-trek-by-id tool, but search likely returns full trek details, so agents can work around this.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Nominatim MCP — wraps OpenStreetMap Nominatim geocoding API (free, no auth)
Geo-based flight search MCP server. Find more flights between any two places on earth
Plan your hike. Get your developer token at https://Infoseek.ai/mcp
Related MCP Servers
- 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.124MIT
- AlicenseAqualityCmaintenanceAn MCP server providing geocoding and place discovery services via Nominatim and OpenStreetMap. It enables users to perform forward and reverse geocoding, extract bounding boxes, and find nearby places or administrative hierarchies.10Apache 2.0
- AlicenseAqualityDmaintenanceMCP server for planning routes (hiking, biking, driving, etc.) using the OpenRouteService API. Provides tools to find coordinates, create routes with GPX/PNG/HTML output, search POIs, and compute reachable areas.62MIT
- AlicenseAqualityCmaintenanceMCP server for geocoding French addresses, POIs, and cadastral parcels using the Géoplateforme API. Supports direct geocoding, reverse geocoding, and capability queries.3MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/jacquesfize/GeoTrekMCP'
If you have feedback or need assistance with the MCP directory API, please join our Discord server