FFBB MCP Server
<div align="center">
# đ FFBB MCP Server
**Le basket français officiel, directement dans vos assistants IA.**
Serveur [MCP](https://modelcontextprotocol.io) pour consulter calendriers, classements, bilans, résultats, scores live et rÚglements officiels de la FFBB (Fédération Française de Basketball).
> đșđž **English Summary**: Official Model Context Protocol (MCP) server for French Basketball (FFBB). Connect your AI assistants (Claude, Cursor, Copilot, ChatGPT, Antigravity) to live French basketball schedules, standings, scores, team records, club directories, and official federal regulations via Streamable HTTP or Stdio.
[đ Site](https://ffbb.desimone.fr) ·
[𧩠Extension VS Code](https://github.com/nickdesi/FFBB-MCP-Server/releases/latest) ·
[đ Documentation](https://ffbb.desimone.fr/#tools) ·
[đŹ Support](SUPPORT.md)
<br />
[](https://github.com/nickdesi/FFBB-MCP-Server/releases/latest)
[](https://www.python.org)
[](https://github.com/nickdesi/FFBB-MCP-Server/actions/workflows/ci.yml)
[](https://modelcontextprotocol.io)
[](https://glama.ai/mcp/servers/nickdesi/FFBB-MCP-Server)
[](LICENSE)
[](https://github.com/nickdesi/FFBB-MCP-Server/stargazers)
</div>
---
<p align="center">
â <b>Si ce serveur MCP FFBB vous est utile pour vos assistants IA, n'hĂ©sitez pas Ă laisser une Ă©toile sur GitHub !</b> â
</p>
---
## ⥠Démarrage express (< 2 min)
> [!TIP]
> **Aucune installation requise** : le serveur est hébergé publiquement. Ajoutez simplement l'endpoint MCP à votre client :
```text
https://ffbb.desimone.fr/mcp
```
Puis posez vos questions en langage naturel :
> _« Quel est le prochain match des U15 de mon club (nommer le club) ? »_
> _« Donne-moi le classement de la poule des U15M2 du Stade Clermontois et le dernier résultat. »_
> _« Y a-t-il des matchs en direct ce soir ? »_
đ Voir la section [Installation](#-installation) pour brancher l'endpoint sur VS Code, Claude, Cursor, etc.
---
## ⚠Fonctionnalités
- đïž **Calendriers & rĂ©sultats** â matchs passĂ©s et Ă venir, par club ou par Ă©quipe.
- đ **Classements** â poules complĂštes avec points, diffĂ©rentiel et forme.
- đ **Bilans agrĂ©gĂ©s** â toutes phases confondues en un seul appel.
- đŽ **Scores live** â matchs en cours, mis Ă jour toutes les 30 s.
- đ **Recherche universelle** â clubs, compĂ©titions, salles, engagements.
- đ **OptimisĂ© pour les LLM** â rĂ©ponses agrĂ©gĂ©es et cache TTL pour rĂ©duire le contexte et le nombre d'appels.
---
## đ Installation
### VS Code / GitHub Copilot
**Option recommandĂ©e** â installer l'extension **FFBB Basketball MCP** depuis les [releases](https://github.com/nickdesi/FFBB-MCP-Server/releases/latest), puis ouvrir Copilot Chat en mode agent.
**Alternative sans extension** â [â Installer FFBB MCP en un clic](vscode:mcp/install?%7B%22name%22%3A%22ffbb-mcp%22%2C%22type%22%3A%22http%22%2C%22url%22%3A%22https%3A%2F%2Fffbb.desimone.fr%2Fmcp%22%7D)
### Claude Desktop
<details>
<summary><b>Option A â Via l'interface de Claude</b> (recommandĂ©, sans prĂ©requis)</summary>
<br />
1. Ouvrez les **ParamĂštres** de Claude, puis **Connecteurs** (ou **Plugins**).
2. Cliquez sur **Ajouter un connecteur personnalisé**.
3. Renseignez l'URL publique `https://ffbb.desimone.fr/mcp` et validez.
</details>
<details>
<summary><b>Option B â Via <code>claude_desktop_config.json</code></b> (nĂ©cessite Node.js)</summary>
<br />
Claude Desktop n'accepte que le transport `stdio` local : on utilise donc le bridge SSE officiel via `npx`.
> [!WARNING]
> **Prérequis : Node.js** (inclut `npm` et `npx`). Sans Node.js, privilégiez l'**Option A**.
```json
{
"mcpServers": {
"ffbb": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/client-sse", "https://ffbb.desimone.fr/mcp"]
}
}
}
```
</details>
### Cursor / autres clients MCP
Configurez un serveur MCP distant :
| Champ | Valeur |
| --- | --- |
| Type | `Streamable HTTP` |
| URL | `https://ffbb.desimone.fr/mcp` |
### Google Antigravity
Configurez directement l'URL distante dans `mcp_config.json` via la directive native `serverUrl` :
```json
{
"mcpServers": {
"ffbb_mcp": {
"serverUrl": "https://ffbb.desimone.fr/mcp"
}
}
}
```
---
## đ§° Outils principaux
| Outil | Usage |
| --- | --- |
> [!NOTE]
> Référence complÚte des paramÚtres : [`docs/TOOLS_REFERENCE.md`](docs/TOOLS_REFERENCE.md).
---
## đ Instance publique
Endpoint MCP (transport **Streamable HTTP**) :
```text
https://ffbb.desimone.fr/mcp
```
| Endpoint | URL |
| --- | --- |
| đ Dashboard | `https://ffbb.desimone.fr/dashboard` |
| đ MĂ©triques | `https://ffbb.desimone.fr/metrics.json` |
| â€ïž SantĂ© | `https://ffbb.desimone.fr/health` |
---
## đïž Architecture
```mermaid
flowchart LR
A[Client MCP<br/>Claude · Cursor · Antigravity] -->|Streamable HTTP / Stdio| B[FFBB MCP Server<br/>MCPServer]
B --> C[Services métier<br/>Cache SWR & Agrégation]
C --> D[ffbb-data-client<br/>SDK Python]
D --> E[(API FFBB · Meilisearch · Directus)]
```
Points clés :
- **Double transport** : Streamable HTTP distant (spec `2026-07-28`, Stateless Core) ou Stdio local (`uvx`) ;
- **SDK Python dĂ©couplĂ©** : RequĂȘtes vers les sources fĂ©dĂ©rales et parsing Pydantic v2 dĂ©lĂ©guĂ©s Ă `ffbb-data-client` ; le serveur MCP ne les interroge pas directement ;
- **Agrégation composite** : 12 outils optimisés pour réduire les allers-retours et le contexte LLM ;
- **Cache intelligent & SWR** : *Stale-While-Revalidate* avec TTL par type de donnée (30 s lives, 1 h bilans, 24 h clubs) ;
- **Observabilité complÚte** : Dashboard HTML, métriques Prometheus, snapshot JSON et healthcheck intégrés.
Détails : [`docs/ARCHITECTURE.md`](docs/ARCHITECTURE.md) et [`docs/PERFORMANCE.md`](docs/PERFORMANCE.md).
---
## đ» DĂ©veloppement local
```bash
uv sync --extra dev # installer les dépendances
uv run ruff format . # formater
uv run ruff check --fix . # linter
uv run mypy src # vérifier les types
uv run pytest # lancer les tests
```
Voir [`CONTRIBUTING.md`](CONTRIBUTING.md) pour les rĂšgles de contribution.
---
## đ§Ș Tests
```bash
uv run pytest # tests unitaires + couverture
uv run pytest tests/ # ciblé
```
Le pipeline CI (`.github/workflows/ci.yml`) exécute ruff, mypy, pytest et le contrÎle de couverture à chaque push/PR.
---
## đ Documentation
- [Exemples dâusage](docs/EXAMPLES.md)
- [Référence des outils](docs/TOOLS_REFERENCE.md)
- [Architecture](docs/ARCHITECTURE.md)
- [Performance et cache](docs/PERFORMANCE.md)
- [Déploiement Dokploy & Zoraxy](docs/DEPLOYMENT_DOKPLOY_ZORAXY.md)
---
## đ€ CommunautĂ©
- [Contribuer](CONTRIBUTING.md)
- [Code de conduite](CODE_OF_CONDUCT.md)
- [Support](SUPPORT.md)
- [Sécurité](SECURITY.md)
---
## â DĂ©pannage
| SymptĂŽme | Cause probable | Solution |
| --- | --- | --- |
| `Missing session ID` / `deadline exceeded` | Wrapper `mcp-remote` ou mauvais transport | Utiliser `serverUrl` natif dans `mcp_config.json` (voir [Google Antigravity](#google-antigravity)) |
| Claude Desktop refuse l'URL `http` | Claude Desktop impose `stdio` | Utiliser le bridge `@modelcontextprotocol/client-sse` via `npx` (voir [Claude Desktop](#claude-desktop)) |
| Données live obsolÚtes | Cache TTL | Attendre le rafraßchissement (†30 s) ou interroger l'endpoint `/health` |
---
## đ Stargazers & CommunautĂ©
<div align="center">
[](https://star-history.com/#nickdesi/FFBB-MCP-Server&Date)
</div>
---
<p align="center">
<i>Projet non officiel, non affilié à la Fédération Française de BasketBall.</i>
</p>
TDQS
Scored across 18 tools
Several tools have strongly overlapping purposes, especially ffbb_bilan, ffbb_bilan_saison, and ffbb_team_summary, which all return team bilan data. ffbb_resolve_team and ffbb_find_team_candidates also serve nearly the same disambiguation role, making it easy for an agent to select the wrong tool despite the extensive 'use X instead of Y' notes.
All tools share the ffbb_ prefix and snake_case, which is good, but the pattern is mixed: some are noun-style (ffbb_bilan, ffbb_lives, ffbb_head_to_head) while others are verb-style (ffbb_search, ffbb_get, ffbb_resolve_team, ffbb_explain_tiebreak_rules). The naming is readable but not predictable enough to infer tool purpose from the name alone.
18 tools is slightly over the ideal 3-15 range, but the scope is broad: search, team resolution, results, standings, regulations, live feeds, and head-to-head analysis. Each subdomain has a small dedicated cluster, so the count feels justified rather than bloated.
The server covers the main read-only FFBB query domain well: search, team info, results, schedules, standings, regulations, and live data. Minor gaps existâsuch as no dedicated standalone 'get standings for competition X' tool outside ffbb_club/ffbb_getâbut most real user queries can be answered with the available surface.