Skip to main content
Glama
README.md
# GeoTrek MCP

Serveur MCP (Model Context Protocol) pour rechercher des treks (randonnées, VTT,
équestre, raquette, ...) sur une instance [GeoTrek](https://geotrek.fr/) via son
API publique v2, avec géocodage de lieux via [Nominatim](https://nominatim.org/).

## 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=...)`.

## Installation

```bash
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 :

```bash
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 :

```bash
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`) :

```ini
[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)

```json
{
  "mcpServers": {
    "geotrek": {
      "command": "geotrek-mcp",
      "env": {
        "GEOTREK_BASE_URL": "https://geotrek-admin.ecrins-parcnational.fr"
      }
    }
  }
}
```

## Développement

```bash
pip install -e ".[dev]" 2>/dev/null || pip install -e . pytest
pytest
```

Pour tester interactivement avec l'inspecteur MCP :

```bash
mcp dev geotrek_mcp/server.py
```

TDQS

A3.9/5.0

Scored across 3 tools

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

ActivitySlowing
ResponsivenessNo issues