Skip to main content
Glama

stop_play_in_editor

Destructive

End an active Play-in-Editor (PIE) session in Unreal Editor, optionally forcing it when another MCP session or a human started PIE.

Instructions

Press Stop: requests the end of the Play-in-Editor session (EditorRequestEndPlay). WARNING: pie_stopped is HARDCODED true whenever PIE was running and teardown is async, so the only oracle is a follow-up is_play_in_editor_active. WARNING: Treat every call as an operation that CAN KILL THE EDITOR: any UWorld/UPackage handle left in an execute_python global keeps the PIE world rooted and the engine aborts with "Object ... from PIE level still referenced" -- purge the main namespace and gc.collect() BEFORE calling. Refuses when another MCP session (or a human) started the PIE, and then needs force=true.

Returns: { pie_stopped: bool (hardcoded true when PIE was up -- not a measurement), was_in_pie: bool, still_in_pie: bool (read immediately, so usually still true: teardown is async), message: string }

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
forceNoOptional bool (default false). Override the PIE-ownership guard: stop even if another session (or a manually-started PIE) currently owns Play-in-Editor. Read by the server before the tool runs; without it, stopping a PIE your session does not own is refused with pie_owner/requester in the payload.

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv1.1.0

TDQS

A4.7/5.0
Behavior5/5

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

Goes far beyond the annotations by disclosing that pie_stopped is hardcoded true and not a measurement, that teardown is async, that leftover UWorld/UPackage handles can kill the editor, and that ownership guards trigger refusals. These are critical safety and state details not captured by destructiveHint=true alone.

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

Conciseness5/5

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

Purpose is front-loaded in the opening clause, and the subsequent sentences are dense but each conveys a necessary safety or behavioral fact for a destructive tool. There is no filler or redundant restatement.

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

Completeness5/5

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

For a destructive, stateful editor operation, the description covers the trigger, prerequisites, refusal path, async-teardown caveat, and a detailed return-value contract even though no output schema exists. It fills all operational gaps left by annotations and schema.

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

Parameters3/5

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

Schema description coverage is 100% and the force parameter is fully documented in the schema itself. The description's note that force=true is needed after a refusal adds no semantics beyond what the schema already states, so the baseline 3 is appropriate.

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

Purpose5/5

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

States a specific verb and resource: stop/request the end of the Play-in-Editor session via EditorRequestEndPlay. It distinguishes the operation from its follow-up oracle is_play_in_editor_active and from the broader sibling list, making it immediately identifiable.

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

Usage Guidelines5/5

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

Provides explicit when-not conditions: it refuses when another MCP session or a human started PIE and then requires force=true. It also gives prerequisites (purge the __main__ namespace and gc.collect() before calling) and names the alternative is_play_in_editor_active as the only oracle for verifying shutdown.

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

Deploy Server

Other Tools