Editor/Tools/SyntheticPlayerTools.Input.cs

An editor MCP (management/control panel) tool entry that exposes a command pocketknife_player_simulate. It calls into SyntheticInputDriver.SimulateInputAsync to simulate a player input action (movement or attack/use) with a state and duration, and returns the result serialized as MCP JSON.

Process Execution
#nullable enable
using System;
using System.ComponentModel;
using System.Threading.Tasks;
using Sandbox;

namespace Editor.Mcp
{
	public static partial class SboxMcpAssistant
	{
		[McpTool( "pocketknife_player_simulate" )]
		public static async Task<string> PlayerSimulate(
			[Description( "Movement/action name (forward, back, left, right, jump, duck, sprint, use, primary_attack, reload)" )] string action,
			[Description( "State: pulse, down, up" )] string state = "pulse",
			[Description( "Pulse duration in milliseconds (10-10000)" )] int durationMs = 100 )
		{
			try
			{
				var result = await SyntheticInputDriver.SimulateInputAsync( action, state, durationMs );
				return McpJson.Write( result );
			}
			catch ( Exception ex )
			{
				return McpJson.Write( ToolOutcome<object>.Failure( null, ToolStatus.Failed, "input.simulate_failed", "Input simulation failed.", ex ) );
			}
		}
	}
}