Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions Directory.Packages.props
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@
<PackageVersion Include="Azure.ResourceManager.Datadog" Version="1.0.0-beta.6" />
<PackageVersion Include="Azure.ResourceManager.CosmosDB" Version="1.4.0-beta.13" />
<PackageVersion Include="Azure.ResourceManager.OperationalInsights" Version="1.3.1" />
<PackageVersion Include="Azure.ResourceManager.ResilienceManagement" Version="1.0.0-beta.1" />
<PackageVersion Include="Azure.ResourceManager.Search" Version="1.3.0" />
<PackageVersion Include="Azure.ResourceManager.SignalR" Version="1.1.4" />
<PackageVersion Include="Azure.ResourceManager.Storage" Version="1.4.4" />
Expand Down
7 changes: 7 additions & 0 deletions Microsoft.Mcp.slnx
Original file line number Diff line number Diff line change
Expand Up @@ -372,6 +372,13 @@
<Folder Name="/tools/Azure.Mcp.Tools.Redis/tests/">
<Project Path="tools/Azure.Mcp.Tools.Redis/tests/Azure.Mcp.Tools.Redis.Tests/Azure.Mcp.Tools.Redis.Tests.csproj" />
</Folder>
<Folder Name="/tools/Azure.Mcp.Tools.ResilienceManagement/" />
<Folder Name="/tools/Azure.Mcp.Tools.ResilienceManagement/src/">
<Project Path="tools/Azure.Mcp.Tools.ResilienceManagement/src/Azure.Mcp.Tools.ResilienceManagement.csproj" />
</Folder>
<Folder Name="/tools/Azure.Mcp.Tools.ResilienceManagement/tests/">
<Project Path="tools/Azure.Mcp.Tools.ResilienceManagement/tests/Azure.Mcp.Tools.ResilienceManagement.Tests/Azure.Mcp.Tools.ResilienceManagement.Tests.csproj" />
</Folder>
<Folder Name="/tools/Azure.Mcp.Tools.ResourceHealth/" />
<Folder Name="/tools/Azure.Mcp.Tools.ResourceHealth/src/">
<Project Path="tools/Azure.Mcp.Tools.ResourceHealth/src/Azure.Mcp.Tools.ResourceHealth.csproj" />
Expand Down
7 changes: 7 additions & 0 deletions servers/Azure.Mcp.Server/Azure.Mcp.Server.slnx
Original file line number Diff line number Diff line change
Expand Up @@ -326,6 +326,13 @@
<Folder Name="/tools/Azure.Mcp.Tools.Redis/tests/">
<Project Path="../../tools/Azure.Mcp.Tools.Redis/tests/Azure.Mcp.Tools.Redis.Tests/Azure.Mcp.Tools.Redis.Tests.csproj" />
</Folder>
<Folder Name="/tools/Azure.Mcp.Tools.ResilienceManagement/" />
<Folder Name="/tools/Azure.Mcp.Tools.ResilienceManagement/src/">
<Project Path="../../tools/Azure.Mcp.Tools.ResilienceManagement/src/Azure.Mcp.Tools.ResilienceManagement.csproj" />
</Folder>
<Folder Name="/tools/Azure.Mcp.Tools.ResilienceManagement/tests/">
<Project Path="../../tools/Azure.Mcp.Tools.ResilienceManagement/tests/Azure.Mcp.Tools.ResilienceManagement.Tests/Azure.Mcp.Tools.ResilienceManagement.Tests.csproj" />
</Folder>
<Folder Name="/tools/Azure.Mcp.Tools.ResourceHealth/" />
<Folder Name="/tools/Azure.Mcp.Tools.ResourceHealth/src/">
<Project Path="../../tools/Azure.Mcp.Tools.ResourceHealth/src/Azure.Mcp.Tools.ResourceHealth.csproj" />
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
changes:
- section: "Features Added"
description: "Added the 'resilience' toolset (Azure Resilience Management) with read-only 'get' commands for goals (templates, assignments, resources), usage plans and enrollments, drills (drills, runs, resources), and recovery plans (plans, resources, jobs)."
92 changes: 92 additions & 0 deletions servers/Azure.Mcp.Server/docs/azmcp-commands.md
Original file line number Diff line number Diff line change
Expand Up @@ -3611,6 +3611,98 @@ azmcp redis create --subscription <subscription> \
azmcp redis list --subscription <subscription>
```

### Azure Resilience Management Operations

```bash
# Get a resilience goal template, or list all goal templates in a service group (omit --name)
# ❌ Destructive | ✅ Idempotent | ❌ OpenWorld | ✅ ReadOnly | ❌ Secret | ❌ LocalRequired
azmcp resilience goal template get --subscription <subscription> \
--service-group <service-group> \
[--name <name>]

