Skip to main content
Glama

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 dans search_treks(practice_names=...).

  • list_labels — liste les labels de réglementation de l'instance GeoTrek, à utiliser dans search_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.fr

Variables/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) ou streamable-http (serveur distant accessible en HTTP, voir ci-dessous).

  • MCP_HOST / --host : adresse d'écoute pour streamable-http (défaut 0.0.0.0).

  • MCP_PORT / --port : port d'écoute pour streamable-http (défaut 8000).

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-mcp

Le serveur écoute alors sur http://0.0.0.0:8000/mcp. Il vous reste à :

  1. 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.

  2. 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 écouter geotrek-mcp sur 127.0.0.1 uniquement, et laissez le reverse proxy être le seul point d'entrée public).

  3. 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.target

Exemple 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
pytest

Pour tester interactivement avec l'inspecteur MCP :

mcp dev geotrek_mcp/server.py

Available Tools

3 tools
list_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.

ParametersJSON Schema
NameRequiredDescriptionDefault
force_refreshNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters1/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
force_refreshNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters1/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
latNo
lonNo
limitNo
placeNo
radius_kmNo
query_textNo
label_namesNo
ascent_max_mNo
ascent_min_mNo
duration_max_hNo
duration_min_hNo
practice_namesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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

A3.9/5.0
Disambiguation5/5

Each tool has a distinctly different purpose: listing activities, listing labels, and searching treks. There is no overlap or potential for misselection.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern in snake_case (list_activities, list_labels, search_treks), making the API predictable.

Tool Count4/5

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.

Completeness4/5

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

ActivityMaintained
ResponsivenessSyncing

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

Related MCP Servers

  • 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.
    12
    4
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    An 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.
    10
    Apache 2.0
  • A
    license
    A
    quality
    D
    maintenance
    MCP 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.
    6
    2
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    MCP server for geocoding French addresses, POIs, and cadastral parcels using the Géoplateforme API. Supports direct geocoding, reverse geocoding, and capability queries.
    3
    MIT

Latest Blog Posts

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