quest'n'click 4.5.0 · r1

Construite pour quest'n'click 4.5.0, révision r1. Si elle est publiée, et laquelle est la courante, est dit par publication.json.

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 CI studioHosted ; 3 fichiers de tests · passes humaines : studio-hosted pas faite (#149), studio-collab pas faite (#150), studio-preview pas faite (#166), studio-assets-hosted pas faite (#167), studio-mcp-remote pas faite (#196), studio-oidc-generic pas 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.

Ce que vous obtenez

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.

Contexte et versions

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.

Prérequis

Où lancer les commandes

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.

Étapes

  1. Choisissez la voie.
    • À distance, en HTTP : le /mcp du 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.
  1. À 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.audience du Studio. Un fournisseur qui tire l'audience du paramètre resource de MCP donne <URL publique>/mcp : mettez cette URL dans oidc.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é.

  1. 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.fr
    

    Dans la configuration d'un client, la commande est npm avec les arguments ["--prefix", "/path/to/quest-n-click", "run", "-s", "mcp", "--", "--server", "https://studio.example.fr"]. Le jeton se renouvelle tout seul ; https seulement.

  1. 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.

Les outils proposés

Proposés sur un Studio hébergé (les deux voies)Non proposés
list_rooms, get_room, get_ir, get_storyboard, get_notesscreenshot (demande un navigateur sur la machine)
set_layout, set_text, set_value, add_entity, set_storyboard, add_noterun_tests (demande le dépôt)
validate, solve (sans politique reality : une 501), lint, content_reportread_doc, search_docs, list_docs (la documentation)
world_graph, dialogue_tree, puzzle_graph, storyboard_coverage, playtestsasset_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.

Ce qu'est l'écriture d'un agent

Garantie · mcp-bearer-only · référencée · exécutée sur aff6caab7514 · portée vérifiée par son auteur (IA), pas relue /mcp demande un jeton Bearer, et refuse un jeton d'une autre audience, le cookie de session, un non-membre et un GET.

Limite · mcp-remote-limits Un message JSON-RPC par requête : un lot est refusé (400). GET et DELETE sur /mcp ré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.

Résultat attendu, et comment le vérifier

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.

Erreurs courantes

SymptômeCauseCorrection
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 validUne autre audience, un id_token, ou un jeton qui vit plus longtemps que permisConfigurez le mapper d'audience ; utilisez un jeton d'accès
403 not a member of this projectLe compte n'est pas membreDemandez une invitation à un owner
not logged in to <url>: run studio-server login --server <url>La voie locale sans connexionConnectez-vous d'abord
<url> is not https: the tokens would travel in clearUne URL en httpUtilisez l'URL en https
L'outil renvoie un message de 423Un pan que quelqu'un tientLaissez une note, ou attendez

Fichiers ou données modifiés

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).

Revenir en arrière

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).

Références


Modifier la source de cette page · Signaler une erreur