Skip to main content
Glama
IRSofka Workstation MCP

IRSofka Workstation MCP

by irsjofka-alt

IRSofka Workstation MCP

The machine side of the Irsofka station bridge: a stdio Model Context Protocol server that forwards to the editor's own TCP socket, so an engine can drive a running editor without anyone typing into it.

engine (MCP client) ── stdio JSON-RPC ──> server.py ── newline JSON ──> editor bridge 127.0.0.1:9877
  • License: Business Source License 1.1, Licensor PT IRSofka Data Teknologi, Change License the Apache License, Version 2.0, effective at each version's Change Date. UPSTREAM states what this is derived from — nothing third-party; it is a client of a protocol documented from the operator's own plugin source and confirmed by a live round trip.

  • Requires: Python 3.9+ (stdlib only) and the editor running with its bridge plugin loaded.

Why the name is not the engine's name

The repository owns the machine side of the bridge — server, transport, gates. The editor plugin stays an installed artifact of the engine project, and putting a third party's product name in a repository we publish adds a trademark question without adding information.

Related MCP server: uefn-mcp-pro

Tools

Tool

Surface

ue_world

spawn, bulk_spawn, duplicate, set_transform, get_transform, attach, delete, get_all_actors, select_actors, set_lighting, set_physics, set_visibility, set_folder, set_tags, set_material, level_streaming

ue_blueprint

create, add_variable, add_function, add_call_function, connect_pins, set_pin_default, compile, get_summary

ue_material

create_material, create_instance, set_parameter, set_texture, set_static_switch, get_parameters

ue_media

import_sound, bind_sound, play_sound, spawn_niagara, set_niagara_parameter, create_sequence

ue_vision

capture (viewport frame), frame (aim the camera at an actor)

ue_pipeline

ordered steps in one call, with PARTIAL reporting

ue_status

endpoint, whether the editor answers, the class table, the step cap

The three rules this server adds over the raw socket

All three come from defects measured on 2026-10-15 (tools/ue_bridge_probe.py in the workstation repository), not from preference.

1. Class names are resolved, or the command is refused. The engine's LoadClass wants /Script/Engine.StaticMeshActor. Given a bare name it returns null and the handler falls back to AActor::StaticClass() — and a bare AActor has no RootComponent, so every later transform is a silent no-op while spawn, set and get all answer SUCCESS. Measured: spawn reports location [10,20,30], get_transform reads [0,0,0], before and after a set_transform that also said SUCCESS. This server maps known short names to their full paths, refuses to send a name it cannot resolve (CLASS_UNRESOLVED, sent: false), and flags an answer that comes back as Actor as DEGRADED rather than passing it on as success.

2. A write is verified before it is reported. ActionSetTransform returns {"status":"SUCCESS"} and nothing else. So this server reads the transform back and returns before / after / asked / match and a changed flag computed from the editor's own numbers. A SUCCESS that did not move anything is reported as DEGRADED, not as done.

3. Unreachable is a word. If the bridge is not listening, tools answer UNAVAILABLE with the endpoint and the fact that nothing was sent. A call the editor never saw is never reported as one that happened.

Two words travel in every reply, and they answer to different owners: status is what the engine said, passed through untouched; state is this server's word for the same fact, mapped by one table (SUCCESS → DONE, UNAVAILABLE → UNAVAILABLE). ok is derived from that mapping and MCP isError is derived from ok, so the payload and the protocol flag cannot disagree. The first version computed isError as not out.get("ok") while the engine's own success reply contains no ok key — which meant every successful domain call reached a client labelled an error, and 24 green offline checks never noticed because none of them drove tools/call on a domain tool. The suite now does, at the JSON-RPC layer, in both directions.

Thread and timing facts that shape the design

The editor runs every handler on the GameThread through FIRSofkaTaskRunner::ExecuteSync. One command therefore blocks the socket, and a pipeline of them holds the editor's main thread for the sum of their times — which is why ue_pipeline caps at 64 steps and aborts the remainder the moment the editor stops answering, rather than continuing to send into a dead socket.

