Skip to main content
Glama
nickdesi

FFBB MCP Server

Bilan complet toutes phases

ffbb_bilan
Read-onlyIdempotent

Retrieve a team's full season record (wins, losses, draws, points, phases) in one call. Answers questions like 'what is the record of X?' or 'results for U11M1'.

Instructions

Bilan complet d'une équipe toutes phases confondues en UN seul appel (V/D/N, paniers, phases).

Outil prioritaire pour 'quel est le bilan de X ?' ou 'résultats de U11M1'.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
poule_idNoID FFBB de la poule pour désambiguïser.
categorieNoCatégorie/genre/numéro (ex: 'U11M1', 'Senior').
club_nameNoNom du club (ex: 'Stade Clermontois', 'ASVEL'). Requis si organisme_id absent.
season_idNoID de la saison FFBB (optionnel).
organisme_idNoID FFBB du club (ex: '9326' ou 'ARA0063058'). Requis si club_name absent.
engagement_idNoID FFBB de l'engagement (prioritaire pour désambiguïser).
force_refreshNoSi True, contourne le cache.
numero_equipeNoNuméro d'équipe (ex: 1, 2).
competition_idNoID FFBB de la compétition pour désambiguïser.
competition_typeNoType de compétition ('PLAT', 'COUPE', etc.) pour désambiguïser.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed8 schema fields changedv1.13.0
    • changedInput schema / anyOf
      Previous value: -[
      -  {
      -    "required": [
      -      "club_name"
      -    ]
      -  },
      -  {
      -    "required": [
      -      "organisme_id"
      -    ]
      -  }
      -]New value: +[
      +  {
      +    "required": [
      +      "organisme_id"
      +    ]
      +  },
      +  {
      +    "required": [
      +      "club_name"
      +    ]
      +  },
      +  {
      +    "required": [
      +      "engagement_id"
      +    ]
      +  },
      +  {
      +    "required": [
      +      "poule_id"
      +    ]
      +  },
      +  {
      +    "required": [
      +      "competition_id"
      +    ]
      +  }
      +]
    • changedInput schema / properties / club_name / description
      Previous value: -"Nom du club (ex: 'Stade Clermontois', 'ASVEL')."New value: +"Nom du club (ex: 'Stade Clermontois', 'ASVEL'). Requis si organisme_id absent."
    • addedInput schema / properties / competition_id
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "integer"
      +    },
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "ID FFBB de la compétition pour désambiguïser.",
      +  "title": "Competition Id"
      +}
    • addedInput schema / properties / competition_type
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Type de compétition ('PLAT', 'COUPE', etc.) pour désambiguïser.",
      +  "title": "Competition Type"
      +}
    • addedInput schema / properties / engagement_id
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "integer"
      +    },
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "ID FFBB de l'engagement (prioritaire pour désambiguïser).",
      +  "title": "Engagement Id"
      +}
    • changedInput schema / properties / organisme_id / description
      Previous value: -"ID FFBB du club (ex: 9326)."New value: +"ID FFBB du club (ex: '9326' ou 'ARA0063058'). Requis si club_name absent."
    • addedInput schema / properties / poule_id
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "integer"
      +    },
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "ID FFBB de la poule pour désambiguïser.",
      +  "title": "Poule Id"
      +}
    • addedInput schema / properties / season_id
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "integer"
      +    },
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "ID de la saison FFBB (optionnel).",
      +  "title": "Season Id"
      +}
  2. Changed6 schema fields changedv1.9.0
    • addedInput schema / anyOf
      Added value: +[
      +  {
      +    "required": [
      +      "club_name"
      +    ]
      +  },
      +  {
      +    "required": [
      +      "organisme_id"
      +    ]
      +  }
      +]
    • changedInput schema / properties / categorie / description
      Previous value: -"Catégorie + genre + numéro d'équipe (ex: 'U11M1', 'U13F2', 'U15M', 'Senior')."New value: +"Catégorie/genre/numéro (ex: 'U11M1', 'Senior')."
    • changedInput schema / properties / force_refresh / description
      Previous value: -"Si True, contourne le cache pour récupérer des données fraîches."New value: +"Si True, contourne le cache."
    • changedInput schema / properties / numero_equipe / description
      Previous value: -"Numéro d'équipe facultatif (ex: 1, 2)."New value: +"Numéro d'équipe (ex: 1, 2)."
    • changedInput schema / properties / organisme_id / description
      Previous value: -"ID FFBB du club (alternative plus rapide à club_name)."New value: +"ID FFBB du club (ex: 9326)."
    • changedOutput schema / (root)
      Previous value: -{
      -  "$defs": {
      -    "BilanResponse": {
      -      "description": "Réponse structurée et typée pour le bilan d'une équipe.",
      -      "properties": {
      -        "_meta": {
      -          "additionalProperties": true,
      -          "description": "Métadonnées de fraîcheur et de cache.",
      -          "title": "Meta",
      -          "type": "object"
      -        },
      -        "bilan_total": {
      -          "$ref": "#/$defs/BilanTotal",
      -          "description": "Totaux cumulés toutes phases."
      -        },
      -        "categorie": {
      -          "description": "Catégorie d'âge/genre.",
      -          "title": "Categorie",
      -          "type": "string"
      -        },
      -        "club": {
      -          "description": "Nom officiel du club.",
      -          "title": "Club",
      -          "type": "string"
      -        },
      -        "competitions_incluses": {
      -          "description": "Liste des noms de compétitions incluses dans le bilan.",
      -          "items": {
      -            "type": "string"
      -          },
      -          "title": "Competitions Incluses",
      -          "type": "array"
      -        },
      -        "dynamique": {
      -          "anyOf": [
      -            {
      -              "$ref": "#/$defs/FormeRecente"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ],
      -          "default": null,
      -          "description": "Dynamique et forme récente de l'équipe principale sur les 5 derniers matchs."
      -        },
      -        "equipes_bilan": {
      -          "additionalProperties": true,
      -          "description": "Bilans ventilés par numéro d'équipe.",
      -          "title": "Equipes Bilan",
      -          "type": "object"
      -        },
      -        "phase_courante": {
      -          "anyOf": [
      -            {
      -              "$ref": "#/$defs/PhaseBilan"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ],
      -          "default": null,
      -          "description": "Détails de la dernière phase en cours."
      -        },
      -        "phases": {
      -          "description": "Liste de toutes les phases jouées.",
      -          "items": {
      -            "$ref": "#/$defs/PhaseBilan"
      -          },
      -          "title": "Phases",
      -          "type": "array"
      -        },
      -        "profil_avance": {
      -          "anyOf": [
      -            {
      -              "additionalProperties": true,
      -              "type": "object"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ],
      -          "default": null,
      -          "description": "Profil tactique avancé : rangs attaque/défense, style de jeu, clutch index et bilans domicile/extérieur.",
      -          "title": "Profil Avance"
      -        },
      -        "saison_terminee": {
      -          "default": true,
      -          "description": "Indique si la saison est terminée pour cette équipe (toutes les phases jouées).",
      -          "title": "Saison Terminee",
      -          "type": "boolean"
      -        }
      -      },
      -      "required": [
      -        "club",
      -        "categorie",
      -        "bilan_total"
      -      ],
      -      "title": "BilanResponse",
      -      "type": "object"
      -    },
      -    "BilanTotal": {
      -      "description": "Statistiques cumulées d'une équipe (victoires, défaites, paniers).",
      -      "properties": {
      -        "difference": {
      -          "default": 0,
      -          "description": "Différence de paniers (marqués - encaissés).",
      -          "title": "Difference",
      -          "type": "integer"
      -        },
      -        "gagnes": {
      -          "default": 0,
      -          "description": "Nombre de matchs gagnés.",
      -          "title": "Gagnes",
      -          "type": "integer"
      -        },
      -        "match_joues": {
      -          "default": 0,
      -          "description": "Nombre de matchs joués.",
      -          "title": "Match Joues",
      -          "type": "integer"
      -        },
      -        "nuls": {
      -          "default": 0,
      -          "description": "Nombre de matchs nuls.",
      -          "title": "Nuls",
      -          "type": "integer"
      -        },
      -        "paniers_encaisses": {
      -          "default": 0,
      -          "description": "Total des paniers encaissés.",
      -          "title": "Paniers Encaisses",
      -          "type": "integer"
      -        },
      -        "paniers_marques": {
      -          "default": 0,
      -          "description": "Total des paniers marqués.",
      -          "title": "Paniers Marques",
      -          "type": "integer"
      -        },
      -        "perdus": {
      -          "default": 0,
      -          "description": "Nombre de matchs perdus.",
      -          "title": "Perdus",
      -          "type": "integer"
      -        }
      -      },
      -      "title": "BilanTotal",
      -      "type": "object"
      -    },
      -    "FormeRecente": {
      -      "description": "Indicateur complet de dynamique et de forme récente (5 derniers matchs).",
      -      "properties": {
      -        "defaites_5_derniers": {
      -          "default": 0,
      -          "description": "Nombre de défaites sur les 5 derniers matchs.",
      -          "title": "Defaites 5 Derniers",
      -          "type": "integer"
      -        },
      -        "diff_moyenne_5": {
      -          "default": 0,
      -          "description": "Différentiel moyen de points sur les 5 derniers matchs.",
      -          "title": "Diff Moyenne 5",
      -          "type": "number"
      -        },
      -        "forme": {
      -          "description": "Résultats des 5 derniers matchs par ordre chronologique (ex: ['V', 'V', 'D', 'V', 'V']).",
      -          "items": {
      -            "type": "string"
      -          },
      -          "title": "Forme",
      -          "type": "array"
      -        },
      -        "forme_str": {
      -          "default": "",
      -          "description": "Représentation texte compacte de la forme (ex: 'V-V-D-V-V').",
      -          "title": "Forme Str",
      -          "type": "string"
      -        },
      -        "matchs": {
      -          "description": "Détail des matchs récents analysés.",
      -          "items": {
      -            "$ref": "#/$defs/MatchForme"
      -          },
      -          "title": "Matchs",
      -          "type": "array"
      -        },
      -        "meilleure_victoire": {
      -          "anyOf": [
      -            {
      -              "type": "string"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ],
      -          "default": null,
      -          "description": "Plus large victoire récente (ex: '+24 vs ASPTT (84-60)').",
      -          "title": "Meilleure Victoire"
      -        },
      -        "nuls_5_derniers": {
      -          "default": 0,
      -          "description": "Nombre de nuls sur les 5 derniers matchs.",
      -          "title": "Nuls 5 Derniers",
      -          "type": "integer"
      -        },
      -        "pire_defaite": {
      -          "anyOf": [
      -            {
      -              "type": "string"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ],
      -          "default": null,
      -          "description": "Plus lourde défaite récente (ex: '-12 vs US Chauriat (62-74)').",
      -          "title": "Pire Defaite"
      -        },
      -        "pts_encaisses_moyenne_5": {
      -          "default": 0,
      -          "description": "Moyenne de points encaissés par match sur les 5 derniers matchs.",
      -          "title": "Pts Encaisses Moyenne 5",
      -          "type": "number"
      -        },
      -        "pts_marques_moyenne_5": {
      -          "default": 0,
      -          "description": "Moyenne de points marqués par match sur les 5 derniers matchs.",
      -          "title": "Pts Marques Moyenne 5",
      -          "type": "number"
      -        },
      -        "ratio_victoires_5_derniers": {
      -          "default": 0,
      -          "description": "Pourcentage de victoires sur les 5 derniers matchs (0-100%).",
      -          "title": "Ratio Victoires 5 Derniers",
      -          "type": "number"
      -        },
      -        "serie_actuelle": {
      -          "$ref": "#/$defs/SerieEnCours",
      -          "description": "Série globale en cours toutes compétitions."
      -        },
      -        "serie_domicile": {
      -          "$ref": "#/$defs/SerieEnCours",
      -          "description": "Série en cours pour les matchs à domicile."
      -        },
      -        "serie_exterieur": {
      -          "$ref": "#/$defs/SerieEnCours",
      -          "description": "Série en cours pour les matchs à l'extérieur."
      -        },
      -        "tendance": {
      -          "default": "Stable ➡️",
      -          "description": "Tendance de la forme ('En hausse ↗️', 'Stable ➡️', 'En baisse ↘️').",
      -          "title": "Tendance",
      -          "type": "string"
      -        },
      -        "victoires_5_derniers": {
      -          "default": 0,
      -          "description": "Nombre de victoires sur les 5 derniers matchs.",
      -          "title": "Victoires 5 Derniers",
      -          "type": "integer"
      -        }
      -      },
      -      "title": "FormeRecente",
      -      "type": "object"
      -    },
      -    "MatchForme": {
      -      "description": "Détail d'un match pris en compte dans la forme récente.",
      -      "properties": {
      -        "adversaire": {
      -          "anyOf": [
      -            {
      -              "type": "string"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ],
      -          "default": null,
      -          "description": "Nom de l'adversaire.",
      -          "title": "Adversaire"
      -        },
      -        "date": {
      -          "anyOf": [
      -            {
      -              "type": "string"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ],
      -          "default": null,
      -          "description": "Date et heure du match.",
      -          "title": "Date"
      -        },
      -        "domicile": {
      -          "default": true,
      -          "description": "True si domicile, False si déplacement.",
      -          "title": "Domicile",
      -          "type": "boolean"
      -        },
      -        "ecart": {
      -          "default": 0,
      -          "description": "Différence de points (+13 ou -8).",
      -          "title": "Ecart",
      -          "type": "integer"
      -        },
      -        "journee": {
      -          "anyOf": [
      -            {
      -              "type": "string"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ],
      -          "default": null,
      -          "description": "Nom ou numéro de journée.",
      -          "title": "Journee"
      -        },
      -        "resultat": {
      -          "description": "'V' (Victoire), 'D' (Défaite) ou 'N' (Nul).",
      -          "title": "Resultat",
      -          "type": "string"
      -        },
      -        "salle": {
      -          "anyOf": [
      -            {
      -              "type": "string"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ],
      -          "default": null,
      -          "description": "Nom de la salle.",
      -          "title": "Salle"
      -        },
      -        "score": {
      -          "description": "Score du match (ex: '78 - 65').",
      -          "title": "Score",
      -          "type": "string"
      -        },
      -        "score_contre": {
      -          "anyOf": [
      -            {
      -              "type": "integer"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ],
      -          "default": null,
      -          "description": "Points encaissés.",
      -          "title": "Score Contre"
      -        },
      -        "score_pour": {
      -          "anyOf": [
      -            {
      -              "type": "integer"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ],
      -          "default": null,
      -          "description": "Points marqués.",
      -          "title": "Score Pour"
      -        }
      -      },
      -      "required": [
      -        "resultat",
      -        "score"
      -      ],
      -      "title": "MatchForme",
      -      "type": "object"
      -    },
      -    "PhaseBilan": {
      -      "description": "Bilan détaillé pour une phase de compétition spécifique.",
      -      "properties": {
      -        "competition": {
      -          "description": "Nom de la compétition.",
      -          "title": "Competition",
      -          "type": "string"
      -        },
      -        "difference": {
      -          "default": 0,
      -          "description": "Différence de paniers.",
      -          "title": "Difference",
      -          "type": "integer"
      -        },
      -        "gagnes": {
      -          "default": 0,
      -          "description": "Matchs gagnés.",
      -          "title": "Gagnes",
      -          "type": "integer"
      -        },
      -        "match_joues": {
      -          "default": 0,
      -          "description": "Matchs joués dans cette phase.",
      -          "title": "Match Joues",
      -          "type": "integer"
      -        },
      -        "nuls": {
      -          "default": 0,
      -          "description": "Matchs nuls.",
      -          "title": "Nuls",
      -          "type": "integer"
      -        },
      -        "numero_equipe": {
      -          "anyOf": [
      -            {
      -              "type": "string"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ],
      -          "default": null,
      -          "description": "Numéro de l'équipe (ex: '1', '2').",
      -          "title": "Numero Equipe"
      -        },
      -        "paniers_encaisses": {
      -          "default": 0,
      -          "description": "Paniers encaissés.",
      -          "title": "Paniers Encaisses",
      -          "type": "integer"
      -        },
      -        "paniers_marques": {
      -          "default": 0,
      -          "description": "Paniers marqués.",
      -          "title": "Paniers Marques",
      -          "type": "integer"
      -        },
      -        "perdus": {
      -          "default": 0,
      -          "description": "Matchs perdus.",
      -          "title": "Perdus",
      -          "type": "integer"
      -        },
      -        "phase_terminee": {
      -          "default": false,
      -          "description": "Indique si la phase est terminée.",
      -          "title": "Phase Terminee",
      -          "type": "boolean"
      -        },
      -        "phase_type": {
      -          "default": "poule",
      -          "description": "Type de phase (poule ou élimination).",
      -          "title": "Phase Type",
      -          "type": "string"
      -        },
      -        "position": {
      -          "anyOf": [
      -            {
      -              "type": "integer"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ],
      -          "default": null,
      -          "description": "Position actuelle au classement.",
      -          "title": "Position"
      -        },
      -        "poule_id": {
      -          "description": "ID de la poule.",
      -          "title": "Poule Id",
      -          "type": "string"
      -        },
      -        "total_equipes": {
      -          "anyOf": [
      -            {
      -              "type": "integer"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ],
      -          "default": null,
      -          "description": "Nombre total d'équipes dans la poule.",
      -          "title": "Total Equipes"
      -        }
      -      },
      -      "required": [
      -        "competition",
      -        "poule_id"
      -      ],
      -      "title": "PhaseBilan",
      -      "type": "object"
      -    },
      -    "SerieEnCours": {
      -      "description": "Série actuelle de victoires, défaites ou invincibilité.",
      -      "properties": {
      -        "count": {
      -          "default": 0,
      -          "description": "Nombre de matchs consécutifs dans la série.",
      -          "title": "Count",
      -          "type": "integer"
      -        },
      -        "label": {
      -          "default": "",
      -          "description": "Description lisible (ex: '3 victoires consécutives').",
      -          "title": "Label",
      -          "type": "string"
      -        },
      -        "type": {
      -          "default": "aucune",
      -          "description": "'victoires', 'defaites', 'nuls' ou 'aucune'.",
      -          "title": "Type",
      -          "type": "string"
      -        }
      -      },
      -      "title": "SerieEnCours",
      -      "type": "object"
      -    }
      -  },
      -  "properties": {
      -    "result": {
      -      "anyOf": [
      -        {
      -          "additionalProperties": true,
      -          "type": "object"
      -        },
      -        {
      -          "$ref": "#/$defs/BilanResponse"
      -        }
      -      ],
      -      "title": "Result"
      -    }
      -  },
      -  "required": [
      -    "result"
      -  ],
      -  "title": "ffbb_bilanOutput",
      -  "type": "object"
      -}New value: +null
  3. Changed6 schema fields changedv1.8.0
    • addedInput schema / properties / numero_equipe
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "integer"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Numéro d'équipe facultatif (ex: 1, 2).",
      +  "title": "Numero Equipe"
      +}
    • addedOutput schema / $defs / BilanResponse / properties / dynamique
      Added value: +{
      +  "anyOf": [
      +    {
      +      "$ref": "#/$defs/FormeRecente"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Dynamique et forme récente de l'équipe principale sur les 5 derniers matchs."
      +}
    • addedOutput schema / $defs / BilanResponse / properties / profil_avance
      Added value: +{
      +  "anyOf": [
      +    {
      +      "additionalProperties": true,
      +      "type": "object"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Profil tactique avancé : rangs attaque/défense, style de jeu, clutch index et bilans domicile/extérieur.",
      +  "title": "Profil Avance"
      +}
    • addedOutput schema / $defs / FormeRecente
      Added value: +{
      +  "description": "Indicateur complet de dynamique et de forme récente (5 derniers matchs).",
      +  "properties": {
      +    "defaites_5_derniers": {
      +      "default": 0,
      +      "description": "Nombre de défaites sur les 5 derniers matchs.",
      +      "title": "Defaites 5 Derniers",
      +      "type": "integer"
      +    },
      +    "diff_moyenne_5": {
      +      "default": 0,
      +      "description": "Différentiel moyen de points sur les 5 derniers matchs.",
      +      "title": "Diff Moyenne 5",
      +      "type": "number"
      +    },
      +    "forme": {
      +      "description": "Résultats des 5 derniers matchs par ordre chronologique (ex: ['V', 'V', 'D', 'V', 'V']).",
      +      "items": {
      +        "type": "string"
      +      },
      +      "title": "Forme",
      +      "type": "array"
      +    },
      +    "forme_str": {
      +      "default": "",
      +      "description": "Représentation texte compacte de la forme (ex: 'V-V-D-V-V').",
      +      "title": "Forme Str",
      +      "type": "string"
      +    },
      +    "matchs": {
      +      "description": "Détail des matchs récents analysés.",
      +      "items": {
      +        "$ref": "#/$defs/MatchForme"
      +      },
      +      "title": "Matchs",
      +      "type": "array"
      +    },
      +    "meilleure_victoire": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "default": null,
      +      "description": "Plus large victoire récente (ex: '+24 vs ASPTT (84-60)').",
      +      "title": "Meilleure Victoire"
      +    },
      +    "nuls_5_derniers": {
      +      "default": 0,
      +      "description": "Nombre de nuls sur les 5 derniers matchs.",
      +      "title": "Nuls 5 Derniers",
      +      "type": "integer"
      +    },
      +    "pire_defaite": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "default": null,
      +      "description": "Plus lourde défaite récente (ex: '-12 vs US Chauriat (62-74)').",
      +      "title": "Pire Defaite"
      +    },
      +    "pts_encaisses_moyenne_5": {
      +      "default": 0,
      +      "description": "Moyenne de points encaissés par match sur les 5 derniers matchs.",
      +      "title": "Pts Encaisses Moyenne 5",
      +      "type": "number"
      +    },
      +    "pts_marques_moyenne_5": {
      +      "default": 0,
      +      "description": "Moyenne de points marqués par match sur les 5 derniers matchs.",
      +      "title": "Pts Marques Moyenne 5",
      +      "type": "number"
      +    },
      +    "ratio_victoires_5_derniers": {
      +      "default": 0,
      +      "description": "Pourcentage de victoires sur les 5 derniers matchs (0-100%).",
      +      "title": "Ratio Victoires 5 Derniers",
      +      "type": "number"
      +    },
      +    "serie_actuelle": {
      +      "$ref": "#/$defs/SerieEnCours",
      +      "description": "Série globale en cours toutes compétitions."
      +    },
      +    "serie_domicile": {
      +      "$ref": "#/$defs/SerieEnCours",
      +      "description": "Série en cours pour les matchs à domicile."
      +    },
      +    "serie_exterieur": {
      +      "$ref": "#/$defs/SerieEnCours",
      +      "description": "Série en cours pour les matchs à l'extérieur."
      +    },
      +    "tendance": {
      +      "default": "Stable ➡️",
      +      "description": "Tendance de la forme ('En hausse ↗️', 'Stable ➡️', 'En baisse ↘️').",
      +      "title": "Tendance",
      +      "type": "string"
      +    },
      +    "victoires_5_derniers": {
      +      "default": 0,
      +      "description": "Nombre de victoires sur les 5 derniers matchs.",
      +      "title": "Victoires 5 Derniers",
      +      "type": "integer"
      +    }
      +  },
      +  "title": "FormeRecente",
      +  "type": "object"
      +}
    • addedOutput schema / $defs / MatchForme
      Added value: +{
      +  "description": "Détail d'un match pris en compte dans la forme récente.",
      +  "properties": {
      +    "adversaire": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "default": null,
      +      "description": "Nom de l'adversaire.",
      +      "title": "Adversaire"
      +    },
      +    "date": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "default": null,
      +      "description": "Date et heure du match.",
      +      "title": "Date"
      +    },
      +    "domicile": {
      +      "default": true,
      +      "description": "True si domicile, False si déplacement.",
      +      "title": "Domicile",
      +      "type": "boolean"
      +    },
      +    "ecart": {
      +      "default": 0,
      +      "description": "Différence de points (+13 ou -8).",
      +      "title": "Ecart",
      +      "type": "integer"
      +    },
      +    "journee": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "default": null,
      +      "description": "Nom ou numéro de journée.",
      +      "title": "Journee"
      +    },
      +    "resultat": {
      +      "description": "'V' (Victoire), 'D' (Défaite) ou 'N' (Nul).",
      +      "title": "Resultat",
      +      "type": "string"
      +    },
      +    "salle": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "default": null,
      +      "description": "Nom de la salle.",
      +      "title": "Salle"
      +    },
      +    "score": {
      +      "description": "Score du match (ex: '78 - 65').",
      +      "title": "Score",
      +      "type": "string"
      +    },
      +    "score_contre": {
      +      "anyOf": [
      +        {
      +          "type": "integer"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "default": null,
      +      "description": "Points encaissés.",
      +      "title": "Score Contre"
      +    },
      +    "score_pour": {
      +      "anyOf": [
      +        {
      +          "type": "integer"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "default": null,
      +      "description": "Points marqués.",
      +      "title": "Score Pour"
      +    }
      +  },
      +  "required": [
      +    "resultat",
      +    "score"
      +  ],
      +  "title": "MatchForme",
      +  "type": "object"
      +}
    • addedOutput schema / $defs / SerieEnCours
      Added value: +{
      +  "description": "Série actuelle de victoires, défaites ou invincibilité.",
      +  "properties": {
      +    "count": {
      +      "default": 0,
      +      "description": "Nombre de matchs consécutifs dans la série.",
      +      "title": "Count",
      +      "type": "integer"
      +    },
      +    "label": {
      +      "default": "",
      +      "description": "Description lisible (ex: '3 victoires consécutives').",
      +      "title": "Label",
      +      "type": "string"
      +    },
      +    "type": {
      +      "default": "aucune",
      +      "description": "'victoires', 'defaites', 'nuls' ou 'aucune'.",
      +      "title": "Type",
      +      "type": "string"
      +    }
      +  },
      +  "title": "SerieEnCours",
      +  "type": "object"
      +}
  4. Changed3 schema fields changedv1.5.1
    • addedOutput schema / $defs / BilanResponse / properties / competitions_incluses
      Added value: +{
      +  "description": "Liste des noms de compétitions incluses dans le bilan.",
      +  "items": {
      +    "type": "string"
      +  },
      +  "title": "Competitions Incluses",
      +  "type": "array"
      +}
    • addedOutput schema / $defs / BilanResponse / properties / saison_terminee
      Added value: +{
      +  "default": true,
      +  "description": "Indique si la saison est terminée pour cette équipe (toutes les phases jouées).",
      +  "title": "Saison Terminee",
      +  "type": "boolean"
      +}
    • addedOutput schema / $defs / PhaseBilan / properties / total_equipes
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "integer"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Nombre total d'équipes dans la poule.",
      +  "title": "Total Equipes"
      +}
  5. Changed5 schema fields changedv1.4.0
    • addedOutput schema / $defs
      Added value: +{
      +  "BilanResponse": {
      +    "description": "Réponse structurée et typée pour le bilan d'une équipe.",
      +    "properties": {
      +      "_meta": {
      +        "additionalProperties": true,
      +        "description": "Métadonnées de fraîcheur et de cache.",
      +        "title": "Meta",
      +        "type": "object"
      +      },
      +      "bilan_total": {
      +        "$ref": "#/$defs/BilanTotal",
      +        "description": "Totaux cumulés toutes phases."
      +      },
      +      "categorie": {
      +        "description": "Catégorie d'âge/genre.",
      +        "title": "Categorie",
      +        "type": "string"
      +      },
      +      "club": {
      +        "description": "Nom officiel du club.",
      +        "title": "Club",
      +        "type": "string"
      +      },
      +      "equipes_bilan": {
      +        "additionalProperties": true,
      +        "description": "Bilans ventilés par numéro d'équipe.",
      +        "title": "Equipes Bilan",
      +        "type": "object"
      +      },
      +      "phase_courante": {
      +        "anyOf": [
      +          {
      +            "$ref": "#/$defs/PhaseBilan"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null,
      +        "description": "Détails de la dernière phase en cours."
      +      },
      +      "phases": {
      +        "description": "Liste de toutes les phases jouées.",
      +        "items": {
      +          "$ref": "#/$defs/PhaseBilan"
      +        },
      +        "title": "Phases",
      +        "type": "array"
      +      }
      +    },
      +    "required": [
      +      "club",
      +      "categorie",
      +      "bilan_total"
      +    ],
      +    "title": "BilanResponse",
      +    "type": "object"
      +  },
      +  "BilanTotal": {
      +    "description": "Statistiques cumulées d'une équipe (victoires, défaites, paniers).",
      +    "properties": {
      +      "difference": {
      +        "default": 0,
      +        "description": "Différence de paniers (marqués - encaissés).",
      +        "title": "Difference",
      +        "type": "integer"
      +      },
      +      "gagnes": {
      +        "default": 0,
      +        "description": "Nombre de matchs gagnés.",
      +        "title": "Gagnes",
      +        "type": "integer"
      +      },
      +      "match_joues": {
      +        "default": 0,
      +        "description": "Nombre de matchs joués.",
      +        "title": "Match Joues",
      +        "type": "integer"
      +      },
      +      "nuls": {
      +        "default": 0,
      +        "description": "Nombre de matchs nuls.",
      +        "title": "Nuls",
      +        "type": "integer"
      +      },
      +      "paniers_encaisses": {
      +        "default": 0,
      +        "description": "Total des paniers encaissés.",
      +        "title": "Paniers Encaisses",
      +        "type": "integer"
      +      },
      +      "paniers_marques": {
      +        "default": 0,
      +        "description": "Total des paniers marqués.",
      +        "title": "Paniers Marques",
      +        "type": "integer"
      +      },
      +      "perdus": {
      +        "default": 0,
      +        "description": "Nombre de matchs perdus.",
      +        "title": "Perdus",
      +        "type": "integer"
      +      }
      +    },
      +    "title": "BilanTotal",
      +    "type": "object"
      +  },
      +  "PhaseBilan": {
      +    "description": "Bilan détaillé pour une phase de compétition spécifique.",
      +    "properties": {
      +      "competition": {
      +        "description": "Nom de la compétition.",
      +        "title": "Competition",
      +        "type": "string"
      +      },
      +      "difference": {
      +        "default": 0,
      +        "description": "Différence de paniers.",
      +        "title": "Difference",
      +        "type": "integer"
      +      },
      +      "gagnes": {
      +        "default": 0,
      +        "description": "Matchs gagnés.",
      +        "title": "Gagnes",
      +        "type": "integer"
      +      },
      +      "match_joues": {
      +        "default": 0,
      +        "description": "Matchs joués dans cette phase.",
      +        "title": "Match Joues",
      +        "type": "integer"
      +      },
      +      "nuls": {
      +        "default": 0,
      +        "description": "Matchs nuls.",
      +        "title": "Nuls",
      +        "type": "integer"
      +      },
      +      "numero_equipe": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null,
      +        "description": "Numéro de l'équipe (ex: '1', '2').",
      +        "title": "Numero Equipe"
      +      },
      +      "paniers_encaisses": {
      +        "default": 0,
      +        "description": "Paniers encaissés.",
      +        "title": "Paniers Encaisses",
      +        "type": "integer"
      +      },
      +      "paniers_marques": {
      +        "default": 0,
      +        "description": "Paniers marqués.",
      +        "title": "Paniers Marques",
      +        "type": "integer"
      +      },
      +      "perdus": {
      +        "default": 0,
      +        "description": "Matchs perdus.",
      +        "title": "Perdus",
      +        "type": "integer"
      +      },
      +      "phase_terminee": {
      +        "default": false,
      +        "description": "Indique si la phase est terminée.",
      +        "title": "Phase Terminee",
      +        "type": "boolean"
      +      },
      +      "phase_type": {
      +        "default": "poule",
      +        "description": "Type de phase (poule ou élimination).",
      +        "title": "Phase Type",
      +        "type": "string"
      +      },
      +      "position": {
      +        "anyOf": [
      +          {
      +            "type": "integer"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null,
      +        "description": "Position actuelle au classement.",
      +        "title": "Position"
      +      },
      +      "poule_id": {
      +        "description": "ID de la poule.",
      +        "title": "Poule Id",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "competition",
      +      "poule_id"
      +    ],
      +    "title": "PhaseBilan",
      +    "type": "object"
      +  }
      +}
    • removedOutput schema / additionalProperties
      Removed value: -true
    • addedOutput schema / properties
      Added value: +{
      +  "result": {
      +    "anyOf": [
      +      {
      +        "additionalProperties": true,
      +        "type": "object"
      +      },
      +      {
      +        "$ref": "#/$defs/BilanResponse"
      +      }
      +    ],
      +    "title": "Result"
      +  }
      +}
    • addedOutput schema / required
      Added value: +[
      +  "result"
      +]
    • changedOutput schema / title
      Previous value: -"ffbb_bilanDictOutput"New value: +"ffbb_bilanOutput"
  6. Addedv1.3.2
  7. Removedv1.3.1
  8. Addedv1.2.0

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds useful behavioral context: a single call aggregates all phases and returns V/D/N, paniers, and phases. It does not cover every behavioral detail, but it adds meaningful value beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two concise sentences with no filler. The main capability and single-call advantage are front-loaded, and the usage guidance is compact and directly actionable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description partially fills the return-value gap by naming V/D/N, paniers, and phases, and clarifies the all-phases scope. The 10-parameter anyOf selection logic is left to the schema, which is acceptable given full schema coverage, though explicit guidance on when to prefer ffbb_bilan_saison would improve completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description's example 'U11M1' hints at using the 'categorie' parameter, but it does not add significant parameter-specific meaning beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific action and resource: 'Bilan complet d'une équipe toutes phases confondues' and enumerates the returned content (V/D/N, paniers, phases). This distinguishes it from sibling tools like ffbb_bilan_saison by emphasizing the 'toutes phases' scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly marks the tool as the priority for common queries like 'quel est le bilan de X ?' or 'résultats de U11M1', giving the agent clear situational guidance. It does not explicitly mention exclusions or alternatives, but the examples and 'toutes phases' phrasing imply when it should be chosen.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.