Editor tools for worldbuilding. Exposes two MCP tools: one to scatter/clear/erase clutter calling ClutterAndPhysicsDriver.ScatterClutter, and one async tool to run physics settling via ClutterAndPhysicsDriver.SettlePhysicsAsync and return JSON results or failure payloads.
#nullable enable
using System;
using System.ComponentModel;
using System.Threading.Tasks;
namespace Editor.Mcp
{
public static partial class SboxMcpAssistant
{
[McpTool( "pocketknife_clutter_scatter" )]
public static string ClutterScatter(
[Description( "Action: scatter, clear, erase, flush" )] string action = "flush",
[Description( "Brush/scatter radius" )] float radius = 500.0f,
[Description( "Density instance count" )] int density = 50 )
{
try
{
return McpJson.Write( ClutterAndPhysicsDriver.ScatterClutter( action, radius, density ) );
}
catch ( Exception ex )
{
return McpJson.Write( ToolOutcome<object>.Failure( null, ToolStatus.Failed, "clutter.scatter_failed", "Clutter scattering failed.", ex ) );
}
}
[McpTool( "pocketknife_physics_settle" )]
public static async Task<string> PhysicsSettle(
[Description( "Duration in seconds to let physics simulate and settle (0.2 - 10.0)" )] float durationSeconds = 1.5f,
[Description( "Optional tag to filter which rigidbodies settle" )] string? targetTag = null )
{
try
{
var result = await ClutterAndPhysicsDriver.SettlePhysicsAsync( durationSeconds, targetTag );
return McpJson.Write( result );
}
catch ( Exception ex )
{
return McpJson.Write( ToolOutcome<object>.Failure( null, ToolStatus.Failed, "physics.settle_failed", "In-editor physics settling failed.", ex ) );
}
}
}
}