Skip to main content
Glama
nickdesi

FFBB MCP Server

Recherche FFBB (multi-index)

ffbb_search
Read-onlyIdempotent

Search French basketball data across clubs, competitions, matches, venues, and news. Filter by type or postal code to find specific FFBB information.

Instructions

Recherche FFBB — clubs, compétitions, matchs, salles, tournois, news, actualités, etc.

  • type='all' → recherche globale (meilleur point d'entrée).

  • type='organismes' → clubs uniquement.

  • type='competitions' → compétitions uniquement.

  • type='salles' → salles / gymnases.

  • type='news' / 'galeries' / 'rss' → actualités et médias.

  • filter_by='codePostal = "63000"' → filtrage par code postal ou critères Meilisearch.

Résultats contiennent un 'id' à utiliser avec ffbb_get ou ffbb_club.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
sortNoTri Meilisearch (ex: ['nom:asc']).
typeNoType de données. 'all' cherche partout (défaut).all
limitNoNombre maximum de résultats à retourner (1-100).
queryYesTexte libre (ex: 'Vichy', 'U13F Auvergne').
offsetNoIndex de départ pour pagination (défaut: 0).
filter_byNoFiltre Meilisearch natif (ex: 'codePostal = "63000"', 'codePostal IN ["63000", "63100"]', 'departement = "Puy-de-Dôme"').
force_refreshNoSi True, force le rafraîchissement des données.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changedv1.16.4
    • changedInput schema / properties / sort / description
      Previous value: -"Tri Meilisearch (ex: ['libelle:asc'])."New value: +"Tri Meilisearch (ex: ['nom:asc'])."
    • changedInput schema / properties / type / enum
      Previous value: -[
      -  "all",
      -  "competitions",
      -  "organismes",
      -  "rencontres",
      -  "salles",
      -  "pratiques",
      -  "terrains",
      -  "tournois",
      -  "engagements",
      -  "formations",
      -  "officiels",
      -  "entraineurs",
      -  "communes"
      -]New value: +[
      +  "all",
      +  "competitions",
      +  "organismes",
      +  "rencontres",
      +  "salles",
      +  "pratiques",
      +  "terrains",
      +  "tournois",
      +  "engagements",
      +  "formations",
      +  "news",
      +  "galeries",
      +  "rss"
      +]
  2. Changed4 schema fields changedv1.13.0
    • changedInput schema / properties / filter_by / description
      Previous value: -"Filtre Meilisearch natif (ex: 'codePostal = \"63000\"')."New value: +"Filtre Meilisearch natif (ex: 'codePostal = \"63000\"', 'codePostal IN [\"63000\", \"63100\"]', 'departement = \"Puy-de-Dôme\"')."
    • addedInput schema / properties / force_refresh
      Added value: +{
      +  "default": false,
      +  "description": "Si True, force le rafraîchissement des données.",
      +  "title": "Force Refresh",
      +  "type": "boolean"
      +}
    • changedInput schema / properties / limit / description
      Previous value: -"Nombre maximum de résultats à retourner."New value: +"Nombre maximum de résultats à retourner (1-100)."
    • addedInput schema / properties / offset
      Added value: +{
      +  "default": 0,
      +  "description": "Index de départ pour pagination (défaut: 0).",
      +  "title": "Offset",
      +  "type": "integer"
      +}
  3. Changed1 schema field changedv1.9.0
    • changedOutput schema / (root)
      Previous value: -{
      -  "properties": {
      -    "result": {
      -      "items": {
      -        "additionalProperties": true,
      -        "type": "object"
      -      },
      -      "title": "Result",
      -      "type": "array"
      -    }
      -  },
      -  "required": [
      -    "result"
      -  ],
      -  "title": "ffbb_searchOutput",
      -  "type": "object"
      -}New value: +null
  4. Addedv1.3.2
  5. Removedv1.3.1
  6. Addedv1.2.0

TDQS

A4.3/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 genuine behavioral value on top: it documents Meilisearch filter syntax with concrete examples (codePostal = "63000", IN list form), explains the multi-index search scope across types, and discloses that results contain an 'id' meant for chaining into ffbb_get/ffbb_club. No contradiction with annotations — a search returning stable ids is consistent with read-only, idempotent behavior.

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

Conciseness4/5

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

The description is organized as a scannable bulleted list: purpose line, then one line per type mapping, then filter examples, then a downstream-routing note. It front-loads the tool's purpose and the recommended entry point before enumerating variants. Each line earns its place and there is no filler or redundancy with the schema, though the type list is slightly repetitive given the schema already enumerates the enum values.

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?

For a 7-parameter tool with 100% schema coverage and no output schema, the description covers the essentials: the search surface per type, filter syntax, the recommended default, and the critical downstream routing via the returned 'id'. Pagination and limit ranges are already in the schema, so their absence here is acceptable. The openWorldHint semantics (results may come from beyond a known universe) are only implicitly conveyed, but the 'id to fetch more' note largely covers the agent's next action.

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

Parameters4/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, but the description raises it: it decodes the enum values into business meaning (organismes = 'clubs uniquement', salles = 'salles / gymnases', news/galeries/rss = 'actualités et médias'), which the bare enum labels do not convey. It also enriches filter_by with three syntactic usage examples beyond the schema's single codePostal illustration, and flags type='all' as the preferred default. This is additive semantic value over the structured schema.

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 opens with a specific verb and resource ('Recherche FFBB — clubs, compétitions, matchs, salles, tournois, news') and immediately frames it as a multi-index search tool. It distinguishes itself from siblings by defining the search surface (types like organismes, competitions, salles) and by explicitly stating that results carry an 'id' for downstream use with ffbb_get or ffbb_club, which separates the search tool from the getter/resolver siblings.

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 provides clear per-type usage guidance: type='all' is called out as 'meilleur point d'entrée' (best entry point), and each type value maps to a concrete content domain (organismes→clubs, competitions→competitions, news/galeries/rss→médias). It gives a concrete filter_by example. It stops short of explicitly excluding alternatives — it does not say 'use ffbb_get directly when you already hold an ID' — so the routing guidance is partial but the type semantics are unambiguous.

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