Skip to main content
Glama

Screenshot / Camera

screenshot-camera
Read-onlyIdempotent

Capture a PNG image from any Camera3D or Camera2D in the edited scene for direct LLM inspection without disturbing the editor's live view.

Instructions

Capture a screenshot from a specific Camera3D (or Camera2D) in the edited scene and return it as a PNG image for direct LLM inspection. Identify the camera with 'nodeRef' (instanceId preferred, else a scene-tree path). The camera's own world is rendered into a temporary off-screen SubViewport at the requested 'width'x'height', so the editor's live selection/camera is left untouched. Output edges are capped to keep the response transportable. NOTE: rendering needs a real GPU — a Godot launched with '--headless' yields an empty image, surfaced here as a structured error rather than a blank PNG.

Argument types — give these arguments as RQL values (as in rql-mutate): {key: value, …}, [a, b], "text", 1.5, true, ref("Node3D#12") from a query result, godot.find("Name"); leave out keys you do not need: NodeRef — a node: ref("Node3D#12") from a query, godot.find("Name"), an instance id, or its path below the scene root as text ("Level/Player")

Input Schema

NameRequiredDescriptionDefault
widthNoOutput width in pixels. Default 1920. Must be > 0 and within the dimension cap.
heightNoOutput height in pixels. Default 1080. Must be > 0 and within the dimension cap.
nodeRefYesReference to the camera Node (Camera3D or Camera2D) to capture from (instanceId preferred, else scene-tree path). RQL: NodeRef

Schema Changelog

Changes observed during successful MCP inspections.

  1. Addedv0.35.1

TDQS

A4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, idempotent, non-destructive), yet the description still adds real behavioral value: rendering happens in a temporary off-screen SubViewport so the editor's live selection/camera is untouched, output edges are capped for transportability, and a --headless launch yields a structured error rather than a blank PNG. That headless failure mode is exactly the hidden behavior an agent needs before calling.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The lead sentences are front-loaded and dense with useful information. The trailing 'Argument types — give these arguments as RQL values' block is generic shared boilerplate that partly duplicates the schema, adding bulk without adding tool-specific meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 3-parameter read tool with no output schema, the description covers the return type (PNG), the rendering isolation, the size limiting, and the headless error case. The remaining gap is that the dimension cap is referenced but never quantified, and sibling disambiguation is absent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema baseline is a 3. The description goes beyond it by spelling out the accepted NodeRef forms (ref("Node3D#12"), godot.find("Name"), instance id, or a path below the scene root) and by stating that unneeded keys may be omitted. It does not clarify the actual dimension cap value for width/height.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: capture a screenshot from a specific Camera3D (or Camera2D) in the edited scene and return a PNG. The nodeRef requirement and off-screen SubViewport rendering are concrete. It stops short of naming the siblings screenshot-viewport / screenshot-isolated, which are the obvious alternatives an agent must choose between, so differentiation is only implicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the framing (render a specific camera's world without disturbing the editor), but there is no explicit when-to-use/when-not statement and no routing to screenshot-viewport or screenshot-isolated. The agent must infer the choice from names alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.