diff --git a/tools/Azure.Mcp.Tools.LoadTesting/src/Commands/BaseLoadTestingCommand.cs b/tools/Azure.Mcp.Tools.LoadTesting/src/Commands/BaseLoadTestingCommand.cs index 1d465449aa..e0f3441aa7 100644 --- a/tools/Azure.Mcp.Tools.LoadTesting/src/Commands/BaseLoadTestingCommand.cs +++ b/tools/Azure.Mcp.Tools.LoadTesting/src/Commands/BaseLoadTestingCommand.cs @@ -13,11 +13,18 @@ namespace Azure.Mcp.Tools.LoadTesting.Commands; public abstract class BaseLoadTestingCommand< [DynamicallyAccessedMembers(TrimAnnotations.CommandAnnotations)] TOptions> + (bool resourceGroupRequired = false, bool testResourceRequired = false) : SubscriptionCommand where TOptions : BaseLoadTestingOptions, new() { protected override void RegisterOptions(Command command) { base.RegisterOptions(command); + command.Options.Add(resourceGroupRequired + ? OptionDefinitions.Common.ResourceGroup.AsRequired() + : OptionDefinitions.Common.ResourceGroup.AsOptional()); + command.Options.Add(testResourceRequired + ? LoadTestingOptionDefinitions.TestResource.AsRequired() + : LoadTestingOptionDefinitions.TestResource.AsOptional()); } protected override TOptions BindOptions(ParseResult parseResult) diff --git a/tools/Azure.Mcp.Tools.LoadTesting/src/Commands/LoadTest/TestCreateCommand.cs b/tools/Azure.Mcp.Tools.LoadTesting/src/Commands/LoadTest/TestCreateCommand.cs index 897c3632e0..fd4b36626f 100644 --- a/tools/Azure.Mcp.Tools.LoadTesting/src/Commands/LoadTest/TestCreateCommand.cs +++ b/tools/Azure.Mcp.Tools.LoadTesting/src/Commands/LoadTest/TestCreateCommand.cs @@ -15,7 +15,7 @@ namespace Azure.Mcp.Tools.LoadTesting.Commands.LoadTest; public sealed class TestCreateCommand(ILogger logger) - : BaseLoadTestingCommand + : BaseLoadTestingCommand(resourceGroupRequired: false, testResourceRequired: true) { private const string _commandTitle = "Test Create"; private readonly ILogger _logger = logger; @@ -44,15 +44,13 @@ It will only create a test in an already existing load test resource. protected override void RegisterOptions(Command command) { base.RegisterOptions(command); - command.Options.Add(LoadTestingOptionDefinitions.TestResource.AsRequired()); - command.Options.Add(OptionDefinitions.Common.ResourceGroup.AsOptional()); - command.Options.Add(LoadTestingOptionDefinitions.Test); - command.Options.Add(LoadTestingOptionDefinitions.Description); - command.Options.Add(LoadTestingOptionDefinitions.DisplayName); - command.Options.Add(LoadTestingOptionDefinitions.Endpoint); - command.Options.Add(LoadTestingOptionDefinitions.VirtualUsers); - command.Options.Add(LoadTestingOptionDefinitions.Duration); - command.Options.Add(LoadTestingOptionDefinitions.RampUpTime); + command.Options.Add(LoadTestingOptionDefinitions.Test.AsRequired()); + command.Options.Add(LoadTestingOptionDefinitions.Description.AsOptional()); + command.Options.Add(LoadTestingOptionDefinitions.DisplayName.AsOptional()); + command.Options.Add(LoadTestingOptionDefinitions.Endpoint.AsOptional()); + command.Options.Add(LoadTestingOptionDefinitions.VirtualUsers.AsOptional()); + command.Options.Add(LoadTestingOptionDefinitions.Duration.AsOptional()); + command.Options.Add(LoadTestingOptionDefinitions.RampUpTime.AsOptional()); } protected override TestCreateOptions BindOptions(ParseResult parseResult) diff --git a/tools/Azure.Mcp.Tools.LoadTesting/src/Commands/LoadTest/TestGetCommand.cs b/tools/Azure.Mcp.Tools.LoadTesting/src/Commands/LoadTest/TestGetCommand.cs index 494a17d360..a8c8509168 100644 --- a/tools/Azure.Mcp.Tools.LoadTesting/src/Commands/LoadTest/TestGetCommand.cs +++ b/tools/Azure.Mcp.Tools.LoadTesting/src/Commands/LoadTest/TestGetCommand.cs @@ -14,7 +14,7 @@ namespace Azure.Mcp.Tools.LoadTesting.Commands.LoadTest; public sealed class TestGetCommand(ILogger logger) - : BaseLoadTestingCommand + : BaseLoadTestingCommand(resourceGroupRequired: false, testResourceRequired: true) { private const string _commandTitle = "Test Get"; private readonly ILogger _logger = logger; @@ -41,9 +41,7 @@ public sealed class TestGetCommand(ILogger logger) protected override void RegisterOptions(Command command) { base.RegisterOptions(command); - command.Options.Add(LoadTestingOptionDefinitions.TestResource.AsRequired()); - command.Options.Add(OptionDefinitions.Common.ResourceGroup.AsOptional()); - command.Options.Add(LoadTestingOptionDefinitions.Test); + command.Options.Add(LoadTestingOptionDefinitions.Test.AsRequired()); } protected override TestGetOptions BindOptions(ParseResult parseResult) diff --git a/tools/Azure.Mcp.Tools.LoadTesting/src/Commands/LoadTestResource/TestResourceCreateCommand.cs b/tools/Azure.Mcp.Tools.LoadTesting/src/Commands/LoadTestResource/TestResourceCreateCommand.cs index 6e42e0b797..2101a37e0f 100644 --- a/tools/Azure.Mcp.Tools.LoadTesting/src/Commands/LoadTestResource/TestResourceCreateCommand.cs +++ b/tools/Azure.Mcp.Tools.LoadTesting/src/Commands/LoadTestResource/TestResourceCreateCommand.cs @@ -14,7 +14,7 @@ namespace Azure.Mcp.Tools.LoadTesting.Commands.LoadTestResource; public sealed class TestResourceCreateCommand(ILogger logger) - : BaseLoadTestingCommand + : BaseLoadTestingCommand(resourceGroupRequired: true, testResourceRequired: false) { private const string _commandTitle = "Test Resource Create"; private readonly ILogger _logger = logger; @@ -40,8 +40,6 @@ Returns the created Load Testing resource. This creates the resource in Azure on protected override void RegisterOptions(Command command) { base.RegisterOptions(command); - command.Options.Add(LoadTestingOptionDefinitions.TestResource); - command.Options.Add(OptionDefinitions.Common.ResourceGroup.AsRequired()); } public override async Task ExecuteAsync(CommandContext context, ParseResult parseResult, CancellationToken cancellationToken) diff --git a/tools/Azure.Mcp.Tools.LoadTesting/src/Commands/LoadTestResource/TestResourceListCommand.cs b/tools/Azure.Mcp.Tools.LoadTesting/src/Commands/LoadTestResource/TestResourceListCommand.cs index 22aa708b53..2949dd10b5 100644 --- a/tools/Azure.Mcp.Tools.LoadTesting/src/Commands/LoadTestResource/TestResourceListCommand.cs +++ b/tools/Azure.Mcp.Tools.LoadTesting/src/Commands/LoadTestResource/TestResourceListCommand.cs @@ -14,7 +14,7 @@ namespace Azure.Mcp.Tools.LoadTesting.Commands.LoadTestResource; public sealed class TestResourceListCommand(ILogger logger) - : BaseLoadTestingCommand + : BaseLoadTestingCommand(resourceGroupRequired: false, testResourceRequired: false) { private const string _commandTitle = "Test Resource List"; private readonly ILogger _logger = logger; @@ -40,8 +40,6 @@ Lists all Azure Load Testing resources available in the selected subscription an protected override void RegisterOptions(Command command) { base.RegisterOptions(command); - command.Options.Add(LoadTestingOptionDefinitions.TestResource); - command.Options.Add(OptionDefinitions.Common.ResourceGroup.AsOptional()); } public override async Task ExecuteAsync(CommandContext context, ParseResult parseResult, CancellationToken cancellationToken) diff --git a/tools/Azure.Mcp.Tools.LoadTesting/src/Commands/LoadTestRun/TestRunCreateOrUpdateCommand.cs b/tools/Azure.Mcp.Tools.LoadTesting/src/Commands/LoadTestRun/TestRunCreateOrUpdateCommand.cs index 35f8ef7160..8edc288608 100644 --- a/tools/Azure.Mcp.Tools.LoadTesting/src/Commands/LoadTestRun/TestRunCreateOrUpdateCommand.cs +++ b/tools/Azure.Mcp.Tools.LoadTesting/src/Commands/LoadTestRun/TestRunCreateOrUpdateCommand.cs @@ -15,7 +15,7 @@ namespace Azure.Mcp.Tools.LoadTesting.Commands.LoadTestRun; public sealed class TestRunCreateOrUpdateCommand(ILogger logger) - : BaseLoadTestingCommand + : BaseLoadTestingCommand(resourceGroupRequired: false, testResourceRequired: true) { private const string _commandTitle = "Test Run Create or Update"; private readonly ILogger _logger = logger; @@ -44,10 +44,8 @@ Create or update a load test run execution. protected override void RegisterOptions(Command command) { base.RegisterOptions(command); - command.Options.Add(LoadTestingOptionDefinitions.TestResource.AsRequired()); - command.Options.Add(OptionDefinitions.Common.ResourceGroup.AsOptional()); command.Options.Add(LoadTestingOptionDefinitions.TestRun.AsRequired()); - command.Options.Add(LoadTestingOptionDefinitions.Test); + command.Options.Add(LoadTestingOptionDefinitions.Test.AsRequired()); command.Options.Add(LoadTestingOptionDefinitions.DisplayName.AsOptional()); command.Options.Add(LoadTestingOptionDefinitions.Description.AsOptional()); command.Options.Add(LoadTestingOptionDefinitions.OldTestRunId.AsOptional()); diff --git a/tools/Azure.Mcp.Tools.LoadTesting/src/Commands/LoadTestRun/TestRunGetCommand.cs b/tools/Azure.Mcp.Tools.LoadTesting/src/Commands/LoadTestRun/TestRunGetCommand.cs index 52334234f4..6a85688106 100644 --- a/tools/Azure.Mcp.Tools.LoadTesting/src/Commands/LoadTestRun/TestRunGetCommand.cs +++ b/tools/Azure.Mcp.Tools.LoadTesting/src/Commands/LoadTestRun/TestRunGetCommand.cs @@ -16,7 +16,7 @@ namespace Azure.Mcp.Tools.LoadTesting.Commands.LoadTestRun; public sealed class TestRunGetCommand(ILogger logger) - : BaseLoadTestingCommand + : BaseLoadTestingCommand(resourceGroupRequired: false, testResourceRequired: true) { private const string _commandTitle = "Test Run Get"; private readonly ILogger _logger = logger; @@ -43,8 +43,6 @@ public sealed class TestRunGetCommand(ILogger logger) protected override void RegisterOptions(Command command) { base.RegisterOptions(command); - command.Options.Add(LoadTestingOptionDefinitions.TestResource.AsRequired()); - command.Options.Add(OptionDefinitions.Common.ResourceGroup.AsOptional()); command.Options.Add(LoadTestingOptionDefinitions.TestRun.AsOptional()); command.Options.Add(LoadTestingOptionDefinitions.Test.AsOptional()); diff --git a/tools/Azure.Mcp.Tools.StorageSync/src/Commands/BaseStorageSyncCommand.cs b/tools/Azure.Mcp.Tools.StorageSync/src/Commands/BaseStorageSyncCommand.cs index b04dd8b5b5..a0b1524bc6 100644 --- a/tools/Azure.Mcp.Tools.StorageSync/src/Commands/BaseStorageSyncCommand.cs +++ b/tools/Azure.Mcp.Tools.StorageSync/src/Commands/BaseStorageSyncCommand.cs @@ -4,7 +4,10 @@ using System.Diagnostics.CodeAnalysis; using Azure.Mcp.Core.Commands; using Azure.Mcp.Core.Commands.Subscription; +using Azure.Mcp.Core.Extensions; +using Azure.Mcp.Core.Models.Option; using Azure.Mcp.Tools.StorageSync.Options; +using Microsoft.Mcp.Core.Models.Option; namespace Azure.Mcp.Tools.StorageSync.Commands; @@ -14,11 +17,17 @@ namespace Azure.Mcp.Tools.StorageSync.Commands; /// public abstract class BaseStorageSyncCommand< [DynamicallyAccessedMembers(TrimAnnotations.CommandAnnotations)] TOptions> + (bool resourceGroupRequired = true, bool storageSyncServiceRequired = true) : SubscriptionCommand where TOptions : BaseStorageSyncOptions, new() { protected override void RegisterOptions(Command command) { base.RegisterOptions(command); - // Additional option registration can be added here for common Storage Sync options + command.Options.Add(resourceGroupRequired + ? OptionDefinitions.Common.ResourceGroup.AsRequired() + : OptionDefinitions.Common.ResourceGroup.AsOptional()); + command.Options.Add(storageSyncServiceRequired + ? StorageSyncOptionDefinitions.StorageSyncService.Name.AsRequired() + : StorageSyncOptionDefinitions.StorageSyncService.Name.AsOptional()); } } diff --git a/tools/Azure.Mcp.Tools.StorageSync/src/Commands/CloudEndpoint/CloudEndpointCreateCommand.cs b/tools/Azure.Mcp.Tools.StorageSync/src/Commands/CloudEndpoint/CloudEndpointCreateCommand.cs index a098501d49..8ca099c18b 100644 --- a/tools/Azure.Mcp.Tools.StorageSync/src/Commands/CloudEndpoint/CloudEndpointCreateCommand.cs +++ b/tools/Azure.Mcp.Tools.StorageSync/src/Commands/CloudEndpoint/CloudEndpointCreateCommand.cs @@ -15,7 +15,8 @@ namespace Azure.Mcp.Tools.StorageSync.Commands.CloudEndpoint; -public sealed class CloudEndpointCreateCommand(ILogger logger, IStorageSyncService service) : BaseStorageSyncCommand +public sealed class CloudEndpointCreateCommand(ILogger logger, IStorageSyncService service) : +BaseStorageSyncCommand(resourceGroupRequired: true, storageSyncServiceRequired: true) { private const string CommandTitle = "Create Cloud Endpoint"; private readonly IStorageSyncService _service = service; @@ -42,8 +43,6 @@ public sealed class CloudEndpointCreateCommand(ILogger logger, IStorageSyncService service) : BaseStorageSyncCommand +public sealed class CloudEndpointDeleteCommand(ILogger logger, IStorageSyncService service) : +BaseStorageSyncCommand(resourceGroupRequired: true, storageSyncServiceRequired: true) { private const string CommandTitle = "Delete Cloud Endpoint"; private readonly IStorageSyncService _service = service; @@ -41,8 +42,6 @@ public sealed class CloudEndpointDeleteCommand(ILogger logger, IStorageSyncService service) : BaseStorageSyncCommand +public sealed class CloudEndpointGetCommand(ILogger logger, IStorageSyncService service) : +BaseStorageSyncCommand(resourceGroupRequired: true, storageSyncServiceRequired: true) { private const string CommandTitle = "Get Cloud Endpoint"; private readonly IStorageSyncService _service = service; @@ -43,8 +44,6 @@ public sealed class CloudEndpointGetCommand(ILogger log protected override void RegisterOptions(Command command) { base.RegisterOptions(command); - command.Options.Add(OptionDefinitions.Common.ResourceGroup.AsRequired()); - command.Options.Add(StorageSyncOptionDefinitions.StorageSyncService.Name.AsRequired()); command.Options.Add(StorageSyncOptionDefinitions.SyncGroup.Name.AsRequired()); command.Options.Add(StorageSyncOptionDefinitions.CloudEndpoint.Name.AsOptional()); } diff --git a/tools/Azure.Mcp.Tools.StorageSync/src/Commands/CloudEndpoint/CloudEndpointTriggerChangeDetectionCommand.cs b/tools/Azure.Mcp.Tools.StorageSync/src/Commands/CloudEndpoint/CloudEndpointTriggerChangeDetectionCommand.cs index 2a10119e01..a0e9569519 100644 --- a/tools/Azure.Mcp.Tools.StorageSync/src/Commands/CloudEndpoint/CloudEndpointTriggerChangeDetectionCommand.cs +++ b/tools/Azure.Mcp.Tools.StorageSync/src/Commands/CloudEndpoint/CloudEndpointTriggerChangeDetectionCommand.cs @@ -14,7 +14,8 @@ namespace Azure.Mcp.Tools.StorageSync.Commands.CloudEndpoint; -public sealed class CloudEndpointTriggerChangeDetectionCommand(ILogger logger, IStorageSyncService service) : BaseStorageSyncCommand +public sealed class CloudEndpointTriggerChangeDetectionCommand(ILogger logger, IStorageSyncService service) : +BaseStorageSyncCommand(resourceGroupRequired: true, storageSyncServiceRequired: true) { private const string CommandTitle = "Trigger Change Detection"; private readonly IStorageSyncService _service = service; @@ -41,8 +42,6 @@ public sealed class CloudEndpointTriggerChangeDetectionCommand(ILogger logger, IStorageSyncService service) : BaseStorageSyncCommand +public sealed class RegisteredServerGetCommand(ILogger logger, IStorageSyncService service) : +BaseStorageSyncCommand(resourceGroupRequired: true, storageSyncServiceRequired: true) { private const string CommandTitle = "Get Registered Server"; private readonly IStorageSyncService _service = service; @@ -43,8 +44,6 @@ public sealed class RegisteredServerGetCommand(ILogger logger, IStorageSyncService service) : BaseStorageSyncCommand +public sealed class RegisteredServerUnregisterCommand(ILogger logger, IStorageSyncService service) : +BaseStorageSyncCommand(resourceGroupRequired: true, storageSyncServiceRequired: true) { private const string CommandTitle = "Unregister Server"; private readonly IStorageSyncService _service = service; @@ -41,8 +42,6 @@ public sealed class RegisteredServerUnregisterCommand(ILogger logger, IStorageSyncService service) : BaseStorageSyncCommand +public sealed class RegisteredServerUpdateCommand(ILogger logger, IStorageSyncService service) : +BaseStorageSyncCommand(resourceGroupRequired: true, storageSyncServiceRequired: true) { private const string CommandTitle = "Update Registered Server"; private readonly IStorageSyncService _service = service; @@ -42,8 +43,6 @@ public sealed class RegisteredServerUpdateCommand(ILogger logger, IStorageSyncService service) : BaseStorageSyncCommand +public sealed class ServerEndpointCreateCommand(ILogger logger, IStorageSyncService service) : +BaseStorageSyncCommand(resourceGroupRequired: true, storageSyncServiceRequired: true) { private const string CommandTitle = "Create Server Endpoint"; private readonly IStorageSyncService _service = service; @@ -42,8 +43,6 @@ public sealed class ServerEndpointCreateCommand(ILogger logger, IStorageSyncService service) : BaseStorageSyncCommand +public sealed class ServerEndpointDeleteCommand(ILogger logger, IStorageSyncService service) : +BaseStorageSyncCommand(resourceGroupRequired: true, storageSyncServiceRequired: true) { private const string CommandTitle = "Delete Server Endpoint"; private readonly IStorageSyncService _service = service; @@ -41,8 +42,6 @@ public sealed class ServerEndpointDeleteCommand(ILogger logger, IStorageSyncService service) : BaseStorageSyncCommand +public sealed class ServerEndpointGetCommand(ILogger logger, IStorageSyncService service) : +BaseStorageSyncCommand(resourceGroupRequired: true, storageSyncServiceRequired: true) { private const string CommandTitle = "Get Server Endpoint"; private readonly IStorageSyncService _service = service; @@ -43,8 +44,6 @@ public sealed class ServerEndpointGetCommand(ILogger l protected override void RegisterOptions(Command command) { base.RegisterOptions(command); - command.Options.Add(OptionDefinitions.Common.ResourceGroup.AsRequired()); - command.Options.Add(StorageSyncOptionDefinitions.StorageSyncService.Name.AsRequired()); command.Options.Add(StorageSyncOptionDefinitions.SyncGroup.Name.AsRequired()); command.Options.Add(StorageSyncOptionDefinitions.ServerEndpoint.Name.AsOptional()); } diff --git a/tools/Azure.Mcp.Tools.StorageSync/src/Commands/ServerEndpoint/ServerEndpointUpdateCommand.cs b/tools/Azure.Mcp.Tools.StorageSync/src/Commands/ServerEndpoint/ServerEndpointUpdateCommand.cs index 1c378e398d..f6ba217318 100644 --- a/tools/Azure.Mcp.Tools.StorageSync/src/Commands/ServerEndpoint/ServerEndpointUpdateCommand.cs +++ b/tools/Azure.Mcp.Tools.StorageSync/src/Commands/ServerEndpoint/ServerEndpointUpdateCommand.cs @@ -15,7 +15,8 @@ namespace Azure.Mcp.Tools.StorageSync.Commands.ServerEndpoint; -public sealed class ServerEndpointUpdateCommand(ILogger logger, IStorageSyncService service) : BaseStorageSyncCommand +public sealed class ServerEndpointUpdateCommand(ILogger logger, IStorageSyncService service) : +BaseStorageSyncCommand(resourceGroupRequired: true, storageSyncServiceRequired: true) { private const string CommandTitle = "Update Server Endpoint"; private readonly IStorageSyncService _service = service; @@ -42,8 +43,6 @@ public sealed class ServerEndpointUpdateCommand(ILogger logger, IStorageSyncService service) : BaseStorageSyncCommand +public sealed class StorageSyncServiceCreateCommand(ILogger logger, IStorageSyncService service) : +BaseStorageSyncCommand(resourceGroupRequired: true, storageSyncServiceRequired: false) { private const string CommandTitle = "Create Storage Sync Service"; private readonly IStorageSyncService _service = service; @@ -43,8 +44,6 @@ public sealed class StorageSyncServiceCreateCommand(ILogger logger, IStorageSyncService service) : BaseStorageSyncCommand +public sealed class StorageSyncServiceDeleteCommand(ILogger logger, IStorageSyncService service) : +BaseStorageSyncCommand(resourceGroupRequired: true, storageSyncServiceRequired: true) { private const string CommandTitle = "Delete Storage Sync Service"; private readonly IStorageSyncService _service = service; @@ -41,8 +42,6 @@ public sealed class StorageSyncServiceDeleteCommand(ILogger logger, IStorageSyncService service) : BaseStorageSyncCommand +public sealed class StorageSyncServiceGetCommand(ILogger logger, IStorageSyncService service) : +BaseStorageSyncCommand(resourceGroupRequired: false, storageSyncServiceRequired: false) { private const string CommandTitle = "Get Storage Sync Service"; private readonly IStorageSyncService _service = service; @@ -43,8 +44,6 @@ public sealed class StorageSyncServiceGetCommand(ILogger logger, IStorageSyncService service) : BaseStorageSyncCommand +public sealed class StorageSyncServiceUpdateCommand(ILogger logger, IStorageSyncService service) : +BaseStorageSyncCommand(resourceGroupRequired: true, storageSyncServiceRequired: true) { private const string CommandTitle = "Update Storage Sync Service"; private readonly IStorageSyncService _service = service; @@ -42,8 +43,6 @@ public sealed class StorageSyncServiceUpdateCommand(ILogger logger, IStorageSyncService service) : BaseStorageSyncCommand +public sealed class SyncGroupCreateCommand(ILogger logger, IStorageSyncService service) : +BaseStorageSyncCommand(resourceGroupRequired: true, storageSyncServiceRequired: true) { private const string CommandTitle = "Create Sync Group"; private readonly IStorageSyncService _service = service; @@ -42,8 +43,6 @@ public sealed class SyncGroupCreateCommand(ILogger logge protected override void RegisterOptions(Command command) { base.RegisterOptions(command); - command.Options.Add(OptionDefinitions.Common.ResourceGroup.AsRequired()); - command.Options.Add(StorageSyncOptionDefinitions.StorageSyncService.Name.AsRequired()); command.Options.Add(StorageSyncOptionDefinitions.SyncGroup.Name.AsRequired()); } diff --git a/tools/Azure.Mcp.Tools.StorageSync/src/Commands/SyncGroup/SyncGroupDeleteCommand.cs b/tools/Azure.Mcp.Tools.StorageSync/src/Commands/SyncGroup/SyncGroupDeleteCommand.cs index 13a76274a1..643d71f6a8 100644 --- a/tools/Azure.Mcp.Tools.StorageSync/src/Commands/SyncGroup/SyncGroupDeleteCommand.cs +++ b/tools/Azure.Mcp.Tools.StorageSync/src/Commands/SyncGroup/SyncGroupDeleteCommand.cs @@ -14,7 +14,8 @@ namespace Azure.Mcp.Tools.StorageSync.Commands.SyncGroup; -public sealed class SyncGroupDeleteCommand(ILogger logger, IStorageSyncService service) : BaseStorageSyncCommand +public sealed class SyncGroupDeleteCommand(ILogger logger, IStorageSyncService service) : +BaseStorageSyncCommand(resourceGroupRequired: true, storageSyncServiceRequired: true) { private const string CommandTitle = "Delete Sync Group"; private readonly IStorageSyncService _service = service; @@ -41,8 +42,6 @@ public sealed class SyncGroupDeleteCommand(ILogger logge protected override void RegisterOptions(Command command) { base.RegisterOptions(command); - command.Options.Add(OptionDefinitions.Common.ResourceGroup.AsRequired()); - command.Options.Add(StorageSyncOptionDefinitions.StorageSyncService.Name.AsRequired()); command.Options.Add(StorageSyncOptionDefinitions.SyncGroup.Name.AsRequired()); } diff --git a/tools/Azure.Mcp.Tools.StorageSync/src/Commands/SyncGroup/SyncGroupGetCommand.cs b/tools/Azure.Mcp.Tools.StorageSync/src/Commands/SyncGroup/SyncGroupGetCommand.cs index 36cf875a82..4b5ffc9139 100644 --- a/tools/Azure.Mcp.Tools.StorageSync/src/Commands/SyncGroup/SyncGroupGetCommand.cs +++ b/tools/Azure.Mcp.Tools.StorageSync/src/Commands/SyncGroup/SyncGroupGetCommand.cs @@ -16,7 +16,8 @@ namespace Azure.Mcp.Tools.StorageSync.Commands.SyncGroup; -public sealed class SyncGroupGetCommand(ILogger logger, IStorageSyncService service) : BaseStorageSyncCommand +public sealed class SyncGroupGetCommand(ILogger logger, IStorageSyncService service) : +BaseStorageSyncCommand(resourceGroupRequired: true, storageSyncServiceRequired: true) { private const string CommandTitle = "Get Sync Group"; private readonly IStorageSyncService _service = service; @@ -43,8 +44,6 @@ public sealed class SyncGroupGetCommand(ILogger logger, ISt protected override void RegisterOptions(Command command) { base.RegisterOptions(command); - command.Options.Add(OptionDefinitions.Common.ResourceGroup.AsRequired()); - command.Options.Add(StorageSyncOptionDefinitions.StorageSyncService.Name.AsRequired()); command.Options.Add(StorageSyncOptionDefinitions.SyncGroup.Name.AsOptional()); } diff --git a/tools/Azure.Mcp.Tools.VirtualDesktop/src/Options/VirtualDesktopOptionDefinitions.cs b/tools/Azure.Mcp.Tools.VirtualDesktop/src/Options/VirtualDesktopOptionDefinitions.cs index a7c32d4e8c..fc534c7eaf 100644 --- a/tools/Azure.Mcp.Tools.VirtualDesktop/src/Options/VirtualDesktopOptionDefinitions.cs +++ b/tools/Azure.Mcp.Tools.VirtualDesktop/src/Options/VirtualDesktopOptionDefinitions.cs @@ -1,6 +1,8 @@ // Copyright (c) Microsoft Corporation. // Licensed under the MIT License. +using System.ComponentModel.DataAnnotations; + namespace Azure.Mcp.Tools.VirtualDesktop.Options; public static class VirtualDesktopOptionDefinitions @@ -14,16 +16,16 @@ public static class VirtualDesktopOptionDefinitions $"--{HostPoolName}" ) { - Description = "The name of the Azure Virtual Desktop host pool. This is the unique name you chose for your hostpool." - + Description = "The name of the Azure Virtual Desktop host pool. This is the unique name you chose for your hostpool.", + Required = false }; public static readonly Option HostPoolResourceIdOption = new( $"--{HostPoolResourceId}" ) { - Description = "The Azure resource ID of the host pool. When provided, this will be used instead of searching by name." - + Description = "The Azure resource ID of the host pool. When provided, this will be used instead of searching by name.", + Required = false }; @@ -34,11 +36,4 @@ public static class VirtualDesktopOptionDefinitions Description = "The name of the session host. This is the computer name of the virtual machine in the host pool.", Required = true }; - - public static readonly Option ResourceGroup = new( - $"--{ResourceGroupName}" - ) - { - Description = "The name of the Azure resource group. This is a logical container for Azure resources.", - }; } diff --git a/tools/Azure.Mcp.Tools.Workbooks/src/Commands/Workbooks/CreateWorkbooksCommand.cs b/tools/Azure.Mcp.Tools.Workbooks/src/Commands/Workbooks/CreateWorkbooksCommand.cs index 3430585fb1..559f9723fd 100644 --- a/tools/Azure.Mcp.Tools.Workbooks/src/Commands/Workbooks/CreateWorkbooksCommand.cs +++ b/tools/Azure.Mcp.Tools.Workbooks/src/Commands/Workbooks/CreateWorkbooksCommand.cs @@ -46,8 +46,8 @@ protected override void RegisterOptions(Command command) { base.RegisterOptions(command); command.Options.Add(OptionDefinitions.Common.ResourceGroup.AsRequired()); - command.Options.Add(WorkbooksOptionDefinitions.DisplayNameRequired); - command.Options.Add(WorkbooksOptionDefinitions.SerializedContentRequired); + command.Options.Add(WorkbooksOptionDefinitions.DisplayName.AsRequired()); + command.Options.Add(WorkbooksOptionDefinitions.SerializedContent.AsRequired()); command.Options.Add(WorkbooksOptionDefinitions.SourceId); } @@ -55,8 +55,8 @@ protected override CreateWorkbookOptions BindOptions(ParseResult parseResult) { var options = base.BindOptions(parseResult); options.ResourceGroup ??= parseResult.GetValueOrDefault(OptionDefinitions.Common.ResourceGroup.Name); - options.DisplayName = parseResult.GetValueOrDefault(WorkbooksOptionDefinitions.DisplayNameRequired.Name); - options.SerializedContent = parseResult.GetValueOrDefault(WorkbooksOptionDefinitions.SerializedContentRequired.Name); + options.DisplayName = parseResult.GetValueOrDefault(WorkbooksOptionDefinitions.DisplayName.Name); + options.SerializedContent = parseResult.GetValueOrDefault(WorkbooksOptionDefinitions.SerializedContent.Name); options.SourceId = parseResult.GetValueOrDefault(WorkbooksOptionDefinitions.SourceId.Name); return options; } diff --git a/tools/Azure.Mcp.Tools.Workbooks/src/Commands/Workbooks/DeleteWorkbooksCommand.cs b/tools/Azure.Mcp.Tools.Workbooks/src/Commands/Workbooks/DeleteWorkbooksCommand.cs index 2c693ccac0..95ceee151b 100644 --- a/tools/Azure.Mcp.Tools.Workbooks/src/Commands/Workbooks/DeleteWorkbooksCommand.cs +++ b/tools/Azure.Mcp.Tools.Workbooks/src/Commands/Workbooks/DeleteWorkbooksCommand.cs @@ -13,7 +13,7 @@ namespace Azure.Mcp.Tools.Workbooks.Commands.Workbooks; -public sealed class DeleteWorkbooksCommand(ILogger logger) : GlobalCommand +public sealed class DeleteWorkbooksCommand(ILogger logger) : BaseWorkbooksCommand { private const string CommandTitle = "Delete Workbook"; private readonly ILogger _logger = logger; diff --git a/tools/Azure.Mcp.Tools.Workbooks/src/Options/Workbook/DeleteWorkbookOptions.cs b/tools/Azure.Mcp.Tools.Workbooks/src/Options/Workbook/DeleteWorkbookOptions.cs index f4af157d74..c853ba9ed4 100644 --- a/tools/Azure.Mcp.Tools.Workbooks/src/Options/Workbook/DeleteWorkbookOptions.cs +++ b/tools/Azure.Mcp.Tools.Workbooks/src/Options/Workbook/DeleteWorkbookOptions.cs @@ -2,11 +2,10 @@ // Licensed under the MIT License. using System.Text.Json.Serialization; -using Azure.Mcp.Core.Options; namespace Azure.Mcp.Tools.Workbooks.Options.Workbook; -public class DeleteWorkbookOptions : GlobalOptions +public class DeleteWorkbookOptions : BaseWorkbooksOptions { [JsonPropertyName(WorkbooksOptionDefinitions.WorkbookIdsText)] public string[]? WorkbookIds { get; set; } diff --git a/tools/Azure.Mcp.Tools.Workbooks/src/Options/WorkbooksOptionDefinitions.cs b/tools/Azure.Mcp.Tools.Workbooks/src/Options/WorkbooksOptionDefinitions.cs index af66a14527..12de5b2de3 100644 --- a/tools/Azure.Mcp.Tools.Workbooks/src/Options/WorkbooksOptionDefinitions.cs +++ b/tools/Azure.Mcp.Tools.Workbooks/src/Options/WorkbooksOptionDefinitions.cs @@ -60,21 +60,21 @@ public static class WorkbooksOptionDefinitions }; // Command-specific variations for required fields - public static readonly Option DisplayNameRequired = new( - $"--{DisplayNameText}" - ) - { - Description = "The display name of the workbook.", - Required = true - }; - - public static readonly Option SerializedContentRequired = new( - $"--{SerializedContentText}" - ) - { - Description = "The serialized JSON content of the workbook.", - Required = true - }; + // public static readonly Option DisplayNameRequired = new( + // $"--{DisplayNameText}" + // ) + // { + // Description = "The display name of the workbook.", + // Required = true + // }; + + // public static readonly Option SerializedContentRequired = new( + // $"--{SerializedContentText}" + // ) + // { + // Description = "The serialized JSON content of the workbook.", + // Required = true + // }; // Filter options for listing workbooks public static readonly Option Kind = new(