Because there isn't a control plane and data plane MCP servers, it should be clear to users which a tool or tool family for an Azure service offers control plane or both. I assume that most tool families for an Azure service are data plane.
In order to not cause an issue, provide the annotation and set it to data plane by default.
Annotations = ToolMetadata
public override ToolMetadata Metadata => new()
{
Destructive = false,
Idempotent = false,
OpenWorld = false,
ReadOnly = false,
LocalRequired = false,
Secret = false
};
Another option is to provide this at the service level
public class EventGridService(ISubscriptionService subscriptionService, ITenantService tenantService, ILogger<EventGridService> logger, IHttpClientFactory httpClientFactory)
: BaseAzureService(tenantService), IEventGridService
{
private readonly ISubscriptionService _subscriptionService = subscriptionService ?? throw new ArgumentNullException(nameof(subscriptionService));
private readonly ILogger<EventGridService> _logger = logger ?? throw new ArgumentNullException(nameof(logger));
private readonly IHttpClientFactory _httpClientFactory = httpClientFactory ?? throw new ArgumentNullException(nameof(httpClientFactory));
public async Task<List<EventGridTopicInfo>> GetTopicsAsync(
string subscription,
string? resourceGroup = null,
string? tenant = null,
RetryPolicyOptions? retryPolicy = null,
CancellationToken cancellationToken = default)
{
var subscriptionResource = await _subscriptionService.GetSubscription(subscription, tenant, retryPolicy, cancellationToken);
var topics = new List<EventGridTopicInfo>();
if (!string.IsNullOrEmpty(resourceGroup))
{
// Get topics from specific resource group
var resourceGroupResource = await subscriptionResource
.GetResourceGroupAsync(resourceGroup, cancellationToken);
await foreach (var topic in resourceGroupResource.Value.GetEventGridTopics().GetAllAsync(cancellationToken: cancellationToken))
{
topics.Add(CreateTopicInfo(topic.Data));
}
}
else
{
// Get topics from all resource groups in subscription
await foreach (var topic in subscriptionResource.GetEventGridTopicsAsync(cancellationToken: cancellationToken))
{
topics.Add(CreateTopicInfo(topic.Data));
}
}
return topics;
}
Ultimately, provide the information in a way that makes it to the CLI output JSON. This is necessary to docs generation to accurately indicate to the customer the breadth of coverage the tool or tool family provides.
Because there isn't a control plane and data plane MCP servers, it should be clear to users which a tool or tool family for an Azure service offers control plane or both. I assume that most tool families for an Azure service are data plane.
In order to not cause an issue, provide the annotation and set it to data plane by default.
Annotations = ToolMetadata
Another option is to provide this at the service level
Ultimately, provide the information in a way that makes it to the CLI output JSON. This is necessary to docs generation to accurately indicate to the customer the breadth of coverage the tool or tool family provides.