# Get a resilience goal assignment, or list all goal assignments in a service group (omit --name)
# ❌ Destructive | ✅ Idempotent | ❌ OpenWorld | ✅ ReadOnly | ❌ Secret | ❌ LocalRequired
azmcp resilience goal assignment get --subscription <subscription> \
--service-group <service-group> \
[--name <name>]

# Get a resource (member) of a goal assignment, or list all resources of the assignment (omit --name)
# ❌ Destructive | ✅ Idempotent | ❌ OpenWorld | ✅ ReadOnly | ❌ Secret | ❌ LocalRequired
azmcp resilience goal resource get --subscription <subscription> \
--service-group <service-group> \
--goal-assignment <goal-assignment> \
[--name <name>]

# Get a resilience usage plan, or list usage plans (omit --name; omit --resource-group to list across the subscription)
# ❌ Destructive | ✅ Idempotent | ❌ OpenWorld | ✅ ReadOnly | ❌ Secret | ❌ LocalRequired
azmcp resilience usageplan get --subscription <subscription> \
[--resource-group <resource-group>] \
[--name <name>]

# Get a usage plan enrollment, or list all enrollments of a usage plan (omit --name)
# ❌ Destructive | ✅ Idempotent | ❌ OpenWorld | ✅ ReadOnly | ❌ Secret | ❌ LocalRequired
azmcp resilience usageplan enrollment get --subscription <subscription> \
--resource-group <resource-group> \
--usage-plan <usage-plan> \
[--name <name>]

# Get a resilience drill, or list all drills in a service group (omit --name)
# ❌ Destructive | ✅ Idempotent | ❌ OpenWorld | ✅ ReadOnly | ❌ Secret | ❌ LocalRequired
azmcp resilience drill get --subscription <subscription> \
--service-group <service-group> \
[--name <name>]

# Get a resource (target) of a drill, or list all resources of the drill (omit --name)
# ❌ Destructive | ✅ Idempotent | ❌ OpenWorld | ✅ ReadOnly | ❌ Secret | ❌ LocalRequired
azmcp resilience drill resource get --subscription <subscription> \
--service-group <service-group> \
--drill <drill> \
[--name <name>]

# Get a drill run, or list all runs of a drill (omit --name)
# ❌ Destructive | ✅ Idempotent | ❌ OpenWorld | ✅ ReadOnly | ❌ Secret | ❌ LocalRequired
azmcp resilience drill run get --subscription <subscription> \
--service-group <service-group> \
--drill <drill> \
[--name <name>]

# Get a resource (target) of a drill run, or list all resources of the drill run (omit --name)
# ❌ Destructive | ✅ Idempotent | ❌ OpenWorld | ✅ ReadOnly | ❌ Secret | ❌ LocalRequired
azmcp resilience drill run resource get --subscription <subscription> \
--service-group <service-group> \
--drill <drill> \
--drill-run <drill-run> \
[--name <name>]

# Get a resilience recovery plan, or list all recovery plans in a service group (omit --name)
# ❌ Destructive | ✅ Idempotent | ❌ OpenWorld | ✅ ReadOnly | ❌ Secret | ❌ LocalRequired
azmcp resilience recovery plan get --subscription <subscription> \
--service-group <service-group> \
[--name <name>]