ue_pipeline reports partial truth on purpose: a step that fails does not undo the steps that already ran, so the reply names which ones succeeded and which did not.

Overlap with the server that already ships inside the plugin

The plugin installs its own MCP front-end (.../IRSofkaStationCore/Content/Python/mcp_server.py), and on this workstation that one is already registered in the engines under the name irsofka-unreal-mcp. Two servers forwarding to the same editor socket is a real condition, not a typo, so say what distinguishes them and what it costs:

  • the plugin's front-end is a thin, complete passthrough: it exposes every action the C++ accepts, in the shape the C++ wants, including the bare class names that silently produce an immovable actor. It is the right tool when you want exactly the plugin's surface.

  • this server is the station's product surface: it resolves class names or refuses, verifies a write by reading it back, caps pipelines so one call cannot hold the GameThread indefinitely, and reports UNAVAILABLE rather than a success the editor never saw. It is the right tool when an unattended run is the caller.

Both may be registered at once. What must not happen is an engine choosing between them by name alone, because their answers differ on the failure paths — which is the whole reason this one exists. Register the one that matches the caller, or name the difference in the prompt.

python3 server.py --selftest     # 28 checks, no editor needed (a fake bridge on an ephemeral port)
python3 server.py --status       # honest: ok=false and state=UNAVAILABLE when the editor is closed

Measured against a live editor on 2026-10-15: spawn StaticMeshActor resolved to /Script/Engine.StaticMeshActor, reported class=StaticMeshActor, and get_transform read the spawn location back as [5.0, 6.0, 7.0]; set_transform to [9.5, -8.25, 3.125] with scale [3,1,1] returned changed: true with all_match: true; an unresolvable class was refused with sent: false; a three-step pipeline reported PARTIAL with 1 succeeded; the test actor was deleted and no leftover matched the probe prefix.

Not verified

ue_blueprint, ue_material, ue_media and ue_vision are forwarded and their framing is exercised by the selftest against a fake bridge, but no blueprint compile, material parameter, sound, Niagara system, sequence or viewport capture was driven against the live editor in this session. Treat their action lists as the plugin's contract, not as measurements. The CLASS_PATHS table is also partial: entries are names this machine's engine was checked to load, and anything outside it is refused rather than guessed.

Available Tools

7 tools
ue_blueprintC

Blueprint authoring: create / add_variable / add_function / add_call_function / connect_pins / set_pin_default / compile / get_summary.

NameRequiredDescriptionDefault
actionYes
paramsNo

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full behavioral burden. The authoring actions imply mutation, but the description does not disclose side effects, whether changes are reversible, permission requirements, or what compile or connect_pins actually do. The action names give minimal implicit context but fall well short of transparency for a mutation-heavy tool.

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 description is a single, front-loaded sentence with no wasted text. Its brevity is efficient, though it borders on under-specification rather than pure conciseness.

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

Completeness2/5

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

For a multi-action tool with a nested params object, no output schema, no annotations, and 0% schema description coverage, the description is too thin. It enumerates action names but leaves the per-action parameter contract and behavioral expectations almost entirely unaddressed.

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 0% and there are two parameters, one of which is a nested object. The description usefully enumerates valid values for the action parameter, but it says nothing about the structure or requirements of the params object for each action, leaving half the parameter semantics undocumented.

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?

The description identifies the resource clearly as Blueprint authoring and enumerates the specific actions it supports (create, add_variable, add_function, etc.). That makes it distinguishable from siblings such as ue_world or ue_material, though the individual action names are not explained.

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

Usage Guidelines2/5

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

The description gives no guidance on when to choose this tool over alternatives, no prerequisites for authoring operations, and no exclusions. It only lists action names, leaving the agent to infer usage context entirely.

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

ue_materialC

Materials and instances: create_material / create_instance / set_parameter / set_texture / set_static_switch / get_parameters.

