Skip to content

Migrate Workbooks tools to new tool design#3050

Open
alzimmermsft wants to merge 1 commit into
microsoft:mainfrom
alzimmermsft:MigrateWorkbooksToolsToNewDesign
Open

Migrate Workbooks tools to new tool design#3050
alzimmermsft wants to merge 1 commit into
microsoft:mainfrom
alzimmermsft:MigrateWorkbooksToolsToNewDesign

Conversation

@alzimmermsft

Copy link
Copy Markdown
Contributor

What does this PR do?

Migrates Workbooks tools to new design where Register and Bind options are based on Option attributes.

GitHub issue number?

[Link to the GitHub issue this PR addresses]

Pre-merge Checklist

  • Required for All PRs
    • Read contribution guidelines
    • PR title clearly describes the change
    • Commit history is clean with descriptive messages (cleanup guide)
    • Added comprehensive tests for new/modified functionality
    • Created a changelog entry if the change falls among the following: new feature, bug fix, UI/UX update, breaking change, or updated dependencies. Follow the changelog entry guide
  • For MCP tool changes:
    • One tool per PR: This PR adds or modifies only one MCP tool for faster review cycles
    • Updated servers/Azure.Mcp.Server/README.md and/or servers/Fabric.Mcp.Server/README.md documentation
    • Validate README.md changes running the script ./eng/scripts/Process-PackageReadMe.ps1. See Package README
    • For new or modified tool descriptions, ran ToolDescriptionEvaluator and obtained a score of 0.4 or more and a top 3 ranking for all related test prompts
    • For tools with new names, including new tools or renamed tools, update consolidated-tools.json
    • For renamed tools, follow the Tool Rename Checklist and tag the PR with the breaking-change label
    • For new tools associated with Azure services or publicly available tools/APIs/products, add URL to documentation in the PR description
  • Extra steps for Azure MCP Server tool changes:
    • Updated command list in servers/Azure.Mcp.Server/docs/azmcp-commands.md
    • Ran ./eng/scripts/Update-AzCommandsMetadata.ps1 to update tool metadata in azmcp-commands.md (required for CI)
    • Updated test prompts in servers/Azure.Mcp.Server/docs/e2eTestPrompts.md
    • 👉 For Community (non-Microsoft team member) PRs:
      • Security review: Reviewed code for security vulnerabilities, malicious code, or suspicious activities before running tests (crypto mining, spam, data exfiltration, etc.)
      • Manual tests run: added comment /azp run mcp - pullrequest - live to run Live Test Pipeline

@alzimmermsft alzimmermsft self-assigned this Jul 15, 2026
Copilot AI review requested due to automatic review settings July 15, 2026 21:17
@alzimmermsft alzimmermsft requested review from a team as code owners July 15, 2026 21:17
@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
Successfully started running 1 pipeline(s).
There may be pipelines that require an authorized user to comment /azp run to run.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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 + BaseWorkbooksOptions with 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);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants