diff --git a/MCPForUnity/Editor/Tools/ManageProfiler.cs b/MCPForUnity/Editor/Tools/ManageProfiler.cs
new file mode 100644
index 000000000..3b299df2a
--- /dev/null
+++ b/MCPForUnity/Editor/Tools/ManageProfiler.cs
@@ -0,0 +1,167 @@
+using System.Collections.Generic;
+using MCPForUnity.Editor.Helpers;
+using Newtonsoft.Json.Linq;
+using UnityEditor.Profiling;
+using UnityEditorInternal;
+using UnityEngine;
+
+namespace MCPForUnity.Editor.Tools
+{
+ ///
+ /// Reads Unity Profiler frame data and controls profiler state.
+ /// Uses ProfilerDriver to access the same data visible in the Profiler window.
+ ///
+ [McpForUnityTool("manage_profiler", AutoRegister = false)]
+ public static class ManageProfiler
+ {
+ ///
+ /// Main handler for profiler actions.
+ ///
+ public static object HandleCommand(JObject @params)
+ {
+ if (@params == null)
+ {
+ return new ErrorResponse("Parameters cannot be null.");
+ }
+
+ var p = new ToolParams(@params);
+
+ var actionResult = p.GetRequired("action");
+ if (!actionResult.IsSuccess)
+ {
+ return new ErrorResponse(actionResult.ErrorMessage);
+ }
+ string action = actionResult.Value.ToLowerInvariant();
+
+ switch (action)
+ {
+ case "read_frames":
+ return ReadFrames(p);
+ case "enable":
+ return EnableProfiler();
+ case "disable":
+ return DisableProfiler();
+ case "status":
+ return GetStatus();
+ case "clear":
+ return ClearFrames();
+ default:
+ return new ErrorResponse($"Unknown action: '{action}'. Valid actions: read_frames, enable, disable, status, clear.");
+ }
+ }
+
+ private static object ReadFrames(ToolParams p)
+ {
+ if (ProfilerDriver.enabled == false)
+ {
+ return new ErrorResponse("Profiler is not enabled. Use action='enable' first or open the Profiler window.");
+ }
+
+ int lastFrame = ProfilerDriver.lastFrameIndex;
+ int firstFrame = ProfilerDriver.firstFrameIndex;
+ if (lastFrame < 0 || firstFrame < 0)
+ {
+ return new ErrorResponse("No profiler frames available.");
+ }
+
+ int frameCount = p.GetInt("frameCount", 1) ?? 1;
+ int threadIndex = p.GetInt("thread", 0) ?? 0;
+ string filter = p.Get("filter") ?? "";
+ float minMs = p.GetFloat("minMs", 0.01f) ?? 0.01f;
+
+ frameCount = System.Math.Min(frameCount, lastFrame - firstFrame + 1);
+
+ var frames = new List