Qdonnars/MCP_data_foncier
0
1"""2MCP Server CEREMA — Données foncières et friches pour la transition écologique.3 4Point d'entrée Gradio exposant les tools MCP pour Sofia V2.5Les données (DV3F + Cartofriches) sont chargées en mémoire au démarrage.6Les friches sont pré-agrégées à toutes les mailles (commune, EPCI, département, région, national).7 8Endpoint MCP : http://localhost:7860/gradio_api/mcp/sse9Schema : http://localhost:7860/gradio_api/mcp/schema10"""11 12import logging13import gradio as gr14 15from data_loader import init_all16from server import (17 rechercher_friches,18 statistiques_prix_foncier,19 evolution_prix,20 statistiques_friches,21 diagnostic_foncier_territoire,22)23 24# Configuration du logging25logging.basicConfig(26 level=logging.INFO,27 format="%(asctime)s [%(levelname)s] %(name)s: %(message)s",28)29logger = logging.getLogger(__name__)30 31# --- Chargement des données au démarrage ---32logger.info("Démarrage du serveur MCP CEREMA...")33init_all()34logger.info("Données chargées. Construction de l'interface Gradio...")35 36# --- Interfaces Gradio pour chaque tool ---37 38# Tool 1 : Recherche de friches39iface_friches = gr.Interface(40 fn=rechercher_friches,41 inputs=[42 gr.Textbox(label="Code INSEE commune", placeholder="ex: 13055, 59350, 75056"),43 gr.Textbox(label="Code département", placeholder="ex: 13, 59, 75"),44 gr.Dropdown(45 label="Type de friche",46 choices=["", "industrielle", "habitat", "commerciale", "ferroviaire",47 "militaire", "hospitalière", "logistique", "agro-industrielle",48 "équipement public", "carrière ou mine"],49 value="",50 ),51 gr.Number(label="Surface minimale (m²)", value=0),52 gr.Dropdown(53 label="Statut",54 choices=["", "sans projet", "avec projet", "potentielle", "reconvertie"],55 value="",56 ),57 ],58 outputs=gr.Markdown(label="Résultats"),59 title="Recherche de friches",60 description="Recherche des friches disponibles sur un territoire (base Cartofriches du CEREMA).",61 api_name="rechercher_friches",62)63 64# Tool 2 : Statistiques de prix foncier65iface_prix = gr.Interface(66 fn=statistiques_prix_foncier,67 inputs=[68 gr.Textbox(label="Code INSEE commune", placeholder="ex: 13055, 59350"),69 gr.Textbox(label="Code département", placeholder="ex: 13, 59"),70 gr.Dropdown(71 label="Type de bien",72 choices=["tous", "maison", "appartement"],73 value="tous",74 ),75 gr.Textbox(label="Année", value="2024", placeholder="2010 à 2024"),76 ],77 outputs=gr.Markdown(label="Résultats"),78 title="Prix foncier",79 description="Statistiques de prix et volumes de transactions immobilières (DV3F, CEREMA/DGFiP).",80 api_name="statistiques_prix_foncier",81)82 83# Tool 3 : Évolution des prix84iface_evolution = gr.Interface(85 fn=evolution_prix,86 inputs=[87 gr.Textbox(label="Code INSEE commune", placeholder="ex: 13055"),88 gr.Textbox(label="Code département", placeholder="ex: 13"),89 gr.Dropdown(90 label="Type de bien",91 choices=["maison", "appartement"],92 value="maison",93 ),94 ],95 outputs=gr.Markdown(label="Résultats"),96 title="Évolution des prix",97 description="Évolution temporelle des prix fonciers de 2010 à 2024 (DV3F, CEREMA/DGFiP).",98 api_name="evolution_prix",99)100 101# Tool 4 : Statistiques agrégées de friches (multi-échelle)102iface_stats_friches = gr.Interface(103 fn=statistiques_friches,104 inputs=[105 gr.Textbox(label="Code INSEE commune", placeholder="ex: 13055 — retourne aussi EPCI, département, région"),106 gr.Textbox(label="Code SIREN EPCI", placeholder="ex: 200054807 (Aix-Marseille-Provence)"),107 gr.Textbox(label="Code département", placeholder="ex: 13, 59"),108 gr.Textbox(label="Code région", placeholder="ex: 93 (PACA), 32 (Hauts-de-France)"),109 gr.Dropdown(110 label="Échelle",111 choices=["", "commune", "epci", "departement", "region", "national"],112 value="",113 ),114 ],115 outputs=gr.Markdown(label="Résultats"),116 title="Statistiques friches (multi-échelle)",117 description="Statistiques agrégées des friches : commune, EPCI, département, région ou national. "118 "Si une commune est fournie, les stats aux échelles supérieures sont aussi affichées.",119 api_name="statistiques_friches",120)121 122# Tool 5 : Diagnostic foncier territorial (multi-échelle)123iface_diagnostic = gr.Interface(124 fn=diagnostic_foncier_territoire,125 inputs=[126 gr.Textbox(label="Code INSEE commune", placeholder="ex: 13055"),127 gr.Textbox(label="Code SIREN EPCI", placeholder="ex: 200054807"),128 gr.Textbox(label="Code département", placeholder="ex: 13"),129 gr.Textbox(label="Code région", placeholder="ex: 93 (PACA)"),130 ],131 outputs=gr.Markdown(label="Résultats"),132 title="Diagnostic foncier",133 description="Diagnostic complet croisant friches et marché foncier à toutes les échelles (Cartofriches + DV3F).",134 api_name="diagnostic_foncier_territoire",135)136 137# --- Application Gradio combinée ---138demo = gr.TabbedInterface(139 [iface_friches, iface_prix, iface_evolution, iface_stats_friches, iface_diagnostic],140 tab_names=["🏗️ Friches", "💰 Prix foncier", "📈 Évolution prix",141 "📊 Stats friches", "🔍 Diagnostic territorial"],142 title="MCP CEREMA — Données foncières & friches pour la transition écologique",143)144 145if __name__ == "__main__":146 demo.launch(147 mcp_server=True,148 server_name="0.0.0.0",149 server_port=7860,150 )151 