NameRequiredDescriptionDefault
actionYes
paramsNo

TDQS

C2.7/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full behavioral burden and provides none of it. It does not disclose that the create_* and set_* actions mutate project assets, whether those writes are destructive or reversible, what permissions are needed, or what a call returns.

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?

A single terse line, front-loaded with the resource and then the operations, with no filler sentences. It is efficient, though the brevity reflects under-specification rather than disciplined concision.

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

Completeness2/5

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

For a two-parameter dispatcher with a free-form nested params object, no annotations, and no output schema, the description is far too thin. An agent knows the action names but not what shape params must take for any of them, which is the minimum needed to invoke it correctly.

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

Parameters2/5

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

Schema coverage is 0% and the 'action' string has no enum, so the enumerated action names are genuinely useful parameter information that the schema does not provide. However, the nested 'params' object — which must carry different arguments per action — is completely unexplained, leaving the harder half of the call undocumented.

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?

The description states the resource ('Materials and instances') and enumerates six concrete operations, so an agent can tell this is the material authoring/querying surface rather than ue_world, ue_blueprint or ue_media. It lacks a single unifying verb ('manage'/'author'), but the action list makes the domain unambiguous.

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

Usage Guidelines2/5

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

There is no guidance on when to use this tool versus siblings, nor when to prefer create_material over create_instance, nor any prerequisites (e.g. asset must exist before set_parameter). The action list implies what is possible but says nothing about selection criteria or ordering constraints.

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

ue_mediaC

Audio, Niagara and Sequencer: import_sound / bind_sound / play_sound / spawn_niagara / set_niagara_parameter / create_sequence.

NameRequiredDescriptionDefault
actionYes
paramsNo
timeoutNo

TDQS

C2.4/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden. It reveals only that actions like import_sound and spawn_niagara exist, implying mutation, but says nothing about side effects on assets or levels, permissions, reversibility, or the dispatch semantics of the action/params/timeout trio.

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

Conciseness3/5

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

It is a single compact line with the domain grouping front-loaded, so there is no padding. However, the compression goes too far: the slash-separated token list reads as under-specification rather than tight, purposeful prose.

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

Completeness2/5

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

With no annotations, no output schema, 0% parameter documentation, and a free-form nested `params` object, this description is far short of what an agent needs to invoke the tool reliably. Missing are the action-to-parameter mapping, return behavior, and any failure/timeout semantics.

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

Parameters2/5

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

Schema description coverage is 0% for three parameters, including a nested, untyped `params` object. The description implicitly enumerates valid `action` values but does not state which params each action accepts, what `timeout` governs, or how `params` is shaped — a significant compensation gap for the most important schema field.

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

Purpose3/5

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

The description names three domains (Audio, Niagara, Sequencer) and enumerates six concrete action strings, which lets an agent infer this is a media/asset operation dispatcher for Unreal Engine. However, it never states the tool's purpose in a verb+resource form, and the domain labels are only implicit differentiation from siblings like ue_material or ue_blueprint.

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

Usage Guidelines2/5

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

There is no when-to-use / when-not-to-use guidance and no mention of the sibling tools (ue_world, ue_blueprint, ue_material, etc.) that an agent must choose between. The listed actions imply scope, but nothing routes the agent away from the wrong tool.

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

ue_pipelineC

Run ordered steps in one call with PARTIAL reporting: a step that fails does not erase the ones that already ran, and an editor that stops answering aborts the rest instead of dropping them silently.

NameRequiredDescriptionDefault
stepsYes

TDQS

C2.7/5.0
Behavior3/5

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

With no annotations, the description carries the full burden, and it does disclose real behavior: partial results survive a failing step and an unresponsive editor aborts rather than silently dropping remaining steps. However, it never says whether steps after a failure still execute, how errors surface, or what the per-step timeout means, which are exactly the ambiguities that matter for a batch executor.

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?

