# joelgombin/andre-mcp [Health: Active]

**Category:** 🔬 Research  
**Repository:** https://github.com/joelgombin/andre-mcp  
**GitHub Stars:** 0  
**Views:** 2  
**Installs:** 0  
**Upvotes:** 0  
**Directory Page:** https://allmcps.com/mcp/joelgombin-andre-mcp

## Description
French election results from 1999 to 2026 at polling-station level (55 elections), cross-referenced with INSEE socio-demographic data, elected representatives and official administrative boundaries. Electoral maps, vote-reserve analysis, cross-election panels and read-only SQL over DuckDB. Hosted, no auth, no install: https://mcp.andre.vote/mcp, also listed as a hosted connector on Glama.

## Claude Desktop Quick Installation
Install path detected from listing signals. Uses `npx` (confidence: high):

```json
"mcpServers": {
  "andre-mcp": {
    "command": "npx",
    "args": ["-y","mcp-remote","https://mcp.andre.vote/mcp"]
  }
}
```

## Documentation & README

# André MCP — Analyse électorale française

[![andre-mcp MCP server](https://glama.ai/mcp/servers/joelgombin/andre-mcp/badges/score.svg)](https://glama.ai/mcp/servers/joelgombin/andre-mcp)

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

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

### Claude Desktop, Cursor, VS Code…

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

```json
{
  "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](https://andre.vote) n'a pas cette contrainte.

## 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](https://data.gouv.fr) | Licence Ouverte 2.0 | Résultats électoraux, candidatures |
| [IGN / Etalab](https://github.com/etalab) | Licence Ouverte 2.0 | Contours administratifs |
| [INSEE](https://www.insee.fr) | Licence Ouverte 2.0 | Données socio-démographiques |
| [BRÉF (Zenodo)](https://zenodo.org) | CC BY 4.0 | Élus de la République |
| [FERD](https://ferd.fr) | 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 :

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

ou via Docker :

```bash
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](#connexion).

## Registre

Publié au registre officiel MCP sous le nom **`vote.andre/elections`**
(namespace vérifié par DNS sur `andre.vote`). Voir [`server.json`](server.json).

## Licence

MIT — voir [LICENSE](LICENSE).

Les données restent soumises aux licences de leurs producteurs respectifs
(Licence Ouverte 2.0, CC BY 4.0).

