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.
11 tools: 5 change things and 6 only read.
Scanned Oct 21, 2026
- Deletes or cancels0Claude Code: deny
- Can't be undone0Claude Code: ask
- Changes things5Claude Code: ask: see these tools
- Only reads6Claude Code: allow: see these tools
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/mcpFindings
Matches of fixed checks, with the text they matched.
- Infoquery_elections
The description is 2,481 characters long, over the 2,000 this check looks for.
What this check looks forMatched text
description ends: "...ion, with_sociodem optionnel) pour commune_code + election_id."
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.
What this check looks forMatched text
description ends: "...ion, with_sociodem optionnel) pour commune_code + election_id."
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/mcpRun in a terminal.
Claude Code permissions
Allow the reads, ask before a change, deny the deletes. Paste into .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.