One front-loaded sentence that leads with the action and then the reporting behavior. No filler, though the partial-reporting clause is packed tightly enough that its meaning is slightly murky.

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

Completeness2/5

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

No output schema and no annotations for a tool whose whole value is reporting per-step outcomes, yet the description never says what comes back on partial success. Combined with zero parameter documentation and a 64-step cap disclosed only in the schema, an agent cannot reliably call or interpret this tool from the description alone.

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

Parameters2/5

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

Schema description coverage is 0% and the single parameter is a nested array of step objects (domain, action, params, timeout, maxItems 64). The description adds nothing about these: no ordering semantics, no explanation of how per-step params pass through, no timeout units or per-step vs global scope.

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

Purpose3/5

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

"Run ordered steps in one call" states a batching verb and hints at multi-step orchestration, but never says what a step is or that it dispatches into the domain siblings (world/blueprint/material/...). The agent must read the nested enum to infer that this is a fan-out across domains rather than a distinct capability.

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

Usage Guidelines2/5

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

There is no guidance on when to batch via ue_pipeline versus calling ue_world, ue_blueprint, ue_material, ue_media or ue_vision directly. Ordering is mentioned but not as a selection criterion, so the agent gets an implied usage rather than explicit routing.

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

ue_statusA

Bridge facts: endpoint, whether the editor answers, the class table this server resolves, and how many steps a pipeline may take.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.5/5.0
Behavior3/5

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

With no annotations, the description must carry behavioral disclosure; it says the result includes whether the editor answers, which signals a live health probe, and lists resolved class table and pipeline step limit. It does not explicitly state read-only/side-effect behavior or auth/rate limits, leaving important behavioral context implicit.

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?

One front-loaded sentence with a colon-separated list and no filler. Every phrase describes a returned fact.

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?

With no output schema, the description does explain the main return values (endpoint, editor availability, class table, pipeline step limit). For a zero-parameter status tool this is reasonably complete, though it could say what format these facts take or how to interpret failures.

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?

There are zero parameters and schema coverage is 100%, so the baseline is 4. The description does not need to explain parameters.

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?

The description names the concrete facts returned—endpoint, editor responsiveness, class table, and pipeline step limit—so an agent knows this is a bridge/editor status probe. It lacks an explicit verb and does not differentiate from siblings such as ue_pipeline, so it is clear but not maximally sharp.

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

Usage Guidelines2/5

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

There is no explicit when-to-use or when-not-to-use statement, nor any reference to alternatives. The content implies a health/status check, but the agent must infer that from the listed facts.

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

ue_visionC

Viewport eyes: capture (active viewport as an image) and frame (move the camera onto an actor).

NameRequiredDescriptionDefault
actionYes
paramsNo

TDQS

C2.7/5.0
Behavior2/5

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

No annotations exist, so the description carries the full disclosure burden. It does hint that frame mutates editor camera state while capture produces an image, but it never states how the image is returned (inline, file path, handle), whether framing requires the actor to be selected/visible, or what permissions/mode (PIE vs editor) are needed.

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?

A single front-loaded sentence with no filler; the two modes are presented compactly. It is arguably too terse given the undocumented payload, but there is no wasted text.

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

Completeness2/5

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

With a nested free-form params object at 0% coverage, no annotations, and no output schema, the description should explain how to shape the action/params payload and what capture returns. Neither is covered, so an agent cannot reliably invoke this tool from the definition alone.

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

Parameters2/5

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

Schema description coverage is 0% and the only structured info is a required untyped 'action' string plus an opaque nested 'params' object. The description implies the action values ('capture', 'frame') and that frame needs an actor reference, but it names no parameter keys or nested shape, leaving the payload essentially undocumented.

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?

Names the resource (the editor viewport) and enumerates the two concrete actions: capture the active viewport as an image and frame the camera onto an actor. The 'viewport eyes' metaphor is decorative but the parentheticals make the capability unambiguous and distinct from the world/blueprint/material siblings.

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

Usage Guidelines2/5

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

