Migrate Resource Health tools to new tool design#2952
Conversation
There was a problem hiding this comment.
Pull request overview
Migrates the Azure Resource Health toolset to the newer command/options design that uses [Option] / [OptionContainer] attributes and the two-generic SubscriptionCommand<TOptions, TResult> pattern, removing legacy System.CommandLine option registration/binding code.
Changes:
- Converted Resource Health commands to the new
SubscriptionCommand<TOptions, TResult>execution/validation pipeline (options POCOs +ValidateOptions). - Replaced legacy option-definition classes and options inheritance with flat, attribute-decorated options models.
- Updated unit tests to use
SubscriptionCommandUnitTestsBaseand adjusted expectations for the new binding/validation flow.
Reviewed changes
Copilot reviewed 15 out of 15 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
| tools/Azure.Mcp.Tools.ResourceHealth/src/Commands/BaseResourceHealthCommand.cs | Updates Resource Health command base to the new SubscriptionCommand<TOptions, TResult> pattern. |
| tools/Azure.Mcp.Tools.ResourceHealth/src/Commands/AvailabilityStatus/AvailabilityStatusGetCommand.cs | Converts command execution to typed options + typed result model. |
| tools/Azure.Mcp.Tools.ResourceHealth/src/Commands/ServiceHealthEvents/ServiceHealthEventsListCommand.cs | Converts command execution/validation to typed options + ValidateOptions. |
| tools/Azure.Mcp.Tools.ResourceHealth/src/Options/AvailabilityStatus/AvailabilityStatusGetOptions.cs | Replaces legacy options inheritance with attribute-based options POCO. |
| tools/Azure.Mcp.Tools.ResourceHealth/src/Options/ServiceHealthEvents/ServiceHealthEventsListOptions.cs | Replaces legacy options inheritance with attribute-based options POCO. |
| tools/Azure.Mcp.Tools.ResourceHealth/src/Services/ResourceHealthService.cs | Removes unused logger dependency from the service constructor. |
| tools/Azure.Mcp.Tools.ResourceHealth/src/ResourceHealthSetup.cs | Keeps tool registrations aligned with the updated command/service constructors. |
| tools/Azure.Mcp.Tools.ResourceHealth/src/Azure.Mcp.Tools.ResourceHealth.csproj | Removes direct System.CommandLine dependency and normalizes project reference path. |
| tools/Azure.Mcp.Tools.ResourceHealth/src/ResourceHealthOptionDefinitions.cs | Deletes legacy System.CommandLine option definitions (superseded by [Option]). |
| tools/Azure.Mcp.Tools.ResourceHealth/src/Options/BaseResourceHealthOptions.cs | Deletes legacy options base class (superseded by flat POCOs). |
| tools/Azure.Mcp.Tools.ResourceHealth/src/GlobalUsings.cs | Removes tool-local System.CommandLine global using (no longer needed). |
| tools/Azure.Mcp.Tools.ResourceHealth/tests/Azure.Mcp.Tools.ResourceHealth.Tests/AvailabilityStatus/AvailabilityStatusGetCommandTests.cs | Updates tests to the subscription-aware unit test base and new validation behavior. |
| tools/Azure.Mcp.Tools.ResourceHealth/tests/Azure.Mcp.Tools.ResourceHealth.Tests/ServiceHealthEvents/ServiceHealthEventsListCommandTests.cs | Updates tests to the subscription-aware unit test base and removes env-dependent skips. |
| tools/Azure.Mcp.Tools.ResourceHealth/tests/Azure.Mcp.Tools.ResourceHealth.Tests/Services/ResourceHealthServiceSsrfValidationTests.cs | Updates service construction to match the new constructor signature. |
| servers/Azure.Mcp.Server/changelog-entries/1782414691894.yaml | Adds a breaking-change entry describing the tool surface change. |
jongio
left a comment
There was a problem hiding this comment.
Migration follows the same pattern already established by StorageSync (#2950) and other recently converted tools. The attribute-based options, SubscriptionCommand<TOptions, TResult> base class, and ValidateOptions approach are all consistent.
Regarding the Copilot bot's concern about --auth-method removal: every tool migrated to the new SubscriptionCommand<TOptions, TResult> pattern drops this option. It's handled at a different layer in the new design (AuthenticatedCommand base class manages credentials without exposing a per-command CLI option). The changelog entry correctly documents this as a breaking change.
What does this PR do?
Migrates Resource Health 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