diff --git a/SampleCommandSet/Commands/Access/GetParametersCommand.cs b/SampleCommandSet/Commands/Access/GetParametersCommand.cs
new file mode 100644
index 0000000..1102075
--- /dev/null
+++ b/SampleCommandSet/Commands/Access/GetParametersCommand.cs
@@ -0,0 +1,49 @@
+using Autodesk.Revit.UI;
+using Newtonsoft.Json.Linq;
+using revit_mcp_sdk.API.Base;
+using System;
+using System.Collections.Generic;
+
+namespace SampleCommandSet.Commands.Access
+{
+ ///
+ /// Batch read parameters for elements.
+ /// JSON-RPC method: get_parameters
+ /// params: {
+ /// elementIds: string[], // required, ElementId as string
+ /// paramNames?: string[] // optional, return all parameters by name when omitted
+ /// }
+ /// returns: array of { elementId, parameters: [{ name, value, storageType, isReadOnly, hasValue }] }
+ ///
+ public class GetParametersCommand : ExternalEventCommandBase
+ {
+ private GetParametersEventHandler _handler => (GetParametersEventHandler)Handler;
+
+ public override string CommandName => "get_parameters";
+
+ public GetParametersCommand(UIApplication uiApp)
+ : base(new GetParametersEventHandler(), uiApp)
+ {
+ }
+
+ public override object Execute(JObject parameters, string requestId)
+ {
+ if (parameters == null)
+ throw new ArgumentException("params cannot be null");
+
+ var elementIds = parameters["elementIds"]?.ToObject>();
+ if (elementIds == null || elementIds.Count == 0)
+ throw new ArgumentException("elementIds is required and cannot be empty");
+
+ var paramNames = parameters["paramNames"]?.ToObject>();
+
+ _handler.ElementIds = elementIds;
+ _handler.ParamNames = paramNames;
+
+ if (!RaiseAndWaitForCompletion(20000))
+ throw new TimeoutException("get_parameters timeout");
+
+ return _handler.Result;
+ }
+ }
+}
diff --git a/SampleCommandSet/Commands/Access/GetParametersEventHandler.cs b/SampleCommandSet/Commands/Access/GetParametersEventHandler.cs
new file mode 100644
index 0000000..f9d9861
--- /dev/null
+++ b/SampleCommandSet/Commands/Access/GetParametersEventHandler.cs
@@ -0,0 +1,127 @@
+using Autodesk.Revit.DB;
+using Autodesk.Revit.UI;
+using revit_mcp_sdk.API.Interfaces;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading;
+
+namespace SampleCommandSet.Commands.Access
+{
+ public class GetParametersEventHandler : IExternalEventHandler, IWaitableExternalEventHandler
+ {
+ public List ElementIds { get; set; }
+ public List ParamNames { get; set; }
+
+ public object Result { get; private set; }
+
+ private readonly ManualResetEvent _resetEvent = new ManualResetEvent(false);
+
+ public bool WaitForCompletion(int timeoutMilliseconds = 15000)
+ {
+ return _resetEvent.WaitOne(timeoutMilliseconds);
+ }
+
+ public void Execute(UIApplication app)
+ {
+ try
+ {
+ var doc = app.ActiveUIDocument.Document;
+ var results = new List