André — Analyse électorale française

vote.andrePublished by andre.voteOfficial publisherv1.28.1Updated Oct 24, 2026

Résultats des élections françaises 1999-2026 par bureau de vote, socio-démo INSEE et cartes.

VerifiedStreamable HTTPWeb executableDatabasesLocation & LifestyleData & Analytics

Overview

AI-generated overview

A hosted MCP server for French electoral analysis, giving an assistant polling-station-level election results, INSEE socio-demographic data, elected officials,

What you can do
Query French election results from 1999 to 2026 by territory and polling station, including panel actions that compare elections and rank communes or stations by criteria. Look up administrative divisions (communes, EPCI, cantons, departments, regions) and elected officials from the BRÉF base. Retrieve socio-demographic variables and the social composition of 2020 municipal candidates. Run read-only SQL against the underlying DuckDB database. Generate election maps, Plotly visualizations and formatted data tables, simulate municipal list mergers, and export data as CSV, JSON or TSV.
When to use it
Useful when you want an assistant to analyse French election results, cross them with socio-demographic data, compare ballots over time, or produce maps and charts of electoral geography, without downloading or preparing any dataset.
Requirements
Remote HTTP endpoint; no installation, account or authentication. Clients without HTTP transport can bridge via npx mcp-remote, which needs Node.js. Running the server locally requires Python or Docker, but tool calls do not work outside the monorepo yet.
Before you install
Read-only over public data, with no destructive tools. On Claude.ai and Claude Desktop, roughly 15-20 tool calls per turn may interrupt deep analyses. The SQL tool is restricted to read-only queries with an injected row limit. Local runs cannot serve tool calls, so use the hosted endpoint.

Installation

In SourceWeft

  1. Open André — Analyse électorale française in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.

Use with an agent

Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.

Read https://sourceweft.com/mcp/vote.andre%2Felections/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.

Read the install guide the agent follows

Other MCP clients

Add this to your client's mcpServers config.

{
  "mcpServers": {
    "andr-analyse-lectorale-fran-aise": {
      "type": "http",
      "url": "https://mcp.andre.vote/mcp"
    }
  }
}

README

André MCP — Analyse électorale française

[andre-mcp MCP server]

Serveur MCP (Model Context Protocol) donnant accès aux résultats de 55 élections françaises (1999-2026) au niveau du bureau de vote, croisés avec les données socio-démographiques de l'INSEE, la base des élus de la République et les découpages administratifs officiels.

Serveur hébergé, prêt à l'emploi : https://mcp.andre.vote/mcp Aucune installation, aucun téléchargement de données, aucune authentification.

Ce dépôt contient le code du serveur MCP, publié sous licence MIT. Il est un miroir automatique de andre-mcp/ dans le monorepo André, qui reste la source de vérité : les contributions passent par des issues ici, pas par des commits directs (ils seraient écrasés au prochain miroitage).

Connexion

Claude Code

bash
claude mcp add --transport http andre https://mcp.andre.vote/mcp

Claude Desktop, Cursor, VS Code…

json
{  "mcpServers": {    "andre": {      "type": "http",      "url": "https://mcp.andre.vote/mcp"    }  }}

Emplacement du fichier pour Claude Desktop :

  • macOS : ~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows : %APPDATA%\Claude\claude_desktop_config.json

Pour les clients qui ne gèrent pas encore le transport HTTP :

json
{  "mcpServers": {    "andre": {      "command": "npx",      "args": ["-y", "mcp-remote", "https://mcp.andre.vote/mcp"]    }  }}

Limite d'appels d'outils sur Claude.ai / Claude Desktop

Claude impose une limite d'environ 15-20 appels d'outils par tour de conversation. Les analyses approfondies (résultats T1+T2, bureaux de vote, croisement socio-démographique…) peuvent l'atteindre. Cliquez Continuer pour reprendre. Pour des analyses complètes sans interruption, andre.vote n'a pas cette contrainte.

Outils

OutilDescription
query_electionsRésultats électoraux (55 élections, 1999-2026)
query_adminDivisions administratives (communes, EPCI, cantons, départements)
query_elusÉlus de la République (base BRÉF, Zenodo)
query_sociodemDonnées socio-démographiques INSEE au niveau bureau de vote
query_sqlRequêtes SQL directes sur la base DuckDB (lecture seule)
query_dlpComposition sociale des candidats municipaux 2020
generate_mapCartes électorales multi-couches
visualizeVisualisations Plotly (bar, line, scatter…)
simulate_fusionsSimulation de fusions de listes municipales
export_dataExport CSV/JSON/TSV
create_data_tableTableaux de données formatés

Tous les outils portent un title et une annotation readOnlyHint / destructiveHint. Aucun outil n'est destructif : le serveur est en lecture seule sur des données publiques.

query_elections propose des actions « panel » qui répondent en un seul appel, ce qui limite le risque d'atteindre le plafond d'appels d'outils :

  • compare_elections — compare deux scrutins pour un territoire
  • query_all_circonscriptions — vainqueur de chaque circonscription (législatives)
  • vote_reserve — score d'une famille + abstention par bureau (réserves de voix)
  • select_communes — sélectionne/classe des communes par critères géographiques, démographiques et électoraux
  • cross_election_panel — évolution d'une famille ou d'une nuance par commune sur N scrutins
  • bureau_breakdown — pivot par bureau (top nuances + participation, socio-démo en option)

