CCM
/MCP
SkillsMCPMarketplacesDigestToolsAdvertise

This week in Claude

Every Monday: Claude Code, Agent SDK, MCP, and the Anthropic platform moves worth your time.

Skills by Category
Frontend DevelopmentBackend & APIsTesting & QASecurityDevOps & CI/CDGit & Pull RequestsDocumentationCode Review & QualityAI & Agent BuildingSkill Development
MCP Servers by Category
Sales & MarketingWeb & Browser AutomationDatabasesAI & LLM ToolsCloud & InfrastructureCommunication & MessagingDeveloper ToolsDesign & CreativeDocuments & KnowledgeSearch & Web Crawling
Marketplaces by Category
AI Agents & OrchestrationLLM IntegrationDevelopment ToolsFrontend & UIBackend & APIsDatabasesTesting & Code QualityDevOps & CloudSecurity & ComplianceGit & Version Control

Claude Code Marketplaces

Discover Claude Code plugins, extensions, and tools. Automatically updated directory of Anthropic Claude AI marketplaces with development tools, productivity plugins, and integrations.

Resources

  • Browse Skills
  • Browse MCP Servers
  • Browse Marketplaces
  • Skill index
  • MCP index
  • Marketplace index
  • Plugins Reference

Community

  • About
  • Tools
  • Feedback
  • Privacy Policy
  • Advertise

Built for the Claude Code community with Claude Code by mertbuilds.com

Independent project, not affiliated with Anthropic
cturkieh avatar

France Data Mcp

cturkieh/france-data-mcp
234 toolsSTDIO, HTTPregistry active
Summary

This server reconciles eight French public data sources into a single MCP interface, handling the messy reality of FINESS health facilities, INSEE SIRENE business registries, RPPS practitioner directories, and CNAM health centers. It exposes 34 tools that cross-reference establishments against demographic data at the IRIS neighborhood level, detect closed SIRET numbers invisible in DREES data, and geocode addresses through IGN. You get population density calculations, specialty lookups for 462K conventioned practitioners, and composite panoramas that combine territory demographics with nearby competitors and prescribers. The remote endpoint runs on Vercel with rate limits at 60 requests per minute, or you can self-host the TypeScript implementation.

CodeRabbit
CodeRabbit
AI writes the code. CodeRabbit catches the slop.
Try For Free →
MCP-ready Email SendingMCP-ready Email Sending
MCP-ready Email Sending
Plug Mailtrap into your AI workflow and let it handle the email.
Connect Mailtrap MCP →
Make your agent a DeFi expert
Make your agent a DeFi expert
Agent, run crypto. Access onchain data & trade routes via 1inch.
Install now →
Capacitor - Shared memory for your team’s coding agents.
Capacitor - Shared memory for your team’s coding agents.
Make coding agent sessions - Searchable, Shareable, Vendor-neutral & Scored.
Try For Free →
CodeScene MCP ServerCodeScene MCP Server
CodeScene MCP Server
Your agent targets a perfect 10 Code Health score. Deterministic. Every commit.
Try For Free →
Give your AI the whole web as clean markdownGive your AI the whole web as clean markdown
Give your AI the whole web as clean markdown
Integrate web data into your AI product. One API to scrape website & brand data.
Get API Key Now →
belt - the only tool your agent needs
belt - the only tool your agent needs
belt cli automatically finds the best tools and skills for your agent. image, video, music, tts...
one prompt install →
inference shell
inference shell
create and run specialised agents in minutes
build now →
CodeRabbit
CodeRabbit
AI writes the code. CodeRabbit catches the slop.
Try For Free →
MCP-ready Email SendingMCP-ready Email Sending
MCP-ready Email Sending
Plug Mailtrap into your AI workflow and let it handle the email.
Connect Mailtrap MCP →
Make your agent a DeFi expert
Make your agent a DeFi expert
Agent, run crypto. Access onchain data & trade routes via 1inch.
Install now →
Capacitor - Shared memory for your team’s coding agents.
Capacitor - Shared memory for your team’s coding agents.
Make coding agent sessions - Searchable, Shareable, Vendor-neutral & Scored.
Try For Free →
CodeScene MCP ServerCodeScene MCP Server
CodeScene MCP Server
Your agent targets a perfect 10 Code Health score. Deterministic. Every commit.
Try For Free →
Give your AI the whole web as clean markdownGive your AI the whole web as clean markdown
Give your AI the whole web as clean markdown
Integrate web data into your AI product. One API to scrape website & brand data.
Get API Key Now →
belt - the only tool your agent needs
belt - the only tool your agent needs
belt cli automatically finds the best tools and skills for your agent. image, video, music, tts...
one prompt install →
inference shell
inference shell
create and run specialised agents in minutes
build now →

Tools

Public tool metadata for what this MCP can expose to an agent.

34 tools
autocomplete_communeRecherche de communes françaises par nom, code postal ou code INSEE. Idéal pour autocomplétion. Source : geo.api.gouv.fr (DINUM/Etalab). Un (au moins) parmi `nom`, `codePostal`, `code` est requis. Alias acceptés : `q`/`query`/`search` → `nom`, `codepostal`/`postal_code` → `cod...5 params

Recherche de communes françaises par nom, code postal ou code INSEE. Idéal pour autocomplétion. Source : geo.api.gouv.fr (DINUM/Etalab). Un (au moins) parmi `nom`, `codePostal`, `code` est requis. Alias acceptés : `q`/`query`/`search` → `nom`, `codepostal`/`postal_code` → `cod...

Parameters* required
boostPopulationboolean
Trier par population décroissante. Recommandé pour les noms ambigus (ex: 'Charleville').default: true
codestring
Code INSEE exact (5 caractères). Ex: "59009".
codePostalstring
Code postal exact (5 chiffres). Ex: "59650".
limitnumber
Nombre max de résultats (1-30, défaut 10).default: 10
nomstring
Recherche par nom (autocomplétion). Ex: "Villeneuve d'Ascq", "Lyon".
get_commune_by_codeRé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_commu...1 params

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

Parameters* required
codestring
Code INSEE 5 caractères. Ex: "75056" Paris, "59009" Villeneuve-d'Ascq, "2A004" Ajaccio.
geocode_adresseGéocode une adresse française en coordonnées GPS. Source : IGN Géoplateforme (data.geopf.fr). Précision au numéro de rue. Le 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 d...3 params

Géocode une adresse française en coordonnées GPS. Source : IGN Géoplateforme (data.geopf.fr). Précision au numéro de rue. Le 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 d...

Parameters* required
adressestring
Adresse complète à géocoder.
codeCommunestring
Optionnel — limiter au code INSEE de commune.
codePostalstring
Optionnel — limiter le résultat à un code postal pour désambiguïser.
reverse_geocodeGé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...2 params

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

Parameters* required
latnumber
Latitude (WGS84).
lonnumber
Longitude (WGS84).
populationPopulation 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`. - IRIS (9 car., ex `751103701` = commune `75110` + IRIS `3701...1 params

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`. - IRIS (9 car., ex `751103701` = commune `75110` + IRIS `3701...

