Migrate Workbooks tools to new tool design#3050
Open
alzimmermsft wants to merge 1 commit into
Open
Conversation
|
Azure Pipelines: Successfully started running 1 pipeline(s). There may be pipelines that require an authorized user to comment /azp run to run. |
Contributor
There was a problem hiding this comment.
Pull request overview
This PR migrates the Azure.Mcp.Tools.Workbooks toolset from the legacy RegisterOptions/BindOptions(ParseResult) pattern to the newer [Option] attribute-based option binding model used by OptionBinder, aligning Workbooks with the newer command design across the repo.
Changes:
- Refactors Workbooks commands to use
AuthenticatedCommand<TOptions, TResult>/SubscriptionCommand<TOptions, TResult>with attribute-bound option POCOs. - Replaces
WorkbooksOptionDefinitions+BaseWorkbooksOptionswith per-command options classes using[Option]/[OptionContainer]. - Updates unit tests to use the newer command test base types and removes legacy
--auth-method-related tests.
Reviewed changes
Copilot reviewed 23 out of 23 changed files in this pull request and generated 8 comments.
Show a summary per file
| File | Description |
|---|---|
| tools/Azure.Mcp.Tools.Workbooks/tests/Azure.Mcp.Tools.Workbooks.Tests/UpdateWorkbooksCommandTests.cs | Removes legacy --auth-method test for update command. |
| tools/Azure.Mcp.Tools.Workbooks/tests/Azure.Mcp.Tools.Workbooks.Tests/ShowWorkbooksCommandTests.cs | Removes legacy --auth-method test for show command. |
| tools/Azure.Mcp.Tools.Workbooks/tests/Azure.Mcp.Tools.Workbooks.Tests/ListWorkbooksCommandTests.cs | Switches to SubscriptionCommandUnitTestsBase; removes legacy --auth-method test. |
| tools/Azure.Mcp.Tools.Workbooks/tests/Azure.Mcp.Tools.Workbooks.Tests/DeleteWorkbooksCommandTests.cs | Removes legacy --auth-method test for delete command. |
| tools/Azure.Mcp.Tools.Workbooks/tests/Azure.Mcp.Tools.Workbooks.Tests/CreateWorkbooksCommandTests.cs | Switches to SubscriptionCommandUnitTestsBase; updates retry mode value; removes legacy --auth-method test. |
| tools/Azure.Mcp.Tools.Workbooks/src/Services/WorkbooksService.cs | Adds explicit System.Text.Json using (after removal of global usings). |
| tools/Azure.Mcp.Tools.Workbooks/src/Options/WorkbooksOptionDescriptions.cs | Introduces centralized description constants for new option attributes. |
| tools/Azure.Mcp.Tools.Workbooks/src/Options/WorkbooksOptionDefinitions.cs | Removes legacy System.CommandLine.Option<T> definitions. |
| tools/Azure.Mcp.Tools.Workbooks/src/Options/Workbook/UpdateWorkbooksOptions.cs | Converts to [Option]-based options POCO (and adds retry/tenant container). |
| tools/Azure.Mcp.Tools.Workbooks/src/Options/Workbook/ShowWorkbooksOptions.cs | Converts to [Option]-based options POCO (and adds retry/tenant container). |
| tools/Azure.Mcp.Tools.Workbooks/src/Options/Workbook/ListWorkbooksOptions.cs | Converts to [Option]-based options POCO; moves parsing to PostBindOptions. |
| tools/Azure.Mcp.Tools.Workbooks/src/Options/Workbook/DeleteWorkbookOptions.cs | Converts to [Option]-based options POCO (and adds retry/tenant container). |
| tools/Azure.Mcp.Tools.Workbooks/src/Options/Workbook/CreateWorkbookOptions.cs | Converts to [Option]-based options POCO; adds required fields and retry/tenant container. |
| tools/Azure.Mcp.Tools.Workbooks/src/Options/BaseWorkbooksOptions.cs | Removes legacy base options type (previously inherited GlobalOptions). |
| tools/Azure.Mcp.Tools.Workbooks/src/GlobalUsings.cs | Removes tool-local global usings (previously provided System.CommandLine / System.Text.Json). |
| tools/Azure.Mcp.Tools.Workbooks/src/Commands/Workbooks/UpdateWorkbooksCommand.cs | Migrates command to AuthenticatedCommand<TOptions, TResult> and attribute-bound options. |
| tools/Azure.Mcp.Tools.Workbooks/src/Commands/Workbooks/ShowWorkbooksCommand.cs | Migrates command to AuthenticatedCommand<TOptions, TResult> and attribute-bound options + validation override. |
| tools/Azure.Mcp.Tools.Workbooks/src/Commands/Workbooks/ListWorkbooksCommand.cs | Migrates command to SubscriptionCommand<TOptions, TResult>; moves parsing to PostBindOptions. |
| tools/Azure.Mcp.Tools.Workbooks/src/Commands/Workbooks/DeleteWorkbooksCommand.cs | Migrates command to AuthenticatedCommand<TOptions, TResult> and attribute-bound options + validation override. |
| tools/Azure.Mcp.Tools.Workbooks/src/Commands/Workbooks/CreateWorkbooksCommand.cs | Migrates command to SubscriptionCommand<TOptions, TResult> and attribute-bound options. |
| tools/Azure.Mcp.Tools.Workbooks/src/Commands/BaseWorkbooksCommand.cs | Removes legacy base command type. |
| tools/Azure.Mcp.Tools.Workbooks/src/Azure.Mcp.Tools.Workbooks.csproj | Updates Core reference path and removes direct System.CommandLine package reference. |
| core/Microsoft.Mcp.Core/src/Options/OptionTypeHandler.cs | Improves validation error message to include the option name. |
Comment on lines
+9
to
13
| public sealed class UpdateWorkbooksOptions | ||
| { | ||
| [JsonPropertyName(WorkbooksOptionDefinitions.WorkbookIdText)] | ||
| public string? WorkbookId { get; set; } | ||
| [Option(Description = "The Azure Resource ID of the workbook to retrieve.")] | ||
| public required string WorkbookId { get; set; } | ||
|
|
Comment on lines
+9
to
+13
| public sealed class ShowWorkbooksOptions | ||
| { | ||
| [JsonPropertyName(WorkbooksOptionDefinitions.WorkbookIdsText)] | ||
| public string[]? WorkbookIds { get; set; } | ||
| [Option(Description = WorkbooksOptionDescriptions.WorkbookIdsDescription)] | ||
| public required string[] WorkbookIds { get; set; } | ||
|
|
Comment on lines
+9
to
+13
| public sealed class DeleteWorkbookOptions | ||
| { | ||
| [JsonPropertyName(WorkbooksOptionDefinitions.WorkbookIdsText)] | ||
| public string[]? WorkbookIds { get; set; } | ||
| [Option(Description = WorkbooksOptionDescriptions.WorkbookIdsDescription)] | ||
| public required string[] WorkbookIds { get; set; } | ||
|
|
Comment on lines
+9
to
13
| public sealed class CreateWorkbookOptions : ISubscriptionOption | ||
| { | ||
| [JsonPropertyName(WorkbooksOptionDefinitions.DisplayNameText)] | ||
| public string? DisplayName { get; set; } | ||
| [Option(Description = WorkbooksOptionDescriptions.DisplayNameDescription)] | ||
| public required string DisplayName { get; set; } | ||
|
|
Comment on lines
+37
to
+47
| [Option(Description = OptionDescriptions.ResourceGroup)] | ||
| public string? ResourceGroup { get; set; } | ||
|
|
||
| [Option(Description = OptionDescriptions.Subscription)] | ||
| public string? Subscription { get; set; } | ||
|
|
||
| [Option(Description = OptionDescriptions.Tenant)] | ||
| public string? Tenant { get; set; } | ||
|
|
||
| [OptionContainer(Prefix = "retry")] | ||
| public RetryPolicyOptions? RetryPolicy { get; set; } |
| } | ||
|
|
||
| internal record UpdateWorkbooksCommandResult(WorkbookInfo Workbook); | ||
| public sealed record UpdateWorkbooksCommandResult(WorkbookInfo Workbook); |
| } | ||
|
|
||
| internal record ListWorkbooksCommandResult(List<WorkbookInfo> Workbooks, int? TotalCount, int Returned); | ||
| public sealed record ListWorkbooksCommandResult(List<WorkbookInfo> Workbooks, int? TotalCount, int Returned); |
| } | ||
|
|
||
| internal record ShowWorkbooksCommandResult(List<WorkbookInfo> Workbooks, List<WorkbookError> Errors); | ||
| public sealed record ShowWorkbooksCommandResult(List<WorkbookInfo> Workbooks, List<WorkbookError> Errors); |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What does this PR do?
Migrates Workbooks tools to new design where Register and Bind options are based on
Optionattributes.GitHub issue number?
[Link to the GitHub issue this PR addresses]Pre-merge Checklist
servers/Azure.Mcp.Server/README.mdand/orservers/Fabric.Mcp.Server/README.mddocumentationREADME.mdchanges running the script./eng/scripts/Process-PackageReadMe.ps1. See Package READMEToolDescriptionEvaluatorand obtained a score of0.4or more and a top 3 ranking for all related test promptsconsolidated-tools.jsonbreaking-changelabelservers/Azure.Mcp.Server/docs/azmcp-commands.md./eng/scripts/Update-AzCommandsMetadata.ps1to update tool metadata inazmcp-commands.md(required for CI)servers/Azure.Mcp.Server/docs/e2eTestPrompts.mdcrypto mining, spam, data exfiltration, etc.)/azp run mcp - pullrequest - liveto run Live Test Pipeline