Runbooks opérateurLire ces docs depuis un client IA

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 :

OutilRenvoie
searchOperatorDocsdes passages de ce corpus, classés, chacun avec le slug de sa page
getOperatorDocune 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.