Skip to content

Play-test & debug ​

The live loop against a real running game. You ask in plain language; the assistant does the rest. Requires the runtime, input, testing, and debugger toolsets plus the MCPRuntimeProbe autoload in the game's project.

Two run modes — pick the right one ​

Under the hood

A headless run spawns a separate Godot process — a quick "does it even boot" smoke, no editor, no probe. A live play session drives the game inside the running editor, so you can inspect and steer it. The rest of this page is the live loop.

ModeToolsetAnswers
Headless smoke testruntime"does it run at all" — no editor play session, no probe
Live play sessionruntime + input + testing + debuggerinteractive inspection, input, assertions, breakpoints

For a one-call report that covers the headless side, just ask the assistant to "run the debug workflow" — that needs no extra toolset.

1. Register the runtime probe ​

You: "Set up live runtime inspection — add the probe autoload if it's missing."

The assistant checks the project's autoloads and, if the probe isn't registered, adds it. The probe runs in the game (not the editor) and no-ops in exported builds.

2. Play and inspect ​

You: "Play the main scene and show me the Player's position over time."

The assistant starts a live play session, then can read the running game's real hierarchy (not the editor's copy), sample a property over frames, find UI by its text, and read performance monitors. Pending reads carry a reason token (e.g. capture_pending) — the assistant keeps polling rather than re-issuing.

3. Simulate input ​

You: "Hold right, release, then press Space."

The assistant synthesizes key, mouse, and action input into the running game, can replay a recorded sequence or record a macro, and reports how many events the game acknowledged. While the game is paused at a debugger break, input is refused — the assistant continues execution first. A frozen injected count is the pause signal, not a bug.

4. Assert state ​

You: "Assert the Player is visible, then fuzz it with random input."

The assistant asserts live node state, runs a scripted scenario (a sequence of events plus assertions), fuzzes with random input, and compares screenshots — so behavior is checked, not just "it didn't crash".

5. Break and step ​

You: "Set a breakpoint on player.gd line 42 and step through it."

The assistant sets a breakpoint; breakpoints fire on their own line. A forced break lands on the probe's next frame (no game cooperation needed). Once stopped, it can step over/into/out, evaluate an expression in the running game (evaluate_expression — global scope, not frame-scoped), and continue. The paused-frame stack / variable dump (get_stack_frames, get_frame_variables) is not available on Godot 4.7 (#677).

See the scene (screenshots) ​

You: "Take a screenshot so you can see the current layout."

The assistant can look at the scene, not just read it — for clients that accept images. Two captures, and you pick by what you want to see:

ToolShowsNeeds
godot_editor_capture_screenshotthe editor viewport — the scene tab, layout, and gizmos you're looking atthe editor toolset; the editor must be drawing a frame
godot_runtime_capture_game_screenshotthe running game's rendered frame — the actual pixels the player seesa live play session (runtime) + the probe

Both come back as a base64 PNG image block over the same bridge round-trip: the addon grabs get_viewport().get_texture().get_image() and returns it, and the server hands it to the model as an image. Honest caveats — if the editor window isn't drawing (minimized or unfocused) the editor capture reports editor_not_drawing; a capture taken while the game is paused at a breakpoint shows the frozen frame, not a fresh one. Captures are read_only.

Use it to answer "does this actually look right?" — layout, HUD placement, a sprite that isn't showing — then diff two frames with godot_testing_compare_screenshots to catch a regression.

Debugging failures ​

SymptomFirst move
Crash on playask for a headless run and read the errors/warnings
timed_out: truenot a crash — games that never self-quit always time out; tell the assistant the timeout is expected
Script "won't parse"ask for a parse check; if it flags rescan_pending, re-check before "fixing"
Input does nothingis the game playing? is the probe registered? a full-screen overlay eating input? paused at a break?
Stuckask the assistant for the server info's next_steps, or use the troubleshoot prompt

Ask the assistant to stop the play session when you're done.

194 tools · 29 toolsets · contract version 1