Lire ces docs depuis un client IA
Deux outils MCP placent ce corpus dans Claude, Cursor ou ChatGPT. Ce qui les verrouille, pourquoi une clé statique ne les voit jamais, et pourquoi le refus est un « not found ».
Ce corpus est aussi accessible depuis un client MCP : un opérateur peut demander « que bloque réellement la file Conformité ? » sans quitter la fenêtre dans laquelle il travaille.
Deux outils, qui reflètent la paire publique au lieu de la remplacer :
| Outil | Renvoie |
|---|---|
searchOperatorDocs | des passages de ce corpus, classés, chacun avec le slug de sa page |
getOperatorDoc | une page entière, par slug |
Les outils publics searchDocs et getDoc lisent toujours /docs et sont
proposés à tout le monde. Interroger la mauvaise paire est l'erreur la plus
probable : une question sur la façon dont un client vit les crédits
relève de searchDocs, une question sur la façon dont nous les
accordons relève de searchOperatorDocs.
Se connecter
Les outils passent par le serveur MCP existant : il n'y a rien de nouveau à
installer. Connectez un client comme d'habitude, puis approuvez le scope
boostecom:operator-docs.read sur l'écran de consentement. Il n'y apparaît
que si le compte connecté est administrateur de BoostEcom lui-même.
Trois portes, et chacune répond à une question différente
Le scope est native. C'est ce qui fait refuser au relais
d'enregistrer ces outils pour une clé Bearer statique. Une clé désigne une
boutique, jamais une personne : un contrôle d'admin n'aurait donc personne
à contrôler, et un contrôle qui ne peut pas s'exécuter doit refuser plutôt
que laisser passer. Seule une session OAuth, qui porte un identifiant
d'utilisateur, voit ces outils.
L'écran de consentement retire le scope à un non-admin. Le proposer à un marchand listerait une permission dont chaque appel répond « not found », c'est-à-dire un écran de consentement qui ment sur ce qu'il accorde.
Chaque appel relit le rôle en base. Une autorisation vit longtemps, un
rôle non. Un admin rétrogradé ce matin détient encore un jeton émis le mois
dernier, et c'est cette ligne qui l'arrête : le contrôle lit User.role,
jamais le jeton.
L'ancien scope mcp ne confère rien de tout cela. Il s'étend au relais
Shopify et s'arrête là, par construction.
Le refus est un « not found »
Un appelant qui n'est pas admin et un slug qui n'existe pas reçoivent la même réponse. C'est voulu. Les distinguer ferait de l'outil, pour quiconque détient un jeton, un index de ce que contient ce corpus, soit exactement ce que la mise à l'écart du corpus sert à éviter.
L'outil getStudioSection suit la même forme, pour la même raison.
Français uniquement
searchOperatorDocs ne prend aucun paramètre de langue. Le corpus est écrit
en français, comme le panel qu'il documente (OPERATOR_LOCALE), et un
paramètre de langue promettrait une traduction qui n'existe pas.