Server definition
- Hash
- sha256:6d4f260ccb8d84d8ed83606b1be4d3dbf51e11e7ca6b66c243d453d8503537b2
- What it is
- What a remote MCP server returned when asked what it offers: 11 tools
The blob, as servednamed by its sha256
{
"instructions": "André est un agent d'analyse électorale française. Il donne accès aux résultats de 55 élections (1999-2026) au niveau bureau de vote, avec des données socio-démographiques, des cartes électorales et des outils d'analyse avancés.",
"tools": [
{
"description": "Crée un tableau de données formaté à partir de données structurées.\n\n Utile pour présenter des résultats calculés ou combinés.\n Retourne un tableau texte formaté.\n ",
"inputSchema": {
"properties": {
"columns": {
"items": {
"additionalProperties": true,
"type": "object"
},
"title": "Columns",
"type": "array"
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Description"
},
"rows": {
"items": {
"additionalProperties": true,
"type": "object"
},
"title": "Rows",
"type": "array"
},
"title": {
"title": "Title",
"type": "string"
}
},
"required": [
"title",
"columns",
"rows"
],
"title": "create_data_tableArguments",
"type": "object"
},
"name": "create_data_table",
"outputSchema": {
"properties": {
"result": {
"title": "Result",
"type": "string"
}
},
"required": [
"result"
],
"title": "create_data_tableOutput",
"type": "object"
}
},
{
"description": "Exporte des données électorales vers un fichier téléchargeable (CSV, JSON, TSV).\n\n Deux modes : data (contenu inline) ou source_path (chemin vers fichier existant).\n ",
"inputSchema": {
"properties": {
"data": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Data"
},
"file_format": {
"default": "csv",
"title": "File Format",
"type": "string"
},
"filename": {
"title": "Filename",
"type": "string"
},
"source_path": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Source Path"
}
},
"required": [
"filename"
],
"title": "export_dataArguments",
"type": "object"
},
"name": "export_data",
"outputSchema": {
"properties": {
"result": {
"title": "Result",
"type": "string"
}
},
"required": [
"result"
],
"title": "export_dataOutput",
"type": "object"
}
},
{
"description": "Génère une carte électorale (PNG) pour une élection.\n\n Paramètres :\n - election_id : identifiant élection (ex: '2024_legi_t1', '2020_muni_t2')\n - metric : 'family' (famille politique en tête) ou 'nuance' (score d'une nuance)\n - geography : 'bv' (bureau de vote, défaut) ou 'commune' (carte nationale)\n - department : code département (ex: '13'). Requis pour geography='bv' sauf si commune fourni.\n - commune : code commune (ex: '13055' pour Marseille). Centre la carte sur cette commune.\n - nuance : code nuance quand metric='nuance' (ex: 'RN', 'LFI', 'ENS')\n - region : code région pour geography='commune' (ex: '93' pour PACA)\n\n Exemples :\n - Carte par famille, Bouches-du-Rhône : election_id='2024_legi_t1', department='13'\n - Carte score RN, Marseille : election_id='2024_legi_t1', commune='13055', metric='nuance', nuance='RN'\n - Carte nationale : election_id='2024_euro_t1', geography='commune'\n ",
"inputSchema": {
"properties": {
"canton": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Canton"
},
"circonscription": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Circonscription"
},
"commune": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Commune"
},
"department": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Department"
},
"election_id": {
"title": "Election Id",
"type": "string"
},
"geography": {
"default": "bv",
"title": "Geography",
"type": "string"
},
"metric": {
"default": "family",
"title": "Metric",
"type": "string"
},
"nuance": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Nuance"
},
"region": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Region"
}
},
"required": [
"election_id"
],
"title": "generate_mapArguments",
"type": "object"
},
"name": "generate_map",
"outputSchema": {
"properties": {
"result": {
"title": "Result",
"type": "string"
}
},
"required": [
"result"
],
"title": "generate_mapOutput",
"type": "object"
}
},
{
"description": "Requête les divisions administratives françaises.\n\n Actions : search_commune, get_commune, search_postal,\n list_epci, get_epci, list_cantons, list_departements, list_regions.\n ",
"inputSchema": {
"properties": {
"action": {
"title": "Action",
"type": "string"
},
"commune_code": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Commune Code"
},
"departement_code": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Departement Code"
},
"epci_code": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Epci Code"
},
"postal_code": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Postal Code"
},
"search_term": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Search Term"
}
},
"required": [
"action"
],
"title": "query_adminArguments",
"type": "object"
},
"name": "query_admin",
"outputSchema": {
"properties": {
"result": {
"title": "Result",
"type": "string"
}
},
"required": [
"result"
],
"title": "query_adminOutput",
"type": "object"
}
},
{
"description": "Requête les données DLP (composition sociale des candidats municipaux 2020).\n\n ~546 000 candidats dans ~10 000 communes (≥1 000 hab.).\n Classes : CDOM (dominant), CMOY (moyen), CSUB (subalterne), RET (retraité), AUTRES.\n Actions : summary, composition, parite, listes, candidats, professions, sortants.\n ",
"inputSchema": {
"properties": {
"action": {
"title": "Action",
"type": "string"
},
"classe": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Classe"
},
"commune_code": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Commune Code"
},
"departement_code": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Departement Code"
},
"search": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Search"
},
"sexe": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Sexe"
},
"sortants_only": {
"default": false,
"title": "Sortants Only",
"type": "boolean"
},
"tetes_only": {
"default": false,
"title": "Tetes Only",
"type": "boolean"
}
},
"required": [
"action"
],
"title": "query_dlpArguments",
"type": "object"
},
"name": "query_dlp",
"outputSchema": {
"properties": {
"result": {
"title": "Result",
"type": "string"
}
},
"required": [
"result"
],
"title": "query_dlpOutput",
"type": "object"
}
},
{
"description": "Requête les données électorales françaises (1999-2026).\n\n Niveaux territoriaux : NATIONAL (aucun filtre), RÉGIONAL (region_code),\n DÉPARTEMENTAL (departement_code), COMMUNAL (commune_code).\n\n Actions de base : list_elections, query_results, list_bureaux, query_bureau,\n query_by_bureau, rank_bureaux, list_circonscriptions, query_circonscription,\n list_cantons, query_canton, search_candidate, query_candidatures, etc.\n\n Actions « panel » (1 appel = analyse complète, évite les boucles) :\n - compare_elections : compare deux scrutins pour un territoire\n (election_id + compare_to_election + commune_code|departement_code,\n candidate_name optionnel).\n - query_all_circonscriptions : vainqueur de CHAQUE circonscription d'un\n territoire en un appel (election_id + commune_code|departement_code,\n législatives uniquement).\n - vote_reserve : score d'une famille + abstention par bureau de vote sur\n les scrutins récents comparables (commune_code + famille).\n - select_communes : sélectionne/classe des communes par critères géo +\n population + électoraux (region_code/departement_code/epci/commune_codes,\n population_min/max, commune_metric, condition, sort_by, limit, order ;\n commune_metric/condition nécessitent election_id). commune_metric accepte\n PLUSIEURS métriques séparées par des virgules — une colonne chacune, en\n un seul appel ; condition et sort_by portent alors sur la première.\n - cross_election_panel : évolution d'un sujet (famille ou nuance_code) par\n commune sur N scrutins (elections=ids séparés par des virgules + scope\n optionnel commune_code/departement_code/region_code/commune_codes ;\n SANS scope = national, panel complet en data_file). Renvoie aussi\n « ensemble » : score du périmètre entier par scrutin + delta, pondéré\n par les exprimés — ne pas boucler par département. famille et nuance_code\n acceptent PLUSIEURS sujets séparés par des virgules ('Gauche,Droite') :\n tous en un appel, agrégats dans « ensembles ». group_by='region'|\n 'departement' ajoute un agrégat pondéré PAR MAILLE dans le même appel —\n ne jamais boucler un appel par région.\n - bureau_breakdown : pivot par bureau (top_n nuances/blocs + participation,\n with_sociodem optionnel) pour commune_code + election_id.\n ",
"inputSchema": {
"properties": {
"action": {
"title": "Action",
"type": "string"
},
"bureau_code": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Bureau Code"
},
"bureau_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Bureau Id"
},
"by_family": {
"default": false,
"title": "By Family",
"type": "boolean"
},
"candidate_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Candidate Name"
},
"candidate_query": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Candidate Query"
},
"candidate_search": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Candidate Search"
},
"canton_code": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Canton Code"
},
"circonscription_code": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Circonscription Code"
},
"commune_code": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Commune Code"
},
"commune_codes": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Commune Codes"
},
"commune_metric": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Commune Metric"
},
"compare_to_election": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Compare To Election"
},
"condition": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Condition"
},
"departement_code": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Departement Code"
},
"election_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Election Id"
},
"elections": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Elections"
},
"epci": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Epci"
},
"famille": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Famille"
},
"family_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Family Name"
},
"group_by": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Group By"
},
"limit": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Limit"
},
"list_search": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "List Search"
},
"nuance_code": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Nuance Code"
},
"nuance_level": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Nuance Level"
},
"offset": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Offset"
},
"order": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Order"
},
"population_max": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Population Max"
},
"population_min": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Population Min"
},
"rank_metric": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Rank Metric"
},
"region_code": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Region Code"
},
"scrutin_type": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Scrutin Type"
},
"sort_by": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Sort By"
},
"top_n": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Top N"
},
"tour": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Tour"
},
"use_ferd_coding": {
"default": false,
"title": "Use Ferd Coding",
"type": "boolean"
},
"with_sociodem": {
"default": false,
"title": "With Sociodem",
"type": "boolean"
}
},
"required": [
"action"
],
"title": "query_electionsArguments",
"type": "object"
},
"name": "query_elections",
"outputSchema": {
"properties": {
"result": {
"title": "Result",
"type": "string"
}
},
"required": [
"result"
],
"title": "query_electionsOutput",
"type": "object"
}
},
{
"description": "Requête les élus de la République française (base BRÉF).\n\n Actions : search_elu, list_mandate_types, list_elus.\n ",
"inputSchema": {
"properties": {
"action": {
"title": "Action",
"type": "string"
},
"departement_code": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Departement Code"
},
"mandate_type": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Mandate Type"
},
"search_term": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Search Term"
}
},
"required": [
"action"
],
"title": "query_elusArguments",
"type": "object"
},
"name": "query_elus",
"outputSchema": {
"properties": {
"result": {
"title": "Result",
"type": "string"
}
},
"required": [
"result"
],
"title": "query_elusOutput",
"type": "object"
}
},
{
"description": "Requête les données socio-démographiques au niveau bureau de vote.\n\n Données INSEE RP 2022 + Filosofi 2021, interpolées IRIS→BDV.\n Actions : list_variables, profile, indices, rank, compare.\n ",
"inputSchema": {
"properties": {
"action": {
"title": "Action",
"type": "string"
},
"commune_code": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Commune Code"
},
"commune_codes": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Commune Codes"
},
"order": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Order"
},
"variable": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Variable"
}
},
"required": [
"action"
],
"title": "query_sociodemArguments",
"type": "object"
},
"name": "query_sociodem",
"outputSchema": {
"properties": {
"result": {
"title": "Result",
"type": "string"
}
},
"required": [
"result"
],
"title": "query_sociodemOutput",
"type": "object"
}
},
{
"description": "Exécute une requête SQL directe sur la base DuckDB (read-only).\n\n Tables principales :\n - general_results : résultats généraux par bureau de vote\n - candidats_results : résultats par candidat par bureau de vote\n - elections_disponibles : liste des élections (id_election, nb_bureaux, total_inscrits)\n - candidats_avec_nuances : candidats avec famille politique (si nuances enrichies)\n - resultats_par_famille : résultats agrégés par famille politique\n - communes, epci, departements, regions : divisions administratives\n - bv_sociodemographique : données socio-démo par bureau de vote\n\n ATTENTION — colonnes de general_results (noms avec espaces, à quoter) :\n id_election, id_brut_miom, \"Code du département\", \"Code de la commune\" (SANS préfixe dept, ex: '055' pour Marseille),\n \"Libellé de la commune\", Inscrits, Abstentions, Votants, Blancs, Nuls, Exprimés.\n\n PRÉFÉRER query_elections pour les analyses standard — query_sql est pour les requêtes ad hoc avancées.\n\n Exemple :\n SELECT id_election, ROUND(100.0 * SUM(Abstentions) / NULLIF(SUM(Inscrits), 0), 1) as abstention_pct\n FROM general_results WHERE \"Code du département\" = '13' AND \"Code de la commune\" = '055'\n GROUP BY id_election ORDER BY id_election DESC LIMIT 5\n ",
"inputSchema": {
"properties": {
"query": {
"title": "Query",
"type": "string"
}
},
"required": [
"query"
],
"title": "query_sqlArguments",
"type": "object"
},
"name": "query_sql",
"outputSchema": {
"properties": {
"result": {
"title": "Result",
"type": "string"
}
},
"required": [
"result"
],
"title": "query_sqlOutput",
"type": "object"
}
},
{
"description": "Simule les scénarios de fusion de listes municipales entre T1 et T2.\n\n Actions : 'status' (classer les listes après T1), 'simulate' (projections T2).\n Uniquement pour les élections municipales.\n ",
"inputSchema": {
"properties": {
"action": {
"title": "Action",
"type": "string"
},
"commune_code": {
"title": "Commune Code",
"type": "string"
},
"election_id": {
"title": "Election Id",
"type": "string"
},
"report_rate": {
"default": 0.75,
"title": "Report Rate",
"type": "number"
}
},
"required": [
"action",
"election_id",
"commune_code"
],
"title": "simulate_fusionsArguments",
"type": "object"
},
"name": "simulate_fusions",
"outputSchema": {
"properties": {
"result": {
"title": "Result",
"type": "string"
}
},
"required": [
"result"
],
"title": "simulate_fusionsOutput",
"type": "object"
}
},
{
"description": "Crée une visualisation Plotly (retourne le spec JSON).\n\n Deux modes :\n - Spec libre : fournir 'spec' (dict Plotly complet {data, layout})\n - Assisté : fournir chart_type + data + mappings\n\n Types supportés : bar, line, scatter, histogram, box, violin, heatmap,\n treemap, grouped_bar, stacked_bar, dumbbell, diverging_bar,\n dual_axis (x + y + y2), sankey (source + target + values),\n hemicycle (x=groupe, y=sièges), ternary (a + b + c = trois parts).\n Paramètres transversaux : subtitle (sous-titre technique),\n reference_line ({value, label, orientation}) pour un seuil/référence.\n ",
"inputSchema": {
"properties": {
"a": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "A"
},
"b": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "B"
},
"c": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "C"
},
"chart_type": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Chart Type"
},
"color": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Color"
},
"data": {
"anyOf": [
{
"items": {
"additionalProperties": true,
"type": "object"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Data"
},
"data_file": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Data File"
},
"path": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Path"
},
"reference_line": {
"anyOf": [
{
"additionalProperties": true,
"type": "object"
},
{
"type": "null"
}
],
"default": null,
"title": "Reference Line"
},
"size": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Size"
},
"source": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Source"
},
"spec": {
"anyOf": [
{
"additionalProperties": true,
"type": "object"
},
{
"type": "null"
}
],
"default": null,
"title": "Spec"
},
"subtitle": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Subtitle"
},
"target": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Target"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Title"
},
"values": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Values"
},
"x": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "X"
},
"y": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Y"
},
"y2": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Y2"
},
"z": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Z"
}
},
"title": "visualizeArguments",
"type": "object"
},
"name": "visualize",
"outputSchema": {
"properties": {
"result": {
"title": "Result",
"type": "string"
}
},
"required": [
"result"
],
"title": "visualizeOutput",
"type": "object"
}
}
]
}Verify it yourself
curl -s https://api.teppi.xyz/v1/evidence/sha256:6d4f260ccb8d84d8ed83606b1be4d3dbf51e11e7ca6b66c243d453d8503537b2 | sha256sum