# Get a resource (member) of a recovery plan, or list all resources of the plan (omit --name)
# ❌ Destructive | ✅ Idempotent | ❌ OpenWorld | ✅ ReadOnly | ❌ Secret | ❌ LocalRequired
azmcp resilience recovery plan resource get --subscription <subscription> \
--service-group <service-group> \
--recovery-plan <recovery-plan> \
[--name <name>]

# Get a recovery job, or list all recovery jobs of a recovery plan (omit --name)
# ❌ Destructive | ✅ Idempotent | ❌ OpenWorld | ✅ ReadOnly | ❌ Secret | ❌ LocalRequired
azmcp resilience recovery job get --subscription <subscription> \
--service-group <service-group> \
--recovery-plan <recovery-plan> \
[--name <name>]

# Get a resource (target) of a recovery job, or list all resources of the job (omit --name)
# ❌ Destructive | ✅ Idempotent | ❌ OpenWorld | ✅ ReadOnly | ❌ Secret | ❌ LocalRequired
azmcp resilience recovery job resource get --subscription <subscription> \
--service-group <service-group> \
--recovery-plan <recovery-plan> \
--recovery-job <recovery-job> \
[--name <name>]
```

### Azure Resource Group Operations

```bash
Expand Down
33 changes: 33 additions & 0 deletions servers/Azure.Mcp.Server/docs/e2eTestPrompts.md
Original file line number Diff line number Diff line change
Expand Up @@ -854,6 +854,39 @@ This file contains prompts used for end-to-end testing to ensure each tool is in
| redis_list | Show me my Redis caches |
| redis_list | Get Redis clusters |

## Azure Resilience Management

| Tool Name | Test Prompt |
|:----------|:----------|
| resilience_drill_get | List all resilience drills in service group <service_group> |
| resilience_drill_get | Show me the resilience drills in service group <service_group> |
| resilience_drill_get | Get the details of resilience drill <drill_name> in service group <service_group> |
| resilience_drill_resource_get | List all resources (targets) of resilience drill <drill_name> in service group <service_group> |
| resilience_drill_resource_get | Get the resilience drill resource <resource_name> for drill <drill_name> in service group <service_group> |
| resilience_drill_run_get | List all runs of resilience drill <drill_name> in service group <service_group> |
| resilience_drill_run_get | Get the details of drill run <drill_run_name> for drill <drill_name> in service group <service_group> |
| resilience_drill_run_resource_get | List all resources (targets) of drill run <drill_run_name> for drill <drill_name> in service group <service_group> |
| resilience_drill_run_resource_get | Get the drill run resource <resource_name> for drill run <drill_run_name> of drill <drill_name> in service group <service_group> |
| resilience_goal_assignment_get | List all resilience goal assignments in service group <service_group> |
| resilience_goal_assignment_get | Get the details of goal assignment <goal_assignment_name> in service group <service_group> |
| resilience_goal_resource_get | List all resources (members) of goal assignment <goal_assignment_name> in service group <service_group> |
| resilience_goal_resource_get | Get the goal resource <resource_name> for goal assignment <goal_assignment_name> in service group <service_group> |
| resilience_goal_template_get | List all resilience goal templates in service group <service_group> |
| resilience_goal_template_get | Get the details of goal template <goal_template_name> in service group <service_group> |
| resilience_recovery_job_get | List all recovery jobs of recovery plan <recovery_plan_name> in service group <service_group> |
| resilience_recovery_job_get | Get the details of recovery job <recovery_job_name> for recovery plan <recovery_plan_name> in service group <service_group> |
| resilience_recovery_job_resource_get | List all resources (targets) of recovery job <recovery_job_name> for recovery plan <recovery_plan_name> in service group <service_group> |
| resilience_recovery_job_resource_get | Get the recovery job resource <resource_name> for recovery job <recovery_job_name> of recovery plan <recovery_plan_name> in service group <service_group> |
| resilience_recovery_plan_get | List all resilience recovery plans in service group <service_group> |
| resilience_recovery_plan_get | Get the details of recovery plan <recovery_plan_name> in service group <service_group> |
| resilience_recovery_plan_resource_get | List all resources (members) of recovery plan <recovery_plan_name> in service group <service_group> |
| resilience_recovery_plan_resource_get | Get the recovery resource <resource_name> for recovery plan <recovery_plan_name> in service group <service_group> |
| resilience_usageplan_enrollment_get | List all enrollments of usage plan <usage_plan_name> in resource group <resource_group_name> |
| resilience_usageplan_enrollment_get | Get the details of usage plan enrollment <enrollment_name> for usage plan <usage_plan_name> in resource group <resource_group_name> |
| resilience_usageplan_get | List all resilience usage plans in my subscription |
| resilience_usageplan_get | List all resilience usage plans in resource group <resource_group_name> |
| resilience_usageplan_get | Get the details of usage plan <usage_plan_name> in resource group <resource_group_name> |

