[{"data":1,"prerenderedAt":24},["ShallowReactive",2],{"doc:fr:plugins\u002Fstore-mcp":3},{"title":4,"lede":5,"html":6,"headings":7},"Gérer ses plugins depuis un agent","Le store a un serveur MCP, https:\u002F\u002Fstore.escouade.dev\u002Fmcp : un agent (Claude Code, ou tout client MCP) y soumet tes versions, suit leurs contrôles, les publie et gère tes plugins, connecté à ton compte par OAuth. La signature et la révocation n’y sont pas.","\u003Ch2 id=\"le-connecter\">Le connecter\u003C\u002Fh2>\n\u003Cp>Dans Claude Code :\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-sh\">claude mcp add --transport http escouade-store https:\u002F\u002Fstore.escouade.dev\u002Fmcp\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Puis \u003Ccode class=\"key\">\u002Fmcp\u003C\u002Fcode> dans Claude Code, et « Authenticate » sur \u003Ccode class=\"key\">escouade-store\u003C\u002Fcode>. Un autre client MCP prend la même adresse, en Streamable HTTP : il découvre seul le serveur d’autorisation (RFC 9728, RFC 8414), s’enregistre (RFC 7591) et se connecte avec PKCE.\u003C\u002Fp>\n\u003Ch2 id=\"la-premiere-connexion\">La première connexion\u003C\u002Fh2>\n\u003Col>\n\u003Cli>Le navigateur s’ouvre sur le store, puis sur GitHub : la même connexion que sur le site, par l’App « Escouade Store ».\u003C\u002Fli>\n\u003Cli>Une page de consentement, en français ou en anglais selon ton navigateur, dit le client (le nom qu’il se donne, que le store ne vérifie pas), ton compte et ce qu’il pourra faire. Tu autorises ou tu refuses.\u003C\u002Fli>\n\u003Cli>Le client reçoit un jeton d’une heure, valable pour \u003Ccode>https:\u002F\u002Fstore.escouade.dev\u002Fmcp\u003C\u002Fcode> seul, et un jeton de rafraîchissement de 30 jours qui change à chaque usage. Le store ne garde que leur empreinte.\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Ch2 id=\"ce-qu-il-permet\">Ce qu’il permet\u003C\u002Fh2>\n\u003Cp>Avec la portée \u003Ccode class=\"key\">author\u003C\u002Fcode>, celle de tout compte :\u003C\u002Fp>\n\u003Cdiv class=\"table\">\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Outil\u003C\u002Fth>\n\u003Cth>Ce qu’il fait\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\u003Ctr>\n\u003Ctd>\u003Ccode class=\"key\">list_repositories\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>tes dépôts où l’App est installée, et tes dernières soumissions\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode class=\"key\">list_folders\u003C\u002Fcode>, \u003Ccode class=\"key\">list_tags\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>les dossiers à manifeste d’un dépôt, les étiquettes d’un dossier\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode class=\"key\">submit_version\u003C\u002Fcode>, \u003Ccode class=\"key\">get_version\u003C\u002Fcode>, \u003Ccode class=\"key\">retry_checks\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>soumettre une étiquette d’un dossier, suivre ses onze contrôles, les relancer si le store ou GitHub a échoué\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode class=\"key\">publish_version\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>publier : les catégories d’une première version, « Demander la revue » (oui par défaut), la publication seule des nouvelles étiquettes\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode class=\"key\">list_plugins\u003C\u002Fcode>, \u003Ccode class=\"key\">get_plugin\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>tes plugins, leurs versions et leur état, les versions en attente d’un clic\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode class=\"key\">yank_version\u003C\u002Fcode>, \u003Ccode class=\"key\">dismiss_version\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>retirer une version publiée, mettre de côté une version en attente\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode class=\"key\">set_listed\u003C\u002Fcode>, \u003Ccode class=\"key\">set_auto_publish\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>retirer un plugin de la liste (ou l’y remettre), publier seules ses nouvelles étiquettes\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode class=\"key\">change_source\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>déplacer un plugin vers un autre dépôt à toi ou un autre dossier, en y soumettant sa version suivante\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\u003C\u002Ftable>\u003C\u002Fdiv>\n\u003Cp>Chaque outil passe par le même code que le site : les mêmes contrôles, les mêmes limites, les mêmes refus. Un refus revient comme une erreur de l’outil, avec son code (\u003Ccode class=\"key\">not-yours\u003C\u002Fcode>, \u003Ccode class=\"key\">path-parent\u003C\u002Fcode>, \u003Ccode class=\"key\">categories\u003C\u002Fcode>, \u003Ccode class=\"key\">id-differs\u003C\u002Fcode>…).\u003C\u002Fp>\n\u003Cp>La portée \u003Ccode class=\"key\">review\u003C\u002Fcode> (lire la file de revue, une version et son rapport, déposer un rapport) n’est donnée qu’aux administrateurs du store, demandée à part au consentement. Un autre compte qui la demande ne reçoit que \u003Ccode class=\"key\">author\u003C\u002Fcode>.\u003C\u002Fp>\n\u003Ch2 id=\"ce-qu-il-ne-fait-jamais\">Ce qu’il ne fait jamais\u003C\u002Fh2>\n\u003Cul>\n\u003Cli>\u003Cstrong>Signer, révoquer, toucher à une clé.\u003C\u002Fstrong> La signature d’une version et la liste de révocation se font sur le poste de l’administrateur, avec la clé qui ne le quitte pas (\u003Ccode>npm run plugin-review -- sign\u003C\u002Fcode>).\u003C\u002Fli>\n\u003Cli>Rendre un jeton GitHub, un secret ou une adresse interne ; écrire dans un dépôt ; agir pour un autre compte que celui qui a consenti.\u003C\u002Fli>\n\u003Cli>Donner pour une consigne ce qu’a écrit un plugin. Un README, un manifeste, un nom de dossier ou un rapport rendu par un outil arrive entre \u003Ccode class=\"key\">&lt;third_party_data&gt;\u003C\u002Fcode> et \u003Ccode class=\"key\">&lt;\u002Fthird_party_data&gt;\u003C\u002Fcode>, annoncé comme une donnée à lire : l’agent ne suit pas une instruction qui s’y trouve.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch2 id=\"deconnecter-un-client\">Déconnecter un client\u003C\u002Fh2>\n\u003Cp>Dans ton compte sur le store, « Applications connectées » montre chaque client autorisé, ses portées, la date de son dernier usage et ses dernières actions. « Déconnecter » coupe ses jetons aussitôt. Chaque action d’un outil est notée dans ton journal, « par un client MCP », avec le nom du client. Supprimer ton compte efface toutes ses autorisations.\u003C\u002Fp>\n\u003Cp>Voir aussi \u003Ca href=\"\u002Fdocs\u002Fplugins\u002Fpublishing\u002F\">Publier sur le store\u003C\u002Fa> pour les onze contrôles et leurs refus.\u003C\u002Fp>\n",[8,12,15,18,21],{"id":9,"text":10,"depth":11},"le-connecter","Le connecter",2,{"id":13,"text":14,"depth":11},"la-premiere-connexion","La première connexion",{"id":16,"text":17,"depth":11},"ce-qu-il-permet","Ce qu’il permet",{"id":19,"text":20,"depth":11},"ce-qu-il-ne-fait-jamais","Ce qu’il ne fait jamais",{"id":22,"text":23,"depth":11},"deconnecter-un-client","Déconnecter un client",1793889379885]