Skip to content

PropertyConversion failures crash command dispatcher while telemetry continues #654

@mifsopo1

Description

@mifsopo1

Version: MCP for Unity 9.2.0 (com.coplaydev.unity-mcp)
Unity Version: 6000.0.31f1 (Unity 6)
OS: Windows
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
BUG #1: AudioSource Reference Conversion Failure

Tool Call:
{
  "tool": "manage_components",
  "action": "set_property",
  "target": "AudioManager",
  "component_type": "AudioManager",
  "property": "musicSource",
  "value": 12345
}

Note: Passing integer where AudioSource object reference expected

Error in Editor.log (Line 7870):
[UnityEngineObjectConverter] Unexpected token type 'Integer' when deserializing AudioSource. Expected Null, String, or Object.

MCP-FOR-UNITY: [ManageComponents] Failed to convert value for field 'musicSource' to type 'AudioSource'.

Stack:
MCPForUnity.Editor.Helpers.PropertyConversion:ConvertToType
MCPForUnity.Editor.Helpers.ComponentOps:SetProperty
MCPForUnity.Editor.Tools.ManageComponents:TrySetProperty
MCPForUnity.Editor.Tools.ManageComponents:SetProperty
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
BUG #2: Vector2 Array Format Rejection

Tool Call:
{
  "tool": "manage_components",
  "action": "set_property",
  "target": "RaceResultsPanel",
  "component_type": "RectTransform",
  "property": "anchorMin",
  "value": [0, 0]
}

Error in Editor.log (Line 16044):
MCP-FOR-UNITY: Error converting token to UnityEngine.Vector2: Error reading JObject from JsonReader. Current JsonReader item is not an object: StartArray. Path 'value'.
Token: [0,0]

MCP-FOR-UNITY: [ManageComponents] Failed to set property 'anchorMin'

Stack:
MCPForUnity.Editor.Helpers.PropertyConversion:ConvertToType
MCPForUnity.Editor.Helpers.ComponentOps:SetProperty
MCPForUnity.Editor.Tools.ManageComponents:TrySetProperty
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
CRITICAL ISSUE: Command Dispatcher Crash

After PropertyConversion exceptions:
✅ telemetry_ping continues working
✅ telemetry_status returns success
❌ All other tools fail: "No Unity Editor instances found"
❌ Instance registry corrupted
⚠️ No indication of crash in telemetry (MISLEADING)

Reproduction:

  1. Call manage_components with set_property
  2. Pass incompatible type (int for Object, array for Vector2)
  3. PropertyConversion throws unhandled exception
  4. Subsequent commands fail silently
  5. telemetry_ping still succeeds → false positive

Workaround: Restart MCP window
// SUGGESTED FIX #1: Graceful Error Handling

public static object ConvertToType(JToken token, Type targetType)
{
    try 
    {
        return ConvertLogic(token, targetType);
    }
    catch (Exception ex)
    {
        McpLog.Error($"Convert failed: {ex.Message}");
        return null; // Don't crash dispatcher
    }
}

// SUGGESTED FIX #2: Support Multiple Vector2 Formats

if (targetType == typeof(Vector2))
{
    if (token.Type == JTokenType.Array)
    {
        var arr = token.ToObject<float[]>();
        return new Vector2(arr[0], arr[1]);
    }
    else if (token.Type == JTokenType.Object)
    {
        return token.ToObject<Vector2>();
    }
}

// SUGGESTED FIX #3: UnityEngine.Object Instance ID Support

if (typeof(UnityEngine.Object).IsAssignableFrom(targetType))
{
    if (token.Type == JTokenType.Integer)
    {
        int instanceId = token.ToObject<int>();
        return EditorUtility.InstanceIDToObject(instanceId);
    }
}

// SUGGESTED FIX #4: Telemetry Should Reflect State

public class TelemetryStatus
{
    public bool Connected { get; set; }
    public bool CommandDispatcherHealthy { get; set; } // NEW
    public string LastError { get; set; } // NEW
}

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
IMPACT

Severity: HIGH

  • Silent failures mislead users/AI agents
  • Unrecoverable without restart
  • No error visibility in telemetry
  • Breaks workflows relying on status checks

Frequency: Common when setting properties programmatically

Affected: manage_components, all tools using PropertyConversion

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
ADDITIONAL CONTEXT

MCP Successfully Restarted 3 Times:
Line 45974: StdioBridgeHost started on port 6400
Line 46063: StdioBridgeHost started on port 6400
Line 46102: StdioBridgeHost started on port 6400
→ Shows recovery is possible, but requires manual intervention

Connection Was Stable Before PropertyConversion Errors:

  • Tool calls worked fine initially
  • Errors only occurred during component property setting
  • Previous manage_gameobject, manage_scene calls succeeded

Similar Issues Likely Affect:

  • Vector3 (position, rotation, scale)
  • Vector4 (colors, shader properties)
  • Color (material colors)
  • Quaternion (rotations)
    → Any Unity struct using array format will fail

AI Agent Context:

  • This bug specifically impacts AI agents (Claude, etc)
  • Agents naturally use array format: [x,y,z] not {x:x, y:y, z:z}
  • No documentation on MCP API shows correct format
  • Tool parameter descriptions don't specify object vs array

Documentation Gap:
Current manage_components docs don't show:

  • How to reference UnityEngine.Object types (instance ID? GUID? path?)
  • Expected format for Vector2/3/4 (array or object?)
  • Which properties support programmatic setting
  • Error recovery when conversion fails

False Positive in Tool Description:
manage_components tool says it can "set_property" but:

  • Fails on common Unity types
  • No validation before attempting
  • No graceful degradation
  • Misleading success on telemetry while dispatcher dead

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions