Agent Tools
Back to MCP servers

io.github.cturkieh/france-data-mcp

https://france-data-mcp.vercel.app/mcp
● healthy

skills: {'id': 'autocomplete_commune', 'name': 'autocomplete_commune', 'description': 'Recherche de communes françaises par nom, code postal ou code INSEE. Idéal pour autocomplétion. Source : geo.api.gouv.fr (DINUM/Etalab).\n\nUn (au moins) parmi `nom`, `codePostal`, `code` est requis. Alias acceptés : `q`/`query`/`search` → `nom`, `codepostal`/`postal_code` → `codePostal`, `code_insee`/`insee` → `code`.', 'tags': [], 'examples': None, 'input_modes': None, 'output_modes': None}, {'id': 'get_commune_by_code', 'name': 'get_commune_by_code', 'description': "Récupère une commune par son code INSEE. Retourne un objet `LookupResult` discriminé par `found`. `found: true` → champs commune à plat (nom, codesPostaux, centre…). `found: false` → `{ found: false, key, lookupStatus: 'not_found', message }` orientant vers `autocomplete_commune` pour disambiguer.\n\nAlias acceptés : `code_insee`/`codeInsee`/`insee` → `code`.", 'tags': [], 'examples': None, 'input_modes': None, 'output_modes': None}, {'id': 'geocode_adresse', 'name': 'geocode_adresse', 'description': "Géocode une adresse française en coordonnées GPS. Source : IGN Géoplateforme (data.geopf.fr). Précision au numéro de rue.\n\nLe champ `score` (0-1) qualifie la fiabilité du match : >= 0.8 fiable, < 0.5 = match douteux (souvent un fallback rue/commune sans rapport avec l'adresse demandée). Le champ booléen `confidence_low` vaut `true` dans ce cas : ne PAS utiliser `point` pour une décision quand `confidence_low: true`. Le champ `type` indique aussi la granularité (housenumber > street > locality > municipality).", 'tags': [], 'examples': None, 'input_modes': None, 'output_modes': None}, {'id': 'reverse_geocode', 'name': 'reverse_geocode', 'description': "Géocodage inverse : à partir de coordonnées GPS, retrouve l'adresse la plus proche. Source : IGN Géoplateforme. Couverture France métropolitaine + DOM uniquement : des coordonnées hors zone (ex. New York) ou en pleine mer renvoient `null` (pas une erreur — c'est l'absence de résultat, pas une panne).", 'tags': [], 'examples': None, 'input_modes': None, 'output_modes': None}, {'id': 'population', 'name': 'population', 'description': "Population d'une COMMUNE (code INSEE 5 car.), d'un DÉPARTEMENT (2-3 car.) OU d'un IRIS infracommunal (9 car.) — granularité auto-détectée par la longueur du `code`. Retourne un `LookupResult` discriminé par `found`.\n\n- IRIS (9 car., ex `751103701` = commune `75110` + IRIS `3701`) : population totale du quartier au Recensement 2022 (champ `population`, comptes bruts), + `libelle`, `code_commune`, `type_iris` (H/A/D/Z). Source : INSEE RP 2022 (table ingérée, géo 01/01/2024). Maille la plus fine (quartier) pour les villes ; en zone peu dense la commune = 1 IRIS (`type_iris` Z, code `COM+0000`). Pour le profil démographique détaillé d'un îlot ou d'un bassin (âge, CSP, familles, revenu), utiliser `profil_iris`.\n- Commune (5 car., ex `75056` Paris, `13055` Marseille, `2A004` Ajaccio) : PMUN/PCAP/PTOT. Source INSEE Melodi (DS_POPULATIONS_REFERENCE). PMUN = base légale DREES. Commune fusionnée → `found: false` + orientation `autocomplete_commune`. INSEE n'expose PAS les arrondissements PLM (75101-75120, 13201-13216, 69381-69389) → passer la commune-mère ou le département.\n- Département (2-3 car., ex `75`, `59`, `2A`, `971`) : Mayotte (`976`) ABSENTE de Melodi → `lookupNotFound`.\n\nAlias acceptés : `code_insee`/`codeInsee`/`insee`, `code_dept`/`dept`/`departement`/`code_departement`, `code_iris`/`iris` → `code`.", 'tags': [], 'examples': None, 'input_modes': None, 'output_modes': None}, {'id': 'profil_iris', 'name': 'profil_iris', 'description': 'Profil démographique au grain QUARTIER (IRIS) — la « demande » d\'un territoire (âge, CSP, familles, revenu), à croiser avec l\'offre de soins pour l\'aide à l\'implantation. Source : INSEE RP 2022 + FILOSOFI 2021 (tables ingérées, géo 01/01/2024). Retourne un `LookupResult` discriminé par `found`.\n\nEntrée : EXACTEMENT un de `point` (`lat`+`lon`) OU `code_iris` (9 car.). `rayon_km` optionnel (0 < r ≤ 10) → DEUX modes :\n- SANS `rayon_km` → profil de l\'ÎLOT seul (~2000 hab) sous le point / du code. `mode: "ilot"`, `revenu_median` = médiane réelle de l\'îlot.\n- AVEC `rayon_km` → AGRÉGAT du BASSIN = îlots dont le CENTROÏDE est dans le disque (chaque îlot compté 1 fois). `mode: "bassin"`, `population_bassin`, `nb_iris_agreges`, et `revenu_median_pondere` = PROXY (moyenne pondérée population des médianes des îlots couverts — PAS une vraie médiane de bassin) + `couverture` {`revenu_pct_population`, `iris_revenu_manquants`} car FILOSOFI ne couvre que les communes ≥5000 hab.\n\nLes parts `age` (part_65_plus/75_plus) et `csp` (cadres, prof_interm, employés, ouvriers, agriculteurs, artisans_comm, retraités, autres) sont des ratios sur comptes bruts (Σ/Σ). Pour une simple population de commune/dept, utiliser `population`. `not_found` motivé si code absent ou point hors métropole / en mer.', 'tags': [], 'examples': None, 'input_modes': None, 'output_modes': None}, {'id': 'entreprises_in_radius', 'name': 'entreprises_in_radius', 'description': "Recherche d'entreprises françaises avec filtres NAF, code postal, département ou rayon géographique. Couvre tous secteurs (santé via NAF 8690B, 4773Z, 8710A, 8621Z, etc.). Source : DINUM Recherche Entreprises (SIRENE + RNE). Renvoie CA, dirigeants, tranches d'effectif et dates de création.\n\nDeux modes EXCLUSIFs (endpoints DINUM distincts) : (1) proximité — `lat`+`lon`+`radiusKm` (optionnellement + `naf`), résolu nativement via `/near_point` ; (2) administratif — `q` (texte libre) et/ou `naf` + `codePostal`/`departement`, via `/search`. La recherche de proximité ne supporte PAS `q` ni `codePostal`/`departement` (combinaison rejetée avec une erreur explicite : choisir un seul mode). `radiusKm` borné à 50 km.\n\n**Réduction de payload (V0.13)** : `includeDirigeants: false` strip la liste des dirigeants RNE de chaque entreprise du résultat — utile en énumération volume (Geo Intel) où les dirigeants ne sont pas exploités et où les groupes type Biogroup peuvent en lister 20+ par entité (gonflement inutile du payload). Défaut `true` pour préserver le contrat V0.12 (backward-compat strict).", 'tags': [], 'examples': None, 'input_modes': None, 'output_modes': None}, {'id': 'entreprise_by_siren', 'name': 'entreprise_by_siren', 'description': "Récupère le détail d'une entreprise française par son SIREN (9 chiffres) : raison sociale, NAF, finances historiques, dirigeants, établissements. Source : DINUM Recherche Entreprises.\n\n**Format de retour** : objet `LookupResult` discriminé par `found`.\n- `found: true` → l'entreprise est retournée à plat (champs `siren`, `nomComplet`, `etablissements`, `enrichmentStatus`, …)\n- `found: false` → `{ found: false, key, lookupStatus: 'not_found' | 'ambiguous', message }`. `not_found` : SIREN non indexé par DINUM (souvent diffusion partielle INSEE — l'entreprise peut quand même exister dans SIRENE). `ambiguous` : régression API à signaler.\n\n⚠️ Quand `found: true`, la liste `etablissements` peut être tronquée. Le champ `nombreEtablissements` (compté SIRENE) reflète le total réel. **Lire `enrichmentStatus`** pour savoir si la liste est complète :\n- `success` : `etablissements` contient tous les sites\n- `partial` : sites manquants (multi-département ou NAF différent du siège) — voir `enrichmentWarning`\n- `failed` : l'enrichissement a échoué (rate limit, panne API) — seul le siège est listé\n- `not_attempted` : entreprise monosite ou data SIRENE manquante\n\nPour énumération exhaustive multi-département, utiliser `entreprises_in_radius` par zone géographique. Coût : 1 ou 2 appels API DINUM par invocation (rate limit ~1 req/s effectif).", 'tags': [], 'examples': None, 'input_modes': None, 'output_modes': None}; uptime_30d 1.0%; p95 1737.1ms; conformance: pass

Transport
streamable-http
Auth
Cost

How to connect

MCP endpoint (streamable-http)
https://france-data-mcp.vercel.app/mcp
JSON-RPC initialize probe
curl -X POST https://france-data-mcp.vercel.app/mcp \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json, text/event-stream' \
  -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{}}'
Homepage
https://france-data-mcp.vercel.app/mcp
Listed at (chiark)
https://chiark.ai/agents/1dca6417-0b88-4f99-808a-663d812a35f1