FFE MCP
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@FFE MCPFind the Elo of Jean Dupont in the FFE database"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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, 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.
Related MCP server: Lichess MCP
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(POSTJoueurNom=<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 (leComiteRefFFE 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), utiliserlister_tournoispour 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 |
| Recherche un joueur par nom, retourne NrFFE + Elo standard |
| Liste les tournois homologués d'un département |
| Cadence, nombre de rondes, annonce d'un tournoi |
| Classement général après la dernière ronde publiée |
| 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 stdiozodpour la validation des schémas de sortievitestpour les tests (fixtures HTML réelles capturées sur echecs.asso.fr)
Installation
git clone https://github.com/riadh-mnasri/ffe-mcp.git
cd ffe-mcp
npm install
npm run buildConnexion à Claude Desktop / Claude Code
Ajouter dans la configuration MCP :
{
"mcpServers": {
"ffe": {
"command": "node",
"args": ["/chemin/vers/ffe-mcp/dist/index.js"]
}
}
}Développement
npm run dev # lance le serveur en TypeScript direct (tsx)
npm test # tests unitaires (parseurs HTML)
npm run build # compilation TypeScriptLicence
MIT, © 2026 Riadh MNASRI
Available Tools
5 toolsclassement_tournoiA
Recupere le classement general publie d'un tournoi FFE apres la derniere ronde jouee, si l'organisateur a publie ses resultats sur echecs.asso.fr (ce n'est pas systematique).
| Name | Required | Description | Default |
|---|---|---|---|
| ref | Yes | Reference du tournoi (champ ref renvoye par lister_tournois) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden for behavioral disclosure. It usefully reveals that the ranking is only returned if the organizer published results on echecs.asso.fr and that this is 'pas systematique', suggesting the result may be absent. But it does not describe error behavior, whether an empty result or exception occurs, or any other technical traits like auth requirements or rate limits.
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 one sentence that is front-loaded with the action and resource, followed by the conditional data-availability clause. Every part adds necessary information; there is no filler or repetition.
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?
This is a low-complexity tool with a single documented parameter, providing a description that is nearly sufficient. It lacks an explicit statement of the output format or what happens when the ranking is not published, but given the simplicity and the clear intent, the main missing piece is the exact response/error style rather than a core use-case gap.
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?
The input schema already has 100% descriptive coverage for the single `ref` parameter, explaining it is a tournament reference returned by `lister_tournois`. The tool description itself adds no additional parameter-meaning, so a solid baseline score is appropriate.
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 names a specific verb ('recupere'), a precise resource ('classement general publie d'un tournoi FFE'), and adds timing and publication constraints ('apres la derniere ronde jouee', 'si l'organisateur a publie ses resultats'). It also distinguishes the resource from the sibling tools such as details_tournoi and resultats_joueur_tournoi, making the tool's role clear.
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 gives an implicit usage context: it should be used when a published general ranking of an FFE tournament is expected, after the last round, and only if the organizer published results. However, it does not explicitly mention when to prefer another sibling tool or when not to use this one, so guidance beyond the condition is missing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
details_tournoiA
Recupere la cadence (standard/rapide/blitz), le nombre de rondes et l'annonce d'un tournoi FFE a partir de sa reference (voir lister_tournois pour obtenir une reference).
| Name | Required | Description | Default |
|---|---|---|---|
| ref | Yes | Reference du tournoi (champ ref renvoye par lister_tournois) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. 'Recupere' implies a read-only retrieval, and the description identifies the returned data, but it does not explicitly address side effects, error cases, or any special prerequisites beyond obtaining a reference.
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 a single compact sentence that states what is retrieved and where to get the input. Every clause is useful, and the cross-reference to lister_tournois is placed naturally without padding.
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 exactly one required parameter, no output schema, and no annotations. The description covers the input source, the required argument, and the three meaningful output fields, so an agent has enough to call it 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 description coverage is 100%: the single required parameter 'ref' is already described in the schema as the reference returned by lister_tournois. The description essentially repeats that information, adding no new format or constraint 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 specifies a clear verb ('Recupere') and a precise resource: cadence, number of rounds, and announcement of an FFE tournament. It also mentions how to obtain the required reference via lister_tournois, which helps distinguish this details-fetching tool from the sibling listing, classification, and results 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 gives a clear usage sequence by pointing to lister_tournois as the source for a valid reference. It does not explicitly state when to avoid this tool in favor of classement_tournoi or resultats_joueur_tournoi, but the intended context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lister_tournoisA
Liste les tournois homologues FFE a venir (ou recents) pour un departement francais donne (comite FFE = code departement, ex. 92 pour les Hauts-de-Seine).
| Name | Required | Description | Default |
|---|---|---|---|
| departement | Yes | Code departement francais a 2 chiffres (ou 2A/2B pour la Corse), ex. "92" |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It adds behavioral context by mentioning 'a venir (ou recents)'] and 'homologation FFE', but it doesn't disclose the return format, pagination, or whether the list only returns identifiers and names. The description is not misleading but leaves gaps for agent to infer.
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 a single sentence with the main action 'Liste les tournois…' front-loaded. It includes a concrete example in parentheses, adds no redundant explanation, and every word serves a purpose. It's direct and efficient.
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?
For a straightforward list tool with one parameter, the description explains purpose and scope, but it doesn't describe what fields the returned list contains (e.g., tournament ID, name, date). With no output schema, this is a gap; an agent may not know whether it can call details_tournoi afterward without first calling this tool. Overall, it's functional but not complete without more information.
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?
The schema already contains a comprehensive description of the 'departement' parameter (type, example, corse exception). The description's parenthetical '(comite FFE = code departement, ex. 92…)' adds no new meaning beyond what the schema states; thus, with 100% coverage, the baseline score of 3 is appropriate.
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 a specific action: 'Liste les tournois homologues FFE a venir (ou recents)' – listing tournaments for a given French department. It clarifies scope and provides an example ('92 pour les Hauts-de-Seine'), which clearly differentiates it from sibling tools like details_tournoi or classement_tournoi.
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 clearly implies when to use the tool: to list approved FFE tournaments for a department, including upcoming or recent ones. It doesn't explicitly exclude alternative tools but the use case is unambiguous. A 5 would require naming siblings or explicitly saying 'when not to use', but this is close.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rechercher_joueurA
Recherche un joueur dans le fichier des licencies de la Federation Francaise des Echecs (FFE) par nom de famille (ou debut de nom). Retourne le numero FFE (NrFFE) et l'Elo standard publie de chaque joueur trouve.
| Name | Required | Description | Default |
|---|---|---|---|
| nom | Yes | Nom (ou debut de nom) du joueur a rechercher |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It does disclose core behavior: search by full or partial family name and return FFE number and Elo. However, it omits potentially relevant behavioral details such as case/accent handling, result ordering or limits, and behavior when no player matches.
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 a single compact sentence with the purpose front-loaded and the return value stated. There is no filler, repetition, or unnecessary detail.
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?
For a one-parameter search tool with no output schema, the description adequately covers the input semantics and return fields. Minor missing details like result ordering or empty-result behavior are non-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 100% and the schema already defines 'nom' as the name or beginning of the name. The description reinforces this with 'nom de famille' and adds return-value context, but it does not materially extend the parameter's 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 names a specific verb ('Recherche'), a precise resource (FFE licensed players file), and a clear search criterion (last name or prefix). It also states what is returned (NrFFE and published Elo), making the tool's purpose unambiguous and distinct from the tournament-related sibling 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 clearly implies when to use this tool: whenever a player needs to be looked up by name in the FFE database. It does not explicitly list exclusions or alternatives, but the sibling tools are all tournament-oriented, so the intended context is clear enough without explicit when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resultats_joueur_tournoiA
Recupere les resultats ronde par ronde (couleur, adversaire, victoire/nulle/defaite) d'un joueur precis dans un tournoi FFE donne, a partir de la grille americaine publiee par l'organisateur.
| Name | Required | Description | Default |
|---|---|---|---|
| nom | Yes | Nom exact du joueur tel qu'affiche par la FFE, ex. "DUPONT Jean" | |
| ref | Yes | Reference du tournoi (champ ref renvoye par lister_tournois) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does add useful behavioral context by disclosing the data source ('grille américaine publiée par l'organisateur') and the output fields. However, it does not mention exact-match behavior for the player name, error handling, or what happens if the player or tournament is not found.
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?
A single dense, front-loaded sentence. The main purpose and output content come first, and the data-source clause adds useful context without bloating the description.
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?
There is no output schema, so the description takes on the responsibility of explaining the return content, which it does: color, opponent, and win/draw/loss per round. It is sufficient for a focused lookup tool, though it omits failure-mode and not-found behavior.
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 100%, so the schema already documents both parameters. The description only restates the general concepts of 'player' and 'tournament' without adding format details or constraints beyond what the schema provides.
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 uses a specific verb ('Récupère') and names the exact resource: round-by-round results (color, opponent, result) for a specific player in a given FFE tournament. This clearly distinguishes it from sibling tools like classement_tournoi, which would provide standings rather than player-specific game-by-game results.
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 clearly states when to use it: when you need a specific player's round-by-round results in a specific tournament. It does not explicitly name alternatives or exclusion criteria, but its scope is precise enough for an agent to select it over lister_tournois, details_tournoi, or classement_tournoi.
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.
5 tool updates
v0.1.0- First observed
classement_tournoi - First observed
details_tournoi - First observed
lister_tournois - First observed
rechercher_joueur - First observed
resultats_joueur_tournoi
TDQS
Scored across 5 tools
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.
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.
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.
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
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
Chess MCP for Claude: engine analysis, attack maps, game review. One URL, no install.
Teamfight Tactics data & AI coaching for Claude and ChatGPT — 19 tools, built-in Riot key.
Live SEO workflow tools for Claude Code, Codex, and AI agents.
Lichess public API: players, ratings, eval, tablebase, opening explorer
Related MCP Servers
- AlicenseBqualityBmaintenanceProvides access to Chess.com player data, game records, and public information through standardized MCP interfaces, allowing AI assistants to search and analyze chess information.1088MIT
- AlicenseNot gradedqualityDmaintenanceEnables natural language interaction with Lichess chess platform to play games, analyze positions, manage challenges and tournaments, and interact with other players through Claude Desktop.19MIT
- AlicenseBqualityDmaintenanceProvides Chess.com player data integration, enabling AI assistants to fetch real-time chess player profiles and comprehensive statistics including ratings, game counts, and performance metrics from Chess.com's public API.2MIT
- AlicenseAqualityDmaintenanceConnects Claude to Lichess for playing chess games, analyzing positions with Stockfish cloud evaluation, and solving puzzles. Supports real-time gameplay including moves, challenges, draw offers, and accessing user profiles and game history.2819MIT