Skip to main content
Glama
joelgombin

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: mcp-trinv-server

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

ParametersJSON Schema
NameRequiredDescriptionDefault
rowsYes
titleYes
columnsYes
descriptionNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description notes it returns a formatted text table, adding some behavioral context beyond annotations. Annotations already indicate idempotent and non-destructive. However, it lacks details on error behavior or permission requirements.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three concise sentences, front-loaded with the main action. No unnecessary words. Every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 4 parameters and 0% schema coverage, the description leaves significant gaps. It does not explain how to structure columns and rows, which is critical for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must compensate. It only says 'from structured data' and does not explain the parameters (title, columns, rows, description). This is insufficient for proper use.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Crée' (creates) and the resource 'tableau de données formaté' (formatted data table). It specifies input as structured data and output as a formatted text table. This distinguishes it from sibling tools like query tools or visualize.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description says 'Utile pour présenter des résultats calculés ou combinés' (useful for presenting calculated or combined results), giving clear usage context. It does not explicitly state when not to use it or mention alternatives, but the context is sufficient.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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

ParametersJSON Schema
NameRequiredDescriptionDefault
dataNo
filenameYes
file_formatNocsv
source_pathNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate idempotentHint=true and destructiveHint=false; the description adds modes but doesn't clarify side effects or state changes. No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences with front-loaded purpose. No unnecessary words, but could be slightly more structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Description covers modes and formats but lacks details on file_format defaults and return values (though output schema may exist).

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, but the description adds meaning to data and source_path parameters. However, filename and file_format are not explained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it exports electoral data to downloadable files (CSV, JSON, TSV) and mentions two modes. This distinguishes it from sibling query tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains two modes (data vs source_path) but does not explicitly state when to use each or when not to use the tool. No alternatives are mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYes
epci_codeNo
postal_codeNo
search_termNo
commune_codeNo
departement_codeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate read-only, non-destructive, idempotent behavior. The description adds the list of actions, which clarifies what queries are possible, but does not explain how parameters interact with each action or any other behavioral detail.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short and front-loaded with the purpose. It wastes no words, but the brevity comes at the cost of missing necessary details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (router to multiple queries with 6 parameters and siblings), the description is incomplete. It omits details on how parameters map to actions, return values, and when to use each action.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage and 6 parameters, the description only lists possible action values but does not explain the meaning or usage of any parameter, including the required 'action' parameter. This is a critical gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it queries French administrative divisions and lists specific actions, making the purpose evident. However, it does not explicitly differentiate from sibling tools like query_elections, though the title and action names imply the domain.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives. The list of actions hints at its scope, but there is no explicit 'when to use' or 'when not to use' advice.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
sexeNo
actionYes
classeNo
searchNo
tetes_onlyNo
commune_codeNo
sortants_onlyNo
departement_codeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, so the tool is clearly a safe read operation. The description adds valuable context: scale (~546k candidates, ~10k communes), classes, and available actions (summary, composition, parite, etc.), which enriches the agent's understanding beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise: three short sentences covering purpose, scale, classes, and actions. Every sentence adds value without redundancy. It is front-loaded with the main verb and resource.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (8 parameters, 1 required) and the presence of an output schema, the description provides high-level context but omits parameter details and usage conditions. It sufficiently covers the tool's domain and actions but leaves parameter semantics incomplete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. However, it only lists action values indirectly via the 'Actions' list, but does not explain any other parameters (sexe, classe, search, tetes_only, commune_code, etc.). This leaves most parameters undocumented, failing to add meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Requête les données DLP (composition sociale des candidats municipaux 2020)' with specific verb and resource. It lists distinct classes and actions, and the title and context distinguish it from sibling query tools (e.g., query_elections, query_admin), making its purpose unmistakable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for querying social profile data of municipal candidates by listing available actions, but it does not provide explicit guidance on when to use this tool versus alternatives (e.g., other query tools) or when not to use it. No exclusion criteria or prerequisites are stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
epciNo
tourNo
limitNo
orderNo
top_nNo
actionYes
offsetNo
familleNo
sort_byNo
bureau_idNo
by_familyNo
conditionNo
electionsNo
bureau_codeNo
canton_codeNo
election_idNo
family_nameNo
list_searchNo
nuance_codeNo
rank_metricNo
region_codeNo
commune_codeNo
nuance_levelNo
scrutin_typeNo
commune_codesNo
with_sociodemNo
candidate_nameNo
commune_metricNo
population_maxNo
population_minNo
candidate_queryNo
use_ferd_codingNo
candidate_searchNo
departement_codeNo
compare_to_electionNo
circonscription_codeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false. The description reinforces that the tool queries data and lists many actions, but does not add much beyond annotations. The detailed action explanations provide some behavioral context (e.g., 'panel actions avoid loops'), which is helpful.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but well-structured: it starts with the main purpose, then lists territorial levels, base actions, and panel actions separately. It is front-loaded with essential info. However, it could be more concise; some redundancy exists (e.g., repeating parameter names in action descriptions).

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (36 parameters, many actions, output schema exists), the description covers a lot: territorial levels, all actions with their required parameters, and panel actions that avoid loops. It doesn't explain return values (output schema covers that) or all parameter details, but it is fairly complete for a complex tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. While it mentions some parameter names in action contexts (e.g., election_id, commune_code), it does not explain their format, allowed values, or semantics for most of the 36 parameters. The description is insufficient for an agent to understand all parameters correctly.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Requête les données électorales françaises (1999-2026)' — a specific verb (requête) and resource (French election data). It lists multiple distinct actions and panel actions, differentiating them from sibling tools like query_sociodem or query_elus.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains territorial levels and lists actions with their required parameters (e.g., 'compare_elections requires election_id, compare_to_election, and a territory code'). It also notes that panel actions avoid loops, providing usage guidance. However, it does not explicitly state when not to use the tool, but the context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYes
search_termNo
mandate_typeNo
departement_codeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint, idempotentHint, destructiveHint false. The description adds 'Requête' which matches read-only behavior, but provides no additional context such as output format, pagination, or rate limits. Minimal added value.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is very short but critically omits necessary details. It is under-specified rather than concise; every sentence is present but insufficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness1/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity (4 parameters, 0% schema coverage) and availability of an output schema, the description should explain parameter usage and return structure. It does not, leaving significant gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%. The description only lists action names but fails to explain parameters like search_term, mandate_type, departement_code. No semantic enrichment beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states the tool queries 'élus de la République française' (specific resource) and lists three actions, but does not differentiate them. Purpose is clear but lacks distinction between sibling query tools like query_elections.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives (e.g., query_elections). The actions are listed but without explanation, leaving the agent to infer usage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
orderNo
actionYes
variableNo
commune_codeNo
commune_codesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the tool is safe. The description adds behavioral context by listing actions (list_variables, profile, etc.) and data sources, beyond what annotations provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise (two sentences) but lacks structure. It front-loads the purpose but mixes data source details and actions without clear separation, making it slightly harder to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite having an output schema, the description is incomplete for a tool with 5 parameters and 1 required. It does not explain how to use actions or other parameters, leaving the agent without enough guidance to invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% with no parameter descriptions. The description does not explain any of the five parameters (e.g., action, variable, commune_code). It mentions 'Actions' but does not connect to the action parameter or provide usage details.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Requête les données socio-démographiques au niveau bureau de vote', specifying the verb (query) and resource (sociodemographic data at polling station level). It also mentions data sources and lists available actions, which distinguishes it from siblings like query_elections or query_admin.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use this tool vs alternatives. The sibling tools cover different data domains (elections, admin, etc.), so context is implicit, but there is no statement of when-not-to-use or prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond annotations (readOnlyHint, idempotentHint, destructiveHint), the description adds critical behavioral context: the database is DuckDB read-only, column names with spaces must be quoted, and lists important tables and columns. No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, well-structured, and front-loaded with the primary purpose. Every sentence adds value: purpose, tables, warnings, usage guidance, example. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool complexity (SQL query, multiple tables, quoting needs), the description is complete. It provides table schemas, column details, usage guidance, and an example. Output schema exists, so return values are covered.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% for the single parameter 'query', but the description compensates with extensive context: table listings, column names with quoting rules, and a realistic example query. However, it does not formally describe the parameter structure or constraints.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb (exécute) and resource (requête SQL directe sur DuckDB) and distinguishes itself from sibling query_elections by emphasizing its use for advanced ad hoc queries.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when to use this tool vs alternatives: 'PRÉFÉRER query_elections pour les analyses standard — query_sql est pour les requêtes ad hoc avancées.' Provides clear guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYes
election_idYes
report_rateNo
commune_codeYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false. The description adds that it is only for municipal elections and specifies the two actions, consistent with annotations. No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise, using two sentences with bullet-like formatting for actions. Every word adds value, with no redundant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simple nature of the tool and the presence of an output schema, the description covers the essential purpose and actions. Lacking explanation for 'report_rate' is a minor gap, but overall it is complete enough for an agent to understand usage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description partially compensates by explaining the 'action' parameter (values 'status' and 'simulate') and implicitly references election_id and commune_code. However, the optional 'report_rate' parameter is not mentioned, leaving some ambiguity.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it simulates fusion scenarios of municipal lists between T1 and T2, with two specific actions ('status' and 'simulate'). It distinguishes from sibling tools that focus on data queries and exports, as this is a simulation tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for municipal elections but does not provide explicit guidance on when to use or when not to use this tool. No alternatives are suggested, though sibling tools serve different purposes.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
xNo
yNo
dataNo
specNo
colorNo
titleNo
data_fileNo
chart_typeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate readOnlyHint=false (non-read-only), destructiveHint=false, idempotentHint=true. The description accurately portrays the tool as creating a visualization and returning a JSON spec, which is non-destructive and idempotent. It adds context about the output format not in annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise with two short paragraphs and a bullet list. Every sentence adds value, front-loading the purpose and modes. No unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has 8 parameters and no required ones. The description covers the two modes and some params, but misses color, title, and data_file. An output schema exists, so return format is covered, but input documentation is incomplete, making it less than fully helpful.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so description carries the burden. It explains the two modes involving spec, chart_type, data, x, y. However, it omits parameters like color, title, and data_file, leaving them undefined. This partial coverage is insufficient given the 0% schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Crée une visualisation Plotly (retourne le spec JSON)' with specific verb and resource. It lists two modes and supported chart types, distinguishing it from sibling tools focused on data queries/export.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains when to use each mode (free spec vs assisted) and lists supported chart types. It does not explicitly state when not to use the tool or name alternatives, but the context is clear enough for most cases.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 10 tool updatesv0.1.0
    • First observedcreate_data_table
    • First observedexport_data
    • First observedquery_admin
    • First observedquery_dlp
    • First observedquery_elections
    • First observedquery_elus
    • First observedquery_sociodem
    • First observedquery_sql
    • First observedsimulate_fusions
    • First observedvisualize

TDQS

A3.6/5.0
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 issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • F
    license
    A
    quality
    D
    maintenance
    MCP server for automatic fact-checking of political claims by querying official statistical APIs (INSEE, Eurostat, World Bank, OECD) and providing tools for data retrieval, comparison, and cherry-picking detection.
    18
    -

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/joelgombin/andre-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server