Repository navigation
Azure MCP Server: policy_assignment_list fails at management-group scope ("Only resource in a subscription is supported") - still reproducible in 3.0.0-beta.49 #3963
Description
Title: Azure MCP Server: policy_assignment_list fails at management-group scope ("Only resource in a subscription is supported") — still reproducible in 3.0.0-beta.49
Summary
policy_assignment_list fails when the target scope is an Azure management group. Subscription-level enumeration works fine; management-group-level enumeration fails with:
Only resource in a subscription is supported
This is still reproducible in 3.0.0-beta.49, despite a related support case being closed/archived as if resolved.
Root cause
Azure.Mcp.Tools.Policy.Services.PolicyService.ListPolicyAssignmentsAsync resolves any non-empty scope via:
armClient.GetGenericResource(new ResourceIdentifier(scope)).GetAsync()then calls .GetPolicyAssignments() on the result.
A management-group scope (/providers/Microsoft.Management/managementGroups/{id}) is not a generic ARM resource reachable through that GET surface — it's owned by Microsoft.Management, not subscription/resource-group scoped — so the generic-resource GET throws before policy assignments can even be listed.
Repro steps
- Call
policy_assignment_listwithscope= a subscription ID → succeeds. - Call
policy_assignment_listwithscope= a management group ID (/providers/Microsoft.Management/managementGroups/{mgId}) → fails with "Only resource in a subscription is supported." - Confirmed on both
2.0.5and3.0.0-beta.49. subscription_listandgroup_list(management group list) both work correctly — only policy-assignment enumeration at MG scope is affected.- Native Azure Policy REST API / Azure Resource Graph (
PolicyResourcestable) correctly enumerate policy assignments at management-group scope — confirming this is an Azure MCP Server defect, not an ARM/Policy service limitation.
Expected behavior
policy_assignment_list should enumerate policy assignments at management-group scope, matching native Azure Policy REST API behavior.
Suggested fix
Bypass the generic-resource GET for management-group scopes. Use the scope-based extension method armClient.GetPolicyAssignments(new ResourceIdentifier(scope)) (from Azure.ResourceManager.Resources), or route management-group scopes through the typed ManagementGroupResource.GetPolicyAssignments() path, rather than funneling every scope through GetGenericResource.
Impact
Blocking a customer's Foundry-based Azure Policy governance agent — specifically the management-group portion of policy discovery, inheritance analysis, policy rationalization, and compliance workflows. Customer requests:
- GitHub issue / tracking ID for the defect (this issue)
- Planned fix version
- Estimated timeline / release window
- Whether a preview build containing the fix can be provided for validation
- Any supported interim workaround within Azure MCP itself
Interim workaround (customer-facing, until fixed)
- Subscription-level
policy_assignment_listis unaffected and works today. - For management-group-level enumeration, use Azure Resource Graph (
PolicyResourcestable, scoped to the management group) or the raw Azure Policy REST API directly.
Environment
- Azure MCP Server versions tested:
2.0.5,3.0.0-beta.49 - Related support case: TrackingID#2608260040008728 (archived/closed prematurely — defect persists)
Activity
github-actions commentedon Oct 15, 2026
Thanks for the feedback! We are routing this to the appropriate team for follow-up. cc msalaman.