MCP 서버

André — Analyse électorale française

vote.andre/elections
데이터 및 분석 검색 및 리서치 공개 · 연결 가능 MCP 2025-11-25

이 MCP로 할 수 있는 일

Queries French election results, candidates, elected officials, administrative data, socioeconomic indicators, and generates tables, maps, exports, and visualizations.

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