Le standard llms.txt existe depuis septembre 2024 pour indiquer à un agent ce qu’un site autorise à consulter ; il ne dit rien, en revanche, de la façon dont un moteur de recherche facetté doit être interrogé sans exposer l’ensemble d’un catalogue produit. C’est cette question précise qu’a dû résoudre une équipe technique construisant un outil MCP au-dessus d’une instance Typesense existante.
Le site concerné gérait un catalogue de plusieurs milliers de références, avec des facettes riches — matière, couleur, gamme de prix, disponibilité — déjà utilisées côté interface humaine. L’objectif était de permettre à un agent d’aider un client à affiner sa recherche par facettes, sans jamais lui donner un accès qui reviendrait, de fait, à lister le catalogue entier référence par référence.
Le risque identifié avant même de commencer
Une recherche facettée mal conçue, ouverte sans limite à un agent, peut servir à reconstituer méthodiquement l’intégralité d’un catalogue en enchaînant des requêtes systématiques sur chaque combinaison de facettes possible. Ce risque, souvent sous-estimé, a orienté la conception de l’outil MCP dès le départ.
La solution : des facettes exposées, une pagination bridée
L’outil MCP construit expose huit facettes précises parmi celles disponibles dans Typesense, avec une pagination strictement limitée à dix résultats par requête, sans possibilité pour l’agent de demander une page suivante au-delà d’un total cumulé de trente résultats par conversation.

L’implémentation de l’outil de recherche facettée
function rechercher_catalogue_facette( array $args ): array {
$client = nouveau_client_typesense();
$recherche = $client->collections['produits']->documents->search(
array(
'q' => $args['requete'] ?? '*',
'query_by' => 'nom,description',
'facet_by' => 'matiere,couleur,gamme_prix,disponibilite',
'per_page' => 10,
'page' => 1,
)
);
return array(
'resultats' => array_map( 'formater_resultat_public', $recherche['hits'] ),
'facettes' => $recherche['facet_counts'],
);
}
La fonction formater_resultat_public ne retourne que le nom, le prix affiché et une image, jamais les identifiants internes de stock, les coûts d’achat ou les quotas fournisseurs présents dans les documents indexés côté Typesense.
Ce que la limite de trente résultats a changé côté usage
Ce plafond a paru arbitraire au premier abord, mais il s’est révélé cohérent avec l’usage réel observé : au-delà de trente résultats consultés dans une même conversation, un client cherchait rarement encore à affiner sa recherche par facettes, préférant naviguer directement sur le site pour comparer visuellement les produits restants.
- Le plafond de trente résultats n’a généré aucune plainte identifiée sur la période de test.
- Les facettes les plus utilisées sont restées la gamme de prix et la disponibilité, loin devant la matière et la couleur.
- Aucune tentative de contournement du plafond n’a été détectée dans les journaux de requêtes.
Une variante testée : facettes dynamiques selon le profil
Pour un segment de clients professionnels identifiés, une variante a exposé deux facettes supplémentaires liées à des conditionnements spécifiques, sans toucher au plafond global de résultats. Cette variante montre que le filtrage par facettes peut s’adapter au profil de l’utilisateur final sans remettre en cause le principe de fermeture du catalogue complet.
Une recherche facettée bien conçue guide vers ce qui intéresse réellement un client ; mal bridée, elle devient un moyen détourné de tout montrer, une facette après l’autre.
En résumé
Exposer Typesense à un agent conversationnel via MCP ne demande pas de renoncer à la richesse des facettes existantes, mais d’en circonscrire soigneusement l’usage : un nombre limité de facettes pertinentes, une pagination bridée, et des champs retournés filtrés pour ne jamais révéler ce qui relève de la gestion interne du catalogue. Cette discipline, une fois posée, n’a rien retiré à l’utilité perçue de l’outil par les clients qui l’ont utilisé.