## Azure Resource Group

| Tool Name | Test Prompt |
Expand Down
1 change: 1 addition & 0 deletions servers/Azure.Mcp.Server/src/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -222,6 +222,7 @@ private static IAreaSetup[] RegisterAreas()
new Azure.Mcp.Tools.Postgres.PostgresSetup(),
new Azure.Mcp.Tools.Pricing.PricingSetup(),
new Azure.Mcp.Tools.Redis.RedisSetup(),
new Azure.Mcp.Tools.ResilienceManagement.ResilienceManagementSetup(),
new Azure.Mcp.Tools.ResourceHealth.ResourceHealthSetup(),
new Azure.Mcp.Tools.Search.SearchSetup(),
new Azure.Mcp.Tools.Speech.SpeechSetup(),
Expand Down
45 changes: 45 additions & 0 deletions servers/Azure.Mcp.Server/src/Resources/consolidated-tools.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,50 @@
{
"consolidated_tools": [
{
"name": "get_azure_resilience_management_details",
"description": "Get details about Azure Resilience Management resources, including resilience goals (templates, assignments, and their resources), usage plans and enrollments, disaster recovery drills (drills, runs, and their resources), and recovery plans (plans, resources, and jobs) for Azure service groups.",
"toolMetadata": {
"destructive": {
"value": false,
"description": "This tool performs only additive updates without deleting or modifying existing resources."
},
"idempotent": {
"value": true,
"description": "Running this operation multiple times with the same arguments produces the same result without additional effects."
},
"openWorld": {
"value": false,
"description": "This tool's domain of interaction is closed and well-defined, limited to a specific set of entities."
},
"readOnly": {
"value": true,
"description": "This tool only performs read operations without modifying any state or data."
},
"secret": {
"value": false,
"description": "This tool does not handle sensitive or secret information."
},
"localRequired": {
"value": false,
"description": "This tool is available in both local and remote server modes."
}
},
"mappedToolList": [
"resilience_goal_template_get",
"resilience_goal_assignment_get",
"resilience_goal_resource_get",
"resilience_usageplan_get",
"resilience_usageplan_enrollment_get",
"resilience_drill_get",
"resilience_drill_resource_get",
"resilience_drill_run_get",
"resilience_drill_run_resource_get",
"resilience_recovery_plan_get",
"resilience_recovery_plan_resource_get",
"resilience_recovery_job_get",
"resilience_recovery_job_resource_get"
]
},
{
"name": "get_azure_subscriptions_and_resource_groups",
"description": "Get information about Azure subscriptions, resource groups, and resources within resource groups that the user has access to.",
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.

using System.Runtime.CompilerServices;

[assembly: InternalsVisibleTo("Azure.Mcp.Tools.ResilienceManagement.Tests")]
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<IsAotCompatible>true</IsAotCompatible>
</PropertyGroup>
<ItemGroup>
<EmbeddedResource Include="**\Resources\*.txt" />
<EmbeddedResource Include="**\Resources\*.json" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\..\core\Azure.Mcp.Core\src\Azure.Mcp.Core.csproj" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Azure.ResourceManager" />
<PackageReference Include="Azure.ResourceManager.ResilienceManagement" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection" />
<PackageReference Include="ModelContextProtocol" />
<PackageReference Include="System.CommandLine" />
</ItemGroup>
</Project>
Loading