{"server":"vote.andre/elections","count":11,"tools":[{"name":"create_data_table","title":"Tableau de données","description":"Crée un tableau de données formaté à partir de données structurées.\n\n        Utile pour présenter des résultats calculés ou combinés.\n        Retourne un tableau texte formaté.\n        ","input_schema":{"type":"object","title":"create_data_tableArguments","required":["title","columns","rows"],"properties":{"rows":{"type":"array","items":{"type":"object","additionalProperties":true},"title":"Rows"},"title":{"type":"string","title":"Title"},"columns":{"type":"array","items":{"type":"object","additionalProperties":true},"title":"Columns"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","default":null}}},"output_schema":{"type":"object","title":"create_data_tableOutput","required":["result"],"properties":{"result":{"type":"string","title":"Result"}}},"annotations":{"title":"Tableau de données","readOnlyHint":false,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-10-09T21:06:02.701Z"},{"name":"export_data","title":"Export de données","description":"Exporte des données électorales vers un fichier téléchargeable (CSV, JSON, TSV).\n\n        Deux modes : data (contenu inline) ou source_path (chemin vers fichier existant).\n        ","input_schema":{"type":"object","title":"export_dataArguments","required":["filename"],"properties":{"data":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Data","default":null},"filename":{"type":"string","title":"Filename"},"file_format":{"type":"string","title":"File Format","default":"csv"},"source_path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Path","default":null}}},"output_schema":{"type":"object","title":"export_dataOutput","required":["result"],"properties":{"result":{"type":"string","title":"Result"}}},"annotations":{"title":"Export de données","readOnlyHint":false,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-10-09T21:06:02.701Z"},{"name":"generate_map","title":"Carte électorale","description":"Génère une carte électorale (PNG) pour une élection.\n\n        Paramètres :\n        - election_id : identifiant élection (ex: '2024_legi_t1', '2020_muni_t2')\n        - metric : 'family' (famille politique en tête) ou 'nuance' (score d'une nuance)\n        - geography : 'bv' (bureau de vote, défaut) ou 'commune' (carte nationale)\n        - department : code département (ex: '13'). Requis pour geography='bv' sauf si commune fourni.\n        - commune : code commune (ex: '13055' pour Marseille). Centre la carte sur cette commune.\n        - nuance : code nuance quand metric='nuance' (ex: 'RN', 'LFI', 'ENS')\n        - region : code région pour geography='commune' (ex: '93' pour PACA)\n\n        Exemples :\n        - Carte par famille, Bouches-du-Rhône : election_id='2024_legi_t1', department='13'\n        - Carte score RN, Marseille : election_id='2024_legi_t1', commune='13055', metric='nuance', nuance='RN'\n        - Carte nationale : election_id='2024_euro_t1', geography='commune'\n        ","input_schema":{"type":"object","title":"generate_mapArguments","required":["election_id"],"properties":{"canton":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Canton","default":null},"metric":{"type":"string","title":"Metric","default":"family"},"nuance":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Nuance","default":null},"region":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Region","default":null},"commune":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Commune","default":null},"geography":{"type":"string","title":"Geography","default":"bv"},"department":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Department","default":null},"election_id":{"type":"string","title":"Election Id"},"circonscription":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Circonscription","default":null}}},"output_schema":{"type":"object","title":"generate_mapOutput","required":["result"],"properties":{"result":{"type":"string","title":"Result"}}},"annotations":{"title":"Carte électorale","readOnlyHint":false,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-10-09T21:06:02.701Z"},{"name":"query_admin","title":"Divisions administratives","description":"Requête les divisions administratives françaises.\n\n        Actions : search_commune, get_commune, search_postal,\n        list_epci, get_epci, list_cantons, list_departements, list_regions.\n        ","input_schema":{"type":"object","title":"query_adminArguments","required":["action"],"properties":{"action":{"type":"string","title":"Action"},"epci_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Epci Code","default":null},"postal_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Postal Code","default":null},"search_term":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search Term","default":null},"commune_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Commune Code","default":null},"departement_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Departement Code","default":null}}},"output_schema":{"type":"object","title":"query_adminOutput","required":["result"],"properties":{"result":{"type":"string","title":"Result"}}},"annotations":{"title":"Divisions administratives","readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-10-09T21:06:02.701Z"},{"name":"query_dlp","title":"Profil social des candidats municipaux","description":"Requête les données DLP (composition sociale des candidats municipaux 2020).\n\n        ~546 000 candidats dans ~10 000 communes (≥1 000 hab.).\n        Classes : CDOM (dominant), CMOY (moyen), CSUB (subalterne), RET (retraité), AUTRES.\n        Actions : summary, composition, parite, listes, candidats, professions, sortants.\n        ","input_schema":{"type":"object","title":"query_dlpArguments","required":["action"],"properties":{"sexe":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sexe","default":null},"action":{"type":"string","title":"Action"},"classe":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Classe","default":null},"search":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search","default":null},"tetes_only":{"type":"boolean","title":"Tetes Only","default":false},"commune_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Commune Code","default":null},"sortants_only":{"type":"boolean","title":"Sortants Only","default":false},"departement_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Departement Code","default":null}}},"output_schema":{"type":"object","title":"query_dlpOutput","required":["result"],"properties":{"result":{"type":"string","title":"Result"}}},"annotations":{"title":"Profil social des candidats municipaux","readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-10-09T21:06:02.701Z"},{"name":"query_elections","title":"Résultats électoraux","description":"Requête les données électorales françaises (1999-2026).\n\n        Niveaux territoriaux : NATIONAL (aucun filtre), RÉGIONAL (region_code),\n        DÉPARTEMENTAL (departement_code), COMMUNAL (commune_code).\n\n        Actions de base : list_elections, query_results, list_bureaux, query_bureau,\n        query_by_bureau, rank_bureaux, list_circonscriptions, query_circonscription,\n        list_cantons, query_canton, search_candidate, query_candidatures, etc.\n\n        Actions « panel » (1 appel = analyse complète, évite les boucles) :\n        - compare_elections : compare deux scrutins pour un territoire\n          (election_id + compare_to_election + commune_code|departement_code,\n          candidate_name optionnel).\n        - query_all_circonscriptions : vainqueur de CHAQUE circonscription d'un\n          territoire en un appel (election_id + commune_code|departement_code,\n          législatives uniquement).\n        - vote_reserve : score d'une famille + abstention par bureau de vote sur\n          les scrutins récents comparables (commune_code + famille).\n        - select_communes : sélectionne/classe des communes par critères géo +\n          population + électoraux (region_code/departement_code/epci/commune_codes,\n          population_min/max, commune_metric, condition, sort_by, limit, order ;\n          commune_metric/condition nécessitent election_id). commune_metric accepte\n          PLUSIEURS métriques séparées par des virgules — une colonne chacune, en\n          un seul appel ; condition et sort_by portent alors sur la première.\n        - cross_election_panel : évolution d'un sujet (famille ou nuance_code) par\n          commune sur N scrutins (elections=ids séparés par des virgules + scope\n          optionnel commune_code/departement_code/region_code/commune_codes ;\n          SANS scope = national, panel complet en data_file). Renvoie aussi\n          « ensemble » : score du périmètre entier par scrutin + delta, pondéré\n          par les exprimés — ne pas boucler par département. famille et nuance_code\n          acceptent PLUSIEURS sujets séparés par des virgules ('Gauche,Droite') :\n          tous en un appel, agrégats dans « ensembles ». group_by='region'|\n          'departement' ajoute un agrégat pondéré PAR MAILLE dans le même appel —\n          ne jamais boucler un appel par région.\n        - bureau_breakdown : pivot par bureau (top_n nuances/blocs + participation,\n          with_sociodem optionnel) pour commune_code + election_id.\n        ","input_schema":{"type":"object","title":"query_electionsArguments","required":["action"],"properties":{"epci":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Epci","default":null},"tour":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Tour","default":null},"limit":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Limit","default":null},"order":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Order","default":null},"top_n":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Top N","default":null},"action":{"type":"string","title":"Action"},"offset":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Offset","default":null},"famille":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Famille","default":null},"sort_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sort By","default":null},"group_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Group By","default":null},"bureau_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bureau Id","default":null},"by_family":{"type":"boolean","title":"By Family","default":false},"condition":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Condition","default":null},"elections":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Elections","default":null},"bureau_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bureau Code","default":null},"canton_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Canton Code","default":null},"election_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Election Id","default":null},"family_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Family Name","default":null},"list_search":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"List Search","default":null},"nuance_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Nuance Code","default":null},"rank_metric":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rank Metric","default":null},"region_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Region Code","default":null},"commune_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Commune Code","default":null},"nuance_level":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Nuance Level","default":null},"scrutin_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Scrutin Type","default":null},"commune_codes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Commune Codes","default":null},"with_sociodem":{"type":"boolean","title":"With Sociodem","default":false},"candidate_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Candidate Name","default":null},"commune_metric":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Commune Metric","default":null},"population_max":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Population Max","default":null},"population_min":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Population Min","default":null},"candidate_query":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Candidate Query","default":null},"use_ferd_coding":{"type":"boolean","title":"Use Ferd Coding","default":false},"candidate_search":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Candidate Search","default":null},"departement_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Departement Code","default":null},"compare_to_election":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Compare To Election","default":null},"circonscription_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Circonscription Code","default":null}}},"output_schema":{"type":"object","title":"query_electionsOutput","required":["result"],"properties":{"result":{"type":"string","title":"Result"}}},"annotations":{"title":"Résultats électoraux","readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-10-09T21:06:02.701Z"},{"name":"query_elus","title":"Élus de la République","description":"Requête les élus de la République française (base BRÉF).\n\n        Actions : search_elu, list_mandate_types, list_elus.\n        ","input_schema":{"type":"object","title":"query_elusArguments","required":["action"],"properties":{"action":{"type":"string","title":"Action"},"search_term":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search Term","default":null},"mandate_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mandate Type","default":null},"departement_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Departement Code","default":null}}},"output_schema":{"type":"object","title":"query_elusOutput","required":["result"],"properties":{"result":{"type":"string","title":"Result"}}},"annotations":{"title":"Élus de la République","readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-10-09T21:06:02.701Z"},{"name":"query_sociodem","title":"Données socio-démographiques","description":"Requête les données socio-démographiques au niveau bureau de vote.\n\n        Données INSEE RP 2022 + Filosofi 2021, interpolées IRIS→BDV.\n        Actions : list_variables, profile, indices, rank, compare.\n        ","input_schema":{"type":"object","title":"query_sociodemArguments","required":["action"],"properties":{"order":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Order","default":null},"action":{"type":"string","title":"Action"},"variable":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Variable","default":null},"commune_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Commune Code","default":null},"commune_codes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Commune Codes","default":null}}},"output_schema":{"type":"object","title":"query_sociodemOutput","required":["result"],"properties":{"result":{"type":"string","title":"Result"}}},"annotations":{"title":"Données socio-démographiques","readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-10-09T21:06:02.701Z"},{"name":"query_sql","title":"Requête SQL (lecture seule)","description":"Exécute une requête SQL directe sur la base DuckDB (read-only).\n\n        Tables principales :\n        - general_results : résultats généraux par bureau de vote\n        - candidats_results : résultats par candidat par bureau de vote\n        - elections_disponibles : liste des élections (id_election, nb_bureaux, total_inscrits)\n        - candidats_avec_nuances : candidats avec famille politique (si nuances enrichies)\n        - resultats_par_famille : résultats agrégés par famille politique\n        - communes, epci, departements, regions : divisions administratives\n        - bv_sociodemographique : données socio-démo par bureau de vote\n\n        ATTENTION — colonnes de general_results (noms avec espaces, à quoter) :\n        id_election, id_brut_miom, \"Code du département\", \"Code de la commune\" (SANS préfixe dept, ex: '055' pour Marseille),\n        \"Libellé de la commune\", Inscrits, Abstentions, Votants, Blancs, Nuls, Exprimés.\n\n        PRÉFÉRER query_elections pour les analyses standard — query_sql est pour les requêtes ad hoc avancées.\n\n        Exemple :\n        SELECT id_election, ROUND(100.0 * SUM(Abstentions) / NULLIF(SUM(Inscrits), 0), 1) as abstention_pct\n        FROM general_results WHERE \"Code du département\" = '13' AND \"Code de la commune\" = '055'\n        GROUP BY id_election ORDER BY id_election DESC LIMIT 5\n        ","input_schema":{"type":"object","title":"query_sqlArguments","required":["query"],"properties":{"query":{"type":"string","title":"Query"}}},"output_schema":{"type":"object","title":"query_sqlOutput","required":["result"],"properties":{"result":{"type":"string","title":"Result"}}},"annotations":{"title":"Requête SQL (lecture seule)","readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-10-09T21:06:02.701Z"},{"name":"simulate_fusions","title":"Simulation de fusions de listes","description":"Simule les scénarios de fusion de listes municipales entre T1 et T2.\n\n        Actions : 'status' (classer les listes après T1), 'simulate' (projections T2).\n        Uniquement pour les élections municipales.\n        ","input_schema":{"type":"object","title":"simulate_fusionsArguments","required":["action","election_id","commune_code"],"properties":{"action":{"type":"string","title":"Action"},"election_id":{"type":"string","title":"Election Id"},"report_rate":{"type":"number","title":"Report Rate","default":0.75},"commune_code":{"type":"string","title":"Commune Code"}}},"output_schema":{"type":"object","title":"simulate_fusionsOutput","required":["result"],"properties":{"result":{"type":"string","title":"Result"}}},"annotations":{"title":"Simulation de fusions de listes","readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-10-09T21:06:02.701Z"},{"name":"visualize","title":"Visualisation graphique","description":"Crée une visualisation Plotly (retourne le spec JSON).\n\n        Deux modes :\n        - Spec libre : fournir 'spec' (dict Plotly complet {data, layout})\n        - Assisté : fournir chart_type + data + mappings\n\n        Types supportés : bar, line, scatter, histogram, box, violin, heatmap,\n        treemap, grouped_bar, stacked_bar, dumbbell, diverging_bar,\n        dual_axis (x + y + y2), sankey (source + target + values),\n        hemicycle (x=groupe, y=sièges), ternary (a + b + c = trois parts).\n        Paramètres transversaux : subtitle (sous-titre technique),\n        reference_line ({value, label, orientation}) pour un seuil/référence.\n        ","input_schema":{"type":"object","title":"visualizeArguments","properties":{"a":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"A","default":null},"b":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"B","default":null},"c":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"C","default":null},"x":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X","default":null},"y":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Y","default":null},"z":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Z","default":null},"y2":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Y2","default":null},"data":{"anyOf":[{"type":"array","items":{"type":"object","additionalProperties":true}},{"type":"null"}],"title":"Data","default":null},"path":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"title":"Path","default":null},"size":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Size","default":null},"spec":{"anyOf":[{"type":"object","additionalProperties":true},{"type":"null"}],"title":"Spec","default":null},"color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Color","default":null},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title","default":null},"source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source","default":null},"target":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Target","default":null},"values":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Values","default":null},"subtitle":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subtitle","default":null},"data_file":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Data File","default":null},"chart_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Chart Type","default":null},"reference_line":{"anyOf":[{"type":"object","additionalProperties":true},{"type":"null"}],"title":"Reference Line","default":null}}},"output_schema":{"type":"object","title":"visualizeOutput","required":["result"],"properties":{"result":{"type":"string","title":"Result"}}},"annotations":{"title":"Visualisation graphique","readOnlyHint":false,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-10-09T21:06:02.701Z"}],"next_cursor":null,"next_actions":[{"action":"get_connection","description":"Connection block to call these tools","href":"/v1/servers/vote.andre%2Felections/connection?target=mcpServers","arguments":{"name":"vote.andre/elections","target":"mcpServers"}},{"action":"get_server","description":"Full descriptor with trust and connectability","href":"/v1/servers/vote.andre%2Felections","arguments":{"name":"vote.andre/elections"}}]}