Editor/Tools/WorldBuildingTools.Terrain.cs

Editor MCP assistant tool definitions for terrain operations. Exposes two MCP tools: TerrainSculpt and TerrainPaint, which call TerrainSculptDriver.Sculpt and TerrainSculptDriver.PaintSplat and return JSON-encoded outcomes.

File Access
#nullable enable
using System;
using System.ComponentModel;
using Sandbox;

namespace Editor.Mcp
{
	public static partial class SboxMcpAssistant
	{
		[McpTool( "pocketknife_terrain_sculpt" )]
		public static string TerrainSculpt(
			[Description( "Terrain GameObject name (defaults to first in scene)" )] string? terrainQuery = null,
			[Description( "Operation: procedural_generate, flatten, smooth" )] string operation = "procedural_generate",
			[Description( "Algorithm: perlin, crater, terrace" )] string algorithm = "perlin",
			[Description( "Scale frequency factor" )] float scale = 1.0f,
			[Description( "Height amplitude" )] float height = 1000.0f,
			[Description( "Noise roughness factor" )] float roughness = 0.5f )
		{
			try
			{
				return McpJson.Write( TerrainSculptDriver.Sculpt( terrainQuery, operation, algorithm, scale, height, roughness ) );
			}
			catch ( Exception ex )
			{
				return McpJson.Write( ToolOutcome<object>.Failure( null, ToolStatus.Failed, "terrain.sculpt_failed", "Terrain sculpting failed.", ex ) );
			}
		}

		[McpTool( "pocketknife_terrain_paint" )]
		public static string TerrainPaint(
			[Description( "Terrain GameObject name" )] string? terrainQuery = null,
			[Description( "Surface UV X coordinate (0.0 - 1.0)" )] float uvX = 0.5f,
			[Description( "Surface UV Y coordinate (0.0 - 1.0)" )] float uvY = 0.5f,
			[Description( "Target splat material layer index (0 to 3)" )] int splatChannel = 0,
			[Description( "Brush world radius" )] float brushSize = 64.0f,
			[Description( "Paint opacity (0.0 - 1.0)" )] float opacity = 1.0f )
		{
			try
			{
				return McpJson.Write( TerrainSculptDriver.PaintSplat( terrainQuery, new Vector2( uvX, uvY ), splatChannel, brushSize, opacity ) );
			}
			catch ( Exception ex )
			{
				return McpJson.Write( ToolOutcome<object>.Failure( null, ToolStatus.Failed, "terrain.paint_failed", "Terrain splat painting failed.", ex ) );
			}
		}
	}
}