using System.Collections.Generic;
using System.ComponentModel;
namespace io.github.hatayama.uLoopMCP
{
///
/// Parameter schema for dynamic code execution tool
/// Related classes: ExecuteDynamicCodeTool, ExecuteDynamicCodeResponse
///
public class ExecuteDynamicCodeSchema : BaseToolSchema
{
/// C# code to execute
[Description(@"Editor automation only — no file I/O, no script authoring.
Direct statements only (no classes/namespaces/methods); return is optional (auto 'return null;' if omitted).
You may include using directives at the top; they are hoisted above the wrapper.
Example:
using UnityEngine;
var x = Mathf.PI;
return x;
Do:
- Prefab/material wiring (PrefabUtility)
- AddComponent + reference wiring (SerializedObject)
- Scene/hierarchy edits
Don’t:
- System.IO.* (File/Directory/Path)
- AssetDatabase.CreateFolder / file writes
- Create/edit .cs/.asmdef (use Terminal/IDE instead)
Need files/dirs? Run terminal commands.")]
public string Code { get; set; } = "";
/// Runtime parameters (advanced; usually unnecessary)
[EditorBrowsable(EditorBrowsableState.Advanced)]
[Description(@"Advanced, optional parameters passed to the snippet.
- For throwaway snippets, prefer defining locals directly in code
- Keys are not preserved; values map to parameters[""param0""], parameters[""param1""], ...
- Use when injecting UnityEngine.Object or sensitive values, or reusing a snippet with varying data
- Use object values supported by the Editor; prefer fully-qualified type names for ambiguous refs (e.g., UnityEngine.Object)
- Input type must be an OBJECT. Strings like ""{}"" are invalid.
- Do: omit 'Parameters' entirely, or use {}
- Don't: ""{}"" (string), ""{""a"":1}"" (string)
Examples:
OK: ""Parameters"": {}
OK: (omit the 'Parameters' property)
NG: ""Parameters"": ""{}""")]
public Dictionary Parameters { get; set; } = new();
/// Compile only (do not execute)
[Description(@"Compile only (no execution).
- Uses Roslyn validation to surface diagnostics
- For new MonoBehaviours: create .cs → compile (mcp__uLoopMCP__compile with ForceRecompile=false) → ensure ErrorCount=0 → AddComponent")]
public bool CompileOnly { get; set; } = false;
[EditorBrowsable(EditorBrowsableState.Advanced)]
public bool YieldToForegroundRequests { get; set; } = false;
}
}