Repository navigation
EN Studio MCP Setup
Français · How-to · Published, partly reviewed by a person · Applies from: 4.2.5
npm run mcp starts a Model Context Protocol server over stdio that gives any AI assistant the Studio's operations as
tools: Claude Code, Claude Desktop, Cursor, Codex CLI, Gemini CLI or a hand-written agent then read and edit a game the
way the Studio does, and you see the result live in npm run studio. This page connects each client.
Audience, context, and the statuses of what this page rests on
Audience: author · Context: local Studio
The local Studio · contract: stable · verified by CI (support matrix of 4.4.0, 2026-10-23): Chromium end to end (the Studio's checks); Windows: the unit suite only · automated checks: jobs
e2e,windows; CI plane2e,windows; 2 test files · people's passes:studio-hero-matrixnot run (#238) · known limits:no-docs-remote
Your AI client lists a quest-n-click server with tools such as list_rooms, get_room, set_text, validate and
solve, working on your game's files.
-
Started by
npm run mcpin the engine repository (tools/mcp/server.ts, SDK@modelcontextprotocol/sdk1.x). It is namedquest-n-clickand gives the engine's version. -
Tools are defined once in
tools/studio/tools.ts, shared with the Studio's Assistant; the list: MCP tools. Two resources:webscumm://game(=list_rooms) andwebscumm://room/<id>(=get_room), JSON. -
The game is chosen as for every tool:
GAME=<id>(orGAME_DIR=<folder>), otherwise the game last chosen withnpm run game, otherwiseconfig.gameofpackage.json. -
stdout carries the protocol only; logs go to stderr (
[quest-n-click mcp] ready: game "<id>" (<folder>)). Usenpm run -s mcp(silent) in client configs: without-s, npm prints its> quest-n-click mcpbanner on stdout, which strict clients reject. - A failing operation (unknown room, bad path, broken edit…) returns a tool error with the message; the server keeps running.
-
What the agent is told first: the game and how to work on it. Start with
list_roomsandget_room; learn the format withread_doc CONTENT_GUIDE; after any change runvalidate, thensolve, thenrun_tests; never invent coordinates, ask the human withadd_noteto place things in the Studio; readAGENTS.mdfor the rules. -
Screenshots need the dev server (
npm run studio) atWEB_SCUMM_DEV_URL(defaulthttp://localhost:5173/) and Playwright; otherwise the tool says why it is unavailable.
The engine repository, from 4.2.5 (the server's name quest-n-click). A created project runs the same server with
npx quest-n-click mcp (below). For a hosted Studio, the remote /mcp or npm run mcp -- --server <url>:
Remote MCP.
- Node 22.12 or later, the repository cloned and installed (
npm install). - The absolute path of your clone, written
/path/to/quest-n-clickbelow.
The claude mcp add commands run in the engine repository. The other clients read a configuration file, named in
each section; the server then runs in the folder that file gives.
Replace /path/to/quest-n-click with the absolute path of your clone. npm --prefix <folder> run -s mcp runs the
script inside <folder> whatever the client's working directory. Add "env": { "GAME": "<id>" } to work on another
game.
-
The repository ships
.mcp.json(project scope): open Claude Code in the repository and approve thequest-n-clickserver.{ "mcpServers": { "quest-n-click": { "type": "stdio", "command": "npm", "args": ["run", "-s", "mcp"], "env": {} } } }Or from the command line, in the repository (
-s localby default;-s projectwrites.mcp.json):# in the engine repository claude mcp add quest-n-click -- npm run -s mcp claude mcp add quest-n-click -e GAME=demo -- npm --prefix /path/to/quest-n-click run -s mcp
-
Edit
~/Library/Application Support/Claude/claude_desktop_config.json(macOS) or%APPDATA%\Claude\claude_desktop_config.json(Windows):{ "mcpServers": { "quest-n-click": { "command": "npm", "args": ["--prefix", "/path/to/quest-n-click", "run", "-s", "mcp"] } } }Claude Desktop does not start from your shell, so it may not find
npm(no shellPATH). Then put npm's absolute path incommand: the output ofwhich npmin a terminal, for instance"command": "/usr/local/bin/npm".
-
The repository ships
.cursor/mcp.json(project). The same block in~/.cursor/mcp.jsonworks for every project, with an absolute path instead of${workspaceFolder}:{ "mcpServers": { "quest-n-click": { "command": "npm", "args": ["--prefix", "${workspaceFolder}", "run", "-s", "mcp"] } } }
-
Add to
~/.codex/config.toml:[mcp_servers.quest-n-click] command = "npm" args = ["--prefix", "/path/to/quest-n-click", "run", "-s", "mcp"] # env = { GAME = "demo" }
-
Add to
~/.gemini/settings.json(or.gemini/settings.jsonin the repository):{ "mcpServers": { "quest-n-click": { "command": "npm", "args": ["run", "-s", "mcp"], "cwd": "/path/to/quest-n-click" } } }
Command npm run -s mcp (or npx tsx tools/mcp/server.ts) with the repository as working directory, transport
stdio. Node 22.12+.
A created project has no mcp script; its engine command starts the same server for the project's game. In any of
the configurations above, use npx with the arguments quest-n-click mcp, the project folder as working directory:
# in the created project
claude mcp add quest-n-click -- npx quest-n-click mcpThe repository's .mcp.json and .cursor/mcp.json are not copied into a created project: write the client's file
yourself.
Applies from 4.5.0
From 4.5.0, three tools read this wiki (tools/studio/tools.ts):
-
search_docs { query, lang?, audience?, context?, version?, type?, includeArchived?, limit?, cursor? }: words or a question in French or English; each result isid#sectionwith its title, type, context, versions, status, score, the reason of the match and an excerpt. No confident match gives an empty list and the index pages to try. -
list_docs { audience?, context?, type?, lang?, state? }: the pages there are to read, with their section ids. -
read_doc { id, section?, lang?, maxChars?, cursor? }: one page or one section, with where the text comes from (version, commit, doc revision) at its top;maxCharsis 20,000 by default, 100,000 at most, and acursorgives the rest.
read_doc { name } still answers as in 4.4.0: one of the eight historical pages (CONTENT_GUIDE, ENGINE, TOOLS,
STUDIO, WORKFLOW, AUDIO, UPGRADING, CLASSICS), in one text block, possibly shortened (below); the other
arguments are then ignored. Since 4.5.0 that page is rebuilt from the wiki's sections in the old page's order (wiki/legacy.json), within
1.5 times its 4.4.0 size: when the sections say more, the longest give their heading, their first paragraph and the
read_doc { id, section } that returns the rest. Giving both name and id, or neither, is a tool error: give either name (one of the 8 legacy pages) or id, not both. In the engine repository the tools read wiki/ as it is (draft pages included, said so in the
provenance); in an installed package they read its documentation bundle (ready pages only).
Limit ·
no-docs-remoteA hosted Studio's remote/mcpoffers neitherread_docnorsearch_docsnorlist_docs: an agent working on a hosted Studio reads the documentation through the local stdio server of the same engine version.
-
AGENTS.mdat the repository root is the vendor-neutral operating manual;CLAUDE.mdpoints to it. - Every MCP client connects the same way, with the configuration above.
- An AI without MCP still works: it edits the files, the Studio reloads (it watches them), you see the result and answer
in Notes or in the Storyboard, and the AI reads
notes.jsonback (Notes). Git carries the history. A typical session: Working with an AI.
The client lists the quest-n-click server as connected, with its tools. Ask it to call list_rooms: it answers with
the game's id, title, rooms and characters. In Claude Code, claude mcp list shows the server.
| Symptom | Cause | Fix |
|---|---|---|
| The client rejects the server, an "invalid JSON" or parse error at start | npm's banner on stdout | Use npm run -s mcp (with -s) |
Claude Desktop: the server fails to start, npm not found |
No shell PATH
|
Put npm's absolute path (which npm) in command
|
| The tools work on another game |
GAME or the game last chosen |
Add "env": { "GAME": "<id>" }
|
screenshot says it is unavailable |
No dev server at WEB_SCUMM_DEV_URL, or no Playwright |
Start npm run studio; install Playwright |
reading by id needs the documentation of wiki/, not available here |
No wiki or bundle where the server runs | Use read_doc { name }, or a 4.5.0 engine |
More: Studio troubleshooting.
The client's configuration file only (.mcp.json with claude mcp add -s project). The server writes the game's
files when a tool writes, as the Studio would.
-
tools/mcp/server.ts,tools/mcp/tools-server.ts,.mcp.json,.cursor/mcp.json. - MCP tools, Remote MCP, Working with an AI.
Generated publication · publication générée — current documentation · documentation courante: quest'n'click 4.5.3 r1, documentation revision · révision de la documentation b061c4ae6fbeb0be47a11ba8a442ba7e23ecb0a1.
Latest documentation · dernière documentation: https://quest-n-click.cleverapps.io/docs · https://quest-n-click.cleverapps.io/fr/docs; earlier versions · versions précédentes: each release's quest-n-click-docs-<version>.tar.gz · l'archive quest-n-click-docs-<version>.tar.gz de chaque release, https://github.com/Quest-n-Click/quest-n-click/releases
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)
Start (6)
Play (9)
Install (18)
- Requirements
- Install from the release archive
- Install from npm
- Install from the repository to work on the engine
- doctor: checking your machine
- Image toolchain
- Audio toolchain: ffmpeg, fluidsynth, Furnace, uv
- Upgrade
- Upgrade notes: 4.5
- Upgrade notes: 4.4
- Upgrade notes: 4.3
- Upgrade notes: 4.2
- Upgrade notes: 4.1
- Upgrade notes: v3
- Upgrade notes: v2 to v3
- Coming from web-scumm
- Package reference
- Install troubleshooting
Create a game (55)
- Your first game
- Layout of a created project and of the engine repository
- The working loop
- Content principles and the identity contract
- Rooms
- Geometry: placement, walk zones, masks, layers, camera
- Something is visible but unreachable
- Reactions
- Game commands
- Conditions
- Flags, variables and events: which to use
- Custom code
- Characters
- Items and inventory
- World map
- Dialogues
- Scripts and events
- Moving characters: patrols and walks
- Exits
- Chapters and objectives
- State and saves: persistent or temporary, renaming an id, migrations
- Staging: wide rooms and animations
- The stage: lights, particles, floors
- Skin and fonts
- Title and credits
- Heroes: several characters and hero choice
- Built-in minigames
- A custom minigame
- Translations
- Music in stems
- Sound effects
- Voices: per language and per hero
- Images: prompts, cutting sheets, transparency, scale
- Asset provenance
- The storyboard, source of truth
- Puzzle design
- Classic mechanics
- Review pages
- DSL reference
- Checking your game
- What the solver proves
- Solver options
- Playtests
- Remix
- Speedrun for authors
- The sealed ending
- Production template
- Example games
- Working with an AI
- Build and release a game
- Publish on GitHub Pages
- The static game on Clever Cloud
- Other static hosts
- Sub-path, cache and service worker, incomplete deploys, going back
- Testing on a phone over the LAN
Local Studio (24)
- The local Studio: overview and launch
- Edit a room
- Placement and stage
- Preview, apply, undo
- Storyboard
- Assets and cutting
- Check: validator, solver, critical path, heat, health, coverage
- Before and after captures
- Semantic diff
- Play and replay a session
- Rule explainer
- Language and objectives
- Voices and the heroes × languages matrix
- Map
- Notes
- Remix in the Studio
- Music
- The Assistant: bring your own key
- Demo mode and studio-apply
- Local and LAN security
- Studio API
- Local MCP: setting up each client
- MCP tools
- Studio troubleshooting
Team Studio (21)
- What runs where
- Concepts: revision, transaction, span, lease, preview, build
- Starting as an invited dev
- Working together day to day
- Roles and actions: the full matrix
- Invitations
- Managing members
- Write refused on the hosted Studio: stale base revision (409)
- Write refused on the hosted Studio: span locked (423)
- Recovering after a lost lease, a disconnection or a stale preview
- Comments
- Map and semantic diff
- Publishing builds
- Remote MCP
- The game in Git
- Upgrading the engine of a hosted game
- Hosted assets
- The server's command line
- Health and metrics routes
- Trying it locally with compose.yml
- Known limits
Clever Cloud (23)
- Clever Cloud: overview, cost and prerequisites
- Apps and add-ons
- Domains and TLS
- Keycloak
- Generic OIDC and GitLab
- Configuration
- First deployment
- Backups
- RPO and RTO
- Restore the Studio on a fresh installation
- Redeploys
- Upgrading the server and checking state after a migration
- Limits of going back
- Monitoring
- Security
- Rotating keys
- Recovering admin access
- Changing domain or OIDC provider
- Worker, PostgreSQL or Cellar down
- Exporting the game and leaving the installation
- Retention
- Clever Cloud troubleshooting
- Costs and teardown
Reality Bridge and connectors (16)
- The Reality Bridge: what it is
- Quick start
- Guarantees
- Install and run the Bridge
- Backup and restore
- Several tenants
- Signals and the manifest
- The Bridge's command line
- Connectors overview
- Email connector
- Telnet connector
- SSH connector
- Open Badges connector
- The connector SDK
- Security: Biscuit and signatures
- Bridge and connector troubleshooting
Contribute (25)
- Welcome
- Developer setup
- The dev loop
- Before a pull request
- Conventions
- Writing documentation
- Architecture
- Code tour
- Import boundaries
- Which tests run when
- Mutation testing
- The coverage ratchet
- The quality baseline
- CI explained
- Field passes
- Benchmarks
- Releasing
- npm packages
- Decisions and ADRs
- Governance
- Bot pull requests
- Contributing with AI agents
- Security policy
- Code of conduct
- Licences and credits