Outils d’écriture MCP
Le serveur MCP lit. Quelques outils nommés peuvent aussi agir, en votre nom : poser un gel de fusion, en lever un, laisser une pull request le traverser, définir la priorité d’une pull request dans la file de fusion, ou déclarer le travail que vous commencez dans Travail en cours. Un assistant qui agit à votre demande agit en votre nom, avec vos permissions et rien de plus.
Les outils d’écriture sont désactivés par défaut dans chaque organisation. Un propriétaire les active sous Sécurité › Accès › Connecteurs IA, puis chaque personne choisit, outil par outil, ceux que son connecteur peut utiliser.
Conditions requises
Un outil d’écriture ne s’exécute que si toutes ces conditions sont réunies :
- Vous vous êtes connecté avec le connecteur à authentification (claude.ai, ChatGPT, Le Chat, ou un client de bureau qui se connecte). Un jeton d’API (
ffp_...) ne peut pas utiliser les outils d’écriture via MCP. - Vous avez consenti à cet outil, nommément. Lorsqu’un connecteur demande
fremforge:write, la page de consentement liste chaque outil d’écriture sous Agir aussi en votre nom, chacun avec sa propre case, et aucune n’est cochée à votre place. Le connecteur peut utiliser exactement les outils que vous cochez ; si vous n’en cochez aucun, il se contente de lire. Un outil ajouté plus tard à fremforge ne fait pas partie de votre consentement : reconnectez-vous pour l’autoriser. - Les propriétaires de l’organisation l’autorisent. Sous Sécurité › Accès › Connecteurs IA, l’interrupteur Autoriser les connecteurs IA à agir pour des personnes dans cette organisation est désactivé par défaut. Lorsqu’il est désactivé, chaque outil d’écriture répond que les propriétaires ne l’ont pas autorisé.
- Vous avez vous-même le droit de le faire. L’outil appelle la même route REST que votre propre session, et cette route vérifie vos droits. Un outil ne vous donne jamais une permission que vous n’avez pas déjà.
Les outils
| Outil | Action | Scope utilisé | Étapes |
|---|---|---|---|
answer_active_work_match | Répond à une correspondance de Travail en cours concernant votre propre travail : pas le même travail, le même travail (vous vous joignez), ou scission. Seule l’une des deux personnes dont la correspondance rapproche le travail peut y répondre. | findings:write, accès en lecture au dépôt | Un appel |
place_merge_hold | Bloque les fusions vers une branche de certains ou de tous les dépôts de l’organisation, en votre nom, jusqu’à l’expiration que vous choisissez. | deployments:write, propriétaire de l’organisation | Un appel |
release_merge_hold | Lève un gel : le vôtre, ou celui de quelqu’un d’autre en tant que dérogation auditée. | deployments:write, propriétaire de l’organisation | Deux appels |
exempt_pull_from_hold | Laisse une pull request fusionner malgré un gel, avec un motif, en tant que dérogation auditée. | deployments:write, propriétaire de l’organisation | Deux appels |
set_merge_queue_priority | Définit la priorité d’une pull request dans la file de fusion à high ou normal, avec un motif. Nécessite une seconde autorisation Forgejo. | Votre propre autorisation Forgejo write:fremforge-merge-queue ; vous devez avoir le droit de fusionner la pull request | Deux appels |
start_work | Déclare un travail que vous commencez dans un dépôt, avant le premier push, afin que les personnes qui travaillent sur la même chose soient prévenues. Voir Travail en cours. | findings:write, accès en écriture au dépôt | Un appel |
Jamais accessible aux outils d’écriture
Quoi qu’un outil déclare, fremforge vérifie les points suivants à chaque requête, et un connecteur ne les obtient jamais :
- Scopes : tout ce qui concerne les jetons, le SSO, la facturation, les utilisateurs, les membres et les actions opérateur ; ainsi que
orgs:write,policy:write,webhooks:write,exports:writeetai:invoke(modifications de l’organisation et des politiques, webhooks sortants, exports de données, dépenses d’IA). - Emplacements : aucun outil d’écriture ne peut se trouver dans les parties de l’API consacrées au SSO, aux membres, aux utilisateurs, à la facturation, aux webhooks, aux jetons ou aux opérateurs.
- Paramètres : les outils de paramètres (
get_org_settings,get_my_settings) se contentent de lire. Aucun outil ne modifie les paramètres d’une organisation ou d’une personne. - Changements opérateur : aucun outil d’écriture ne peut en exécuter, en approuver ou procéder à une réauthentification renforcée. Ces actions restent des actes humains dans la console, avec MFA.
- Forgejo : le serveur MCP n’écrit rien dans Forgejo, hormis la priorité d’une pull request dans la file de fusion, via
set_merge_queue_priorityet une autorisation Forgejo limitée à cela. Le code, les branches, les tickets et le reste d’une pull request restent en lecture seule, et cette autorisation ne se rabat jamais surwrite:repository.
Deux appels pour les actions risquées
Lever un gel, laisser une pull request le traverser et définir une priorité dans la file de fusion nécessitent deux appels :
- Le premier appel ne modifie rien. Il indique ce que l’outil ferait (le gel, son propriétaire et sa portée et, pour une exemption, le titre, l’état, la branche de base et le commit de tête de la pull request) et renvoie un
confirm_token. - Le second appel agit. Il reprend les mêmes arguments plus ce
confirm_token, et sa réponse nomme ce qui a changé : le gel, la pull request et son commit de tête.
Un confirm_token ne fonctionne qu’une fois, pendant cinq minutes, pour le même connecteur, le même outil et les mêmes arguments. Modifiez un argument et il est refusé. Pour set_merge_queue_priority, le jeton est aussi lié au commit de tête de la pull request affiché dans l’aperçu : si quelqu’un pousse entre-temps, il est refusé et vous demandez un nouvel aperçu.
Ces outils sont marqués comme destructifs : Claude Code et claude.ai vous demandent donc confirmation avant chaque appel par défaut.
Limites et audit
- Au plus 20 appels d’écriture par personne et par tranche de 10 minutes, tous connecteurs confondus. Lorsque la limite ne peut pas être vérifiée, les écritures sont refusées plutôt que laissées passer.
- Au plus 5 priorités
highdans la file de fusion par personne et par heure, en plus de cela.normaln’est pas compté. Cette limite échoue aussi en position fermée. - Chaque action figure dans le journal d’audit de l’organisation sous votre nom, avec l’assistant dans le champ
agentde l’entrée (mcp-client:<id>), le connecteur dansvia_tokenet l’outil dansmcp_tool. Le filtre par acteur du journal d’audit la retrouve sous votre identifiant.
La seconde autorisation Forgejo
set_merge_queue_priority agit dans Forgejo : il a donc besoin de votre propre permission Forgejo, et non de celle de fremforge. Lorsque vous le cochez sur la page de consentement, Forgejo affiche un second écran après le premier : l’application fremforge-mcp-queue-priority demande read:repository et write:fremforge-merge-queue, qui lui permettent de lire les dépôts que vous pouvez lire et de définir la priorité dans la file de fusion des pull requests que vous avez le droit de fusionner. Rien d’autre. Approuvez et l’outil est ajouté ; refusez et le connecteur est configuré sans cet outil.
- L’autorisation est conservée chiffrée, utilisée uniquement pour définir une priorité dans la file de fusion, et supprimée, avec révocation de l’autorisation Forgejo, lorsqu’aucun de vos connecteurs ne dispose plus de l’outil : sur Révoquer, sur Passer en lecture seule, ou lorsque vous vous reconnectez sans le cocher.
- Si Forgejo cesse de l’honorer, l’outil répond qu’il n’est plus disponible pour ce connecteur, il en est retiré, et la lecture continue de fonctionner. Reconnectez-vous et cochez-le pour l’autoriser de nouveau.
- Vous pouvez aussi consulter et révoquer l’autorisation dans Forgejo, sous Applications OAuth2 autorisées sur
frem.sh/user/settings/applications.
Consulter, restreindre ou retirer l’accès
Votre page de connecteurs IA (également accessible depuis vos paramètres de sécurité) liste chaque assistant que vous avez connecté, indique s’il se contente de lire ou s’il peut aussi agir, et les outils qu’il peut utiliser.
- Passer en lecture seule conserve la connexion et en retire tous les outils d’écriture.
- Révoquer met fin à toutes les sessions de cet assistant.
Les deux prennent effet à la requête suivante de l’assistant. Un outil d’écriture que le connecteur n’a pas le droit d’utiliser répond Refusé pour ce connecteur : vous ne l’avez pas autorisé à utiliser <tool> en votre nom. La lecture fonctionne toujours., avec la manière de l’autoriser. Les propriétaires de l’organisation peuvent aussi désactiver les écritures des connecteurs, ou bloquer entièrement les connecteurs, sous Sécurité › Accès › Connecteurs IA.