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.
#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 ) );
}
}
}
}