Lists what the two modes do but gives no condition for choosing between them and no exclusions relative to siblings (e.g., when to use ue_world for actor inspection instead of framing on an actor here). An agent must guess which action applies to its situation.

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

ue_worldB

Scene actors on the editor side: spawn / bulk_spawn / duplicate / set_transform / get_transform / attach / delete / get_all_actors / select_actors / set_lighting / set_physics / set_visibility / set_folder / set_tags / set_material / level_streaming. spawn resolves friendly class names to /Script/Engine.* and refuses to send one it cannot resolve; set_transform reads the transform back and reports what actually landed.

NameRequiredDescriptionDefault
scaleNo
actionYes
paramsNo
locationNo
rotationNo
actor_classNo
actor_labelNo

TDQS

B3.1/5.0
Behavior3/5

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

With no annotations, the description carries the full burden; it does add real value by disclosing that spawn validates friendly class names and refuses unresolvable ones, and that set_transform reads back the landed transform. However, it is silent on the destructive nature of delete, on any permissions or editor-connection requirements, and on level_streaming side effects.

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?

Purpose is front-loaded, followed by the action enumeration and then two behavioral caveats; there is no filler. The long slash-delimited action run-on is dense but functional rather than wasteful.

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

Completeness2/5

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

A single dispatcher covering ~16 actions with 7 parameters, a nested params object, no annotations, and no output schema needs a per-action parameter contract that this description does not provide. An agent can identify the tool but cannot reliably determine which parameters each action requires or what state it mutates.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate and largely does not: the 'params' object is never mentioned, and the mapping of location/rotation/scale to specific actions is only hinted via set_transform. The note about actor_class resolving to /Script/Engine.* is the one genuine semantic addition.

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?

Names the resource precisely ('scene actors on the editor side') and enumerates the specific operations it dispatches (spawn, duplicate, attach, set_lighting, level_streaming, etc.), so an agent knows this is the actor/level-manipulation entry point. It does not explicitly contrast itself with siblings like ue_blueprint or ue_material, but the actor-scoped framing does most of the disambiguation work.

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?

The action list implies when to reach for this tool, but there is no explicit 'use this when / use X instead' guidance and no routing to ue_blueprint, ue_material, or ue_status. An agent must infer from the action vocabulary which requests belong here versus a sibling tool.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 7 tool updatesv0.1.0
    • First observedue_blueprint
    • First observedue_material
    • First observedue_media
    • First observedue_pipeline
    • First observedue_status
    • First observedue_vision
    • First observedue_world

TDQS

B3.2/5.0

Scored across 7 tools

Disambiguation5/5

Each tool maps to a clearly distinct domain: world actors, blueprints, materials, media, viewport vision, pipeline orchestration, and bridge status. The only possible overlap is ue_pipeline invoking operations from other tools, but its ordered-multi-step purpose is explicitly different from direct domain calls.

Naming Consistency5/5

All tools follow a consistent ue_<domain> naming pattern with lowercase snake_case-like names. The convention is predictable and readable across the entire set.

Tool Count5/5

Seven tools is well within the ideal range and matches the server's domain-grouped design. Each tool represents a coherent editor subsystem rather than an arbitrary or redundant operation.

Completeness3/5

The surface covers many major editor areas, but there are notable lifecycle gaps such as blueprint component/event authoring, material deletion or graph editing, and sequencer keyframe editing. These gaps are workable in some cases but will likely cause agent dead ends for common Unreal workflows.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI coding agents to work inside a live Unreal Editor for Fortnite session: write and compile Verse, place and wire Creative devices, edit Scene Graph entities, manipulate actors and assets, take screenshots, run playtests, and read editor logs via MCP.
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Enables AI agents to operate the Unreal Editor via MCP: reading, creating, and editing blueprints at the node level, authoring materials and UMG widgets, auditing projects, and verifying runtime behavior in PIE with read-back checks.
    34
    1
    Apache 2.0