Skip to main content
Glama
riadh-mnasri

FFE MCP

by riadh-mnasri
README.md
# FFE MCP

Serveur MCP qui permet à Claude d'interroger les données publiques de la Fédération Française des Échecs (echecs.asso.fr) directement en conversation : rechercher un joueur, lister les tournois d'un département, consulter la cadence et le classement d'un tournoi, suivre les résultats d'un joueur ronde par ronde.

## Un modèle à copier, pas un service

Comme [ecoledirecte-mcp](https://github.com/riadh-mnasri/ecoledirecte-mcp), ce projet n'est pas un service auquel tu te connectes : c'est un programme que tu installes et fais tourner chez toi. Ici, c'est même plus simple : les données FFE sont publiques, donc **aucun identifiant à fournir, aucun fichier `.env` à sécuriser**.

## Important : API non officielle

La FFE n'expose aucune API publique documentée. Ce serveur scrape les pages HTML publiques d'echecs.asso.fr. Conséquences concrètes :

- Le format des pages peut changer sans préavis. Si un outil commence à renvoyer une erreur "le site a probablement changé sa mise en page", le parseur (`src/domain/ffe-parsers.ts`) doit être mis à jour.
- En cas d'échec du live (site indisponible), chaque outil retombe automatiquement sur le dernier résultat mis en cache (dossier `~/.ffe-mcp/cache/`) en signalant qu'il s'agit de données potentiellement périmées.
- Merci de ne pas appeler les outils en boucle rapprochée : c'est un site public partagé par toute la communauté échiquéenne, pas une API taillée pour l'usage intensif.

### Ce qui a été vérifié par capture réelle (2026-09-10)

- `ListeJoueurs.aspx?Action=FFE` (POST `JoueurNom=<recherche>`) : recherche de licencié, colonnes NrFFE / nom / Elo standard + lettre d'origine (F=FIDE, N=national, E=estimé). Testé en direct sur le fichier des licenciés.
- `ListeTournois.aspx?Action=TOURNOICOMITE&ComiteRef=<departement>` : liste des tournois d'un département (le `ComiteRef` FFE correspond au code département pour la France métropolitaine). Testé en direct sur le 92.
- `FicheTournoi.aspx?Ref=<ref>` : cadence, nombre de rondes, annonce. Le nom et la ville du tournoi n'y sont volontairement pas extraits (sélecteurs non vérifiés), utiliser `lister_tournois` pour ces champs.
- `Resultats.aspx?URL=Tournois/Id/<ref>/<ref>&Action=Cl` : classement général après la dernière ronde publiée par l'organisateur (pas systématique, dépend du logiciel utilisé côté club).
- `Resultats.aspx?URL=Tournois/Id/<ref>/<ref>&Action=Ga` : grille américaine, résultats ronde par ronde d'un joueur précis (recherche par nom exact tel qu'affiché par la FFE).

### Ce qui reste à vérifier

- Les colonnes Elo rapide et blitz de la recherche de joueur (présentes sur la page mais pas encore parsées).
- Une éventuelle fiche joueur individuelle par NrFFE (historique complet, progression Elo), pas encore identifiée avec certitude.

## Outils exposés

| Outil | Description |
|---|---|
| `rechercher_joueur` | Recherche un joueur par nom, retourne NrFFE + Elo standard |
| `lister_tournois` | Liste les tournois homologués d'un département |
| `details_tournoi` | Cadence, nombre de rondes, annonce d'un tournoi |
| `classement_tournoi` | Classement général après la dernière ronde publiée |
| `resultats_joueur_tournoi` | Résultats ronde par ronde d'un joueur dans un tournoi |

## Stack

- Node.js + TypeScript, exécuté en local uniquement (pas de serveur HTTP, pas de déploiement)
- `@modelcontextprotocol/sdk`, transport stdio
- `zod` pour la validation des schémas de sortie
- `vitest` pour les tests (fixtures HTML réelles capturées sur echecs.asso.fr)

## Installation

```bash
git clone https://github.com/riadh-mnasri/ffe-mcp.git
cd ffe-mcp
npm install
npm run build
```

## Connexion à Claude Desktop / Claude Code

Ajouter dans la configuration MCP :

```json
{
  "mcpServers": {
    "ffe": {
      "command": "node",
      "args": ["/chemin/vers/ffe-mcp/dist/index.js"]
    }
  }
}
```

## Développement

```bash
npm run dev    # lance le serveur en TypeScript direct (tsx)
npm test       # tests unitaires (parseurs HTML)
npm run build  # compilation TypeScript
```

## Licence

MIT, © 2026 Riadh MNASRI

TDQS

A4.1/5.0

Scored across 5 tools

Disambiguation5/5

Every tool targets a distinct query: player search, tournament listing, tournament details, tournament standings, and individual player results. There is no meaningful overlap between any two tools.

Naming Consistency4/5

All names are lowercase snake_case in French and clearly readable. The slight split between verb-led names (rechercher_joueur, lister_tournois) and noun-led names (details_tournoi, classement_tournoi, resultats_joueur_tournoi) is a minor inconsistency rather than a real problem.

Tool Count5/5

Five tools is well-scoped for a read-only French chess federation data server. Each tool earns its place and there is no redundant tooling.

Completeness4/5

The set covers the central public workflows: searching players, discovering tournaments, getting tournament metadata, viewing final standings, and looking up individual round-by-round results. Minor gaps such as a full player profile or tournament pairings per round exist, but the core surface is coherent and usable.

Maintenance

ActivityMaintained
ResponsivenessNo issues