MCP server for querying SHOM (Service Hydrographique de la Marine) wreck database via WFS API
MCP SHOM Wrecks — Base d'épaves SHOM pour Claude Code
Serveur MCP qui expose la base d'épaves du SHOM (Service Hydrographique et Océanographique de la Marine) — 4 796+ épaves sur l'ensemble des eaux françaises — à des assistants IA comme Claude Code.
Conçu pour la planification de plongée, la recherche nautique et l'exploration historique.
Ce que ça fait
Interrogez la base officielle d'épaves de la Marine française en langage naturel :
"Cherche l'épave du Courbet"
"Quelles épaves sont à moins de 5 milles de Ouistreham ?"
"Liste les épaves entre 49.1°N et 49.5°N, de -1°W à 0°E"
Le serveur traduit ces requêtes en appels WFS vers l'API SHOM et renvoie les résultats formatés.
Les 4 outils
| Outil | Description | Paramètres clés |
|:---:|---|---|
| search_wreck_by_name | Chercher une épave par nom (partiel, insensible à la casse) | name |
| get_nearby_wrecks | Épaves autour d'un point GPS, triées par distance | latitude, longitude, radius_nm |
| search_wrecks_bbox | Épaves dans une zone rectangulaire | min_lat, max_lat, min_lon, max_lon |
| get_wreck_details | Fiche complète d'une épave par ID SHOM | id |
Détail des outils
search_wreck_by_name
Recherche par nom avec correspondance partielle insensible à la casse.
| Paramètre | Type | Requis | Description |
|-----------|------|:------:|-------------|
| name | string | oui | Nom à chercher (ex. "Courbet", "LST", "Susan") |
get_nearby_wrecks
Trouve les épaves proches d'une position GPS. Idéal pour la planification de plongée.
| Paramètre | Type | Requis | Description |
|-----------|------|:------:|-------------|
| latitude | number | oui | Latitude de référence (ex. 49.28 pour Ouistreham) |
| longitude | number | oui | Longitude de référence (ex. -0.2467) |
| radius_nm | number | oui | Rayon de recherche en milles nautiques |
| max_results | number | non | Limiter le nombre de résultats |
search_wrecks_bbox
Recherche dans une zone rectangulaire (bounding box).
| Paramètre | Type | Requis | Description |
|-----------|------|:------:|-------------|
| min_lat | number | oui | Limite sud (ex. 49.1) |
| max_lat | number | oui | Limite nord (ex. 49.6) |
| min_lon | number | oui | Limite ouest (négatif = ouest, ex. -1.1) |
| max_lon | number | oui | Limite est (ex. 0.1) |
| max_results | number | non | Limiter le nombre de résultats |
get_wreck_details
Fiche complète d'une épave par son identifiant SHOM.
| Paramètre | Type | Requis | Description |
|-----------|------|:------:|-------------|
| id | string | oui | ID SHOM (ex. "wrecks.42" ou "42") |
Champs de données
Chaque épave de la base SHOM peut contenir :
| Champ | Description |
|-------|-------------|
| nom | Nom de l'épave (null si inconnu) |
| latitude / longitude | Position GPS en degrés décimaux (WGS84) |
| brassiage | Profondeur d'eau au-dessus de l'épave au zéro hydrographique, en mètres. Ce n'est pas la profondeur du fond — c'est la hauteur d'eau au-dessus du point le plus haut de l'épave |
| precis_bra | Précision du brassiage |
| caract_bat | Caractéristiques du navire (type, tonnage, etc.) |
| caract_obj | État de l'objet sur le fond (intact, disloqué, etc.) |
| circ_nauf | Circonstances du naufrage (torpillé, tempête, collision, etc.) |
| long_obj | Longueur de l'objet en mètres |
| precis_loc | Précision de la localisation en mètres |
| type_obj | Type d'objet |
| inspireid | Identifiant européen INSPIRE |
Source de données
Toutes les données proviennent de l'API WFS ouverte du SHOM :
| | |
|---|---|
| Endpoint | https://services.data.shom.fr/INSPIRE/wfs |
| Couche | EPAVES_BDD_WFS:wrecks |
| Protocole | WFS 1.1.0 (standard OGC), sans authentification |
| Système de coordonnées | EPSG:4326 (WGS84) |
| Couverture | Eaux métropolitaines et outre-mer françaises |
Plus d'infos : data.shom.fr
Prérequis
- Node.js >= 18
- npm
- Claude Code (ou tout client MCP)
Installation
# Cloner le repo
git clone https://github.com/dorian-erkens/mcp-shom-wrecks.git
cd mcp-shom-wrecks
# Installer et compiler
npm install
npm run build
Important : le dossier dist/ n'est pas commité — il faut lancer npm run build avant de pouvoir démarrer le serveur.
Configuration dans Claude Code
Ajouter dans ~/.claude/settings.json :
{
"mcpServers": {
"shom-wrecks": {
"command": "node",
"args": ["/chemin/vers/mcp-shom-wrecks/dist/index.js"]
}
}
}
Puis relancer Claude Code. Les 4 outils seront disponibles automatiquement.
Lancement autonome
npm start
Le serveur communique via stdin/stdout en JSON-RPC (protocole MCP). Ce n'est pas un serveur HTTP — Claude Code (ou tout client MCP) le lance comme processus enfant.
Commandes
| Commande | Description |
|----------|-------------|
| npm install | Installer les dépendances (@modelcontextprotocol/sdk, zod, TypeScript) |
| npm run build | Compiler TypeScript (src/ → dist/) |
| npm start | Démarrer le serveur MCP (node dist/index.js) |
Exemples de requêtes
Une fois configuré, posez vos questions en langage naturel :
"Cherche l'épave du Courbet"
→ search_wreck_by_name(name: "Courbet")
"Quelles épaves sont à moins de 5 milles de Ouistreham ?"
→ get_nearby_wrecks(lat: 49.28, lon: -0.2467, radius_nm: 5)
"Liste les épaves entre 49.1°N et 49.5°N, de -1°W à 0°E"
→ search_wrecks_bbox(min_lat: 49.1, max_lat: 49.5, min_lon: -1.0, max_lon: 0)
"Donne-moi les détails de l'épave wrecks.1234"
→ get_wreck_details(id: "wrecks.1234")
"What wrecks are near the D-Day beaches?"
→ get_nearby_wrecks with appropriate coordinates
Fonctionne en français ou en anglais — les paramètres des outils sont les mêmes.
Stack technique
- TypeScript — mode strict
- @modelcontextprotocol/sdk — framework serveur MCP
- zod — validation des entrées
- SHOM WFS API — source de données (requêtes live, pas de base locale)
Comment ça marche
- Le serveur MCP démarre sur stdio et enregistre 4 outils
- À chaque appel, il construit une requête WFS
GetFeatureavec les filtres appropriés (BBOX, CQL_FILTER ou FEATUREID) - L'API SHOM renvoie des features GeoJSON
- Les résultats sont parsés, enrichis (calculs distance/relèvement pour les recherches de proximité) et formatés en markdown
Les recherches par nom utilisent des filtres CQL ILIKE côté serveur, avec un fallback côté client si le filtre n'est pas supporté. Les calculs de distance utilisent la navigation plane (suffisant pour les portées typiques de planification de plongée).
Utilisé par
- Dive Director — Assistant DP pour Claude Code (8 agents,
/plan-dive) - Dive Director App — Web app (FastAPI + React) avec carte des épaves, chat IA et inspector panel
Licence
MIT
Auteur
Dorian Erkens
English
mcp-shom-wrecks is an MCP (Model Context Protocol) server that exposes the SHOM (French Naval Hydrographic Service) wreck database — 4,796+ shipwrecks across all French waters — to AI assistants like Claude Code.
Designed for dive planning, nautical research, and historical exploration.
4 tools available
| Tool | Description |
|:---:|---|
| search_wreck_by_name | Search wrecks by name (partial, case-insensitive) |
| get_nearby_wrecks | Find wrecks near a GPS position, sorted by distance |
| search_wrecks_bbox | Search wrecks in a geographic bounding box |
| get_wreck_details | Get the full record of a wreck by SHOM ID |
Quick start
git clone https://github.com/dorian-erkens/mcp-shom-wrecks.git
cd mcp-shom-wrecks
npm install && npm run build
Add to ~/.claude/settings.json:
{
"mcpServers": {
"shom-wrecks": {
"command": "node",
"args": ["/path/to/mcp-shom-wrecks/dist/index.js"]
}
}
}
Then restart Claude Code. The 4 tools are available automatically — just ask in natural language:
- "Search for the Courbet wreck" →
search_wreck_by_name - "What wrecks are within 5 miles of Ouistreham?" →
get_nearby_wrecks - "What wrecks are near the D-Day beaches?" →
get_nearby_wrecks - "List wrecks between 49.1°N–49.5°N, -1°W–0°E" →
search_wrecks_bbox - "Give me details on wreck wrecks.1234" →
get_wreck_details
Works in French or English — the data source (SHOM) covers all French metropolitan and overseas waters.
Data source
All data comes from the SHOM open data WFS API (WFS 1.1.0, no authentication required, EPSG:4326). Live queries — no local database needed.
Used by
- Dive Director — AI-powered Dive Director assistant for Claude Code (8 agents,
/plan-dive) - Dive Director App — Web app (FastAPI + React) with wreck map, AI chat, and inspector panel