Skip to content

André — Analyse électorale française

by andre.vote · remote · no sign-in to list tools · v1.28.1 · published by vote.andre

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

Changes · 5

11 tools: 5 change things and 6 only read.

Scanned Oct 21, 2026

1 check matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.

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

Findings

Matches of fixed checks, with the text they matched.

1 info
  • The description is 2,481 characters long, over the 2,000 this check looks for.

    Matched text

    description ends: "...ion, with_sociodem optionnel) pour commune_code + election_id."

    What this check looks for

Tools

Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.

11 tools

Changes things 5Claude Code: ask
  • create_data_tableCrée un tableau de données formaté à partir de données structurées.No findings

    Why it is in this group

    • The name "create_data_table" says "create": a word for a change.
    Description, as the server wrote it
    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é.

    Annotations the server declares

    • title: Tableau de données
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • export_dataExporte des données électorales vers un fichier téléchargeable (CSV, JSON, TSV).No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    Description, as the server wrote it
    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).

    Annotations the server declares

    • title: Export de données
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • generate_mapGénère une carte électorale (PNG) pour une élection.No findings

    Why it is in this group

    • The name "generate_map" says "generate": a word for a change.
    Description, as the server wrote it
    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'

    Annotations the server declares

    • title: Carte électorale
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • simulate_fusionsSimule les scénarios de fusion de listes municipales entre T1 et T2.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • title: Simulation de fusions de listes
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • visualizeCrée une visualisation Plotly (retourne le spec JSON).No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • title: Visualisation graphique
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
Only reads 6Claude Code: allow
  • query_adminRequête les divisions administratives françaises.No findings

    Why it is in this group

    • The name "query_admin" says "query": a word for reading.
    Description, as the server wrote it
    Requête les divisions administratives françaises. Actions : search_commune, get_commune, search_postal, list_epci, get_epci, list_cantons, list_departements, list_regions.

    Annotations the server declares

    • title: Divisions administratives
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • query_dlpRequête les données DLP (composition sociale des candidats municipaux 2020).No findings

    Why it is in this group

    • The name "query_dlp" says "query": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • title: Profil social des candidats municipaux
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • query_electionsRequête les données électorales françaises (1999-2026).1 finding

    Why it is in this group

    • The name "query_elections" says "query": a word for reading.

    Findings

    • Info

      The description is 2,481 characters long, over the 2,000 this check looks for.

      Matched text

      description ends: "...ion, with_sociodem optionnel) pour commune_code + election_id."

      What this check looks for
    Description, as the server wrote it
    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.

    Annotations the server declares

    • title: Résultats électoraux
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • query_elusRequête les élus de la République française (base BRÉF).No findings

    Why it is in this group

    • The name "query_elus" says "query": a word for reading.
    Description, as the server wrote it
    Requête les élus de la République française (base BRÉF). Actions : search_elu, list_mandate_types, list_elus.

    Annotations the server declares

    • title: Élus de la République
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • query_sociodemRequête les données socio-démographiques au niveau bureau de vote.No findings

    Why it is in this group

    • The name "query_sociodem" says "query": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • title: Données socio-démographiques
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • query_sqlExécute une requête SQL directe sur la base DuckDB (read-only).No findings

    Why it is in this group

    • The name "query_sql" says "query": a word for reading.
    Description, as the server wrote it
    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

    Annotations the server declares

    • title: Requête SQL (lecture seule)
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false

This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.

Install

Pinned to version 1.28.1. Values in angle brackets are yours to fill in.

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

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.

.claude/settings.json
{
  "permissions": {
    "allow": [
      "mcp__elections__query_elections",
      "mcp__elections__query_admin",
      "mcp__elections__query_elus",
      "mcp__elections__query_sociodem",
      "mcp__elections__query_dlp",
      "mcp__elections__query_sql"
    ],
    "ask": [
      "mcp__elections__generate_map",
      "mcp__elections__simulate_fusions",
      "mcp__elections__export_data",
      "mcp__elections__visualize",
      "mcp__elections__create_data_table"
    ],
    "deny": []
  }
}

Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as elections. Review it before you use it.