Repository navigation
FR Equipe MCP Distant
English · Type : procédure + référence · Public : auteur · Contexte : Studio hébergé · Statut : prête · S'applique depuis : 4.2.3
Le Studio Server (Studio d'équipe hébergé) · contrat : expérimental · vérifié par la CI (matrice de support de la 4.4.0, 2026-10-23) : Postgres, S3 et Keycloak en CI ; Chromium et Firefox (job studio-hosted) ; WebKit sous macOS, à la main seulement · vérifications automatiques : jobs
studio-hosted,studio-install-smoke; plan de CIstudioHosted; 3 fichiers de tests · passes humaines :studio-hostedpas faite (#149),studio-collabpas faite (#150),studio-previewpas faite (#166),studio-assets-hostedpas faite (#167),studio-mcp-remotepas faite (#196),studio-oidc-genericpas faite (#197) · limites connues :mcp-remote-limits
Un agent IA (Claude Code, Cursor, n'importe quel client MCP) peut travailler sur un Studio d'équipe comme un membre :
avec votre rôle, dans les pans que tiennent les autres, ses écritures dans le journal à votre nom. Cette page branche
un agent sur un Studio hébergé, soit en HTTP sur le /mcp du serveur, soit par le serveur MCP local tourné vers le
Studio, et liste les outils que chacun propose.
Un agent qui lit, vérifie et (avec un rôle de dev) modifie le jeu hébergé à travers les mêmes vérifications que la page du Studio : le contrôle d'accès, le rôle, les pans, le journal, une nouvelle tentative appliquée une seule fois.
Un Studio hébergé (le Studio Server) avec OIDC, depuis la 4.2.3 (ADR 0029). Pour le MCP local sur votre propre dossier de jeu, voir MCP local : brancher chaque client et Les outils MCP.
- Un compte de membre : un
reviewerau moins pour lire et vérifier, undevpour écrire. - Le fournisseur du Studio donne à la CLI ou à l'agent des jetons d'accès JWT pour l'audience du Studio
(
oidc.audience). Keycloak le fait avec un mapper d'audience ; un fournisseur qui émet des jetons d'accès opaques (les applications OAuth de GitLab, au moment où ces lignes sont écrites) ne peut servir ni la CLI ni le MCP distant (voir OIDC générique et GitLab). - Pour la voie locale : le dépôt du moteur (ou le paquet installé) sur votre machine, et la CLI connectée.
Sur votre machine, dans le dossier du dépôt du moteur (ou dans un projet créé où le paquet est installé). La configuration de l'agent est le fichier de votre client MCP.
-
Choisissez la voie.
-
À distance, en HTTP : le
/mcpdu serveur, dans le transport Streamable HTTP de MCP, sans état (chaque POST est un échange complet, avec une réponse JSON). Rien à lancer en local, mais le jeton ne dure que quelques minutes. - En local, en stdio, tourné vers le serveur : les mêmes outils, par l'API du Studio, avec le jeton de la CLI renouvelé tout seul. Mieux pour une longue session.
-
À distance, en HTTP : le
-
À distance : donnez un jeton au client. Un client qui suit l'autorisation de MCP trouve le fournisseur à
/.well-known/oauth-protected-resource/mcp(RFC 9728) ; le jeton qu'il obtient doit porter l'oidc.audiencedu Studio. Un fournisseur qui tire l'audience du paramètreresourcede MCP donne<URL publique>/mcp: mettez cette URL dansoidc.audience. Keycloak demande un mapper d'audience dans tous les cas, et un client enregistré pour l'agent. Sinon, donnez-lui un jeton vous-même :# sur votre machine, dans le dépôt du moteur npm run studio-server -- login --server https://studio.example.fr # une fois : le device flow npm run studio-server -- token --server https://studio.example.fr # affiche un jeton d'accès
et envoyez-le en
Authorization: Bearer <jeton>:{ "mcpServers": { "quest-n-click": { "type": "http", "url": "https://studio.example.fr/mcp", "headers": { "Authorization": "Bearer <jeton>" } } } }Le jeton dure quelques minutes : le Studio refuse un jeton d'accès qui vit plus de 5 minutes (ou plus que
oidc.maxTokenSeconds, de 30 à 900, si la configuration le donne). Donnez-en un nouveau au client quand il expire. Le cookie de session du navigateur n'y est jamais accepté.
-
En local : tournez le serveur stdio vers le Studio. Connectez-vous une fois, puis lancez le serveur MCP avec
--server:# sur votre machine, dans le dépôt du moteur npm run studio-server -- login --server https://studio.example.fr npm run -s mcp -- --server https://studio.example.frDans la configuration d'un client, la commande est
npmavec les arguments["--prefix", "/path/to/quest-n-click", "run", "-s", "mcp", "--", "--server", "https://studio.example.fr"]. Le jeton se renouvelle tout seul ; https seulement.
-
Vérifiez que ça marche. Demandez à l'agent d'appeler
list_rooms. Ses premières instructions lui disent qu'il est sur un Studio partagé : une partie qu'un autre membre tient refuse son écriture (423), et il doit dire ce dont il a besoin dans une note.
| Proposés sur un Studio hébergé (les deux voies) | Non proposés |
|---|---|
list_rooms, get_room, get_ir, get_storyboard, get_notes
|
screenshot (demande un navigateur sur la machine) |
set_layout, set_text, set_value, add_entity, set_storyboard, add_note
|
run_tests (demande le dépôt) |
validate, solve (sans politique reality : une 501), lint, content_report
|
read_doc, search_docs, list_docs (la documentation) |
world_graph, dialogue_tree, puzzle_graph, storyboard_coverage, playtests
|
asset_prompts, speedrun_verify
|
Un outil dont le backend n'a pas la capacité n'est pas proposé du tout. Un agent sur un Studio hébergé lit la
documentation par le MCP stdio local de la même version du moteur, sans --server.
-
L'écriture d'un membre. Chaque appel d'outil est une requête à la
/apidu Studio avec votre jeton : votre rôle, vos pans, votre nom dans le journal et dans l'audit. L'agent d'un reviewer ne peut pas écrire (403). - Une 423 comme vous. Un pan tenu par un autre membre refuse l'écriture, et l'outil renvoie le message qui le nomme.
-
Pas de révision de base. Un agent n'envoie pas de
x-studio-base: ses écritures sont calculées par le serveur sur le fichier tel qu'il est maintenant et vérifiées par la garde de validation, mais pas refusées parce que quelqu'un a écrit le fichier depuis la lecture de l'agent. - Appliquée une fois. Chaque écriture porte son propre identifiant d'opération.
-
Les notes. Une note qu'un agent ajoute sans auteur est signée
ai, enregistrée quand même au nom de votre membre (en HTTP, le serveur ne voit jamais le nom du client MCP). - Retiré, arrêté. Un membre retiré est refusé à l'appel suivant ; ses jetons sont révoqués avec lui.
Garantie ·
mcp-bearer-only· référencée · portée vérifiée par son auteur (IA), pas relue/mcpdemande un jeton Bearer, et refuse un jeton d'une autre audience, le cookie de session, un non-membre et un GET.
Limite ·
mcp-remote-limitsUn message JSON-RPC par requête : un lot est refusé (400).GETetDELETEsur/mcprépondent 405 (pas de flux, pas de session). La requête d'un outil abandonne au bout de 5 minutes, ou quand le client s'en va. Beaucoup de jetons expirés à la fois peuvent rendre les refus suivants 429 pendant une minute (ils sont comptés pour l'adresse de la boucle locale) ; les requêtes valides ne sont jamais ralenties.
list_rooms répond les salles du jeu hébergé. Une écriture faite par l'agent apparaît dans l'en-tête du Studio comme
une nouvelle révision, à votre nom ; GET /api/ops la liste.
| Symptôme | Cause | Correction |
|---|---|---|
401 avec WWW-Authenticate: Bearer resource_metadata="…"
|
Pas de jeton, ou un jeton expiré | Donnez un jeton ; renouvelez-le |
401 the access token is not valid
|
Une autre audience, un id_token, ou un jeton qui vit plus longtemps que permis | Configurez le mapper d'audience ; utilisez un jeton d'accès |
403 not a member of this project
|
Le compte n'est pas membre | Demandez une invitation à un owner |
not logged in to <url>: run studio-server login --server <url> |
La voie locale sans connexion | Connectez-vous d'abord |
<url> is not https: the tokens would travel in clear |
Une URL en http | Utilisez l'URL en https |
| L'outil renvoie un message de 423 | Un pan que quelqu'un tient | Laissez une note, ou attendez |
Les écritures de l'agent sont des opérations du journal comme les vôtres. La voie locale garde les jetons dans
~/.config/web-scumm/studio-tokens.json (mode 0600).
Les opérations de l'agent sont les vôtres : votre Undo dans le Studio les reprend, la plus récente d'abord. Pour arrêter un agent tout de suite, arrêtez son processus ou retirez son jeton du client. Le End sessions d'un owner sur votre compte refuse tous les jetons émis avant maintenant, mais un serveur stdio local en obtient un nouveau grâce à son jeton de rafraîchissement (voir Gérer les membres).
-
ADR 0029,
studio-server/src/server/mcp.ts. -
tools/studio/http-backend.ts,tools/mcp/tools-server.ts. - La ligne de commande du serveur.
Generated publication · publication générée — current documentation · documentation courante: quest'n'click 4.4.0 r1, documentation revision · révision de la documentation 8dc717c69acb62c4742b69c54a7e7dfb620f75d8.
Earlier versions and permalinks · versions précédentes et liens permanents: https://wanoo.github.io/quest-n-click/docs/
An edit made in this wiki is overwritten at the next publication · une modification faite dans ce wiki est écrasée à la publication suivante.
Edit the source · Modifier la source · Report an error · Signaler une erreur
Index (6)
Démarrer (6)
Jouer (9)
Installer (17)
- Prérequis
- Installer depuis l'archive de la release
- Installer depuis npm, une fois publié
- Installer depuis le dépôt pour travailler sur le moteur
- doctor : vérifier sa machine
- Outils pour les images
- Outils audio : ffmpeg, fluidsynth, Furnace, uv
- Mettre à jour
- Notes de mise à jour : 4.4
- Notes de mise à jour : 4.3
- Notes de mise à jour : 4.2
- Notes de mise à jour : 4.1
- Notes de mise à jour : v3
- Notes de mise à jour : v2 vers v3
- Venir de web-scumm
- Référence du paquet
- Dépannage de l'installation
Créer un jeu (55)
- Votre premier jeu
- Organisation d'un projet créé et du dépôt du moteur
- La boucle de travail
- Principes du contenu et contrat d'identité
- Salles
- Géométrie : placement, zones de marche, masques, calques, caméra
- Un objet est visible mais inaccessible
- Réactions
- Commandes du jeu
- Conditions
- Drapeaux, variables et événements : lequel choisir
- Code sur mesure
- Personnages
- Objets et inventaire
- Carte du monde
- Dialogues
- Scripts et événements
- Faire bouger les personnages : patrouilles et marches
- Sorties
- Chapitres et objectifs
- État et sauvegardes : persistant ou temporaire, renommer un id, migrations
- Mise en scène : salles larges et animations
- La scène : lumières, particules, sols
- Habillage et polices
- Titre et générique
- Héros : plusieurs personnages et choix du héros
- Mini-jeux intégrés
- Un mini-jeu sur mesure
- Traductions
- Musique en stems
- Bruitages
- Voix : par langue et par héros
- Images : prompts, découpe des planches, transparence, échelle
- Provenance des assets
- Le storyboard, source de vérité
- Concevoir des énigmes
- Mécaniques classiques
- Pages de relecture
- Référence du DSL
- Vérifier son jeu
- Ce que prouve le solveur
- Options du solveur
- Playtests
- Remix
- Speedrun pour les auteurs
- La fin scellée
- Modèle de production
- Jeux d'exemple
- Travailler avec une IA
- Construire et publier un jeu
- Publier sur GitHub Pages
- Le jeu statique sur Clever Cloud
- Autres hébergeurs statiques
- Sous-chemin, cache et service worker, déploiement incomplet, retour arrière
- Tester sur un téléphone en réseau local
Studio local (24)
- Le Studio local : présentation et lancement
- Modifier une salle
- Placement et scène
- Aperçu, application, annulation
- Storyboard
- Assets et découpe
- Vérifier : validateur, solveur, chemin critique, chaleur, santé, couverture
- Captures avant et après
- Diff sémantique
- Jouer et rejouer une session
- Explication des règles
- Langue et objectifs
- Voix et matrice héros × langues
- Carte
- Notes
- Remix dans le Studio
- Musique
- L'Assistant : votre propre clé
- Mode démo et studio-apply
- Sécurité en local et en réseau local
- API du Studio
- MCP local : configurer chaque client
- Outils MCP
- Dépannage du Studio
Studio d'équipe (21)
- Ce qui tourne où
- Concepts : révision, transaction, pan, bail, aperçu, build
- Débuter comme dev invité
- Travailler ensemble au quotidien
- Rôles et actions : la matrice complète
- Invitations
- Gérer les membres
- Écriture refusée sur le Studio hébergé : révision de base périmée (409)
- Écriture refusée sur le Studio hébergé : pan verrouillé (423)
- Reprendre après un bail perdu, une déconnexion ou un aperçu périmé
- Commentaires
- Carte et diff sémantique
- Publier des builds
- MCP distant
- Le jeu dans Git
- Mettre à jour le moteur d'un jeu hébergé
- Assets hébergés
- La ligne de commande du serveur
- Routes de santé et de métriques
- L'essayer en local avec compose.yml
- Limites connues
Clever Cloud (23)
- Clever Cloud : vue d'ensemble, coût et prérequis
- Applications et add-ons
- Domaines et TLS
- Keycloak
- OIDC générique et GitLab
- Configuration
- Premier déploiement
- Sauvegardes
- RPO et RTO
- Exercice de restauration sur une installation vierge
- Redéploiements
- Mettre à jour le serveur et vérifier l'état après une migration
- Limites du retour arrière
- Supervision
- Sécurité
- Renouveler les clés
- Récupérer l'accès administrateur
- Changer de domaine ou de fournisseur OIDC
- Worker, PostgreSQL ou Cellar en panne
- Exporter le jeu et quitter l'installation
- Rétention
- Dépannage sur Clever Cloud
- Coûts et démontage
Reality Bridge et connecteurs (16)
- Le Reality Bridge : ce que c'est
- Démarrage rapide
- Garanties
- Installer et lancer le Bridge
- Sauvegarde et restauration
- Plusieurs tenants
- Signaux et manifeste
- La ligne de commande du Bridge
- Vue d'ensemble des connecteurs
- Connecteur email
- Connecteur Telnet
- Connecteur SSH
- Connecteur Open Badges
- Le SDK des connecteurs
- Sécurité : Biscuit et signatures
- Dépannage du Bridge et des connecteurs
Contribuer (25)
- Bienvenue
- Préparer son poste de développement
- La boucle de développement
- Avant une pull request
- Conventions
- Écrire la documentation
- Architecture
- Visite du code
- Frontières d'import
- Quels tests tournent quand
- Tests de mutation
- Le cliquet de couverture
- La référence de qualité
- La CI expliquée
- Passes de terrain
- Mesures de performance
- Publier une release
- Paquets npm
- Décisions et ADR
- Gouvernance
- Pull requests des bots
- Contribuer avec des agents IA
- Politique de sécurité
- Code de conduite
- Licences et crédits