Skip to main content
Glama
André — Analyse électorale française

André — Analyse électorale française

by joelgombin

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

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

Claude Desktop, Cursor, VS Code…

{
  "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 :

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

Related MCP server: immo-mcp

Outils

Outil

Description

query_elections

Résultats électoraux (55 élections, 1999-2026)

query_admin

Divisions administratives (communes, EPCI, cantons, départements)

query_elus

Élus de la République (base BRÉF, Zenodo)

query_sociodem

Données socio-démographiques INSEE au niveau bureau de vote

query_sql

Requêtes SQL directes sur la base DuckDB (lecture seule)

query_dlp

Composition sociale des candidats municipaux 2020

generate_map

Cartes électorales multi-couches

visualize

Visualisations Plotly (bar, line, scatter…)

simulate_fusions

Simulation de fusions de listes municipales

export_data

Export CSV/JSON/TSV

create_data_table

Tableaux 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ône
aux européennes 2024 ?
→ query_sql avec une requête agrégée

Données

Exclusivement des sources publiques officielles :

Source

Licence

Contenu

data.gouv.fr

Licence Ouverte 2.0

Résultats électoraux, candidatures

IGN / Etalab

Licence Ouverte 2.0

Contours administratifs

INSEE

Licence Ouverte 2.0

Données socio-démographiques

BRÉF (Zenodo)

CC BY 4.0

Élus de la République

FERD

CC BY 4.0

Codage 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 :

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

ou via Docker :

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

Available Tools

10 tools
create_data_tableTableau de donnéesA
Idempotent
Inspect

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

Inputs: rows (required), title (required), columns (required), description. Returns: result

export_dataExport de donnéesA
Idempotent
Inspect

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

Inputs: filename (required), data, file_format, source_path. Returns: result

query_adminDivisions administrativesC
Read-onlyIdempotent
Inspect

Requête les divisions administratives françaises.

Actions : search_commune, get_commune, search_postal, list_epci, get_epci, list_cantons, list_departements, list_regions.

Inputs: action (required), epci_code, postal_code, search_term, +2 more. Returns: result

query_dlpProfil social des candidats municipauxA
Read-onlyIdempotent
Inspect

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.

Inputs: action (required), sexe, classe, search, +4 more. Returns: result

query_electionsRésultats électorauxA
Read-onlyIdempotent
Inspect

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

  • 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 commune_code/departement_code/region_code/commune_codes).

  • bureau_breakdown : pivot par bureau (top_n nuances/blocs + participation, with_sociodem optionnel) pour commune_code + election_id.

Inputs: action (required), epci, tour, limit, +32 more. Returns: result

query_elusÉlus de la RépubliqueC
Read-onlyIdempotent
Inspect

Requête les élus de la République française (base BRÉF).

Actions : search_elu, list_mandate_types, list_elus.

Inputs: action (required), search_term, mandate_type, departement_code. Returns: result

query_sociodemDonnées socio-démographiquesC
Read-onlyIdempotent
Inspect

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.

Inputs: action (required), order, variable, commune_code, +1 more. Returns: result

query_sqlRequête SQL (lecture seule)A
Read-onlyIdempotent
Inspect

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

Inputs: query (required). Returns: result

simulate_fusionsSimulation de fusions de listesA
Read-onlyIdempotent
Inspect

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.

Inputs: action (required), election_id (required), commune_code (required), report_rate. Returns: result

visualizeVisualisation graphiqueA
Idempotent
Inspect

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 + x + y

Types supportés : bar, line, scatter, histogram, box, violin, heatmap, treemap.

Inputs: x, y, data, spec, +4 more. Returns: result

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A3.6/5.0

    Scored across 10 tools

    Disambiguation5/5

    Each tool targets a distinct aspect of electoral analysis (simulation, export, visualization, table creation, SQL query, elections, admin, elected officials, sociodem, candidate profiles). No overlap, clear boundaries.

    Naming Consistency4/5

    Tools follow a verb_noun pattern with underscores, but mix English ('simulate', 'export', 'query') and French ('fusions', 'elus', 'sociodem') terms, a minor inconsistency.

    Tool Count5/5

    10 tools is well-scoped for the domain of French electoral analysis, covering data retrieval, analysis, simulation, and output without being excessive.

    Completeness5/5

    The set covers core electoral workflows: querying results, administrative divisions, elected officials, sociodemographics, candidate profiles, simulation, and data export/visualization. No obvious gaps.

    Maintenance

    ActivityMaintained
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      C
      maintenance
      Access 17M+ geocoded French property transactions (DVF), 22M+ DPE energy ratings, and 20M+ building records via MCP or REST API. Search transactions, market stats, comparables, price trends, rental yield, flip detection, and more.
      MIT
    • A
      license
      Not graded
      quality
      B
      maintenance
      Sourced, dated calculations for French income tax and pensions across 32 retirement schemes — every result carries its confidence level, its legal sources and the fiscal year, and returns non_calculable rather than a guess. Hosted remote MCP + REST, paid per call via x402 (USDC on Base); two discovery tools are free.
      1
      MIT