André — Analyse électorale française
This server provides comprehensive analysis of 55 French elections (1999–2026) down to the polling station level, integrating socio-demographic, administrative, and elected officials data.
Query electoral results (
query_elections): Access results at national, regional, departmental, or commune level; search candidates; rank polling stations; compare elections; analyze vote reserves; and run multi-election panel analyses.Explore administrative divisions (
query_admin): Search communes by name or postal code, look up EPCIs, cantons, departments, and regions.Look up elected officials (
query_elus): Search the BRÉF database by name, mandate type, or department.Access socio-demographic data (
query_sociodem): Query INSEE RP 2022 and Filosofi 2021 data interpolated to the polling station level.Analyze candidate social profiles (
query_dlp): Explore the social composition, parity, and professions of ~546,000 municipal candidates from the 2020 elections.Generate electoral maps (
generate_map): Produce PNG maps showing leading political families or nuance scores at the polling station or commune level.Simulate list mergers (
simulate_fusions): Model municipal election second-round list fusion scenarios with configurable vote transfer rates.Visualize data (
visualize): Create Plotly charts (bar, line, scatter, histogram, heatmap, treemap, etc.).Export data (
export_data): Download results as CSV, JSON, or TSV.Create formatted tables (
create_data_table): Generate structured text tables for presenting results.Run direct SQL queries (
query_sql): Execute read-only SQL on the underlying DuckDB database for advanced ad hoc analysis.Use predefined prompts: Ready-made workflows for analyzing a commune, identifying vote reserves, generating maps, comparing elections, and getting quick results.
Provides capabilities to generate Plotly visualizations (bar, line, scatter, etc.) from electoral data.
Exposes server metrics in Prometheus format for monitoring.
André MCP — Analyse électorale française
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/mcpClaude 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.jsonWindows :
%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 |
| Résultats électoraux (55 élections, 1999-2026) |
| Divisions administratives (communes, EPCI, cantons, départements) |
| Élus de la République (base BRÉF, Zenodo) |
| Données socio-démographiques INSEE au niveau bureau de vote |
| Requêtes SQL directes sur la base DuckDB (lecture seule) |
| Composition sociale des candidats municipaux 2020 |
| Cartes électorales multi-couches |
| Visualisations Plotly (bar, line, scatter…) |
| Simulation de fusions de listes municipales |
| Export CSV/JSON/TSV |
| 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 territoirequery_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 électorauxcross_election_panel— évolution d'une famille ou d'une nuance par commune sur N scrutinsbureau_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 électoralesandre://references/political_colors— couleurs des familles politiquesandre://references/election_dates— dates des 55 électionsandre://references/victory_rules— règles de victoire par type d'électionandre://references/nuances— codes de nuance politiqueandre://references/insee_variables— variables socio-démographiques INSEEandre://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_sociodemQuelles sont les communes les plus abstentionnistes des Bouches-du-Rhône
aux européennes 2024 ?
→ query_sql avec une requête agrégéeDonnées
Exclusivement des sources publiques officielles :
Source | Licence | Contenu |
Licence Ouverte 2.0 | Résultats électoraux, candidatures | |
Licence Ouverte 2.0 | Contours administratifs | |
Licence Ouverte 2.0 | Données socio-démographiques | |
CC BY 4.0 | Élus de la République | |
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,LIMITde sécurité injecté sur lesSELECT/WITHsans 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-mcpEn 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 toolscreate_data_tableTableau de donnéesAIdempotentInspect
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é.
| Name | Required | Description | Default |
|---|---|---|---|
| rows | Yes | ||
| title | Yes | ||
| columns | Yes | ||
| description | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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éesAIdempotentInspect
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).
| Name | Required | Description | Default |
|---|---|---|---|
| data | No | ||
| filename | Yes | ||
| file_format | No | csv | |
| source_path | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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 administrativesCRead-onlyIdempotentInspect
Requête les divisions administratives françaises.
Actions : search_commune, get_commune, search_postal, list_epci, get_epci, list_cantons, list_departements, list_regions.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | ||
| epci_code | No | ||
| postal_code | No | ||
| search_term | No | ||
| commune_code | No | ||
| departement_code | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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 municipauxARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| sexe | No | ||
| action | Yes | ||
| classe | No | ||
| search | No | ||
| tetes_only | No | ||
| commune_code | No | ||
| sortants_only | No | ||
| departement_code | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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 électorauxARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| epci | No | ||
| tour | No | ||
| limit | No | ||
| order | No | ||
| top_n | No | ||
| action | Yes | ||
| offset | No | ||
| famille | No | ||
| sort_by | No | ||
| bureau_id | No | ||
| by_family | No | ||
| condition | No | ||
| elections | No | ||
| bureau_code | No | ||
| canton_code | No | ||
| election_id | No | ||
| family_name | No | ||
| list_search | No | ||
| nuance_code | No | ||
| rank_metric | No | ||
| region_code | No | ||
| commune_code | No | ||
| nuance_level | No | ||
| scrutin_type | No | ||
| commune_codes | No | ||
| with_sociodem | No | ||
| candidate_name | No | ||
| commune_metric | No | ||
| population_max | No | ||
| population_min | No | ||
| candidate_query | No | ||
| use_ferd_coding | No | ||
| candidate_search | No | ||
| departement_code | No | ||
| compare_to_election | No | ||
| circonscription_code | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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épubliqueCRead-onlyIdempotentInspect
Requête les élus de la République française (base BRÉF).
Actions : search_elu, list_mandate_types, list_elus.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | ||
| search_term | No | ||
| mandate_type | No | ||
| departement_code | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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émographiquesCRead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| order | No | ||
| action | Yes | ||
| variable | No | ||
| commune_code | No | ||
| commune_codes | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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)ARead-onlyIdempotentInspect
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
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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 listesARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | ||
| election_id | Yes | ||
| report_rate | No | ||
| commune_code | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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 graphiqueAIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| x | No | ||
| y | No | ||
| data | No | ||
| spec | No | ||
| color | No | ||
| title | No | ||
| data_file | No | ||
| chart_type | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
10 tool updates
v0.1.0- First observed
create_data_table - First observed
export_data - First observed
query_admin - First observed
query_dlp - First observed
query_elections - First observed
query_elus - First observed
query_sociodem - First observed
query_sql - First observed
simulate_fusions - First observed
visualize
TDQS
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.
Tools follow a verb_noun pattern with underscores, but mix English ('simulate', 'export', 'query') and French ('fusions', 'elus', 'sociodem') terms, a minor inconsistency.
10 tools is well-scoped for the domain of French electoral analysis, covering data retrieval, analysis, simulation, and output without being excessive.
The set covers core electoral workflows: querying results, administrative divisions, elected officials, sociodemographics, candidate profiles, simulation, and data export/visualization. No obvious gaps.
Maintenance
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
Lieux, commerces, artisans et associations en France — 3,7 M de fiches, rangées par code NAF.
NosDéputés.fr MCP — civic-tech mirror of the French Assemblée nationale
Données immobilières DVF France : transactions, comparables GPS et statistiques de marché.
French address quality, geocoding & routing from official data (BAN, INSEE, OpenStreetMap).
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceProvides access to French public data through data.gouv.fr, IGN cartographic services (maps, tiles, geographic data), address geocoding, and administrative divisions with demographic information.6-
- AlicenseAqualityDmaintenanceRecherche des communes françaises et des parcelles cadastrales dans une commune via TRINV.262MIT
- FlicenseAqualityDmaintenanceMCP 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-
- AlicenseNot gradedqualityCmaintenanceAnalyzes French real-estate market using open data sources like DVF transactions, DPE certificates, and risk data.MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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