Parameters* required
codestring
Code INSEE — 5 caractères = commune (ex "75056"), 2-3 caractères = département (ex "75", "971", "2A"). Granularité auto-détectée par la longueur.
profil_irisProfil 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` discr...4 params

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` discr...

Parameters* required
code_irisstring
Code IRIS 9 caractères (ex `751103701`) — alternatif au point.
latnumber
Latitude du point (mode point).
lonnumber
Longitude du point (mode point).
rayon_kmnumber
Rayon du bassin en km (0 < r ≤ 10). Absent = profil de l'îlot seul.
entreprises_in_radiusRecherche 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...10 params

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

Parameters* required
codePostalstring
Filtre alternatif : code postal exact.
departementstring
Filtre alternatif : code département.
includeDirigeantsboolean
Inclure la liste des dirigeants RNE dans chaque entreprise (défaut true). `false` strip `dirigeants: []` côté handler — utile en énumération volume où les dirigeants ne sont pas exploités (économie...default: true
latnumber
Latitude du centre du cercle de recherche.
lonnumber
Longitude du centre du cercle de recherche.
nafstring
Code NAF principal (ex: '8690B' = labos, '4773Z' = pharmacies, '8710A' = EHPAD, '8621Z' = MG).
pagenumber
Page (1-indexed).default: 1
perPagenumber
Résultats par page (1-25, défaut 10).default: 10
qstring
Recherche textuelle libre (raison sociale, dirigeant…).
radiusKmnumber
Rayon en km (1-50).
entreprise_by_sirenRé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. **Format de retour** : objet `LookupResult` discriminé par `found`. - `found: true` → l'entre...1 params

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. **Format de retour** : objet `LookupResult` discriminé par `found`. - `found: true` → l'entre...

Parameters* required
sirenstring
SIREN exact, 9 chiffres.
data_freshnessRetourne la fraîcheur des dumps de données ingérés côté serveur : FINESS DREES (bimestriel), Annuaire Santé Ameli (hebdomadaire), RPPS / Annuaire Santé ANS (mensuel), Centres de Santé CNAM (hebdomadaire). Pour chaque source : `last_success_at` ISO timestamp, `last_success_row_...

Retourne la fraîcheur des dumps de données ingérés côté serveur : FINESS DREES (bimestriel), Annuaire Santé Ameli (hebdomadaire), RPPS / Annuaire Santé ANS (mensuel), Centres de Santé CNAM (hebdomadaire). Pour chaque source : `last_success_at` ISO timestamp, `last_success_row_...

No parameter schema in public metadata yet.

compare_raison_sociale_finess_vs_rppsCompare la raison sociale FINESS DREES vs RPPS / Annuaire Santé ANS pour un même num_finess. Primitive brute SANS interprétation métier — retourne juste les deux libellés + un statut de comparaison. Le caller décide quoi faire de la divergence. Utilité : RPPS reflète souvent p...1 params

Compare la raison sociale FINESS DREES vs RPPS / Annuaire Santé ANS pour un même num_finess. Primitive brute SANS interprétation métier — retourne juste les deux libellés + un statut de comparaison. Le caller décide quoi faire de la divergence. Utilité : RPPS reflète souvent p...

Parameters* required
num_finessstring
Numéro FINESS exact (9 chiffres).
compare_adresse_cnam_vs_finessCompare l'adresse d'un centre de santé côté CNAM (Annuaire santé Ameli) vs FINESS DREES pour un même num_finess. Primitive brute SANS interprétation métier — retourne les deux adresses, un `score_dice` (0..1, informatif ; `null` si non comparable car `finess_absent`) et un `st...1 params

Compare l'adresse d'un centre de santé côté CNAM (Annuaire santé Ameli) vs FINESS DREES pour un même num_finess. Primitive brute SANS interprétation métier — retourne les deux adresses, un `score_dice` (0..1, informatif ; `null` si non comparable car `finess_absent`) et un `st...

Parameters* required
num_finessstring
Numéro FINESS exact (9 chiffres).
historique_etablissementReconstitue la timeline complète d'un établissement de santé (ouvertures, fermetures, changements de NAF/enseigne) en croisant FINESS DREES ↔ resolver SIRET (RPPS + DINUM) ↔ SIRENE INSEE V3.11. Lit les `periodesEtablissement` complètes pour chaque SIRET candidat. **V0.7.0** :...1 params

Reconstitue la timeline complète d'un établissement de santé (ouvertures, fermetures, changements de NAF/enseigne) en croisant FINESS DREES ↔ resolver SIRET (RPPS + DINUM) ↔ SIRENE INSEE V3.11. Lit les `periodesEtablissement` complètes pour chaque SIRET candidat. **V0.7.0** :...

Parameters* required
num_finessstring
Numéro FINESS exact (9 chiffres).
reconcilier_finess_sireneCroise FINESS DREES ↔ SIRENE INSEE V3.11 et calcule un score de cohérence (Sørensen-Dice sur bigrammes) pour chaque SIRET candidat. Utile pour confirmer/infirmer un appariement num_finess ↔ SIRET avant prospection ou cross-check qualité. Logique : 1. Récupère FINESS (raison so...1 params

Croise FINESS DREES ↔ SIRENE INSEE V3.11 et calcule un score de cohérence (Sørensen-Dice sur bigrammes) pour chaque SIRET candidat. Utile pour confirmer/infirmer un appariement num_finess ↔ SIRET avant prospection ou cross-check qualité. Logique : 1. Récupère FINESS (raison so...

Parameters* required
num_finessstring
Numéro FINESS exact (9 chiffres).
verifier_site_actifVérifie si un établissement de santé FINESS est encore en activité en croisant FINESS DREES ↔ RPPS (pivot SIRET) ↔ DINUM (liste complète des SIRET du SIREN, incluant les fermés). Détecte les SIRET fermés encore listés actifs côté FINESS (DREES a 1-2 mois de retard). **V0.16 —...1 params

Vérifie si un établissement de santé FINESS est encore en activité en croisant FINESS DREES ↔ RPPS (pivot SIRET) ↔ DINUM (liste complète des SIRET du SIREN, incluant les fermés). Détecte les SIRET fermés encore listés actifs côté FINESS (DREES a 1-2 mois de retard). **V0.16 —...

Parameters* required
num_finessstring
Numéro FINESS exact (9 chiffres).
etablissement_by_siretRécupère le détail d'un établissement par son SIRET (14 chiffres) via l'API SIRENE INSEE V3.11 : raison sociale de l'unité légale, enseigne commerciale, NAF de l'établissement, dates de création/fermeture, statut administratif actif/fermé, adresse complète, tranche d'effectif....1 params

Récupère le détail d'un établissement par son SIRET (14 chiffres) via l'API SIRENE INSEE V3.11 : raison sociale de l'unité légale, enseigne commerciale, NAF de l'établissement, dates de création/fermeture, statut administratif actif/fermé, adresse complète, tranche d'effectif....

Parameters* required
siretstring
SIRET exact, 14 chiffres.
etablissements_finess_in_radiusRecherche d'établissements de santé FINESS dans un rayon géographique (PostGIS ST_DWithin). Filtrable par familles. 24 valeurs disponibles : mco, ssr, sld, had, psychiatrie, dialyse, ambulatoire, labo, imagerie, pharmacie, msp_cpts, ehpad, residence_autonomie, senior_accompagn...6 params

Recherche d'établissements de santé FINESS dans un rayon géographique (PostGIS ST_DWithin). Filtrable par familles. 24 valeurs disponibles : mco, ssr, sld, had, psychiatrie, dialyse, ambulatoire, labo, imagerie, pharmacie, msp_cpts, ehpad, residence_autonomie, senior_accompagn...

Parameters* required
famillesarray
Familles FINESS à inclure (24 valeurs disponibles, voir enum). Si omis, toutes catégories.
include_freshnessboolean
Si true, ajoute un champ `data_freshness` au payload (dans `query_metadata` si présent, sinon à la racine) listant la dernière ingestion réussie par source (FINESS, Ameli, RPPS, CDS) avec `stalenes...default: false
latnumber
Latitude du centre (WGS84).
limitnumber
Nombre max de résultats (1-500, défaut 100).default: 100
lonnumber
Longitude du centre (WGS84).
radius_kmnumber
Rayon en km (0.1-50, défaut 5).default: 5
etablissements_finess_by_categorieListe des établissements FINESS par famille, avec filtre département ou commune optionnel. Pas de rayon — pour énumération exhaustive d'une zone administrative. 24 familles disponibles : mco, ssr, sld, had, psychiatrie, dialyse, ambulatoire, labo, imagerie, pharmacie, msp_cpts...6 params

Liste des établissements FINESS par famille, avec filtre département ou commune optionnel. Pas de rayon — pour énumération exhaustive d'une zone administrative. 24 familles disponibles : mco, ssr, sld, had, psychiatrie, dialyse, ambulatoire, labo, imagerie, pharmacie, msp_cpts...

Parameters* required
categoriestring
Famille FINESS recherchée (24 valeurs disponibles, voir enum).one of mco · ssr · sld · had · psychiatrie · dialyse
code_inseestring
Code INSEE de commune (5 caractères). Optionnel. XOR strict avec `departement` et `nom_commune`.
departementstring
Code département INSEE (ex: '75', '2A', '2B', '971'). Métropole 2 caractères (Corse '2A'/'2B', pas '20'), DOM/TOM 3 caractères. Optionnel. Combinable avec `nom_commune` comme hint resolver (filtre...
include_freshnessboolean
Si true, ajoute un champ `data_freshness` au payload (dans `query_metadata` si présent, sinon à la racine) listant la dernière ingestion réussie par source (FINESS, Ameli, RPPS, CDS) avec `stalenes...default: false
limitnumber
Nombre max de résultats (1-500, défaut 100).default: 100
nom_communestring
Nom officiel de commune (alternative à `code_insee`, V0.19). Ex: "Lille", "Saint-Étienne". Le serveur résout en interne via geo.api.gouv.fr. Si ambigu (ex "Saint-Martin" → 5 villes), retourne une e...
etablissement_by_finessRécupère le détail complet d'un établissement de santé par son numéro FINESS (9 chiffres) : raison sociale, catégorie + famille, adresse complète (voie + CP + ville + code INSEE + département), coordonnées GPS, téléphone. Retourne un objet `LookupResult` discriminé par `found`...2 params

Récupère le détail complet d'un établissement de santé par son numéro FINESS (9 chiffres) : raison sociale, catégorie + famille, adresse complète (voie + CP + ville + code INSEE + département), coordonnées GPS, téléphone. Retourne un objet `LookupResult` discriminé par `found`...

Parameters* required
include_freshnessboolean
Si true, ajoute un champ `data_freshness` au payload (dans `query_metadata` si présent, sinon à la racine) listant la dernière ingestion réussie par source (FINESS, Ameli, RPPS, CDS) avec `stalenes...default: false
num_finessstring
Numéro FINESS exact (9 chiffres).
centres_sante_in_radiusRecherche des Centres de Santé (CDS) dans un rayon géographique (PostGIS ST_DWithin). Source : Annuaire santé Ameli, Assurance Maladie (mention obligatoire L.1461-2 CSP — sync hebdomadaire CNAM). Différenciateur métier vs `etablissements_finess_in_radius` filtré famille=124 :...8 params

Recherche des Centres de Santé (CDS) dans un rayon géographique (PostGIS ST_DWithin). Source : Annuaire santé Ameli, Assurance Maladie (mention obligatoire L.1461-2 CSP — sync hebdomadaire CNAM). Différenciateur métier vs `etablissements_finess_in_radius` filtré famille=124 :...

Parameters* required
accepte_carte_vitaleboolean
Filtre par acceptation carte Vitale. true = uniquement CDS qui acceptent CV, false = uniquement ceux qui ne l'acceptent pas. Omis = pas de filtre.
include_freshnessboolean
Si true, ajoute un champ `data_freshness` au payload (dans `query_metadata` si présent, sinon à la racine) listant la dernière ingestion réussie par source (FINESS, Ameli, RPPS, CDS) avec `stalenes...default: false
latnumber
Latitude du centre (WGS84). Ex: 48.872 (Paris).
limitnumber
Nombre max de résultats (1-500, défaut 100).default: 100
lonnumber
Longitude du centre (WGS84). Ex: 2.317 (Paris).
radius_kmnumber
Rayon en km (0.1-50, défaut 5).default: 5
specialite_codesarray
Codes spécialité CNAM Annexe A (ex: ['01'] médecine générale, ['53'] chirurgien-dentiste). Match any-of. Vide = pas de filtre spécialité.
type_etab_codesarray
Codes type établissement Annexe B : ['124'] CDS standard (défaut implicite), ['125'] CDS dentaire deprecated. Vide = tous types.
centres_sante_by_finessRécupère le détail d'un Centre de Santé (CDS) par son numéro FINESS. Différenciateur métier vs `etablissement_by_finess` : expose **carte_vitale**, **APCV**, et **spécialités exercées sur place** (Annexe A CNAM). Retourne un `LookupResult` discriminé par `found`. `found: true`...2 params

Récupère le détail d'un Centre de Santé (CDS) par son numéro FINESS. Différenciateur métier vs `etablissement_by_finess` : expose **carte_vitale**, **APCV**, et **spécialités exercées sur place** (Annexe A CNAM). Retourne un `LookupResult` discriminé par `found`. `found: true`...

Parameters* required
include_freshnessboolean
Si true, ajoute un champ `data_freshness` au payload (dans `query_metadata` si présent, sinon à la racine) listant la dernière ingestion réussie par source (FINESS, Ameli, RPPS, CDS) avec `stalenes...default: false
num_finessstring
Numéro FINESS exact 9 chiffres. Ex: '750000123'.
professionnels_in_radiusRecherche de professionnels de santé libéraux conventionnés dans un rayon géographique. Précision géo HYBRIDE depuis le géocodage BAN (Chantier C) : ~77 % des PS sont géolocalisés à l'adresse précise (rue/bâtiment, `distance_km` exacte au m près), ~23 % restent au centroïde co...9 params

Recherche de professionnels de santé libéraux conventionnés dans un rayon géographique. Précision géo HYBRIDE depuis le géocodage BAN (Chantier C) : ~77 % des PS sont géolocalisés à l'adresse précise (rue/bâtiment, `distance_km` exacte au m près), ~23 % restent au centroïde co...

Parameters* required
dedupe_by_psboolean
Regrouper les entrées par praticien (nom + prénom + code spécialité) et lister chaque adresse d'exercice dans `sites[]`. Défaut false (comportement V0.4 historique : un PS multi-sites = N entrées).default: false
include_freshnessboolean
Si true, ajoute un champ `data_freshness` au payload (dans `query_metadata` si présent, sinon à la racine) listant la dernière ingestion réussie par source (FINESS, Ameli, RPPS, CDS) avec `stalenes...default: false
latnumber
Latitude du centre (WGS84).
limitnumber
Nombre max de résultats (1-500, défaut 100). Appliqué AVANT déduplication.default: 100
lonnumber
Longitude du centre (WGS84).
precise_onlyboolean
Si true, exclut les PS au centroïde commune et ne renvoie que ceux géocodés à l'adresse BAN, à `distance_km` exacte (cf. description du tool pour la sémantique complète). Défaut false.default: false
radius_kmnumber
Rayon en km (0.1-50, défaut 5).default: 5
specialite_codesarray
Liste de codes spécialité Ameli (ex: ['01'] MG, ['03'] cardio). Si omis, toutes spécialités.
type_ps_codesarray
Liste de codes type PS Ameli (3 valeurs présentes en base : '1' médecins, '2' auxiliaires médicaux fourre-tout — IDE/kinés/sages-femmes/podologues/orthophonistes/orthoptistes/IPA, '5' chirurgiens-d...
professionnels_par_specialite_deptListe des professionnels de santé libéraux conventionnés d'un département, avec filtres optionnels par spécialité ou type de PS. Pour énumération administrative — pas de rayon. Codes type_ps Ameli présents en base (3) : '1' médecins, '2' auxiliaires médicaux (fourre-tout : IDE...7 params

Liste des professionnels de santé libéraux conventionnés d'un département, avec filtres optionnels par spécialité ou type de PS. Pour énumération administrative — pas de rayon. Codes type_ps Ameli présents en base (3) : '1' médecins, '2' auxiliaires médicaux (fourre-tout : IDE...

Parameters* required
dedupe_by_psboolean
Regrouper les entrées par praticien (nom + prénom + code spécialité) et lister chaque adresse d'exercice dans `sites[]`. Défaut false.default: false
departementstring
Code département INSEE : 2 caractères métropole/Corse ('01'-'95', '2A'/'2B'), 3 caractères DOM ('971'-'978').
include_freshnessboolean
Si true, ajoute un champ `data_freshness` au payload (dans `query_metadata` si présent, sinon à la racine) listant la dernière ingestion réussie par source (FINESS, Ameli, RPPS, CDS) avec `stalenes...default: false
limitnumber
Nombre max de résultats (1-500, défaut 100). Appliqué AVANT déduplication.default: 100
offsetnumber
Décalage de pagination (≥ 0, défaut 0). Combiner avec `limit` pour énumérer un département à fort effectif. Re-paginer tant que `truncated=true`.default: 0
specialite_codestring
Code spécialité Ameli (ex: '01' MG, '24' IDE, '26' kiné, '03' cardio). Optionnel. Liste complète via `lister_nomenclature(referentiel:'ameli_specialites')`.
type_ps_codestring
Code type PS Ameli ('1' médecins, '2' auxiliaires médicaux, '5' chirurgiens-dentistes). Optionnel — préférer `specialite_code` pour un ciblage précis. Liste complète via `lister_nomenclature(refere...
lister_nomenclatureDécouverte des nomenclatures de codes du serveur (tool unique paramétré par `referentiel`) — à appeler avant de filtrer un autre tool plutôt que deviner les codes. ⚠️ Les 3 nomenclatures sont DISTINCTES : un même nombre y désigne des choses différentes (ex '10' = Médecin côté...5 params

Découverte des nomenclatures de codes du serveur (tool unique paramétré par `referentiel`) — à appeler avant de filtrer un autre tool plutôt que deviner les codes. ⚠️ Les 3 nomenclatures sont DISTINCTES : un même nombre y désigne des choses différentes (ex '10' = Médecin côté...

Parameters* required
include_freshnessboolean
Si true, ajoute un champ `data_freshness` au payload (dans `query_metadata` si présent, sinon à la racine) listant la dernière ingestion réussie par source (FINESS, Ameli, RPPS, CDS) avec `stalenes...default: false
include_specialitesboolean
Référentiel `ameli_types_ps` UNIQUEMENT : inclure le sous-tableau `specialites_presentes` détaillé (défaut true). `false` → remplacé par `nb_specialites` (compteur), ~6K tokens économisés.default: true
limitnumber
Nombre max de résultats (défaut 50, max 1000). Triés par fréquence décroissante. La réponse expose `total` (effectif réel) et `truncated` — re-appeler avec un `limit` supérieur pour la liste complète.
profession_codestring
Référentiel `rpps_savoir_faire` UNIQUEMENT : code profession ANS (TRE_R94). Défaut '10' (Médecin). String vide ou 'null' = tous savoir_faire, toutes professions.
referentielstring
Nomenclature à lister. `ameli_specialites` / `ameli_types_ps` = Ameli (libéraux conventionnés) ; `rpps_savoir_faire` = spécialités médicales ANS/RPPS (nomenclature DISTINCTE).one of ameli_specialites · ameli_types_ps · rpps_savoir_faire
professionnels_rpps_in_radiusTrouve les PS dans un rayon via RPPS (Annuaire Santé ANS — **tous statuts** : libéraux + salariés + mixtes + remplaçants ; vs `professionnels_in_radius` Ameli = libéraux conventionnés seuls). **Param critique `precise_only`** — Défaut `false` (mode hybride). À `true` : ne renv...10 params

Trouve les PS dans un rayon via RPPS (Annuaire Santé ANS — **tous statuts** : libéraux + salariés + mixtes + remplaçants ; vs `professionnels_in_radius` Ameli = libéraux conventionnés seuls). **Param critique `precise_only`** — Défaut `false` (mode hybride). À `true` : ne renv...

Parameters* required
centerobject
Centre du cercle de recherche (coordonnées WGS84).
include_agents_publicsboolean
include_etudiantsboolean
include_freshnessboolean
Si true, ajoute un champ `data_freshness` au payload (dans `query_metadata` si présent, sinon à la racine) listant la dernière ingestion réussie par source (FINESS, Ameli, RPPS, CDS) avec `stalenes...default: false
limitnumber
Nombre max de résultats retournés (défaut serveur 100).
mode_exercice_codesarray
Codes mode d'exercice ANS (libéral / salarié / mixte). Si omis, tous modes.
precise_onlyboolean
Si true, exclut les PS au centroïde commune et ne renvoie que ceux à `distance_km` exacte (cf. description du tool pour la sémantique complète et le seuil d'usage recommandé). Défaut false.default: false
profession_codesarray
Codes profession ANS (ex: ['10'] Médecin, ['60'] Infirmier). Si omis, toutes professions.
radius_kmnumber
Rayon en km (0.1-50).
savoir_faire_codesarray
Codes savoir-faire ANS (spécialités fines DES/DESC). Si omis, tous savoir-faire.
professionnels_rpps_par_deptListe tous les PS d'un département via RPPS (libéraux + salariés). Pour les libéraux conventionnés uniquement, préférer `professionnels_par_specialite_dept` (Ameli). Re-paginer via `offset` tant que `truncated=true`. Chaque résultat géolocalisé porte `geo_precision` ∈ {`"adres...9 params

Liste tous les PS d'un département via RPPS (libéraux + salariés). Pour les libéraux conventionnés uniquement, préférer `professionnels_par_specialite_dept` (Ameli). Re-paginer via `offset` tant que `truncated=true`. Chaque résultat géolocalisé porte `geo_precision` ∈ {`"adres...

Parameters* required
departementstring
Code département INSEE (ex: '75', '2A', '2B', '971'). Métropole 2 caractères (Corse '2A'/'2B', pas '20'), DOM/TOM 3 caractères.
include_agents_publicsboolean
include_etudiantsboolean
include_freshnessboolean
Si true, ajoute un champ `data_freshness` au payload (dans `query_metadata` si présent, sinon à la racine) listant la dernière ingestion réussie par source (FINESS, Ameli, RPPS, CDS) avec `stalenes...default: false
limitnumber
Nombre max de résultats par page (défaut serveur 100).
mode_exercice_codestring
Code mode d'exercice ANS (libéral / salarié / mixte). Optionnel.
offsetnumber
Offset pour pagination (défaut 0). Re-paginer tant que `truncated=true`.
profession_codestring
Code profession ANS (ex: '10' Médecin, '60' Infirmier). Optionnel.
savoir_faire_codestring
Code savoir-faire ANS (spécialité fine DES/DESC). Optionnel.
rpps_dans_etablissementListe les PS rattachés à un établissement FINESS (`num_finess` 9 chiffres). Pivot RPPS↔FINESS — répond à "qui travaille dans ce labo / hôpital / clinique ?". Le `mode_exercice` distingue les libéraux exerçant sur place (vacations) des salariés. Couverture : RPPS expose ce lien...5 params

Liste les PS rattachés à un établissement FINESS (`num_finess` 9 chiffres). Pivot RPPS↔FINESS — répond à "qui travaille dans ce labo / hôpital / clinique ?". Le `mode_exercice` distingue les libéraux exerçant sur place (vacations) des salariés. Couverture : RPPS expose ce lien...

Parameters* required
include_agents_publicsboolean
include_etudiantsboolean
include_freshnessboolean
Si true, ajoute un champ `data_freshness` au payload (dans `query_metadata` si présent, sinon à la racine) listant la dernière ingestion réussie par source (FINESS, Ameli, RPPS, CDS) avec `stalenes...default: false
limitnumber
num_finessstring
densite_santeDensité de santé pour 100 000 habitants — `cible: professionnels` (RPPS) OU `cible: etablissements` (FINESS). Niveau **département** (`code_dept`) OU **commune** (`code_insee` / `nom_commune`). Exactement un scope des trois requis. Croise le count (RPPS ou FINESS) et INSEE Mel...11 params

Densité de santé pour 100 000 habitants — `cible: professionnels` (RPPS) OU `cible: etablissements` (FINESS). Niveau **département** (`code_dept`) OU **commune** (`code_insee` / `nom_commune`). Exactement un scope des trois requis. Croise le count (RPPS ou FINESS) et INSEE Mel...

Parameters* required
ciblestring
`professionnels` = densité de PS (RPPS, filtres profession_code/savoir_faire_code/mode_exercice_codes) ; `etablissements` = densité d'établissements (FINESS, `famille` obligatoire).one of professionnels · etablissements
code_deptstring
Code INSEE du département 2-3 caractères. Ex: "75" Paris, "59" Nord, "2A" Corse-du-Sud, "971" Guadeloupe. Sémantique conditionnelle : seul = scope dept entier ; combiné avec `nom_commune` = hint re...
code_inseestring
Code INSEE de la commune 5 caractères. Ex: "59009" Villeneuve-d'Ascq, "33063" Bordeaux, "2A004" Ajaccio. Paris/Lyon/Marseille NON supporté au niveau commune (densité indisponible — voir description...
compare_nationalboolean
Ajoute le calcul France entière + écart relatif en % (recommandé pour qualifier 'sous-doté'/'sur-doté').default: false
famillestring
cible='etablissements' UNIQUEMENT (obligatoire) : famille FINESS à compter (labo, pharmacie, ehpad, mco, ssr, psychiatrie, dialyse, imagerie, had, msp_cpts, handicap_enfants, handicap_adultes, addi...
include_agents_publicsboolean
include_etudiantsboolean
mode_exercice_codesarray
cible='professionnels' UNIQUEMENT : codes mode_exercice ANS à inclure. Default ['L','S','M'] (libéral + salarié + mixte = activité régulière DREES). Passer ['L'] pour libéraux seuls. Codes mode_exe...
nom_communestring
Nom officiel de commune (alternative à `code_insee`). Ex: "Lille", "Villeneuve-d'Ascq". Le serveur résout en interne via geo.api.gouv.fr. Combinable avec `code_dept` comme hint de désambiguïsation...
profession_codestring
cible='professionnels' UNIQUEMENT : code profession ANS (TRE_R94). Default '10' (Médecin). Ex : '60' Infirmier, '21' Pharmacien, '50' Sage-femme, '40' Chirurgien-dentiste, '70' Masseur-kinésithérap...
savoir_faire_codestring
cible='professionnels' UNIQUEMENT : code spécialité (savoir_faire). Pertinent surtout pour profession_code=10 (médecin). Ex : 'SM04' Cardiologie, 'SM15' Dermatologie et vénéréologie, 'SM02' Anesthé...
panorama_sante_territoirePanorama santé d'une commune française en 1 appel (V0.9). Agrège en parallèle : population (INSEE Melodi), densités médecins + infirmiers + pharmaciens avec comparaison nationale (méthodo DREES), nombre d'établissements FINESS par famille (default ["labo","pharmacie","ehpad","...4 params

Panorama santé d'une commune française en 1 appel (V0.9). Agrège en parallèle : population (INSEE Melodi), densités médecins + infirmiers + pharmaciens avec comparaison nationale (méthodo DREES), nombre d'établissements FINESS par famille (default ["labo","pharmacie","ehpad","...

Parameters* required
code_inseestring
Code INSEE de la commune 5 caractères. Ex: "59009" Villeneuve-d'Ascq, "33063" Bordeaux, "2A004" Ajaccio. Paris/Lyon/Marseille NON supporté (voir description). XOR avec `nom_commune`.
departementstring
Code département INSEE (V0.19, hint resolver UNIQUEMENT). À utiliser EN COMBINAISON avec `nom_commune` pour désambiguer les homonymes. Seul, lève une erreur (panorama = calcul commune uniquement, u...
finess_famillesarray
Familles FINESS à inclure dans le décompte établissements. Default ["labo","pharmacie","ehpad","mco","msp_cpts"]. Passer [] pour omettre le décompte FINESS (renvoie uniquement population + densités...
nom_communestring
Nom officiel de commune (alternative à `code_insee`, V0.19). Ex: "Lille", "Saint-Étienne". Combinable avec `departement` comme hint de désambiguïsation pour homonymes (ex "Saint-Martin" + dept "65"...
inspect_siteVue 360 d'un établissement de santé en 1 appel (V0.10). Pendant naturel de `panorama_sante_territoire` côté **site** : agrège en parallèle (a) identification FINESS DREES (raison sociale, adresse, téléphone), (b) statut administratif SIRENE via le resolver SIRET (verdicts site...3 params

Vue 360 d'un établissement de santé en 1 appel (V0.10). Pendant naturel de `panorama_sante_territoire` côté **site** : agrège en parallèle (a) identification FINESS DREES (raison sociale, adresse, téléphone), (b) statut administratif SIRENE via le resolver SIRET (verdicts site...

Parameters* required
historique_detailboolean
Inclure les timelines SIRENE détaillées dans `historique.siret_timelines` (défaut true). `false` = payload allégé (~7K tokens en moins) : `historique` ne porte qu'un `resume` (counts) + un pointeur...default: true
num_finessstring
Numéro FINESS exact 9 chiffres. Ex: '590048997'.
rpps_limitinteger
Nombre max de PS dans `professionnels.sample`. `professionnels.count` = taille du sample (≤ cette borne), pas le total du site ; `truncated: true` signale qu'il y a davantage de PS. Borné [1, 50]....
rpps_search_by_nameTrouve un PS par identité (matching trigram tolérant aux accents/typos). Usage : "Dr Martin à Paris" → `nom: "Martin", departement: "75"`. Nom obligatoire ; `prenom` et `departement` affinent. Tri par `match_score` ∈ [0..1] décroissant (score trigram pg_trgm). Un score <0.5 =...7 params

Trouve un PS par identité (matching trigram tolérant aux accents/typos). Usage : "Dr Martin à Paris" → `nom: "Martin", departement: "75"`. Nom obligatoire ; `prenom` et `departement` affinent. Tri par `match_score` ∈ [0..1] décroissant (score trigram pg_trgm). Un score <0.5 =...

Parameters* required
departementstring
Code département INSEE (ex: '75', '2A', '2B', '971'). Métropole 2 caractères (Corse '2A'/'2B', pas '20'), DOM/COM 3 caractères.
include_agents_publicsboolean
include_etudiantsboolean
include_freshnessboolean
Si true, ajoute un champ `data_freshness` au payload (dans `query_metadata` si présent, sinon à la racine) listant la dernière ingestion réussie par source (FINESS, Ameli, RPPS, CDS) avec `stalenes...default: false
limitnumber
Nombre max de résultats (1-500, défaut 100).default: 100
nomstring
Nom de famille (non vide).
prenomstring
Prénom du PS.
professionnel_by_rppsRécupère la fiche complète d'un PS par identifiant national (`rpps_id` / IDNPS, 11 ou 12 chiffres — IDs émis depuis 2020 ont un préfixe `"81"` = 12 chars ; anciens IDs = 11 chars). Renvoie N entrées quand le PS exerce sur plusieurs sites (1 par site, chacun avec sa propre `geo...2 params

Récupère la fiche complète d'un PS par identifiant national (`rpps_id` / IDNPS, 11 ou 12 chiffres — IDs émis depuis 2020 ont un préfixe `"81"` = 12 chars ; anciens IDs = 11 chars). Renvoie N entrées quand le PS exerce sur plusieurs sites (1 par site, chacun avec sa propre `geo...

Parameters* required
include_freshnessboolean
Si true, ajoute un champ `data_freshness` au payload (dans `query_metadata` si présent, sinon à la racine) listant la dernière ingestion réussie par source (FINESS, Ameli, RPPS, CDS) avec `stalenes...default: false
rpps_idstring
finess_sirene_coverage_in_radiusCompare la couverture du référentiel FINESS DREES (sites physiques agréés LBM/pharmacie/etc.) au référentiel SIRENE DINUM (SIRET physiques actifs au NAF cible) dans un rayon géographique. Métrique : ratio sites FINESS / SIRET SIRENE. Utile pour détecter une sur-déclaration FIN...6 params

Compare la couverture du référentiel FINESS DREES (sites physiques agréés LBM/pharmacie/etc.) au référentiel SIRENE DINUM (SIRET physiques actifs au NAF cible) dans un rayon géographique. Métrique : ratio sites FINESS / SIRET SIRENE. Utile pour détecter une sur-déclaration FIN...

Parameters* required
famillesarray
Familles FINESS à inclure côté DREES. V0.13.2 : si omis, auto-dérivé du NAF cible via la table naf-finess-mapping (ex: naf=8690B → familles=[labo] ; naf=8610Z → multi-familles hospitalières). Passe...
latnumber
Latitude WGS84 du centre de la zone.
lonnumber
Longitude WGS84 du centre de la zone.
max_unites_legalesnumber
Nombre maximum d'unités légales DINUM à déplier (1-25, défaut 10). Au-delà : truncated_unites_legales=true.default: 10
nafstring
Code NAF SIRENE à comparer (ex: '8690B' labos d'analyses médicales, '4773Z' pharmacies, '8621Z' médecine générale).
radius_kmnumber
Rayon de la zone en km (0.1-50, défaut 5).default: 5
panorama_implantation_completÉtude d'implantation labo en 1 appel (V0.23). Géocode l'adresse cible puis agrège EN PARALLÈLE 7 sections : `territoire` (densités PS commune vs national + établissements), `demande` (profil démographique du BASSIN — rayon — via profil_iris : âge, CSP, revenu pondéré), `concur...4 params

Étude d'implantation labo en 1 appel (V0.23). Géocode l'adresse cible puis agrège EN PARALLÈLE 7 sections : `territoire` (densités PS commune vs national + établissements), `demande` (profil démographique du BASSIN — rayon — via profil_iris : âge, CSP, revenu pondéré), `concur...

Parameters* required
adressestring
Adresse cible, géocodée en interne via IGN. Ex: "12 rue Nationale, Lille". XOR avec `point`.
code_inseestring
Code INSEE commune (avec `point`, quand le géocodage est déjà fait).
pointobject
Coordonnées { lat, lon } si déjà connues (skip géocodage). Fournir `code_insee` avec.
rayon_kmnumber
Rayon du bassin de l'étude (km). Défaut 5.
enrichir_concurrentsEnquête approfondie sur le top concurrents (V0.23). Pour chaque FINESS : statut actif + taille d'équipe + historique récent (inspect_site), signal M&A — rebranding en cours — (compare raison sociale FINESS vs RPPS), groupe parent (entreprise_by_siren : Biogroup/Cerballiance/…...2 params

Enquête approfondie sur le top concurrents (V0.23). Pour chaque FINESS : statut actif + taille d'équipe + historique récent (inspect_site), signal M&A — rebranding en cours — (compare raison sociale FINESS vs RPPS), groupe parent (entreprise_by_siren : Biogroup/Cerballiance/…...

Parameters* required
finessarray
Numéros FINESS à enquêter (typiquement le top 3 concurrents par distance).
maxnumber
Cap dur du nombre de concurrents enquêtés. Défaut 3.

france-data-mcp

MCP TypeScript qui croise et réconcilie 13 référentiels publics français (INSEE SIRENE, IRIS & Melodi, FINESS DREES, RPPS / Annuaire Santé ANS, Annuaire Santé Ameli, Centres de Santé CNAM, DVF / DGFiP, Sit@del / SDES, PLU via apicarto, IGN Géoplateforme, geo.api.gouv.fr & Recherche Entreprises DINUM). Détecte les SIRET fermés invisibles côté DREES, distingue site vs groupe, croise l'offre de soins avec la démographie au quartier, évalue le potentiel immobilier d'un site (prix DVF €/m², permis de construire, zones AU du PLU), expose la fraîcheur de chaque source.

License: MIT CI MCP npm smithery badge

🇫🇷 Documentation principale en français. English version →


Installation

Option 1 — URL distante (claude.ai, Claude Code, Cursor)

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

ClientConfig
claude.aiSettings → Connectors → Add custom connector → URL ci-dessus
Claude Code~/.claude.json → mcpServers → { "type": "http", "url": "..." }
Cursor~/.cursor/mcp.json → même configuration

Option 2 — Wrapper npm stdio (Claude Desktop natif, autres clients)

{
  "mcpServers": {
    "france-data": {
      "command": "npx",
      "args": ["-y", "france-data-mcp"]
    }
  }
}

Le wrapper forwarde stdio → endpoint HTTPS distant. Aucune DB locale à provisionner. Override possible : FRANCE_DATA_MCP_URL=https://mon-miroir.example/mcp.

Détails par client + self-hosting : docs/installation-claude.md.


Pourquoi ce projet

Les APIs officielles (INSEE, FINESS DREES, RPPS ANS, Annuaire Ameli, Centres de Santé CNAM, IGN, DINUM) existent mais sont éclatées, sous-documentées et pleines de pièges : rate limits, formats CSV propriétaires, latence DREES de 1-2 mois, diffusion partielle INSEE, mappings inconsistants Ameli ↔ RPPS.

france-data-mcp est le premier MCP qui croise factuellement ces sources pour répondre à des questions concrètes — cartographie d'offre de soins, étude de marché territoriale, journalisme local, civic-tech.


Périmètre — 13 sources publiques croisées

  • 🗺️ Territoire (2) : geo.api.gouv.fr (DINUM, communes), IGN Géoplateforme (géocodage)
  • 🏥 Santé (3) : FINESS / DREES (~95 K établissements), Annuaire Santé Ameli (~462 K libéraux), RPPS / ANS (~2,2 M PS actifs)
  • 🩺 Centres de Santé (1) : Annuaire santé CNAM (~3 K structures L.6323-1 CSP, sync hebdomadaire)
  • 📊 Démographie infracommunale (2) : INSEE IRIS (~48,6 K quartiers — RP 2022, FILOSOFI 2021 revenu, contours IGN) + INSEE Melodi (population de référence)
  • 🏢 Entreprises (2) : DINUM Recherche Entreprises + INSEE SIRENE V3.11
  • 🏗️ Immobilier (3) : ventes foncières DVF / DGFiP (€/m², cache paresseux PostGIS), permis de construire Sit@del via API DiDo / SDES (live), zones AU du PLU via apicarto / IGN (live)

Cross-source : réconciliation FINESS ↔ RPPS ↔ SIRENE pour détecter SIRET fermés, rebrandings, raisons sociales périmées.


Outils MCP (36 tools)

🗺️ Territoire (4)

autocomplete_commune · get_commune_by_code · geocode_adresse · reverse_geocode

🏢 Entreprises (3)

entreprises_in_radius · entreprise_by_siren (+ fallback INSEE SIRENE V3.11) · etablissement_by_siret

🏥 Établissements santé FINESS (3)

etablissements_finess_in_radius · etablissements_finess_by_categorie · etablissement_by_finess

24 familles couvrant ~92 % du volume. Source DREES rafraîchie bimestriellement.

👨‍⚕️ Professionnels libéraux Ameli (2)

professionnels_in_radius · professionnels_par_specialite_dept

Libéraux conventionnés uniquement (~462 K). Découverte des codes spécialité/type_ps : lister_nomenclature (voir ci-dessous).

🩺 Tous les PS — RPPS / Annuaire Santé ANS (5)

professionnels_rpps_in_radius · professionnels_rpps_par_dept · rpps_dans_etablissement · rpps_search_by_name (fuzzy) · professionnel_by_rpps (+ fallback FHIR ANS)

~2,2 M PS actifs (libéraux + salariés privés + hospitaliers contractuels + agents publics). Par défaut : Civils uniquement.

🩺 Centres de Santé — Annuaire CNAM (2)

centres_sante_in_radius · centres_sante_by_finess

Structures de soins ambulatoires non lucratives (L.6323-1 CSP, ~3 K). Différenciateur vs FINESS famille=124 : expose carte Vitale, APCV et spécialités exercées sur place (Annexe A CNAM, ~70 codes). Coords = centroïde commune. Sync hebdomadaire.

📊 Démographie & densités — INSEE Melodi + IRIS (3)

Population de référence INSEE croisée avec RPPS / FINESS — méthodologie DREES (ratios pour 100 k hab.). Maille IRIS (quartier, ~48,6K zones) pour la DEMANDE, à croiser avec l'offre de soins.

population (IRIS 9 car., commune 5 car. ou département 2-3 car. — granularité auto-détectée par la longueur du code) · densite_sante (cible: professionnels RPPS ou etablissements FINESS — labos, pharmacies, EHPAD, hôpitaux ; + comparaison nationale matview <50 ms) · profil_iris (point ou code_iris, rayon_km?) — profil démo d'un îlot ou d'un bassin (âge, CSP, familles, revenu) au RP 2022 + FILOSOFI 2021

🔎 Découverte des nomenclatures (1)

lister_nomenclature (referentiel: ameli_specialites | ameli_types_ps | rpps_savoir_faire) — codes spécialité/type_ps Ameli et savoir_faire RPPS dans un seul tool (remplace les 3 anciens lister_*).

🧭 Agrégateurs & études composites (4)

  • panorama_sante_territoire (V0.9) — 1 call : population + densités médecins/infirmiers/pharmaciens vs national + count FINESS par famille (labo, pharmacie, EHPAD, MCO, MSP/CPTS) + bloc demande IRIS (profil démo commune : âge, CSP, familles, revenu). Granularité explicite (niveau: commune, niveauEtablissements: departement | indisponible).
  • inspect_site (V0.10) — vue 360 d'un établissement en 1 call : identification FINESS + statut administratif SIRENE (resolver SIRET) + PS rattachés + historique INSEE.
  • panorama_implantation_complet (V0.23) — étude d'implantation labo en 1 call : 7 sections (territoire, demande IRIS du bassin, concurrents, pourvoyeurs MCO/EHPAD/SSR, prescripteurs RPPS+IDEL, centres de santé, qualité référentiels). Résumés, jamais de listes brutes ; dégradation par section.
  • enrichir_concurrents (V0.23) — enquête sur le top concurrents (statut actif + équipe + signal M&A + groupe parent), cap dur max=3.

🏗️ Immobilier — potentiel d'un site (2)

dynamique_immobiliere (V0.26) — composite en 1 call : permis de construire (Sit@del / DiDo SDES, live) + zones AU du PLU (apicarto / IGN, live) + ventes de terrains DVF. Sortie 2 registres : note (volume → scoring) / info (quartiers AU + prix → contexte) ; geojson = polygones des zones AU. · cout_foncier (V0.26) — prix médian €/m² DVF (P25/P75, n_ventes, période), info seule.

Source DVF / DGFiP (cache paresseux PostGIS, anon lit / service écrit). Permis et zones AU = live (pas d'ingestion). Pensé pour les rapports d'implantation.

🔀 Croisement multi-source (7)

Réconciliation FINESS ↔ RPPS ↔ SIRENE ↔ CNAM — faits bruts sans interprétation métier.

data_freshness · verifier_site_actif · compare_raison_sociale_finess_vs_rpps · compare_adresse_cnam_vs_finess · historique_etablissement · reconcilier_finess_sirene · finess_sirene_coverage_in_radius


Garde-fous publics

  • Rate limit : 60 req/min par IP sur tools/call (les méthodes meta restent libres). Au-delà : erreur -32000 avec data.retryAfterSeconds.
  • Logs JSON structurés par requête : ts, method, tool, ip_hash (SHA-256 salé), duration_ms, outcome. Aucune IP en clair, aucun argument tool persisté.
  • Sentry error monitoring sur les 500 internes (tags mcp.method, mcp.tool, mcp.outcome).
  • RGPD : rétention 30j sur Axiom, hash IP salé, droits d'accès / effacement. Politique complète dans PRIVACY.md.

Usage intensif : throttler côté client ou self-héberger.


État du projet

✅ V0.26.2 — en production. Sur le registry MCP officiel. Détail : CHANGELOG.

Dernier patch (V0.26.2) : un point sans adresse proche (site industriel isolé / littoral, ex. Orano La Hague) est désormais rattaché à sa commune par ses frontières (point-dans-polygone), ce qui restaure les permis Sit@del (dynamique_immobiliere) et la couverture FINESS↔SIRENE (finess_sirene_coverage_in_radius) sur ces sites. Surface inchangée (13 référentiels / 36 outils).

Roadmap

  • V1.0+ : DOM-COM (IRIS + santé), DPC.

Historique des versions livrées : CHANGELOG.


Contribuer

Ouvrir une issue pour discuter avant d'envoyer une PR.


Licence

MIT — voir LICENSE. Les données restent sous leurs licences respectives :

SourceLicenceMention obligatoire
FINESSLicence Ouverte (Etalab)« Source : FINESS, ANS/DREES »
Annuaire Santé AmeliArt. L.1461-2 CSP« Source : Annuaire santé Ameli, Assurance Maladie »
DINUM Recherche EntreprisesLicence Ouverte« Source : Annuaire des Entreprises, DINUM »
INSEELicence Ouverte« Source : Insee »
IGN Géoplateforme / apicartoLicence Ouverte« © IGN/Géoplateforme », « GPU — apicarto IGN »
geo.api.gouv.frLicence Ouverte« Source : geo.api.gouv.fr (Etalab) »
DVF (Demandes de Valeurs Foncières)Licence Ouverte« Source : DVF, DGFiP / Etalab »
Sit@del (permis de construire)Licence Ouverte« Source : Sit@del, SDES (API DiDo) »

Remerciements

DINUM, Etalab, Atlasanté, ANS, INSEE, IGN pour la qualité de leurs APIs. data.gouv.fr pour l'animation civic-tech. Anthropic pour le protocole MCP.

Featured
CodeRabbit
CodeRabbit
AI writes the code. CodeRabbit catches the slop.
Try For Free →
MCP-ready Email SendingMCP-ready Email Sending
MCP-ready Email Sending
Plug Mailtrap into your AI workflow and let it handle the email.
Connect Mailtrap MCP →
Make your agent a DeFi expert
Make your agent a DeFi expert
Agent, run crypto. Access onchain data & trade routes via 1inch.
Install now →
Capacitor - Shared memory for your team’s coding agents.
Capacitor - Shared memory for your team’s coding agents.
Make coding agent sessions - Searchable, Shareable, Vendor-neutral & Scored.
Try For Free →
CodeScene MCP ServerCodeScene MCP Server
CodeScene MCP Server
Your agent targets a perfect 10 Code Health score. Deterministic. Every commit.
Try For Free →
Give your AI the whole web as clean markdownGive your AI the whole web as clean markdown
Give your AI the whole web as clean markdown
Integrate web data into your AI product. One API to scrape website & brand data.
Get API Key Now →
belt - the only tool your agent needs
belt - the only tool your agent needs
belt cli automatically finds the best tools and skills for your agent. image, video, music, tts...
one prompt install →
inference shell
inference shell
create and run specialised agents in minutes
build now →
Categories
Data & Analytics
Registryactive
Packagefrance-data-mcp
TransportSTDIO, HTTP
UpdatedJun 7, 2026
View on GitHub

More from cturkieh

  • france-data

Related Data & Analytics MCP Servers

View all →
dsbissett avatar
Excel Webview2 Mcp

dsbissett/excel-webview2-mcp

MCP server for Excel add-ins via WebView2 CDP
2
chetparker avatar
UK Data API

io.github.chetparker/uk-data-api

24 UK data endpoints — property, weather, companies, vehicles, finance. Paid via x402.
2
vdappdev2 avatar
Data

io.github.vdappdev2/data

MCP server for Verus on-chain data retrieval, decryption, signing, and verification
2
izyuusya avatar
Japan Data Mcp

izyuusya/japan-data-mcp

日本の公的データ(統計・法人・不動産)にAIからアクセスするMCPサーバー。e-Stat統計API・法人番号Web-API・不動産情報ライブラリAPIの3API統合。全国約1,700市区町村対応。
2
xmpuspus avatar
PH Civic Data

xmpuspus/ph-civic-data-mcp

PH civic data + auto-stitched area profiles (PSGC, PSA economy, infra, hazards). 29 tools.
2
microsoft avatar
Microsoft Sentinel Data Exploration

com.microsoft/sentinel-data-exploration

Find relevant security data from Sentinel data lake for building effective agents. More:aka.ms/s/de
1