Resources documentaires

Références consultables automatiquement par le client :

  • andre://references/methodologies — méthodologies d'analyse (réserves, typologies, ACP)
  • andre://references/data_schema — schéma des données électorales
  • andre://references/political_colors — couleurs des familles politiques
  • andre://references/election_dates — dates des 55 élections
  • andre://references/victory_rules — règles de victoire par type d'élection
  • andre://references/nuances — codes de nuance politique
  • andre://references/insee_variables — variables socio-démographiques INSEE
  • andre://skills/electoral-analysis — skill principal (workflows, débogage)

Prompts pré-construits

  • analyser_commune — analyse électorale complète d'une commune
  • reserves_de_voix — identification des réserves pour une force politique
  • carte_electorale — carte thématique d'un département
  • comparer_elections — comparaison temporelle entre deux scrutins
  • resultats_rapides — résultats synthétiques d'une élection

Exemples

Analyse les résultats des législatives 2024 à Marseille→ query_admin (code 13055) puis query_elections puis query_sociodem
Quelles sont les communes les plus abstentionnistes des Bouches-du-Rhôneaux européennes 2024 ?→ query_sql avec une requête agrégée

Données

Exclusivement des sources publiques officielles :

SourceLicenceContenu
data.gouv.frLicence Ouverte 2.0Résultats électoraux, candidatures
IGN / EtalabLicence Ouverte 2.0Contours administratifs
INSEELicence Ouverte 2.0Données socio-démographiques
BRÉF (Zenodo)CC BY 4.0Élus de la République
FERDCC BY 4.0Codage politique à trois niveaux

Les données socio-démographiques sont interpolées de l'IRIS vers le bureau de vote via les pondérations de l'Observatoire national des bureaux de vote.

Limites & robustesse

Le serveur expose des données publiques en lecture seule, sans authentification. Garde-fous en place :

  • query_sql — connexion DuckDB en lecture seule, requêtes d'écriture bloquées, LIMIT de sécurité injecté sur les SELECT/WITH sans limite explicite.
  • Garde de concurrence — nombre d'exécutions lourdes simultanées borné, avec une réponse gracieuse « serveur occupé » au-delà.
  • Métriques — séries Prometheus sur /metrics (outil, latence, taux d'erreur, concurrence). Ni les arguments, ni les résultats, ni les identifiants de session ne sont exposés.

Exécution locale

Le serveur démarre et répond à l'introspection (tools/list, resources/list, prompts/list) sans aucune donnée :

bash
pip install .python -c "from andre_mcp.server import run; run()"

ou via Docker :

bash
docker build -t andre-mcp .docker run -i --rm andre-mcp

En revanche, les appels d'outils ne fonctionnent pas encore hors du monorepo : le serveur délègue ses requêtes à des scripts (query_elections.py, query_admin.py, generate_map.py…) qui n'ont pas encore été versés dans le paquet, et le jeu de données complet (~1,5 Go) doit être provisionné. Un paquet PyPI autonome est en préparation.

Pour un usage réel, connectez-vous au serveur distant.

Registre

Publié au registre officiel MCP sous le nom vote.andre/elections (namespace vérifié par DNS sur andre.vote). Voir server.json.

Licence

MIT — voir LICENSE.

Les données restent soumises aux licences de leurs producteurs respectifs (Licence Ouverte 2.0, CC BY 4.0).

Source: README.md at commit 6d033dd

Tools

11

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épa

Parametersepcitourlimitordertop_nactionrequiredoffsetfamillesort_bygroup_bybureau_idby_family+25 more

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.

Parametersactionrequiredepci_codepostal_codesearch_termcommune_codedepartement_code

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.

Parametersactionrequiredsearch_termmandate_typedepartement_code

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.

Parametersorderactionrequiredvariablecommune_codecommune_codes

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.

Parameterssexeactionrequiredclassesearchtetes_onlycommune_codesortants_onlydepartement_code

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), 'nuance' (score d'une nuance), 'abstention' (abstentions / inscrits) ou 'participation' (votants / inscrits). Abstention et participation sont en % des inscrits ; au-dessus du bureau, somme des abstentions (ou votants) sur la somme des inscrits. - 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' - Carte d'abstention, Marseille : election_id='2024_legi_t1', commune='13055', metric='abstention' - Participation par commune, Bouches-du-Rhône : election_id='2024_legi_t1', geography='commune', department='13', metric='participation'

Parameterscantonmetricnuanceregioncommunegeographydepartmentelection_idrequiredcirconscription

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.

Parametersactionrequiredelection_idrequiredreport_ratecommune_coderequired

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

Parametersdatafilenamerequiredfile_formatsource_path

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.

Parametersabcxyzy2datapathsizespeccolor+8 more

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

Parametersrowsrequiredtitlerequiredcolumnsrequireddescription

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

Parametersqueryrequired

Version history

1
  1. v1.28.1LatestSep 16, 2026

Score

100% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 daysRequired25 pts
  • Auth declaredRequired10 pts
  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts