diff --git a/tools/issue-labeler/IssueLabeler.sln b/tools/issue-labeler/IssueLabeler.sln index 762fe481d52..c931293e860 100644 --- a/tools/issue-labeler/IssueLabeler.sln +++ b/tools/issue-labeler/IssueLabeler.sln @@ -29,52 +29,147 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Hubbup.MikLabelModel.Tests" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Azure.Sdk.Tools.CodeownersUtils", "..\codeowners-utils\Azure.Sdk.Tools.CodeownersUtils\Azure.Sdk.Tools.CodeownersUtils.csproj", "{D27C2C44-3AC4-0732-FF87-DD1697A9DF37}" EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{827E0CD3-B72D-47B6-A68D-7590B98EB39B}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Mcp.Evaluator", "src\Mcp.Evaluator\Mcp.Evaluator.csproj", "{2F1A6B5E-C446-4A09-BABC-5C076E9DD89E}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 Release|Any CPU = Release|Any CPU + Release|x64 = Release|x64 + Release|x86 = Release|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {4C9E75AF-468F-4DF7-BACD-EC0C2C66A96F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {4C9E75AF-468F-4DF7-BACD-EC0C2C66A96F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4C9E75AF-468F-4DF7-BACD-EC0C2C66A96F}.Debug|x64.ActiveCfg = Debug|Any CPU + {4C9E75AF-468F-4DF7-BACD-EC0C2C66A96F}.Debug|x64.Build.0 = Debug|Any CPU + {4C9E75AF-468F-4DF7-BACD-EC0C2C66A96F}.Debug|x86.ActiveCfg = Debug|Any CPU + {4C9E75AF-468F-4DF7-BACD-EC0C2C66A96F}.Debug|x86.Build.0 = Debug|Any CPU {4C9E75AF-468F-4DF7-BACD-EC0C2C66A96F}.Release|Any CPU.ActiveCfg = Release|Any CPU {4C9E75AF-468F-4DF7-BACD-EC0C2C66A96F}.Release|Any CPU.Build.0 = Release|Any CPU + {4C9E75AF-468F-4DF7-BACD-EC0C2C66A96F}.Release|x64.ActiveCfg = Release|Any CPU + {4C9E75AF-468F-4DF7-BACD-EC0C2C66A96F}.Release|x64.Build.0 = Release|Any CPU + {4C9E75AF-468F-4DF7-BACD-EC0C2C66A96F}.Release|x86.ActiveCfg = Release|Any CPU + {4C9E75AF-468F-4DF7-BACD-EC0C2C66A96F}.Release|x86.Build.0 = Release|Any CPU {0AEAF8DD-C370-4090-B439-9CF364D29869}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {0AEAF8DD-C370-4090-B439-9CF364D29869}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0AEAF8DD-C370-4090-B439-9CF364D29869}.Debug|x64.ActiveCfg = Debug|Any CPU + {0AEAF8DD-C370-4090-B439-9CF364D29869}.Debug|x64.Build.0 = Debug|Any CPU + {0AEAF8DD-C370-4090-B439-9CF364D29869}.Debug|x86.ActiveCfg = Debug|Any CPU + {0AEAF8DD-C370-4090-B439-9CF364D29869}.Debug|x86.Build.0 = Debug|Any CPU {0AEAF8DD-C370-4090-B439-9CF364D29869}.Release|Any CPU.ActiveCfg = Release|Any CPU {0AEAF8DD-C370-4090-B439-9CF364D29869}.Release|Any CPU.Build.0 = Release|Any CPU + {0AEAF8DD-C370-4090-B439-9CF364D29869}.Release|x64.ActiveCfg = Release|Any CPU + {0AEAF8DD-C370-4090-B439-9CF364D29869}.Release|x64.Build.0 = Release|Any CPU + {0AEAF8DD-C370-4090-B439-9CF364D29869}.Release|x86.ActiveCfg = Release|Any CPU + {0AEAF8DD-C370-4090-B439-9CF364D29869}.Release|x86.Build.0 = Release|Any CPU {5B655051-531D-4968-8AF3-1DBA9A9F568C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {5B655051-531D-4968-8AF3-1DBA9A9F568C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5B655051-531D-4968-8AF3-1DBA9A9F568C}.Debug|x64.ActiveCfg = Debug|Any CPU + {5B655051-531D-4968-8AF3-1DBA9A9F568C}.Debug|x64.Build.0 = Debug|Any CPU + {5B655051-531D-4968-8AF3-1DBA9A9F568C}.Debug|x86.ActiveCfg = Debug|Any CPU + {5B655051-531D-4968-8AF3-1DBA9A9F568C}.Debug|x86.Build.0 = Debug|Any CPU {5B655051-531D-4968-8AF3-1DBA9A9F568C}.Release|Any CPU.ActiveCfg = Release|Any CPU {5B655051-531D-4968-8AF3-1DBA9A9F568C}.Release|Any CPU.Build.0 = Release|Any CPU + {5B655051-531D-4968-8AF3-1DBA9A9F568C}.Release|x64.ActiveCfg = Release|Any CPU + {5B655051-531D-4968-8AF3-1DBA9A9F568C}.Release|x64.Build.0 = Release|Any CPU + {5B655051-531D-4968-8AF3-1DBA9A9F568C}.Release|x86.ActiveCfg = Release|Any CPU + {5B655051-531D-4968-8AF3-1DBA9A9F568C}.Release|x86.Build.0 = Release|Any CPU {5966A77B-5114-4608-92AD-524F181FA0FC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {5966A77B-5114-4608-92AD-524F181FA0FC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5966A77B-5114-4608-92AD-524F181FA0FC}.Debug|x64.ActiveCfg = Debug|Any CPU + {5966A77B-5114-4608-92AD-524F181FA0FC}.Debug|x64.Build.0 = Debug|Any CPU + {5966A77B-5114-4608-92AD-524F181FA0FC}.Debug|x86.ActiveCfg = Debug|Any CPU + {5966A77B-5114-4608-92AD-524F181FA0FC}.Debug|x86.Build.0 = Debug|Any CPU {5966A77B-5114-4608-92AD-524F181FA0FC}.Release|Any CPU.ActiveCfg = Release|Any CPU {5966A77B-5114-4608-92AD-524F181FA0FC}.Release|Any CPU.Build.0 = Release|Any CPU + {5966A77B-5114-4608-92AD-524F181FA0FC}.Release|x64.ActiveCfg = Release|Any CPU + {5966A77B-5114-4608-92AD-524F181FA0FC}.Release|x64.Build.0 = Release|Any CPU + {5966A77B-5114-4608-92AD-524F181FA0FC}.Release|x86.ActiveCfg = Release|Any CPU + {5966A77B-5114-4608-92AD-524F181FA0FC}.Release|x86.Build.0 = Release|Any CPU {CA47F6FC-382F-4034-9F12-517CC14E5CB0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {CA47F6FC-382F-4034-9F12-517CC14E5CB0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CA47F6FC-382F-4034-9F12-517CC14E5CB0}.Debug|x64.ActiveCfg = Debug|Any CPU + {CA47F6FC-382F-4034-9F12-517CC14E5CB0}.Debug|x64.Build.0 = Debug|Any CPU + {CA47F6FC-382F-4034-9F12-517CC14E5CB0}.Debug|x86.ActiveCfg = Debug|Any CPU + {CA47F6FC-382F-4034-9F12-517CC14E5CB0}.Debug|x86.Build.0 = Debug|Any CPU {CA47F6FC-382F-4034-9F12-517CC14E5CB0}.Release|Any CPU.ActiveCfg = Release|Any CPU {CA47F6FC-382F-4034-9F12-517CC14E5CB0}.Release|Any CPU.Build.0 = Release|Any CPU + {CA47F6FC-382F-4034-9F12-517CC14E5CB0}.Release|x64.ActiveCfg = Release|Any CPU + {CA47F6FC-382F-4034-9F12-517CC14E5CB0}.Release|x64.Build.0 = Release|Any CPU + {CA47F6FC-382F-4034-9F12-517CC14E5CB0}.Release|x86.ActiveCfg = Release|Any CPU + {CA47F6FC-382F-4034-9F12-517CC14E5CB0}.Release|x86.Build.0 = Release|Any CPU {DB80D7FD-262D-429D-9700-72EF4D93F317}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {DB80D7FD-262D-429D-9700-72EF4D93F317}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DB80D7FD-262D-429D-9700-72EF4D93F317}.Debug|x64.ActiveCfg = Debug|Any CPU + {DB80D7FD-262D-429D-9700-72EF4D93F317}.Debug|x64.Build.0 = Debug|Any CPU + {DB80D7FD-262D-429D-9700-72EF4D93F317}.Debug|x86.ActiveCfg = Debug|Any CPU + {DB80D7FD-262D-429D-9700-72EF4D93F317}.Debug|x86.Build.0 = Debug|Any CPU {DB80D7FD-262D-429D-9700-72EF4D93F317}.Release|Any CPU.ActiveCfg = Release|Any CPU {DB80D7FD-262D-429D-9700-72EF4D93F317}.Release|Any CPU.Build.0 = Release|Any CPU + {DB80D7FD-262D-429D-9700-72EF4D93F317}.Release|x64.ActiveCfg = Release|Any CPU + {DB80D7FD-262D-429D-9700-72EF4D93F317}.Release|x64.Build.0 = Release|Any CPU + {DB80D7FD-262D-429D-9700-72EF4D93F317}.Release|x86.ActiveCfg = Release|Any CPU + {DB80D7FD-262D-429D-9700-72EF4D93F317}.Release|x86.Build.0 = Release|Any CPU {9E6BA2D8-3BBE-40D6-9DAF-0FC0CD362BD4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {9E6BA2D8-3BBE-40D6-9DAF-0FC0CD362BD4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9E6BA2D8-3BBE-40D6-9DAF-0FC0CD362BD4}.Debug|x64.ActiveCfg = Debug|Any CPU + {9E6BA2D8-3BBE-40D6-9DAF-0FC0CD362BD4}.Debug|x64.Build.0 = Debug|Any CPU + {9E6BA2D8-3BBE-40D6-9DAF-0FC0CD362BD4}.Debug|x86.ActiveCfg = Debug|Any CPU + {9E6BA2D8-3BBE-40D6-9DAF-0FC0CD362BD4}.Debug|x86.Build.0 = Debug|Any CPU {9E6BA2D8-3BBE-40D6-9DAF-0FC0CD362BD4}.Release|Any CPU.ActiveCfg = Release|Any CPU {9E6BA2D8-3BBE-40D6-9DAF-0FC0CD362BD4}.Release|Any CPU.Build.0 = Release|Any CPU + {9E6BA2D8-3BBE-40D6-9DAF-0FC0CD362BD4}.Release|x64.ActiveCfg = Release|Any CPU + {9E6BA2D8-3BBE-40D6-9DAF-0FC0CD362BD4}.Release|x64.Build.0 = Release|Any CPU + {9E6BA2D8-3BBE-40D6-9DAF-0FC0CD362BD4}.Release|x86.ActiveCfg = Release|Any CPU + {9E6BA2D8-3BBE-40D6-9DAF-0FC0CD362BD4}.Release|x86.Build.0 = Release|Any CPU {CD3F13F1-8890-490A-BB47-9382E2131F5D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {CD3F13F1-8890-490A-BB47-9382E2131F5D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CD3F13F1-8890-490A-BB47-9382E2131F5D}.Debug|x64.ActiveCfg = Debug|Any CPU + {CD3F13F1-8890-490A-BB47-9382E2131F5D}.Debug|x64.Build.0 = Debug|Any CPU + {CD3F13F1-8890-490A-BB47-9382E2131F5D}.Debug|x86.ActiveCfg = Debug|Any CPU + {CD3F13F1-8890-490A-BB47-9382E2131F5D}.Debug|x86.Build.0 = Debug|Any CPU {CD3F13F1-8890-490A-BB47-9382E2131F5D}.Release|Any CPU.ActiveCfg = Release|Any CPU {CD3F13F1-8890-490A-BB47-9382E2131F5D}.Release|Any CPU.Build.0 = Release|Any CPU + {CD3F13F1-8890-490A-BB47-9382E2131F5D}.Release|x64.ActiveCfg = Release|Any CPU + {CD3F13F1-8890-490A-BB47-9382E2131F5D}.Release|x64.Build.0 = Release|Any CPU + {CD3F13F1-8890-490A-BB47-9382E2131F5D}.Release|x86.ActiveCfg = Release|Any CPU + {CD3F13F1-8890-490A-BB47-9382E2131F5D}.Release|x86.Build.0 = Release|Any CPU {D27C2C44-3AC4-0732-FF87-DD1697A9DF37}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {D27C2C44-3AC4-0732-FF87-DD1697A9DF37}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D27C2C44-3AC4-0732-FF87-DD1697A9DF37}.Debug|x64.ActiveCfg = Debug|Any CPU + {D27C2C44-3AC4-0732-FF87-DD1697A9DF37}.Debug|x64.Build.0 = Debug|Any CPU + {D27C2C44-3AC4-0732-FF87-DD1697A9DF37}.Debug|x86.ActiveCfg = Debug|Any CPU + {D27C2C44-3AC4-0732-FF87-DD1697A9DF37}.Debug|x86.Build.0 = Debug|Any CPU {D27C2C44-3AC4-0732-FF87-DD1697A9DF37}.Release|Any CPU.ActiveCfg = Release|Any CPU {D27C2C44-3AC4-0732-FF87-DD1697A9DF37}.Release|Any CPU.Build.0 = Release|Any CPU + {D27C2C44-3AC4-0732-FF87-DD1697A9DF37}.Release|x64.ActiveCfg = Release|Any CPU + {D27C2C44-3AC4-0732-FF87-DD1697A9DF37}.Release|x64.Build.0 = Release|Any CPU + {D27C2C44-3AC4-0732-FF87-DD1697A9DF37}.Release|x86.ActiveCfg = Release|Any CPU + {D27C2C44-3AC4-0732-FF87-DD1697A9DF37}.Release|x86.Build.0 = Release|Any CPU + {2F1A6B5E-C446-4A09-BABC-5C076E9DD89E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2F1A6B5E-C446-4A09-BABC-5C076E9DD89E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2F1A6B5E-C446-4A09-BABC-5C076E9DD89E}.Debug|x64.ActiveCfg = Debug|Any CPU + {2F1A6B5E-C446-4A09-BABC-5C076E9DD89E}.Debug|x64.Build.0 = Debug|Any CPU + {2F1A6B5E-C446-4A09-BABC-5C076E9DD89E}.Debug|x86.ActiveCfg = Debug|Any CPU + {2F1A6B5E-C446-4A09-BABC-5C076E9DD89E}.Debug|x86.Build.0 = Debug|Any CPU + {2F1A6B5E-C446-4A09-BABC-5C076E9DD89E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2F1A6B5E-C446-4A09-BABC-5C076E9DD89E}.Release|Any CPU.Build.0 = Release|Any CPU + {2F1A6B5E-C446-4A09-BABC-5C076E9DD89E}.Release|x64.ActiveCfg = Release|Any CPU + {2F1A6B5E-C446-4A09-BABC-5C076E9DD89E}.Release|x64.Build.0 = Release|Any CPU + {2F1A6B5E-C446-4A09-BABC-5C076E9DD89E}.Release|x86.ActiveCfg = Release|Any CPU + {2F1A6B5E-C446-4A09-BABC-5C076E9DD89E}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {2F1A6B5E-C446-4A09-BABC-5C076E9DD89E} = {827E0CD3-B72D-47B6-A68D-7590B98EB39B} + EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {60D53155-0C10-41E9-B797-FC68F4EDFF8A} EndGlobalSection diff --git a/tools/issue-labeler/src/IssueLabeler.Shared/IssueTriageContent.cs b/tools/issue-labeler/src/IssueLabeler.Shared/IssueTriageContent.cs index eca729c5c8a..d7c78aeeac9 100644 --- a/tools/issue-labeler/src/IssueLabeler.Shared/IssueTriageContent.cs +++ b/tools/issue-labeler/src/IssueLabeler.Shared/IssueTriageContent.cs @@ -10,6 +10,8 @@ public class IssueTriageContent public string? Body { get; set; } public string? Service { get; set; } public string? Category { get; set; } + public string? Server { get; set; } + public string? Tool { get; set; } public string? Author { get; set; } public string? Repository { get; set; } public DateTimeOffset? CreatedAt { get; set; } diff --git a/tools/issue-labeler/src/IssueLabelerService/Labelers/LabelerFactory.cs b/tools/issue-labeler/src/IssueLabelerService/Labelers/LabelerFactory.cs index 6316cd305db..cdea1c81544 100644 --- a/tools/issue-labeler/src/IssueLabelerService/Labelers/LabelerFactory.cs +++ b/tools/issue-labeler/src/IssueLabelerService/Labelers/LabelerFactory.cs @@ -13,14 +13,22 @@ public class LabelerFactory private ILogger _logger; private ILabelerLite _labeler; private TriageRag _ragService; + private McpTriageRag _mcpRagService; private BlobServiceClient _blobClient; - public LabelerFactory(ILogger logger, IModelHolderFactoryLite modelHolderFactory, ILabelerLite labeler, TriageRag ragService, BlobServiceClient blobClient) + public LabelerFactory( + ILogger logger, + IModelHolderFactoryLite modelHolderFactory, + ILabelerLite labeler, + TriageRag ragService, + McpTriageRag mcpRagService, + BlobServiceClient blobClient) { _logger = logger; _modelHolderFactory = modelHolderFactory; _labeler = labeler; _ragService = ragService; + _mcpRagService = mcpRagService; _blobClient = blobClient; } @@ -33,6 +41,8 @@ public ILabeler GetLabeler(RepositoryConfiguration config) => { case "OpenAI": return new OpenAiLabeler(_logger, config, _ragService, _blobClient); + case "McpOpenAI": + return new McpOpenAiLabeler(_logger, config, _mcpRagService, _blobClient); case "Legacy": return new LegacyLabeler(_logger, _modelHolderFactory, _labeler, config); default: diff --git a/tools/issue-labeler/src/IssueLabelerService/Labelers/Mcp/McpOpenAiLabeler.cs b/tools/issue-labeler/src/IssueLabelerService/Labelers/Mcp/McpOpenAiLabeler.cs new file mode 100644 index 00000000000..7eaff9290eb --- /dev/null +++ b/tools/issue-labeler/src/IssueLabelerService/Labelers/Mcp/McpOpenAiLabeler.cs @@ -0,0 +1,643 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System; +using System.Collections.Generic; +using System.Globalization; +using System.IO; +using System.Linq; +using System.Threading.Tasks; +using Azure.Storage.Blobs; +using IssueLabeler.Shared; +using IssueLabelerService; +using Microsoft.Extensions.Logging; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; + +namespace IssueLabelerService +{ + + public class McpOpenAiLabeler : ILabeler + { + private readonly ILogger _logger; + private readonly RepositoryConfiguration _config; + private readonly McpTriageRag _ragService; + private readonly BlobServiceClient _blobClient; + + public McpOpenAiLabeler( + ILogger logger, + RepositoryConfiguration config, + McpTriageRag ragService, + BlobServiceClient blobClient) + { + _logger = logger; + _config = config; + _ragService = ragService; + _blobClient = blobClient; + } + + public async Task> PredictLabels(IssuePayload issue) + { + var modelName = _config.LabelModelName; + + var searchContentResults = await GetSearchContentResults(issue); + + var allLabels = (await GetMcpLabelsAsync(issue.RepositoryName)).ToList(); + var serverLabels = allLabels + .Where(l => string.Equals(l.Type, "Server", StringComparison.OrdinalIgnoreCase)) + .Select(l => l.Name) + .Distinct(StringComparer.OrdinalIgnoreCase) + .ToList(); + + var toolLabels = allLabels + .Where(l => string.Equals(l.Type, "Tool", StringComparison.OrdinalIgnoreCase)) + .Select(l => l.Name) + .Distinct(StringComparer.OrdinalIgnoreCase) + .ToList(); + + if (!serverLabels.Any()) + { + _logger.LogWarning( + "No Server labels found for repository '{Repository}'. Skipping MCP labeling.", + issue.RepositoryName); + return new Dictionary(); + } + + if (!toolLabels.Any()) + { + _logger.LogWarning( + "No Tool labels found for repository '{Repository}'. Skipping MCP labeling.", + issue.RepositoryName); + return new Dictionary(); + } + + string printableContext = BuildPrintableContext(searchContentResults); + string serverLabelList = string.Join(", ", serverLabels); + string toolLabelList = string.Join(", ", toolLabels); + + string userPrompt = BuildUserPrompt( + issue, + serverLabelList, + toolLabelList, + printableContext); + + var jsonSchema = BuildJsonSchema(); + + // 5. Call OpenAI via TriageRag + var instructions = _config.LabelInstructions; // You can point this to an MCP-specific instruction string + string rawResult = await _ragService.SendMessageQnaAsync( + instructions, + userPrompt, + modelName, + contextBlock: null, + structure: jsonSchema); + + if (string.IsNullOrWhiteSpace(rawResult)) + { + _logger.LogInformation( + "OpenAI MCP labeler returned empty response for issue #{IssueNumber} in {Repository}.", + issue.IssueNumber, + issue.RepositoryName); + return new Dictionary(); + } + + // 6. Parse JSON and validate + JObject parsed; + try + { + parsed = JObject.Parse(rawResult); + } + catch (JsonException ex) + { + _logger.LogWarning( + ex, + "Failed to parse OpenAI MCP labeler JSON for issue #{IssueNumber} in {Repository}. Raw: {Raw}", + issue.IssueNumber, + issue.RepositoryName, + rawResult); + return new Dictionary(); + } + + var result = ExtractAndValidateLabels(issue, parsed, serverLabels, toolLabels); + + if (result.Count == 0) + { + _logger.LogInformation( + "MCP labeler produced no valid labels for issue #{IssueNumber} in {Repository}. Raw: {Raw}", + issue.IssueNumber, + issue.RepositoryName, + rawResult); + } + else + { + _logger.LogInformation( + "MCP labeler result for issue #{IssueNumber} in {Repository}: {Labels}", + issue.IssueNumber, + issue.RepositoryName, + string.Join(", ", result.Select(kv => $"{kv.Key}: {kv.Value}"))); + } + + return result; + } + + #region Label DTO + + private class McpLabel + { + public string Name { get; set; } + public string Type { get; set; } + } + + #endregion + + #region Labels + Context Retrieval + + private async Task> GetMcpLabelsAsync(string repositoryName) + { + var containerClient = _blobClient.GetBlobContainerClient("labels"); + var blobClient = containerClient.GetBlobClient(repositoryName); + + if (!await blobClient.ExistsAsync()) + { + throw new FileNotFoundException( + $"Label blob for repository '{repositoryName}' not found in 'labels' container."); + } + + var response = await blobClient.DownloadContentAsync(); + var json = response.Value.Content.ToString(); + + var labels = JsonConvert.DeserializeObject>(json); + + if (labels == null) + { + throw new InvalidOperationException( + $"Failed to deserialize MCP labels for repository '{repositoryName}'."); + } + + return labels; + } + + private async Task> GetSearchContentResults(IssuePayload issue) + { + var indexName = _config.IndexName; + var semanticName = _config.SemanticName; + var top = int.Parse(_config.SourceCount, CultureInfo.InvariantCulture); + var scoreThreshold = double.Parse(_config.ScoreThreshold, CultureInfo.InvariantCulture); + var fieldName = _config.IssueIndexFieldName; + + var query = $"Title: {issue.Title}\n\n{issue.Body ?? string.Empty}"; + _logger.LogInformation( + "Searching MCP content index '{IndexName}' with query: {Query}", + indexName, + query); + + var searchContentResults = await _ragService.SearchMcpIssuesAsync( + indexName, + semanticName, + fieldName, + query, + topK: top, + scoreThreshold: scoreThreshold, + cleanQuery: true, + onlyLabeledIssues: true, + excludeIssueId: issue.IssueNumber.ToString()); + + if (searchContentResults.Count == 0) + { + throw new InvalidDataException( + $"Not enough relevant MCP sources found for repository '{issue.RepositoryName}' issue #{issue.IssueNumber}."); + } + + _logger.LogInformation( + "Found {Count} MCP issues with score >= {Threshold} for issue #{IssueNumber} in {Repository}.", + searchContentResults.Count, + scoreThreshold, + issue.IssueNumber, + issue.RepositoryName); + + return searchContentResults; + } + + private static string BuildPrintableContext(List searchContentResults) + { + return string.Join("\n\n", searchContentResults.Select(sc => + $"Title: {sc.Title}\n" + + $"Description: {sc.Chunk}\n" + + $"Server: {sc.Server ?? "Unlabeled"}\n" + + $"Tool: {sc.Tool ?? "Unlabeled"}\n" + + $"URL: {sc.Url}\n" + + $"Score: {sc.Score:F2}")); + } + + #endregion + + #region Helper Methods + + /// + /// Extract tags like [ONBOARD], [CONSOLIDATED], [BUG] from issue title + /// + private string ExtractTags(string title) + { + var tags = new List(); + var tagPattern = new System.Text.RegularExpressions.Regex(@"\[([A-Z]+)\]"); + var matches = tagPattern.Matches(title); + + foreach (System.Text.RegularExpressions.Match match in matches) + { + tags.Add(match.Groups[1].Value); + } + + return tags.Any() ? string.Join(", ", tags) : "None"; + } + + #endregion + + #region Prompt + Schema + + private string BuildUserPrompt( + IssuePayload issue, + string serverLabelList, + string toolLabelList, + string printableContext) + { + var tags = ExtractTags(issue.Title); + var tagHint = tags != "None" ? $@" + +DETECTED TAGS: {tags} +Tag-Based Hints: +- [ONBOARD]: Issue requesting a NEW tool/service → Use the SPECIFIC tool label being requested (not tools-Core) +- [CONSOLIDATED]: Multiple issues combined → Focus on the PRIMARY failure point +- [BUG]: Bug in existing functionality → Use the tool where the bug occurs +- [BUGBASH]: Testing/QA issue → Analyze the actual failure, not the test process +" : string.Empty; + + return $@" +You are an assistant that classifies GitHub issues for the MCP (Model Context Protocol) repository. + +CRITICAL REQUIREMENTS: +- You MUST provide a Server label for EVERY issue. +- Tool label requirements depend on which server: + * For server-Azure.Mcp: You MUST also provide a Tool label (mandatory) + * For other servers (Fabric, PowerBI, Template): Tool label is OPTIONAL +- If the context shows some issues as ""Unlabeled"", ignore that - those are historical data before labeling. +{tagHint} +Your task: +1. Choose a single **Server** label for the issue. + - It MUST be exactly one of the following server labels: + {serverLabelList} + - This is MANDATORY. Every issue requires a Server label. + +2. Choose a **Tool** label for the issue (requirements vary by server): + - Available tool labels: + {toolLabelList} + + For server-Azure.Mcp issues: + - Tool label is MANDATORY + - Secondary label rules for server-azure-mcp: + - Use a tools-* label ONLY when the issue is about a specific MCP tool + (e.g. Storage, CosmosDB, EventGrid). + - Use remote-mcp label when the issue is about: + - remote MCP routing + - proxying + - topology + - remote clusters + - authentication or networking specific to remote MCP + - remote-mcp is NOT a tool. It replaces the tool label when applicable. + - If the issue does not clearly relate to any specific tool, use the literal value ""UNKNOWN"" + - Providing Tool = ""UNKNOWN"" is acceptable when truly uncertain, but prefer selecting a real tool when possible + + **For other servers (Fabric, PowerBI, Template):** + - Tool label is OPTIONAL and typically should be OMITTED + - These servers currently have no tool taxonomy defined + - Only provide a Tool label if the issue explicitly involves an Azure tool (rare edge case) + - In most cases, set Tool to null or omit it from the response + +CRITICAL CLASSIFICATION RULES: + +**Rule 1: Ignore Tool Names Used as Examples** +- If an issue says ""like KeyVault"" or ""e.g., Storage changes"", these are EXAMPLES, not the actual component. +- Focus on what is ACTUALLY broken or being requested, not what is mentioned for illustration. +- Example: ""Enable MCP to query service updates (e.g., Key Vault changes)"" → tools-Core (new feature), NOT tools-KeyVault + +**Rule 2: Understanding tools-Core - The Layer Principle** + +Think of the MCP system as having 3 layers: +1. **Infrastructure Layer** (tools-Core): Server, protocol, routing, packaging +2. **Tool Layer** (specific tools): Individual tool implementations +3. **External Layer**: Azure services, user code, network + +Use tools-Core when the problem is in **Layer 1** (infrastructure): +- Server won't start or crashes (before any tool runs) +- Installation/packaging problems (npx, Docker, extensions, packages) +- Protocol/transport issues (stdio, handshake, capability negotiation) +- Configuration/environment affecting ALL tools (env vars, config files, proxy settings) +- Server-wide settings: namespace mode, consolidated mode configuration +- Framework issues: telemetry framework, server-wide authentication setup + +Use specific tool label when the problem is in **Layer 2** (tool execution): +- The tool WAS invoked but produced wrong results +- Tool-specific authentication, permissions, or API errors +- Tool-specific timeout, data parsing, or business logic errors +- Tool not being invoked when it SHOULD be (tool's own routing/registration issue) + +KEY DISTINCTION - ""Prompt doesn't trigger tool X"" +This is AMBIGUOUS - context matters: +- If issue mentions """"[CONSOLIDATED]"""" or """"consolidated mode"""" → likely tools-Core (mode configuration) +- If issue is about ONE specific tool in normal mode → likely that specific tool (tool registration/implementation) +- If issue says """"prompt triggers WRONG tool"""" or """"uses CLI instead of MCP"""" → tools-Core (server routing) +- Default: Assume it's the TOOL's issue unless clear evidence of server-level routing problem + +**Rule 2a: Scope Test - Infrastructure vs Tool** +Ask: ""Would this affect MULTIPLE tools or just ONE?"" +- Affects ALL tools → tools-Core (infrastructure scope) +- Affects ONE tool → specific tool (tool scope) +- Ambiguous → Check error message: generic system error → Core, specific API/data error → tool + +Examples applying the scope test: +- ""Proxy timeout"" → ALL tools affected → tools-Core +- ""KeyVault invalid credential"" → ONE tool → tools-KeyVault +- ""Environment variable missing"" → ALL tools → tools-Core +- ""Kusto timeout"" → ONE tool → tools-Kusto + +**Rule 3: Onboarding and Feature Requests** +For requests to ADD new functionality: +- If requesting a NEW tool/service → Use the tool label for that service (even if not yet implemented) +- If requesting infrastructure feature → tools-Core +- Look for tags: [ONBOARD] usually means new tool → use specific tool label + +Reasoning: We label based on WHAT the issue is ABOUT, not where code changes will go. +An onboarding request for ""Azure SQL"" is ABOUT SQL, so use tools-SQL label. + +**Rule 4: When Multiple Tools Mentioned** +- Identify the PRIMARY failing component or requested feature +- Ignore tools mentioned as examples, comparisons, or in passing +- Example: ""Cosmos insert fails after Storage download"" → tools-CosmosDb (where failure occurs) + +**AUTHORITATIVE CLASSIFICATION ANCHORS (FEW-SHOT):** + +These examples illustrate boundary cases. Do NOT assume new issues match them unless the same reasoning applies. + +Example A: +Title: ""[CONSOLIDATED] Some get_azure_best_practices prompts do not trigger the corresponding tool"" +Description: ""The prompt resolves, but the expected tool is not invoked."" + +Output: +{{ + ""Server"": ""server-Azure.Mcp"", + ""Tool"": ""tools-Core"", + ""ServerConfidenceScore"": 0.95, + ""ToolConfidenceScore"": 0.9 +}} + +Example B: +Title: ""Azure MCP on Claude Desktop: Unable to get list of VMs from the Azure Tenant"" +Description: ""The request relies on Azure CLI authentication and az commands."" + +Output: +{{ + ""Server"": ""server-Azure.Mcp"", + ""Tool"": ""tools-AzCLI"", + ""ServerConfidenceScore"": 0.95, + ""ToolConfidenceScore"": 0.9 +}} + +Example C: +Title: ""subscription list tools generate responses that are too large"" +Description: ""Issue occurs while listing subscription inventory."" + +Output: +{{ + ""Server"": ""server-Azure.Mcp"", + ""Tool"": ""tools-ARM"", + ""ServerConfidenceScore"": 0.9, + ""ToolConfidenceScore"": 0.85 +}} + +**CONCEPTUAL EXAMPLES (FOR UNDERSTANDING ONLY — NOT EXHAUSTIVE):** + +The following examples are illustrative abstractions and do not correspond to any specific real issue. + +Example 1: Authentication failure scoped to a single tool +- Issue: ""A specific resource-oriented tool fails authentication when invoking cloud credentials."" +- WRONG: tools-Auth (too generic) +- RIGHT: The specific tool involved (authentication failed during that tool’s execution) + +Principle: +Authentication errors belong to the tool if they occur after the tool is invoked, even if shared credentials are used. + +Example 2: Failure in a named internal service used by the server +- Issue: ""The server terminates during startup due to an initialization failure in an internal service."" +- WRONG: tools-Core (appears infrastructural at first glance) +- RIGHT: The internal service’s tool label + +Principle: +If a failure originates in a specific internal service or subsystem, label that service rather than Core. + +Example 3: Server startup failure with no tool involvement +- Issue: ""The server fails to start due to a runtime or configuration error before any tools are invoked."" +- WRONG: Any specific tool +- RIGHT: tools-Core + +Principle: +When no tool execution occurs, the issue belongs to infrastructure (Core). + +Example 4: Cross-cutting failure affecting all tools +- Issue: ""Every tool invocation fails due to a shared environmental or connectivity issue."" +- WRONG: Any single tool +- RIGHT: tools-Core + +Principle: +Failures that impact multiple or all tools simultaneously indicate an infrastructure-level problem. + +Guidelines: +- **Prioritize the retrieved similar issues** - they show real examples of how issues were classified +- Use the issue Title and Description as the primary signal +- Apply common sense reasoning about where the problem actually occurs +- If similar issues show ""Unlabeled"" for Server/Tool, ignore that - you must still provide labels +- Prefer the most specific label that matches the problem domain +- If multiple tools could apply, pick the one most central to the error or feature request +- Look at error messages, stack traces, and file paths - they reveal where the problem is + +Confidence Scoring: +- Set ServerConfidenceScore based on how certain you are about the Server label (0.0 to 1.0). +- Set ToolConfidenceScore based on how certain you are about the Tool label (0.0 to 1.0). +- Use ""UNKNOWN"" for Tool only if confidence would be extremely low (<0.6). + +Return: +- A JSON object with exactly these fields: + - ""Server"": the chosen server label (string, REQUIRED) + - ""Tool"": the chosen tool label or ""UNKNOWN"" (string, REQUIRED for Azure MCP, OPTIONAL for others) + - ""ServerConfidenceScore"": a number between 0 and 1 (REQUIRED) + - ""ToolConfidenceScore"": a number between 0 and 1 (REQUIRED if Tool is provided, otherwise optional) + +Notes: +- For Azure MCP issues, always include Tool (even if ""UNKNOWN"") +- For other servers, you may omit Tool or set it to null if not applicable + +Do NOT include any extra fields or text outside of the JSON. + +Issue to classify: +Title: +{issue.Title} + +Description: +{issue.Body} + +Retrieved similar issues and context (note: ""Unlabeled"" entries are historical issues awaiting classification): +{printableContext} +"; + } + + private static BinaryData BuildJsonSchema() + { + var schemaJson = @" +{ + ""type"": ""object"", + ""properties"": { + ""Server"": { + ""type"": ""string"" + }, + ""Tool"": { + ""type"": [""string"", ""null""] + }, + ""ServerConfidenceScore"": { + ""type"": ""number"" + }, + ""ToolConfidenceScore"": { + ""type"": [""number"", ""null""] + } + }, + ""required"": [ ""Server"", ""Tool"" ], + ""additionalProperties"": false +} +"; + return BinaryData.FromString(schemaJson); + } + + #endregion + + #region Validation + + private Dictionary ExtractAndValidateLabels( + IssuePayload issue, + JObject parsed, + List serverLabels, + List toolLabels) + { + var result = new Dictionary(StringComparer.OrdinalIgnoreCase); + + string server = parsed.Value("Server") ?? string.Empty; + string tool = parsed.Value("Tool") ?? string.Empty; + + double serverScore = parsed.Value("ServerConfidenceScore") ?? 0.0; + double toolScore = parsed.Value("ToolConfidenceScore") ?? 0.0; + + var confidenceThreshold = double.Parse( + _config.ConfidenceThreshold, + CultureInfo.InvariantCulture); + + // 1. Validate Server + if (string.IsNullOrEmpty(server)) + { + _logger.LogWarning( + "MCP labeler returned empty Server for issue #{IssueNumber} in {Repository}.", + issue.IssueNumber, + issue.RepositoryName); + return new Dictionary(); + } + + if (!serverLabels.Contains(server, StringComparer.OrdinalIgnoreCase)) + { + _logger.LogWarning( + "MCP labeler returned invalid Server '{Server}' for issue #{IssueNumber} in {Repository}. Valid labels: {ValidLabels}", + server, + issue.IssueNumber, + issue.RepositoryName, + string.Join(", ", serverLabels)); + return new Dictionary(); + } + + if (serverScore < confidenceThreshold) + { + _logger.LogInformation( + "MCP labeler ServerConfidenceScore below threshold for issue #{IssueNumber} in {Repository}: {Score:F2} < {Threshold}. Skipping labeling.", + issue.IssueNumber, + issue.RepositoryName, + serverScore, + confidenceThreshold); + return new Dictionary(); + } + + // 2. Validate Tool + bool isAzureMcp = server.Equals("server-Azure.Mcp", StringComparison.OrdinalIgnoreCase); + + if (string.IsNullOrEmpty(tool)) + { + // if (isAzureMcp) + // { + // _logger.LogWarning( + // "MCP labeler returned empty Tool for Azure MCP issue #{IssueNumber} in {Repository}. Tool is required for Azure MCP.", + // issue.IssueNumber, + // issue.RepositoryName); + // return new Dictionary(); + // } + // else + // { + _logger.LogInformation( + "MCP labeler returned no Tool for issue #{IssueNumber} in {Repository}. This is acceptable for non-Azure MCP servers. Applying Server label only.", + issue.IssueNumber, + issue.RepositoryName); + result["Server"] = server; + return result; + //} + } + + bool toolIsUnknown = string.Equals(tool, "UNKNOWN", StringComparison.OrdinalIgnoreCase); + + if (!toolIsUnknown && !toolLabels.Contains(tool, StringComparer.OrdinalIgnoreCase)) + { + _logger.LogWarning( + "MCP labeler returned invalid Tool '{Tool}' for issue #{IssueNumber} in {Repository}. Valid labels: {ValidLabels}. Server label will still be applied.", + tool, + issue.IssueNumber, + issue.RepositoryName, + string.Join(", ", toolLabels.Take(10)) + (toolLabels.Count > 10 ? "..." : "")); + // Treat invalid tool as UNKNOWN - still apply Server label + toolIsUnknown = true; + } + + if (!toolIsUnknown && toolScore < confidenceThreshold) + { + _logger.LogInformation( + "MCP labeler ToolConfidenceScore below threshold for issue #{IssueNumber} in {Repository}: {Score:F2} < {Threshold}. Server label will still be applied.", + issue.IssueNumber, + issue.RepositoryName, + toolScore, + confidenceThreshold); + // Treat low-confidence tool as UNKNOWN - still apply Server label + toolIsUnknown = true; + } + + // 3. Build final result - only include Tool if it's not UNKNOWN + result["Server"] = server; + + if (!toolIsUnknown) + { + result["Tool"] = tool; + } + + _logger.LogInformation( + "MCP labeler predictions for issue #{IssueNumber}: Server='{Server}' ({ServerScore:F2}), Tool='{Tool}' ({ToolScore:F2})", + issue.IssueNumber, + server, + serverScore, + toolIsUnknown ? "UNKNOWN" : tool, + toolScore); + + return result; + } + + #endregion + } +} + \ No newline at end of file diff --git a/tools/issue-labeler/src/IssueLabelerService/Labelers/Mcp/McpTriageRag.cs b/tools/issue-labeler/src/IssueLabelerService/Labelers/Mcp/McpTriageRag.cs new file mode 100644 index 00000000000..fdd21d80360 --- /dev/null +++ b/tools/issue-labeler/src/IssueLabelerService/Labelers/Mcp/McpTriageRag.cs @@ -0,0 +1,159 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using Azure.AI.OpenAI; +using Azure.Search.Documents.Indexes; +using IssueLabelerService; +using Microsoft.Extensions.Logging; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text.RegularExpressions; +using System.Threading.Tasks; + +namespace IssueLabelerService +{ + /// + /// MCP-specific RAG service with optimizations for MCP issue classification + /// + public class McpTriageRag : TriageRag + { + private readonly ILogger _logger; + + public McpTriageRag( + ILogger logger, + AzureOpenAIClient openAiClient, + SearchIndexClient searchIndexClient) + : base(logger, openAiClient, searchIndexClient) + { + _logger = logger; + } + + /// + /// Search for similar MCP issues with query preprocessing and automatic filtering + /// + public async Task> SearchMcpIssuesAsync( + string indexName, + string semanticConfigName, + string fieldName, + string query, + int topK = 10, + double scoreThreshold = 0.8, + bool cleanQuery = true, + bool onlyLabeledIssues = true, + string excludeIssueId = null) + { + string filter = null; + var processedQuery = cleanQuery ? CleanToolMentions(query) : query; + + if (cleanQuery && processedQuery != query) + { + _logger.LogDebug("Original: {Original}", query.Substring(0, Math.Min(100, query.Length))); + _logger.LogDebug("Cleaned: {Cleaned}", processedQuery.Substring(0, Math.Min(100, processedQuery.Length))); + } + if (onlyLabeledIssues) + { + filter = "DocumentType eq 'Issue' and Server ne null"; + + // Exclude the current issue being predicted to prevent data leakage + if (!string.IsNullOrEmpty(excludeIssueId)) + { + filter += $" and Id ne '{excludeIssueId}'"; + _logger.LogDebug("Excluding issue {IssueId} from search results", excludeIssueId); + } + + _logger.LogDebug("Retrieving labeled MCP issues (Server label required, Tool optional)"); + } + + var results = await IssueTriageContentIndexAsync( + indexName, + semanticConfigName, + fieldName, + processedQuery, + topK, + scoreThreshold, + filter: filter); + + _logger.LogInformation( + "Found {Count} MCP issues with score >= {Threshold}", + results.Count, + scoreThreshold); + + return results; + } + + /// + /// Remove tool name mentions that appear as examples + /// + private string CleanToolMentions(string query) + { + var cleaned = Regex.Replace(query, @"\be\.g\.?,?\s+\w+", "", RegexOptions.IgnoreCase); + cleaned = Regex.Replace(cleaned, @"\b(like|such\s+as)\s+\w+", "", RegexOptions.IgnoreCase); + cleaned = Regex.Replace(cleaned, @"\s*\(e\.g\.?,?\s+[^)]+\)", "", RegexOptions.IgnoreCase); + cleaned = Regex.Replace(cleaned, @"\b(for\s+example|for\s+instance),?\s+\w+", "", RegexOptions.IgnoreCase); + cleaned = Regex.Replace(cleaned, @"\s{2,}", " ").Trim(); + return cleaned; + } + + /// + /// Get MCP-specific search statistics for debugging + /// + public async Task GetSearchStatsAsync( + string indexName, + string semanticConfigName, + string fieldName, + string query, + int topK = 50) + { + var stats = new McpSearchStats(); + + // Get raw results without filtering + var allResults = await AzureSearchQueryAsync( + indexName, + semanticConfigName, + fieldName, + query, + topK, + filter: null); + + stats.TotalResults = allResults.Count; + + foreach (var (issue, score) in allResults) + { + if (issue.Server != null && issue.Tool != null) + stats.LabeledIssues++; + else + stats.UnlabeledIssues++; + + if (score >= 0.8) + stats.HighScoreResults++; + + stats.Scores.Add(score); + } + + return stats; + } + } + + /// + /// Statistics about MCP search results for debugging and optimization + /// + public class McpSearchStats + { + public int TotalResults { get; set; } + public int LabeledIssues { get; set; } + public int UnlabeledIssues { get; set; } + public int HighScoreResults { get; set; } + public List Scores { get; set; } = new List(); + + public double AverageScore => Scores.Count > 0 ? Scores.Average() : 0; + public double MaxScore => Scores.Count > 0 ? Scores.Max() : 0; + public double MinScore => Scores.Count > 0 ? Scores.Min() : 0; + + public override string ToString() + { + return $"Total: {TotalResults}, Labeled: {LabeledIssues}, Unlabeled: {UnlabeledIssues}, " + + $"High Score (>=0.8): {HighScoreResults}, Avg Score: {AverageScore:F3}"; + } + } +} diff --git a/tools/issue-labeler/src/IssueLabelerService/Program.cs b/tools/issue-labeler/src/IssueLabelerService/Program.cs index 2c090ce1633..f76d291a5c8 100644 --- a/tools/issue-labeler/src/IssueLabelerService/Program.cs +++ b/tools/issue-labeler/src/IssueLabelerService/Program.cs @@ -30,6 +30,8 @@ { options.Connect(configEndpoint, credential); }); + // Add local settings AFTER Azure App Config so they override for local testing + builder.AddConfiguration(functionConfig); var configRoot = builder.Build(); @@ -72,6 +74,7 @@ }); services.AddSingleton(); + services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); diff --git a/tools/issue-labeler/src/IssueLabelerService/TraigeRag.cs b/tools/issue-labeler/src/IssueLabelerService/TraigeRag.cs index 0c6c38bd7af..350717affdf 100644 --- a/tools/issue-labeler/src/IssueLabelerService/TraigeRag.cs +++ b/tools/issue-labeler/src/IssueLabelerService/TraigeRag.cs @@ -33,7 +33,7 @@ public async Task> IssueTriageContentIndexAsync( string query, int count, double scoreThreshold, - Dictionary labels = null) + string filter = null) { var searchResults = await AzureSearchQueryAsync( @@ -41,7 +41,8 @@ public async Task> IssueTriageContentIndexAsync( semanticConfigName, field, query, - count + count, + filter ); var filteredIssues = new List(); diff --git a/tools/issue-labeler/src/Mcp.Evaluator/Evaluation/McpLabelerEvaluator.cs b/tools/issue-labeler/src/Mcp.Evaluator/Evaluation/McpLabelerEvaluator.cs new file mode 100644 index 00000000000..f6daeb9f206 --- /dev/null +++ b/tools/issue-labeler/src/Mcp.Evaluator/Evaluation/McpLabelerEvaluator.cs @@ -0,0 +1,226 @@ +using IssueLabeler.Shared; +using IssueLabelerService; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Logging; +using Moq; + +namespace Mcp.Evaluator.Evaluation +{ + /// + /// Test harness for evaluating MCP labeler accuracy using ground truth dataset + /// + public class McpLabelerEvaluator + { + private readonly ILabeler _labeler; + private readonly ILogger _logger; + + public McpLabelerEvaluator(ILabeler labeler, ILogger logger) + { + _labeler = labeler; + _logger = logger; + } + + /// + /// Evaluate the labeler against the full ground truth dataset + /// + public async Task<(List Results, McpEvaluationMetrics Metrics)> EvaluateAsync( + List testCases, + bool stopOnFirstError = false) + { + var results = new List(); + + _logger.LogInformation($"Starting evaluation of {testCases.Count} test cases..."); + + foreach (var testCase in testCases) + { + _logger.LogInformation("Testing issue {IssueNumber}: {Title}", testCase.IssueNumber, testCase.Title); + + var result = await EvaluateSingleAsync(testCase); + results.Add(result); + + if (result.Error != null) + { + _logger.LogError($" ERROR: {result.Error.Message}"); + if (stopOnFirstError) + { + break; + } + } + else + { + _logger.LogInformation($" Server: {result.PredictedServerLabel ?? "NONE"} (Expected: {testCase.ExpectedServerLabel}) - {(result.ServerCorrect ? "True" : "False")}"); + _logger.LogInformation($" Tool: {result.PredictedToolLabel ?? "NONE"} (Expected: {testCase.ExpectedToolLabel}) - {(result.ToolCorrect ? "True" : "False")}"); + } + + _logger.LogInformation(""); + } + + var metrics = CalculateMetrics(results); + _logger.LogInformation(metrics.ToString()); + + return (results, metrics); + } + + /// + /// Evaluate a single test case + /// + private async Task EvaluateSingleAsync(McpTestCase testCase) + { + var result = new McpPredictionResult + { + TestCase = testCase + }; + + try + { + var issuePayload = testCase.ToIssuePayload(); + var predictions = await _labeler.PredictLabels(issuePayload); + + // Extract predicted labels + result.PredictedServerLabel = predictions.ContainsKey("Server") ? predictions["Server"] : null; + result.PredictedToolLabel = predictions.ContainsKey("Tool") ? predictions["Tool"] : null; + + // Check correctness + result.ServerCorrect = CheckLabelMatch( + result.PredictedServerLabel, + testCase.ExpectedServerLabel); + + result.ToolCorrect = CheckLabelMatch( + result.PredictedToolLabel, + testCase.ExpectedToolLabel); + + } + catch (Exception ex) + { + result.Error = ex; + } + + return result; + } + + /// + /// Check if predicted label matches expected label(s) + /// Supports comma-separated expected labels for partial matching + /// + private bool CheckLabelMatch(string predictedLabel, string expectedLabel) + { + if (predictedLabel == null || expectedLabel == null) + return predictedLabel == expectedLabel; + + // Split expected label by comma in case of multiple valid labels + var expectedLabels = expectedLabel + .Split(',') + .Select(l => l.Trim()) + .Where(l => !string.IsNullOrEmpty(l)) + .ToList(); + + // Check if predicted matches any of the expected labels + return expectedLabels.Any(expected => + string.Equals(predictedLabel, expected, StringComparison.OrdinalIgnoreCase)); + } + + /// + /// Calculate aggregated metrics from results + /// + private McpEvaluationMetrics CalculateMetrics(List results) + { + var metrics = new McpEvaluationMetrics + { + TotalCases = results.Count, + SuccessfulPredictions = results.Count(r => r.Error == null), + FailedPredictions = results.Count(r => r.Error != null) + }; + + var successfulResults = results.Where(r => r.Error == null).ToList(); + + metrics.ServerCorrect = successfulResults.Count(r => r.ServerCorrect); + metrics.ServerIncorrect = successfulResults.Count(r => !r.ServerCorrect && r.PredictedServerLabel != null); + metrics.ServerMissing = successfulResults.Count(r => r.PredictedServerLabel == null); + + metrics.ToolCorrect = successfulResults.Count(r => r.ToolCorrect); + metrics.ToolIncorrect = successfulResults.Count(r => !r.ToolCorrect && r.PredictedToolLabel != null); + metrics.ToolMissing = successfulResults.Count(r => r.PredictedToolLabel == null); + + metrics.BothCorrect = successfulResults.Count(r => r.BothCorrect); + + return metrics; + } + + /// + /// Generate a detailed report of failures + /// + public string GenerateFailureReport(List results) + { + var report = new System.Text.StringBuilder(); + report.AppendLine("=== Failure Analysis ===\n"); + + var failures = results.Where(r => r.Error == null && !r.BothCorrect).ToList(); + + if (failures.Count == 0) + { + report.AppendLine("No failures! All predictions were correct."); + return report.ToString(); + } + + report.AppendLine($"Total Failures: {failures.Count}\n"); + + // Server label failures + var serverFailures = failures.Where(r => !r.ServerCorrect).ToList(); + if (serverFailures.Any()) + { + report.AppendLine($"Server Label Failures: {serverFailures.Count}"); + foreach (var f in serverFailures) + { + report.AppendLine($" #{f.TestCase.IssueNumber}: {f.TestCase.Title}"); + report.AppendLine($" Expected: {f.TestCase.ExpectedServerLabel}"); + report.AppendLine($" Predicted: {f.PredictedServerLabel ?? "NONE"}"); + report.AppendLine(); + } + } + + // Tool label failures + var toolFailures = failures.Where(r => !r.ToolCorrect).ToList(); + if (toolFailures.Any()) + { + report.AppendLine($"Tool Label Failures: {toolFailures.Count}"); + foreach (var f in toolFailures) + { + report.AppendLine($" #{f.TestCase.IssueNumber}: {f.TestCase.Title}"); + report.AppendLine($" Expected: {f.TestCase.ExpectedToolLabel}"); + report.AppendLine($" Predicted: {f.PredictedToolLabel ?? "NONE"}"); + report.AppendLine(); + } + } + + return report.ToString(); + } + + /// + /// Export results to CSV for further analysis + /// + public void ExportToCsv(List results, string filePath) + { + using var writer = new StreamWriter(filePath); + + // Header + writer.WriteLine("IssueNumber,Title,ExpectedServer,PredictedServer,ServerCorrect,ExpectedTool,PredictedTool,ToolCorrect,BothCorrect,Error"); + + // Data rows + foreach (var r in results) + { + writer.WriteLine($"{r.TestCase.IssueNumber}," + + $"\"{r.TestCase.Title}\"," + + $"{r.TestCase.ExpectedServerLabel}," + + $"{r.PredictedServerLabel ?? "NONE"}," + + $"{r.ServerCorrect}," + + $"{r.TestCase.ExpectedToolLabel}," + + $"{r.PredictedToolLabel ?? "NONE"}," + + $"{r.ToolCorrect}," + + $"{r.BothCorrect}," + + $"\"{r.Error?.Message ?? ""}\""); + } + + _logger.LogInformation($"Results exported to: {filePath}"); + } + } +} diff --git a/tools/issue-labeler/src/Mcp.Evaluator/Evaluation/McpTestModels.cs b/tools/issue-labeler/src/Mcp.Evaluator/Evaluation/McpTestModels.cs new file mode 100644 index 00000000000..96105b7e0fc --- /dev/null +++ b/tools/issue-labeler/src/Mcp.Evaluator/Evaluation/McpTestModels.cs @@ -0,0 +1,94 @@ +using IssueLabeler.Shared; + +namespace Mcp.Evaluator.Evaluation +{ + /// + /// Represents a test case with ground truth labels for evaluation + /// + public class McpTestCase + { + public int IssueNumber { get; set; } + public string Title { get; set; } = string.Empty; + public string Body { get; set; } = string.Empty; + public string ExpectedServerLabel { get; set; } = string.Empty; + public string ExpectedToolLabel { get; set; } = string.Empty; + public string? Notes { get; set; } + + public IssuePayload ToIssuePayload() + { + return new IssuePayload + { + IssueNumber = IssueNumber, + Title = Title, + Body = Body, + IssueUserLogin = "testuser", + RepositoryName = "mcp", + RepositoryOwnerName = "microsoft" + }; + } + } + + /// + /// Results from evaluating a single test case + /// + public class McpPredictionResult + { + public McpTestCase TestCase { get; set; } = null!; + public string? PredictedServerLabel { get; set; } + public string? PredictedToolLabel { get; set; } + public bool ServerCorrect { get; set; } + public bool ToolCorrect { get; set; } + public bool BothCorrect => ServerCorrect && ToolCorrect; + public double? ServerConfidence { get; set; } + public double? ToolConfidence { get; set; } + public Exception? Error { get; set; } + } + + /// + /// Aggregated metrics from a test run + /// + public class McpEvaluationMetrics + { + public int TotalCases { get; set; } + public int SuccessfulPredictions { get; set; } + public int FailedPredictions { get; set; } + + public int ServerCorrect { get; set; } + public int ServerIncorrect { get; set; } + public int ServerMissing { get; set; } + + public int ToolCorrect { get; set; } + public int ToolIncorrect { get; set; } + public int ToolMissing { get; set; } + + public int BothCorrect { get; set; } + + public double ServerAccuracy => TotalCases > 0 ? (double)ServerCorrect / TotalCases : 0; + public double ToolAccuracy => TotalCases > 0 ? (double)ToolCorrect / TotalCases : 0; + public double CombinedAccuracy => TotalCases > 0 ? (double)BothCorrect / TotalCases : 0; + public double SuccessRate => TotalCases > 0 ? (double)SuccessfulPredictions / TotalCases : 0; + + public override string ToString() + { + return $@" +=== MCP Labeler Evaluation Metrics === +Total Test Cases: {TotalCases} +Successful Predictions: {SuccessfulPredictions} ({SuccessRate:P2}) +Failed Predictions: {FailedPredictions} + +Server Label Metrics: + Correct: {ServerCorrect} ({ServerAccuracy:P2}) + Incorrect: {ServerIncorrect} + Missing: {ServerMissing} + +Tool Label Metrics: + Correct: {ToolCorrect} ({ToolAccuracy:P2}) + Incorrect: {ToolIncorrect} + Missing: {ToolMissing} + +Combined Accuracy: + Both Correct: {BothCorrect} ({CombinedAccuracy:P2}) +"; + } + } +} diff --git a/tools/issue-labeler/src/Mcp.Evaluator/Mcp.Evaluator.csproj b/tools/issue-labeler/src/Mcp.Evaluator/Mcp.Evaluator.csproj new file mode 100644 index 00000000000..2886a7d34cb --- /dev/null +++ b/tools/issue-labeler/src/Mcp.Evaluator/Mcp.Evaluator.csproj @@ -0,0 +1,38 @@ + + + + net8.0 + Exe + enable + enable + + + + + + + + + + + + + + + + + + + + + + + + PreserveNewest + + + PreserveNewest + + + + diff --git a/tools/issue-labeler/src/Mcp.Evaluator/McpLabelerTool.cs b/tools/issue-labeler/src/Mcp.Evaluator/McpLabelerTool.cs new file mode 100644 index 00000000000..c28a02bde18 --- /dev/null +++ b/tools/issue-labeler/src/Mcp.Evaluator/McpLabelerTool.cs @@ -0,0 +1,283 @@ +using IssueLabeler.Shared; +using IssueLabelerService; +using Mcp.Evaluator.Evaluation; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Logging; +using Azure; +using Azure.Search.Documents; +using Azure.Search.Documents.Indexes; +using Azure.Search.Documents.Models; +using Azure.Identity; +using Azure.AI.OpenAI; +using Azure.Storage.Blobs; +using System.Text.Json; +using Octokit; + +/// +/// Standalone console application for MCP labeler - supports prediction and evaluation modes +/// Usage: +/// dotnet run -- --issue=101,1422 # Predict labels for specific issues +/// dotnet run # Evaluate accuracy on real_mcp_issues.json +/// dotnet run -- --extract-real # Extract labeled issues from Azure Search +/// +class Program +{ + static async Task Main(string[] args) + { + Console.WriteLine("=== MCP Labeler Accuracy Evaluation ===\n"); + + var configuration = new ConfigurationBuilder() + .SetBasePath(Directory.GetCurrentDirectory()) + .AddJsonFile("appsettings.json", optional: true) + .AddJsonFile("local.settings.json", optional: true) + .AddEnvironmentVariables() + .Build(); + + using var loggerFactory = LoggerFactory.Create(builder => + { + builder.AddConsole(); + builder.SetMinimumLevel(LogLevel.Information); + }); + + var logger = loggerFactory.CreateLogger(); + + var runReal = args.Contains("--real"); + var extractReal = args.Contains("--extract-real"); + var issueNumbers = args.Where(issue => issue.StartsWith("--issue=")) + .SelectMany(issue => issue.Split('=')[1].Split(',')) + .Select(issue => int.Parse(issue.Trim())) + .ToList(); + var csvOutput = args.FirstOrDefault(a => a.StartsWith("--output="))?.Split('=')[1] + ?? "mcp_evaluation_results.csv"; + + if (extractReal) + { + logger.LogInformation("Extracting real labeled issues from Azure Search index..."); + await ExtractRealIssuesAsync(configuration, logger); + logger.LogInformation("Extraction complete: real_mcp_issues.json"); + return; + } + + logger.LogInformation("Initializing MCP labeler"); + + var labeler = await CreateLabeler(configuration, loggerFactory, logger); + if (labeler == null) + { + logger.LogError("Failed to initialize labeler. Check configuration."); + return; + } + + List testCases; + if (issueNumbers.Any()) + { + logger.LogInformation("Fetching and predicting the labels of the specified issues: {Issues}", string.Join(", ", issueNumbers)); + var client = new GitHubClient(new ProductHeaderValue("MCPLabelerEvaluationRunner")); + + foreach (var num in issueNumbers) { + var issue = await FetchGitHubIssue(client, "microsoft", "mcp", num); + var issuePayload = new IssuePayload + { + IssueNumber = issue.Number, + Title = issue.Title, + Body = issue.Body ?? string.Empty, + RepositoryName = "mcp", + RepositoryOwnerName = "microsoft" + }; + var labels = await labeler.PredictLabels(issuePayload); + Console.WriteLine($"Issue #{num}: {issue.Title}"); + Console.WriteLine($"Predicted Server: {labels.GetValueOrDefault("Server", "N/A")}"); + Console.WriteLine($"Predicted Tool: {labels.GetValueOrDefault("Tool", "N/A")}"); + Console.WriteLine($"URL: {issue.HtmlUrl}"); + } + return; + + } else { + logger.LogInformation("Loading real issues from real_mcp_issues.json..."); + testCases = LoadRealIssues("real_mcp_issues.json"); + logger.LogInformation("Loaded {Count} real issues", testCases.Count); + } + + logger.LogInformation("Running evaluation with {Count} test cases...\n", testCases.Count); + + var evaluator = new McpLabelerEvaluator(labeler, logger); + var (results, metrics) = await evaluator.EvaluateAsync(testCases, stopOnFirstError: false); + + Console.WriteLine("\n" + new string('=', 60)); + Console.WriteLine(metrics.ToString()); + Console.WriteLine(new string('=', 60)); + + var failureReport = evaluator.GenerateFailureReport(results); + Console.WriteLine("\n" + failureReport); + + evaluator.ExportToCsv(results, csvOutput); + logger.LogInformation("\nResults exported to: {Path}", csvOutput); + + var exitCode = metrics.CombinedAccuracy >= 0.80 ? 0 : 1; + Environment.Exit(exitCode); + } + + static async Task FetchGitHubIssue(GitHubClient client, string owner, string repo, int issueNumber) + { + var issue = await client.Issue.Get(owner, repo, issueNumber); + return issue; + } + + static Task CreateLabeler(IConfiguration configuration, ILoggerFactory loggerFactory, ILogger logger) + { + try + { + var repository = "microsoft/mcp"; + var openAiEndpoint = configuration["OpenAIEndpoint"]; + var searchEndpoint = configuration["SearchServiceEndpoint"]; + var blobAccountUri = configuration["BlobAccountUri"]; + + if (string.IsNullOrEmpty(openAiEndpoint) || string.IsNullOrEmpty(searchEndpoint)) + { + logger.LogError("Missing required configuration:"); + logger.LogError(" OpenAIEndpoint = {OpenAIEndpoint}", openAiEndpoint ?? "NOT SET"); + logger.LogError(" SearchServiceEndpoint = {SearchServiceEndpoint}", searchEndpoint ?? "NOT SET"); + logger.LogError(" BlobAccountUri = {BlobAccountUri}", blobAccountUri ?? "NOT SET"); + logger.LogError("Add these to your appsettings.json or environment variables."); + return null; + } + + var credential = new DefaultAzureCredential(); + var blobClient = new BlobServiceClient(new Uri(blobAccountUri!), credential); + var searchIndexClient = new SearchIndexClient(new Uri(searchEndpoint!), credential); + var openAIClient = new AzureOpenAIClient(new Uri(openAiEndpoint!), credential); + + var mcpTriageRagLogger = loggerFactory.CreateLogger(); + var mcpTriageRag = new McpTriageRag(mcpTriageRagLogger, openAIClient, searchIndexClient); + + var configWrapper = new Configuration(configuration); + var repoConfig = configWrapper.GetForRepository(repository); + + logger.LogInformation("Creating McpOpenAiLabeler with configuration:"); + logger.LogInformation(" IndexName: {IndexName}", repoConfig.IndexName); + logger.LogInformation(" SemanticName: {SemanticName}", repoConfig.SemanticName); + logger.LogInformation(" LabelModelName: {ModelName}", repoConfig.LabelModelName); + logger.LogInformation(" SourceCount: {SourceCount}", repoConfig.SourceCount); + + var labelerLogger = loggerFactory.CreateLogger(); + var labeler = new McpOpenAiLabeler(labelerLogger, repoConfig, mcpTriageRag, blobClient); + + return Task.FromResult(labeler); + } + catch (Exception ex) + { + logger.LogError(ex, "Error creating labeler: {Message}", ex.Message); + return Task.FromResult(null); + } + } + + static async Task ExtractRealIssuesAsync(IConfiguration configuration, ILogger logger) + { + using var cts = new CancellationTokenSource(); + Console.CancelKeyPress += (_, e) => + { + e.Cancel = true; + cts.Cancel(); + logger.LogWarning("Extraction cancelled by user."); + }; + var searchEndpoint = configuration["SearchServiceEndpoint"] + ?? throw new InvalidOperationException("SearchServiceEndpoint not configured"); + var indexName = configuration["microsoft/mcp:IndexName"] + ?? configuration["defaults:IndexName"] + ?? throw new InvalidOperationException("IndexName not configured"); + + logger.LogInformation("Connecting to Azure Search: {Endpoint}", searchEndpoint); + logger.LogInformation("Index: {IndexName}", indexName); + + var credential = new DefaultAzureCredential(); + var searchClient = new Azure.Search.Documents.SearchClient(new Uri(searchEndpoint), indexName, credential); + + var filter = "DocumentType eq 'Issue' and Server ne null and Tool ne null"; + logger.LogInformation("Filter: {Filter}", filter); + + var searchOptions = new SearchOptions + { + Filter = filter, + Size = 500, + Select = { "Title", "Chunk", "Server", "Tool", "Url" }, + IncludeTotalCount = true + }; + + logger.LogInformation("Executing search query..."); + var searchResults = await searchClient.SearchAsync("*", searchOptions); + + var seenUrls = new HashSet(); + var issues = new List(); + + try{ + await foreach (var result in searchResults.Value.GetResultsAsync().WithCancellation(cts.Token)) + { + var doc = result.Document; + var url = doc["Url"]?.ToString(); + + if (url == null || seenUrls.Contains(url)) + continue; + + seenUrls.Add(url); + + var issueNumber = 0; + if (!string.IsNullOrEmpty(url)) + { + var urlParts = url.Split('/'); + if (urlParts.Length > 0 && int.TryParse(urlParts[^1], out var num)) + { + issueNumber = num; + } + } + + var issue = new McpTestCase + { + IssueNumber = issueNumber, + Title = doc["Title"]?.ToString() ?? "", + Body = doc["Chunk"]?.ToString() ?? "", + ExpectedServerLabel = doc["Server"]?.ToString() ?? "", + ExpectedToolLabel = doc["Tool"]?.ToString() ?? "", + Notes = $"Real issue: {url}" + }; + + issues.Add(issue); + + if (issues.Count % 50 == 0) + logger.LogInformation("Extracted {Count} issues...", issues.Count); + } + } catch (OperationCanceledException) + { + logger.LogWarning("Extraction cancelled before completion. Extracted {Count} issues.", issues.Count); + } + + logger.LogInformation("Total unique issues extracted: {Count}", issues.Count); + logger.LogInformation("Total documents in index: {Total}", searchResults.Value.TotalCount); + + var json = JsonSerializer.Serialize(issues, new JsonSerializerOptions + { + WriteIndented = true + }); + + await File.WriteAllTextAsync("real_mcp_issues.json", json); + logger.LogInformation("Saved to: real_mcp_issues.json"); + + var serverCounts = issues.GroupBy(i => i.ExpectedServerLabel).ToDictionary(g => g.Key, g => g.Count()); + var toolCounts = issues.GroupBy(i => i.ExpectedToolLabel).ToDictionary(g => g.Key, g => g.Count()); + + Console.WriteLine("\n=== Server Distribution ==="); + foreach (var (server, count) in serverCounts.OrderByDescending(kv => kv.Value)) + Console.WriteLine($" {server}: {count}"); + + Console.WriteLine("\n=== Tool Distribution ==="); + foreach (var (tool, count) in toolCounts.OrderByDescending(kv => kv.Value)) + Console.WriteLine($" {tool}: {count}"); + } + + static List LoadRealIssues(string filePath) + { + var json = File.ReadAllText(filePath); + var testCases = JsonSerializer.Deserialize>(json) + ?? throw new InvalidOperationException($"Failed to parse {filePath}"); + + return testCases; + } +} diff --git a/tools/issue-labeler/src/Mcp.Evaluator/README.md b/tools/issue-labeler/src/Mcp.Evaluator/README.md new file mode 100644 index 00000000000..85a93ebfdb3 --- /dev/null +++ b/tools/issue-labeler/src/Mcp.Evaluator/README.md @@ -0,0 +1,161 @@ +# MCP Labeler Evaluator + +A console application for testing and evaluating the accuracy of the MCP issue labeler against real-world labeled GitHub issues. + +## Overview + +This tool tests the MCP labeler's ability to correctly predict Server and Tool labels for issues in the `microsoft/mcp` repository. It compares predictions against ground truth labels from closed, labeled issues. + +## Usage Modes + +### 1. Single Issue Prediction + +Predict labels for one or more specific issues: + +```powershell +dotnet run --issue=1004 +dotnet run --issue=1004,1422,850 +``` + +**Output:** +- Displays issue title and body +- Shows predicted Server and Tool labels with confidence scores +- No accuracy calculation (no ground truth comparison) + +### 2. Batch Evaluation + +Evaluate labeler accuracy against the test dataset: + +```powershell +dotnet run +``` + +**What it does:** +- Loads test cases from `real_mcp_issues.json` +- Runs predictions for each issue +- Calculates accuracy metrics +- Exports results to `mcp_evaluation_results.csv` +- **Exit code 0** if accuracy ≥ 80%, **exit code 1** otherwise + +**Metrics reported:** +- Server label accuracy +- Tool label accuracy +- Both labels correct (strict accuracy) +- Per-label confusion analysis +- Failure report for incorrect predictions + +### 3. Extract Test Dataset + +Extract labeled issues from the Azure Search index to create/update test data: + +```powershell +dotnet run --extract-real +``` + +**What it does:** +- Queries Azure Search for all indexed MCP issues with Server and Tool labels +- Saves to `real_mcp_issues.json` as test dataset +- Use this periodically to refresh ground truth data + +## Configuration + +### Required Settings + +Create `appsettings.json`: + +```json +{ + "OpenAIEndpoint": "https://.openai.azure.com/", + "SearchServiceEndpoint": "https://.search.windows.net", + "BlobAccountUri": "https://.blob.core.windows.net", + + "microsoft/mcp:LabelPredictor": "McpOpenAI", + "microsoft/mcp:IndexName": "microsoft-mcp-triage-index", + "microsoft/mcp:SemanticName": "issue-semantic-config", + "microsoft/mcp:IssueIndexFieldName": "TextVector", + "microsoft/mcp:SourceCount": "15", + "microsoft/mcp:ScoreThreshold": "0.75", + "microsoft/mcp:ConfidenceThreshold": "0.9", + "microsoft/mcp:LabelModelName": "gpt-5.1", + "microsoft/mcp:LabelInstructions": "You are an expert at categorizing GitHub issues...", + "microsoft/mcp:RepoOwner": "microsoft", + "microsoft/mcp:RepoNames": "mcp", + "microsoft/mcp:EnableLabels": "true", + "microsoft/mcp:EnableAnswers": "false" +} +``` + +### Key Configuration Parameters + +| Parameter | Description | Default/Example | +|-----------|-------------|-----------------| +| `LabelPredictor` | Predictor implementation to use | `McpOpenAI` | +| `IndexName` | Azure Search index name | `microsoft-mcp-triage-index` | +| `SourceCount` | Number of similar issues to retrieve | `15` | +| `ScoreThreshold` | Minimum similarity score for retrieval | `0.75` | +| `ConfidenceThreshold` | Minimum confidence for label prediction | `0.9` | +| `LabelModelName` | Azure OpenAI chat model | `gpt-5.1` | +| `LabelInstructions` | System prompt for label prediction | Custom instructions | + +### Tuning for Better Accuracy + +**If predictions are too conservative (missing labels):** +- Lower `ConfidenceThreshold` (e.g., from 0.9 to 0.8) +- Lower `ScoreThreshold` (e.g., from 0.75 to 0.7) +- Increase `SourceCount` (e.g., from 15 to 20) + +**If predictions are incorrect (wrong labels):** +- Increase `ConfidenceThreshold` (more selective) +- Increase `ScoreThreshold` (only very similar issues) +- Refine `LabelInstructions` prompt +- Ensure RerankerThreshold in knowledge agent is appropriate (see SearchIndexCreator README) + +## Test Data Format + +`real_mcp_issues.json` contains test cases with ground truth: + +```json +[ + { + "IssueNumber": 1004, + "Title": "Issue title here", + "Body": "Issue body/description", + "ExpectedServerLabel": "server-azure", + "ExpectedToolLabel": "tools-Storage", + "Notes": "Optional notes about this test case" + } +] +``` + +## Output Files + +### `mcp_evaluation_results.csv` + +CSV export of all predictions with columns: +- IssueNumber +- Title +- ExpectedServer, PredictedServer, ServerCorrect +- ExpectedTool, PredictedTool, ToolCorrect +- BothCorrect +- Error (if prediction failed) + +Use for detailed analysis in Excel or other tools. + +## Understanding Results + +### Good Accuracy Indicators +- Server accuracy > 90% +- Tool accuracy > 85% +- Both correct > 85% + +This evaluator uses the **same labeler logic** as the production Azure Function (`IssueLabelerService`), but runs locally for testing and operates on historical closed issues (ground truth known) + +Use this tool to validate changes before deploying to production. + +## Known Limitations + +- Only tests MCP repository labeling (not Azure SDK repos) +- Requires issues to already be indexed in Azure Search +- Test dataset must be manually refreshed with `--extract-real` +- Cannot test issues without Server/Tool labels +- Assumes ground truth labels in search index are correct diff --git a/tools/issue-labeler/src/Mcp.Evaluator/real_mcp_issues.json b/tools/issue-labeler/src/Mcp.Evaluator/real_mcp_issues.json new file mode 100644 index 00000000000..564715446b5 --- /dev/null +++ b/tools/issue-labeler/src/Mcp.Evaluator/real_mcp_issues.json @@ -0,0 +1,3314 @@ +[ + { + "IssueNumber": 192, + "Title": "Remove duplicated logging code and common telemetry operations.", + "Body": "Title: Remove duplicated logging code and common telemetry operations.\n\nA try / catch surrounds each command executed. See if there is a way to make logging errors handling common in addition to adding subscription tags when executing a command.\n\nWill require some rearchitecture.\n\nhttps://github.com/Azure/azure-mcp/pull/386/files#r2178272946", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Telemetry", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/192" + }, + { + "IssueNumber": 193, + "Title": "[Usability] Review azmcp-commands for consistency and naming", + "Body": "Title: [Usability] Review azmcp-commands for consistency and naming\n\nTracking issue to review the various global switch commands like \u0060mode\u0060 and \u0060namespace\u0060 for better usability. Ideally the switches and parameters are self-documenting, but today users have to lookup and read the docs to understand how to use the switches.\n\nhttps://github.com/Azure/azure-mcp/blob/main/docs/azmcp-commands.md\n\nFor instance, \u0060--mode namespace\u0060 means \u0060expose 1 MCP tool per service Area (Storage, KV, SB, EH, Search)\u0060. Is there an easier way to convey these details to customers so they don\u0027t have to read the docs first?", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Core", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/193" + }, + { + "IssueNumber": 197, + "Title": "[Docker] Requires Azure CLI to be logged in to use?", + "Body": "Title: [Docker] Requires Azure CLI to be logged in to use?\n\nHi - I maybe don\u0027t understand why - but when I run the MCP Server authenticated with a Client ID and Secret to connect with - that it then requires Azure CLI to be logged in? \n\nI\u0027m using Windows 11 with Docker Desktop and VS Code and GitHub CoPilot to test with\n\nI can ask it to show my subscription, and my resource groups, but when asking for resources inside a resource group it fails because I need to be logged into Azure CLI ? I\u0027m logged into Azure CLI on my Windows machine, but is this talking about the actual Docker image it is running?\n\nWhen I\u0027m already authenticated why do I need to then login to Azure CLI? Is this because Azure CLI isn\u0027t installed as part of the Dockerfile ?\n\n\u003Cimg width=\u00221539\u0022 height=\u0022965\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/49adece6-b0bc-4de7-9888-80cabef15a56\u0022 /\u003E", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Docker", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/197" + }, + { + "IssueNumber": 23, + "Title": "Add MCP servers to Cline Marketplace", + "Body": "Title: Add MCP servers to Cline Marketplace\n\nThis is a bit of a companion to #9, but for tool-side instead of web-side discovery. Cline maintains its own Marketplace with search and one-click installation.\n\nhttps://github.com/cline/mcp-marketplace?tab=readme-ov-file#how-to-submit-your-mcp-server\n\nAzure has already done this. See https://github.com/Azure/azure-mcp/issues/121", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-McpRegistry", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/23" + }, + { + "IssueNumber": 243, + "Title": "[Tool Description] Improve App Configuration tool description for better LLM selection", + "Body": "to MCP servers that require specific fields inside the \u0022parameters\u0022 object. To invoke a command, set \u0022command\u0022 and wrap its arguments in \u0022parameters\u0022. Set \u0022learn=true\u0022 to discover available sub-commands and their specific parameter requirements. Note that this tool requires appropriate Azure permissions and App Configuration Data Reader/Contributor roles to access configuration data.\r\n\u0060\u0060\u0060\r\n\r\n## Acceptance Criteria\r\n- [ ] Update tool description to include clear usage guidance\r\n- [ ] Explain App Configuration service context for clarity\r\n- [ ] Specify what this tool should NOT be used for\r\n- [ ] Detail required permissions and access patterns\r\n- [ ] Fix formatting issues\r\n- [ ] Achieve confidence score \u22650.5 in tool selection testing\r\n\r\n**Related:** Tool description review for improved LLM selection accuracy", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-AppConfig", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/243" + }, + { + "IssueNumber": 244, + "Title": "[Tool Description] Improve Best Practices tool description for better LLM selection", + "Body": "Title: [Tool Description] Improve Best Practices tool description for better LLM selection\n\n## Problem\r\n\r\nThe current Best Practices tool description lacks the detail and clarity needed for optimal LLM tool selection, resulting in an estimated confidence score of ~0.25 (well below target of \u22650.5).\r\n\r\n**Current Description Issues:**\r\n- Missing usage guidance (when to use vs when not to use)\r\n- Vague purpose without specific context\r\n- Limited scope explanation (only mentions SDK code generation)\r\n- Poor parameter explanation\r\n- Missing limitations/caveats\r\n- Formatting issues (missing space after period)\r\n- Too brief for the tool\u0027s importance\r\n\r\n## Current Description\r\n\u0060\u0060\u0060\r\nReturns secure, production-grade Azure best practices. Call this before generating Azure SDK code.This tool is a hierarchical MCP command router. Sub commands are routed to MCP servers that require specific fields inside the \u0022parameters\u0022 object. To invoke a command, set \u0022command\u0022 and wrap its args in \u0022parameters\u0022. Set \u0022learn=true\u0022 to discover available sub commands.\r\n\u0060\u0060\u0060\r\n\r\n## Suggested Improvement\r\n\u0060\u0060\u0060\r\nReturns secure, production-grade Azure best practices and recommendations for cloud architecture, security, performance, and cost optimization. Use this tool when you need guidance for Azure resource configuration, security hardening, deployment patterns, monitoring setup, or before generating Azure SDK code and infrastructure templates. This tool provides best practices for services like compute, storage, networking, databases, and security configurations. Do not use this tool for specific troubleshooting, resource management operations, or real-time monitoring - this tool focuses on providing architectural and security guidance rather than executing operations. This tool is a hierarchical MCP command router where sub-commands are routed to MCP servers that require specific fields inside the \u0022parameters\u0022 object. To invoke a command, set \u0022command\u0022 and wrap its arguments in \u0022parameters\u0022. Set \u0022learn=true\u0022 to discover available sub-commands for different Azure service areas and best practice categories.\r\n\u0060\u0060\u0060\r\n\r\n## Acceptance Criteria", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-BestPractices", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/244" + }, + { + "IssueNumber": 250, + "Title": "[Tool Description] Improve Foundry tool description for better LLM selection", + "Body": "and wrap its arguments in \u0022parameters\u0022. Set \u0022learn=true\u0022 to discover available sub-commands for different AI Foundry operations and resource types.\r\n\u0060\u0060\u0060\r\n\r\n## Acceptance Criteria\r\n- [ ] Update tool description to include AI Foundry context\r\n- [ ] Explain specific AI/ML services and resources covered\r\n- [ ] Clarify when NOT to use this tool\r\n- [ ] Detail the types of operations available\r\n- [ ] Fix formatting issues\r\n- [ ] Achieve confidence score \u22650.5 in tool selection testing\r\n\r\n**Related:** Tool description review for improved LLM selection accuracy", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Foundry", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/250" + }, + { + "IssueNumber": 256, + "Title": "[Tool Description] Improve Monitor tool description for better LLM selection", + "Body": "Title: [Tool Description] Improve Monitor tool description for better LLM selection\n\n## Problem\r\n\r\nThe current Monitor tool description lacks the detail and clarity needed for optimal LLM tool selection, resulting in an estimated confidence score of ~0.3 (below target of \u22650.5).\r\n\r\n**Current Description Issues:**\r\n- Missing usage guidance (when to use vs when not to use)\r\n- Limited context about Azure Monitor ecosystem\r\n- Vague description of query operations\r\n- Poor parameter explanation\r\n- Missing KQL (Kusto Query Language) context\r\n- Formatting issues (missing space after period)\r\n- No mention of Log Analytics workspaces, Application Insights, etc.\r\n\r\n## Current Description\r\n\u0060\u0060\u0060\r\nAzure Monitor operations - Commands for querying and analyzing Azure Monitor logs and metrics.This tool is a hierarchical MCP command router. Sub commands are routed to MCP servers that require specific fields inside the \u0022parameters\u0022 object. To invoke a command, set \u0022command\u0022 and wrap its args in \u0022parameters\u0022. Set \u0022learn=true\u0022 to discover available sub commands.\r\n\u0060\u0060\u0060\r\n\r\n## Suggested Improvement\r\n\u0060\u0060\u0060\r\nAzure Monitor operations - Commands for querying and analyzing Azure Monitor logs, metrics, and telemetry data using KQL (Kusto Query Language) from Log Analytics workspaces, Application Insights, and other Azure monitoring sources. Use this tool when you need to execute KQL queries against Azure Monitor data, analyze application performance metrics, query infrastructure logs, retrieve monitoring data for troubleshooting, or generate insights from Azure telemetry and diagnostic data. This tool provides access to centralized monitoring and observability data across Azure resources. Do not use this tool for Azure Data Explorer cluster operations, real-time alerting configuration, Azure SQL database queries, or managing monitoring resources - this tool focuses on querying existing monitoring data rather than resource management. This tool is a hierarchical MCP command router where sub-commands are routed to MCP servers that require specific fields inside the \u0022parameters\u0022 object. To invoke a command, set \u0022command\u0022 and wrap its arguments in \u0022parameters\u0022.", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Monitor", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/256" + }, + { + "IssueNumber": 257, + "Title": "[Tool Description] Improve Postgres tool description for better LLM selection", + "Body": "Title: [Tool Description] Improve Postgres tool description for better LLM selection\n\n## Problem\r\n\r\nThe current Postgres tool description is functional but lacks the detail and clarity needed for optimal LLM tool selection. Estimated confidence score of ~0.5 (at target but could be improved for better precision).\r\n\r\n**Current Description Issues:**\r\n- Missing usage guidance (when to use vs when not to use)\r\n- Limited context distinguishing from other database tools\r\n- Poor parameter explanation\r\n- Missing authentication and connection context\r\n- Formatting issues (missing space after period)\r\n- No mention of supported PostgreSQL features/limitations\r\n\r\n## Current Description\r\n\u0060\u0060\u0060\r\nPostgreSQL operations - Commands for managing Azure Database for PostgreSQL Flexible Server resources. Includes operations for listing servers and databases, executing SQL queries, managing table schemas, and configuring server parameters.This tool is a hierarchical MCP command router. Sub commands are routed to MCP servers that require specific fields inside the \u0022parameters\u0022 object. To invoke a command, set \u0022command\u0022 and wrap its args in \u0022parameters\u0022. Set \u0022learn=true\u0022 to discover available sub commands.\r\n\u0060\u0060\u0060\r\n\r\n## Suggested Improvement\r\n\u0060\u0060\u0060\r\nPostgreSQL operations - Commands for managing and querying Azure Database for PostgreSQL Flexible Server instances including server management, database operations, and SQL query execution. Use this tool when you need to list PostgreSQL servers and databases, execute SQL queries against PostgreSQL databases, manage table schemas and indexes, configure server parameters, or work with PostgreSQL-specific features and extensions. This tool supports standard PostgreSQL SQL operations and database administration tasks. Do not use this tool for Azure SQL Database operations, Cosmos DB queries, MySQL database management, or non-PostgreSQL database systems - this tool is specifically designed for PostgreSQL Flexible Server resources. This tool is a hierarchical MCP command router where sub-commands are routed to MCP servers that require specific fields inside the \u0022parameters\u0022 object.", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Postgres", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/257" + }, + { + "IssueNumber": 281, + "Title": "Feature: Replace all ARM resource write operations with the Azure.ResourceManager library to reduce tool size", + "Body": "Title: Feature: Replace all ARM resource write operations with the Azure.ResourceManager library to reduce tool size\n\n## Proposal\n\nThis is a proposal to reduce the size of the AzureMCP server.\nThe \u0060GenericResource\u0060 class in the \u0060Azure.ResourceManager\u0060 library supports Create, Update, and Delete operations for any ARM resource type, making it a flexible alternative to using specific \u0060Azure.ResourceManager.XXX\u0060 libraries in individual tools.\n\n## Details\n\n**Current Approach**\n\nEach tool currently relies on its corresponding .NET management library to Create, Update, or Delete Azure resource data. For example, the azmcp_foundry_models_deploy tool uses the \u0060Azure.ResourceManager.CognitiveServices\u0060 library. If we introduce a new tool, such as one to create Starage Disk, we would need to add a dependency on \u0060Azure.ResourceManager.Storage\u0060.\n\nAs more tools are added, the number of Azure management .NET SDKs integrated into the project will grow, leading to a continuous increase in the size of the AzureMCP server.\n\n**Proposed Optimization**\n\nThe \u0060GenericResource\u0060 class in the \u0060Azure.ResourceManager\u0060 library supports Create, Update, and Delete operations for any ARM resource. It can be used to replace the write operations currently handled by individual service-specific libraries. For instance, the azmcp_foundry_models_deploy tool can be refactored to use a GenericResource CreateOrUpdate instead of relying on the CognitiveServices SDK:\n\n\u0060\u0060\u0060 C#\nvar createResult = await armClient.GetGenericResources().CreateOrUpdateAsync(WaitUntil.Completed, id, data);\n\u0060\u0060\u0060\n\n## Libraries to be removed\n\n- [x] \u0060Azure.ResourceManager.CognitiveServices\u0060 : 1.26 MB\n- [ ] \u0060Azure.ResourceManager.LoadTesting\u0060 : 298 KB\n- [ ] \u0060Azure.ResourceManager.PostgreSql\u0060 : 1.57 MB\n- [x] \u0060Azure.ResourceManager.Storage\u0060 : 1.67 MB\n- [ ] \u0060Azure.ResourceManager.ApplicationInsights\u0060 : 852 KB\n\n## Pros \u0026 Cons\n\n\u2705 **Pros**\n\n**Reduced Server Size:** Significantly decreases the overall size of the AzureMCP server by minimizing dependencies.\n\n\u26A0\uFE0F **Cons**\n\n**Extra Input Model Required:** No strongly typed models, additional code is needed to define input models.", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-ARM", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/281" + }, + { + "IssueNumber": 282, + "Title": "Standardize auth support in Storage tools", + "Body": "Title: Standardize auth support in Storage tools\n\n\u003E Since we have mgmt libs that can gen what is needed for a connection string it\u0027s nice to be able to provide that as an option and is triggered by auth method. That allows users who have non-MI support still enabled to use the MCP server. But we don\u0027t want to provide connection string as a parameter IMO. I would like to have consistent API so all tools for an area work the same way. So if there are storage tools that aren\u0027t using the \u0022auto auth\u0022 flow it would make sense to enable it for them as well. I\u0027m okay taking that as a separate issue.\r\n\r\n_Originally posted by @jongio in https://github.com/Azure/azure-mcp/pull/794#discussion_r2266913893_\r\n \r\n\r\nThis is a request to make auth consistent in Storage tools where some allow for \u0022auto auth\u0022, where using the \u0060subscription\u0060 input Managed Identity or connection string auth can be used based on how the tool was called.", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Storage", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/282" + }, + { + "IssueNumber": 284, + "Title": "[BESTPRACTICES] Check if there is an issue with error handling mechanism", + "Body": "this issue, please refer to the troubleshooting guidelines here at https://aka.ms/azmcp/troubleshooting.\u0022,\n \u0022results\u0022: {\n \u0022message\u0022: \u0022No resources match pattern \u0027azure-general-codegen-best-practices_123.txt\u0027. (Parameter \u0027resourcePattern\u0027)\u0022,\n \u0022stackTrace\u0022: \u0022 at AzureMcp.Core.Helpers.EmbeddedResourceHelper.FindEmbeddedResource(Assembly assembly, String resourcePattern) in /Users/fanyang/Documents/work/azure-mcp/core/src/AzureMcp.Core/Helpers/EmbeddedResourceHelper.cs:line 52\\n at AzureMcp.AzureBestPractices.Commands.BestPracticesCommand.LoadBestPracticesText(String resourceFileName) in /Users/fanyang/Documents/work/azure-mcp/areas/azurebestpractices/src/AzureMcp.AzureBestPractices/Commands/BestPracticesCommand.cs:line 168\\n at AzureMcp.AzureBestPractices.Commands.BestPracticesCommand.GetBestPracticesText(String resourceFileName) in /Users/fanyang/Documents/work/azure-mcp/areas/azurebestpractices/src/AzureMcp.AzureBestPractices/Commands/BestPracticesCommand.cs:line 131\\n at AzureMcp.AzureBestPractices.Commands.BestPracticesCommand.ExecuteAsync(CommandContext context, ParseResult parseResult) in /Users/fanyang/Documents/work/azure-mcp/areas/azurebestpractices/src/AzureMcp.AzureBestPractices/Commands/BestPracticesCommand.cs:line 53\u0022,\n \u0022type\u0022: \u0022ArgumentException\u0022\n },\n \u0022duration\u0022: 24\n}\n\u0060\u0060\u0060\n\nI would expect \u0060Error getting best practices for Resource: general, Action: code-generation\u0060 showing up in the \u0060message\u0060 field of the json object. Check to see if there is an issue.", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-BestPractices", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/284" + }, + { + "IssueNumber": 285, + "Title": "Azure MCP server for GHCP in IntelliJ", + "Body": "Title: Azure MCP server for GHCP in IntelliJ\n\nIntegrate Azure MCP server for GitHub Copilot in IntelliJ through the Azure Toolkit for IntelliJ plugin", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-IntelliJ, tools-Setup", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/285" + }, + { + "IssueNumber": 292, + "Title": "[Quota Tool] Region Availability prompts failed \u2014 Quota Tool not invoked on PR #626", + "Body": "Azure OpenAI deployments.\u0060\n6. \u0060For AKS, give me a list of regions with availability and note any regional restrictions.\u0060\n7. \u0060In which regions can I create App Service Linux plans?\u0060\n8. \u0060Where are Cognitive Services available for vision features?\u0060\n9. \u0060Which regions support Availability Zones for VM deployments?\u0060\n10. \u0060List regions that currently offer zone-redundant Container Apps environments.\u0060\n\n**Expected Behavior:**\nCopilot chat should invoke the quota tool for each prompt.\n\n@jongio for notification.", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Deploy", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/292" + }, + { + "IssueNumber": 296, + "Title": "\u0060azmcp-monitor-ingestion-status-check\u0060 ", + "Body": "Title: \u0060azmcp-monitor-ingestion-status-check\u0060 \n\n\u0060azmcp-monitor-ingestion-status-check\u0060 - Check the status and progress of log ingestion operations with detailed monitoring. This tool tracks ingestion jobs providing success rates, error counts, and processing times for troubleshooting and monitoring. Returns ingestion status as JSON. Requires workspace-id and optional operation-id. - Suggested prompt: \u0022Check the ingestion status for data collection rule \u003Crule-name\u003E\u0022", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Monitor", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/296" + }, + { + "IssueNumber": 331, + "Title": "[Single Mode/MCP-Native@0.5.8-alpha.5259970] \u0060Storage Service Test\u0060 failed to correctly trigger tool invocation", + "Body": "0.31.2025090302\n- Large Language Model: GPT-4.1\n\n**Expected Behavior:**\nIn the single mode of MCP-Native@0.5.8-alpha.5259970, all storage service-related operations (such as listing containers, send a message to queue and listing all table, etc.) can stably and correctly trigger the expected tool operations.\n\n@joshfree for notification", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Storage", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/331" + }, + { + "IssueNumber": 332, + "Title": "[Namespace Mode/MCP-Native@0.5.8-alpha.5259970] \u0060Key Vault Service Test\u0060 failed to correctly trigger tool invocation", + "Body": "Title: [Namespace Mode/MCP-Native@0.5.8-alpha.5259970] \u0060Key Vault Service Test\u0060 failed to correctly trigger tool invocation\n\n**Description:**\nDuring testing of \u0060MCP-Native@0.5.8-alpha.5259970\u0060 in **Namespace** mode, key vault service scenarios (such as creating a new certificate, importing the certificate and listing all certificates) failed to trigger corresponding tool responses. Some test prompts fail intermittently rather than every time. The specific failure rates are as follows:\n\n- Test prompt: \u0060Create a new certificate called \u0022mycert41\u0022 in the key vault \u0022mhkey\u0022\u0060:\n\u003Cimg width=\u0022660\u0022 height=\u0022782\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/fc530474-d68f-4532-8311-2e760214714e\u0022 /\u003E\n\n- Test prompt: \u0060Import the certificate in file \u0022D:\\download\\cert1.pfx\u0022 named \u0022mycert42\u0022 into the key vault \u0022mhkey\u0022\u0060:\n\u003Cimg width=\u0022644\u0022 height=\u0022340\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/c6b0b625-14e2-42ad-8d6d-978cab41a426\u0022 /\u003E\n\n- Test prompt: \u0060List all certificates in the key vault \u0022mhkey\u0022\u0060 (**Tested five times, failed three times**):\n\u003Cimg width=\u0022654\u0022 height=\u0022451\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/464b136b-93a4-4ed1-a33f-9ccd46c85203\u0022 /\u003E\n\n- Test prompt: \u0060Create a new key called \u0022key42\u0022 with the RSA type in the key vault \u0022mhkey\u0022\u0060:\n\u003Cimg width=\u0022633\u0022 height=\u0022314\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/7fe48bdb-c29b-4104-8d2a-c80fb0df6ca1\u0022 /\u003E\n\n- Test prompt: \u0060List all keys in the key vault \u0022mhkey\u0022\u0060 (**Tested five times, failed three times**):\n\u003Cimg width=\u0022649\u0022 height=\u0022828\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/e6ef888d-ebc6-430b-b0b9-05d01708f6f4\u0022 /\u003E\n\n- Test prompt: \u0060Create a new secret called \u0022secret2\u0022 with value \u0022123456\u0022 in the key vault \u0022mhkey\u0022\u0060 (**Tested five times, failed four times**):\n\u003Cimg width=\u0022664\u0022 height=\u0022368\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/7633c0ad-f001-4455-a568-fd5fed63ba21\u0022 /\u003E\n\n- Test prompt: \u0060List all secrets in the key vault \u0022mhkey\u0022\u0060 (**Tested five times, failed four times**):\n\u003Cimg width=\u0022659\u0022 height=\u0022390\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/e5b7b065-fd65-442a-912f-73298c9b4598\u0022 /\u003E\n\n**Steps to Reproduce:**", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-KeyVault", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/332" + }, + { + "IssueNumber": 1052, + "Title": "[Remote] Disable telemetry when server runs uses HTTP transport", + "Body": "Title: [Remote] Disable telemetry when server runs uses HTTP transport\n\nBy default, telemetry should be disabled when the server runs uses HTTP transport. Telemetry will continue to be enabled by default when stdio is used.", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Telemetry, remote-mcp", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/1052" + }, + { + "IssueNumber": 1060, + "Title": "[CONSOLIDATED] Some \u0060get_azure_databases_details\u0060 prompts do not trigger the corresponding tool as expected", + "Body": "Title: [CONSOLIDATED] Some \u0060get_azure_databases_details\u0060 prompts do not trigger the corresponding tool as expected\n\n**Description:**\nIn \u0060consolidated\u0060 mode, when testing prompts related to the \u0060get_azure_databases_details\u0060 tool, some prompts do not trigger the corresponding tool as expected, as shown below:\n- Test Prompt: \u0060List all cosmosdb accounts in my subscription\u0060\n\u003Cimg width=\u0022800\u0022 height=\u0022703\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/0fdc9936-ccf8-4511-a778-54d990465b8f\u0022 /\u003E\n\n- Test Prompt: \u0060List all the containers in the database mhdb for the cosmosdb account mhcosmos23 in group mhmcp\u0060\n\u003Cimg width=\u0022800\u0022 height=\u0022579\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/c0613868-58b4-4a60-a8c6-e3501872ec50\u0022 /\u003E\n\n- Test Prompt: \u0060List all the databases in the cosmosdb account mhcosmos23 in resource group mhmcp\u0060\n\u003Cimg width=\u0022800\u0022 height=\u0022764\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/ddaa1d0c-7624-464a-be0f-c29ba63cc8f1\u0022 /\u003E\n\n- Test Prompt: \u0060Show me the databases in the cosmosdb account mhcosmos23 in mhmcp\u0060\n\u003Cimg width=\u0022800\u0022 height=\u0022769\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/2ee2a5e2-ee95-4c65-bdf4-bdea95b66b3f\u0022 /\u003E\n\n- Test Prompt: \u0060Show me the cosmosdb accounts in my subscription\u0060\n\u003Cimg width=\u0022800\u0022 height=\u0022705\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/ce669d30-3515-4a4a-a90f-805d143c790b\u0022 /\u003E\n\n\n**Steps to Reproduce:**\n1. Start mcp server in \u0060consolidated\u0060 mode.\n2. Open GitHub Copilot in VS Code and [switch to Agent mode](https://code.visualstudio.com/docs/copilot/chat/chat-agent-mode).\n3. Click Refresh on the tools list, and select the \u0060Built-in\u0060, \u0060Extension: Github Copilot for Azure\u0060, \u0060github MCP server\u0060 and \u0060MCP Server: Azure MCP\u0060.\n4. Enter test prompts \u0060List all cosmosdb accounts in my subscription\u0060, \u0060List all the containers in the database mhdb for the cosmosdb account mhcosmos23 in group mhmcp\u0060, \u0060List all the databases in the cosmosdb account mhcosmos23 in resource group mhmcp\u0060, \u0060Show me the databases in the cosmosdb account mhcosmos23 in mhmcp\u0060, \u0060Show me the cosmosdb accounts in my subscription\u0060.\n\n**Environment:**\n\n- OS: Windows.\n- Vscode Version: 1.105.1", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Core", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/1060" + }, + { + "IssueNumber": 1065, + "Title": "[CONSOLIDATED] Some \u0060get_azure_best_practices\u0060 prompts do not trigger the corresponding tool as expected", + "Body": "Title: [CONSOLIDATED] Some \u0060get_azure_best_practices\u0060 prompts do not trigger the corresponding tool as expected\n\n**Description:**\nIn \u0060consolidated\u0060 mode, when testing prompts related to the \u0060get_azure_best_practices\u0060 tool, some prompts do not trigger the corresponding tool as expected, as shown below:\n- Test Prompt: \u0060How can I use Bicep to create an Azure OpenAI service?\u0060\n\u003Cimg width=\u0022731\u0022 height=\u0022805\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/d2565b93-7288-495e-b45d-c52a618762af\u0022 /\u003E\n\n- Test Prompt: \u0060Show me the Azure Terraform best practices and generate code sample to get a secret from Azure Key Vault\u0060\n\u003Cimg width=\u0022731\u0022 height=\u0022666\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/190eec28-79f7-475b-be98-a5655e1cdaea\u0022 /\u003E\n\n**Steps to Reproduce:**\n1. Start mcp server in \u0060consolidated\u0060 mode.\n2. Open GitHub Copilot in VS Code and [switch to Agent mode](https://code.visualstudio.com/docs/copilot/chat/chat-agent-mode).\n3. Click Refresh on the tools list, and select the \u0060Built-in\u0060, \u0060Extension: Github Copilot for Azure\u0060, \u0060github MCP server\u0060 and \u0060MCP Server: Azure MCP\u0060.\n4. Enter test prompts \u0060How can I use Bicep to create an Azure OpenAI service?\u0060, \u0060Show me the Azure Terraform best practices and generate code sample to get a secret from Azure Key Vault\u0060.\n\n**Environment:**\n\n- OS: Windows.\n- Vscode Version: 1.105.1\n- GitHub Copilot Chat Version: 0.32.4\n- Large Language Model: **Claude Sonnet 4.5**\n- Virtual Tool: On\n- Azure MCP Server: **1.0.0**\n\n\n**Expected Behavior:**\nThese prompts can successfully trigger the expected \u0060get_azure_best_practices\u0060 tool.\n\n@joshfree for notification", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Core", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/1065" + }, + { + "IssueNumber": 1069, + "Title": "[CONSOLIDATED] Some \u0060get_azure_ai_resources_details\u0060 prompts do not trigger the corresponding tool as expected", + "Body": "Title: [CONSOLIDATED] Some \u0060get_azure_ai_resources_details\u0060 prompts do not trigger the corresponding tool as expected\n\n**Description:**\nIn \u0060consolidated\u0060 mode, when testing prompts related to the \u0060get_azure_ai_resources_details\u0060 tool, some prompts do not trigger the corresponding tool as expected, some examples are shown below:\n- Test Prompt: \u0060List all knowledge sources in the search service \u003Cservice-name\u003E\u0060\n\u003Cimg width=\u0022825\u0022 height=\u0022723\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/d2a4549f-5488-4005-bdd2-7bf6f69ae2be\u0022 /\u003E\n\n- Test Prompt: \u0060Get the details of knowledge souorce mhknowledge001-index in the Azure AI Search service mhsearch04\u0060\n\u003Cimg width=\u0022822\u0022 height=\u0022787\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/3ae88958-8ead-4ba2-94f6-28620b13d9da\u0022 /\u003E\n\n- Test Prompt: \u0060List all Cognitive Search services in my subscription\u0060\n\u003Cimg width=\u0022810\u0022 height=\u0022427\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/fb3b4984-4eb2-429c-a664-d91d52d2118d\u0022 /\u003E\n\n\n**Steps to Reproduce:**\n1. Start mcp server in \u0060consolidated\u0060 mode.\n2. Open GitHub Copilot in VS Code and [switch to Agent mode](https://code.visualstudio.com/docs/copilot/chat/chat-agent-mode).\n3. Click Refresh on the tools list, and select the \u0060Built-in\u0060, \u0060Extension: Github Copilot for Azure\u0060, \u0060github MCP server\u0060 and \u0060MCP Server: Azure MCP\u0060.\n4. Enter test prompts \u0060List all knowledge sources in the search service \u003Cservice-name\u003E\u0060.\n\n**Environment:**\n\n- OS: Windows.\n- Vscode Version: 1.105.1\n- GitHub Copilot Chat Version: 0.32.4\n- Large Language Model: **Claude Sonnet 4.5**\n- Virtual Tool: On\n- Azure MCP Server: **1.0.0**\n- Test Prompts:\n\u0060\u0060\u0060\nList all knowledge bases in the Azure AI Search service mhsearch04\nList all knowledge bases in the search service \u003Cservice-name\u003E\nSearch for instances of \u003Csearch_term\u003E in the index \u003Cindex-name\u003E in Cognitive Search service \u003Cservice-name\u003E\nShow me the details of the index \u003Cindex-name\u003E in Cognitive Search service \u003Cservice-name\u003E\nShow me the indexes in the Cognitive Search service \u003Cservice-name\u003E\nShow me the knowledge base \u003Cagent-name\u003E in search service \u003Cservice-name\u003E\nShow me the knowledge bases in the Azure AI Search service \u003Cservice-name\u003E", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Core", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/1069" + }, + { + "IssueNumber": 1084, + "Title": "Add azmcp azuremanagedlustre filesystem auto importjob delete", + "Body": "Title: Add azmcp azuremanagedlustre filesystem auto importjob delete\n\nAdd azmcp azuremanagedlustre filesystem import-job delete , required testing and docs.", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-managedlustre", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/1084" + }, + { + "IssueNumber": 114, + "Title": "[BUG] @azure/mcp Windows package has Linux binaries by mistake", + "Body": "Title: [BUG] @azure/mcp Windows package has Linux binaries by mistake\n\n\n# Azure MCP Package Bug Report\n\n## Summary\nThe Azure MCP package (\u0060@azure/mcp\u0060) has critical platform detection and binary selection issues on Windows systems, causing \u0022Connection closed\u0022 errors and preventing successful MCP server startup.\n\n## Environment Details\n- **Operating System**: Windows 11\n- **Node.js Version**: 22.19.0\n- **npm Version**: 10.9.3\n- **Package**: @azure/mcp@latest\n- **Shell**: PowerShell (pwsh.exe)\n- **MCP Client**: Python with \u0060mcp\u0060 package\n\n## Issue Description\nThe Azure MCP package consistently fails to start on Windows due to platform binary mismatch issues. Despite proper platform environment variables and Windows detection, the package appears to be using Linux binaries instead of Windows-compatible binaries.\n\n## Specific Problems Identified\n\n### 1. Platform Binary Selection Issue\n- **Expected**: Package should detect Windows platform and use \u0060win32-x64\u0060 binaries\n- **Actual**: Package attempts to use Linux binaries on Windows system\n- **Result**: \u0022Connection closed\u0022 errors and MCP server startup failures\n\n### 2. Environment Variable Issues\nEven with proper platform environment variables set:\n\u0060\u0060\u0060bash\nPLATFORM=win32\nARCH=x64\n\u0060\u0060\u0060\nThe package still fails to select appropriate Windows binaries.\n\n### 3. Connection Failures\nThe MCP server fails to establish stdio connections with consistent \u0022Connection closed\u0022 errors when attempting to connect from Python MCP clients.\n\n## Steps to Reproduce\n\n1. Install the Azure MCP package on Windows:\n \u0060\u0060\u0060bash\n npx -y @azure/mcp@latest server start\n \u0060\u0060\u0060\n\n2. Attempt to connect using Python MCP client:\n \u0060\u0060\u0060python\n from mcp import ClientSession, StdioServerParameters\n from mcp.client.stdio import stdio_client\n \n server_params = StdioServerParameters(\n command=\u0022npx\u0022,\n args=[\u0022-y\u0022, \u0022@azure/mcp@latest\u0022, \u0022server\u0022, \u0022start\u0022],\n env=None\n )\n \n async with stdio_client(server_params) as (read, write):\n async with ClientSession(read, write) as session:\n await session.initialize() # Fails with \u0022Connection closed\u0022\n \u0060\u0060\u0060\n\n3. Error occurs consistently with timeout/connection failures", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-npx", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/114" + }, + { + "IssueNumber": 1165, + "Title": "[BUG] Managed Lustre live tests fail with message: \u0022Failed to create AML file system\u0022", + "Body": "REDACTED\\nx-ms-routing-request-id: REDACTED\\nX-Content-Type-Options: REDACTED\\nX-Cache: REDACTED\\nX-MSEdge-Ref: REDACTED\\nDate: Thu, 13 Nov 2025 18:55:49 GMT\\nContent-Length: 217\\nContent-Type: application/json; charset=utf-8\\nExpires: -1\\n\u0022,\n \u0022stackTrace\u0022: \u0022 at Azure.Mcp.Tools.ManagedLustre.Services.ManagedLustreService.CreateFileSystemAsync(String subscription, String resourceGroup, String name, String location, String sku, Int32 sizeTiB, String subnetId, String zone, String maintenanceDay, String maintenanceTime, String hsmContainer, String hsmLogContainer, String importPrefix, String rootSquashMode, String noSquashNidLists, Nullable\\u00601 squashUid, Nullable\\u00601 squashGid, Boolean enableCustomEncryption, String keyUrl, String sourceVaultId, String userAssignedIdentityId, String tenant, RetryPolicyOptions retryPolicy) in /mnt/vss/_work/1/s/tools/Azure.Mcp.Tools.ManagedLustre/src/Services/ManagedLustreService.cs:line 381\\n at Azure.Mcp.Tools.ManagedLustre.Commands.FileSystem.FileSystemCreateCommand.ExecuteAsync(CommandContext context, ParseResult parseResult, CancellationToken cancellationToken) in /mnt/vss/_work/1/s/tools/Azure.Mcp.Tools.ManagedLustre/src/Commands/FileSystem/FileSystemCreateCommand.cs:line 113\u0022,\n \u0022type\u0022: \u0022Exception\u0022\n },\n \u0022duration\u0022: 0\n }\n\u0060\u0060\u0060\n\n### Expected behavior\n\nThe live test \u0060Azure.Mcp.Tools.ManagedLustre.LiveTests.ManagedLustreCommandTests.Should_create_azure_managed_lustre_no_blob_no_cmk\u0060 should succeed.\n\n### Actual behavior\n\nThe test fails with the error mentioned above.\n\n### Reproduction Steps\n\nRun live tests for all tools using [this pipeline](https://dev.azure.com/azure-sdk/internal/_build?definitionId=7866) with \u0060PublishTarget\u0060 set to \u0060internal\u0060.\n\n### Environment\n\n_No response_", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-managedlustre", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/1165" + }, + { + "IssueNumber": 1166, + "Title": "GitHub link in docker MCP Catalog points to archived repo", + "Body": "Title: GitHub link in docker MCP Catalog points to archived repo\n\nThe \u0022GitHub repository\u0022 link in https://hub.docker.com/mcp/server/azure/overview points to the old archived repo.", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-McpRegistry", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/1166" + }, + { + "IssueNumber": 1170, + "Title": "[BUG] foundry_agents_connect tool call fail with serialization error", + "Body": "Title: [BUG] foundry_agents_connect tool call fail with serialization error\n\n### Describe the bug\n\n\nI\u0027m using the Azure MCP server to query our AI Foundry agents.\n\nWhile it succesfully fetched the agent I wanted interacting with and created a message; \nI got the following response (after the result was returned from the agent in AI Foundry)\n\nThere was an error finding or calling tool and command.\nFailed to call namespace: foundry, command: foundry_agents_connect\nError: JsonTypeInfo metadata for type \u0027System.Collections.Generic.List\u00601[\u003C\u003Ef__AnonymousType0\u00604[System.String,System.String,System.Single,System.Collections.Generic.IReadOnlyList\u00601[Azure.AI.Agents.Persistent.FileSearchToolCallContent]]]\u0027 was not provided by TypeInfoResolver of type \u0027Azure.Mcp.Tools.Foundry.Commands.FoundryJsonContext\u0027. If using source generation, ensure that all root types passed to the serializer have been annotated with \u0027JsonSerializableAttribute\u0027, along with any types that might be serialized polymorphically. The unsupported member type is located on type \u0027System.Object\u0027. Path: $.Result.\n\nRun again with the \u0022learn=true\u0022 to get a list of available commands and their parameters.\n\n\nWhatever I do, I keep getting this issue.\n\nSo probably something is wrong here?\n\n### Expected behavior\n\nit should just return the data as is.\n\n### Actual behavior\n\nIt throws an error.\n\n### Reproduction Steps\n\nusing the Azure MCP server to query AI Foundry agents\n\n### Environment\n\n_No response_", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Foundry", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/1170" + }, + { + "IssueNumber": 126, + "Title": "Add commands: azmcp sql *", + "Body": "sql db tde | azmcp sql server database tde show/enable/disable | Transparent Data Encryption for databases. | Low\naz sql db threat-policy | azmcp sql server database threat-policy show/update | Threat detection policy. | Low\naz sql db list-usages | azmcp sql server database list-usages | Get resource usage stats for databases. | Medium\naz sql db replication-link | azmcp sql server database replication-link list/delete | Manage geo-replication links. | Low\naz sql db copy | azmcp sql server database copy | Duplicate a database within same/different server. | Low\naz sql db logs | azmcp sql server database logs list | Query diagnostic logs. | Low", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-SQL", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/126" + }, + { + "IssueNumber": 1281, + "Title": "Migrate Azure.Mcp.Tools.ConfidentialLedger.LiveTests LiveTests to Recorded Tests", + "Body": "Title: Migrate Azure.Mcp.Tools.ConfidentialLedger.LiveTests LiveTests to Recorded Tests\n\nMigrate tests within tools/Azure.Mcp.Tools.ConfidentialLedger/tests/Azure.Mcp.Tools.ConfidentialLedger.LiveTests/Azure.Mcp.Tools.ConfidentialLedger.LiveTests.csproj to recordings. Utilize copilot to assist with the migration process for Azure.Mcp.Tools.ConfidentialLedger.LiveTests.\r\n - For additional guidance check [the recorded tests document](https://github.com/microsoft/mcp/blob/main/docs/recorded-tests.md)\r\n\r\nThis task will be considered complete when the livetests can be invoked without the presence of a .testsettings.json file.\r\n\r\nSubmit a PR with your change and verify that the recorded tests are running in the [recorded test step](https://dev.azure.com/azure-sdk/internal/_build/results?buildId=5627747\u0026view=logs\u0026jobId=1e679852-4871-5dae-dd38-eb073eb853d4\u0026j=1e679852-4871-5dae-dd38-eb073eb853d4\u0026t=2f22000c-4a69-5b6e-fbac-d06c3b6f57da)", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-ConfidentialLedger", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/1281" + }, + { + "IssueNumber": 1284, + "Title": "Migrate Azure.Mcp.Tools.EventGrid.LiveTests LiveTests to Recorded Tests", + "Body": "Title: Migrate Azure.Mcp.Tools.EventGrid.LiveTests LiveTests to Recorded Tests\n\nMigrate tests within tools/Azure.Mcp.Tools.EventGrid/tests/Azure.Mcp.Tools.EventGrid.LiveTests/Azure.Mcp.Tools.EventGrid.LiveTests.csproj to recordings. Utilize copilot to assist with the migration process for Azure.Mcp.Tools.EventGrid.LiveTests.\r\n - For additional guidance check [the recorded tests document](https://github.com/microsoft/mcp/blob/main/docs/recorded-tests.md)\r\n\r\nThis task will be considered complete when the livetests can be invoked without the presence of a .testsettings.json file.\r\n\r\nSubmit a PR with your change and verify that the recorded tests are running in the [recorded test step](https://dev.azure.com/azure-sdk/internal/_build/results?buildId=5627747\u0026view=logs\u0026jobId=1e679852-4871-5dae-dd38-eb073eb853d4\u0026j=1e679852-4871-5dae-dd38-eb073eb853d4\u0026t=2f22000c-4a69-5b6e-fbac-d06c3b6f57da)", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-EventGrid", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/1284" + }, + { + "IssueNumber": 1289, + "Title": "Migrate Azure.Mcp.Tools.Kusto.LiveTests LiveTests to Recorded Tests", + "Body": "Title: Migrate Azure.Mcp.Tools.Kusto.LiveTests LiveTests to Recorded Tests\n\nMigrate tests within tools/Azure.Mcp.Tools.Kusto/tests/Azure.Mcp.Tools.Kusto.LiveTests/Azure.Mcp.Tools.Kusto.LiveTests.csproj to recordings. Utilize copilot to assist with the migration process for Azure.Mcp.Tools.Kusto.LiveTests.\r\n - For additional guidance check [the recorded tests document](https://github.com/microsoft/mcp/blob/main/docs/recorded-tests.md)\r\n\r\nThis task will be considered complete when the livetests can be invoked without the presence of a .testsettings.json file.\r\n\r\nSubmit a PR with your change and verify that the recorded tests are running in the [recorded test step](https://dev.azure.com/azure-sdk/internal/_build/results?buildId=5627747\u0026view=logs\u0026jobId=1e679852-4871-5dae-dd38-eb073eb853d4\u0026j=1e679852-4871-5dae-dd38-eb073eb853d4\u0026t=2f22000c-4a69-5b6e-fbac-d06c3b6f57da)", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Kusto", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/1289" + }, + { + "IssueNumber": 129, + "Title": "Add azmcp to glama.ai", + "Body": "Title: Add azmcp to glama.ai\n\nhttps://glama.ai/mcp/servers/@Azure/azure-mcp/score\n\nupdate 4/29 -- next step is to configure dockerfile and test locally before deployment.\n\u003Cimg width=\u0022478\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/a1ca8958-d988-48fb-b5f1-b2cc3e993f9e\u0022 /\u003E", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Docker, tools-McpRegistry", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/129" + }, + { + "IssueNumber": 1352, + "Title": "Add azmcp azuremanagedlustre filesystem autoexport-job list", + "Body": "Title: Add azmcp azuremanagedlustre filesystem autoexport-job list\n\nAdd azmcp azuremanagedlustre filesystem autoexport-job list", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-managedlustre", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/1352" + }, + { + "IssueNumber": 1354, + "Title": "[ONBOARD] Add Support for Microsoft.StorageSync Resource Provider to Azure MCP Server", + "Body": "Title: [ONBOARD] Add Support for Microsoft.StorageSync Resource Provider to Azure MCP Server\n\nHere\u2019s the updated **README.md draft** with **Intended Agent Scenarios** added and clearly highlighted:\n[Spec Repo](https://github.com/Azure/azure-rest-api-specs/blob/f9affc352dac71734122b927a47f4c3dde581a0b/specification/storagesync/resource-manager/Microsoft.StorageSync/StorageSync/stable/2022-09-01/storagesync.json)\n\n***\n\n# **Microsoft.StorageSync (Azure File Sync) \u2013 MCP CLI Reference**\n\n## **Overview**\n\nAzure File Sync extends on-premises file servers into Azure for hybrid storage, centralized management, and cloud tiering. This MCP integration provides full CLI coverage for automation and DevOps workflows, inspired by **Az.StorageSync** cmdlets.\n\n***\n\n## **Contacts**\n\n* **Primary (PM):** \u003Cankushb@microsoft.com\u003E\n* **Secondary (PM):** \u003Cgracekim@microsoft.com\u003E\n\n***\n\n## **Intended Agent Scenarios**\n\nAgents and developers can use these commands to:\n\n* **Provision hybrid storage**: Create Storage Sync Service, sync groups, and endpoints for branch offices or distributed environments.\n* **Enable Managed Identity (MI)**: Automate MI setup and RBAC propagation for secure access to Azure resources.\n* **Perform health checks and troubleshooting**: Run compatibility checks, export diagnostics, and resolve resource move or clone issues.\n* **Manage tiering and recall**: Configure tiering policies and recall tiered files for performance-sensitive workloads.\n* **Automate onboarding workflows**: Use CLI presets and templates in VS Code or GitHub Codespaces for quick deployment.\n* **Support operational excellence**: Execute evaluation and fixup commands during migrations or incident recovery.\n\n***\n\n## **Why This Matters**\n\n* **End-to-end automation:** Manage services, sync groups, endpoints, identity, RBAC, recall, and diagnostics from one CLI.\n* **Hybrid flexibility:** Combine local performance with Azure scalability.\n* **MI-first workflows:** Enable Managed Identities and RBAC propagation easily.\n* **Operational excellence:** Built-in evaluation and troubleshooting commands.\n\n***\n\n## **Command Groups**\n\nAll commands are under the namespace:", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Storage", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/1354" + }, + { + "IssueNumber": 337, + "Title": "[Namespace Mode/MCP-Native@0.5.8-alpha.5259970] \u0060PostgreSQL Service Test\u0060 failed to correctly trigger tool invocation", + "Body": "Title: [Namespace Mode/MCP-Native@0.5.8-alpha.5259970] \u0060PostgreSQL Service Test\u0060 failed to correctly trigger tool invocation\n\n**Description:**\nDuring testing of \u0060MCP-Native@0.5.8-alpha.5259970\u0060 in **Namespace** mode, postgresql service scenarios failed to trigger corresponding tool responses. Some test prompts fail intermittently rather than every time. The specific failure rates are as follows:\n\n- Test prompt: \u0060List all PostgreSQL databases in server mhpost in my subscription\u0060 (**Tested five times, failed four times**):\n\u003Cimg width=\u0022681\u0022 height=\u0022719\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/00683357-eb92-4e96-98db-15ac40c64040\u0022 /\u003E\n\n- Test prompt: \u0060Show me the configuration of PostgreSQL server in my subscription\u0060:\n\u003Cimg width=\u0022658\u0022 height=\u0022814\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/8aceccc3-c03b-433b-8d6a-ad0019187e4c\u0022 /\u003E\n\n- Test prompt: \u0060Show me if the parameter my PostgreSQL server mhpost has replication enabled\u0060:\n\u003Cimg width=\u0022679\u0022 height=\u0022372\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/2964effa-6258-4b23-bf9e-a3dad228ff92\u0022 /\u003E\n\u003Cimg width=\u0022686\u0022 height=\u0022529\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/a5113c79-1015-458c-8903-3ef5a57b8905\u0022 /\u003E\n\n- Test prompt: \u0060List all tables in the PostgreSQL database postgres in server mhpost\u0060:\n\u003Cimg width=\u0022680\u0022 height=\u0022763\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/eb236690-f5ae-445f-a7cf-ea6942d6217c\u0022 /\u003E\n\n**Steps to Reproduce:**\n1. Connect to [Feed](https://dev.azure.com/azure-sdk/public/_artifacts/feed/azure-sdk-for-js/Npm/@azure%2Fmcp-native/overview/0.5.8-alpha.5259970) then running \u0060npm install @azure/mcp-native@0.5.8-alpha.5259970\u0060.\n2. Run \u0060az login\u0060.\n4. Configure MCP server in namespace mode using the newly downloaded azmcp.exe.\n5. Start mcp server.\n6. Open GitHub Copilot in VS Code Insiders and [switch to Agent mode](https://code.visualstudio.com/docs/copilot/chat/chat-agent-mode).\n7. Click Refresh on the tools list, and only select the configured MCP Server Tools.\n8. Enter test prompts.\n\n**Environment:**\n- OS: Windows.\n- Vscode Insiders Version: 1.104.0\n- GitHub Copilot Chat Version: 0.31.2025090302", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Postgres", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/337" + }, + { + "IssueNumber": 355, + "Title": "Test AcrCommandTests.Should_list_acr_registries_by_subscription fails for invalid name regex", + "Body": "Title: Test AcrCommandTests.Should_list_acr_registries_by_subscription fails for invalid name regex\n\nACR live test AcrCommandTests.Should_list_acr_registries_by_subscription fails with the error:\n\n\u0060\u0060\u0060\nAssert.Matches() Failure: Pattern not found in value\nRegex: \u0022^[a-z0-9]\u002B(-[a-z0-9]\u002B)*$\u0022\nValue: \u0022appHostInfrastructureacrsdfbuycinvnqs\u0022\n\u0060\u0060\u0060\n\n\u0060appHostInfrastructureacrsdfbuycinvnqs\u0060 is being returned by the API but the test considers it an invalid name because of the 2 uppercase characters.\n\nUnless the MCP server is constructing the name, why are we asserting valid resource names in MCP tests?", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-containers", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/355" + }, + { + "IssueNumber": 386, + "Title": "ToolMetadata follow-ups", + "Body": "Title: ToolMetadata follow-ups\n\nThis is a follow up for comments on #377\n\nhttps://github.com/microsoft/mcp/pull/377#discussion_r2337243461\n\nThe question posed is how to configure \u0060OpenWorld\u0060 when the tool call will return a consistent value but may change as a service versions. Ex, finding the max size allowed for a Storage Blob is a consistent value for each service version, but it has change over time with new service version releases. What is this considered? \u0060OpenWorld = true\u0060 or \u0060OpenWorld = false\u0060?\n\nhttps://github.com/microsoft/mcp/pull/377#discussion_r2337219758\n\nThe question posed is how \u0060ToolMetadata\u0060 should be defined in a command. Should all properties be set, even if they\u0027re using the default value, or should values matching the defaults be omitted? And, if we always want to declare all properties, should the design of \u0060ToolMetadata\u0060 change to enforce that? Ex, should values be required as part of constructing the model.", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Core", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/386" + }, + { + "IssueNumber": 422, + "Title": "IntelliJ Plugin needs updating for 0.6.0\u002B", + "Body": "Title: IntelliJ Plugin needs updating for 0.6.0\u002B\n\n- [x] IntelliJ plugin needs to be updated to pick the correct trimmed binaries\n- [x] azure mcp needs to be mentioned in the changelog, package info, as appropriate\n- [x] Learning site needs to be linked from the Package description, similar to how the other IntelliJ Plugin entries have docs links:\n\n\u003Cimg width=\u00221206\u0022 height=\u0022205\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/bfe7e5b3-a8fc-4620-adf5-0bad0354b5bc\u0022 /\u003E\n\n\n- https://github.com/srnagar/azure-tools-for-java/blob/b825432cd14ef9e6e11abecf4b5ea34a002df1dc/PluginsAndFeatures/azure-toolkit-for-intellij/src/main/resources/META-INF/plugin.xml#L11", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-IntelliJ", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/422" + }, + { + "IssueNumber": 437, + "Title": "\u0060GetValueOrDefault\u0060 optional logic would assign default value if the pass-in optional parameter is empty", + "Body": "Title: \u0060GetValueOrDefault\u0060 optional logic would assign default value if the pass-in optional parameter is empty\n\nhttps://github.com/microsoft/mcp/blob/1329f4e1451ae2f6c52f002c32383f0407e2520a/core/Azure.Mcp.Core/src/Extensions/CommandResultExtensions.cs#L66\n\n\nwhen the optional value passed in \u0060var options = BindOptions(parseResult);\u0060 it will directly assign long? to 0, int? to 0, and bool? to false. however, they are null optional values. \n\ni.e. when I run \u0027azmcp sql db create -subscription sub --resource-group rg --server server1 --database testdb\u0027\n\nthe \u0060GetValueOrDefault\u0060 will auto assign optional values: \n- long? --max-size-bytes to 0, \n- int? sku-capacity to 0, \n- and bool? --zone-redundan to false", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Core", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/437" + }, + { + "IssueNumber": 482, + "Title": "Flaky Monitor CI validation tests", + "Body": "Title: Flaky Monitor CI validation tests\n\nThe CI validation live tests for Monitor are flaky and should be investigated.\n\nMonitor has a test which times out after 300 seconds (5 minutes) and should be checked if it should continue to be ran or should be modified so it doesn\u0027t time out.", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Monitor", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/482" + }, + { + "IssueNumber": 493, + "Title": "Add azmcp sql server database export/import", + "Body": "Title: Add azmcp sql server database export/import\n\n[No description provided]", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-SQL", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/493" + }, + { + "IssueNumber": 154, + "Title": "Implement Azure SQL Database Recommendations Tool", + "Body": "Title: Implement Azure SQL Database Recommendations Tool\n\nThis command will analyze the database and make index recommendations.\n\nIn an effort to make MCP tools more effective then just listing attributes we want to have them be useful to the developer.\n\nThis tool will look at a database and help the user apply db recommendations right from copilot.\n\nThe azmcp command will be \u0060azmcp sql db advise\u0060", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-SQL", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/154" + }, + { + "IssueNumber": 520, + "Title": "Flaky Kusto CI validation live tests", + "Body": "Title: Flaky Kusto CI validation live tests\n\nThe CI validation live tests for Kusto should be investigated.\n\nKusto appears to have a resource deployment issue that happens periodically.", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Kusto", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/520" + }, + { + "IssueNumber": 544, + "Title": "\u0060IntelliJ | Install Azure MCP Server\u0060 badge", + "Body": "Title: \u0060IntelliJ | Install Azure MCP Server\u0060 badge\n\n### Describe the bug\n\nIt\u0027s awesome having install badges for 3 of our 4 IDE extensions now:\n\n\u003Cimg width=\u0022646\u0022 height=\u0022188\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/65db814c-94d0-4716-8892-c2f072e7d4eb\u0022 /\u003E\n\nBut we\u0027re missing the \u0060IntelliJ\u0060 plugin. Can we add an install badge for it?\n\n### Expected behavior\n\nAll IDE Extensions/Plugins have badges on both the root \u0060/README.md\u0060 and the \u0060/servers/Azure.Mcp.Server/README.md\u0060", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-IntelliJ", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/544" + }, + { + "IssueNumber": 572, + "Title": "[Tool Description] Improve Event Grid tool description for better LLM selection", + "Body": "Title: [Tool Description] Improve Event Grid tool description for better LLM selection\n\nImprove Event Grid tool description to have a confidence score \u003E0.6", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-EventGrid", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/572" + }, + { + "IssueNumber": 694, + "Title": "[BUG] Azure MCP takes up about 30G of memory and about 89% of CPU without even starting", + "Body": "Title: [BUG] Azure MCP takes up about 30G of memory and about 89% of CPU without even starting\n\n### Describe the bug\n\nHad a look at my processes when I noticed something was eating up all my ram and noticed the \u0027azmcp\u0027 process eating about 32G of virtual memory. \n\nI didn\u0027t get a screenshot of that, but I did get a screenshot of \u0027ps auxw\u0027 where azmcp is taking up about 89% of my cpu (see attached).\n\n\u003Cimg width=\u00221055\u0022 height=\u002244\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/726859a4-68d1-4d3a-8267-253afcd137ca\u0022 /\u003E\n\n\n\n### Expected behavior\n\nNot use all the resources on my machine.\n\n### Actual behavior\n\nUsed all the resources on my machine\n\n### Reproduction Steps\n\nGiven the user has a Mac m4 mini, install vscode then install the Azure map server (preview). \n\n### Environment\n\nMachine Specs:\n\n- Apple m4 mini, 32GB ram\n- Azure MCP installed via vscode\n- no end-user configuration of the MCP server (nothing changed from the vscode defaults)", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Core", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/694" + }, + { + "IssueNumber": 706, + "Title": "[BUG] NuGet Gallery formatting issue", + "Body": "Title: [BUG] NuGet Gallery formatting issue\n\n\u003Cimg width=\u0022689\u0022 height=\u0022326\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/fdc5d004-c9a7-41ea-9d69-42f166d6556a\u0022 /\u003E\n\nhttps://www.nuget.org/packages/Azure.Mcp\n\nThis exists as of Thursday October 2nd -- 0.8.4", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-NuGet", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/706" + }, + { + "IssueNumber": 722, + "Title": "AI foundry unable to connect with Azure MCP server", + "Body": "Title: AI foundry unable to connect with Azure MCP server\n\nIs there any MCP.json file for Azure MCP server available ? so instead of adding all the tools one by one and creating an instruction for AI Ageny to use. we can just use that file to activate all the tools in one go and Is there Container image to deploy that. I do not want to use the Github co-pilot to do that. we want to use that in a production and we want to use our own client to perform the deployment and other tasks via AI foundry.", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "remote-mcp", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/722" + }, + { + "IssueNumber": 752, + "Title": "[TELEMETRY][Azure MCP] Collect server startup command line switches", + "Body": "Title: [TELEMETRY][Azure MCP] Collect server startup command line switches\n\nRelated to https://github.com/microsoft/mcp/issues/560\n\n\u0022Can we add a telemetry log event for the startup switches set?\u0022\n\nThe first sentence of #560 has been addressed with https://github.com/microsoft/mcp/pull/738 but the 2nd sentence hasn\u0027t yet. \n\nOpening a new bug rather than re-activating the old bug.\n\n## Changes\n\nNew telemetry event, \u0022ServerStarted\u0022 is being published. These are the fields published by the \u0022ServerStarted\u0022 activity.\n\n| Name | Description | Example values |\n| -- | -- | -- |\n| \u0060transport\u0060 | Transport mechanism for the server. | \u0022stdio\u0022 |\n| \u0060servermode\u0060 | Mode for the server. | \u0022namespace\u0022, \u0022consolidated\u0022, \u0022all\u0022 |\n| \u0060isreadonly\u0060 | If the server should only expose \u0022read-only\u0022 tools. | true |\n| \u0060isdebug\u0060 | If debug is enabled | |true |\n| \u0060insecuredisableelicitation\u0060 | If server should disable elicitation? A value of \u0022true\u0022 means the elicitation is accepted without user confirmation. | true |\n| \u0060enableinsecuretransports\u0060 | If insecure transports are enabled. | false |\n| \u0060namespace\u0060 | Comma-separated string of specific \u0022toolareas\u0022 to expose. Can be null. If set, only those tool areas are exposed. | \u0022storage,keyvault,kusto\u0022 |\n| \u0060tool\u0060 | Comma-separated string of specific MCP tools to expose. Can be null. If set, only tools with matching MCP tool names are shown. | \u0022storage_account_get,subscription_list,acr_registry_get\u0022 |", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Telemetry", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/752" + }, + { + "IssueNumber": 757, + "Title": "Improvement: Flatten azmcp_redis_cache_accesspolicy_list and azmcp_redis_cluster_database_list into azmcp_redis_list", + "Body": "Title: Improvement: Flatten azmcp_redis_cache_accesspolicy_list and azmcp_redis_cluster_database_list into azmcp_redis_list\n\nIn order to streamline the data returned for Redis resources, the data from \u0060azmcp_redis_cache_accesspolicy_list\u0060 and \u0060azmcp_redis_cluster_database_list\u0060 should be returned as part of the Redis cache resource details returned from \u0060azmcp_redis_list\u0060.", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Redis", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/757" + }, + { + "IssueNumber": 789, + "Title": "[Remote] Document Remote Deployment", + "Body": "Title: [Remote] Document Remote Deployment\n\nUpdate the TOC and add a new \u0060Self-Hosted Remote\u0060 section covering Azure Functions, Azure App Service, Azure Container Apps (ACA), and Azure Kubernetes Service (AKS)\n\n\u003Cimg width=\u0022398\u0022 height=\u0022530\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/a0cc8a53-2e48-4f49-991c-615ef7531fcd\u0022 /\u003E\n\n- include links to \u0060bicep file\u0060, \u0060azmcp container image\u0060, and/or \u0060azd command\u0060 as appropriate for each compute platform\n\n\u0060\u0060\u0060\n## Installation\n - IDE\n - VS Code (Recommended)\n - Visual Studio 2022\n - IntelliJ IDEA\n - Manual Setup\n - Local Server\n - NuGet\n - NPM\n - Docker\n - Remote Server\n \u003Cblurb on AI Foundry Agent Platform and Copilot Studio Agent Platform\u003E\n - Azure Container Apps \n - Azure App Service\n - Azure Functions\n - Azure Kubernetes Service\n - Manual Self-Hosting\n\u0060\u0060\u0060", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "remote-mcp", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/789" + }, + { + "IssueNumber": 921, + "Title": "Flakey SQL test", + "Body": "Title: Flakey SQL test\n\n\u003Cimg width=\u0022972\u0022 height=\u0022372\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/a54a9255-6b42-4c44-98c3-1b2ae7c0cc19\u0022 /\u003E\nhttps://github.com/microsoft/mcp/pull/913/checks?check_run_id=53378007752", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-SQL", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/921" + }, + { + "IssueNumber": 943, + "Title": "[BUG] Test failue: Azure.Mcp.Tools.Sql.UnitTests.Database.DatabaseUpdateCommandTests.ExecuteAsync_ValidatesRequiredParameters", + "Body": "Title: [BUG] Test failue: Azure.Mcp.Tools.Sql.UnitTests.Database.DatabaseUpdateCommandTests.ExecuteAsync_ValidatesRequiredParameters\n\n### Describe the bug\n\n**Test failure:**\n\nFailed Azure.Mcp.Tools.Sql.UnitTests.Database.DatabaseUpdateCommandTests.ExecuteAsync_ValidatesRequiredParameters(commandArgs: \u0022--resource-group rg --server server1 --database te\u0022\u00B7\u00B7\u00B7, shouldSucceed: False, expectedError: \u0022Missing required options\u0022) [1 ms]\n Error Message:\n Assert.NotEqual() Failure: Values are equal\nExpected: Not OK\nActual: OK\n Stack Trace:\n at Azure.Mcp.Tools.Sql.UnitTests.Database.DatabaseUpdateCommandTests.ExecuteAsync_ValidatesRequiredParameters(String commandArgs, Boolean shouldSucceed, String expectedError) in /mnt/vss/_work/1/s/tools/Azure.Mcp.Tools.Sql/tests/Azure.Mcp.Tools.Sql.UnitTests/Database/DatabaseUpdateCommandTests.cs:line 287\n--- End of stack trace from previous location ---\n\n**Build:** https://dev.azure.com/azure-sdk/internal/_build/results?buildId=5491937\u0026view=logs\u0026j=1e679852-4871-5dae-dd38-eb073eb853d4\u0026t=51598406-2d78-56ba-c023-a1fb19c0bfbb\n\n### Expected behavior\n\nTest should pass\n\n### Actual behavior\n\nTest failed\n\n### Reproduction Steps\n\nRun failed test.\n\n### Environment\n\n_No response_", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-SQL", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/943" + }, + { + "IssueNumber": 1045, + "Title": "[BUG] MCP server fails to start in Cursor 2.0 with \u0027command not found\u0027 and timeout errors", + "Body": "Title: [BUG] MCP server fails to start in Cursor 2.0 with \u0027command not found\u0027 and timeout errors\n\n### Describe the bug\n\nWhen running the Azure MCP server in Cursor 2.0, the server starts but then quickly stops with multiple errors logged in the output. These include \u0027command not found\u0027 for \u0027method:initialize\u0027 and \u0027jsonrpc:2.0\u0027, and \u0027Request timed out\u0027, preventing the service from functioning. The setup uses the .cursor/mcp.json workspace configuration (see below). Full error output:\n\n\u0060\u0060\u0060\n2025-11-04 16:56:52.170 [info] Handling CreateClient action\n2025-11-04 16:56:52.170 [info] Starting new stdio process with command: npx -y @azure/mcp@latest server start\n2025-11-04 16:56:52.170 [info] Handling ReloadClient action\n2025-11-04 16:56:52.170 [info] Starting new stdio process with command: npx \n2025-11-04 16:56:52.513 [error] sh: line 1: method:initialize: command not found\n\n2025-11-04 16:56:53.732 [info] Successfully connected to stdio server\n2025-11-04 16:56:53.732 [info] Storing stdio client project-0-scope-BRj3dd-Azure MCP Server\n2025-11-04 16:56:53.732 [info] CreateClient completed, server stored: true\n2025-11-04 16:56:53.757 [info] Handling ListOfferings action, server stored: true\n2025-11-04 16:56:53.757 [info] Connected to stdio server, fetching offerings\n2025-11-04 16:56:53.787 [info] Found 47 tools, 0 prompts, and 0 resources\n2025-11-04 16:57:52.171 [info] Client closed for command\n2025-11-04 16:57:52.172 [error] Failed to reload client: MCP error -32001: Request timed out\n2025-11-04 16:57:52.172 [error] sh: line 2: jsonrpc:2.0: command not found\n\n2025-11-04 16:57:52.179 [info] Client closed for command\n2025-11-04 16:57:52.183 [info] Handling ListOfferings action, server stored: true\n2025-11-04 16:57:52.183 [info] Connected to stdio server, fetching offerings\n2025-11-04 16:57:52.188 [info] Found 47 tools, 0 prompts, and 0 resources\n\u0060\u0060\u0060\n\nConfiguration (.cursor/mcp.json):\n\n\u0060\u0060\u0060\n{\n \u0022mcpServers\u0022: {\n \u0022Azure MCP Server\u0022: {\n \u0022type\u0022: \u0022stdio\u0022,\n \u0022command\u0022: \u0022npx\u0022,\n \u0022args\u0022: [\n \u0022-y\u0022,\n \u0022@azure/mcp@latest\u0022,\n \u0022server\u0022,\n \u0022start\u0022\n ]\n }\n }\n}\n\n### Expected behavior", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Core", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/1045" + }, + { + "IssueNumber": 1048, + "Title": "Migrate azd related tool out of azure mcp", + "Body": "Title: Migrate azd related tool out of azure mcp\n\nazd is looking to host azd mcp and want to migrate azd related tool in C2C out of [Azure MCP](https://github.com/microsoft/mcp/tree/main/tools/Azure.Mcp.Tools.Deploy/src/Commands)\nThe table between azd tool in azure mcp vs azd mcp (WIP)\n| Priority | C2C Tool | C2C Tool Description/Prompt | \u0060azd\u0060 Tool | \u0060azd\u0060 Tool Description | Missing features |\n| --- | --- | --- | --- | --- | --- |\n| **Low** | \u0060deploy_app_logs_get\u0060 | Retrieves application logs from Azure for apps deployed via Azure Developer CLI (azd). Automatically discovers Log Analytics workspaces and resources (rg, resources, time periods). Shows logs from Container Apps, App Services, and Function Apps | None | N/A | **Completely Missing** - No MCP tool exists for retrieving application logs from Log Analytics workspace. Only \u0060azd monitor\u0060 command opens browser to Application Insights but doesn\u0027t fetch logs directly. **Tracking issue in https://github.com/Azure/azure-dev/issues/5781** |\n| **Checked** | \u0060deploy_architecture_diagram_generate\u0060 | Generates Azure service architecture mermaid diagrams for applications. Analyzes your application topology and recommends appropriate Azure services. Creates visual representations of your deployment architecture | \u0060azd_architecture_planning\u0060 | Returns instructions for selecting appropriate Azure services for discovered application components and designing infrastructure architecture. | **Partially Missing** - \u0060azd_architecture_planning\u0060 provides service selection guidance but **missing actual Mermaid diagram generation**. **Discussed with @wbreza and we agreed that current azd tool is sufficient.** |\n| **Checked** | \u0060deploy_iac_rules_get\u0060 | Provides guidelines for creating Bicep/Terraform files. Ensures IaC files are compatible with azd tool (like files main.parameter.json). Delivers best practices for Azure resource deployment | \u0060azd_iac_generation_rules\u0060 | Returns comprehensive rules and guidelines for generating Bicep Infrastructure as Code files and modules for AZD projects. | **Covered** |\n| **Checked** | \u0060deploy_plan_get\u0060 | Creates comprehensive deployment plans for Azure applications (using azd with IaC).", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Azd", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/1048" + }, + { + "IssueNumber": 1073, + "Title": "MQ: Enable Azure MCP Server to Query Recent Service Updates (e.g., Key Vault changes in last X days)", + "Body": "Title: MQ: Enable Azure MCP Server to Query Recent Service Updates (e.g., Key Vault changes in last X days)\n\nI\u2019m a Content Developer in the Microsoft Learn organization, and we would find this feature useful for keeping documentation up-to-date.\n\nOur team regularly needs to identify recent changes to Azure services and products so we can update Learn content accordingly. Today, this requires manual monitoring of update feeds and release notes. If Azure MCP Server could expose a tool for querying recent service updates (e.g., \u201CWhat features/changes occurred for Key Vault over the last 14 days?\u201D), it would enable two key workflows:\n\n- Writers calling the tool directly to check for changes before updating docs.\n- AI agents programmatically invoking the tool to detect changes and automatically create pull requests for documentation updates.\n\nI propose an MCP tool (or an extension to an existing one) that can:\n\n- Query official Azure Updates feeds and/or service release notes\n- Filter by service name and time window (e.g., last 14 days)\n- Return structured results (title, date, summary, link, category)\n\nCustomers would also benefit from this capability because it mirrors the value they already find in changelogs and \u201CWhat\u2019s New\u201D articles. \n\nThanks for the consideration!", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Core", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/1073" + }, + { + "IssueNumber": 1109, + "Title": "Add azmcp azuremanagedlustre filesystem autoimport-job create", + "Body": "Title: Add azmcp azuremanagedlustre filesystem autoimport-job create\n\nAdd azmcp azuremanagedlustre filesystem autoimport-job create", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-managedlustre", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/1109" + }, + { + "IssueNumber": 1132, + "Title": "[BUG] FastTranscriptionRecognizer setting default Authorization outbound header is not remote MCP server safe", + "Body": "Title: [BUG] FastTranscriptionRecognizer setting default Authorization outbound header is not remote MCP server safe\n\n### Describe the bug\n\nFastTranscriptionRecognizer is a singleton DI service that has an \u0060HttpClient\u0060 field that is reused and uses\n\n\u0060\u0060\u0060csharp\n_httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue(\u0022Bearer\u0022, accessToken.Token);\n\u0060\u0060\u0060\n\nIn the remote MCP server with on-behalf-of outbound authentication, this presents a race condition that could allow two different MCP clients to use the same outbound access token which could over-privilege one of the callers.\n\n### Expected behavior\n\nFastTranscriptionRecognizer should get an instance of \u0060HttpClient\u0060 from \u0060IHttpClientService\u0060 or \u0060IHttpClientFactory\u0060 (choice requires investigation) as per [.NET best practices](https://learn.microsoft.com/en-us/dotnet/core/extensions/httpclient-factory), and it must send the authorization header only for this single request without causing side-effects to other \u0060HttpClient\u0060 instances.\n\n### Actual behavior\n\nPossible security bug\n\n### Reproduction Steps\n\nN/A\n\n### Environment\n\n_No response_", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "remote-mcp, tools-Speech", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/1132" + }, + { + "IssueNumber": 1223, + "Title": "Fix TODO comments in aca-foundry-managed-identity docs", + "Body": "Title: Fix TODO comments in aca-foundry-managed-identity docs\n\nRegarding [mcp/servers/Azure.Mcp.Server/azd-templates/aca-foundry-managed-identity at main \u00B7 microsoft/mcp](https://github.com/microsoft/mcp/tree/main/servers/Azure.Mcp.Server/azd-templates/aca-foundry-managed-identity/)\n\n\n\n1. there\u0027s still a \u0022TODO\u0022 or two comment in the markdown file\n2. We should update both docs to have manual instructions too for customers who can\u0027t use AZD. Just like how our root README.md does for people who can\u0027t/won\u0027t use a VSIX", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "remote-mcp", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/1223" + }, + { + "IssueNumber": 1303, + "Title": "Migrate Azure.Mcp.Tools.VirtualDesktop.LiveTests LiveTests to Recorded Tests", + "Body": "Title: Migrate Azure.Mcp.Tools.VirtualDesktop.LiveTests LiveTests to Recorded Tests\n\nMigrate tests within tools/Azure.Mcp.Tools.VirtualDesktop/tests/Azure.Mcp.Tools.VirtualDesktop.LiveTests/Azure.Mcp.Tools.VirtualDesktop.LiveTests.csproj to recordings. Utilize copilot to assist with the migration process for Azure.Mcp.Tools.VirtualDesktop.LiveTests.\r\n - For additional guidance check [the recorded tests document](https://github.com/microsoft/mcp/blob/main/docs/recorded-tests.md)\r\n\r\nThis task will be considered complete when the livetests can be invoked without the presence of a .testsettings.json file.\r\n\r\nSubmit a PR with your change and verify that the recorded tests are running in the [recorded test step](https://dev.azure.com/azure-sdk/internal/_build/results?buildId=5627747\u0026view=logs\u0026jobId=1e679852-4871-5dae-dd38-eb073eb853d4\u0026j=1e679852-4871-5dae-dd38-eb073eb853d4\u0026t=2f22000c-4a69-5b6e-fbac-d06c3b6f57da)", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-VirtualDesktop", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/1303" + }, + { + "IssueNumber": 140, + "Title": "Add Cosmos Auth Instructions to Auth Section", + "Body": "Title: Add Cosmos Auth Instructions to Auth Section\n\nIn order to use the Cosmos data plane tools, the user must be assigned specific roles because we rely on RBAC.\n\nHere\u0027s a generic script that has worked for users:\n\n$user = \u0027xx@microsoft.com\u0027\n$resourcegroup= \u0022rgname\u0022;\n$account= \u0022accountname\u0022 \n\n$resourceId = az cosmosdb show --resource-group $resourcegroup --name $account --query \u0022id\u0022 --output tsv \n$roleId = az cosmosdb sql role definition show -a $account -g $resourcegroup -i 00000000-0000-0000-0000-000000000002 --query id -o tsv\n$principalId = az ad user show --id $user --query \u0027id\u0027 --output tsv\naz cosmosdb sql role assignment create --resource-group $resourcegroup --account-name $account --principal-id $principalId --role-definition-id $roleId --scope $resourceId", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-CosmosDB", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/140" + }, + { + "IssueNumber": 334, + "Title": "[Single Mode/MCP-Native@0.5.8-alpha.5259970] \u0060Monitor Service Test\u0060 failed to correctly trigger tool invocation", + "Body": "Title: [Single Mode/MCP-Native@0.5.8-alpha.5259970] \u0060Monitor Service Test\u0060 failed to correctly trigger tool invocation\n\n**Description:**\nDuring testing of \u0060MCP-Native@0.5.8-alpha.5259970\u0060 in **Single** mode, Monitor service scenarios failed to trigger corresponding tool responses. The specific failure rates are as follows:\n\n- Test prompt: \u0060Show me the Log Analytics workspaces in my subscription\u0060:\n\u003Cimg width=\u0022686\u0022 height=\u0022474\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/6d45498f-071e-40ea-a3be-0ce97fc130bc\u0022 /\u003E\n\n- Test prompt: \u0060Show me the logs for the past hour in the Log Analytics workspace\u0060:\n\u003Cimg width=\u0022626\u0022 height=\u0022669\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/4b950950-cb6a-4b83-a584-f73695dfd126\u0022 /\u003E\n\u003Cimg width=\u0022628\u0022 height=\u0022423\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/4361d17e-4e9d-4712-8310-e609b149dc97\u0022 /\u003E\n\n**Steps to Reproduce:**\n1. Connect to [Feed](https://dev.azure.com/azure-sdk/public/_artifacts/feed/azure-sdk-for-js/Npm/@azure%2Fmcp-native/overview/0.5.8-alpha.5259970) then running \u0060npm install @azure/mcp-native@0.5.8-alpha.5259970\u0060.\n2. Run \u0060az login\u0060.\n3. Configure MCP server in single mode using the newly downloaded azmcp.exe.\n4. Start mcp server.\n5. Open GitHub Copilot in VS Code Insiders and [switch to Agent mode](https://code.visualstudio.com/docs/copilot/chat/chat-agent-mode).\n6. Click Refresh on the tools list, and only select the configured MCP Server Tools.\n7. Enter test prompts.\n\n**Environment:**\n- OS: Windows.\n- Vscode Insiders Version: 1.104.0\n- GitHub Copilot Chat Version: 0.31.2025090302\n- Large Language Model: GPT-4.1\n\n**Expected Behavior:**\nIn the single mode of MCP-Native@0.5.8-alpha.5259970, all Monitor Service-related operations can stably and correctly trigger the expected tool operations.\n\n@joshfree for notification", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Monitor", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/334" + }, + { + "IssueNumber": 336, + "Title": "[Namespace and Single Mode/MCP-Native@0.5.8-alpha.5259970] Failed to show the details of service bus subscription", + "Body": "Title: [Namespace and Single Mode/MCP-Native@0.5.8-alpha.5259970] Failed to show the details of service bus subscription\n\n**Description:**\nDuring testing of \u0060MCP-Native@0.5.8-alpha.5259970\u0060 in **Namespace** and **Single** mode, entering the test prompt \u0060Show me the details of service bus \u003Cservice_bus_name\u003E subscription \u003Csubscription_name\u003E\u0060, the response fails with the following error:\n- Namespace Mode:\n\u003Cimg width=\u0022650\u0022 height=\u0022460\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/43f858b6-634f-4863-bec2-120dd68237ed\u0022 /\u003E\n\n- Single Mode:\n\u003Cimg width=\u0022631\u0022 height=\u0022680\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/90544266-37e9-481e-89f9-48b5bde216f2\u0022 /\u003E\n\n**Steps to Reproduce:**\n1. Connect to [Feed](https://dev.azure.com/azure-sdk/public/_artifacts/feed/azure-sdk-for-js/Npm/@azure%2Fmcp-native/overview/0.5.8-alpha.5259970) then running \u0060npm install @azure/mcp-native@0.5.8-alpha.5259970\u0060.\n2. Run \u0060az login\u0060.\n3. Configure MCP server in namespace or single mode using the newly downloaded azmcp.exe.\n4. Start mcp server.\n5. Open GitHub Copilot in VS Code Insiders and [switch to Agent mode](https://code.visualstudio.com/docs/copilot/chat/chat-agent-mode).\n6. Click Refresh on the tools list, and only select the configured MCP Server Tools.\n7. Enter test prompts.\n\n**Environment:**\n- OS: Windows.\n- Vscode Insiders Version: 1.104.0\n- GitHub Copilot Chat Version: 0.31.2025090302\n- Large Language Model: GPT-4.1\n\n**Expected Behavior:**\nIn the namespace and single mode of MCP-Native@0.5.8-alpha.5259970, It can successfully show the details of service bus subscription.\n\n@joshfree for notification", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-ServiceBus", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/336" + }, + { + "IssueNumber": 342, + "Title": "[Linux/MCP-Native@0.5.8-alpha.5259970] The results of listing the secrets of the key vault include the certificates", + "Body": "Title: [Linux/MCP-Native@0.5.8-alpha.5259970] The results of listing the secrets of the key vault include the certificates\n\n**Description:**\nOn a Linux x64 machine, executing the prompt \u0060List all secrets in the key vault mhkey in my subscription\u0060 in \u0060all\u0060, \u0060namespace\u0060, or \u0060single\u0060 mode returns not only secrets but also certificates, as shown below:\n\u003Cimg width=\u0022586\u0022 height=\u0022779\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/1a857fbb-4c3e-4e89-a715-e8015a8c9dde\u0022 /\u003E\n\n**Steps to Reproduce:**\n1. Connect to [Feed](https://dev.azure.com/azure-sdk/public/_artifacts/feed/azure-sdk-for-js/Npm/@azure%2Fmcp-native/overview/0.5.8-alpha.5259970) then running \u0060npm install @azure/mcp-native@0.5.8-alpha.5259970\u0060.\n2. Run \u0060az login\u0060.\n3. Configure MCP server in \u0060namespace/single/all\u0060 mode using the newly downloaded azmcp.exe.\n4. Start mcp server.\n5. Open GitHub Copilot in VS Code Insiders and [switch to Agent mode](https://code.visualstudio.com/docs/copilot/chat/chat-agent-mode).\n6. Click Refresh on the tools list, and only select the configured MCP Server Tools.\n7. Enter test prompts \u0060List all secrets in the key vault mhkey in my subscription\u0060.\n\n**Environment:**\n- OS: Linux x64.\n- Vscode Insiders Version: 1.104.0\n- GitHub Copilot Chat Version: 0.31.2025090302\n- Large Language Model: GPT-4.1\n\n**Expected Behavior:**\nWhen entering the List all secrets command only secrets should be returned.\n\n@joshfree for notification", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-KeyVault", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/342" + }, + { + "IssueNumber": 347, + "Title": "Add logging message for retry fall through case.", + "Body": "Title: Add logging message for retry fall through case.\n\nInvestigate this feedback from a recent pr\r\n\r\nShould there be a log message for the else case or anything like that added for debugging / user awareness?\r\n\r\n_Originally posted by @joshfree in https://github.com/microsoft/mcp/pull/48#discussion_r2324626815_", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Core", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/347" + }, + { + "IssueNumber": 388, + "Title": "Add command: azmcp [speech] [stt] [recognize]", + "Body": "Title: Add command: azmcp [speech] [stt] [recognize]\n\n[No description provided]", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Speech", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/388" + }, + { + "IssueNumber": 455, + "Title": "[BUG] Docker: Azure MCP server exits unexpectedly", + "Body": "- AZURE_IDENTITY_DISABLE_VISUAL_STUDIO_CREDENTIAL=true\n - AZURE_IDENTITY_DISABLE_VISUAL_STUDIO_CODE_CREDENTIAL=true\n - AZURE_IDENTITY_DISABLE_AZURE_CLI_CREDENTIAL=true\n - AZURE_IDENTITY_DISABLE_AZURE_POWER_SHELL_CREDENTIAL=true\n\u0060\u0060\u0060\n\n### Environment\n\nVisual Studio Version: 1.103.2 (Universal)\nOS: Darwin arm64 24.6.0", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Docker", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/455" + }, + { + "IssueNumber": 50, + "Title": "[Azure MCP] Add command: \u0060azmcp azuremanagedlustre filesystem create\u0060", + "Body": "Title: [Azure MCP] Add command: \u0060azmcp azuremanagedlustre filesystem create\u0060\n\n[No description provided]", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-managedlustre", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/50" + }, + { + "IssueNumber": 152, + "Title": "Kusto query fails when the sub id in the input query is enclosed in double quotes.", + "Body": "Title: Kusto query fails when the sub id in the input query is enclosed in double quotes.\n\nIt works if the id is single quoted.\n\nError with double quoted string:\n\n{\u0022status\u0022:500,\u0022message\u0022:\u0022Syntax error: Missing expression.", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Kusto", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/152" + }, + { + "IssueNumber": 170, + "Title": "[NuGet] Publish azmcp as a dotnet global tool", + "Body": "Title: [NuGet] Publish azmcp as a dotnet global tool\n\nTaking in consideration this is a dotnet command line application, are you considering to publish as a global tool that we can install as long as the dotnet sdk is installed?", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-McpRegistry, tools-NuGet", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/170" + }, + { + "IssueNumber": 173, + "Title": "Docker usage with EntraID Auth", + "Body": "Title: Docker usage with EntraID Auth\n\nWondering if it\u0027s possible to run the server in a docker container, but authenticate using EntraID without passing explicit credentials via a .env?\n\ne.g. using a credential obtained like this:\n\n\u0060\u0060\u0060\ncredential = get_bearer_token_provider(ChainedTokenCredential(\n AzureCliCredential(),\n DefaultAzureCredential(\n exclude_cli_credential=True,\n exclude_environment_credential=True,\n exclude_shared_token_cache_credential=True,\n exclude_developer_cli_credential=True,\n exclude_powershell_credential=True,\n exclude_interactive_browser_credential=True,\n exclude_visual_studio_code_credentials=True,\n \n managed_identity_client_id=os.environ.get(\u0022DEFAULT_IDENTITY_CLIENT_ID\u0022),\n )\n),scope)\n\u0060\u0060\u0060", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Docker", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/173" + }, + { + "IssueNumber": 175, + "Title": "Agent keeps calling MCP tool when the output is large", + "Body": "Title: Agent keeps calling MCP tool when the output is large\n\nI\u0027m developing a new MCP tool and noticed that when the output of the tool is large, the agent repeatedly invokes the tool even though the tool returns the entire output.\n\nTo Reproduce the issue:\n1. Replace the content of \u0060azure-best-practices.txt\u0060 file in this repo with content from [here](https://raw.githubusercontent.com/Azure/bicep-registry-modules/refs/heads/main/avm/res/storage/storage-account/README.md)\n2. Build and restart the MCP server\n3. Enter the following prompt in chat: \u0022show me best practices on using azure sdk. Use a MCP tool if one is available\u0022.\n\nBelow is the screenshot:\n\u003Cimg width=\u0022403\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/933057db-bb15-49fc-aa90-6a50a2c11056\u0022 /\u003E", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Core", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/175" + }, + { + "IssueNumber": 186, + "Title": "[ONBOARD] Azure Kubernetes Service", + "Body": "Title: [ONBOARD] Azure Kubernetes Service\n\n### Service / Tool Name\n\nAzure.Kubernetes\n\n### Contacts\n\nTBD\n\n### Intended Agent Scenarios\n\n\nHere\u0027s the set of commands exposed by the Static Web Apps VS Code extension. This is a great place to get started on potential capabilities/scenarios to support.\n\n## \uD83D\uDEE0\uFE0F Setup \u0026 Configuration\n- Attach ACR to Cluster \n- Select Cluster \n- Select Subscriptions \n- Select Tenant \n- Sign in to Azure \n- Command to Create an AKS Cluster \n\n## \uD83E\uDDEA Diagnostics \u0026 Tools\n- Compare AKS Cluster \n- Run AKS Periscope \n\n\n### Timeline\n\nTBD", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Kubernetes", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/186" + }, + { + "IssueNumber": 202, + "Title": "Add command: azmcp [startups] [start] [deploy]", + "Body": "Title: Add command: azmcp [startups] [start] [deploy]\n\n### Service / Tool Name\n\nStartups.Deploy\n\n### Contacts\n\nSophia Lin (t-sophlin)\n\n### Intended Agent Scenarios\n\nThe Startups team is creating a deploy command to streamline the deployment process for startup developers. Some use cases are for deploying code files to a storage account or setting up startup infrastructure using an ARM template.\n\n### Timeline\n\nJuly 2025", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Startups", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/202" + }, + { + "IssueNumber": 226, + "Title": "Feature: Replace all ARM resource read operations with the ARG library to reduce tool size", + "Body": ": 298 KB (share with write operation)\n- [ ] \u0060Azure.ResourceManager.OperationalInsights\u0060 : 1.02 MB\n- [ ] \u0060Azure.ResourceManager.PostgreSql\u0060 : 1.57 MB (share with write operation)\n- [ ] \u0060Azure.ResourceManager.Redis\u0060 : 669 KB\n- [ ] \u0060Azure.ResourceManager.RedisEnterprise\u0060 : 567 KB\n- [ ] \u0060Azure.ResourceManager.Search\u0060 : 610 KB\n- [ ] \u0060Azure.Messaging.ServiceBus\u0060 : 700 KB\n- [x] \u0060Azure.ResourceManager.Sql\u0060 : 6.41 MB\n- [x] \u0060Azure.ResourceManager.Storage\u0060 : 1.67 MB\n- [ ] \u0060Azure.ResourceManager.DesktopVirtualization\u0060 : 1.15 MB\n- [ ] \u0060Azure.ResourceManager.ApplicationInsights\u0060 : 852 KB (share with write operation)\n\nCompleting all the above changes will reduce the total size by **22\u002B MB**.\n\n## Pros \u0026 Cons\n\n\u2705 **Pros**\n\n**Reduced Server Size:** Significantly decreases the overall size of the AzureMCP server by minimizing dependencies.\n**Improved Query Performance:** Resource Graph queries are generally faster than service-specific SDK calls.\n\n\u26A0\uFE0F **Cons**\n\n**Latency in Resource Updates:** ARG may not reflect real-time changes immediately, leading to potential delays in resource state visibility.\n**Extra Deserialization Required:** No strongly typed models, additional code is needed to parse and deserialize the results.", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-ARM", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/226" + }, + { + "IssueNumber": 227, + "Title": "[ONBOARD] AI Vision Namespace", + "Body": "percentage, processing time estimates, and error information for batch document operations. Returns operation status as JSON. Requires resource-name and operation-id. - Suggested prompt: \u0022Check the translation status of document batch \u003Cbatch-id\u003E\u0022\n- [ ] \u0060azmcp-ai-vision-translation-document-formats-list\u0060 - List all supported document formats for translation including file types and size limits. This tool retrieves format specifications including maximum file sizes, supported extensions, and format-specific limitations. Returns format information as JSON array. Requires resource-name. - Suggested prompt: \u0022What document formats are supported for translation?\u0022\n#### Azure.AI.Vision.ImageAnalysis\n\n- [ ] \u0060azmcp-ai-vision-imageanalysis-analyze\u0060 - Analyze images and extract comprehensive visual features including objects, text, faces, and scene descriptions. This tool performs multi-modal image analysis returning detailed visual information, captions, and confidence scores for various detected elements. Returns analysis results as JSON. Requires resource-name and image-url or image-data. - Suggested prompt: \u0022Analyze this image and describe what you see: \u003Cimage-url\u003E\u0022\n- [ ] \u0060azmcp-ai-vision-imageanalysis-tags-extract\u0060 - Extract descriptive tags and labels from images with confidence scoring. This tool identifies visual elements, objects, activities, and concepts within images to generate relevant tags for categorization and search. Returns tag array as JSON. Requires resource-name and image-url or image-data. - Suggested prompt: \u0022Extract all text from this screenshot using OCR\u0022\n- [ ] \u0060azmcp-ai-vision-imageanalysis-objects-detect\u0060 - Detect and locate objects within images with bounding box coordinates and classification. This tool identifies multiple objects in images providing precise location data and object categories with confidence scores. Returns object detection results as JSON. Requires resource-name and image-url or image-data. - Suggested prompt: \u0022Detect and identify all objects in this photo: \u003Cphoto-url\u003E\u0022\n- [ ] \u0060azmcp-ai-vision-imageanalysis-text-read\u0060 - Extract text from images using optical character recognition (OCR) with layout preservation.", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-DocumentIntelligence", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/227" + }, + { + "IssueNumber": 235, + "Title": "[single mode] Failed to set the key in App Configuration store", + "Body": "Title: [single mode] Failed to set the key in App Configuration store\n\n**Description:**\nWhen entering the test prompt \u0060Set the key \u003Ckey_name\u003E in App Configuration store \u003Capp_config_store_name\u003E to \u003Cvalue\u003E\u0060 in mcp server single mode, it reports the error \u0060the tool kv set was not found\u0060. The specific error is as follows: \n\u003Cimg width=\u0022677\u0022 height=\u0022601\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/11c6db26-f419-402b-a068-aa93ae8517dc\u0022 /\u003E\n\n**Steps to Reproduce:**\n1. Run \u0060git clone https://github.com/azure/azure-mcp\u0060.\n2. Run \u0060dotnet build\u0060.\n3. Run \u0060az login\u0060.\n4. Configure \u0060mcp.json\u0060 in single mode.\n5. Start mcp server.\n6. Open GitHub Copilot in VS Code and [switch to Agent mode](https://code.visualstudio.com/docs/copilot/chat/chat-agent-mode).\n7. Click Refresh on the tools list, and only select the configured MCP Server Tools.\n8. Enter test prompts \u0060Set the key \u003Ckey_name\u003E in App Configuration store \u003Capp_config_store_name\u003E to \u003Cvalue\u003E\u0060.\n\n**Environment:**\n- OS: Windows.\n- Vscode Insiders Version: 1.103.0\n- GitHub Copilot Chat Version: 0.30.2025073102\n\n**Expected Behavior:**\nIt can successfully set the key in App Configuration store in single mode.\n\n@jongio and @joshfree for notification", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-AppConfig", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/235" + }, + { + "IssueNumber": 245, + "Title": "[Tool Description] Improve Bicep Schema tool description for better LLM selection", + "Body": "Title: [Tool Description] Improve Bicep Schema tool description for better LLM selection\n\n## Problem\r\n\r\nThe current Bicep Schema tool description lacks the detail and clarity needed for optimal LLM tool selection, resulting in an estimated confidence score of ~0.3 (below target of \u22650.5).\r\n\r\n**Current Description Issues:**\r\n- Missing usage guidance (when to use vs when not to use)\r\n- Limited context about Bicep vs other IaC tools\r\n- Vague description of available operations\r\n- Poor parameter explanation\r\n- Missing limitations/caveats\r\n- Formatting issues (missing space after period)\r\n- Unclear relationship to ARM templates and Azure resources\r\n\r\n## Current Description\r\n\u0060\u0060\u0060\r\nBicep schema operations - Commands for working with Azure Bicep Infrastructure as Code (IaC) generation and schema management. Includes operations for retrieving Bicep schemas, templates, and resource definitions to support infrastructure deployment automation.This tool is a hierarchical MCP command router. Sub commands are routed to MCP servers that require specific fields inside the \u0022parameters\u0022 object. To invoke a command, set \u0022command\u0022 and wrap its args in \u0022parameters\u0022. Set \u0022learn=true\u0022 to discover available sub commands.\r\n\u0060\u0060\u0060\r\n\r\n## Suggested Improvement\r\n\u0060\u0060\u0060\r\nBicep schema operations - Commands for working with Azure Bicep Infrastructure as Code (IaC) schema retrieval and template generation. Use this tool when you need to get Bicep resource schemas, retrieve template definitions for Azure resources, generate Bicep code snippets, or understand resource properties for infrastructure automation. This tool helps with Bicep syntax, resource schemas, and template structure - it\u0027s ideal for IaC development and validation. Do not use this tool for deploying Bicep templates, managing deployed resources, or ARM template operations - this tool focuses on schema and template generation rather than deployment execution. This tool is a hierarchical MCP command router where sub-commands are routed to MCP servers that require specific fields inside the \u0022parameters\u0022 object. To invoke a command, set \u0022command\u0022 and wrap its arguments in \u0022parameters\u0022.", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-bicep", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/245" + }, + { + "IssueNumber": 262, + "Title": "[Tool Description] Improve Subscription tool description for better LLM selection", + "Body": "Title: [Tool Description] Improve Subscription tool description for better LLM selection\n\n## Problem\r\n\r\nThe current Subscription tool description lacks the detail and clarity needed for optimal LLM tool selection, resulting in an estimated confidence score of ~0.2-0.3 (below target of \u22650.5).\r\n\r\n**Current Description Issues:**\r\n- Very brief - only mentions listing and managing without specifics\r\n- Missing usage guidance (when to use vs when not to use)\r\n- Limited context about Azure subscription hierarchy and management\r\n- Poor parameter explanation\r\n- Missing specific subscription management operations\r\n- Formatting issues (missing space after period)\r\n- No mention of billing, governance, or subscription scope context\r\n\r\n## Current Description\r\n\u0060\u0060\u0060\r\nAzure subscription operations - Commands for listing and managing Azure subscriptions accessible to your account.This tool is a hierarchical MCP command router. Sub commands are routed to MCP servers that require specific fields inside the \u0022parameters\u0022 object. To invoke a command, set \u0022command\u0022 and wrap its args in \u0022parameters\u0022. Set \u0022learn=true\u0022 to discover available sub commands.\r\n\u0060\u0060\u0060\r\n\r\n## Suggested Improvement\r\n\u0060\u0060\u0060\r\nAzure subscription operations - Commands for listing and managing Azure subscriptions that serve as billing and administrative boundaries for Azure resources and services. Use this tool when you need to list available subscriptions, check subscription details and status, manage subscription settings, view billing information, or work with subscription-level configurations and policies. This tool provides visibility into the subscription scope of Azure resource hierarchy and helps with multi-subscription scenarios. Do not use this tool for resource group operations, individual resource management, billing account administration, or tenant-level Azure Active Directory operations - this tool focuses specifically on subscription-level information and management. This tool is a hierarchical MCP command router where sub-commands are routed to MCP servers that require specific fields inside the \u0022parameters\u0022 object. To invoke a command, set \u0022command\u0022 and wrap its arguments in \u0022parameters\u0022.", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Core", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/262" + }, + { + "IssueNumber": 277, + "Title": "VS Code VSIX: Large number of file watchers", + "Body": "Title: VS Code VSIX: Large number of file watchers\n\nExtension created crazy number of file watchers - is that a bug?\n\n\u0060\u0060\u0060bash\nsudo bash -c \u0027\nprintf \u0022%-8s %-6s %s\\n\u0022 WATCHES PID CMD\nfor p in /proc/[0-9]*; do\n pid=${p#/proc/}\n sum=0\n for fi in \u0022$p\u0022/fdinfo/*; do\n [ -f \u0022$fi\u0022 ] || continue\n c=$(grep -c \u0022^inotify\u0022 \u0022$fi\u0022 2\u003E/dev/null || true)\n sum=$((sum \u002B c))\n done\n if [ \u0022$sum\u0022 -gt 0 ]; then\n cmd=$(tr -d \u0022\\0\u0022 \u003C \u0022$p/cmdline\u0022 | head -c 120)\n printf \u0022%-8s %-6s %s\\n\u0022 \u0022$sum\u0022 \u0022$pid\u0022 \u0022$cmd\u0022\n fi\ndone 2\u003E/dev/null | sort -nr | head\n\u0027\n\u0060\u0060\u0060\n\n\u003EWATCHES PID CMD\n\u003E517372 2384325 /home/xxx/.vscode-server/extensions/ms-azuretools.vscode-azure-mcp-server-0.5.3-linux-x64/server/azmcpserverstart", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-VSIX", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/277" + }, + { + "IssueNumber": 295, + "Title": "\u0060azmcp-monitor-ingestion-data-validate\u0060", + "Body": "Title: \u0060azmcp-monitor-ingestion-data-validate\u0060\n\nazmcp-monitor-ingestion-data-validate - Validate log data format and schema compliance before ingestion to prevent errors. This tool checks log data against data collection rule schemas and Azure Monitor requirements to ensure successful ingestion. Returns validation results with error details as JSON. Requires data-collection-rule and log-data. - Suggested prompt: \u0022Validate this Azure Monitor log data: \u003Clog-data\u003E\u0022", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Monitor", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/295" + }, + { + "IssueNumber": 304, + "Title": "MCP server requests often fail with missing \u0027--subscription\u0027 argument.", + "Body": "container names and are returned as a JSON array.\\r\\nRequires account.\u0022,\n \u0022inputSchema\u0022: {\n \u0022type\u0022: \u0022object\u0022,\n \u0022properties\u0022: {\n \u0022tenant\u0022: {\n \u0022type\u0022: \u0022string\u0022,\n \u0022description\u0022: \u0022The Microsoft Entra ID tenant ID or name. This can be either the GUID identifier or the display name of your Entra ID tenant.\u0022\n },\n \u0022auth-method\u0022: {\n \u0022type\u0022: \u0022integer\u0022,\n \u0022description\u0022: \u0022Authentication method to use. Options: \\u0027credential\\u0027 (Azure CLI/managed identity), \\u0027key\\u0027 (access key), or \\u0027connectionString\\u0027.\u0022\n },\n \u0022retry-delay\u0022: {\n \u0022type\u0022: \u0022number\u0022,\n \u0022description\u0022: \u0022Initial delay in seconds between retry attempts. For exponential backoff, this value is used as the base.\u0022\n },\n \u0022retry-max-delay\u0022: {\n \u0022type\u0022: \u0022number\u0022,\n \u0022description\u0022: \u0022Maximum delay in seconds between retries, regardless of the retry strategy.\u0022\n },\n \u0022retry-max-retries\u0022: {\n \u0022type\u0022: \u0022integer\u0022,\n \u0022description\u0022: \u0022Maximum number of retry attempts for failed operations before giving up.\u0022\n },\n \u0022retry-mode\u0022: {\n \u0022type\u0022: \u0022integer\u0022,\n \u0022description\u0022: \u0022Retry strategy to use. \\u0027fixed\\u0027 uses consistent delays, \\u0027exponential\\u0027 increases delay between attempts.\u0022\n },\n \u0022retry-network-timeout\u0022: {\n \u0022type\u0022: \u0022number\u0022,\n \u0022description\u0022: \u0022Network operation timeout in seconds. Operations taking longer than this will be cancelled.\u0022\n },\n \u0022subscription\u0022: {\n \u0022type\u0022: \u0022string\u0022,\n \u0022description\u0022: \u0022Specifies the Azure subscription to use. Accepts either a subscription ID (GUID) or display name. If not specified, the AZURE_SUBSCRIPTION_ID environment variable will be used instead.\u0022\n },\n \u0022account\u0022: {\n \u0022type\u0022: \u0022string\u0022,\n \u0022description\u0022: \u0022The name of the Azure Storage account. This is the unique name you chose for your storage account (e.g., \\u0027mystorageaccount\\u0027).\u0022\n }\n },\n \u0022required\u0022: [\n \u0022account\u0022\n ]\n },\n \u0022annotations\u0022: {\n \u0022title\u0022: \u0022List Storage Containers\u0022,\n \u0022destructiveHint\u0022: false,\n \u0022idempotentHint\u0022: false,\n \u0022openWorldHint\u0022: true,\n \u0022readOnlyHint\u0022: true\n }", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Core", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/304" + }, + { + "IssueNumber": 307, + "Title": "Image Exits without error", + "Body": "Title: Image Exits without error\n\nHi ,\n\nWhen creating the Azure MCP server image, the container exits immediately without throwing any error messages. The build process completes successfully, and the image runs initially, but the container stops right after startup without any logs indicating the root cause. This makes it difficult to debug whether the issue is related to entrypoint configuration, missing dependencies, or misalignment in the startup command. Further investigation is needed to identify why the server process is not persisting after launch.\n\nKindly help me if anyone has faced the same issue.", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Docker", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/307" + }, + { + "IssueNumber": 309, + "Title": "Add \u0060azmcp sql db delete\u0060 impl and test", + "Body": "Title: Add \u0060azmcp sql db delete\u0060 impl and test\n\n[No description provided]", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-SQL", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/309" + }, + { + "IssueNumber": 624, + "Title": "Tool Description: Enhance tool description and Reduce Ambiguity for better LLM Selection", + "Body": "Title: Tool Description: Enhance tool description and Reduce Ambiguity for better LLM Selection\n\nEnhance the tool description of the following to increase the confidence score to \u003E0.4 and/or reduce the ambiguity from the major tools(cosmos, messaging, storage).\n\n- [x] Resource Health (done- https://github.com/microsoft/mcp/pull/588)\n- [x] Foundry (done- https://github.com/microsoft/mcp/pull/599)\n- [x] Subscription (done- https://github.com/microsoft/mcp/pull/559)\n- [x] Best Practices (closed because no change needed as per the comments on the PR- https://github.com/microsoft/mcp/pull/603)\n- [x] Event grid (done- https://github.com/microsoft/mcp/pull/552)\n- [x] CloudArchitect (done- https://github.com/microsoft/mcp/pull/556)\n- [x] App Lens (done- https://github.com/microsoft/mcp/pull/587)\n- [x] Cosmos (done - https://github.com/microsoft/mcp/pull/625)\n- [x] Deploy (done - https://github.com/microsoft/mcp/pull/640)\n- [x] Monitor (in progress - https://github.com/microsoft/mcp/pull/630)\n- [x] Messaging (done - https://github.com/microsoft/mcp/pull/642)\n- [x] Storage (done- https://github.com/microsoft/mcp/pull/650)", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Core", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/624" + }, + { + "IssueNumber": 674, + "Title": "[BUG] The ChainedTokenCredential failed due to an unhandled exception", + "Body": "Title: [BUG] The ChainedTokenCredential failed due to an unhandled exception\n\n### Describe the bug\n\n\u0060\u0060\u0060json\n{\n \u0022command\u0022: \u0022monitor_workspace_log_query\u0022,\n \u0022intent\u0022: \u0022Query traces from Log Analytics workspace\u0022,\n \u0022parameters\u0022: {\n \u0022hours\u0022: 24,\n \u0022limit\u0022: 10,\n \u0022query\u0022: \u0022recent\u0022,\n \u0022resource-group\u0022: \u0022REDACTED\u0022,\n \u0022subscription\u0022: \u0022REDACTED\u0022,\n \u0022table\u0022: \u0022traces\u0022,\n \u0022workspace\u0022: \u0022log-REDACTED\u0022\n }\n}\n\u0060\u0060\u0060\n\n\u003E {\u0022status\u0022:500,\u0022message\u0022:\u0022Error retrieving Log Analytics workspaces: The ChainedTokenCredential failed due to an unhandled exception: InteractiveBrowserCredential authentication failed: Interactive requests with mac broker enabled must be executed on the main thread on macOS.. To mitigate this issue, please refer to the troubleshooting guidelines here at https://aka.ms/azmcp/troubleshooting.\u0022,\u0022results\u0022:{\u0022message\u0022:\u0022Error retrieving Log Analytics workspaces: The ChainedTokenCredential failed due to an unhandled exception: InteractiveBrowserCredential authentication failed: Interactive requests with mac broker enabled must be executed on the main thread on macOS.\u0022,\u0022stackTrace\u0022:null,\u0022type\u0022:\u0022Exception\u0022},\u0022duration\u0022:0}\n\nUsing VS Code extension 0.8.3 on macOS (Apple Silicon) and got the above message. I only enabled the \u0060monitor\u0060 namespace.\n\n### Expected behavior\n\nTool call works\n\n### Actual behavior\n\nError\n\n### Reproduction Steps\n\nInstall 0.8.3 Azure MCP VS Code extension, enable only the monitor namespace. Ask a question that will cause it to query a log analytics workspace.\n\n### Environment\n\nmacOS (Apple Silicon)\nVS Code stable", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Core", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/674" + }, + { + "IssueNumber": 710, + "Title": "[BUG] Docker run fails. Throws InteractiveBrowserCredential in docker", + "Body": "Title: [BUG] Docker run fails. Throws InteractiveBrowserCredential in docker\n\n### Describe the bug\n\nSimilar error as some other issues: \nWhen I am trying to run Azure MCP via docker, I am getting permission denied errors.\n \nPlatform: WSL Ubuntu 22.04\nCommand used: docker run -i --rm --env-file .env mcr.microsoft.com/azure-sdk/azure-mcp:latest\n \nError: docker: Error response from daemon: failed to create task for container: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: exec: \u0022./azmcp\u0022: permission denied: unknown.\n \nContent of .env file : \nAZURE_TENANT_ID=xxxxx-xxxxx-xxxxx-xxxxx\nAZURE_CLIENT_ID=xxxxx-xxxxx-xxxxx-xxxxx (of an owned application under App Registrations)\nAZURE_CLIENT_SECRET=xxxxx-xxxxx-xxxxx-xxxxx ( of an owned application under App Registrations)\n\nI tried to do backup solution like this in mcp.json :\n\n\u0060{\n \u0022mcpServers\u0022: {\n \u0022azure-mcp-server\u0022: {\n \u0022command\u0022: \u0022docker\u0022,\n \u0022args\u0022: [\n \u0022run\u0022,\n \u0022-i\u0022,\n \u0022--rm\u0022,\n \u0022--env-file\u0022,\n \u0022/mcp/servers/Azure.Mcp.Server/.env\u0022,\n \u0022--entrypoint\u0022,\n \u0022sh\u0022,\n \u0022mcr.microsoft.com/azure-sdk/azure-mcp:latest\u0022,\n \u0022-c\u0022,\n \u0022chmod \u002Bx ./azmcp \u0026\u0026 ./azmcp server start\u0022\n ],\n \u0022disabled\u0022: false,\n \u0022alwaysAllow\u0022: []\n }\n }\n}\u0060\n\nI am using ROO code for MCP in VSCode. On doing the following changes, the server becomes active and shows tasks available.\n\nWhen I give a task like \u0022List subscriptions\nIt gives an \u0022Authentication Failed\u0022 :\n\n\u0060Roo wants to use a tool on the azure-mcp-server MCP server\nazure-mcp-server\n\nsubscription\nAzure subscription operations - Commands for listing and managing Azure subscriptions accessible to your account.This tool is a hierarchical MCP command router. Sub commands are routed to MCP servers that require specific fields inside the \u0022parameters\u0022 object. To invoke a command, set \u0022command\u0022 and wrap its args in \u0022parameters\u0022. Set \u0022learn=true\u0022 to discover available sub commands.\n{\n \u0022intent\u0022: \u0022list available subscriptions\u0022,\n \u0022command\u0022: \u0022list\u0022,\n \u0022parameters\u0022: {}\n}\n\nRoo wants to use a tool on the azure-mcp-server MCP server\nazure-mcp-server\n\nsubscription", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Docker", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/710" + }, + { + "IssueNumber": 833, + "Title": "[BUG] Refactor elicitation logic", + "Body": "Title: [BUG] Refactor elicitation logic\n\n### Describe the bug\n\nWe dup the implementation of elicitation in NamespaceToolLoader and CommandFactoryToolLoader. Refactor the code to share the logic.\n\n### Expected behavior\n\nDescribed above.\n\n### Actual behavior\n\nDescribed above.\n\n### Reproduction Steps\n\nDescribed above.\n\n### Environment\n\n_No response_", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Core", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/833" + }, + { + "IssueNumber": 849, + "Title": "Improvements for consolidated mode", + "Body": "Title: Improvements for consolidated mode\n\n- [ ] Add instructions for coding agent to add new tools to the consolidated tool structure (follow-up PR)\n- [ ] Enable it by default for vscode insider\n- [x] Avoid mutating input \u0060commandFactory\u0060 of \u0060ConsolidatedToolDiscoveryStrategy\u0060\n- [x] Avoid spawning child processes per namespace, like how \u0060NamespaceToolLoader\u0060 does", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Core", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/849" + }, + { + "IssueNumber": 1013, + "Title": "[BUG] Test failure: Azure.Mcp.Tools.Sql.UnitTests.EntraAdmin.EntraAdminListCommandTests.ExecuteAsync_ValidatesInputCorrectly", + "Body": "Title: [BUG] Test failure: Azure.Mcp.Tools.Sql.UnitTests.EntraAdmin.EntraAdminListCommandTests.ExecuteAsync_ValidatesInputCorrectly\n\n### Describe the bug\n\nI encountered this test failure in my today\u0027s run on macOS x64:\n\nThis is the link to the build: https://dev.azure.com/azure-sdk/internal/_build/results?buildId=5517730\u0026view=logs\u0026j=dc60c7e7-299e-5b09-033c-25aa80e4127e\u0026t=a38f592e-61d7-507f-c7b1-a8fa3a04ca5c\n\nError message:\n\u0060\u0060\u0060\n Failed Azure.Mcp.Tools.Sql.UnitTests.EntraAdmin.EntraAdminListCommandTests.ExecuteAsync_ValidatesInputCorrectly(args: \u0022--resource-group rg --server server\u0022, shouldSucceed: False) [3 ms]\n Error Message:\n Assert.Equal() Failure: Values differ\nExpected: BadRequest\nActual: OK\n Stack Trace:\n at Azure.Mcp.Tools.Sql.UnitTests.EntraAdmin.EntraAdminListCommandTests.ExecuteAsync_ValidatesInputCorrectly(String args, Boolean shouldSucceed) in /Users/runner/work/1/s/tools/Azure.Mcp.Tools.Sql/tests/Azure.Mcp.Tools.Sql.UnitTests/EntraAdmin/EntraAdminListCommandTests.cs:line 77\n\n\u0060\u0060\u0060\n\n### Expected behavior\n\nTest should pass on CI.\n\n### Actual behavior\n\nTest failed on CI\n\n### Reproduction Steps\n\nI am not sure.\n\n### Environment\n\n_No response_", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-SQL", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/1013" + }, + { + "IssueNumber": 1067, + "Title": "[CONSOLIDATED] Some \u0060get_azure_messaging_service_details\u0060 prompts do not trigger the corresponding tool as expected", + "Body": "\u003Csubscription\u003E\nList Event Grid subscriptions for topic \u003Ctopic_name\u003E in resource group \u003Cresource_group_name\u003E\nList Event Grid subscriptions for topic \u003Ctopic_name\u003E in subscription \u003Csubscription\u003E\nShow all Event Grid subscriptions in my subscription\nShow Event Grid subscriptions in resource group \u003Cresource_group_name\u003E in subscription \u003Csubscription\u003E\nShow me all Event Grid subscriptions for topic \u003Ctopic_name\u003E\nShow me the Event Grid topics in my subscription\n\u0060\u0060\u0060\n\n\n**Expected Behavior:**\nThese prompts can successfully trigger the expected \u0060get_azure_messaging_service_details\u0060 tool.\n\n@joshfree for notification", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Core", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/1067" + }, + { + "IssueNumber": 1068, + "Title": "[CONSOLIDATED] \u0060evaluate_azure_ai_foundry_agents\u0060 tool was not activated by test prompt", + "Body": "Title: [CONSOLIDATED] \u0060evaluate_azure_ai_foundry_agents\u0060 tool was not activated by test prompt\n\n**Description:**\nIn \u0060consolidated\u0060 mode, entering \u0060Evaluate the full query and response I got from my agent for task_adherence\u0060 prompt did not trigger the MCP tool \u0060evaluate_azure_ai_foundry_agents\u0060, as shown below:\n\u003Cimg width=\u0022725\u0022 height=\u0022642\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/6c071f47-0072-4a8a-98b1-7aeede38dacd\u0022 /\u003E\n\u003Cimg width=\u0022725\u0022 height=\u0022717\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/86728533-716e-437d-9827-b8815bb4dc37\u0022 /\u003E\n\n**Steps to Reproduce:**\n1. Start mcp server in \u0060consolidated\u0060 mode.\n2. Open GitHub Copilot in VS Code and [switch to Agent mode](https://code.visualstudio.com/docs/copilot/chat/chat-agent-mode).\n3. Click Refresh on the tools list, and select the \u0060Built-in\u0060, \u0060Extension: Github Copilot for Azure\u0060, \u0060github MCP server\u0060 and \u0060MCP Server: Azure MCP\u0060.\n4. Enter test prompts \u0060Evaluate the full query and response I got from my agent for task_adherence\u0060.\n\n**Environment:**\n\n- OS: Windows.\n- Vscode Version: 1.105.1\n- GitHub Copilot Chat Version: 0.32.4\n- Large Language Model: **Claude Sonnet 4.5**\n- Virtual Tool: On\n- Azure MCP Server: **1.0.0**\n\n\n**Expected Behavior:**\nThese prompts can successfully trigger the expected \u0060evaluate_azure_ai_foundry_agents\u0060 tool.\n\n@joshfree for notification", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Core", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/1068" + }, + { + "IssueNumber": 1101, + "Title": "[Remote] Implement outbound rate limiting to control the volume of requests", + "Body": "Title: [Remote] Implement outbound rate limiting to control the volume of requests\n\nImplement outbound rate limiting to control the volume of requests", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "remote-mcp", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/1101" + }, + { + "IssueNumber": 1110, + "Title": "[MQ] Revisit namespace name AzureAIBestPractices \u0026 AzureBestPractices", + "Body": "Title: [MQ] Revisit namespace name AzureAIBestPractices \u0026 AzureBestPractices\n\n### Describe the bug\n\nThese names are too close which may cause confusion for devs and coding agent.\n\nAlso AzureAIBestPractices might imply that AzureBestPractices are non-AI.\n\n### Expected behavior\n\nN/A\n\n### Actual behavior\n\nN/A\n\n### Reproduction Steps\n\nN/A\n\n### Environment\n\n_No response_", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-BestPractices", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/1110" + }, + { + "IssueNumber": 1252, + "Title": "[BUG]: Azure Functions Get Best Practice adds the wrong requirements for Claude Sonnet 4 in Agent mode", + "Body": "Title: [BUG]: Azure Functions Get Best Practice adds the wrong requirements for Claude Sonnet 4 in Agent mode\n\n### Describe the bug\n\nIf I prompt \u0022Create a Python Function App with a HTTP Trigger\u0022 in Agent Mode with Claude Sonnet 4 it adds azure_functions_worker .\n\nIncluding azure_functions_worker in requirements.txt installs an outdated worker that isn\u0027t compatible with the v2 programming model. \n\nThis leads to an app that when deployed doesn\u0027t work.\n\n### Expected behavior\n\nCheck if the App is on the v2 Programming model and do not add this. \n\n\n### Actual behavior\n\nThe requirement is added.\n\n### Reproduction Steps\n\nIf I prompt \u0022Create a Python Function App with a HTTP Trigger\u0022 in Agent Mode with Claude Sonnet 4 it adds azure_functions_worker .\n\n### Environment\n\nVS Code 1.106.2.\n\nIdentifier\nms-azuretools.vscode-azure-mcp-server\nVersion\n1.0.0", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-BestPractices", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/1252" + }, + { + "IssueNumber": 1285, + "Title": "Migrate Azure.Mcp.Tools.EventHubs.LiveTests LiveTests to Recorded Tests", + "Body": "Title: Migrate Azure.Mcp.Tools.EventHubs.LiveTests LiveTests to Recorded Tests\n\nMigrate tests within tools/Azure.Mcp.Tools.EventHubs/tests/Azure.Mcp.Tools.EventHubs.LiveTests/Azure.Mcp.Tools.EventHubs.LiveTests.csproj to recordings. Utilize copilot to assist with the migration process for Azure.Mcp.Tools.EventHubs.LiveTests.\r\n - For additional guidance check [the recorded tests document](https://github.com/microsoft/mcp/blob/main/docs/recorded-tests.md)\r\n\r\nThis task will be considered complete when the livetests can be invoked without the presence of a .testsettings.json file.\r\n\r\nSubmit a PR with your change and verify that the recorded tests are running in the [recorded test step](https://dev.azure.com/azure-sdk/internal/_build/results?buildId=5627747\u0026view=logs\u0026jobId=1e679852-4871-5dae-dd38-eb073eb853d4\u0026j=1e679852-4871-5dae-dd38-eb073eb853d4\u0026t=2f22000c-4a69-5b6e-fbac-d06c3b6f57da)", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-EventHubs", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/1285" + }, + { + "IssueNumber": 1286, + "Title": "Migrate Azure.Mcp.Tools.Foundry.LiveTests LiveTests to Recorded Tests", + "Body": "Title: Migrate Azure.Mcp.Tools.Foundry.LiveTests LiveTests to Recorded Tests\n\nMigrate tests within tools/Azure.Mcp.Tools.Foundry/tests/Azure.Mcp.Tools.Foundry.LiveTests/Azure.Mcp.Tools.Foundry.LiveTests.csproj to recordings. Utilize copilot to assist with the migration process for Azure.Mcp.Tools.Foundry.LiveTests.\r\n - For additional guidance check [the recorded tests document](https://github.com/microsoft/mcp/blob/main/docs/recorded-tests.md)\r\n\r\nThis task will be considered complete when the livetests can be invoked without the presence of a .testsettings.json file.\r\n\r\nSubmit a PR with your change and verify that the recorded tests are running in the [recorded test step](https://dev.azure.com/azure-sdk/internal/_build/results?buildId=5627747\u0026view=logs\u0026jobId=1e679852-4871-5dae-dd38-eb073eb853d4\u0026j=1e679852-4871-5dae-dd38-eb073eb853d4\u0026t=2f22000c-4a69-5b6e-fbac-d06c3b6f57da)", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Foundry", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/1286" + }, + { + "IssueNumber": 1287, + "Title": "Migrate Azure.Mcp.Tools.FunctionApp.LiveTests LiveTests to Recorded Tests", + "Body": "Title: Migrate Azure.Mcp.Tools.FunctionApp.LiveTests LiveTests to Recorded Tests\n\nMigrate tests within tools/Azure.Mcp.Tools.FunctionApp/tests/Azure.Mcp.Tools.FunctionApp.LiveTests/Azure.Mcp.Tools.FunctionApp.LiveTests.csproj to recordings. Utilize copilot to assist with the migration process for Azure.Mcp.Tools.FunctionApp.LiveTests.\r\n - For additional guidance check [the recorded tests document](https://github.com/microsoft/mcp/blob/main/docs/recorded-tests.md)\r\n\r\nThis task will be considered complete when the livetests can be invoked without the presence of a .testsettings.json file.\r\n\r\nSubmit a PR with your change and verify that the recorded tests are running in the [recorded test step](https://dev.azure.com/azure-sdk/internal/_build/results?buildId=5627747\u0026view=logs\u0026jobId=1e679852-4871-5dae-dd38-eb073eb853d4\u0026j=1e679852-4871-5dae-dd38-eb073eb853d4\u0026t=2f22000c-4a69-5b6e-fbac-d06c3b6f57da)", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-FunctionApp", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/1287" + }, + { + "IssueNumber": 1291, + "Title": "Migrate Azure.Mcp.Tools.ManagedLustre.LiveTests LiveTests to Recorded Tests", + "Body": "Title: Migrate Azure.Mcp.Tools.ManagedLustre.LiveTests LiveTests to Recorded Tests\n\nMigrate tests within tools/Azure.Mcp.Tools.ManagedLustre/tests/Azure.Mcp.Tools.ManagedLustre.LiveTests/Azure.Mcp.Tools.ManagedLustre.LiveTests.csproj to recordings. Utilize copilot to assist with the migration process for Azure.Mcp.Tools.ManagedLustre.LiveTests.\r\n - For additional guidance check [the recorded tests document](https://github.com/microsoft/mcp/blob/main/docs/recorded-tests.md)\r\n\r\nThis task will be considered complete when the livetests can be invoked without the presence of a .testsettings.json file.\r\n\r\nSubmit a PR with your change and verify that the recorded tests are running in the [recorded test step](https://dev.azure.com/azure-sdk/internal/_build/results?buildId=5627747\u0026view=logs\u0026jobId=1e679852-4871-5dae-dd38-eb073eb853d4\u0026j=1e679852-4871-5dae-dd38-eb073eb853d4\u0026t=2f22000c-4a69-5b6e-fbac-d06c3b6f57da)", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-managedlustre", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/1291" + }, + { + "IssueNumber": 130, + "Title": "Pass more information to MCP client when running extension tools (azd, az)", + "Body": "Title: Pass more information to MCP client when running extension tools (azd, az)\n\nCurrently, when a long running operation such as \u0060azd up\u0060 is run, the agent gets nothing back and the operation hangs. When GH Copilot runs azd in its own terminal, progress is visible there. \n\nWe should investigate a way for the agent to get information on these tasks that are running.", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-AzCLI, tools-Azd", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/130" + }, + { + "IssueNumber": 335, + "Title": "[Single Mode/MCP-Native@0.5.8-alpha.5259970] Failed to list all databases in the Azure SQL server", + "Body": "Title: [Single Mode/MCP-Native@0.5.8-alpha.5259970] Failed to list all databases in the Azure SQL server\n\n**Description:**\nDuring testing of \u0060MCP-Native@0.5.8-alpha.5259970\u0060 in **Single** mode, entering the test prompt \u0060List all databases in the Azure SQL server\u0060, the response fails with the following error:\n\u003Cimg width=\u0022632\u0022 height=\u0022684\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/46b47b9a-2c3b-4af6-8ed7-682716b2da1f\u0022 /\u003E\n\n**Steps to Reproduce:**\n1. Connect to [Feed](https://dev.azure.com/azure-sdk/public/_artifacts/feed/azure-sdk-for-js/Npm/@azure%2Fmcp-native/overview/0.5.8-alpha.5259970) then running \u0060npm install @azure/mcp-native@0.5.8-alpha.5259970\u0060.\n2. Run \u0060az login\u0060.\n3. Configure MCP server in single mode using the newly downloaded azmcp.exe.\n4. Start mcp server.\n5. Open GitHub Copilot in VS Code Insiders and [switch to Agent mode](https://code.visualstudio.com/docs/copilot/chat/chat-agent-mode).\n6. Click Refresh on the tools list, and only select the configured MCP Server Tools.\n7. Enter test prompts.\n\n**Environment:**\n- OS: Windows.\n- Vscode Insiders Version: 1.104.0\n- GitHub Copilot Chat Version: 0.31.2025090302\n- Large Language Model: GPT-4.1\n\n**Expected Behavior:**\nIn the single mode of MCP-Native@0.5.8-alpha.5259970, It can successfully list all databases in the Azure SQL server.\n\n@joshfree for notification", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-SQL", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/335" + }, + { + "IssueNumber": 343, + "Title": "[Single Mode/MCP-Native@0.5.8-alpha.5259970] \u0060Key Vault service test\u0060 does not trigger tool", + "Body": "Title: [Single Mode/MCP-Native@0.5.8-alpha.5259970] \u0060Key Vault service test\u0060 does not trigger tool\n\n**Description:**\nOn a **MacOS ARM64** machine, key vault service scenarios (such as listing all secrets, List all keys) does not trigger tool. Some test prompts fail intermittently rather than every time. The specific failure rates are as follows:\n\n- Test prompt: \u0060List all keys in the key vault \u0022mhkey\u0022 \u0060 (**Tested five times, failed four times**):\n\u003Cimg width=\u0022457\u0022 height=\u0022484\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/e148177a-8d17-43f7-850c-6db110f89eb1\u0022 /\u003E\n\n- Test prompt: \u0060List all secrets in the key vault \u0022mhkey\u0022\u0060 (**Tested five times, failed four times**):\n\u003Cimg width=\u0022490\u0022 height=\u0022432\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/c35557a8-3481-4ae1-82fd-25edb757e228\u0022 /\u003E\n\n- Test prompt: \u0060Import the certificate in file into the key vault mhkey in my Azure subscription\u0060 (**Tested five times, failed four times**):\n\u003Cimg width=\u0022484\u0022 height=\u0022281\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/ee63d702-05e5-4f91-961e-295d1ad655f3\u0022 /\u003E\n\n- Test prompt: \u0060Create a new key called keymac1 with the RSA type in the key vault mhkey in my Azure subscription\u0060(**Tested five times, failed four times**):\n\u003Cimg width=\u0022406\u0022 height=\u0022483\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/4c5fa3b2-d6af-4d63-8c2a-16e0368c0e5f\u0022 /\u003E\n\n- Test prompt: \u0060Create a new certificate called certmac1 in the key vault mhkey in my Azure subscription\u0060(**Tested five times, failed four times**):\n\u003Cimg width=\u0022484\u0022 height=\u0022344\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/54999eb5-ae80-44c2-b9ef-98625d217b1c\u0022 /\u003E\n\n**Steps to Reproduce:**\n1. Connect to [Feed](https://dev.azure.com/azure-sdk/public/_artifacts/feed/azure-sdk-for-js/Npm/@azure%2Fmcp-native/overview/0.5.8-alpha.5259970) then running \u0060npm install @azure/mcp-native@0.5.8-alpha.5259970\u0060.\n2. Run \u0060az login\u0060.\n4. Configure MCP server in single mode using the newly downloaded azmcp.exe.\n5. Start mcp server.\n6. Open GitHub Copilot in VS Code Insiders and [switch to Agent mode](https://code.visualstudio.com/docs/copilot/chat/chat-agent-mode).", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-KeyVault", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/343" + }, + { + "IssueNumber": 344, + "Title": "[Namespace Mode/MCP-Native@0.5.8-alpha.5259970] \u0060Key Vault service test\u0060 does not trigger tool", + "Body": "Title: [Namespace Mode/MCP-Native@0.5.8-alpha.5259970] \u0060Key Vault service test\u0060 does not trigger tool\n\n**Description:**\nOn a **MacOS ARM64** machine, key vault service scenarios does not trigger tool. Some test prompts fail intermittently rather than every time. The specific failure rates are as follows:\n\n- Test prompt: \u0060Create a new key called keymac1 with the RSA type in the key vault mhkey in my Azure subscription\u0060 (**Tested five times, failed four times**):\n\u003Cimg width=\u0022484\u0022 height=\u0022283\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/e674bc9a-db5a-4a66-bf61-b0197273d608\u0022 /\u003E\n\n- Test prompt: \u0060Create a new secret called secretmac2 with value 12343 in the key vault mhkey in my Azure subscription\u0060 (**Tested five times, failed four times**):\n\u003Cimg width=\u0022484\u0022 height=\u0022245\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/9fc4e717-4f77-4da7-ab27-1fbb3ce689e6\u0022 /\u003E\n\n- Test prompt: \u0060Create a new certificate called certmac1 in the key vault mhkey in my Azure subscription\u0060 (**Tested five times, failed four times**):\n\u003Cimg width=\u0022484\u0022 height=\u0022258\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/67424dbb-70b4-43ba-a054-e7d1d6abc2b8\u0022 /\u003E\n\n- Test prompt: \u0060Import the certificate in file into the key vault mhkey in my Azure subscription\u0060(**Tested five times, failed four times**):\n\u003Cimg width=\u0022484\u0022 height=\u0022283\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/49555812-a0b1-4faf-83ce-79c6b6b9a9c7\u0022 /\u003E\n\n**Steps to Reproduce:**\n1. Connect to [Feed](https://dev.azure.com/azure-sdk/public/_artifacts/feed/azure-sdk-for-js/Npm/@azure%2Fmcp-native/overview/0.5.8-alpha.5259970) then running \u0060npm install @azure/mcp-native@0.5.8-alpha.5259970\u0060.\n2. Run \u0060az login\u0060.\n4. Configure MCP server in namespace mode using the newly downloaded azmcp.exe.\n5. Start mcp server.\n6. Open GitHub Copilot in VS Code Insiders and [switch to Agent mode](https://code.visualstudio.com/docs/copilot/chat/chat-agent-mode).\n7. Click Refresh on the tools list, and only select the configured MCP Server Tools.\n8. Enter test prompts.\n\n**Environment:**\n- OS: MacOS ARM64.\n- Vscode Insiders Version: 1.104.0\n- GitHub Copilot Chat Version: 0.31.2025090302", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-KeyVault", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/344" + }, + { + "IssueNumber": 370, + "Title": "Flakey Azd \u0022config show\u0022 test failure in CI / macOS", + "Body": "Title: Flakey Azd \u0022config show\u0022 test failure in CI / macOS\n\non 9/8\n\nhttps://dev.azure.com/azure-sdk/internal/_build/results?buildId=5309626\u0026view=logs\u0026j=dee9a582-d9cf-5505-c110-fe6f6381e878\u0026t=997c6e73-be33-5a56-dfb1-dd5e1d9de962\u0026l=1496\n\nand again 9/11 \n\nhttps://dev.azure.com/azure-sdk/internal/_build/results?buildId=5326685\u0026view=logs\u0026j=dee9a582-d9cf-5505-c110-fe6f6381e878\u0026t=997c6e73-be33-5a56-dfb1-dd5e1d9de962\n\n\u003Cimg width=\u0022995\u0022 height=\u0022648\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/ebc9560d-c20f-4cc0-8e63-eaa638cc984b\u0022 /\u003E", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Azd", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/370" + }, + { + "IssueNumber": 498, + "Title": "[BUG][Telemetry] Distinguish between learn commands and actual commands (Always set ToolArea)", + "Body": "|HasToolArea\t|EmptyToolArea|\tHasToolName\t|EmptyToolName\t|EmptyToolAreaPercentage|\n|---|---|---|---|---|---|---|---|\n|ListToolsHandler|\t56594\t|11\t|0\t|56605|\t0\t|56605|\tInfinity|\n|ToolExecuted\t|6646|\t1\t|466\t|6181\t|6647\t|0\t|92.98931848954416|\n\n\n\n### Environment\n\n_No response_", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Telemetry", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/498" + }, + { + "IssueNumber": 143, + "Title": "Kusto commands fail even if the query was successfully executed", + "Body": "Title: Kusto commands fail even if the query was successfully executed\n\n_filed on behalf of Georgii Trenin_\n![Image](https://github.com/user-attachments/assets/cc55d6e0-fc7c-4142-b642-ae97fe7fbd51)", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Kusto", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/143" + }, + { + "IssueNumber": 162, + "Title": "Allow more specific credential targeting", + "Body": "Title: Allow more specific credential targeting\n\n\nThere\u0027s currently no way for the user to specify \u0022Only AzureCLI\u0022 or \u0022Not Workload\u0022. This causes issues when running live tests where the dev logged in to AZ Powershell in one tenant to do the resource deployment, but then during tests, the mcp server uses their az cli context because it has higher priority in DefaultAzureCredential.\n\nCurrently, we can only use environment variables to [target BrowserCredential](https://github.com/Azure/azure-mcp/blob/main/src/Services/Azure/Authentication/CustomChainedCredential.cs#L39) or the [Dev/Prod credential sets supported by DefaultAzureCredential](https://github.com/Azure/azure-sdk-for-net/blob/main/sdk/identity/Azure.Identity/src/DefaultAzureCredentialFactory.cs#L32).", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Auth", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/162" + }, + { + "IssueNumber": 172, + "Title": "Update way we initialise *AzureServices to be more testable.", + "Body": "{\n var resourceIdSegments = resource.Id.ToString().Split(\u0027/\u0027);\n var lastSegment = resourceIdSegments[^1];\n resourceList.Add(lastSegment);\n }\n\n return resourceList;\n }\n catch (Exception ex)\n {\n throw new Exception($\u0022Error listing monitored resources: {ex.Message}\u0022, ex);\n }\n }\n}\n\u0060\u0060\u0060\nand its test:\n\u0060\u0060\u0060cs\npublic class DatadogServiceTest\n{\n [Fact]\n public async Task ListMonitoredResourceTest() \n {\n // Arrange\n var mockedArmClient = Substitute.For\u003CArmClient\u003E();\n var azureClientService = Substitute.For\u003CAzureClientService\u003E();\n var datadogResource = Substitute.For\u003CDatadogMonitorResource\u003E();\n var monitoredResource = Substitute.For\u003CMonitoredResourceContent\u003E(); \n\n // Generally I want to be specific about my arg matchers so that we know we are constructing this resourceId correctly.\n azureClientService.GetArmClient(Args.Any\u003CTokenCredential\u003E(), Args.Any\u003CArmRetryOptions\u003E()).Returns(mockedArmClient);\n\n // I can do interesting things now based on the ArmClient\u0027s GetDatadogMonitorResource API docs.\n // For example, the API says it\u0027ll return a Response with 404 if the id is not found, \n // throw an ArgumentException in other scenarios, or fake what an empty monitor resource would look like, etc.\n mockedArmClient.GetDatadogMonitorResource(Arg.Any\u003CResourceIdentifier\u003E()).Returns(datadogResource);\n\n var datadogService = new DatadogService(azureClientService, tenantService);\n\n // Act\n var expectedResources = datadogService.ListMonitoredResources()\n\n // Assert\n // There is some string manipulation here I can verify.\n }\n}\n\u0060\u0060\u0060\n\n#### Example for services constructing a client\n\nIf there are services that construct their own clients, add to that partial class. For example, \u0060MonitorService\u0060 creates a \u0060LogQueryClient\u0060.\n\nThen add a file in their service folder, \u0060AzureClientService.Log.cs\u0060... and use that in their tests.\n\u0060\u0060\u0060cs\npublic partial class AzureClientService\n{", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-AppConfig", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/172" + }, + { + "IssueNumber": 199, + "Title": "[namespace mode] Invalid Parameters Testing failed: Inconsistent data returned in default or namespace mode", + "Body": "Title: [namespace mode] Invalid Parameters Testing failed: Inconsistent data returned in default or namespace mode\n\n**Description:**\nFor the test of missing required parameters in TC004.3 (Invalid Parameters Testing), when entering the prompt \u0060Create a new key in an Azure Key Vault\u0060, the returned results are different. The details are as follows:\n- Default mode: It try to automatically complete these required parameters to advance the process. \n \u003Cimg width=\u0022571\u0022 height=\u0022616\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/bc7c56a3-1ff3-4a13-8c4a-5414408e351e\u0022 /\u003E\n\n- Namespace mode: It prompts that the required parameters are missing \n \u003Cimg width=\u0022523\u0022 height=\u0022618\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/2f2a61a2-2ad3-4d09-bdff-acb21a09574b\u0022 /\u003E\n\n**Steps to Reproduce:**\n1. Run \u0060git clone https://github.com/azure/azure-mcp\u0060.\n2. Run \u0060dotnet build\u0060.\n3. Run \u0060az login\u0060.\n4. Configure \u0060mcp.json\u0060 in default or namespace mode.\n5. Start mcp server.\n6. Open GitHub Copilot in VS Code and [switch to Agent mode](https://code.visualstudio.com/docs/copilot/chat/chat-agent-mode).\n7. Click Refresh on the tools list, and only select the configured MCP Server Tools.\n8. Enter test prompts such as \u0060Create a new key in an Azure Key Vault\u0060.\n\n**Environment:**\n- OS: Windows.\n\n**Expected Behavior:**\nThe processing in both modes should be consistent for the prompts for invalid parameters.\n\n@jongio for notification.", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Core", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/199" + }, + { + "IssueNumber": 219, + "Title": "MCP Performs only basic types of query to Azure Search (azuremcp_search_index_query)", + "Body": "Title: MCP Performs only basic types of query to Azure Search (azuremcp_search_index_query)\n\nCurrently MCP only performs basic query to Azure Search and using only hybrid search, therefore user can\u0027t configure search parameters to get best search results.\nIs it possible make the search query more flexible?\n\n- Make query type Full instead of Basic\n- Add function parameter to specify search type?\n\nFunction name: azuremcp_search_index_query", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Search", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/219" + }, + { + "IssueNumber": 220, + "Title": "Azure MCP doesn\u0027t support JSON parameters", + "Body": "Title: Azure MCP doesn\u0027t support JSON parameters\n\nYou currently cannot make a tool that takes a JSON object or array as a parameter.\n\nThis is problematic because MCP protocol itself supports JSON objects. \n\nInstead, we get a parsing error if we try to pass JSON parameters:\n\nMessage:\u2009\n System.InvalidOperationException : The requested operation requires an element of type \u0027String\u0027, but the target element has type \u0027Object\u0027.\n\nStack Trace:\u2009\n ThrowHelper.ThrowJsonElementWrongTypeException(JsonTokenType expectedType, JsonTokenType actualType)\n JsonDocument.GetString(Int32 index, JsonTokenType expectedType)\n \u003C\u003Ec.\u003CParseFromDictionary\u003Eb__0_1(JsonElement e)\u2009line\u200945\n IEnumerableSelectIterator\u00602.MoveNext()\n String.Join(String separator, IEnumerable\u00601 values)\n CommandExtensions.ParseFromDictionary(Command command, IReadOnlyDictionary\u00602 arguments)\u2009line\u200945\n CommandFactoryToolLoader.CallToolHandler(RequestContext\u00601 request, CancellationToken cancellationToken)\u2009line\u2009108\n CompositeToolLoader.CallToolHandler(RequestContext\u00601 request, CancellationToken cancellationToken)\u2009line\u2009137\n McpRuntime.CallToolHandler(RequestContext\u00601 request, CancellationToken cancellationToken)\u2009line\u200976\n\nI\u0027m currently trying to add a tool that needs to take a list of JSON objects as a parameter For example:\n\ndata-sets: [\n {\n \u0022table\u0022: \u0022requests\u0022,\n \u0022filters\u0022: \u0022success=false\u0022,\n \u0022splitBy\u0022: \u0022resultCode\u0022\n }\n]", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Core", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/220" + }, + { + "IssueNumber": 221, + "Title": "Azure MCP no longer calls any tools with default arguments", + "Body": "Title: Azure MCP no longer calls any tools with default arguments\n\nLooks like the \u0022learn\u0022 tool from a namespace command always returns this response, without listing sub-tools.\n\nMCP config:\n\n\u0060\u0060\u0060\n{\n \u0022mcpServers\u0022: {\n \u0022azure-mcp-dev\u0022: {\n \u0022autoApprove\u0022: [],\n \u0022disabled\u0022: false,\n \u0022timeout\u0022: 60,\n \u0022type\u0022: \u0022stdio\u0022,\n \u0022command\u0022: \u0022D:\\\\azure-mcp\\\\.dist\\\\platform\\\\azure-mcp-win32-x64-0.5.0-alpha.1753469507\\\\package\\\\dist\\\\azmcp.exe\u0022,\n \u0022args\u0022: [\n \u0022server\u0022,\n \u0022start\u0022\n ]\n }\n }\n}\n\u0060\u0060\u0060\n\n(Ignore the namespace, it\u0027s under development currently. )\n\n\u0060\u0060\u0060\nHere are the available command and their parameters for \u0027applicationinsights\u0027 tool.\n\nIf you do not find a suitable command, run again with the \u0022learn=true\u0022 to get a list of available commands and their parameters.\nNext, identify the command you want to execute and run again with the \u0022command\u0022 and \u0022parameters\u0022 arguments.\n\n[\n {\n \u0022name\u0022: \u0022applicationinsights\u0022,\n \u0022description\u0022: \u0022Application Insights operations - Commands for diagnosing problems with applications monitored with Application Insights.This tool is a hierarchical MCP command router.\\r\\nSub commands are routed to MCP servers that require specific fields inside the \\u0022parameters\\u0022 object.\\r\\nTo invoke a command, set \\u0022command\\u0022 and wrap its args in \\u0022parameters\\u0022.\\r\\nSet \\u0022learn=true\\u0022 to discover available sub commands.\u0022,\n \u0022inputSchema\u0022: {\n \u0022type\u0022: \u0022object\u0022,\n \u0022properties\u0022: {\n \u0022intent\u0022: {\n \u0022type\u0022: \u0022string\u0022,\n \u0022description\u0022: \u0022The intent of the azure operation to perform.\u0022\n },\n \u0022command\u0022: {\n \u0022type\u0022: \u0022string\u0022,\n \u0022description\u0022: \u0022The command to execute against the specified tool.\u0022\n },\n \u0022parameters\u0022: {\n \u0022type\u0022: \u0022object\u0022,\n \u0022description\u0022: \u0022The parameters to pass to the tool command.\u0022\n },\n \u0022learn\u0022: {\n \u0022type\u0022: \u0022boolean\u0022,\n \u0022description\u0022: \u0022To learn about the tool and its supported child tools and parameters.\u0022,\n \u0022default\u0022: false\n }\n },\n \u0022required\u0022: [\n \u0022intent\u0022\n ],\n \u0022additionalProperties\u0022: false\n }\n }\n]\n\u0060\u0060\u0060", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Core", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/221" + }, + { + "IssueNumber": 225, + "Title": "Add \u0060azmcp sql server firewall-rule create\u0060 impl and test", + "Body": "Title: Add \u0060azmcp sql server firewall-rule create\u0060 impl and test\n\n[No description provided]", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-SQL", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/225" + }, + { + "IssueNumber": 234, + "Title": "[single mode] Failed to list the Log Analytics workspaces", + "Body": "Title: [single mode] Failed to list the Log Analytics workspaces\n\n**Description:**\nWhen entering the test prompt \u0060Show me the Log Analytics workspaces in my subscription\u0060 in mcp server single mode, the response fails with the following error:\n\u003Cimg width=\u0022673\u0022 height=\u0022698\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/2dedb923-b369-4bc6-8b11-36e2229d8646\u0022 /\u003E\n\n**Steps to Reproduce:**\n1. Run \u0060git clone https://github.com/azure/azure-mcp\u0060.\n2. Run \u0060dotnet build\u0060.\n3. Run \u0060az login\u0060.\n4. Configure \u0060mcp.json\u0060 in single mode.\n5. Start mcp server.\n6. Open GitHub Copilot in VS Code and [switch to Agent mode](https://code.visualstudio.com/docs/copilot/chat/chat-agent-mode).\n7. Click Refresh on the tools list, and only select the configured MCP Server Tools.\n8. Enter test prompts \u0060Show me the Log Analytics workspaces in my subscription\u0060.\n\n**Environment:**\n- OS: Windows.\n- Vscode Insiders Version: 1.103.0\n- GitHub Copilot Chat Version: 0.30.2025073102\n\n**Expected Behavior:**\nIt can successfully list the Log Analytics workspaces in single mode.\n\n@jongio and @joshfree for notification", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Monitor", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/234" + }, + { + "IssueNumber": 255, + "Title": "[Tool Description] Improve Marketplace tool description for better LLM selection", + "Body": "Title: [Tool Description] Improve Marketplace tool description for better LLM selection\n\n## Problem\r\n\r\nThe current Marketplace tool description lacks the detail and clarity needed for optimal LLM tool selection, resulting in an estimated confidence score of ~0.15 (well below target of \u22650.5).\r\n\r\n**Current Description Issues:**\r\n- Extremely vague purpose (\u0022managing and accessing\u0022)\r\n- Missing context about what Azure Marketplace contains\r\n- No usage guidance (when to use vs when not to use)\r\n- Poor parameter explanation\r\n- Missing operations detail (browsing, purchasing, etc.)\r\n- Formatting issues (missing space after period)\r\n- Too brief for a complex service\r\n\r\n## Current Description\r\n\u0060\u0060\u0060\r\nMarketplace operations - Commands for managing and accessing Azure Marketplace products and offers.This tool is a hierarchical MCP command router. Sub commands are routed to MCP servers that require specific fields inside the \u0022parameters\u0022 object. To invoke a command, set \u0022command\u0022 and wrap its args in \u0022parameters\u0022. Set \u0022learn=true\u0022 to discover available sub commands.\r\n\u0060\u0060\u0060\r\n\r\n## Suggested Improvement\r\n\u0060\u0060\u0060\r\nMarketplace operations - Commands for browsing, searching, and managing Azure Marketplace products including virtual machine images, SaaS applications, containers, and solution templates from Microsoft and third-party publishers. Use this tool when you need to search for marketplace offerings, view product details and pricing, browse available VM images, check software solutions, or explore deployment templates and applications available for Azure deployment. This tool helps discover and evaluate marketplace products for Azure infrastructure and application needs. Do not use this tool for purchasing/billing operations, managing existing deployed resources, or Azure resource management - this tool focuses on marketplace product discovery and information rather than resource deployment or management. This tool is a hierarchical MCP command router where sub-commands are routed to MCP servers that require specific fields inside the \u0022parameters\u0022 object. To invoke a command, set \u0022command\u0022 and wrap its arguments in \u0022parameters\u0022.", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Marketplace", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/255" + }, + { + "IssueNumber": 260, + "Title": "[Tool Description] Improve Service Bus tool description for better LLM selection", + "Body": "Title: [Tool Description] Improve Service Bus tool description for better LLM selection\n\n## Problem\r\n\r\nThe current Service Bus tool description is functional but lacks the detail and clarity needed for optimal LLM tool selection. Estimated confidence score of ~0.5 (at target but could be improved for better precision).\r\n\r\n**Current Description Issues:**\r\n- Missing usage guidance (when to use vs when not to use)\r\n- Limited context about messaging patterns and enterprise integration\r\n- Poor parameter explanation\r\n- Missing asynchronous messaging and decoupling context\r\n- Formatting issues (missing space after period)\r\n- No mention of messaging scenarios or enterprise communication patterns\r\n\r\n## Current Description\r\n\u0060\u0060\u0060\r\nService Bus operations - Commands for managing Azure Service Bus resources including queues, topics, and subscriptions. Includes operations for managing message queues, topic subscriptions, and retrieving details about Service Bus entities.This tool is a hierarchical MCP command router. Sub commands are routed to MCP servers that require specific fields inside the \u0022parameters\u0022 object. To invoke a command, set \u0022command\u0022 and wrap its args in \u0022parameters\u0022. Set \u0022learn=true\u0022 to discover available sub commands.\r\n\u0060\u0060\u0060\r\n\r\n## Suggested Improvement\r\n\u0060\u0060\u0060\r\nService Bus operations - Commands for managing Azure Service Bus messaging infrastructure including queues, topics, and subscriptions for reliable asynchronous communication and enterprise application integration. Use this tool when you need to manage message queues for point-to-point communication, configure topics and subscriptions for publish-subscribe messaging patterns, monitor message processing, or set up enterprise messaging scenarios for decoupled application architectures. This tool supports reliable messaging, dead letter handling, and enterprise integration patterns. Do not use this tool for real-time communication, direct API calls, database operations, or simple HTTP-based messaging - Service Bus is designed for asynchronous, reliable messaging between distributed applications and services.", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-ServiceBus", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/260" + }, + { + "IssueNumber": 266, + "Title": "[Tool Description] Improve Datadog tool description for better LLM selection", + "Body": "Title: [Tool Description] Improve Datadog tool description for better LLM selection\n\n## Problem\r\n\r\nThe current Datadog tool description is functional but lacks the detail and clarity needed for optimal LLM tool selection. Estimated confidence score of ~0.4-0.5 (around target but could be improved for better precision).\r\n\r\n**Current Description Issues:**\r\n- Missing usage guidance (when to use vs when not to use)\r\n- Limited context about Datadog vs native Azure monitoring tools\r\n- Poor parameter explanation\r\n- Missing integration setup and prerequisite context\r\n- Formatting issues (missing space after period)\r\n- No mention of third-party monitoring vs Azure-native solutions\r\n\r\n## Current Description\r\n\u0060\u0060\u0060\r\nDatadog operations - Commands for managing and monitoring Azure resources through Datadog integration. Includes operations for listing Datadog monitors and retrieving information about monitored Azure resources and their health status.This tool is a hierarchical MCP command router. Sub commands are routed to MCP servers that require specific fields inside the \u0022parameters\u0022 object. To invoke a command, set \u0022command\u0022 and wrap its args in \u0022parameters\u0022. Set \u0022learn=true\u0022 to discover available sub commands.\r\n\u0060\u0060\u0060\r\n\r\n## Suggested Improvement\r\n\u0060\u0060\u0060\r\nDatadog operations - Commands for managing and monitoring Azure resources through Datadog\u0027s third-party monitoring and observability platform integration with Azure services. Use this tool when you need to list Datadog monitors, retrieve Azure resource health status from Datadog dashboards, manage Datadog-Azure integrations, or work with monitoring data from Datadog\u0027s perspective rather than native Azure Monitor. This tool is ideal for organizations using Datadog as their primary monitoring solution and need to correlate Azure resource data with Datadog\u0027s observability platform. Do not use this tool for native Azure Monitor operations, Application Insights queries, Log Analytics workspace management, or Azure-native alerting - this tool specifically integrates with the Datadog third-party monitoring service.", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Datadog", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/266" + }, + { + "IssueNumber": 274, + "Title": "0.5.3 content issues - AppConfig set kv - new params", + "Body": "Title: 0.5.3 content issues - AppConfig set kv - new params\n\n[azmcp_commands.md](https://github.com/Azure/azure-mcp/blob/main/docs/azmcp-commands.md) doesn\u0027t match [CHANGELOG](https://github.com/Azure/azure-mcp/blob/main/CHANGELOG.md)\n\nChangelog for App Config set kv says there are 2 new params, content type and tag. I can see that in my content generation from source. \n\n\u003Cimg width=\u00221053\u0022 height=\u002243\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/6dfab213-e875-46f6-8eb6-980b356d084b\u0022 /\u003E\n\nHowever the commands file doesn\u0027t include that. \n\n\u003Cimg width=\u0022536\u0022 height=\u0022154\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/ff9173f2-cce5-4b4d-9c13-1554f174737f\u0022 /\u003E", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-AppConfig", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/274" + }, + { + "IssueNumber": 298, + "Title": "azmcp-messaging-eventgrid-topics-list", + "Body": "Title: azmcp-messaging-eventgrid-topics-list\n\n\u0060azmcp-messaging-eventgrid-topics-list\u0060 - List all Event Grid topics in a subscription with configuration and status information. This tool retrieves topic details including endpoints, access keys, and subscription information for event publishing and management. Returns topic information as JSON array. Requires subscription-id. - Suggested prompt: \u0022List all Event Grid topics in my subscription\u0022", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-EventGrid", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/298" + }, + { + "IssueNumber": 301, + "Title": "[ONBOARD] Azure Service Health", + "Body": "uptime reports, and trend analysis for business continuity planning\n\n## **Emerging Issue Early Warning System**\n**Scenario:** Mission-critical workload owners need advance notice of potential Azure service issues that could impact their operations\n\n**Solution:** AI agents can monitor \u0060azmcp resourcehealth emerging-issues list\u0060 to provide proactive alerts about developing issues before they affect customer workloads\n\n## **Automated Incident Response \u0026 Documentation**\n**Scenario:** Operations teams need to automatically gather comprehensive health data during incidents for faster resolution and post-incident reviews\n\n**Solution:** Agents can orchestrate multiple Resource Health APIs to collect complete incident context - resource status, service events, impacted resources, and metadata - creating automated incident reports and facilitating faster MTTR (Mean Time To Resolution)\n\nThese scenarios enable Azure customers to build intelligent, automated health monitoring and incident response systems through natural language interactions with AI agents, significantly reducing manual effort in\n\n### Timeline\n\nAugust 30", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-ServiceHealth", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/301" + }, + { + "IssueNumber": 530, + "Title": "[BUG] Kusto - table schema command retrieves incorrect information", + "Body": "Title: [BUG] Kusto - table schema command retrieves incorrect information\n\n### Describe the bug\n\nWe are trying to use Azure MCP Server for Kusto to see if it may be useful to help us with looking our data with VSCode agent. Our thought was that we could supplement the docstrings in the kusto table level and individual columns level so that the agent can read those information to learn how to leverage our dataset. \n \nHowever, we\u2019ve noticed that the agent cannot retrieve the correct schema on our table. Example conversation with VS Code Agent (with specific names replaced with ***** for privacy):\n\n\u0060\u0060\u0060\nMe: Can you get the schema of **************** table in ******** database on ******* cluster? Connect via URI method.\n\nVS: I\u0027ll help you get the schema of the *************** table in the ******** database on the ********* cluster using the URI method. Let me show you the exact command and result:\n\nInput:\n{\n \u0022intent\u0022: \u0022I want to get the schema of a table from a Kusto cluster using URI method\u0022,\n \u0022command\u0022: \u0022kusto_table_schema\u0022,\n \u0022parameters\u0022: {\n \u0022cluster-uri\u0022: \u0022https://********************\u0022,\n \u0022database\u0022: \u0022******\u0022,\n \u0022table\u0022: \u0022**************\u0022\n }\n}\n\nOutput:\n{\u0022status\u0022:200,\u0022message\u0022:\u0022Success\u0022,\u0022results\u0022:{\u0022schema\u0022:\u0022TableName:string,Schema:string,DatabaseName:string,Folder:string,DocString:string\u0022},\u0022duration\u0022:0}\n\u0060\u0060\u0060\n\nNote that the above output is not the schema for my table. This looks like the schema for some under-the-hood metadata table in Kusto?\n\nJust to further test out where the issue is at, I found the command line doc for Azure MCP to directly call the MCP server without going through agent, and calling table schema command directly, Azure MCP for Kusto does seem to return this incorrect schema?\n\n\n\n\u0060\u0060\u0060\nC:\\Users\\****\\.vscode\\extensions\\ms-azuretools.vscode-azure-mcp-server-0.8.0-win32-x64\\server\u003Eazmcp kusto table schema --cluster-uri https://************ --database ****** --table **************** --subscription **************************\n{\n \u0022status\u0022: 200,\n \u0022message\u0022: \u0022Success\u0022,\n \u0022results\u0022: {\n \u0022schema\u0022: \u0022TableName:string,Schema:string,DatabaseName:string,Folder:string,DocString:string\u0022\n },\n \u0022duration\u0022: 7428\n}\n\u0060\u0060\u0060", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Kusto", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/530" + }, + { + "IssueNumber": 615, + "Title": "Failed to rename SQL database via \u0060azmcp_sql_db_rename\u0060: new database name detected as empty", + "Body": "Title: Failed to rename SQL database via \u0060azmcp_sql_db_rename\u0060: new database name detected as empty\n\n**Description:**\nEntered the prompt \u0060Rename my Azure SQL database \u003Cdatabase_name\u003E to \u003Cnew_database_name\u003E on server \u003Cserver_name\u003E\u0060 in chat, and called the \u0060azmcp_sql_db_rename\u0060 tool, but the operation failed with the following response:\n\u003Cimg width=\u0022529\u0022 height=\u0022598\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/6336bdba-5390-4fbb-9160-72d25cc738b9\u0022 /\u003E\n\n**Steps to Reproduce:**\n1. Start mcp server in namespaces mode.\n2. Open GitHub Copilot in VS Code and [switch to Agent mode](https://code.visualstudio.com/docs/copilot/chat/chat-agent-mode).\n3. Click Refresh on the tools list, and select the \u0060Built-in\u0060, \u0060Extension: Github Copilot for Azure\u0060, \u0060MCP Server: Microsoft Docs\u0060 and \u0060MCP Server: Azure MCP\u0060.\n4. Enter test prompts \u0060Rename my Azure SQL database \u003Cdatabase_name\u003E to \u003Cnew_database_name\u003E on server \u003Cserver_name\u003E\u0060\n\n**Environment:**\n\n- OS: Windows.\n- Vscode Version: 1.104.2\n- GitHub Copilot Chat Version: 0.31.3\n- Large Language Model: GPT-4.1\n- Virtual Tool: Off\n- Azure MCP Server: 0.8.2\n\n**Expected Behavior:**\nCalling the \u0060azmcp_sql_db_rename\u0060 tool can successfully modify the database name.\n\n@joshfree for notification", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-SQL", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/615" + }, + { + "IssueNumber": 657, + "Title": "[BUG] Newtonsoft.Json version vulnerable and out of date", + "Body": "Title: [BUG] Newtonsoft.Json version vulnerable and out of date\n\n### Describe the bug\n\nNewtonsoft.Json is at version 10.0.2 which is vulnerable per CVE-2024-21907. This would be fixed in version 13.0.1. The dependency appears to come from the Cosmos DB library.\n\n### Expected behavior\n\nUse version 13.0.1, at least, so it does not have a high alert in docker image scanners and other tools\n\n### Actual behavior\n\nGenerates high vulnerability in the various scanners\n\n### Reproduction Steps\n\nRun a scanner on the docker image:\n\n\u0060trivy image azure-sdk/azure-mcp:0.8.3\u0060\n\n### Environment\n\nN/A", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-CosmosDB", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/657" + }, + { + "IssueNumber": 827, + "Title": "[BUG] CLI --namespaces incorrect for bestpractices \u0060get_bestpractices\u0060", + "Body": "Title: [BUG] CLI --namespaces incorrect for bestpractices \u0060get_bestpractices\u0060\n\n### Describe the bug\n\n1. dotnet run --tools list --namespaces\n2. partial output ...\n\n\u0060\u0060\u0060\n get_bestpractices Azure best practices - Commands return a list of best practices for code generation, operations and deployment \n when working with Azure services. It should be called for any code generation, deployment or \n operations involving Azure, Azure Functions, Azure Kubernetes Service (AKS), Azure Container \n Apps (ACA), Bicep, Terraform, Azure Cache, Redis, CosmosDB, Entra, Azure Active Directory, \n Azure App Services, or any other Azure technology or programming language. Only call this function \n when you are confident the user is discussing Azure. If this tool needs to be categorized, \n it belongs to the Get Azure Best Practices category.\n\u0060\u0060\u0060\n\n\n### Expected behavior\n\nNot preceded by \u0060get_\u0060. \n\n### Actual behavior\n\nIts the only tool preceded by \u0060get_\u0060. \n\n### Reproduction Steps\n\n1. In dev container, go to \u0060servers/Azure.MCP.Server/src\u0060 on main branch\n2. In terminal, run \u0060dotnet run --tools list --namespaces\u0060\n\n### Environment\n\nDev container in the repo hosted in Windows", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-BestPractices", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/827" + }, + { + "IssueNumber": 845, + "Title": "[BUG] Azure Communication Services - parameter name - endpoint vs connection string", + "Body": "Title: [BUG] Azure Communication Services - parameter name - endpoint vs connection string\n\n### Describe the bug\n\nThe azmcp-commands.md file says the param name is connection string but the az mcp CLI say it is endpoint. Is there a reason it has two different names? \n\ncommands file\n\n\u003Cimg width=\u0022965\u0022 height=\u0022763\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/c2f3fac8-b56d-4f25-81fc-2215e419a827\u0022 /\u003E\n\ncli output\n\n\u003Cimg width=\u00221281\u0022 height=\u00221473\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/cd62b86a-649c-43f1-8525-502b5917e527\u0022 /\u003E\n\nsrc for tool\n\n\u003Cimg width=\u00221622\u0022 height=\u00221055\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/8924f6ed-339d-43e7-9e3a-22034137de3f\u0022 /\u003E\n\nI asked Copilot what it thought the term should be based on existing published Azure Communications Server docs and it said connection string. \n\nCan the src and cli change to use that term since it is already used in the commands file and the 1P docs? \n\n### Expected behavior\n\nConsistent params across surface. \n\n### Actual behavior\n\nNot sure which to use\n\n### Reproduction Steps\n\nYou can check the various places yourself. \n\n### Environment\n\n_No response_", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Communication", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/845" + }, + { + "IssueNumber": 863, + "Title": "[BUG] Can\u0027t query long duration kusto query, raise Timeout error", + "Body": "Title: [BUG] Can\u0027t query long duration kusto query, raise Timeout error\n\n### Describe the bug\n\n{\u0022status\u0022:500,\u0022message\u0022:\u0022The request was canceled due to the configured HttpClient.Timeout of 100 seconds elapsing.. To mitigate this issue, please refer to the troubleshooting guidelines here at https://aka.ms/azmcp/troubleshooting.\u0022,\u0022results\u0022:{\u0022message\u0022:\u0022The request was canceled due to the configured HttpClient.Timeout of 100 seconds elapsing.\u0022,\u0022stackTrace\u0022:null,\u0022type\u0022:\u0022TaskCanceledException\u0022},\u0022duration\u0022:0}\n\n### Expected behavior\n\nNeed some way to configure timeout, so that users can user the MCP to do complex analysis\n\n### Actual behavior\n\nraise exception when query runs for longer than 100 seconds.\n\n### Reproduction Steps\n\nRun a complex kusto query for longer than 100 seconds.\n\n### Environment\n\n_No response_", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Kusto", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/863" + }, + { + "IssueNumber": 939, + "Title": "[CONSOLIDATED] A lot of \u0060get_azure_resource_and_app_health_status\u0060 prompts do not trigger the corresponding tool as expected", + "Body": "Title: [CONSOLIDATED] A lot of \u0060get_azure_resource_and_app_health_status\u0060 prompts do not trigger the corresponding tool as expected\n\n**Description:**\nIn \u0060consolidated\u0060 mode, when testing prompts related to the \u0060get_azure_resource_and_app_health_status\u0060 tool, most prompts will pick up Azure Cli tool over the MCP tool, as shown below:\n\u003Cimg width=\u0022738\u0022 height=\u0022800\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/ed73909b-851b-4f18-a264-14edab0c7d36\u0022 /\u003E\n\u003Cimg width=\u0022744\u0022 height=\u0022535\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/c2f2804a-bb3a-4b56-a078-82aee63b3e9a\u0022 /\u003E\n\n**Steps to Reproduce:**\n1. Start mcp server in \u0060consolidated\u0060 mode.\n2. Open GitHub Copilot in VS Code and [switch to Agent mode](https://code.visualstudio.com/docs/copilot/chat/chat-agent-mode).\n3. Click Refresh on the tools list, and select the \u0060Built-in\u0060, \u0060Extension: Github Copilot for Azure\u0060, \u0060MCP Server: Microsoft Docs\u0060, \u0060github MCP server\u0060 and \u0060MCP Server: Azure MCP\u0060.\n4. Enter test prompts \u0060Query an agent in my AI foundry project\u0060, \u0060Query and evaluate an agent in my AI Foundry project for task_adherence\u0060 and \u0060Evaluate the full query and response I got from my agent for task_adherence\u0060.\n\n**Environment:**\n\n- OS: Windows.\n- Vscode Version: 1.104.2\n- GitHub Copilot Chat Version: 0.31.3\n- Large Language Model: **Claude Sonnet 4.5**\n- Virtual Tool: On\n- Azure MCP Server: **0.9.7**\n- Test Prompts:\n\u0060\u0060\u0060\n1. Get metric definitions for app service mhwebapp from the namespace\n2. Analyze the performance trends and response times for Application Insights resource \u003Cresource_name\u003E over the last \u003Ctime_period\u003E\n3. Get the average CpuPercentage metric for app service \u0027mhwebapp\u0027 in group \u0027mhmcp\u0027 over the last 48 hour with intervals\n4. Get the availability status for resource mhwebapp in group mhmcp\n5. Investigate error rates and failed requests for Application Insights resource mhinsight in group mhmcp for the last 48h\n6. List active service health events in my subscription\n7. List all available table types in the Log Analytics workspace \u003Cworkspace_name\u003E\n8. List all Azure Managed Grafana in one subscription\n9. List all Log Analytics workspaces in my subscription", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Core", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/939" + }, + { + "IssueNumber": 960, + "Title": "[ONBOARD] Azure Agent Code Gen Best Practices Tool for Ignite", + "Body": "Title: [ONBOARD] Azure Agent Code Gen Best Practices Tool for Ignite\n\n### Service / Tool Name\n\nAzureAgentBestPractices - The best practice of generating agent code in Azure \n\n### Contacts\n\nJason Zhu(jasoz), Qianhao Dong(qidon), Xiaofu Huang(xiaofhua)\n\n### Intended Agent Scenarios\n\n## Proposed new namespace:\n\u0060Azure.MCP.Tools.AgentBestPractices\u0060 (**AzureAgentBestPractices** namespace)\nThis namespace provides best practices guidance for building AI applications and agents in Azure. \n\n## Proposed new tool:\n\u0060azmcp-get-agent-bestpractices-get\u0060\nThe associated tool offers actionable recommendations for developers before generating code for any AI apps/agents in Azure. It recommends developing with Azure AI Foundry models, working with the Microsoft Agent Framework, or implementing AI agents within Azure AI Foundry. It is intended to be used when users are coding AI apps/agents in Azure.\n\n## Use cases of this tool in GitHub Copilot:\n- Write a simple console app that tells a joke about a given topic using an AI Foundry model.\n- Create an AI app to help manage travel queries in Azure (e.g., booking, itinerary management, recommendations).\n......\n\n\n### Timeline\n\nNovember 2025 (Ignite)", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-BestPractices", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/960" + }, + { + "IssueNumber": 100, + "Title": "[Azure MCP] Add command: \u0060azmcp azuremanagedlustre filesystem get-sku-info\u0060", + "Body": "Title: [Azure MCP] Add command: \u0060azmcp azuremanagedlustre filesystem get-sku-info\u0060\n\n[No description provided]", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-managedlustre", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/100" + }, + { + "IssueNumber": 1017, + "Title": "[BUG] CLI should return descriptive text for metadata", + "Body": "Title: [BUG] CLI should return descriptive text for metadata\n\n### Describe the bug\n\nThe cli\u0027s information for metadata isn\u0027t enough information to be processed in content generation. The tools have name, description, and type. Can that extend to the metadata as well? \n\nIf you can enter the description you want for the metadata, I can pull from the CLI. @joshfree @xiangyan99 \n\n### Expected behavior\n\nInformation to generate docs for metadata. \n\n### Actual behavior\n\n\u0060\u0060\u0060json\n \u0022metadata\u0022: {\n \u0022destructive\u0022: true,\n \u0022idempotent\u0022: true,\n \u0022openWorld\u0022: false,\n \u0022readOnly\u0022: false,\n \u0022secret\u0022: false,\n \u0022localRequired\u0022: false\n }\n\u0060\u0060\u0060\u0060\n\n### Reproduction Steps\n\ndotnet run -- tools list\n\n### Environment\n\n_No response_", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Core", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/1017" + }, + { + "IssueNumber": 1025, + "Title": "[BUG] azd min version check error could be clearer", + "Body": "Title: [BUG] azd min version check error could be clearer\n\n### Describe the bug\n\nazd version check tells user azd isn\u0027t install, but it\u0027s just not the right version\n\n\u003Cimg width=\u00221267\u0022 height=\u00221455\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/a7cd2281-7156-49d5-9734-80578de4d604\u0022 /\u003E\n\n### Expected behavior\n\ntells user they need to upgrade\n\n### Actual behavior\n\nfails for missing azd\n\n### Reproduction Steps\n\nrun #azd command with azmcp loaded\n\n### Environment\n\n_No response_", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Azd", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/1025" + }, + { + "IssueNumber": 1030, + "Title": "AZURE_TOKEN_CREDENTIALS environment variable not respected - ManagedIdentityCredential never attempted", + "Body": "Title: AZURE_TOKEN_CREDENTIALS environment variable not respected - ManagedIdentityCredential never attempted\n\n## Summary\n\nThe \u0060AZURE_TOKEN_CREDENTIALS\u0060 environment variable (introduced in PR #56) is not being respected at runtime. Despite setting \u0060AZURE_TOKEN_CREDENTIALS=\u0022prod\u0022\u0060 or \u0060AZURE_TOKEN_CREDENTIALS=\u0022ManagedIdentityCredential\u0022\u0060, the credential chain always falls through to \u0060InteractiveBrowserCredential\u0060, which fails in server environments (Azure Web App, Function Apps, Container Apps).\n\nThis prevents the use of Managed Identity authentication in production Azure hosting environments, which is a critical blocker for enterprise deployments.\n\n## Environment\n\n- **Package**: \u0060@azure/mcp@1.0.0\u0060 (published October 30, 2025)\n- **Platform**: Azure Web App for Linux (Node.js 20 LTS)\n- **Managed Identity**: User-Assigned Managed Identity configured and assigned to Web App\n- **Permissions**: Database Admin role on Azure Data Explorer cluster (verified working with other apps)\n- **Runtime**: Node.js spawning MCP server via \u0060npx -y @azure/mcp@1 server start --namespace kusto --read-only\u0060\n\n## Expected Behavior\n\nAccording to PR #56 documentation and code (lines 18-24 of \u0060CustomChainedCredential.cs\u0060):\n\n\u0060\u0060\u0060csharp\n/// The credential chain behavior can be controlled via the AZURE_TOKEN_CREDENTIALS environment variable:\n/// - \u0022dev\u0022: Visual Studio \u2192 Visual Studio Code \u2192 Azure CLI \u2192 Azure PowerShell \u2192 Azure Developer CLI\n/// - \u0022prod\u0022: Environment \u2192 Workload Identity \u2192 Managed Identity\n/// - Specific credential name (e.g., \u0022AzureCliCredential\u0022): Only that credential\n\u0060\u0060\u0060\n\nWhen \u0060AZURE_TOKEN_CREDENTIALS=\u0022prod\u0022\u0060 is set, the credential chain should be:\n1. EnvironmentCredential\n2. WorkloadIdentityCredential\n3. **ManagedIdentityCredential** \u2705 (Should be included)\n\nWhen \u0060AZURE_TOKEN_CREDENTIALS=\u0022ManagedIdentityCredential\u0022\u0060 is set, only ManagedIdentityCredential should be attempted.\n\n## Actual Behavior\n\nThe credential chain **always ignores** the \u0060AZURE_TOKEN_CREDENTIALS\u0060 environment variable and falls through to \u0060InteractiveBrowserCredential\u0060:\n\n\u0060\u0060\u0060\nError: The ChainedTokenCredential failed due to an unhandled exception:", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Core", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/1030" + }, + { + "IssueNumber": 1062, + "Title": "[CONSOLIDATED] Some \u0060deploy_azure_resources_and_applications\u0060 prompts do not trigger the corresponding tool as expected", + "Body": "Title: [CONSOLIDATED] Some \u0060deploy_azure_resources_and_applications\u0060 prompts do not trigger the corresponding tool as expected\n\n**Description:**\nIn \u0060consolidated\u0060 mode, when testing prompts related to the \u0060deploy_azure_resources_and_applications\u0060 tool, some prompts do not trigger the corresponding tool as expected, as shown below:\n- Test Prompt: \u0060Show me the rules to generate bicep scripts\u0060\n\u003Cimg width=\u0022675\u0022 height=\u0022806\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/be3b6b64-167b-4d93-a359-431fe6ff98d3\u0022 /\u003E\n\n- Test Prompt: \u0060Create a plan to deploy this application to azure\u0060\n\u003Cimg width=\u0022666\u0022 height=\u0022690\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/f640b5ff-2dbd-4325-a1d7-937b7ccb2ec0\u0022 /\u003E\n\n- Test Prompt: \u0060Show me the log of the application deployed by azd\u0060\n\u003Cimg width=\u0022673\u0022 height=\u0022517\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/e920bc3c-3237-42ce-9c09-ffaa035926f7\u0022 /\u003E\n\n**Steps to Reproduce:**\n1. Start mcp server in \u0060consolidated\u0060 mode.\n2. Open GitHub Copilot in VS Code and [switch to Agent mode](https://code.visualstudio.com/docs/copilot/chat/chat-agent-mode).\n3. Click Refresh on the tools list, and select the \u0060Built-in\u0060, \u0060Extension: Github Copilot for Azure\u0060, \u0060github MCP server\u0060 and \u0060MCP Server: Azure MCP\u0060.\n4. Enter test prompts \u0060Show me the rules to generate bicep scripts\u0060, \u0060Create a plan to deploy this application to azure\u0060, \u0060Show me the log of the application deployed by azd\u0060.\n\n**Environment:**\n\n- OS: Windows.\n- Vscode Version: 1.105.1\n- GitHub Copilot Chat Version: 0.32.4\n- Large Language Model: **Claude Sonnet 4.5**\n- Virtual Tool: On\n- Azure MCP Server: **1.0.0**\n\n\n**Expected Behavior:**\nThese prompts can successfully trigger the expected \u0060deploy_azure_resources_and_applications\u0060 tool.\n\n@joshfree for notification", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Core", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/1062" + }, + { + "IssueNumber": 1082, + "Title": "[BUG] Test failure: Azure.Mcp.Tools.Sql.UnitTests.Database.DatabaseDeleteCommandTests.ExecuteAsync_ValidatesInputCorrectly", + "Body": "Title: [BUG] Test failure: Azure.Mcp.Tools.Sql.UnitTests.Database.DatabaseDeleteCommandTests.ExecuteAsync_ValidatesInputCorrectly\n\n### Describe the bug\n\nLink to the build: https://dev.azure.com/azure-sdk/public/_build/results?buildId=5539134\u0026view=logs\u0026j=dc60c7e7-299e-5b09-033c-25aa80e4127e\u0026t=a38f592e-61d7-507f-c7b1-a8fa3a04ca5c\n\nError message:\n\u0060\u0060\u0060\n Failed Azure.Mcp.Tools.Sql.UnitTests.Database.DatabaseDeleteCommandTests.ExecuteAsync_ValidatesInputCorrectly(args: \u0022--resource-group rg --server server1 --database db\u0022\u00B7\u00B7\u00B7, shouldSucceed: False) [3 ms]\n Error Message:\n Assert.Equal() Failure: Values differ\nExpected: BadRequest\nActual: OK\n Stack Trace:\n at Azure.Mcp.Tools.Sql.UnitTests.Database.DatabaseDeleteCommandTests.ExecuteAsync_ValidatesInputCorrectly(String args, Boolean shouldSucceed) in /Users/runner/work/1/s/tools/Azure.Mcp.Tools.Sql/tests/Azure.Mcp.Tools.Sql.UnitTests/Database/DatabaseDeleteCommandTests.cs:line 86\n\u0060\u0060\u0060\n\n### Expected behavior\n\nTest should pass on CI\n\n### Actual behavior\n\nTest failed\n\n### Reproduction Steps\n\nI am not sure. It seems to be flaky.\n\n### Environment\n\n_No response_", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-SQL", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/1082" + }, + { + "IssueNumber": 1083, + "Title": "Add azmcp azuremanagedlustre filesystem auto importjob cancel", + "Body": "Title: Add azmcp azuremanagedlustre filesystem auto importjob cancel\n\nAdd azmcp azuremanagedlustre filesystem import-job cancel , required testing and docs.", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-managedlustre", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/1083" + }, + { + "IssueNumber": 1097, + "Title": "[BUG] can the CLI tool return the version?", + "Body": "Title: [BUG] can the CLI tool return the version?\n\n### Describe the bug\n\nThe version number needs to be return in the output. Can you also tell me where the version number comes from (GH tag or something else?) because I\u0027m building from source. Something is going on with --namespaces and I see i t mentioned in the Azure MCP changelog. \n\n\u003Cimg width=\u0022888\u0022 height=\u0022256\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/c3d325b8-319d-4e60-9bcb-84be83b343d5\u0022 /\u003E\n\n### Expected behavior\n\nAbility to know which version of cli is running. \n\n### Actual behavior\n\nNo versioning.\n\n### Reproduction Steps\n\ndotnet run --no-build -- tools --help\n\n### Environment\n\nWindow 11 host with src repo dev container.", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Core", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/1097" + }, + { + "IssueNumber": 1129, + "Title": "move docs/resources/Walkthrough/*.png under images sub-folder", + "Body": "Title: move docs/resources/Walkthrough/*.png under images sub-folder\n\nThere are a number of images checked in under https://github.com/microsoft/mcp/tree/main/servers/Azure.Mcp.Server/docs/resources/Walkthrough that are referenced from the VS Code VSIX README.md. These binary files should move under the existing https://github.com/microsoft/mcp/tree/main/servers/Azure.Mcp.Server/images folder. \u0022walkthrough\u0022 should have a better name to make it clearer that these are used by the VS Code VSIX.", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-VSIX", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/1129" + }, + { + "IssueNumber": 1214, + "Title": "[BUG] Remote: OAuth protected resource metadata has wrong protocol in ACA", + "Body": "Title: [BUG] Remote: OAuth protected resource metadata has wrong protocol in ACA\n\n### Describe the bug\n\nThe HTTP 401 challenge for unauthenticated requests uses the incoming request protocol for crafting the \u0060resource_metadata\u0060 value in the \u0060WWWAuthenticate\u0060 as in https://github.com/microsoft/mcp/blob/493f8def1f37be543686ee9763be0774306d11c6/core/Azure.Mcp.Core/src/Areas/Server/Commands/ServiceStartCommand.cs#L412\n\nThe protocol for the URL is fine when the MCP server is being directly connected by the client, such as local development or App Service. ACA container apps would see the \u0060http\u0060 protocol because that\u0027s the default behavior for the ACA environment\u0027s reverse proxy.\n\n### Expected behavior\n\n \u0060resource_metadata\u0060 value in the \u0060WWWAuthenticate\u0060 should match the original client request, including both protocol and host name.\n\n### Actual behavior\n\nOn ACA apps, \u0060resource_metadata\u0060 value in the \u0060WWWAuthenticate\u0060 matches the correct host name but the protocol is \u0060http\u0060. This results in clients like VS Code calling a URL that fails.\n\n### Reproduction Steps\n\nasdf\n\n### Environment\n\n_No response_", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "remote-mcp", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/1214" + }, + { + "IssueNumber": 1231, + "Title": "[Remote] Consider using AddHttpClientLatencyTelemetry for advanced troubleshooting", + "Body": "Title: [Remote] Consider using AddHttpClientLatencyTelemetry for advanced troubleshooting\n\n### Describe the bug\n\nLow-pri but could be great for the remote case: https://learn.microsoft.com/en-us/dotnet/core/extensions/httpclient-latency-extensions?tabs=dotnet-cli\n\nTL;DR: outbound HTTP requests can get stuck or slow in a few different ways. There\u0027s a lot of song-and-dance with the TCP connection, the HTTP handshaking, HTTP headers/bodies/etc. I (@vukelich) have gone so far as to needing to implement this entire thing myself to determine why some network traffic to ARM was disappearing from my App Service because I could see the request in my outgoing telemetry but ARM telemetry never saw the incoming request.", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "remote-mcp", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/1231" + }, + { + "IssueNumber": 1275, + "Title": "Migrate Azure.Mcp.Tools.Aks.LiveTests LiveTests to Recorded Tests", + "Body": "Title: Migrate Azure.Mcp.Tools.Aks.LiveTests LiveTests to Recorded Tests\n\nMigrate tests within tools/Azure.Mcp.Tools.Aks/tests/Azure.Mcp.Tools.Aks.LiveTests/Azure.Mcp.Tools.Aks.LiveTests.csproj to recordings. Utilize copilot to assist with the migration process for Azure.Mcp.Tools.Aks.LiveTests.\r\n - For additional guidance check [the recorded tests document](https://github.com/microsoft/mcp/blob/main/docs/recorded-tests.md)\r\n\r\nThis task will be considered complete when the livetests can be invoked without the presence of a .testsettings.json file.\r\n\r\nSubmit a PR with your change and verify that the recorded tests are running in the [recorded test step](https://dev.azure.com/azure-sdk/internal/_build/results?buildId=5627747\u0026view=logs\u0026jobId=1e679852-4871-5dae-dd38-eb073eb853d4\u0026j=1e679852-4871-5dae-dd38-eb073eb853d4\u0026t=2f22000c-4a69-5b6e-fbac-d06c3b6f57da)", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Aks", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/1275" + }, + { + "IssueNumber": 1277, + "Title": "Migrate Azure.Mcp.Tools.AppService.LiveTests LiveTests to Recorded Tests", + "Body": "Title: Migrate Azure.Mcp.Tools.AppService.LiveTests LiveTests to Recorded Tests\n\nMigrate tests within tools/Azure.Mcp.Tools.AppService/tests/Azure.Mcp.Tools.AppService.LiveTests/Azure.Mcp.Tools.AppService.LiveTests.csproj to recordings. Utilize copilot to assist with the migration process for Azure.Mcp.Tools.AppService.LiveTests.\r\n - For additional guidance check [the recorded tests document](https://github.com/microsoft/mcp/blob/main/docs/recorded-tests.md)\r\n\r\nThis task will be considered complete when the livetests can be invoked without the presence of a .testsettings.json file.\r\n\r\nSubmit a PR with your change and verify that the recorded tests are running in the [recorded test step](https://dev.azure.com/azure-sdk/internal/_build/results?buildId=5627747\u0026view=logs\u0026jobId=1e679852-4871-5dae-dd38-eb073eb853d4\u0026j=1e679852-4871-5dae-dd38-eb073eb853d4\u0026t=2f22000c-4a69-5b6e-fbac-d06c3b6f57da)", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-AppService", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/1277" + }, + { + "IssueNumber": 1278, + "Title": "Migrate Azure.Mcp.Tools.Authorization.LiveTests LiveTests to Recorded Tests", + "Body": "Title: Migrate Azure.Mcp.Tools.Authorization.LiveTests LiveTests to Recorded Tests\n\nMigrate tests within tools/Azure.Mcp.Tools.Authorization/tests/Azure.Mcp.Tools.Authorization.LiveTests/Azure.Mcp.Tools.Authorization.LiveTests.csproj to recordings. Utilize copilot to assist with the migration process for Azure.Mcp.Tools.Authorization.LiveTests.\r\n - For additional guidance check [the recorded tests document](https://github.com/microsoft/mcp/blob/main/docs/recorded-tests.md)\r\n\r\nThis task will be considered complete when the livetests can be invoked without the presence of a .testsettings.json file.\r\n\r\nSubmit a PR with your change and verify that the recorded tests are running in the [recorded test step](https://dev.azure.com/azure-sdk/internal/_build/results?buildId=5627747\u0026view=logs\u0026jobId=1e679852-4871-5dae-dd38-eb073eb853d4\u0026j=1e679852-4871-5dae-dd38-eb073eb853d4\u0026t=2f22000c-4a69-5b6e-fbac-d06c3b6f57da)", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Auth", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/1278" + }, + { + "IssueNumber": 1282, + "Title": "Migrate Azure.Mcp.Tools.Cosmos.LiveTests LiveTests to Recorded Tests", + "Body": "Title: Migrate Azure.Mcp.Tools.Cosmos.LiveTests LiveTests to Recorded Tests\n\nMigrate tests within tools/Azure.Mcp.Tools.Cosmos/tests/Azure.Mcp.Tools.Cosmos.LiveTests/Azure.Mcp.Tools.Cosmos.LiveTests.csproj to recordings. Utilize copilot to assist with the migration process for Azure.Mcp.Tools.Cosmos.LiveTests.\r\n - For additional guidance check [the recorded tests document](https://github.com/microsoft/mcp/blob/main/docs/recorded-tests.md)\r\n\r\nThis task will be considered complete when the livetests can be invoked without the presence of a .testsettings.json file.\r\n\r\nSubmit a PR with your change and verify that the recorded tests are running in the [recorded test step](https://dev.azure.com/azure-sdk/internal/_build/results?buildId=5627747\u0026view=logs\u0026jobId=1e679852-4871-5dae-dd38-eb073eb853d4\u0026j=1e679852-4871-5dae-dd38-eb073eb853d4\u0026t=2f22000c-4a69-5b6e-fbac-d06c3b6f57da)", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-CosmosDB", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/1282" + }, + { + "IssueNumber": 1290, + "Title": "Migrate Azure.Mcp.Tools.LoadTesting.LiveTests LiveTests to Recorded Tests", + "Body": "Title: Migrate Azure.Mcp.Tools.LoadTesting.LiveTests LiveTests to Recorded Tests\n\nMigrate tests within tools/Azure.Mcp.Tools.LoadTesting/tests/Azure.Mcp.Tools.LoadTesting.LiveTests/Azure.Mcp.Tools.LoadTesting.LiveTests.csproj to recordings. Utilize copilot to assist with the migration process for Azure.Mcp.Tools.LoadTesting.LiveTests.\r\n - For additional guidance check [the recorded tests document](https://github.com/microsoft/mcp/blob/main/docs/recorded-tests.md)\r\n\r\nThis task will be considered complete when the livetests can be invoked without the presence of a .testsettings.json file.\r\n\r\nSubmit a PR with your change and verify that the recorded tests are running in the [recorded test step](https://dev.azure.com/azure-sdk/internal/_build/results?buildId=5627747\u0026view=logs\u0026jobId=1e679852-4871-5dae-dd38-eb073eb853d4\u0026j=1e679852-4871-5dae-dd38-eb073eb853d4\u0026t=2f22000c-4a69-5b6e-fbac-d06c3b6f57da)", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-LoadTesting", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/1290" + }, + { + "IssueNumber": 1297, + "Title": "Migrate Azure.Mcp.Tools.Search.LiveTests LiveTests to Recorded Tests", + "Body": "Title: Migrate Azure.Mcp.Tools.Search.LiveTests LiveTests to Recorded Tests\n\nMigrate tests within tools/Azure.Mcp.Tools.Search/tests/Azure.Mcp.Tools.Search.LiveTests/Azure.Mcp.Tools.Search.LiveTests.csproj to recordings. Utilize copilot to assist with the migration process for Azure.Mcp.Tools.Search.LiveTests.\r\n - For additional guidance check [the recorded tests document](https://github.com/microsoft/mcp/blob/main/docs/recorded-tests.md)\r\n\r\nThis task will be considered complete when the livetests can be invoked without the presence of a .testsettings.json file.\r\n\r\nSubmit a PR with your change and verify that the recorded tests are running in the [recorded test step](https://dev.azure.com/azure-sdk/internal/_build/results?buildId=5627747\u0026view=logs\u0026jobId=1e679852-4871-5dae-dd38-eb073eb853d4\u0026j=1e679852-4871-5dae-dd38-eb073eb853d4\u0026t=2f22000c-4a69-5b6e-fbac-d06c3b6f57da)", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Search", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/1297" + }, + { + "IssueNumber": 134, + "Title": "improve azmcp entry in cline/mcp-marketplace", + "Body": "Title: improve azmcp entry in cline/mcp-marketplace\n\n1. File an issue here with this template (requires testing with Cline): https://github.com/cline/mcp-marketplace/issues/new?template=mcp-server-submission.yml\n2. Consider adding a link to https://cline.bot/mcp-marketplace on our (TBD) list of MCP Registries / Marketplaces / Repositories\n\n\n### How It Works\n\n1. Open Cline in VS Code ([we just hit 700,000 downloads, by the way - thanks everyone!](https://cline.ghost.io/introducing-the-mcp-marketplace-clines-new-app-store/))\n2. Navigate to the MCP Marketplace\n3. Find an MCP server you want (we\u0027ve got everything from Figma integration to web search)\n4. Click \u0022Download\u0022\n5. Let Cline handle the setup\n\n\n### For MCP Developers\nIf you\u0027re building MCP servers (you wonderful human, you), we\u0027re introducing a new standard: the \u0060llms-installation.md\u0060 file. It\u0027s a dedicated set of instructions that helps AI agents like Cline install your MCP server reliably. Think of it as writing instructions for a very capable but literal-minded junior developer. Include:\n\n- Required dependencies\n- API key requirements (both required and optional)\n- Step-by-step installation process\n- Common troubleshooting tips\n\nExample [llms-install.md](https://github.com/focusonyoursite/cline-magic-mcp/blob/main/llms-install.md)\n\n#### Want to get your MCP server listed? Create an issue in our [mcp-marketplace repo](https://github.com/cline/mcp-marketplace?ref=cline.ghost.io) with:\n\n1. Your GitHub repo URL\n2. A 400x400 PNG logo\n3. A brief description of why it should be included", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-McpRegistry", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/134" + }, + { + "IssueNumber": 1349, + "Title": "Add azmcp azuremanagedlustre filesystem autoimport-job get", + "Body": "Title: Add azmcp azuremanagedlustre filesystem autoimport-job get\n\nAdd azmcp azuremanagedlustre filesystem autoimport-job get", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-managedlustre", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/1349" + }, + { + "IssueNumber": 339, + "Title": "[Single/Namespace] Documentation Server testing failed to invoke the Documentation tools for MCP-Native@0.5.8-alpha.5259970", + "Body": "Title: [Single/Namespace] Documentation Server testing failed to invoke the Documentation tools for MCP-Native@0.5.8-alpha.5259970\n\n**Description:**\nDuring testing of \u0060MCP-Native@0.5.8-alpha.5259970\u0060, Documentation Server testing failed in both namespace and single modes.\n- In **namespace mode**, the failure was caused by the documentation search tool requiring a specific input format.\n\u003Cimg width=\u0022682\u0022 height=\u0022521\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/f441d003-c45f-4f8a-8f14-7d29a831ad7d\u0022 /\u003E\n\n- In **single mode**, the Documentation tool was not triggered at all.\n\u003Cimg width=\u0022667\u0022 height=\u0022771\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/6b36a84a-31d0-48e6-af04-1386762a44f7\u0022 /\u003E\n\n**Steps to Reproduce:**\n1. Connect to [Feed](https://dev.azure.com/azure-sdk/public/_artifacts/feed/azure-sdk-for-js/Npm/@azure%2Fmcp-native/overview/0.5.8-alpha.5259970) then running \u0060npm install @azure/mcp-native@0.5.8-alpha.5259970\u0060.\n2. Run \u0060az login\u0060.\n3. Configure MCP server in single/namespace mode using the newly downloaded azmcp.exe.\n4. Start mcp server.\n5. Open GitHub Copilot in VS Code Insiders and [switch to Agent mode](https://code.visualstudio.com/docs/copilot/chat/chat-agent-mode).\n6. Click Refresh on the tools list, and only select the configured MCP Server Tools.\n7. Enter test prompts \u0060Help me search for the official documentation of Azure Key Vault and summarize the content for me\u0060.\n\n**Environment:**\n- OS: Windows.\n- Vscode Insiders Version: 1.104.0\n- GitHub Copilot Chat Version: 0.31.2025090302\n- Large Language Model: GPT-4.1\n\n**Expected Behavior:**\nThe prompt should successfully trigger the documentation tool.\n\n@joshfree for notification", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-DocumentIntelligence", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/339" + }, + { + "IssueNumber": 398, + "Title": "Add Python uvx package for Azure MCP", + "Body": "Title: Add Python uvx package for Azure MCP\n\nTracking issue to add a Python package for Azure MCP Server", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Setup", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/398" + }, + { + "IssueNumber": 494, + "Title": "Add azmcp sql server database geo-restore/point-in-time-restore", + "Body": "Title: Add azmcp sql server database geo-restore/point-in-time-restore\n\n[No description provided]", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-SQL", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/494" + }, + { + "IssueNumber": 149, + "Title": "[ONBOARD] Azure Compute services", + "Body": "Functions** - A serverless compute platform for creating small, discrete segments of code that can be triggered from a variety of different events. Common applications include building serverless APIs or orchestrating event-drive architectures.\n- [ ] **Azure Spring Apps** - Host Spring Boot microservice applications in Azure, no code changes required. Azure Spring Apps provides monitoring, configuration management, service discovery, CI/CD integration and more.", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-ARM", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/149" + }, + { + "IssueNumber": 169, + "Title": "[ONBOARD] Add command to get Terraform best practices for improved user experience when working with Terraform", + "Body": "Title: [ONBOARD] Add command to get Terraform best practices for improved user experience when working with Terraform\n\n### Service / Tool Name\n\nGithub Copilot for Azure\n\n### Contacts\n\nKay Venkatrajan (kvenkatrajan@microsoft.com)\n\n### Intended Agent Scenarios\n\nGHCP4A vscode extension has a tool to get terraform best practices, to enhance user experience/ workflow when working with Terraform IAC code generation. Any operation involving terraform in prompt or user workspace can invoke this tool.\n\nExample prompt: Create a Cosmos DB account, a SQL database using Terraform.\n\n### Timeline\n\nJune release", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Terraform", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/169" + }, + { + "IssueNumber": 196, + "Title": "azmcp-storage-blob-batch-delete", + "Body": "Title: azmcp-storage-blob-batch-delete\n\n\u0060azmcp-storage-blob-batch-delete\u0060 \n\nDelete multiple blobs in a single batch operation. This tool efficiently deletes multiple blobs simultaneously, in a single request. Requires account-name, container-name, and blob names.\n\nSuggested prompt: \u0022Delete logs.txt and old-logs.txt in my storage container\u0022", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Storage", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/196" + }, + { + "IssueNumber": 208, + "Title": "Returning invalid JSON when a tool cannot be found", + "Body": "at System.Text.Json.JsonSerializer.ReadFromSpan[TValue](ReadOnlySpan\u00601 utf8Json, JsonTypeInfo\u00601 jsonTypeInfo, Nullable\u00601 actualByteCount)\n at System.Text.Json.JsonSerializer.ReadFromSpan[TValue](ReadOnlySpan\u00601 json, JsonTypeInfo\u00601 jsonTypeInfo)\n at System.Text.Json.JsonSerializer.Deserialize[TValue](String json, JsonSerializerOptions options)\n at AzureMcp.Tests.Client.CommandTestsBase.CallToolAsync(String command, Dictionary\u00602 parameters) in /mnt/vss/_work/1/s/tests/Client/CommandTestsBase.cs:line 64\n----- Inner Stack Trace -----\n at System.Text.Json.ThrowHelper.ThrowJsonReaderException(Utf8JsonReader\u0026 json, ExceptionResource resource, Byte nextByte, ReadOnlySpan\u00601 bytes)\n at System.Text.Json.Utf8JsonReader.ConsumeValue(Byte marker)\n at System.Text.Json.Utf8JsonReader.ReadFirstToken(Byte first)\n at System.Text.Json.Utf8JsonReader.ReadSingleSegment()\n at System.Text.Json.Utf8JsonReader.Read()\n at System.Text.Json.Serialization.JsonConverter\u00601.ReadCore(Utf8JsonReader\u0026 reader, T\u0026 value, JsonSerializerOptions options, ReadStack\u0026 state)\n Standard Output Messages:\n request: {\u0022command\u0022:\u0022azmcp-appconfig-kv-set\u0022,\u0022parameters\u0022:{\u0022subscription\u0022:\u00224d042dc6-fe17-4698-a23f-ec6a8d1e98f4\u0022,\u0022account-name\u0022:\u0022tec1339d3cde84c55\u0022,\u0022key\u0022:\u0022tag-test-multiple\u0022,\u0022value\u0022:\u0022tag-test-value-multiple\u0022,\u0022tag\u0022:[\u0022environment=staging\u0022,\u0022version=1.0.0\u0022,\u0022region=westus2\u0022]}}\n response: The tool azmcp-appconfig-kv-set was not found\n\u0060\u0060\u0060\n\nThese messages can originate from the [\u0060CompositeToolLoader\u0060](https://github.com/Azure/azure-mcp/blob/ce83822c12d3e38f59ebac05636bbf078809cb9e/src/Areas/Server/Commands/ToolLoading/CompositeToolLoader.cs#L126), [\u0060RegistryToolLoader\u0060](https://github.com/Azure/azure-mcp/blob/ce83822c12d3e38f59ebac05636bbf078809cb9e/src/Areas/Server/Commands/ToolLoading/RegistryToolLoader.cs#L104), and [\u0060ServerToolLoader\u0060](https://github.com/Azure/azure-mcp/blob/ce83822c12d3e38f59ebac05636bbf078809cb9e/src/Areas/Server/Commands/ToolLoading/ServerToolLoader.cs#L147C17-L147C25) classes.\n\nWe need to make sure that whenever an error needs to be shown it is a part of a valid JSON object.", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Core", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/208" + }, + { + "IssueNumber": 239, + "Title": "Add \u0060azmcp sql db create\u0060 impl and test", + "Body": "Title: Add \u0060azmcp sql db create\u0060 impl and test\n\n[No description provided]", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-SQL", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/239" + }, + { + "IssueNumber": 240, + "Title": "Add \u0060azmcp sql server firewall-rule delete\u0060 impl and test", + "Body": "Title: Add \u0060azmcp sql server firewall-rule delete\u0060 impl and test\n\n[No description provided]", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-SQL", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/240" + }, + { + "IssueNumber": 261, + "Title": "[Tool Description] Improve SQL tool description for better LLM selection", + "Body": "- this tool focuses on Azure SQL Database service management rather than data operations. This tool is a hierarchical MCP command router where sub-commands are routed to MCP servers that require specific fields inside the \u0022parameters\u0022 object. To invoke a command, set \u0022command\u0022 and wrap its arguments in \u0022parameters\u0022. Set \u0022learn=true\u0022 to discover available sub-commands for different Azure SQL Database management operations. Note that this tool requires appropriate Azure SQL permissions and will only access database resources accessible to the authenticated user.\r\n\u0060\u0060\u0060\r\n\r\n## Acceptance Criteria\r\n- [ ] Update tool description to include clear usage guidance\r\n- [ ] Explain Azure SQL Database and relational database context\r\n- [ ] Clarify when NOT to use this tool (vs PostgreSQL, Cosmos DB, etc.)\r\n- [ ] Detail the specific database management operations available\r\n- [ ] Distinguish management operations from query execution\r\n- [ ] Fix formatting issues\r\n- [ ] Achieve confidence score \u003E0.6 in tool selection testing\r\n\r\n**Related:** Tool description review for improved LLM selection accuracy", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-SQL", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/261" + }, + { + "IssueNumber": 267, + "Title": "[Tool Description] Improve Azure Terraform Best Practices tool description for better LLM selection", + "Body": "Title: [Tool Description] Improve Azure Terraform Best Practices tool description for better LLM selection\n\n## Problem\r\n\r\nThe current Azure Terraform Best Practices tool description lacks the detail and clarity needed for optimal LLM tool selection, resulting in an estimated confidence score of ~0.2-0.3 (below target of \u22650.5).\r\n\r\n**Current Description Issues:**\r\n- Very brief - only mentions \u0022best practices\u0022 without specifics\r\n- Missing usage guidance (when to use vs when not to use)\r\n- Limited context about Terraform vs other IaC tools (Bicep, ARM)\r\n- Poor parameter explanation\r\n- Missing scope of what Terraform aspects are covered\r\n- Formatting issues (missing space after period)\r\n- No mention of infrastructure scenarios or use cases\r\n\r\n## Current Description\r\n\u0060\u0060\u0060\r\nReturns Terraform best practices for Azure. Call this before generating Terraform code for Azure Providers.This tool is a hierarchical MCP command router. Sub commands are routed to MCP servers that require specific fields inside the \u0022parameters\u0022 object. To invoke a command, set \u0022command\u0022 and wrap its args in \u0022parameters\u0022. Set \u0022learn=true\u0022 to discover available sub commands.\r\n\u0060\u0060\u0060\r\n\r\n## Suggested Improvement\r\n\u0060\u0060\u0060\r\nReturns Terraform best practices and recommendations for Infrastructure as Code (IaC) deployments on Azure using HashiCorp Terraform and Azure Resource Manager providers. Use this tool when you need guidance for Terraform code structure, Azure provider configuration, state management, security practices, resource naming conventions, or module organization for Azure infrastructure deployments. This tool provides Terraform-specific best practices for Azure environments including provider setup, authentication patterns, and resource configuration recommendations. Do not use this tool for Bicep templates, ARM template guidance, Azure CLI operations, or general Azure best practices unrelated to Terraform - this tool focuses specifically on Terraform IaC patterns and practices for Azure deployments. This tool is a hierarchical MCP command router where sub-commands are routed to MCP servers that require specific fields inside the \u0022parameters\u0022 object.", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Terraform", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/267" + }, + { + "IssueNumber": 279, + "Title": "Postgres: Azure MCP doesn\u0027t support Vector", + "Body": "in /Users/runner/work/1/s/areas/postgres/src/AzureMcp.Postgres/Services/PostgresService.cs:line 94\\n at AzureMcp.Postgres.Services.PostgresService.ExecuteQueryAsync(String subscriptionId, String resourceGroup, String user, String server, String database, String query) in /Users/runner/work/1/s/areas/postgres/src/AzureMcp.Postgres/Services/PostgresService.cs:line 94\\n at AzureMcp.Postgres.Commands.Database.DatabaseQueryCommand.ExecuteAsync(CommandContext context, ParseResult parseResult) in /Users/runner/work/1/s/areas/postgres/src/AzureMcp.Postgres/Commands/Database/DatabaseQueryCommand.cs:line 52\u0022,\u0022type\u0022:\u0022InvalidCastException\u0022},\u0022duration\u0022:0}\n\u0060\u0060\u0060\n\n**Repro:**\n\nOn a Postgres Database\n{\n \u0022command\u0022: \u0022postgres_database_query\u0022,\n \u0022intent\u0022: \u0022execute SELECT query on documents table\u0022,\n \u0022parameters\u0022: {\n \u0022database\u0022: \u0022****\u0022,\n \u0022query\u0022: \u0022SELECT * FROM documents LIMIT 5\u0022,\n \u0022resource-group\u0022: \u0022***\u0022,\n \u0022server\u0022: \u0022***\u0022,\n \u0022subscription\u0022: \u0022***\u0022,\n \u0022user\u0022: \u0022****\u0022\n }\n}\n\nThe table has a column with VECTOR type.", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Postgres", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/279" + }, + { + "IssueNumber": 287, + "Title": "Azure MCP server fails to start in LibreChat (npx \u0026 Docker) \u2014 connection closed / ENOENT errors", + "Body": "Title: Azure MCP server fails to start in LibreChat (npx \u0026 Docker) \u2014 connection closed / ENOENT errors\n\nI attempted to run the Azure MCP server in LibreChat using both npx and Docker. My YAML configuration is as follows:\n\n\u0060azure-mcp-npx:\n \u0022command\u0022: \u0022npx\u0022\n \u0022args\u0022:\n - \u0027-y\u0027\n - \u0027@azure/mcp@latest\u0027\n - \u0027server\u0027\n - \u0027start\u0027\n\nazure-mcp-docker:\n \u0022command\u0022: \u0022docker\u0022\n \u0022args\u0022:\n - \u0027run\u0027\n - \u0027-i\u0027\n - \u0027--rm\u0027\n - \u0027--env-file\u0027\n - \u0027azure.env\u0027\n - \u0027mcr.microsoft.com/azure-sdk/azure-mcp:latest\u0027\n\u0060\nThe .env file contains valid AZURE_TENANT_ID, AZURE_CLIENT_ID, and AZURE_CLIENT_SECRET values.\n\nWhen starting either configuration, LibreChat fails to connect to the MCP server. Logs show:\n\nMCP error -32000: Connection closed\n\nspawn docker ENOENT\n\nError executing package: spawn .../node_modules/@azure/mcp-linux-x64/dist/azmcp ENOENT\n\nMultiple missing .dll files reported during npx execution\n\nFull logs are available here: (paste link or attach)\n\nQuestions:\n\nIs my YAML configuration correct for a stdio-based MCP server connection?\n\nHow can I enable verbose/debug logging for the Azure MCP server?\n\nIs there a known working example of LibreChat \u002B Azure MCP integration?", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Docker", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/287" + }, + { + "IssueNumber": 302, + "Title": "Fix container scanning reported vulnerabilities", + "Body": "os 2 years ago\nCVE-2024-22365 Medium 5.5 v3.1 libpam0g-1.5.2-6\u002Bdeb12u1 os 2 years ago\nCVE-2024-22365 Medium 5.5 v3.1 libpam-mod\u0002ules-bin-1.5.2-6\u002Bdeb12u1 os 2 years ago\nCVE-2025-6297 Medium 6.5 v3.0 dpkg-1.21.22 os 1 month ago\nCVE-2025-8058 Medium 6.6 v3.0 libc-bin-2.36-9\u002Bdeb12u10 os 23 days ago\nCVE-2025-8058 Medium 6.6 v3.0 libc6-2.36-9\u002Bdeb12u10 os 23 days ago", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Docker", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/302" + }, + { + "IssueNumber": 330, + "Title": "[Namespace Mode/MCP-Native@0.5.8-alpha.5259970] \u0060Storage Service Test\u0060 failed to correctly trigger tool invocation", + "Body": "\u003Cimg width=\u0022659\u0022 height=\u0022807\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/ce717f6c-de5d-4319-90fd-2a82b0181811\u0022 /\u003E\n\n-Test prompt: \u0060Upload file to storage blob in container in storage account\u0060 (**Tool operation not triggered**):\n\u003Cimg width=\u0022646\u0022 height=\u0022499\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/35537cc5-4d92-4b63-82c7-1902f63cb2d5\u0022 /\u003E\n\n-Test prompt: \u0060List all blobs in the blob container \u0022mycontainer\u0022 in the storage account \u0022mhstorage09\u0022 in the Subscription\u0060 (**Request parameter structure incorrect**):\n\u003Cimg width=\u0022647\u0022 height=\u0022670\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/d3cf855b-681b-4548-b2f2-8ac6009a147b\u0022 /\u003E\n\n-Test prompt: \u0060Create a new directory at the path \u0022mycontainer/dire1\u0022 in Data Lake in the storage account \u0022mhstorage09\u0022 in the Subscription\u0060 (**Request parameter structure incorrect**):\n\u003Cimg width=\u0022667\u0022 height=\u0022547\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/26618bf6-b35c-4ab3-ba7b-a9afaa5bd8f4\u0022 /\u003E\n\n-Test prompt: \u0060List all paths in the Data Lake file system \u0022mycontainer\u0022 in the storage account \u0022mhstorage09\u0022\u0060 (**Request parameter structure incorrect**):\n\u003Cimg width=\u0022662\u0022 height=\u0022796\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/080b9735-596a-46d1-897f-739d3d5eeb68\u0022 /\u003E\n\n-Test prompt: \u0060Send a message \u0022Hello, World!\u0022 to the queue \u0022ccc\u0022 in storage account \u0022mhstorage09\u0022 in the Subscription\u0060 (**Request parameter structure incorrect** and tested five times, failed four times):\n\u003Cimg width=\u0022653\u0022 height=\u0022809\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/87f6d225-0839-4f4f-8c82-582f3098fa28\u0022 /\u003E\n\n**Steps to Reproduce:**\n1. Connect to [Feed](https://dev.azure.com/azure-sdk/public/_artifacts/feed/azure-sdk-for-js/Npm/@azure%2Fmcp-native/overview/0.5.8-alpha.5259970) then running \u0060npm install @azure/mcp-native@0.5.8-alpha.5259970\u0060.\n2. Run \u0060az login\u0060.\n3. Configure MCP server in namespace mode using the newly downloaded azmcp.exe.\n4. Start mcp server.\n5. Open GitHub Copilot in VS Code Insiders and [switch to Agent mode](https://code.visualstudio.com/docs/copilot/chat/chat-agent-mode).", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Storage", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/330" + }, + { + "IssueNumber": 504, + "Title": "[BESTPRACTICES] Get Azure Policy info to increase deployment success", + "Body": "Title: [BESTPRACTICES] Get Azure Policy info to increase deployment success\n\n**Description:**\nWe need the ability to incorporate Azure Policy information whenever best practice tools or deployment tools are invoked. The goal is to proactively prevent deployment failures by ensuring that infrastructure-as-code and related automation respect the organization\u2019s defined Azure policies.\n\n- Azure Policies often define critical constraints and requirements for resources, security, compliance, and configuration within a tenant.\n- Deployment failures can occur when these policies are not considered during planning or execution, leading to wasted cycles and delayed releases.\n- By integrating policy awareness, tools can surface relevant policy details, validate planned changes against policy requirements, and provide actionable feedback before deployment begins.\n- This feature should support dynamic retrieval of policy assignments and definitions, ideally scoped to the target environment or resource group.\n- It should work seamlessly with both best practice recommendation flows and deployment automation, ensuring that all generated plans and actions are policy-compliant.\n\n**New tool or enhance existing tools?**\n- A new tool may be more flexible, giving the LLM the ability to call it as needed, but it adds yet another tool to our very long list and risks not ever being called.\n- Enhancing existing tools reduces the number of tool calls the LLM needs to make and can help ensure that the information is always included when a particular tool deems it relevant. However, it prevents the LLM from being able to call the tool ad-hoc and will potentially require a number of existing tools to be updated.\n\n**References**\n- https://ms.portal.azure.com/#view/Microsoft_Azure_Policy/PolicyMenuBlade/~/Assignments\n- Policies can be queried via Azure Resource Graph (ARG)", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-BestPractices, tools-Deploy", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/504" + }, + { + "IssueNumber": 618, + "Title": "Event Grid publish prompts fail to invoke \u0060azmcp_eventgrid_events_publish\u0060 tool", + "Body": "Title: Event Grid publish prompts fail to invoke \u0060azmcp_eventgrid_events_publish\u0060 tool\n\n**Description:**\nThe tool \u0060azmcp_eventgrid_events_publish\u0060 is not triggered for any standard Event Grid publish event prompt, such as:\n- \u0060Publish an event to Event Grid topic \u003Ctopic_name\u003E using \u003Cevent_schema\u003E with the following data \u003Cevent_data\u003E\u0060\n\u003Cimg width=\u0022787\u0022 height=\u0022671\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/52714345-9027-4f42-9eac-686d4f6b3f4c\u0022 /\u003E\n- \u0060Publish event to my Event Grid topic \u003Ctopic_name\u003E with the following events \u003Cevent_data\u003E\u0060\n\u003Cimg width=\u0022755\u0022 height=\u0022678\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/440ba8d6-e1d9-4bdd-bfd2-7c0e4bb89e22\u0022 /\u003E\n\n- \u0060Send an event to Event Grid topic \u003Ctopic_name\u003E in resource group \u003Cresource_group_name\u003E with \u003Cevent_data\u003E\u0060\n\u003Cimg width=\u0022761\u0022 height=\u0022623\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/7c706945-7318-4c76-8041-1767f404668b\u0022 /\u003E\n\n**Steps to Reproduce:**\n1. Start mcp server in namespaces mode.\n2. Open GitHub Copilot in VS Code and [switch to Agent mode](https://code.visualstudio.com/docs/copilot/chat/chat-agent-mode).\n3. Click Refresh on the tools list, and select the \u0060Built-in\u0060, \u0060Extension: Github Copilot for Azure\u0060, \u0060MCP Server: Microsoft Docs\u0060 and \u0060MCP Server: Azure MCP\u0060.\n4. Enter test prompts \u0060Publish an event to Event Grid topic \u003Ctopic_name\u003E using \u003Cevent_schema\u003E with the following data \u003Cevent_data\u003E\u0060\n\n**Environment:**\n\n- OS: Windows.\n- Vscode Version: 1.104.2\n- GitHub Copilot Chat Version: 0.31.3\n- Large Language Model: GPT-4.1\n- Virtual Tool: Off\n- Azure MCP Server: 0.8.2\n\n**Expected Behavior:**\nThese prompts trigger the tool \u0060azmcp_eventgrid_events_publish\u0060 as expected.\n\n@joshfree for notification", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-EventGrid", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/618" + }, + { + "IssueNumber": 680, + "Title": "[DOCKER] Add smoke test for MCP server", + "Body": "Title: [DOCKER] Add smoke test for MCP server\n\nAdd basic smoke test to ensure that packages are working before release.\n- [x] Nuget\n- [x] Npm\n- [ ] Docker", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Docker", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/680" + }, + { + "IssueNumber": 714, + "Title": "[BUG] Update NPM section on README", + "Body": "Title: [BUG] Update NPM section on README\n\nThe NPM package manager section of the README is a sparse placeholder.\n\n1. double check the install command. Is \u0060-g\u0060 what we recommend?\n2. Add more instructions in a collapsable section iff needed, just like the \u0060Docker instructions\u0060 in the section imediately below.\n\n\u003Cimg width=\u0022593\u0022 height=\u002294\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/e1172d76-266b-475e-9380-3625bd3976c6\u0022 /\u003E", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-npx", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/714" + }, + { + "IssueNumber": 846, + "Title": "[BUG] Azure Communications - finish incomplete onboarding steps", + "Body": "Title: [BUG] Azure Communications - finish incomplete onboarding steps\n\n### Describe the bug\n\nReview onboarding instructions https://aka.ms/azmcp/intake (or from the CONTRIBUTING.md).\n\nComplete missing steps such as CODEOWNERS entry and issue label creation\n\n### Expected behavior\n\n-\n\n### Actual behavior\n\n-\n\n### Reproduction Steps\n\n-\n\n### Environment\n\n-", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Communication", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/846" + }, + { + "IssueNumber": 859, + "Title": "Managed Lustre subnet size prompt is not invoking the expected tool", + "Body": "Title: Managed Lustre subnet size prompt is not invoking the expected tool\n\n**Description:**\nWhen entering the test prompt \u0060Tell me how many IP addresses I need for an Azure Managed Lustre filesystem of size \u003Cfilesystem_size\u003E using the SKU\u0060, the tool \u0060azmcp_managedlustre_filesystem_subnetsize_ask\u0060 was not triggered, details as follows:\n\u003Cimg width=\u0022645\u0022 height=\u0022760\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/d12d87df-2b6c-4768-82ea-62b19ef14ae4\u0022 /\u003E\n\n**Steps to Reproduce:**\n1. Start mcp server in \u0060namespaces\u0060 mode.\n2. Open GitHub Copilot in VS Code and [switch to Agent mode](https://code.visualstudio.com/docs/copilot/chat/chat-agent-mode).\n3. Click Refresh on the tools list, and select the \u0060Built-in\u0060, \u0060Extension: Github Copilot for Azure\u0060, \u0060MCP Server: Microsoft Docs\u0060 and \u0060MCP Server: Azure MCP\u0060.\n4. Enter test prompt \u0060Tell me how many IP addresses I need for an Azure Managed Lustre filesystem of size \u003Cfilesystem_size\u003E using the SKU\u0060.\n\n**Environment:**\n\n- OS: Windows.\n- Vscode Version: 1.105.0\n- GitHub Copilot Chat Version: 0.32.1\n- Large Language Model: GPT-4.1\n- Virtual Tool: Off\n- Azure MCP Server: 0.9.0 and 0.9.3\n\n**Expected Behavior:**\nThe test prompt triggers the \u0060azmcp_managedlustre_filesystem_subnetsize_ask\u0060 tool.\n\n@joshfree for notification.", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-managedlustre", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/859" + }, + { + "IssueNumber": 932, + "Title": "[CONSOLIDATED] Memory usage constantly increases when using consolidated mode", + "Body": "Title: [CONSOLIDATED] Memory usage constantly increases when using consolidated mode\n\n## Bug\n\nAs I am testing different tools in consolidated mode, I noticed that my memory usage is slowly increasing with each tool invocation. This may be the same issue that \u0022namespace\u0022 mode has that we fixed. @anuchandy has more context.\n\n\u003Cimg width=\u0022427\u0022 height=\u0022132\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/f0484462-0651-40b9-ab38-691a83bcb606\u0022 /\u003E\n\n## Expected Behaviour\n\nThe app resource usage is stable over time.", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Core", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/932" + }, + { + "IssueNumber": 963, + "Title": "[BUG] VS Code extension contains broken images", + "Body": "Title: [BUG] VS Code extension contains broken images\n\n### Describe the bug\n\nseeing the following when looking through the readme / extension description in VS Code\n\u003Cimg width=\u00221110\u0022 height=\u0022776\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/4bec8722-c75e-4c9e-aaa3-e5fd26402879\u0022 /\u003E\n\n### Expected behavior\n\nWould expect no broken image icons\n\n### Actual behavior\n\nseeing broken image icons\n\n### Reproduction Steps\n\nopening the extension in the marketplace in vscode\n\n### Environment\n\n_No response_", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-VSIX", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/963" + }, + { + "IssueNumber": 966, + "Title": "[Remote] HTTP MCP Server Connection termination logs with VS Code Client", + "Body": "Title: [Remote] HTTP MCP Server Connection termination logs with VS Code Client\n\n## Issue Description\n\nHTTP MCP server configuration in VS Code shows error logs reporting connection termination.\n\n## Environment Information\n\n**VS Code Version:**\n\u0060\u0060\u0060\n1.105.1\n7d842fb85a0275a4a8e4d7e040d2625abbf7f084\nx64\n\u0060\u0060\u0060\n\n**GitHub Copilot Extensions:**\n\u0060\u0060\u0060\ngithub.copilot@1.388.0\ngithub.copilot-chat@0.32.3\nms-azuretools.vscode-azure-github-copilot@1.0.137\n\u0060\u0060\u0060\n\n**MCP Configuration:**\n\u0060\u0060\u0060json\n{\n\t\u0022servers\u0022: {\n\t\t\u0022Azure MCP Server\u0022: {\n\t\t\t\u0022url\u0022: \u0022http://localhost:1031/\u0022,\n\t\t\t\u0022type\u0022: \u0022http\u0022\n\t\t}\n\t},\n\t\u0022inputs\u0022: []\n}\n\u0060\u0060\u0060\n\n## Last Output Logs\n\u0060\u0060\u0060\n2025-10-27 11:51:45.822 [info] Discovered 1 tools\n2025-10-27 11:56:49.885 [info] Error reading from async stream, we will reconnect: TypeError: terminated\n2025-10-27 11:56:50.905 [debug] 400 status connecting to http://localhost:1031/ for async notifications; they will be disabled: {\u0022error\u0022:{\u0022code\u0022:-32000,\u0022message\u0022:\u0022Bad Request: This server does not support multiple GET requests. Start a new session to get a new GET SSE response.\u0022},\u0022id\u0022:\u0022\u0022,\u0022jsonrpc\u0022:\u00222.0\u0022}\n\u0060\u0060\u0060\n\n## Steps to Reproduce\n\n1. Configure MCP server with HTTP endpoint at \u0060http://localhost:1031/\u0060\n2. Attempt to connect from VS Code client\n3. Leave the VS code client idle for about 5 minutes to see the above log.\n\n## Expected Behavior\n\nNo \u0022errors\u0022 reported in the logs when there are none. This can be turned into a \u0022debug\u0022 level log if this is only a internal connection management log. Doesn\u0027t need to be info message for the user.\n\n## Actual Behavior\n\u0022Error reading from async stream, we will reconnect: TypeError: terminated\u0022 log as info to the user is not very useful and also not clear what \u0022TypeError: terminated\u0022 means.\n\n## Additional Context\n\n- Running on Windows with PowerShell\n- Local development environment\n- Azure MCP server running on localhost:1031", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "remote-mcp", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/966" + }, + { + "IssueNumber": 1016, + "Title": "[BUG] Test failure: Azure.Mcp.Tools.KeyVault.UnitTests.Certificate.CertificateImportCommandTests.ExecuteAsync_ValidatesRequiredArguments(argLine: \u0022--vault knownVault --certificate knownCertificate \u0022\u00B7\u00B7\u00B7, shouldPassValidation: False)", + "Body": "Title: [BUG] Test failure: Azure.Mcp.Tools.KeyVault.UnitTests.Certificate.CertificateImportCommandTests.ExecuteAsync_ValidatesRequiredArguments(argLine: \u0022--vault knownVault --certificate knownCertificate \u0022\u00B7\u00B7\u00B7, shouldPassValidation: False)\n\n### Describe the bug\n\nAzure.Mcp.Tools.KeyVault.UnitTests.Certificate.CertificateImportCommandTests.ExecuteAsync_ValidatesRequiredArguments(argLine: \u0022--vault knownVault --certificate knownCertificate \u0022\u00B7\u00B7\u00B7, shouldPassValidation: False) failed on CI. This is the build: https://dev.azure.com/azure-sdk/public/_build/results?buildId=5518222\u0026view=logs\u0026j=49488890-c1d0-5a70-282b-85c8b43b1436\u0026t=f1c34ac6-801d-56cc-8a01-8f676d0a67a6\n\nTest failure:\n\u0060\u0060\u0060\n Failed Azure.Mcp.Tools.KeyVault.UnitTests.Certificate.CertificateImportCommandTests.ExecuteAsync_ValidatesRequiredArguments(argLine: \u0022--vault knownVault --certificate knownCertificate \u0022\u00B7\u00B7\u00B7, shouldPassValidation: False) [16 ms]\n Error Message:\n Assert.Equal() Failure: Values differ\nExpected: BadRequest\nActual: InternalServerError\n Stack Trace:\n at Azure.Mcp.Tools.KeyVault.UnitTests.Certificate.CertificateImportCommandTests.ExecuteAsync_ValidatesRequiredArguments(String argLine, Boolean shouldPassValidation) in D:\\a\\_work\\1\\s\\tools\\Azure.Mcp.Tools.KeyVault\\tests\\Azure.Mcp.Tools.KeyVault.UnitTests\\Certificate\\CertificateImportCommandTests.cs:line 132\n\n\u0060\u0060\u0060\n\n### Expected behavior\n\nTest failed on CI\n\n### Actual behavior\n\nTest should pass on CI\n\n### Reproduction Steps\n\nI am not sure.\n\n### Environment\n\n_No response_", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-KeyVault", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/1016" + }, + { + "IssueNumber": 102, + "Title": "[Azure MCP] Add command: \u0060azmcp azuremanagedlustre filesystem update\u0060", + "Body": "Title: [Azure MCP] Add command: \u0060azmcp azuremanagedlustre filesystem update\u0060\n\n[No description provided]", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-managedlustre", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/102" + }, + { + "IssueNumber": 1086, + "Title": "Add azmcp azuremanagedlustre filesystem autoexport-job cancel", + "Body": "Title: Add azmcp azuremanagedlustre filesystem autoexport-job cancel\n\nAdd azmcp azuremanagedlustre filesystem autoexport-job cancel , required testing and docs.", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-managedlustre", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/1086" + }, + { + "IssueNumber": 1087, + "Title": "Add azmcp azuremanagedlustre filesystem autoexport-job delete", + "Body": "Title: Add azmcp azuremanagedlustre filesystem autoexport-job delete\n\nAdd azmcp azuremanagedlustre filesystem autoexport-job delete , required testing and docs.", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-managedlustre", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/1087" + }, + { + "IssueNumber": 110, + "Title": "[Azure MCP] Add command: \u0060azmcp azuremanagedlustre filesystem check-subnet-size\u0060", + "Body": "Title: [Azure MCP] Add command: \u0060azmcp azuremanagedlustre filesystem check-subnet-size\u0060\n\n[No description provided]", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-managedlustre", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/110" + }, + { + "IssueNumber": 1100, + "Title": "[Remote] Restrict and customize CORs policy", + "Body": "Title: [Remote] Restrict and customize CORs policy\n\nThe CORS policy here is permissive by default- May we should allow it to be configurable and for development mode restrict to localhost / certain IP range ?[mcp/core/Azure.Mcp.Core/src/Areas/Server/Commands/ServiceStartCommand.cs at f22d0f621d605a2e9ab19b8\u2026](https://github.com/microsoft/mcp/blob/f22d0f621d605a2e9ab19b8eef755d0d53d65a8d/core/Azure.Mcp.Core/src/Areas/Server/Commands/ServiceStartCommand.cs#L458)", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "remote-mcp", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/1100" + }, + { + "IssueNumber": 1217, + "Title": "[BUG] Elicitation doesn\u0027t work properly for tools that may expose secrets", + "Body": "Title: [BUG] Elicitation doesn\u0027t work properly for tools that may expose secrets\n\n### Describe the bug\n\nThere are multiple overlapping issues in the code, but the end result is that tools that are supposed to use elicitation to protect secret/sensitive data don\u0027t actually ask for confirmation in the expected way and ignore the user\u0027s input anyway.\n\n### Expected behavior\n\nWhen using the key vaults tools to retrieve the value of a secret, the code in \u0060BaseToolLoader.HandleSecretElicitationAsync\u0060 tries to create an elicitation request that requires the user to type \u0027yes\u0027 into a text box before proceeding.\n\n### Actual behavior\n\nWhat the user actually sees is a check box (which is missing a title, though it has a description) asking for confirmation. Further, the value of the check box is ignored--if the user _does not_ click the box but \u0022submits\u0022 the data instead of cancelling the request, the secret value will still be retrieved and passed to the LLM.\n\nHere\u0027s what it looks like in VS 2022:\n\n\u003Cimg width=\u0022427\u0022 height=\u0022240\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/0223f981-701a-48b7-8526-645b1e00d1bb\u0022 /\u003E\n\n### Reproduction Steps\n\n1. Use the key vault tools to retrieve the value of a secret in a key vault.\n\n### Environment\n\nI was working in VS 2022 (version 17.14.20) but the same elicitation request is passed to VS Code and other clients.", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-KeyVault", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/1217" + }, + { + "IssueNumber": 1288, + "Title": "Migrate Azure.Mcp.Tools.Grafana.LiveTests LiveTests to Recorded Tests", + "Body": "Title: Migrate Azure.Mcp.Tools.Grafana.LiveTests LiveTests to Recorded Tests\n\nMigrate tests within tools/Azure.Mcp.Tools.Grafana/tests/Azure.Mcp.Tools.Grafana.LiveTests/Azure.Mcp.Tools.Grafana.LiveTests.csproj to recordings. Utilize copilot to assist with the migration process for Azure.Mcp.Tools.Grafana.LiveTests.\r\n - For additional guidance check [the recorded tests document](https://github.com/microsoft/mcp/blob/main/docs/recorded-tests.md)\r\n\r\nThis task will be considered complete when the livetests can be invoked without the presence of a .testsettings.json file.\r\n\r\nSubmit a PR with your change and verify that the recorded tests are running in the [recorded test step](https://dev.azure.com/azure-sdk/internal/_build/results?buildId=5627747\u0026view=logs\u0026jobId=1e679852-4871-5dae-dd38-eb073eb853d4\u0026j=1e679852-4871-5dae-dd38-eb073eb853d4\u0026t=2f22000c-4a69-5b6e-fbac-d06c3b6f57da)", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Grafana", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/1288" + }, + { + "IssueNumber": 1296, + "Title": "Migrate Azure.Mcp.Tools.Redis.LiveTests LiveTests to Recorded Tests", + "Body": "Title: Migrate Azure.Mcp.Tools.Redis.LiveTests LiveTests to Recorded Tests\n\nMigrate tests within tools/Azure.Mcp.Tools.Redis/tests/Azure.Mcp.Tools.Redis.LiveTests/Azure.Mcp.Tools.Redis.LiveTests.csproj to recordings. Utilize copilot to assist with the migration process for Azure.Mcp.Tools.Redis.LiveTests.\r\n - For additional guidance check [the recorded tests document](https://github.com/microsoft/mcp/blob/main/docs/recorded-tests.md)\r\n\r\nThis task will be considered complete when the livetests can be invoked without the presence of a .testsettings.json file.\r\n\r\nSubmit a PR with your change and verify that the recorded tests are running in the [recorded test step](https://dev.azure.com/azure-sdk/internal/_build/results?buildId=5627747\u0026view=logs\u0026jobId=1e679852-4871-5dae-dd38-eb073eb853d4\u0026j=1e679852-4871-5dae-dd38-eb073eb853d4\u0026t=2f22000c-4a69-5b6e-fbac-d06c3b6f57da)", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Redis", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/1296" + }, + { + "IssueNumber": 1304, + "Title": "Migrate Azure.Mcp.Tools.Workbooks.LiveTests LiveTests to Recorded Tests", + "Body": "Title: Migrate Azure.Mcp.Tools.Workbooks.LiveTests LiveTests to Recorded Tests\n\nMigrate tests within tools/Azure.Mcp.Tools.Workbooks/tests/Azure.Mcp.Tools.Workbooks.LiveTests/Azure.Mcp.Tools.Workbooks.LiveTests.csproj to recordings. Utilize copilot to assist with the migration process for Azure.Mcp.Tools.Workbooks.LiveTests.\r\n - For additional guidance check [the recorded tests document](https://github.com/microsoft/mcp/blob/main/docs/recorded-tests.md)\r\n\r\nThis task will be considered complete when the livetests can be invoked without the presence of a .testsettings.json file.\r\n\r\nSubmit a PR with your change and verify that the recorded tests are running in the [recorded test step](https://dev.azure.com/azure-sdk/internal/_build/results?buildId=5627747\u0026view=logs\u0026jobId=1e679852-4871-5dae-dd38-eb073eb853d4\u0026j=1e679852-4871-5dae-dd38-eb073eb853d4\u0026t=2f22000c-4a69-5b6e-fbac-d06c3b6f57da)", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Workbooks", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/1304" + }, + { + "IssueNumber": 147, + "Title": "Consider changing the AzMonitor tests to use OTel instead of Azure.Monitor.Ingestion", + "Body": "Title: Consider changing the AzMonitor tests to use OTel instead of Azure.Monitor.Ingestion\n\nWe went with the Ingestion APIs because we need a custom table, which the Logger/Otel approach doesn\u0027t seem to support. Since this is working as-is and the suggestion is an improvement, I\u0027m going to create this issue and get this fix in.\r\n\u00A0\r\n\u003E\u003E\r\njust keep using ILogger and just enable otel - it\u0027ll forward all ilogger to AzMon, no need for low-level Azure.Monitor.Ingestion\r\n\r\n_Originally posted by @lmolkova in https://github.com/Azure/azure-mcp/pull/280#discussion_r2122222026_", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Monitor", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/147" + }, + { + "IssueNumber": 345, + "Title": "[Azure MCP] Azure Managed Lustre command should be converted to \u0060managedlustre\u0060", + "Body": "Title: [Azure MCP] Azure Managed Lustre command should be converted to \u0060managedlustre\u0060\n\n[No description provided]", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-managedlustre", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/345" + }, + { + "IssueNumber": 374, + "Title": "[REMOTE] Remote Azure MCP Server", + "Body": "Title: [REMOTE] Remote Azure MCP Server\n\nis there a remote MCP server for Azure MCP similiar to Github remote server? Any idea when that feature will be added? Is there any guidance to how to deploy azure mcp server to an container apps or appservice?", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "remote-mcp", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/374" + }, + { + "IssueNumber": 479, + "Title": "[Question] Azure Mcp Server as Service", + "Body": "Title: [Question] Azure Mcp Server as Service\n\nHello,\n\nCurrently, the code can only be run locally as a server.\n\nI\u2019d like to know if there are any plans to make this MCP available as a managed service (e.g., App Service, Function, or AKS).", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "remote-mcp", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/479" + }, + { + "IssueNumber": 179, + "Title": "Additional tools for - Azure App Service", + "Body": "Title: Additional tools for - Azure App Service\n\n### Service / Tool Name\n\nAzure.AppService\n\n### Contacts\n\nTBD\n\n### Intended Agent Scenarios\n\n\nHere\u0027s the set of commands exposed by the App Service VS Code extension. This is a great place to get started on potential capabilities/scenarios to support.\n\n## \uD83D\uDEE0\uFE0F Create \u0026 Setup\n- Add Database Connection to Web App \n- Add New Setting \n- Configure Deployment Source \n- Connect to GitHub Repository \n- Create New Deployment Slot \n- Create New Web App \n- Create New Web App (Advanced) \n- Upload Local Settings \n\n## \u2699\uFE0F Configure \u0026 Manage\n- Edit \n- Rename \n- Toggle as Slot Setting \n- Reveal in Application Settings \n- Reveal in Azure Databases Extension \n- Generate Azure CLI Script \n\n## \uD83D\uDE80 Deploy \u0026 Redeploy\n- Deploy to Slot \n- Deploy to Web App \n- Redeploy \n- Swap Deployment Slot \n\n## \uD83D\uDD04 Update \u0026 Maintain\n- Delete \n- Disconnect from Repo \n- Download Remote Settings \n- Remove Connection \n- Restart \n- Start \n- Stop \n\n## \uD83D\uDCE1 Logs \u0026 Monitoring\n- Enable File Logging \n- View Deployment Logs \n- Start Streaming Logs \n- Stop Streaming Logs \n\n## \uD83E\uDDEA Debugging \u0026 Access\n- Start Remote Debugging \n- SSH into Web App \n- Browse Website \n\n## \uD83D\uDD0D Access \u0026 DevOps\n- View Commit in GitHub \n- Report Issue \n\n\n### Timeline\n\nTBD", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-AppService", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/179" + }, + { + "IssueNumber": 180, + "Title": "[ONBOARD] Azure Functions", + "Body": "Title: [ONBOARD] Azure Functions\n\n### Service / Tool Name\n\nAzure.Functions\n\n### Contacts\n\nTBD\n\n### Intended Agent Scenarios\n\n\nHere\u0027s the set of commands exposed by the Functions VS Code extension. This is a great place to get started on potential capabilities/scenarios to support.\n\n## \uD83D\uDEE0\uFE0F Create \u0026 Setup\n- Create Function App in Azure \n- Create Function App in Azure (Advanced) \n- Create Function \n- Create New Containerized Project \n- Create New Project \n- Create Slot \n- Initialize Project for Use with VS Code \n- Install or Update Azure Functions Core Tools \n\n## \u2699\uFE0F Configure \u0026 Manage\n- Add Binding \n- Add Function App Identity Connections \n- Add Local Project Identity Connections \n- Add New Setting \n- Assign Managed Identity to Function App \n- Configure Deployment Source \n- Connect to GitHub Repository \n- Decrypt Settings \n- Download Remote Settings \n- Edit Setting \n- Enable System Assigned Identity \n- Encrypt Settings \n- Rename Setting \n- Report Issue \n- Save and Execute \n- Set AzureWebJobsStorage \n- Toggle as Slot Setting \n- Upload Local Settings \n- Uninstall Azure Functions Core Tools \n\n## \uD83D\uDE80 Deploy \u0026 Redeploy\n- Deploy to Azure \n- Deploy to Function App \n- Deploy to Slot \n- Redeploy \n\n## \uD83D\uDD04 Update \u0026 Maintain\n- Delete Function App \n- Delete Function \n- Delete Setting \n- Delete Slot \n- Disable Function \n- Disconnect from Repo \n- Enable Function \n- Restart \n- Swap Slot \n\n## \uD83D\uDCE1 Logs \u0026 Monitoring\n- Start Streaming Logs \n- Stop Streaming Logs \n- View Deployment Logs \n\n## \uD83E\uDDEA Debug \u0026 Test\n- Execute Function Now \n- Start \n- Stop \n- Start Streaming Logs \n- Stop Streaming Logs \n\n## \uD83D\uDD0D Access \u0026 DevOps\n- Browse Website \n- Copy Function Url \n- Open Azure Functions Extension Walkthrough \n- View Commit in GitHub \n\n\n\n### Timeline\n\nTBD", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-FunctionApp", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/180" + }, + { + "IssueNumber": 181, + "Title": "[ONBOARD] Virtual Machines", + "Body": "Title: [ONBOARD] Virtual Machines\n\n### Service / Tool Name\n\nAzure.VirtualMachines\n\n### Contacts\n\nTBD\n\n### Intended Agent Scenarios\n\n\n\nHere\u0027s the set of commands exposed by the Virtual Machines VS Code extension. This is a great place to get started on potential capabilities/scenarios to support.\n\n## \uD83D\uDEE0\uFE0F Create \u0026 Setup\n- Create Virtual Machine \n- Create Virtual Machine (Advanced) \n- Add SSH Key \n\n## \u2699\uFE0F Configure \u0026 Manage\n- Copy IP Address \n- Report Issue \n\n## \uD83D\uDD0C Access\n- Connect to Host via Remote SSH \n\n## \uD83D\uDD04 Update \u0026 Maintain\n- Delete \n- Restart \n- Start \n- Stop \n\n\n### Timeline\n\nTBD", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-VirtualDesktop", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/181" + }, + { + "IssueNumber": 211, + "Title": "[Remote] Support Streamable HTTP", + "Body": "Title: [Remote] Support Streamable HTTP\n\n### Streamable HTTP replaced SSE transport in MCP after protocol version 2024-11-05\n\nWithout Streamable HTTP support, Azure MCP server can only be installed with \u0060stdio transport\u0060 as a local MCP server.\n\nIn the future, we will need to add Streamable HTTP support in order to deploy Azure MCP Server as a Remote MCP Server.\n\nhttps://modelcontextprotocol.io/specification/2025-03-26/basic/transports#streamable-http\n\nThis issue is a placeholder for that eventual design discussion.", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Core, remote-mcp", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/211" + }, + { + "IssueNumber": 238, + "Title": "MQ: Evaluate using Microsoft.Extensions.AI.Evaluation tool for e2etests automation", + "Body": "Title: MQ: Evaluate using Microsoft.Extensions.AI.Evaluation tool for e2etests automation\n\nhttps://huggingface.co/blog/mclenhard/mcp-evals\n\nThis looks like a potential tool for automating e2e test prompts; the test grades the results (1-5) on 5 different metrics, using whatever LLM you want to use with the mcp server.", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Core", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/238" + }, + { + "IssueNumber": 286, + "Title": "Azure MCP server for AI Assistant in IntelliJ", + "Body": "Title: Azure MCP server for AI Assistant in IntelliJ\n\nIntegrate Azure MCP server for AI Assistant (JetBrains agent) through the Azure Toolkit for IntelliJ plugin", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-IntelliJ", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/286" + }, + { + "IssueNumber": 291, + "Title": "\u0060azmcp-containers-registry-repositories-list\u0060 - List all repositories in a container registry with metadata and status information. This tool retrieves repository names, creation dates, last updated timestamps, and image counts for registry management and monitoring. Returns repository information as JSON array. Requires registry-name. - Suggested prompt: \u0022List all repositories in container registry \u003Cregistry-name\u003E\u0022", + "Body": "Title: \u0060azmcp-containers-registry-repositories-list\u0060 - List all repositories in a container registry with metadata and status information. This tool retrieves repository names, creation dates, last updated timestamps, and image counts for registry management and monitoring. Returns repository information as JSON array. Requires registry-name. - Suggested prompt: \u0022List all repositories in container registry \u003Cregistry-name\u003E\u0022\n\nThis tool retrieves repository names, creation dates, last updated timestamps, and image counts for registry management and monitoring. Returns repository information as JSON array. Requires registry-name. \n\n- Suggested prompt: \u0022List all repositories in container registry \u003Cregistry-name\u003E\u0022", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-containers", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/291" + }, + { + "IssueNumber": 293, + "Title": "[Deploy Tool] Infrastructure Rules Get prompts failed \u2014 Deploy Tool not invoked on PR #626", + "Body": "Title: [Deploy Tool] Infrastructure Rules Get prompts failed \u2014 Deploy Tool not invoked on PR #626\n\n**Description:**\nWhen running the MCP server in \u0060default\u0060 mode on PR #626 , the Copilot chat does not trigger the Deploy tool for all prompts in the [Deploy \u2014 Infrastructure Rules Get](https://github.com/qianwens/azure-mcp/blob/qianwen/deploy/docs/PR-626-Manual-Testing-Plan.md#deploy--infrastructure-rules-get-prompts-3135) section. Responses to some of the prompts are as follows:\n\n\u003Cimg width=\u0022528\u0022 height=\u0022456\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/519c74e7-8179-4ffa-a8cc-644a14ce8538\u0022 /\u003E\n\n\u003Cimg width=\u0022522\u0022 height=\u0022523\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/02163676-2d1d-4852-9326-646f2ca0dd11\u0022 /\u003E\n\n\u003Cimg width=\u0022538\u0022 height=\u0022617\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/761bf514-57d3-44df-b876-46cd1f0c1846\u0022 /\u003E\n\n**Steps to Reproduce:**\n1. Run \u0060git clone https://github.com/qianwens/azure-mcp/tree/qianwen/deploy\u0060 and switch branch to \u0060qianwen/deploy\u0060.\n2. Run \u0060dotnet build\u0060.\n3. Run \u0060az login\u0060.\n4. Configure \u0060mcp.json\u0060 in default mode.\n5. Start mcp server.\n6. Open GitHub Copilot in VS Code and [switch to Agent mode](https://code.visualstudio.com/docs/copilot/chat/chat-agent-mode).\n7. Click Refresh on the tool list to select only the MCP Server tool in default mode.\n8. Enter test prompts \u0060Review my Bicep templates and list infrastructure best practices I should adopt.\u0060.\n\n**Environment:**\n- OS: Windows.\n- Vscode Insiders Version: 1.103.0\n- GitHub Copilot Chat Version: 0.31.2025081401\n- MCP Service Mode: Default(namespace)\n\n**Test Prompts:** \n\n1. \u0060Review my Bicep templates and list infrastructure best practices I should adopt.\u0060\n2. \u0060Inspect Terraform in this repo and recommend Azure-specific improvements.\u0060\n3. \u0060Provide baseline IaC rules for network security, tagging, and naming conventions.\u0060\n4. \u0060What are best practices for storing secrets and connection strings in IaC?\u0060\n5. \u0060Suggest IaC rules to prepare for multi-region failover and disaster recovery.\u0060\n\n**Expected Behavior:**\nCopilot chat should invoke the Deploy tool for each prompt.\n\n@jongio for notification.", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Deploy", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/293" + }, + { + "IssueNumber": 294, + "Title": "[Deploy Tool] Pipeline Guidance Get prompts failed \u2014 Deploy Tool not invoked on PR #626", + "Body": "Title: [Deploy Tool] Pipeline Guidance Get prompts failed \u2014 Deploy Tool not invoked on PR #626\n\n**Description:**\nWhen running the MCP server in \u0060default\u0060 mode on PR #626 , the Copilot chat does not trigger the Deploy tool for any prompts except \u0060Generate CI/CD guidance for a GitHub repository that deploys a .NET API to Azure.\u0060 in the [Deploy \u2014 Pipeline Guidance Get](https://github.com/qianwens/azure-mcp/blob/qianwen/deploy/docs/PR-626-Manual-Testing-Plan.md#deploy--pipeline-guidance-get-prompts-3640) section. Responses to some of the prompts are as follows:\n\n\u003Cimg width=\u0022527\u0022 height=\u0022503\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/f0b65af4-d10c-4e57-a323-989d4d3d4382\u0022 /\u003E\n\n\u003Cimg width=\u0022522\u0022 height=\u0022530\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/de305830-75f0-43cb-b84f-576db08af9f3\u0022 /\u003E\n\n\u003Cimg width=\u0022522\u0022 height=\u0022510\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/3a87edc4-e3aa-4e9c-9534-bba5c71a28d0\u0022 /\u003E\n\n**Steps to Reproduce:**\n1. Run \u0060git clone https://github.com/qianwens/azure-mcp/tree/qianwen/deploy\u0060 and switch branch to \u0060qianwen/deploy\u0060.\n2. Run \u0060dotnet build\u0060.\n3. Run \u0060az login\u0060.\n4. Configure \u0060mcp.json\u0060 in default mode.\n5. Start mcp server.\n6. Open GitHub Copilot in VS Code and [switch to Agent mode](https://code.visualstudio.com/docs/copilot/chat/chat-agent-mode).\n7. Click Refresh on the tool list to select only the MCP Server tool in default mode.\n8. Enter test prompts \u0060Recommend an Azure DevOps pipeline for building and deploying a container app.\u0060.\n\n**Environment:**\n- OS: Windows.\n- Vscode Insiders Version: 1.103.0\n- GitHub Copilot Chat Version: 0.31.2025081401\n- MCP Service Mode: Default(namespace)\n\n**Test Prompts:** \n\n1. \u0060Recommend an Azure DevOps pipeline for building and deploying a container app.\u0060\n2. \u0060I have a monorepo; what pipeline setup should I use for independent services?\u0060\n3. \u0060Provide guidance for handling secrets, environment variables, and approvals in the pipeline.\u0060\n4. \u0060Help me set up CI/CD that builds PRs, runs tests, and deploys on merges to main.\u0060\n\n**Expected Behavior:**\nCopilot chat should invoke the Deploy tool for each prompt.\n\n@jongio for notification.", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Deploy", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/294" + }, + { + "IssueNumber": 565, + "Title": "Add \u0022--tool \u003Cname\u003E\u0022 switch for fine grained control over tool list", + "Body": "Title: Add \u0022--tool \u003Cname\u003E\u0022 switch for fine grained control over tool list\n\n### Describe the bug\n\nToday we allow users to limit the available MCP tools to a single namespace, for example:\n\n\u0060\u0060\u0060\u0060powershell\n# Start MCP Server with only Storage tools\nazmcp server start \\\n --namespace storage \\\n --mode all \\\n [--transport \u003Ctransport\u003E] \\\n [--read-only]\n\u0060\u0060\u0060\u0060\n\nHowever, for Sub-Agents, some customers want the ability to have even more control; the ability to specify the EXACT one (1) or more tools exposed:\n\n\u0060\u0060\u0060\u0060powershell\n# Start MCP Server with only \u0060postgres database query\u0060\nazmcp server start \\\n --tool azmcp_postgres_database_query \\ \n --mode all \\\n [--transport \u003Ctransport\u003E] \\\n [--read-only]\n\u0060\u0060\u0060\u0060\n\n### Expected behavior\n\nAbility to set the exact tool list.\n\n### Actual behavior\n\nNo ability to control the exact tool list today.", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Core", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/565" + }, + { + "IssueNumber": 620, + "Title": "App Lens diagnostics fails with internal error (500) when diagnosing app issues", + "Body": "Title: App Lens diagnostics fails with internal error (500) when diagnosing app issues\n\n**Description:**\nWhen using the prompts \u0060Please help me diagnose issues with my app using app lens\u0060, \u0060Use app lens to check why my app is slow?\u0060, or \u0060What does app lens say is wrong with my service?\u0060, the tool fails to complete the diagnosis and instead returns an internal error. The specific error message is as follows:\n\u003Cimg width=\u0022822\u0022 height=\u0022696\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/60be69a7-4802-486e-aa62-3078ccb63edb\u0022 /\u003E\n\u003Cimg width=\u0022794\u0022 height=\u0022665\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/ea39fdd1-3706-4faf-9156-6284a060b3bd\u0022 /\u003E\n\n**Steps to Reproduce:**\n1. Start mcp server in namespaces mode.\n2. Open GitHub Copilot in VS Code and [switch to Agent mode](https://code.visualstudio.com/docs/copilot/chat/chat-agent-mode).\n3. Click Refresh on the tools list, and select the \u0060Built-in\u0060, \u0060Extension: Github Copilot for Azure\u0060, \u0060MCP Server: Microsoft Docs\u0060 and \u0060MCP Server: Azure MCP\u0060.\n4. Enter test prompts \u0060Please help me diagnose issues with my app using app lens\u0060\n\n**Environment:**\n\n- OS: Windows.\n- Vscode Version: 1.104.2\n- GitHub Copilot Chat Version: 0.31.3\n- Large Language Model: GPT-4.1\n- Virtual Tool: Off\n- Azure MCP Server: 0.8.2\n\n**Expected Behavior:**\nThe tool should successfully complete the diagnostic process and return the expected diagnostic results.\n\n@joshfree for notification", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-AppLens", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/620" + }, + { + "IssueNumber": 776, + "Title": "[BUG] Authentication Regression in Azure MCP Versions 0.6.x - 0.8.x: Falls Back to Interactive Browser Instead of Using Azure CLI Credentials", + "Body": "Title: [BUG] Authentication Regression in Azure MCP Versions 0.6.x - 0.8.x: Falls Back to Interactive Browser Instead of Using Azure CLI Credentials\n\nRelated to #710 - This is a more general case of the InteractiveBrowserCredential issue, affecting Claude Desktop and other headless\n Linux environments, not just Docker.\n\n Environment\n\n - OS: Linux (Manjaro)\n - Azure MCP Version: 0.8.6 (tested), 0.6.x-0.8.x affected\n - Working Version: 0.5.8\n - Client: Claude Desktop\n - Azure CLI Version: Working and authenticated (az login successful)\n - Environment: Headless (no X11 display server)\n\n Description\n\n Starting from version 0.6.x, Azure MCP server fails to use Azure CLI credentials and falls back to Interactive Browser authentication,\n which fails in headless Linux environments with the error \u0022No X display available.\u0022\n\n Version 0.5.8 correctly uses Azure CLI credentials without attempting browser authentication.\n\n Steps to Reproduce\n\n 1. Install Azure MCP 0.8.6:\n npm install -g @azure/mcp@0.8.6\n 2. Ensure Azure CLI is authenticated:\n az login\n az account show # Verify authentication works\n 3. Configure Claude Desktop (or any MCP client) in ~/.config/Claude/claude_desktop_config.json:\n {\n \u0022mcpServers\u0022: {\n \u0022azure\u0022: {\n \u0022command\u0022: \u0022/path/to/node\u0022,\n \u0022args\u0022: [\n \u0022/path/to/@azure/mcp/index.js\u0022,\n \u0022server\u0022,\n \u0022start\u0022,\n \u0022--transport\u0022,\n \u0022stdio\u0022\n ],\n \u0022env\u0022: {\n \u0022HOME\u0022: \u0022/home/username\u0022,\n \u0022PATH\u0022: \u0022/usr/local/bin:/usr/bin:/bin:/home/username/bin\u0022,\n \u0022AZURE_SUBSCRIPTION_ID\u0022: \u0022your-subscription-id\u0022,\n \u0022AZURE_TENANT_ID\u0022: \u0022your-tenant-id\u0022,\n \u0022AZURE_AUTHORITY_HOST\u0022: \u0022https://login.microsoftonline.com\u0022\n }\n }\n }\n }\n 4. Start Claude Desktop and try to use any Azure MCP tool (e.g., subscription_list)\n\n Expected Behavior\n\n Azure MCP server should use the Azure CLI credential from the authentication chain and successfully authenticate without user\n interaction.\n\n Actual Behavior\n\n 1. Server attempts interactive browser authentication\n 2. Opens a browser authentication window (or attempts to)", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Docker", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/776" + }, + { + "IssueNumber": 781, + "Title": "Some \u0060Azure AI Foundry\u0060 prompts do not trigger the corresponding tool as expected", + "Body": "Title: Some \u0060Azure AI Foundry\u0060 prompts do not trigger the corresponding tool as expected\n\n**Description:**\nWhen testing \u0060Azure AI Foundry\u0060, some test prompts did not trigger the expected tools, as follows:\n\n1. \u0060Create a chat completion with the message \u0022Hello, how are you today?\u0060\n\u003Cimg width=\u0022656\u0022 height=\u0022467\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/5deef178-1bb0-414e-8013-4cb3309c6559\u0022 /\u003E\n\n2. \u0060Create a completion with the prompt \u0022What is Azure?\u0022\u0060:\n\u003Cimg width=\u0022656\u0022 height=\u0022212\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/552085e7-cf14-46ee-9aa4-6ceef1c3df4b\u0022 /\u003E\n\n3. \u0060Generate embeddings for the text \u0022Azure OpenAI Service\u0022\u0060:\n\u003Cimg width=\u0022656\u0022 height=\u0022682\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/da15caad-111b-451c-b695-ffe9ff780f2e\u0022 /\u003E\n\n4. \u0060Create vector embeddings for my text using Azure OpenAI\u0060:\n\u003Cimg width=\u0022656\u0022 height=\u0022360\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/83ac4a53-4506-4402-9629-fc2adb964a7b\u0022 /\u003E\n\n**Steps to Reproduce:**\n1. Start mcp server in namespaces mode.\n2. Open GitHub Copilot in VS Code and [switch to Agent mode](https://code.visualstudio.com/docs/copilot/chat/chat-agent-mode).\n3. Click Refresh on the tools list, and select the \u0060Built-in\u0060, \u0060Extension: Github Copilot for Azure\u0060, \u0060MCP Server: Microsoft Docs\u0060, \u0060github MCP server\u0060 and \u0060MCP Server: Azure MCP\u0060.\n4. Enter test prompts \u0060Create a chat completion with the message \u0022Hello, how are you today?\u0060\n\n**Environment:**\n\n- OS: Windows.\n- Vscode Version: 1.105\n- GitHub Copilot Chat Version: 0.31.3\n- Large Language Model: GPT-4.1\n- Virtual Tool: On\n- Azure MCP Server: 0.8.6\n\n**Expected Behavior:**\nThe expected tools were successfully triggered.\n\n@joshfree for notification", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Foundry", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/781" + }, + { + "IssueNumber": 785, + "Title": "Enhance Tool Description for Communication tool", + "Body": "Title: Enhance Tool Description for Communication tool\n\nThe current confidence score of communication tools is ranging between 0.2-0.3. Enhance the tool description of the tools to increase the chances of the LLM picking the right tool. \n\n\u003Cimg width=\u0022531\u0022 height=\u0022221\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/448346f0-f509-4a4f-b68f-f8398f8243fc\u0022 /\u003E\n\n\u003Cimg width=\u0022466\u0022 height=\u0022225\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/60bce2c0-0b94-4f58-a072-d517604e1bb8\u0022 /\u003E", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Communication", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/785" + }, + { + "IssueNumber": 857, + "Title": "Some \u0060Azure Monitor\u0060 prompts do not trigger the corresponding tool as expected", + "Body": "[switch to Agent mode](https://code.visualstudio.com/docs/copilot/chat/chat-agent-mode).\n3. Click Refresh on the tools list, and select the \u0060Built-in\u0060, \u0060Extension: Github Copilot for Azure\u0060, \u0060MCP Server: Microsoft Docs\u0060 and \u0060MCP Server: Azure MCP\u0060.\n4. Enter test prompt \u0060What\u0027s the request per second rate for my Application Insights resource appi-vxz72c4on5sc2 over the last 24h\u0060.\n\n**Environment:**\n\n- OS: Windows.\n- Vscode Version: 1.105.0\n- GitHub Copilot Chat Version: 0.32.1\n- Large Language Model: GPT-4.1\n- Virtual Tool: Off\n- Azure MCP Server: 0.9.0 and 0.9.3\n\n**Expected Behavior:**\nTest prompts can **stably** trigger corresponding tools.\n\n@joshfree for notification.", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Monitor", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/857" + }, + { + "IssueNumber": 880, + "Title": "[BUGBASH] Installation instructions skip authentication", + "Body": "Title: [BUGBASH] Installation instructions skip authentication\n\n### Describe the bug\n\nThe goal was to mimic a user who is new to Azure and Azure tools.\n\nI created a new VM (Devbox) and followed the installation instructions on the [readme](https://github.com/microsoft/mcp/tree/main/servers/Azure.Mcp.Server#vs-code-recommended) for VS Code, the recommended option.\n\nAfter following that instructions, this is what I had:\n- VS Code installed, NOT signed in into GitHub nor Azure.\n- The following extensions installed:\n - GitHub Copilot\n - GitHub Copilot Chat\n - Azure MCP Server\n - GitHub Copilot for Azure (This one got installed with the Azure MCP Server)\n\nI didn\u0027t have the Azure CLI, or Azure PowerShell extension, or Visual Studio.\n\nWhen I started asking questions to the agent, it never chose the Azure MCP server, but instead suggested me to run azcli commands. Here are some examples of the questions I asked:\n- What\u0027s my azure subscription ID?\n- Do I have a resource group named \u0022my-cool-rg\u0022 in my default azure subscription?\n- Can you retrieve my secrets from my \u0022kv-123cba-jon\u0022 keyvault?\n\nFinally I decided to ask \u0022why are you not using the Azure MCP server?\u0022 and the agent response was basically because I was not authenticated to Azure, so it didn\u0027t even bother on using it:\n\n\u003Cimg width=\u0022591\u0022 height=\u0022705\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/76523172-c240-4c4f-ae6c-0239303fef98\u0022 /\u003E\n\nEven though logging into your azure account could be an obvious step, this is a problem because a new user might not know about Azure Identity, DAC or how to authenticate using \u0060az login\u0060. Following the instructions will install the Azure MCP server but then the server will never be used by the LLM.\n\n### Expected behavior\n\nWe should add a step, or a warning, that users have to authenticate using one of the DAC methods. We can also point them into the Authenticate guide that is already in the repo.\n\nFor the VS Code recommended instructions, we can tell them to log in first using their Azure account.", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Auth", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/880" + }, + { + "IssueNumber": 95, + "Title": "Switch \u0060azmcp azuremanagedlustre filesystem list/create\u0060 to use Async .NET SDK Function calls", + "Body": "Title: Switch \u0060azmcp azuremanagedlustre filesystem list/create\u0060 to use Async .NET SDK Function calls\n\n[No description provided]", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-managedlustre", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/95" + }, + { + "IssueNumber": 582, + "Title": "[SQL refactor] refactor SQL code via ARG .NET interface", + "Body": "Title: [SQL refactor] refactor SQL code via ARG .NET interface\n\n[SQL refactor] refactor SQL code via ARG .NET interface. \n\nsame for https://github.com/Azure/azure-mcp/pull/938", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-SQL", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/582" + }, + { + "IssueNumber": 616, + "Title": "Unable to retrieve details for \u0022Azure SQL\u0022 product listed in Azure Marketplace", + "Body": "Title: Unable to retrieve details for \u0022Azure SQL\u0022 product listed in Azure Marketplace\n\n**Description:**\nEntered \u0060Get details about marketplace product Azure SQL\u0060, but received a \u0022not found\u0022 (404) error as follow: \n\u003Cimg width=\u0022805\u0022 height=\u0022439\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/17343264-59b4-433b-a045-cf9a0b08a748\u0022 /\u003E\n\nHowever, \u0060Azure SQ\u0060L can be found in the list of Microsoft products in the Azure Marketplace.\n\u003Cimg width=\u0022807\u0022 height=\u0022644\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/196ca2da-7f8d-4cf6-8ee9-8675d428ba41\u0022 /\u003E\n\u003Cimg width=\u0022814\u0022 height=\u0022225\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/56e6cc2f-e35b-4613-aac3-522699797428\u0022 /\u003E\n\n**Steps to Reproduce:**\n1. Start mcp server in namespaces mode.\n2. Open GitHub Copilot in VS Code and [switch to Agent mode](https://code.visualstudio.com/docs/copilot/chat/chat-agent-mode).\n3. Click Refresh on the tools list, and select the \u0060Built-in\u0060, \u0060Extension: Github Copilot for Azure\u0060, \u0060MCP Server: Microsoft Docs\u0060 and \u0060MCP Server: Azure MCP\u0060.\n4. Enter test prompts \u0060Get details about marketplace product Azure SQL\u0060\n\n**Environment:**\n\n- OS: Windows.\n- Vscode Version: 1.104.2\n- GitHub Copilot Chat Version: 0.31.3\n- Large Language Model: GPT-4.1\n- Virtual Tool: Off\n- Azure MCP Server: 0.8.2\n\n**Expected Behavior:**\nShould be able to retrieve details for any product listed in the Azure Marketplace, including \u0022Azure SQL\u0022.\n\n@joshfree for notification", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Marketplace", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/616" + }, + { + "IssueNumber": 636, + "Title": "[ONBOARD] Azure Security Confidential Ledger", + "Body": "Title: [ONBOARD] Azure Security Confidential Ledger\n\n#### Azure.Security.ConfidentialLedger (new \u0060security\u0060 namespace)\n\n- [ ] \u0060azmcp-security-confidentialledger-entries-append\u0060 - Append tamper-proof entries to the Confidential Ledger with cryptographic verification. This tool adds new entries to the immutable ledger with automatic integrity verification and consensus validation. Returns transaction ID and append confirmation. Requires ledger-name and entry-data. - Suggested prompt: \u0022Add a new entry with data \u003Centry-data\u003E to Confidential Ledger \u003Cledger-name\u003E\u0022\n- [ ] \u0060azmcp-security-confidentialledger-entries-get\u0060 - Retrieve entries from the Confidential Ledger with integrity verification and audit trails. This tool fetches ledger entries with cryptographic proof of authenticity and tamper detection. Returns entry data with verification status as JSON. Requires ledger-name and optional transaction-id or entry-range. - Suggested prompt: \u0022Retrieve entries from Confidential Ledger \u003Cledger-name\u003E for transaction \u003Ctransaction-id\u003E\u0022\n- [ ] \u0060azmcp-security-confidentialledger-receipt-get\u0060 - Get cryptographic transaction receipts providing proof of ledger operations. This tool retrieves receipts with digital signatures and merkle proof data for transaction verification and compliance auditing. Returns receipt data with cryptographic proofs as JSON. Requires ledger-name and transaction-id. - Suggested prompt: \u0022Get the receipt for transaction \u003Ctransaction-id\u003E in ledger \u003Cledger-name\u003E\u0022", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-ConfidentialLedger", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/636" + }, + { + "IssueNumber": 668, + "Title": "[BUG] AppConfig Key-Value commands are sending bad requests", + "Body": "Title: [BUG] AppConfig Key-Value commands are sending bad requests\n\n### Describe the bug\n\nRunning any appconfig key-value tool will return in a \u0022bad request\u0022 error:\n\n\u0060\u0060\u0060json\n{\n \u0022error\u0022: {\n \u0022code\u0022: \u0022BadRequest\u0022,\n \u0022message\u0022: \u0022Please provide below info when asking for support: timestamp = REDACTED , correlationId = REDACTED .\u0022,\n \u0022details\u0022: [\n {\n \u0022code\u0022: \u0022InvalidQuery\u0022,\n \u0022message\u0022: \u0022Query is invalid. Please refer to the documentation for the Azure Resource Graph service and fix the error before retrying.\u0022\n },\n {\n \u0022code\u0022: \u0022ExactlyOneStartingOperatorRequired\u0022,\n \u0022message\u0022: \u0022The query has either no, or multiple, starting points. Exactly one starting point is expected.\u0022\n }\n ]\n }\n}\n\u0060\u0060\u0060\n\nThis error happens when listing the keys and values, or when trying to set a new one.\n\n### Expected behavior\n\nThe operation should set or retrieve the key with the expected value\n\n### Actual behavior\n\nA 400 error is returned.\n\n### Reproduction Steps\n\n- Create an App Configuration in Azure\n- Open VS Code\n- Open GitHub copilot chat in Agent mode\n- Select the Azure MCP server\n- Provide the following prompt: \u0060I have this appconfig: \u0060\u003CYOUR_APPCONFIG_NAME\u003E\u0060 in my subscription \u0060\u003CYOUR_SUBSCRIPTION_ID\u003E\u0060, I want to add a new Key \u0022myTestKey\u0022 with value \u002212345\u0022.\u0060\n\n### Environment\n\nOS: Windows 11\nIDE: VSCode\nAgent: GPT5", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-AppConfig", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/668" + }, + { + "IssueNumber": 709, + "Title": "[BUG] Microsoft Artifact Registry should use Azure \u0060A\u0060 icon", + "Body": "Title: [BUG] Microsoft Artifact Registry should use Azure \u0060A\u0060 icon\n\nhttps://mcr.microsoft.com/en-us/artifact/mar/azure-sdk/azure-mcp/tags\n\n\u003Cimg width=\u0022565\u0022 height=\u0022295\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/1462f47a-d0cc-48fe-9bde-270bfd54293a\u0022 /\u003E\n\n\nIt should use https://[camo.githubusercontent.com/192345808578bf36c5a1f0a9c34d5f33ea5789c6d880b01011f23401fc1d38fa/68747470733a2f2f63646e2d64796e6d656469612d312e6d6963726f736f66742e636f6d2f69732f636f6e74656e742f6d6963726f736f6674636f72702f61636f6d5f736f6369616c5f69636f6e5f617a757265](https://camo.githubusercontent.com/192345808578bf36c5a1f0a9c34d5f33ea5789c6d880b01011f23401fc1d38fa/68747470733a2f2f63646e2d64796e6d656469612d312e6d6963726f736f66742e636f6d2f69732f636f6e74656e742f6d6963726f736f6674636f72702f61636f6d5f736f6369616c5f69636f6e5f617a757265) instead", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Docker", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/709" + }, + { + "IssueNumber": 77, + "Title": "[Azure-MCP] Onboard Azure Function App", + "Body": "Title: [Azure-MCP] Onboard Azure Function App\n\n### Service / Tool Name\n\nAzure.Functionapp\n\n### Contacts\n\nColby Timm\n\n### Intended Agent Scenarios\n\nBringing over this issue from the \u0060azure-mcp\u0060 repo [onboard function app issue](https://github.com/Azure/azure-mcp/issues/482). Made some edits and improvements and updated the list on what has been completed.\n\n# MCP Roadmap: Azure Function Apps\n\n## \uD83D\uDD0E Discover \u0026 Inspect\n\n- [x] List all Function Apps \n- [x] Get details for a Function App (includes runtime, stack, site config, and settings) \n- [ ] List functions in a Function App \n- [ ] Get details for a specific function (bindings, routes, status) \n- [ ] List deployment slots \n- [ ] Show host and function keys \n- [ ] View diagnostics summary (failures, cold starts, quotas) \n- [ ] Download host.json or function.json files \n- [ ] View Kudu/SCM info for a Function App \n\n---\n\n## \uD83D\uDEE0\uFE0F Create \u0026 Setup\n\n- [ ] Create Function App (basic defaults) \n- [ ] Create Function App (advanced options) \n- [ ] Create Function App (custom container) \n- [ ] Create Function App (Flex or Premium plan) \n- [ ] Create Slot \n- [ ] Create New Project (local) \n- [ ] Create New Containerized Project (local) \n- [ ] Add New Function to Project \n- [ ] Initialize Project for VS Code \n- [ ] Install or Update Azure Functions Core Tools \n\n---\n\n## \u2699\uFE0F Configure \u0026 Manage\n\n- [ ] Add Binding to a Function \n- [ ] Add Function App Identity Connection \n- [ ] Add Local Project Identity Connection \n- [ ] Add New Application Setting \n- [ ] Edit Application Setting \n- [ ] Rename Application Setting \n- [ ] Delete Application Setting \n- [ ] Toggle Setting as Slot Setting \n- [ ] Upload Local Settings to Azure \n- [ ] Download Remote Settings from Azure \n- [ ] Encrypt Local Settings \n- [ ] Decrypt Local Settings \n- [ ] Set AzureWebJobsStorage \n- [ ] Enable System-Assigned Identity \n- [ ] Assign Managed Identity to Function App \n- [ ] Configure Deployment Source (GitHub, local zip, container registry) \n- [ ] Connect to GitHub Repository \n- [ ] Disconnect from GitHub Repository \n- [ ] Restart Function App \n- [ ] Report Issue (feedback/help) \n- [ ] Uninstall Azure Functions Core Tools", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-FunctionApp", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/77" + }, + { + "IssueNumber": 815, + "Title": "Azure AI Speech tests show 5 failures in pipeline runs", + "Body": "Title: Azure AI Speech tests show 5 failures in pipeline runs\n\n### Describe the bug\n\nPipeline runs such as [this one](https://dev.azure.com/azure-sdk/internal/_build/results?buildId=5455092\u0026view=results) show the following Azure AI Speech related errors:\n\n\u003Cimg width=\u00222283\u0022 height=\u0022362\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/553f6cce-8395-4506-ad20-5de7e0aa70f6\u0022 /\u003E\n\nIt seems there\u0027s a problem retrieving secrets from Key Vault for some tests, as well as an error that says an invalid endpoint was used in one of them.\n\n### Expected behavior\n\nTests should show no error messages because they work as expected.\n\n### Actual behavior\n\nTests show error messages because some configuration is wrong.\n\n### Reproduction Steps\n\nFire up a new run in [this pipeline](https://dev.azure.com/azure-sdk/internal/_build?definitionId=7866\u0026_a=summary) from the main branch that includes the \u0060Live Tests\u0060 stage.\n\n### Environment\n\n_No response_", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Speech", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/815" + }, + { + "IssueNumber": 860, + "Title": "Some prompts in \u0060Azure App Service\u0060 cannot stably trigger corresponding tools", + "Body": "Title: Some prompts in \u0060Azure App Service\u0060 cannot stably trigger corresponding tools\n\n**Description:**\nWhen entering prompts such as \u0060Add a MySQL database to app service \u003Capp_name\u003E\u0060, \u0060Configure a SQL Server database for app service \u003Capp_name\u003E\u0060, \u0060Add a PostgreSQL database to app service \u003Capp_name\u003E\u0060, \u0060Add a CosmosDB database to app service \u003Capp_name\u003E\u0060, \u0060Add database \u003Cdatabase_name\u003E on server \u003Cdatabase_server\u003E to app service \u003Capp_name\u003E\u0060, or \u0060Set connection string for database \u003Cdatabase_name\u003E in app service \u003Capp_name\u003E\u0060, the \u0060azmcp_appservice_database_add\u0060 tool is not triggered **reliably**. **In five tests, there were three failures where the tool did not respond as expected.**\n\u003Cimg width=\u0022664\u0022 height=\u0022861\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/cd08ab20-f2ff-47b5-92f1-65011f6d7d66\u0022 /\u003E\n\u003Cimg width=\u0022664\u0022 height=\u0022832\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/c0e8a2c6-93b4-4d90-a5b8-c1025a1bdae3\u0022 /\u003E\n\n**Steps to Reproduce:**\n1. Start mcp server in \u0060namespaces\u0060 mode.\n2. Open GitHub Copilot in VS Code and [switch to Agent mode](https://code.visualstudio.com/docs/copilot/chat/chat-agent-mode).\n3. Click Refresh on the tools list, and select the \u0060Built-in\u0060, \u0060Extension: Github Copilot for Azure\u0060, \u0060MCP Server: Microsoft Docs\u0060 and \u0060MCP Server: Azure MCP\u0060.\n4. Enter test prompt \u0060Add a MySQL database to app service \u003Capp_name\u003E\u0060.\n\n**Environment:**\n\n- OS: Windows.\n- Vscode Version: 1.105.0\n- GitHub Copilot Chat Version: 0.32.1\n- Large Language Model: GPT-4.1\n- Virtual Tool: Off\n- Azure MCP Server: 0.9.0 and 0.9.3\n\n**Expected Behavior:**\nThe \u0060azmcp_appservice_database_add\u0060 tool can be triggered reliably.\n\n@joshfree for notification.", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-AppService", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/860" + }, + { + "IssueNumber": 970, + "Title": "[Remote] Bug: Server start should not support both --run-as-remote-http-service and --transport options", + "Body": "## Code Analysis\n\n### Current Implementation Location\n- **Options Definition**: \u0060core/Azure.Mcp.Core/src/Areas/Server/Options/ServiceOptionDefinitions.cs\u0060\n- **Transport Types**: \u0060core/Azure.Mcp.Core/src/Areas/Server/Options/TransportTypes.cs\u0060\n- **Command Logic**: \u0060core/Azure.Mcp.Core/src/Areas/Server/Commands/ServiceStartCommand.cs\u0060\n- **Service Collection**: \u0060core/Azure.Mcp.Core/src/Areas/Server/Commands/ServiceCollectionExtensions.cs\u0060\n\n### Current Transport Validation\n\u0060\u0060\u0060csharp\nprivate static void ValidateTransport(string? transport, CommandResult commandResult)\n{\n if (transport is null || transport == TransportTypes.StdIo)\n {\n return; // Success\n }\n\n commandResult.AddError($\u0022Invalid transport \u0027{transport}\u0027. Valid transports are: {TransportTypes.StdIo}.\u0022);\n}\n\u0060\u0060\u0060\n\n### Current Host Creation Logic\n\u0060\u0060\u0060csharp\nprivate IHost CreateHost(ServiceStartOptions serverOptions)\n{\n if (serverOptions.EnableInsecureTransports || serverOptions.RunAsRemoteHttpService)\n {\n return CreateHttpHost(serverOptions);\n }\n else\n {\n return CreateStdioHost(serverOptions);\n }\n}\n\u0060\u0060\u0060\n\n## Proposed Solution\n\n1. **Extend TransportTypes.cs** to include HTTP:\n \u0060\u0060\u0060csharp\n public const string Http = \u0022http\u0022;\n \u0060\u0060\u0060\n\n2. **Update ValidateTransport method** to accept both \u0060stdio\u0060 and \u0060http\u0060\n\n3. **Modify CreateHost logic** to check \u0060options.Transport == TransportTypes.Http\u0060 instead of \u0060options.RunAsRemoteHttpService\u0060\n\n4. **Update documentation** to reflect the new unified transport option\n\n5. **Add deprecation warning** for \u0060--run-as-remote-http-service\u0060 with migration guidance\n\n## Files Requiring Changes\n\n- \u0060core/Azure.Mcp.Core/src/Areas/Server/Options/TransportTypes.cs\u0060\n- \u0060core/Azure.Mcp.Core/src/Areas/Server/Options/ServiceOptionDefinitions.cs\u0060 \n- \u0060core/Azure.Mcp.Core/src/Areas/Server/Commands/ServiceStartCommand.cs\u0060\n- \u0060servers/Azure.Mcp.Server/docs/azmcp-commands.md\u0060\n- \u0060servers/Azure.Mcp.Server/TROUBLESHOOTING.md\u0060\n- \u0060servers/Azure.Mcp.Server/src/Properties/launchSettings.json\u0060\n\n## Breaking Change Considerations\n\nTo minimize breaking changes:", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "remote-mcp", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/970" + }, + { + "IssueNumber": 971, + "Title": "[Remote] Caching and DI", + "Body": "Title: [Remote] Caching and DI\n\n### Describe the bug\n\nAfter the initial analysis by @vukelich here were the changes proposed -\n\n- [ ] Remove caching for ARM client\n- [ ] Support multi user/multi tenant\n- [ ] Extend DI whereever objects are reused repeatedly\n- [ ] SubscriptionService, ICacheService - revisit for remote hosting\n- [ ] Move auth out of ITenantService\n- [ ] Currently, PostgresService, MySqlService, MarketplaceService, and MonitorHealthModelService use class-level variable caching, which will cause issues with OBO added as per @anuchandy \n\nSome of these may be already covered by auth but didnt want this to get lost\n\n@vukelich \n\n### Expected behavior\n\nAll above are remediated\n\n### Actual behavior\n\nThese exist in code - code refactor needs to occur\n\n### Reproduction Steps\n\nNone\n\n### Environment\n\n_No response_", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "remote-mcp", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/971" + }, + { + "IssueNumber": 188, + "Title": "Ship azmcp as a dxt package for Claude Desktop", + "Body": "Title: Ship azmcp as a dxt package for Claude Desktop\n\nTracking issue to bundle azmcp as a dxt (zip) https://github.com/anthropics/dxt for easy 1-click installation by Claude Desktop https://www.reddit.com/r/ClaudeAI/s/ZPUHwGSh88 which added this support 3 days ago.", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-McpRegistry", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/188" + }, + { + "IssueNumber": 191, + "Title": "Add command: azmcp [appservice] [database] [add]", + "Body": "Title: Add command: azmcp [appservice] [database] [add]\n\nDescription:\n\nAdd a database connection to the Azure Web app of the Azure App Service.", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-AppService", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/191" + }, + { + "IssueNumber": 210, + "Title": "[REMOTE] How Can I Host Azure MCP on My Server?", + "Body": "Title: [REMOTE] How Can I Host Azure MCP on My Server?\n\nI want to host the Azure MCP server on my own server (cloud VM or on-premises) and access it remotely from other applications. The current documentation and Dockerfile only show local usage with stdio transport.\n\nQuestions:\n\nWhat is the recommended way to deploy Azure MCP on a remote server?\nHow can I expose MCP for remote access (e.g., HTTP/SSE endpoint, TCP, or other)?\nAre there best practices for securing MCP when hosted on a public server?\nIs there support for running MCP as a service (systemd, Windows service, etc.)?\nCan I use Docker to host MCP and expose it for remote clients? If so, how should I configure networking and authentication?\nEnvironment: MacOS", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "remote-mcp", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/210" + }, + { + "IssueNumber": 212, + "Title": "Can we add a comment to indicate the list operations can performed by ARG currently and this can be removed once we migrate the ARG tool?", + "Body": "Title: Can we add a comment to indicate the list operations can performed by ARG currently and this can be removed once we migrate the ARG tool?\n\nOptional : Can we add a comment to indicate the list operations can performed by ARG currently and this can be removed once we migrate the ARG tool?\r\n\r\n_Originally posted by @kvenkatrajan in https://github.com/Azure/azure-mcp/pull/675#discussion_r2226895739_", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-ARM", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/212" + }, + { + "IssueNumber": 222, + "Title": "Add {Destructive, Idempotent, OpenWorld, local-required, Secret, PII} hints to MCP Tools", + "Body": "Title: Add {Destructive, Idempotent, OpenWorld, local-required, Secret, PII} hints to MCP Tools\n\nWe\u0027ve done a good job of adding \u0060ReadOnlyHint\u0060 to our MCP Tools, but we have yet to annotate tools with the rest of the core tool annotations which help hosts take appropriate safety precautions, such as filtering available tools and prompting users for confirmation.\n\n### Task\n1. Audit all existing MCP Tools and update their tool attributes appropriately\n2. Update /docs including new-command.md\n\n### Details\n\n- DestructiveHint = mcpServerToolAttr.Destructive,\n- IdempotentHint = mcpServerToolAttr.Idempotent,\n- OpenWorldHint = mcpServerToolAttr.OpenWorld,\n\n#### Core Tool Annotation Properties:\n- \u0060destructiveHint\u0060 (boolean): Indicates if the tool may perform destructive updates or irreversible changes [GitHub](https://github.com/Dicklesworthstone/ultimate_mcp_server/blob/main/tool_annotations.py)[STACK DEV](https://devflowstack.org/blog/mcp-tool-annotations-and-metadata)\n- \u0060idempotentHint\u0060 (boolean): Indicates if repeated calls with the same arguments have no additional effect [GitHub](https://github.com/Dicklesworthstone/ultimate_mcp_server/blob/main/tool_annotations.py)[STACK DEV](https://devflowstack.org/blog/mcp-tool-annotations-and-metadata)\n- \u0060openWorldHint\u0060 (boolean): Indicates if the tool interacts with external entities beyond the LLM\u0027s knowledge (like web APIs vs. closed databases)", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Core", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/222" + }, + { + "IssueNumber": 224, + "Title": "MCP server for Azure PowerShell and az cli docs", + "Body": "Title: MCP server for Azure PowerShell and az cli docs\n\nSimilar to the generic Microsoft Learn Docs MCP server, I would like an MCP server meant specifically to retrieve accurate information on the Azure PowerShell cmdlets and az cli commands.\n\nThe goal here would be to eliminate the vast majority of hallucinations that occur frequently when asking for code snippets using Azure PowerShell or az cli.\n\nWhy both? Because I personally prefer Azure PowerShell, but there is a lot of content focused on az cli for which I would just like to ask an LLM to convert to PowerShell. Others who prefer az cli may want to do the opposite from content using Azure PowerShell.", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-AzCLI", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/224" + }, + { + "IssueNumber": 232, + "Title": "Populate the values in \u0060InitializeRequest\u0060 response", + "Body": "Title: Populate the values in \u0060InitializeRequest\u0060 response\n\nAll mcp hosts should be calling \u0060InitializeRequest\u0060: https://modelcontextprotocol.io/specification/2025-06-18/basic/lifecycle\n\nThere are [fields ](https://modelcontextprotocol.io/specification/2025-06-18/schema#initializeresult )in the response that we should populate:\n\n\ninterface InitializeResult {\n [_meta](https://modelcontextprotocol.io/specification/2025-06-18/schema#initializeresult-_meta)?: { [key: string]: unknown };\n [capabilities](https://modelcontextprotocol.io/specification/2025-06-18/schema#): [ServerCapabilities](https://modelcontextprotocol.io/specification/2025-06-18/schema#servercapabilities);\n [instructions](https://modelcontextprotocol.io/specification/2025-06-18/schema#initializeresult-instructions)?: string;\n [protocolVersion](https://modelcontextprotocol.io/specification/2025-06-18/schema#initializeresult-protocolversion): string;\n [serverInfo](https://modelcontextprotocol.io/specification/2025-06-18/schema#): [Implementation](https://modelcontextprotocol.io/specification/2025-06-18/schema#implementation);\n [key: string]: unknown;\n}\n\n[ ] Populate instructions\nHypothesis:\n\u003EIn the servers that Adam and I cataloged, we found that only 22 of the 1467 servers returned a populated instructions field\nWe imagine that this would help with the top-levels of a function-calling hierarchy. Tools are the leaves of the tree, and are well-specified, but we need descriptions for each inner node to help the system navigate. \nHave the LLM pick the server, THEN pick the tool... for example. But a description of the server needs to come from somewhere for that prompt to work\nSource: Tyler Payne, Adam Fourney \n\nCurrently unclear whether VS Code or other hosts will make use of this.\n\n[ ] - Populate \u0060protocolVersion\u0060\nJosh: It looks like it could also be useful just in terms of specifying our minimum supported protocol version\nChris: This one scares me a bit - we will need to test in every Host before we ship to make sure that turning this on does not break what\u0027s currently working", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Core", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/232" + }, + { + "IssueNumber": 29, + "Title": "Add NuGet MCP Server", + "Body": "Title: Add NuGet MCP Server\n\n- **Repository**: https://github.com/NuGet/Home \n- **Description**: This is a Model Context Protocol (MCP) server for NuGet, enabling advanced tooling and automation scenarios for NuGet package management.\n- **NuGet.org** (for installation): https://www.nuget.org/packages/NuGet.Mcp.Server", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-NuGet", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/29" + }, + { + "IssueNumber": 299, + "Title": "azmcp-messaging-eventgrid-subscriptions-list", + "Body": "Title: azmcp-messaging-eventgrid-subscriptions-list\n\n\u0060azmcp-messaging-eventgrid-subscriptions-list\u0060 - List event subscriptions for topics with filtering and endpoint configuration. This tool shows all active subscriptions including webhook endpoints, event filters, and delivery retry policies. Returns subscription details as JSON array. Requires topic-name or subscription-id. - Suggested prompt: \u0022Show me all event subscriptions for topic \u003Ctopic-name\u003E\u0022", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-EventGrid", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/299" + }, + { + "IssueNumber": 308, + "Title": "\u0060azmcp-keyvault-admin-settings-get\u0060 - Get comprehensive Key Vault administration settings and configuration details. This tool retrieves vault policies, access configurations, network settings, and administrative properties for management and auditing. Returns administration settings as JSON. Requires vault-name. - Suggested prompt: \u0022Show me the administration settings for Key Vault \u0022", + "Body": "Title: \u0060azmcp-keyvault-admin-settings-get\u0060 - Get comprehensive Key Vault administration settings and configuration details. This tool retrieves vault policies, access configurations, network settings, and administrative properties for management and auditing. Returns administration settings as JSON. Requires vault-name. - Suggested prompt: \u0022Show me the administration settings for Key Vault \u0022\n\n[No description provided]", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-KeyVault", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/308" + }, + { + "IssueNumber": 311, + "Title": "MCP server hangs on invalid arguments", + "Body": "Title: MCP server hangs on invalid arguments\n\n# Repro Steps\n\nStart the service but with invalid arguments. In this case, \u0022--transport sse\u0022 is not supported.\n\n\u0060dotnet .\\azmcp.dll server start --transport sse --mode all --read-only\u0060\n\n# Expected\n\nIt exits with some error.\n\n# Actual\n\nHangs. Looks like an exception is also being thrown:\n\u0060\u0060\u0060\nException thrown: \u0027System.IO.IOException\u0027 in System.Net.Sockets.dll\nUnable to read data from the transport connection: The I/O operation has been aborted because of either a thread exit or an application request..\n\u0060\u0060\u0060", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Core", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/311" + }, + { + "IssueNumber": 1026, + "Title": "[BUG] 20-second pause with no log events in server startup", + "Body": "Title: [BUG] 20-second pause with no log events in server startup\n\n### Describe the bug\n\n\u003Cimg width=\u0022582\u0022 height=\u0022134\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/1ef01739-3436-4693-b238-695e3ec48310\u0022 /\u003E\n\n\n\n### Expected behavior\n\nWe should investigate where the time is being spent and also consider adding more log events during this window.\n\n### Actual behavior\n\nThe server appears hung for ~20 seconds during startup. \n\n### Reproduction Steps\n\n-\n\n### Environment\n\n-", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Core", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/1026" + }, + { + "IssueNumber": 1098, + "Title": "[Remote] Limit startup mode to read only start mode", + "Body": "Title: [Remote] Limit startup mode to read only start mode\n\nFrom security review - this was one of the suggestions.\n\nCan we limit the startup mode in set up scripts to start with readonly mode as default?", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "remote-mcp", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/1098" + }, + { + "IssueNumber": 1120, + "Title": "SQL FirewallRuleDeleteCommandTests test fails on MacOS in CI", + "Body": "86\n2025-11-10T16:05:20.5850200Z --- End of stack trace from previous location ---\n2025-11-10T16:05:20.6000560Z Passed Azure.Mcp.Tools.Sql.UnitTests.FirewallRule.FirewallRuleDeleteCommandTests.ExecuteAsync_Handles403Error [3 ms]\n2025-11-10T16:05:20.6113150Z Passed Azure.Mcp.Tools.Sql.UnitTests.Database.DatabaseUpdateCommandTests.ExecuteAsync_UpdateFromBasicToPremium_Succeeds [52 ms]\n2025-11-10T16:05:20.6265900Z Passed Azure.Mcp.Tools.Sql.UnitTests.FirewallRule.FirewallRuleDeleteCommandTests.ExecuteAsync_HandlesArgumentException [34 ms]\n2025-11-10T16:05:20.6441560Z Passed Azure.Mcp.Tools.Sql.UnitTests.FirewallRule.FirewallRuleDeleteCommandTests.Command_HasCorrectMetadata [\u003C 1 ms]\n2025-11-10T16:05:20.7211830Z Passed Azure.Mcp.Tools.Sql.UnitTests.Database.DatabaseUpdateCommandTests.ExecuteAsync_HandlesAuthorizationFailure [1 ms]\n2025-11-10T16:05:20.7610790Z Passed Azure.Mcp.Tools.Sql.UnitTests.FirewallRule.FirewallRuleDeleteCommandTests.ExecuteAsync_VerifiesResultContainsExpectedData [1 ms]\n2025-11-10T16:05:20.7853810Z Passed Azure.Mcp.Tools.Sql.UnitTests.Database.DatabaseUpdateCommandTests.ExecuteAsync_WithValidParameters_UpdatesDatabase [2 ms]\n2025-11-10T16:05:20.8109400Z Passed Azure.Mcp.Tools.Sql.UnitTests.FirewallRule.FirewallRuleDeleteCommandTests.ExecuteAsync_Handles404Error [2 ms]\n2025-11-10T16:05:20.8335710Z [xUnit.net 00:00:10.16] Finished: Azure.Mcp.Tools.Sql.UnitTests\n2025-11-10T16:05:20.8447470Z Starting test execution, please wait...\n2025-11-10T16:05:20.8707350Z Passed Azure.Mcp.Tools.Sql.UnitTests.Database.DatabaseUpdateCommandTests.ExecuteAsync_UpdateFromStandardToBasic_Succeeds [2 ms]\n2025-11-10T16:05:20.8805320Z Passed Azure.Mcp.Tools.Sql.UnitTests.FirewallRule.FirewallRuleDeleteCommandTests.ExecuteAsync_CallsServiceWithCorrectParameters [1 ms]\n2025-11-10T16:05:20.9427750Z Passed Azure.Mcp.Tools.Sql.UnitTests.Database.DatabaseUpdateCommandTests.Constructor_InitializesCommandCorrectly [\u003C 1 ms]\n2025-11-10T16:05:20.9695020Z Passed Azure.Mcp.Tools.Sql.UnitTests.Database.DatabaseUpdateCommandTests.ExecuteAsync_UpdateFromBasicToStandard_Succeeds [2 ms]", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-SQL", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/1120" + }, + { + "IssueNumber": 1142, + "Title": "Calls to \u0060loadtesting_testrun_create\u0060 always end with a timeout, but typically succeed", + "Body": "\u0022GitHub Copilot Load Test Run - 2025-11-11\u0022,\n \u0022virtualUsers\u0022: 0,\n \u0022status\u0022: \u0022EXECUTING\u0022,\n \u0022startDateTime\u0022: \u00222025-11-11T18:10:17.689\u002B00:00\u0022,\n \u0022endDateTime\u0022: null,\n \u0022executedDateTime\u0022: \u00222025-11-11T18:10:12.669\u002B00:00\u0022,\n \u0022portalUrl\u0022: \u0022https://portal.azure.com/#blade/Microsoft_Azure_CloudNativeTesting/TestRunReport.ReactView//resourceId/%2fsubscriptions%2fcda6aeab-6dec-4567-a4d8-3770583a13f0%2fresourcegroups%2frg-ignite-github-agentic-azure%2fproviders%2fmicrosoft.loadtestservice%2floadtests%2foctocat-supply-loadtest/testId/octocat-api-github-copilot-test/testRunId/run-20251111-180957\u0022,\n \u0022duration\u0022: 0,\n \u0022createdDateTime\u0022: \u00222025-11-11T18:10:15.192\u002B00:00\u0022,\n \u0022createdBy\u0022: \u0022\u0022,\n \u0022lastModifiedDateTime\u0022: \u00222025-11-11T18:10:43.173\u002B00:00\u0022,\n \u0022lastModifiedBy\u0022: \u0022\u0022,\n \u0022description\u0022: \u0022Load test run triggered by GitHub Copilot using Azure MCP tools\u0022,\n \u0022testResult\u0022: \u0022NOT_APPLICABLE\u0022\n }\n },\n \u0022duration\u0022: 0\n}\n\u0060\u0060\u0060\n\n\u003Cimg width=\u00221450\u0022 height=\u00222745\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/a10d3ac5-9a8e-43e1-bc01-8c9dedf7c2f4\u0022 /\u003E\n\n### Reproduction Steps\n\nrun the azure load testing tool \u0027loadtesting_testrun_create\u0027 to kick off a test run for the existing test\n\n### Environment\n\nVS Code Insiders or Copilot Coding Agent (now Copilot Cloud Agent)", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-LoadTesting", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/1142" + }, + { + "IssueNumber": 1279, + "Title": "Migrate Azure.Mcp.Tools.AzureIsv.LiveTests LiveTests to Recorded Tests", + "Body": "Title: Migrate Azure.Mcp.Tools.AzureIsv.LiveTests LiveTests to Recorded Tests\n\nMigrate tests within tools/Azure.Mcp.Tools.AzureIsv/tests/Azure.Mcp.Tools.AzureIsv.LiveTests/Azure.Mcp.Tools.AzureIsv.LiveTests.csproj to recordings. Utilize copilot to assist with the migration process for Azure.Mcp.Tools.AzureIsv.LiveTests.\r\n - For additional guidance check [the recorded tests document](https://github.com/microsoft/mcp/blob/main/docs/recorded-tests.md)\r\n\r\nThis task will be considered complete when the livetests can be invoked without the presence of a .testsettings.json file.\r\n\r\nSubmit a PR with your change and verify that the recorded tests are running in the [recorded test step](https://dev.azure.com/azure-sdk/internal/_build/results?buildId=5627747\u0026view=logs\u0026jobId=1e679852-4871-5dae-dd38-eb073eb853d4\u0026j=1e679852-4871-5dae-dd38-eb073eb853d4\u0026t=2f22000c-4a69-5b6e-fbac-d06c3b6f57da)", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-ISV", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/1279" + }, + { + "IssueNumber": 1300, + "Title": "Migrate Azure.Mcp.Tools.Speech.LiveTests LiveTests to Recorded Tests", + "Body": "Title: Migrate Azure.Mcp.Tools.Speech.LiveTests LiveTests to Recorded Tests\n\nMigrate tests within tools/Azure.Mcp.Tools.Speech/tests/Azure.Mcp.Tools.Speech.LiveTests/Azure.Mcp.Tools.Speech.LiveTests.csproj to recordings. Utilize copilot to assist with the migration process for Azure.Mcp.Tools.Speech.LiveTests.\r\n - For additional guidance check [the recorded tests document](https://github.com/microsoft/mcp/blob/main/docs/recorded-tests.md)\r\n\r\nThis task will be considered complete when the livetests can be invoked without the presence of a .testsettings.json file.\r\n\r\nSubmit a PR with your change and verify that the recorded tests are running in the [recorded test step](https://dev.azure.com/azure-sdk/internal/_build/results?buildId=5627747\u0026view=logs\u0026jobId=1e679852-4871-5dae-dd38-eb073eb853d4\u0026j=1e679852-4871-5dae-dd38-eb073eb853d4\u0026t=2f22000c-4a69-5b6e-fbac-d06c3b6f57da)", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Speech", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/1300" + }, + { + "IssueNumber": 133, + "Title": "[ONBOARD] Azure SQL Server MCP commands", + "Body": "Title: [ONBOARD] Azure SQL Server MCP commands\n\n### Service / Tool Name\n\nAzure SQL server\n\n### Contacts\n\nNA\n\n### Intended Agent Scenarios\n\nIntegrate Azure SQL server with Azure MCP\n\n### Timeline\n\nEnd of August 2025", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-SQL", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/133" + }, + { + "IssueNumber": 138, + "Title": "CosmosDB Query: JSON Parsing Error with utf8Json Parameter", + "Body": "another client, which returned:\n\u0060\u0060\u0060json\n[\n {\n \u0022Count\u0022: 7686\n }\n]\n\u0060\u0060\u0060\n\n### Environment Information\n- OS: Windows\n- VS Code Version: Latest\n- Azure MCP Extension Version: Latest\n- CosmosDB: Azure CosmosDB instance\n\n### Additional Context\n- I\u0027m able to successfully retrieve secrets from Key Vault using the Azure MCP extension\n- I can connect to the same CosmosDB instance using other tools with the same connection string\n- Even after VS Code restart, the issue persists\n- The error seems to be related to JSON parsing rather than permission issues\n\nThis appears to be a bug in how the Azure MCP extension handles the JSON response from CosmosDB queries, especially when using connection string authentication.\n\n---", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-CosmosDB", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/138" + }, + { + "IssueNumber": 340, + "Title": "MCP-Native@0.5.8-alpha.5259970 server is missing \u0060azmcp_cosmos_account_list\u0060 tool", + "Body": "Title: MCP-Native@0.5.8-alpha.5259970 server is missing \u0060azmcp_cosmos_account_list\u0060 tool\n\n**Description:**\nDuring testing of \u0060MCP-Native@0.5.8-alpha.5259970\u0060, the tool list no longer includes \u0060azmcp_cosmos_account_list\u0060.\n\u003Cimg width=\u0022606\u0022 height=\u0022447\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/391b6af6-1391-4285-80d8-b66c923c413d\u0022 /\u003E\n\n**Steps to Reproduce:**\n1. Connect to [Feed](https://dev.azure.com/azure-sdk/public/_artifacts/feed/azure-sdk-for-js/Npm/@azure%2Fmcp-native/overview/0.5.8-alpha.5259970) then running \u0060npm install @azure/mcp-native@0.5.8-alpha.5259970\u0060.\n2. Run \u0060az login\u0060.\n3. Configure MCP server in all mode using the newly downloaded azmcp.exe.\n4. Start mcp server.\n5. Open GitHub Copilot in VS Code Insiders and [switch to Agent mode](https://code.visualstudio.com/docs/copilot/chat/chat-agent-mode).\n6. Click Refresh on the tools list, and only select the configured MCP Server Tools.\n\n**Environment:**\n- OS: Windows.\n- Vscode Insiders Version: 1.104.0\n- GitHub Copilot Chat Version: 0.31.2025090302\n- Large Language Model: GPT-4.1\n\n**Expected Behavior:**\n The tool list includes \u0060azmcp_cosmos_account_list\u0060.\n\n@joshfree for notification", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-CosmosDB", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/340" + }, + { + "IssueNumber": 399, + "Title": "Add Java maven package for Azure MCP", + "Body": "Title: Add Java maven package for Azure MCP\n\nTracking issue to add a Java mvnrepository package for Azure MCP Server", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Setup", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/399" + }, + { + "IssueNumber": 215, + "Title": "MQ: Foundry quotas are breaking live test deployment", + "Body": "Title: MQ: Foundry quotas are breaking live test deployment\n\nWe need to start clearing our soft deletes from cognitive services resources.\n\nI believe there\u0027s already some logic in eng/common\u0027s resource deployment scripts that handle removing soft deleted key vaults. Maybe this can be extended to also clear foundry resources", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Foundry", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/215" + }, + { + "IssueNumber": 233, + "Title": "[ONBOARD] Azure SignalR Service and Azure Web PubSub Service", + "Body": "Title: [ONBOARD] Azure SignalR Service and Azure Web PubSub Service\n\n### Service / Tool Name\n\nAzure.SignalR and Azure.WebPubSub\n\n### Contacts\n\nHaofan Liao(haofanliao)\n\n### Intended Agent Scenarios\n\nShared for Azure SignalR Service and Azure WebPubSub Service\n- custom-certificate\n - list\n - show\n- custom-domain\n - list\n - show\n- identity\n - show\n- key\n - list\n- network-rule\n - list\n- replica\n - list\n - show\n- general\n - list\n - show\n\nAzure SignalR Service only\n- cors\n - list\n- upstream\n - list\n\nAzure WebPubSub Service only\n- hub\n - list\n - show\n- service\n - exist\n - permission check\n - user exist\n\n\nPriority description:\nPriority 1: No harm to resource usage, and applies to frequently used REST APIs shared by both SignalR and Web PubSub services.\n\nPriority 2: No harm to resource usage, and applies to less commonly used APIs shared by both SignalR and Web PubSub services.\n\nPriority 3: No harm to resource usage, and applies only to APIs specific to one service kind.\n\n\nFuture plan: \nPriority 4: Involves control plane creation or updates to help customers automatically configure services. These actions may cause harm if the AI does not behave as expected.\n\nPriority 5: Involves data plane operations, aiming to enable Azure MCP to fully manage customers\u0027 usage scenarios end-to-end.\n\n### Timeline\n\nTBD", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-SignalR, tools-WebPubSub", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/233" + }, + { + "IssueNumber": 237, + "Title": "[Remote] How to deploy this MCP server and get the HTTP link?", + "Body": "Title: [Remote] How to deploy this MCP server and get the HTTP link?\n\n## Question\n\nI would like to understand how to deploy this MCP (Model Context Protocol) server and obtain the HTTP link for accessing it.\n\n## Details\n\nCould you please provide guidance on:\n\n1. **Deployment Options**: What are the available methods to deploy this MCP server?\n - Local deployment\n - Cloud deployment (Azure, AWS, etc.)\n - Container deployment (Docker)\n - Any other supported deployment methods\n\n2. **Configuration**: What configuration steps are required before deployment?\n - Environment variables\n - Dependencies\n - Authentication/authorization setup\n\n3. **HTTP Endpoint**: How do I obtain the HTTP link/URL after successful deployment?\n - What port does the server run on by default?\n - How to configure custom domains or endpoints?\n - Are there any specific URL patterns or endpoints I should know about?\n\n4. **Documentation**: Are there any deployment guides, tutorials, or examples available?\n\n## Use Case\n\nI need to deploy this MCP server to integrate it with my application and require the HTTP endpoint for API calls.\n\n## Additional Context\n\nPlease include any prerequisites, common issues during deployment, or best practices for production deployment.\n\nThank you!", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "remote-mcp", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/237" + }, + { + "IssueNumber": 252, + "Title": "[Tool Description] Improve Key Vault tool description for better LLM selection", + "Body": "Title: [Tool Description] Improve Key Vault tool description for better LLM selection\n\n## Problem\r\n\r\nThe current Key Vault tool description lacks the detail and clarity needed for optimal LLM tool selection, resulting in an estimated confidence score of ~0.15 (well below target of \u22650.5).\r\n\r\n**Current Description Issues:**\r\n- Extremely vague purpose (\u0022managing and accessing\u0022)\r\n- Missing context about what Key Vault stores (secrets, keys, certificates)\r\n- No usage guidance (when to use vs when not to use)\r\n- Poor parameter explanation\r\n- Missing security and access control context\r\n- Formatting issues (missing space after period)\r\n- Too brief for a security-critical service\r\n\r\n## Current Description\r\n\u0060\u0060\u0060\r\nKey Vault operations - Commands for managing and accessing Azure Key Vault resources.This tool is a hierarchical MCP command router. Sub commands are routed to MCP servers that require specific fields inside the \u0022parameters\u0022 object. To invoke a command, set \u0022command\u0022 and wrap its args in \u0022parameters\u0022. Set \u0022learn=true\u0022 to discover available sub commands.\r\n\u0060\u0060\u0060\r\n\r\n## Suggested Improvement\r\n\u0060\u0060\u0060\r\nKey Vault operations - Commands for managing and accessing Azure Key Vault instances and their stored secrets, keys, and certificates for secure credential and cryptographic key management. Use this tool when you need to list Key Vault instances, retrieve secret values, manage certificates, access cryptographic keys, or configure Key Vault access policies and settings. This tool handles secure storage operations for application secrets, connection strings, API keys, and certificates. Do not use this tool for Azure Active Directory operations, resource management unrelated to Key Vault, or storing non-sensitive configuration data - use App Configuration for non-sensitive settings instead. This tool is a hierarchical MCP command router where sub-commands are routed to MCP servers that require specific fields inside the \u0022parameters\u0022 object. To invoke a command, set \u0022command\u0022 and wrap its arguments in \u0022parameters\u0022. Set \u0022learn=true\u0022 to discover available sub-commands for different Key Vault operations.", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-KeyVault", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/252" + }, + { + "IssueNumber": 263, + "Title": "[Tool Description] Improve Workbooks tool description for better LLM selection", + "Body": "Title: [Tool Description] Improve Workbooks tool description for better LLM selection\n\n## Problem\r\n\r\nThe current Workbooks tool description is functional but lacks the detail and clarity needed for optimal LLM tool selection. Estimated confidence score of ~0.5 (at target but could be improved for better precision).\r\n\r\n**Current Description Issues:**\r\n- Missing usage guidance (when to use vs when not to use)\r\n- Limited context about Azure Workbooks vs other visualization tools\r\n- Poor parameter explanation\r\n- Missing relationship to Azure Monitor and Application Insights\r\n- Formatting issues (missing space after period)\r\n- No mention of data sources or integration capabilities\r\n\r\n## Current Description\r\n\u0060\u0060\u0060\r\nWorkbooks operations - Commands for managing Azure Workbooks resources and interactive data visualization dashboards. Includes operations for listing, creating, updating, and deleting workbooks, as well as managing workbook configurations and content.This tool is a hierarchical MCP command router. Sub commands are routed to MCP servers that require specific fields inside the \u0022parameters\u0022 object. To invoke a command, set \u0022command\u0022 and wrap its args in \u0022parameters\u0022. Set \u0022learn=true\u0022 to discover available sub commands.\r\n\u0060\u0060\u0060\r\n\r\n## Suggested Improvement\r\n\u0060\u0060\u0060\r\nWorkbooks operations - Commands for managing Azure Workbooks for creating interactive data visualization dashboards and reports that combine Azure Monitor data, Application Insights telemetry, and other Azure data sources. Use this tool when you need to list existing workbooks, create new interactive dashboards, update workbook content and visualizations, delete workbooks, or manage workbook configurations for monitoring and reporting scenarios. This tool supports creating rich, interactive reports for observability, troubleshooting, and business intelligence using Azure data sources. Do not use this tool for Azure Managed Grafana operations, Power BI report management, raw data queries, or managing the underlying data sources themselves - this tool focuses on workbook dashboard creation and management rather than data collection or external visualization platforms.", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Workbooks", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/263" + }, + { + "IssueNumber": 280, + "Title": "Can only view/query AzureDiagnostics table", + "Body": "Title: Can only view/query AzureDiagnostics table\n\nHello,\n\nI am using the provided dotnet sample code to talk to my Azure enviornment using Azure MCP Server and gpt 4o via Azure AI Foundry.\n\nI was expecting the Azure Monitor tool to have access to all my log analytics workspace tables. But when I ask it to list tables it shows the following output.\n\n\u003Cimg width=\u00221111\u0022 height=\u0022149\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/02386b6d-43e8-4855-add8-965967d6b597\u0022 /\u003E\n\nThis means I cannot query anything that exist in the other tables like exceptions. Is this is how it it is supposed to work for now or am I missing something?\n\nFor the record I have all the following tables in my workspace \n\n\u003Cimg width=\u0022260\u0022 height=\u0022998\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/2072ad0c-9e17-4bd1-b565-becf8cba29e8\u0022 /\u003E", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Monitor", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/280" + }, + { + "IssueNumber": 333, + "Title": "[Single Mode/MCP-Native@0.5.8-alpha.5259970] \u0060Key Vault Service Test\u0060 failed to correctly trigger tool invocation", + "Body": "Title: [Single Mode/MCP-Native@0.5.8-alpha.5259970] \u0060Key Vault Service Test\u0060 failed to correctly trigger tool invocation\n\n**Description:**\nDuring testing of \u0060MCP-Native@0.5.8-alpha.5259970\u0060 in **Single** mode, key vault service scenarios (such as listing all secrets, List all keys) failed to trigger corresponding tool responses. Some test prompts fail intermittently rather than every time. The specific failure rates are as follows:\n\n- Test prompt: \u0060List all keys in the key vault \u0022mhkey\u0022 in my Subscription\u0060 (**Tested five times, failed three times**):\n\u003Cimg width=\u0022683\u0022 height=\u0022757\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/30625155-229e-44a2-a773-fe3d329223db\u0022 /\u003E\n\n- Test prompt: \u0060List all secrets in the key vault \u0022mhkey\u0022 in my Subscription\u0060:\n\u003Cimg width=\u0022689\u0022 height=\u0022749\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/05feecd9-400f-404e-a8fa-cbe196264e76\u0022 /\u003E\n\n**Steps to Reproduce:**\n1. Connect to [Feed](https://dev.azure.com/azure-sdk/public/_artifacts/feed/azure-sdk-for-js/Npm/@azure%2Fmcp-native/overview/0.5.8-alpha.5259970) then running \u0060npm install @azure/mcp-native@0.5.8-alpha.5259970\u0060.\n2. Run \u0060az login\u0060.\n4. Configure MCP server in single mode using the newly downloaded azmcp.exe.\n5. Start mcp server.\n6. Open GitHub Copilot in VS Code Insiders and [switch to Agent mode](https://code.visualstudio.com/docs/copilot/chat/chat-agent-mode).\n7. Click Refresh on the tools list, and only select the configured MCP Server Tools.\n8. Enter test prompts.\n\n**Environment:**\n- OS: Windows.\n- Vscode Insiders Version: 1.104.0\n- GitHub Copilot Chat Version: 0.31.2025090302\n- Large Language Model: GPT-4.1\n\n**Expected Behavior:**\nIn the single mode of MCP-Native@0.5.8-alpha.5259970, all keyvault service-related operations can stably and correctly trigger the expected tool operations.\n\n@joshfree for notification", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-KeyVault", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/333" + }, + { + "IssueNumber": 1015, + "Title": "[BUG] Test failure: Azure.Mcp.Tools.Storage.LiveTests.StorageCommandTests.Should_get_storage_account_details_with_tenant_id", + "Body": "Title: [BUG] Test failure: Azure.Mcp.Tools.Storage.LiveTests.StorageCommandTests.Should_get_storage_account_details_with_tenant_id\n\n### Describe the bug\n\nAzure.Mcp.Tools.Storage.LiveTests.StorageCommandTests.Should_get_storage_account_details_with_tenant_id failed on CI run: https://dev.azure.com/azure-sdk/internal/_build/results?buildId=5517730\u0026view=logs\u0026j=f80529f7-3141-5a7c-1318-ce272a356f71\u0026t=e61a875e-6c8b-5a5e-9c1d-40c120a7a748\n\nTest failure:\n\u0060\u0060\u0060\nFailed Azure.Mcp.Tools.Storage.LiveTests.StorageCommandTests.Should_get_storage_account_details_with_tenant_id [5 s]\n Error Message:\n Property \u0027accounts\u0027 not found. Full element: \u0027{\u0022message\u0022:\u0022Error retrieving Storage account details for \\u0027t7a158779419d4dde\\u0027: Storage account \\u0027t7a158779419d4dde\\u0027 not found in subscription \\u0027Azure SDK Test Resources - TME\\u0027.\u0022,\u0022stackTrace\u0022:\u0022 at Azure.Mcp.Tools.Storage.Services.StorageService.GetAccountDetails(String account, String subscription, String tenant, RetryPolicyOptions retryPolicy, CancellationToken cancellationToken) in /mnt/vss/_work/1/s/tools/Azure.Mcp.Tools.Storage/src/Services/StorageService.cs:line 87\\n at Azure.Mcp.Tools.Storage.Commands.Account.AccountGetCommand.ExecuteAsync(CommandContext context, ParseResult parseResult) in /mnt/vss/_work/1/s/tools/Azure.Mcp.Tools.Storage/src/Commands/Account/AccountGetCommand.cs:line 71\u0022,\u0022type\u0022:\u0022Exception\u0022}\u0027\n Stack Trace:\n at Azure.Mcp.Tests.TestExtensions.AssertProperty(JsonElement element, String propertyName) in /mnt/vss/_work/1/s/core/Azure.Mcp.Core/tests/Azure.Mcp.Tests/TestExtensions.cs:line 37\n at Azure.Mcp.Tests.TestExtensions.AssertProperty(Nullable\u00601 element, String propertyName) in /mnt/vss/_work/1/s/core/Azure.Mcp.Core/tests/Azure.Mcp.Tests/TestExtensions.cs:line 33\n at Azure.Mcp.Tools.Storage.LiveTests.StorageCommandTests.Should_get_storage_account_details_with_tenant_id() in /mnt/vss/_work/1/s/tools/Azure.Mcp.Tools.Storage/tests/Azure.Mcp.Tools.Storage.LiveTests/StorageCommandTests.cs:line 95\n--- End of stack trace from previous location ---\n Standard Output Messages:\n MCP client initialized successfully", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Storage", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/1015" + }, + { + "IssueNumber": 1021, + "Title": "Update command: \u0060azmcp speech stt recognize\u0060 with Fast Transcription", + "Body": "Title: Update command: \u0060azmcp speech stt recognize\u0060 with Fast Transcription\n\nBefore \u0060azmcp speech stt recognize\u0060 uses Realtime Transcription for speech recognition. This issue is to support both Fast Transcription and Realtime Transcription with the below branching logic:\n\n\u003Cimg width=\u0022465\u0022 height=\u0022558\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/faf9feb5-d49e-4546-9c80-e9308c088bc4\u0022 /\u003E", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Speech", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/1021" + }, + { + "IssueNumber": 1102, + "Title": "[BUG] Azure CLI - print docs and exit with 1?", + "Body": "Title: [BUG] Azure CLI - print docs and exit with 1?\n\n### Describe the bug\n\nIf I\u0027m asking for the help instructions \u0060tools list --help\u0060 why is the exit code 1. It is successfully doing what I asked it to do. \n\n### Expected behavior\n\nExit code 0 (no errors)\n\n### Actual behavior\n\ndotnet run --no-build -- tools list --help \nEXIT_CODE=$?\necho \u0022Exit code: $EXIT_CODE\u0022\nDescription:\n List all available commands and their tools in a hierarchical structure. This command returns \n detailed information\n about each command, including its name, description, full command path, available subcommands, and \n all supported\n arguments. Use this to explore the CLI\u0027s functionality or to build interactive command interfaces.\n\nUsage:\n azmcp tools list [options]\n\nOptions:\n --namespaces If specified, returns a list of top-level service namespaces instead of individual \n tools.\n -?, -h, --help Show help and usage information\n\nExit code: 1\n\n### Reproduction Steps\n\nmcp/servers/Azure.Mcp.Server/src\u003E dotnet run --no-build -- tools list --help \n\nexit code 1\n\n\n### Environment\n\nwindows host with devcontainer", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Core", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/1102" + }, + { + "IssueNumber": 1276, + "Title": "Migrate Azure.Mcp.Tools.AppConfig.LiveTests LiveTests to Recorded Tests", + "Body": "Title: Migrate Azure.Mcp.Tools.AppConfig.LiveTests LiveTests to Recorded Tests\n\nMigrate tests within tools/Azure.Mcp.Tools.AppConfig/tests/Azure.Mcp.Tools.AppConfig.LiveTests/Azure.Mcp.Tools.AppConfig.LiveTests.csproj to recordings. Utilize copilot to assist with the migration process for Azure.Mcp.Tools.AppConfig.LiveTests.\r\n - For additional guidance check [the recorded tests document](https://github.com/microsoft/mcp/blob/main/docs/recorded-tests.md)\r\n\r\nThis task will be considered complete when the livetests can be invoked without the presence of a .testsettings.json file.\r\n\r\nSubmit a PR with your change and verify that the recorded tests are running in the [recorded test step](https://dev.azure.com/azure-sdk/internal/_build/results?buildId=5627747\u0026view=logs\u0026jobId=1e679852-4871-5dae-dd38-eb073eb853d4\u0026j=1e679852-4871-5dae-dd38-eb073eb853d4\u0026t=2f22000c-4a69-5b6e-fbac-d06c3b6f57da)", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-AppConfig", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/1276" + }, + { + "IssueNumber": 128, + "Title": "TSG/Docs: How to change account or tenant?", + "Body": "Title: TSG/Docs: How to change account or tenant?\n\nI would like to change to another tenant or another account, how could I make it? I tried to logout in web and logout az in terminal while the mcp is still working with previous account.", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Auth", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/128" + }, + { + "IssueNumber": 1283, + "Title": "Migrate Azure.Mcp.Tools.Deploy.LiveTests LiveTests to Recorded Tests", + "Body": "Title: Migrate Azure.Mcp.Tools.Deploy.LiveTests LiveTests to Recorded Tests\n\nMigrate tests within tools/Azure.Mcp.Tools.Deploy/tests/Azure.Mcp.Tools.Deploy.LiveTests/Azure.Mcp.Tools.Deploy.LiveTests.csproj to recordings. Utilize copilot to assist with the migration process for Azure.Mcp.Tools.Deploy.LiveTests.\r\n - For additional guidance check [the recorded tests document](https://github.com/microsoft/mcp/blob/main/docs/recorded-tests.md)\r\n\r\nThis task will be considered complete when the livetests can be invoked without the presence of a .testsettings.json file.\r\n\r\nSubmit a PR with your change and verify that the recorded tests are running in the [recorded test step](https://dev.azure.com/azure-sdk/internal/_build/results?buildId=5627747\u0026view=logs\u0026jobId=1e679852-4871-5dae-dd38-eb073eb853d4\u0026j=1e679852-4871-5dae-dd38-eb073eb853d4\u0026t=2f22000c-4a69-5b6e-fbac-d06c3b6f57da)", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Deploy", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/1283" + }, + { + "IssueNumber": 1350, + "Title": "Add azmcp azuremanagedlustre filesystem autoimport-job list", + "Body": "Title: Add azmcp azuremanagedlustre filesystem autoimport-job list\n\nAdd azmcp azuremanagedlustre filesystem autoimport-job list", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-managedlustre", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/1350" + }, + { + "IssueNumber": 338, + "Title": "[Single/Namespace/All Mode] The Bicep Schema test failed to trigger the corresponding tool operation for MCP-Native@0.5.8-alpha.5259970", + "Body": "Title: [Single/Namespace/All Mode] The Bicep Schema test failed to trigger the corresponding tool operation for MCP-Native@0.5.8-alpha.5259970\n\n**Description:**\nDuring testing of \u0060MCP-Native@0.5.8-alpha.5259970\u0060 in Single, Namespace, and All modes, the Bicep Schema test prompt \u0060How can I use Bicep to create an Azure OpenAI service?\u0060 did not trigger the corresponding tool as expected. The response details in all three modes are as follows:\n\u003Cimg width=\u0022671\u0022 height=\u0022756\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/e4db4133-e7d9-40c1-8ca1-4e94077d8bf4\u0022 /\u003E\n\n**Steps to Reproduce:**\n1. Connect to [Feed](https://dev.azure.com/azure-sdk/public/_artifacts/feed/azure-sdk-for-js/Npm/@azure%2Fmcp-native/overview/0.5.8-alpha.5259970) then running \u0060npm install @azure/mcp-native@0.5.8-alpha.5259970\u0060.\n2. Run \u0060az login\u0060.\n4. Configure MCP server in single/all/namespace mode using the newly downloaded azmcp.exe.\n5. Start mcp server.\n6. Open GitHub Copilot in VS Code Insiders and [switch to Agent mode](https://code.visualstudio.com/docs/copilot/chat/chat-agent-mode).\n7. Click Refresh on the tools list, and only select the configured MCP Server Tools.\n8. Enter test prompts.\n\n**Environment:**\n- OS: Windows.\n- VsCode Insiders Version: 1.104.0\n- GitHub Copilot Chat Version: 0.31.2025090302\n- Large Language Model: GPT-4.1\n\n**Expected Behavior:**\nThe prompt should successfully trigger the tool \u0060azmcp_bicepschema_get\u0060.\n\n@joshfree for notification", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-bicep", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/338" + }, + { + "IssueNumber": 401, + "Title": "Github copilot Agent Mode with Azure MCP always prompting to login using az login even though i have logged into terminal", + "Body": "Title: Github copilot Agent Mode with Azure MCP always prompting to login using az login even though i have logged into terminal\n\n\u003Cimg width=\u0022720\u0022 height=\u0022439\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/16b13c6e-827f-444c-845d-cc0c4e77968f\u0022 /\u003E\n\n\u003Cimg width=\u0022720\u0022 height=\u0022439\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/91e22918-eb45-4f77-97e0-03773ff9b37c\u0022 /\u003E", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Auth", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/401" + }, + { + "IssueNumber": 421, + "Title": "Docker Build Pipeline Fails on missing azmcp.dll", + "Body": "Title: Docker Build Pipeline Fails on missing azmcp.dll\n\nWith v0.6.0, the docker publishing pipeline fails due to coreclr\u002Btrimming no longer creating azmcp.dll", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Docker", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/421" + }, + { + "IssueNumber": 428, + "Title": "subscription list tools generate responses that are too large for claude code", + "Body": "Title: subscription list tools generate responses that are too large for claude code\n\nUsing Azure MCP in Claude Code I ran into a limitation - claude only allows 25,000 tokens from tool responses.\n\nI\u0027m not sure why the subscription_list tool returned 44,221 tokens (all my subs?), but we may want to add an azmcp argument to limit the number of tokens (should probably use characters/words so we don\u0027t have to tokenize).\n\nHere\u0027s the error:\n\n\u003E(.venv) charris@CHARRIS02:~/git/zava-photos$ claude\n\u256D\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256E\n\u2502 \u273B Welcome to Claude Code! \u2502\n\u2502 \u2502\n\u2502 /help for help, /status for your current setup \u2502\n\u2502 \u2502\n\u2502 cwd: /home/charris/git/zava-photos \u2502\n\u2570\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256F\n\u003E\n\u003E what is my azure subscription?\n\u003E\n\u003E\u25CF I\u0027ll check your Azure subscription using the Azure CLI.\n\u003E\n\u003E\u25CF azure-mcp - Azure CLI Command (MCP)(command: \u0022account show\u0022)\n\u003E \u23BF \u00A0No (tell Claude what to do differently)\n\u003E\n\u003E isn\u0027t there a subscription tool?\n\u003E\n\u003E\u25CF Yes, you\u0027re right! Let me use the Azure subscription tool to list your subscriptions.\n\u003E\n\u003E\u25CF azure-mcp - subscription (MCP)(intent: \u0022list my azure subscriptions\u0022, command: \u0022list\u0022, parameters: {})\n \u23BF Here are the available command and their parameters for \u0027subscription\u0027 tool.\n If you do not find a suitable command, run again with the \u0022learn=true\u0022 to get a list of available commands and thei\n r parameters.\n \u2026 \u002B55 lines (ctrl\u002Br to expand)\n\n\u003E\n\u003E\u25CF azure-mcp - subscription (MCP)(intent: \u0022list my azure subscriptions\u0022, command: \u0022subscription_list\u0022, parameters: {})\n \u23BF \u00A0Error: MCP tool \u0022subscription\u0022 response (44221 tokens) exceeds maximum allowed tokens (25000). Please use pagination,\n filtering, or limit parameters to reduce the response size.\n\u003E\n\u003E\u25CF The response is too large. Let me try a more direct approach with the Azure CLI to get just the current subscription:", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-ARM, tools-AzCLI", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/428" + }, + { + "IssueNumber": 435, + "Title": "[Remote] Add On-Behalf-Of (OBO) support", + "Body": "Title: [Remote] Add On-Behalf-Of (OBO) support\n\nWould be great if the auth supports OBO token from the end user, so that the MCP server makes sure only resources the end user has access to accessed.", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "remote-mcp", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/435" + }, + { + "IssueNumber": 502, + "Title": "[BUG] azmcp - Missing best practices", + "Body": "Title: [BUG] azmcp - Missing best practices\n\n### Describe the bug\n\nWhile deploying an app via CLI tools, azmcp did not provide all necessary best practices\n**Deployment**\n- Before deploying applications to Azure, always test new Docker images locally to make sure they work first if Docker is available.\n- When deploying to Azure Container Apps, always make sure the target port and the listening port in the application code match.\n- When deploying to Azure, if the deployment returns a URL for the deployed application, always test the URL and provide it to the user along a link to the resource group in the Azure portal.\n\n**IaC**\n- When configuring infra-as-code for Azure Key Vault, DO NOT disable purge protection.\n- When configuring infra-as-code for Container Registry, DO NOT enable anonymous pull access.\n- When configuring infra-as-code for Azure resources, ALWAYS use the latest API version available.\n\n### Expected behavior\n\nazmcp provides the necessary best practices so applications are configure properly and validated prior to deployment.\n\nazmcp provides necessary best practices so IaC files can be deployed without errors.\n\n### Actual behavior\n\nCLI tool ran into deployment issues repeatedly until I manually added the best practices to my instructions files.\n\n### Reproduction Steps\n\nPrompt to build the app: Zava needs a simple, but modern site that lets employees quickly share photos of various projects they are working on. I want to build the site in flask.\n\nPrompt to deploy the app: let\u0027s deploy this to azure container apps in east us.\n\n### Environment\n\nCLI tools \u002B Azure MCP", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-BestPractices", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/502" + }, + { + "IssueNumber": 157, + "Title": "Asking MCP a simple query on LAW, and I got error in the API request - Fields doesn\u0027t exists", + "Body": "Title: Asking MCP a simple query on LAW, and I got error in the API request - Fields doesn\u0027t exists\n\nHi,\nI tried to use Azure MCP to summerize Alerts I got on Log Analytics Workspace,\nIt creates the wrong Json to ask (It retries 10 times, and give up)\nThe last API call is:\n\n{\n \u0022auth-method\u0022: \u0022credential\u0022,\n \u0022hours\u0022: \u0022240\u0022,\n \u0022query\u0022: \u0022AzureDiagnostics | where Resource contains \\\u0022yada-yada-prod\\\u0022 and Category == \\\u0022Alert\\\u0022 and TimeGenerated \u003E ago(10d) | project TimeGenerated, Resource, ResourceGroup, AlertName_s, Severity_s, MonitorCondition_s, Description_s\u0022,\n \u0022resource-group\u0022: \u0022Yada-Yada-Yada-law\u0022,\n \u0022subscription\u0022: \u0022Yada-Yada-Sub\u0022,\n \u0022table-name\u0022: \u0022AzureDiagnostics\u0022,\n \u0022workspace\u0022: \u0022Yada-Yada-Yada-law\u0022\n}\n\n\nNot sure why it creates the query like that, when it suppose to create the query,\n\nThe problematic properties are\n\nAlertName_s, Severity_s, MonitorCondition_s, Description_s\n\nhow can I make him understand in order to create a valid request", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Monitor", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/157" + }, + { + "IssueNumber": 161, + "Title": "CosmosDB Test Fixture should be dynamic and match bicep file", + "Body": "Title: CosmosDB Test Fixture should be dynamic and match bicep file\n\nFor the Cosmos test fixture where we populate the DB with dummy items, we should avoid having hardcoded names. Instead, we should retrieve the name of the DB and Container from a variable to ensure we\u0027re using the same one as the bicep files and post-scripts for the test resources.\n\nSee https://github.com/Azure/azure-mcp/pull/304#discussion_r2138974931", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-CosmosDB", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/161" + }, + { + "IssueNumber": 167, + "Title": "Azure Monitor tools don\u0027t support resource-centric Logs queries", + "Body": "Title: Azure Monitor tools don\u0027t support resource-centric Logs queries\n\nCurrently, the monitor log query tool only supports Azure Monitor workspace. Azure APIs support querying logs through the Azure Resource ID. \n\nThe lack of ability to query through the Azure Resource ID makes the agents have an extremely hard time querying resources like Application Insights logs because it has no way to get to the Application Insights resource\u0027s workspace.\n\nIt would allow much easier query navigation for agents if Azure MCP supported resource-centric query API instead of just workspace-based.\n\nMissing features:\n\n1. Resource-centric support\n2. You can\u0027t query in the past (currently only supports querying from recent time)\n3. We probably want the ability to specific just subscriptionId / resourceName (like in #428) with ability to disambiguate resources based on subscription search.\n4. Ensure we return proper status about the output (is it truncated or complete?) #428 has a way to do this.\n5. Ability to get table schema. Looks like agents don\u0027t have a way to discover what columns are available if they run into problems.", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Monitor", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/167" + }, + { + "IssueNumber": 538, + "Title": "Azure MCP tools have duplicate prefixes", + "Body": "Title: Azure MCP tools have duplicate prefixes\n\n\nType: \u003Cb\u003EBug\u003C/b\u003E\n\nOur tool names in the Copilot chat logs are showing up with a prefix of mcp_azure twice: \u0060mcp_azure_mcp_azmcp_cosmos_database_container_list\u0060\n \nAre we adding one prefix and vs code adding the other or are we adding it twice?\n\nExtension version: 0.8.0\nVS Code version: Code - Insiders 1.105.0-insider (1217722c34017d9bd87e804e80efabba5a1e3226, 2025-09-22T05:02:28.613Z)\nOS version: Windows_NT x64 10.0.26100\nModes:\n\n\u003Cdetails\u003E\n\u003Csummary\u003ESystem Info\u003C/summary\u003E\n\n|Item|Value|\n|---|---|\n|CPUs|13th Gen Intel(R) Core(TM) i9-13900 (32 x 1997)|\n|GPU Status|2d_canvas: enabled\u003Cbr\u003Edirect_rendering_display_compositor: disabled_off_ok\u003Cbr\u003Egpu_compositing: enabled\u003Cbr\u003Emultiple_raster_threads: enabled_on\u003Cbr\u003Eopengl: enabled_on\u003Cbr\u003Erasterization: enabled\u003Cbr\u003Eraw_draw: disabled_off_ok\u003Cbr\u003Eskia_graphite: disabled_off\u003Cbr\u003Etrees_in_viz: disabled_off\u003Cbr\u003Evideo_decode: enabled\u003Cbr\u003Evideo_encode: enabled\u003Cbr\u003Evulkan: disabled_off\u003Cbr\u003Ewebgl: enabled\u003Cbr\u003Ewebgl2: enabled\u003Cbr\u003Ewebgpu: enabled\u003Cbr\u003Ewebnn: disabled_off|\n|Load (avg)|undefined|\n|Memory (System)|63.71GB (30.15GB free)|\n|Process Argv|. --crash-reporter-id b10a8e15-aa71-434e-9fa5-253538d75e78|\n|Screen Reader|no|\n|VM|0%|\n\u003C/details\u003E\u003Cdetails\u003E\n\u003Csummary\u003EA/B Experiments\u003C/summary\u003E\n\n\u0060\u0060\u0060\nvsliv368cf:30146710\npythonvspyt551:31249597\nxtab-275-sd-32:31390499\nnativeloc1:31118317\ndwcopilot:31158714\ndwoutputs:31242946\ncopilot_t_ci:31333650\ng012b348:31231168\n6gi0g917:31259950\n996jf627:31264550\npythonrdcb7:31268811\nusemplatestapi:31297334\n6518g693:31302842\n0g1h6703:31329154\nagentgpt4:31388787\n6abeh943:31336334\nenvsactivate1:31349248\n0ej4-default:31345954\neditstats-enabled:31346256\naa_c:31379597\ncloudbuttont:31366566\naihoversummaries_t:31386667\nghonly:31384271\ntodos-0:31366869\nqwen_model:31384796\nmultireplacestring:31382717\nnb255704_tf:31377673\n3efgi100_wstrepl:31382709\nmetis-embeddings:31382293\nge3cd652:31390471\nnes-rel-path-0:31383037\ntrigger-command-fix:31379601\ncmd-onchange-false:31382212\ngrok-control-prompt:31384642\nuse-responses-api:31390341\ncopilot-gpt-5-mini:31386632\n\n\u0060\u0060\u0060\n\n\u003C/details\u003E\n\n\u003C!-- generated by issue reporter --\u003E", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Core", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/538" + }, + { + "IssueNumber": 590, + "Title": "Align and consolidate the expiration settings across the CacheService", + "Body": "Title: Align and consolidate the expiration settings across the CacheService\n\n## Proposal\n\nCurrently, the expiration settings for each tool are inconsistent. Some tools have no expiration configured at all, resulting in caches that never expire. While others have expiration times set excessively long, which can lead to confusion for users. To address this, I\u2019m proposing a standardized set of expiration settings:\n\n1. Tenant \u2013 12 hours\n Tenant information rarely changes for users, so a 12-hour cache duration provides a good balance between performance and data freshness.\n2. Subscription \u2013 2 hours\n Subscriptions are also relatively stable for most users. A 2-hour expiration helps reduce unnecessary refreshes while keeping the data reasonably up to date.\n3. Authenticated Clients \u2013 15 minutes\n These are more dynamic and may change frequently, so a shorter cache duration of 15 minutes ensures better performance.\n4. Service Data \u2013 No cache or 5 minutes\n This data is critical for user interactions with the MCP tool. Ideally, it should not be cached to avoid latency or stale data issues. However, if caching is necessary to reduce service load, a 5-minute expiration is a reasonable compromise.\n\nThe tool should clearly indicate when data is being served from cache. If users suspect the data is outdated, it should also provide guidance on how to manually refresh the cache.\n\n## Details\n\nHere is the CacheService Usage Summary Across Azure MCP Tools:\n\n1. Azure.Mcp.Tools.Search\n - Cache Groups: \u0022search\u0022\n - What\u0027s Cached:\n - Search services list (1 hour TTL)\n - Search index clients (15 minutes TTL)\n - Cache Keys: Subscription-based and tenant-based keys\n - Usage Pattern: Cache expensive service discovery and client initialization\n2. Azure.Mcp.Tools.Kusto\n - Cache Groups: \u0022kusto\u0022\n - What\u0027s Cached:\n - KustoClient instances for ARM and Data Explorer providers\n - Cache Duration: Uses s_providerCacheDuration\n - Usage Pattern: Cache authenticated client connections to avoid repeated auth\n3. Azure.Mcp.Tools.FunctionApp\n - Cache Groups: \u0022functionapp\u0022\n - What\u0027s Cached:\n - Function app information lists", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Core", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/590" + }, + { + "IssueNumber": 60, + "Title": "[Azure MCP] Add command: azmcp eventhubs namespace get", + "Body": "Title: [Azure MCP] Add command: azmcp eventhubs namespace get\n\n### Service / Tool Name\n\nAzure.Eventhubs.Namespace\n\n### Contacts\n\nJair Myree(jairmyree)\n\n### Intended Agent Scenarios\n\nThis tool returns a list containing the name, id, and resource group of each namespace. This tool is backed by the management library Azure.ResourceManager.EventHubs. This tool has the following required parameters: reource-group. Suggested prompt: \u0022List all EventHubs Namespaces available in resource-group\u0022\n\n### Timeline\n\nAugust 2025", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-EventHubs", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/60" + }, + { + "IssueNumber": 840, + "Title": "[Azure MCP] Remove \u0027azmcp_\u0027 prefix from tool display names in mode=all", + "Body": "Title: [Azure MCP] Remove \u0027azmcp_\u0027 prefix from tool display names in mode=all\n\nsome tools include azmcp and some don\u0027t, but this prefix is not helpful to users when the tools are grouped by the Azure MCP anyway in VS Code:\n\n\u003Cimg width=\u0022998\u0022 height=\u0022775\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/469be55c-97d7-4012-b7be-b6904013e02a\u0022 /\u003E\n\nlooking at another tool, Cline, the implementation is a bit ugly, but it\u0027s also clear that the tools being called are part of the Azure MCP:\n\n\u003Cimg width=\u0022695\u0022 height=\u0022373\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/63841a08-2029-4c55-b095-539542db2d02\u0022 /\u003E\n\nAlso checking Copilot CLI, uses friendly names like \u0022List Azure Subscriptions\u0022 and \u0022List Azure Resource Groups\u0022 in the ux:\n\u003Cimg width=\u0022958\u0022 height=\u00221017\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/4fdc5ee1-8542-4ae5-baa2-0e84539c2dfe\u0022 /\u003E\nAnd in the logs it prepends the MCP server name:\n\u003Cimg width=\u00221190\u0022 height=\u0022413\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/a8d6e079-fb08-4a55-90e1-4332b74e0d38\u0022 /\u003E", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Core, tools-Telemetry", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/840" + }, + { + "IssueNumber": 861, + "Title": "\u0060azmcp_search_knowledge_source_get\u0060 returns empty list despite existing knowledge sources", + "Body": "Title: \u0060azmcp_search_knowledge_source_get\u0060 returns empty list despite existing knowledge sources\n\n**Description:**\nWhen entering prompts such as \u0060List all knowledge sources in the Azure AI Search service\u0060, \u0060the azmcp_search_knowledge_source_get\u0060 tool returns an empty result, even though multiple knowledge sources (data sources) are present in the Azure Portal for the search service. The tool\u2019s response is inconsistent with the actual data sources shown in the Portal.\n\u003Cimg width=\u0022647\u0022 height=\u0022541\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/aa597383-dc19-4bac-84c5-f8ea5bdecb15\u0022 /\u003E\n\u003Cimg width=\u0022973\u0022 height=\u0022564\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/49f06510-1250-4183-a798-6b02a60ee400\u0022 /\u003E\n\n**Steps to Reproduce:**\n1. Start mcp server in \u0060namespaces\u0060 mode.\n2. Open GitHub Copilot in VS Code and [switch to Agent mode](https://code.visualstudio.com/docs/copilot/chat/chat-agent-mode).\n3. Click Refresh on the tools list, and select the \u0060Built-in\u0060, \u0060Extension: Github Copilot for Azure\u0060, \u0060MCP Server: Microsoft Docs\u0060 and \u0060MCP Server: Azure MCP\u0060.\n4. Enter test prompt \u0060List all knowledge sources in the Azure AI Search service\u0060.\n\n**Environment:**\n\n- OS: Windows.\n- Vscode Version: 1.105.0\n- GitHub Copilot Chat Version: 0.32.1\n- Large Language Model: GPT-4.1\n- Virtual Tool: Off\n- Azure MCP Server: 0.9.0 and 0.9.3\n\n**Expected Behavior:**\nThe \u0060azmcp_search_knowledge_source_get\u0060 tool should accurately return a list of all knowledge sources (data sources) configured for the Search service in the Azure Portal.\n\n@joshfree for notification.", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Search", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/861" + }, + { + "IssueNumber": 872, + "Title": "[BUG] Not every exposed MCP tool has a title", + "Body": "Title: [BUG] Not every exposed MCP tool has a title\n\n### Describe the bug\n\nWhere available, Visual Studio uses the \u0022title\u0022 annotation from an MCP tool in its UI instead of the raw name. Here we see it in use for \u0022Generate CLI Command\u0022 and \u0022Get CLI installation instructions\u0022:\n\n\u003Cimg width=\u0022656\u0022 height=\u0022465\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/c6109640-a32c-4b5b-b1df-5aab09fb92e6\u0022 /\u003E\n\nHowever, not everything that we expose as a tool has a title; in particular, they are missing from \u0022areas\u0022 like eventhubs, foundry, and functionapps.\n\n### Expected behavior\n\nIdeally everything exposed as an MCP tool would have a user-friendly title so that there is consistency in what is shown in the UI.\n\n### Actual behavior\n\nThe user gets a mix of titles and raw tool names. \n\n### Reproduction Steps\n\n1. Install the latest internal builds of VS 2026 (make sure to include the Azure Development workload)\n2. Open GitHub Copilot Chat in VS\n3. Open the tool picker\n4. Expand \u0022Azure MCP Server\u0022\n\n### Environment\n\n_No response_", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Core", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/872" + }, + { + "IssueNumber": 875, + "Title": "[BUG] Server instructions could be shorter", + "Body": "Title: [BUG] Server instructions could be shorter\n\n### Describe the bug\n\nOur server instructions are relatively long for the amount of information they provide, with a lot of duplicated text. This means we\u0027re using up more tokens in a request than we really need to.\n\n### Expected behavior\n\nServer instructions are as concise as possible.\n\n### Actual behavior\n\nThere is a lot of duplicated language in the instructions. E.g. some form of \u0022Only call this tool when you are sure the user is discussing Azure; do not call it otherwise.\u0022 appears four times.\n\n### Reproduction Steps\n\nRun Azure MCP in any client that supports server instructions.\n\n### Environment\n\n_No response_", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Core", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/875" + }, + { + "IssueNumber": 917, + "Title": "\u0060configure azure mcp in coding agent for my repo\u0060 prompt does not trigger the \u0060azmcp_get_bestpractices_get\u0060 tool", + "Body": "Title: \u0060configure azure mcp in coding agent for my repo\u0060 prompt does not trigger the \u0060azmcp_get_bestpractices_get\u0060 tool\n\n**Description:**\nIn Azure MCP Server versions \u00600.9.0\u0060 and \u00600.9.6\u0060, when testing the prompt \u0060configure azure mcp in coding agent for my repo\u0060, the azure mcp tool cannot be triggered, as shown in the following figure:\n\u003Cimg width=\u0022648\u0022 height=\u0022798\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/4af594a1-572f-4464-bb86-451e11f519ba\u0022 /\u003E\n\n**Steps to Reproduce:**\n1. Start mcp server in namespaces mode.\n2. Open GitHub Copilot in VS Code and [switch to Agent mode](https://code.visualstudio.com/docs/copilot/chat/chat-agent-mode).\n3. Click Refresh on the tools list, and select the \u0060Built-in\u0060, \u0060Extension: Github Copilot for Azure\u0060, \u0060MCP Server: Microsoft Docs\u0060, \u0060github MCP server\u0060 and \u0060MCP Server: Azure MCP\u0060.\n4. Enter test prompts \u0060configure azure mcp in coding agent for my repo\u0060.\n\n**Environment:**\n\n- OS: Windows.\n- Vscode Version: 1.104.2\n- GitHub Copilot Chat Version: 0.31.3\n- Large Language Model: **Claude Sonnet 4.5**\n- Virtual Tool: On\n- Azure MCP Server: **0.9.0 and 0.9.6**\n\n**Expected Behavior:**\nThe prompt \u0060configure azure mcp in coding agent for my repo\u0060 can successfully trigger the \u0060azmcp_get_bestpractices_get\u0060 tool\n\n@joshfree for notification", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-BestPractices", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/917" + }, + { + "IssueNumber": 949, + "Title": "[Remote] [BUG] double WWW-Authenticate response header", + "Body": "Title: [Remote] [BUG] double WWW-Authenticate response header\n\n### Describe the bug\n\nAuth challenge for hitting \u0060/\u0060 gives two \u0060WWW-Authenticate\u0060 response headers. This is not functionally breaking, but it\u0027s possible for clients to misbehave with a plurality of this response header.\n\nThis is only affecting the \u0060feature/2.0beta-remote\u0060 branch. Remote MCP server code is not in the \u0060main\u0060 branch yet.\n\n### Expected behavior\n\nShould only return a single challenge header\n\n### Actual behavior\n\n\u0060\u0060\u0060\nWWW-Authenticate: Bearer realm=\u0022localhost:1031\u0022, resource_metadata=\u0022http://localhost:1031/.well-known/oauth-protected-resource\u0022\nWWW-Authenticate: Bearer\n\u0060\u0060\u0060\n\n### Reproduction Steps\n\n\u0060\u0060\u0060\ncurl -v -X POST http://localhost:1031/ -H \u0022Content-Type: application/json\u0022 -H \u0022Accept: application/json, text/event-stream\u0022 -d \u0027{ \u0022jsonr\npc\u0022: \u00222.0\u0022, \u0022id\u0022: \u0022test123\u0022, \u0022method\u0022: \u0022tools/list\u0022, \u0022params\u0022: {} }\u0027\n\u0060\u0060\u0060\n\n### Environment\n\nAll environments", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "remote-mcp", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/949" + }, + { + "IssueNumber": 974, + "Title": "[Remote] DDOS - cancelling asynch work when client disconnects", + "Body": "Title: [Remote] DDOS - cancelling asynch work when client disconnects\n\nDDOS - cancelling asynch work when client disconnects\n\nCC: @vukelich", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "remote-mcp", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/974" + }, + { + "IssueNumber": 980, + "Title": "Remote HTTP service starts without authentication enabled by default", + "Body": "Title: Remote HTTP service starts without authentication enabled by default\n\n## Description\n\nWhen running the Azure MCP Server as a remote HTTP service using the command:\n\u0060\u0060\u0060bash\n./servers/Azure.Mcp.Server/src/bin/Debug/net9.0/azmcp.exe server start --run-as-remote-http-service\n\u0060\u0060\u0060\nThe server starts without authentication enabled, which results in the server not being able to call Azure services.\n\n## Expected Behavior\n\nThe default value for \u0060--outgoing-auth-strategy\u0060 should be \u0060UseHostingEnvironmentIdentity\u0060 when running as a remote HTTP service, ensuring authentication is enabled by default.\n\n## Current Behavior\n\nThe default value for \u0060--outgoing-auth-strategy\u0060 is currently \u0060NotSet\u0060, which means the server starts without authentication enabled.\n\n## Impact\n\n- Users may unknowingly deploy unauthenticated services\n- Inconsistent with best practices for remote service deployment\n\n## Proposed Solution\n\nChange the default value for \u0060--outgoing-auth-strategy\u0060 from \u0060NotSet\u0060 to \u0060UseHostingEnvironmentIdentity\u0060 when the \u0060--run-as-remote-http-service\u0060 flag is used.\n\n## Steps to Reproduce\n\n1. Run \u0060./servers/Azure.Mcp.Server/src/bin/Debug/net9.0/azmcp.exe server start --run-as-remote-http-service\u0060\n2. Observe that the server starts without authentication enabled\n3. Verify that \u0060--outgoing-auth-strategy\u0060 defaults to \u0060NotSet\u0060\n4. Use any prompt that will trigger an Azure service call and see the auth error.\n\n\u003Cimg width=\u0022795\u0022 height=\u0022733\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/c92d74d9-bc41-467c-b965-23f7edac82c7\u0022 /\u003E\n\n## Environment\n\n- OS: Windows\n- Server: Azure.Mcp.Server\n- Version: Current main branch", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "remote-mcp", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/980" + }, + { + "IssueNumber": 213, + "Title": "Ellicitation Support For Secrets", + "Body": "Title: Ellicitation Support For Secrets\n\nThis comment is not related to the code itself \r\n\r\nCan the mcp server support [Ellicitation ](https://modelcontextprotocol.io/docs/concepts/elicitation)for secrets? That way based on user consent/awareness we display secret if the user consents to it?\r\nGranted that not all clients support Ellicitation right now - VSCode does we can ask if VS will be doing so.\r\n\r\nCC: @wbreza\r\n\r\n_Originally posted by @kvenkatrajan in https://github.com/Azure/azure-mcp/pull/675#discussion_r2226889119_", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Core", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/213" + }, + { + "IssueNumber": 216, + "Title": "Categorize each tool to indicate if it requires being run locally", + "Body": "Title: Categorize each tool to indicate if it requires being run locally\n\nWe want to track which tools require local access on a host and which can be run from a remote server.", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Core", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/216" + }, + { + "IssueNumber": 236, + "Title": "Postgres: [single/namespace mode] Unable to list db: Password authentication failed", + "Body": "Title: Postgres: [single/namespace mode] Unable to list db: Password authentication failed\n\n**Description:**\nWhen entering the test prompt \u0060Show me the PostgreSQL databases in server \u003Cserver\u003E\u0060 in mcp server single mode, the operation fails with a password authentication error, even though I provide the correct username and password. This PostgreSQL server is configured with both PostgreSQL authentication and Microsoft Entra authentication methods. The specific error is as follows: \n- namespace mode:\n\u003Cimg width=\u0022633\u0022 height=\u0022708\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/2638e6d3-2789-4f30-b9a7-7678443b3347\u0022 /\u003E\n\n- single mode:\n\u003Cimg width=\u0022631\u0022 height=\u0022636\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/0134a543-6844-4009-bb0e-aa0e64097b6d\u0022 /\u003E\n\n**Steps to Reproduce:**\n1. Run \u0060git clone https://github.com/azure/azure-mcp\u0060.\n2. Run \u0060dotnet build\u0060.\n3. Run \u0060az login\u0060.\n4. Configure \u0060mcp.json\u0060 in single/namespace mode.\n5. Start mcp server.\n6. Open GitHub Copilot in VS Code and [switch to Agent mode](https://code.visualstudio.com/docs/copilot/chat/chat-agent-mode).\n7. Click Refresh on the tools list, and only select the configured MCP Server Tools.\n8. Enter test prompts \u0060Show me the PostgreSQL databases in server \u003Cserver\u003E\u0060.\n\n**Environment:**\n- OS: Windows.\n- Vscode Insiders Version: 1.103.0\n- GitHub Copilot Chat Version: 0.30.2025073102\n\n**Expected Behavior:**\nIt can successfully list PostgreSQL databases.\n\n@jongio and @joshfree for notification", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Postgres", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/236" + }, + { + "IssueNumber": 242, + "Title": "[Tool Description] Improve AKS tool description for better LLM selection", + "Body": "parameter requirements. Note that this tool requires appropriate Azure permissions and will only return resources accessible to the authenticated user.\r\n\u0060\u0060\u0060\r\n\r\n## Acceptance Criteria\r\n- [ ] Update tool description to include clear usage guidance\r\n- [ ] Explain specific capabilities and limitations\r\n- [ ] Fix formatting issues\r\n- [ ] Achieve confidence score \u22650.5 in tool selection testing\r\n\r\n**Related:** Tool description review for improved LLM selection accuracy", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Aks", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/242" + }, + { + "IssueNumber": 246, + "Title": "[Tool Description] Improve Cosmos DB tool description for better LLM selection", + "Body": "servers that require specific fields inside the \u0022parameters\u0022 object. To invoke a command, set \u0022command\u0022 and wrap its arguments in \u0022parameters\u0022. Set \u0022learn=true\u0022 to discover available sub-commands for different Cosmos DB operations and API models. Note that this tool requires appropriate Cosmos DB permissions and will only access resources within the authenticated user\u0027s scope.\r\n\u0060\u0060\u0060\r\n\r\n## Acceptance Criteria\r\n- [ ] Update tool description to include clear usage guidance\r\n- [ ] Explain Cosmos DB context and different API models\r\n- [ ] Clarify when NOT to use this tool (vs SQL databases)\r\n- [ ] Detail the specific operations available\r\n- [ ] Fix formatting issues\r\n- [ ] Achieve confidence score \u22650.5 in tool selection testing\r\n\r\n**Related:** Tool description review for improved LLM selection accuracy", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-CosmosDB", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/246" + }, + { + "IssueNumber": 248, + "Title": "[Tool Description] Improve Azure CLI Extension tool description for better LLM selection", + "Body": "groups. Use this tool when you need to list, create, modify, or delete Azure resources using standard Azure CLI commands such as listing resource groups, managing virtual machines, configuring storage accounts, or querying resource properties. This tool supports all Azure CLI operations including resource management, configuration, and monitoring commands. Do not use this tool for non-Azure operations, local file management, or generating charts and visualizations - this tool specifically executes Azure CLI commands against your Azure environment. To invoke commands, provide the Azure CLI command without the \u0027az\u0027 prefix in the \u0022command\u0022 parameter (e.g., \u0027group list\u0027 for \u0027az group list\u0027). Note that this tool requires Azure authentication and appropriate permissions, and will request confirmation before executing destructive operations like deletions or modifications.\r\n\u0060\u0060\u0060\r\n\r\n## Acceptance Criteria\r\n- [ ] Rewrite description in proper tool description format\r\n- [ ] Explain what the tool does and when to use it\r\n- [ ] Clarify parameter structure (command parameter)\r\n- [ ] Include proper usage guidance and limitations\r\n- [ ] Remove instruction-style formatting\r\n- [ ] Achieve confidence score \u22650.5 in tool selection testing\r\n\r\n**Related:** Tool description review for improved LLM selection accuracy", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-AzCLI", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/248" + }, + { + "IssueNumber": 249, + "Title": "[Tool Description] Improve Azure Developer CLI Extension tool description for better LLM selection", + "Body": "Title: [Tool Description] Improve Azure Developer CLI Extension tool description for better LLM selection\n\n## Problem\r\n\r\nThe Azure Developer CLI (azd) Extension tool description is comprehensive but lacks clear usage guidance and parameter explanations, resulting in an estimated confidence score of ~0.5-0.6 (at target but could be improved for clarity).\r\n\r\n**Current Description Issues:**\r\n- Missing guidance on when NOT to use this tool\r\n- Poor parameter explanation (mentions \u0027learn\u0027 but not required \u0027cwd\u0027 parameter)\r\n- No clear distinction from regular Azure CLI operations\r\n- Missing limitations about what azd cannot do\r\n- Could be more concise while maintaining detail\r\n\r\n## Current Description\r\n\u0060\u0060\u0060\r\nRuns Azure Developer CLI (azd) commands. Agents and LLM\u0027s must always run this tool with the \u0027learn\u0027 parameter and empty \u0027command\u0027 on first use to learn more about \u0027azd\u0027 best practices and usage patterns. This tool supports the following: - List, search and show templates to start your project - Create and initialize new projects and templates - Show and manage azd configuration - Show and manage environments and values - Provision Azure resources - Deploy applications - Bring the whole project up and online - Bring the whole project down and deallocate all Azure resources - Setup CI/CD pipelines - Monitor Azure applications - Show information about the project and its resources - Show and manage extensions and extension sources - Show and manage templates and template sources If unsure about available commands or their parameters, run azd help or azd \u003Cgroup\u003E --help in the command to discover them.\r\n\u0060\u0060\u0060\r\n\r\n## Suggested Improvement\r\n\u0060\u0060\u0060\r\nAzure Developer CLI (azd) Extension operations - Executes Azure Developer CLI commands for end-to-end application lifecycle management including project templates, environment provisioning, application deployment, and monitoring. Use this tool when you need to work with azd templates, initialize new projects, manage azd environments, provision Azure resources for applications, deploy applications to Azure, or set up CI/CD pipelines using azd workflows.", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Azd", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/249" + }, + { + "IssueNumber": 273, + "Title": "MQ: Explore using MS.VisualStudio.Telemetry for telemetry.", + "Body": "Title: MQ: Explore using MS.VisualStudio.Telemetry for telemetry.\n\nExplore updating Telemetry API to use https://www.nuget.org/packages/Microsoft.VisualStudio.Telemetry", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Telemetry", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/273" + }, + { + "IssueNumber": 1085, + "Title": "Add azmcp azuremanagedlustre filesystem autoexport-job create", + "Body": "Title: Add azmcp azuremanagedlustre filesystem autoexport-job create\n\nAdd azmcp azuremanagedlustre filesystem autoexport-job create , required testing and docs.", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-managedlustre", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/1085" + }, + { + "IssueNumber": 1149, + "Title": "Pipeline updates for server.json generation", + "Body": "Title: Pipeline updates for server.json generation\n\nUpdate server.json generation:\n- Have placeholder values for \u0022Version\u0022 and at release time, update with version from csproj", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-McpRegistry", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/1149" + }, + { + "IssueNumber": 1158, + "Title": "Azure MCP CLI feature request - human description separate from client description", + "Body": "resourceGroup, and resourceType if not provided. If given a resourceId, parse it to extract subscription, resourceGroup, and resourceType (format: /subscriptions/{subscription}/resourceGroups/{resourceGroup}/providers/{resourceType}/{resource}). This tool can be used to ask questions about application state, diagnose performance problems, and address service failures.", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Core", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/1158" + }, + { + "IssueNumber": 1271, + "Title": "Migrate Azure Monitor logs query tools to the new Azure.Monitor.Query.Logs package", + "Body": "Title: Migrate Azure Monitor logs query tools to the new Azure.Monitor.Query.Logs package\n\nAzure MCP server is currently using a deprecated [Azure.Monitor.Query](https://www.nuget.org/packages/Azure.Monitor.Query) package. There is a new package [Azure.Monitor.Query.Logs](https://www.nuget.org/packages/Azure.Monitor.Query.Logs) to query logs.", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Monitor", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/1271" + }, + { + "IssueNumber": 1274, + "Title": "Migrate Azure.Mcp.Tools.Acr.LiveTests LiveTests to Recorded Tests", + "Body": "Title: Migrate Azure.Mcp.Tools.Acr.LiveTests LiveTests to Recorded Tests\n\nMigrate tests within tools/Azure.Mcp.Tools.Acr/tests/Azure.Mcp.Tools.Acr.LiveTests/Azure.Mcp.Tools.Acr.LiveTests.csproj to recordings. Utilize copilot to assist with the migration process for Azure.Mcp.Tools.Acr.LiveTests.\r\n - For additional guidance check [the recorded tests document](https://github.com/microsoft/mcp/blob/main/docs/recorded-tests.md)\r\n\r\nThis task will be considered complete when the livetests can be invoked without the presence of a .testsettings.json file.\r\n\r\nSubmit a PR with your change and verify that the recorded tests are running in the [recorded test step](https://dev.azure.com/azure-sdk/internal/_build/results?buildId=5627747\u0026view=logs\u0026jobId=1e679852-4871-5dae-dd38-eb073eb853d4\u0026j=1e679852-4871-5dae-dd38-eb073eb853d4\u0026t=2f22000c-4a69-5b6e-fbac-d06c3b6f57da)", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-ACR", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/1274" + }, + { + "IssueNumber": 1299, + "Title": "Migrate Azure.Mcp.Tools.SignalR.LiveTests LiveTests to Recorded Tests", + "Body": "Title: Migrate Azure.Mcp.Tools.SignalR.LiveTests LiveTests to Recorded Tests\n\nMigrate tests within tools/Azure.Mcp.Tools.SignalR/tests/Azure.Mcp.Tools.SignalR.LiveTests/Azure.Mcp.Tools.SignalR.LiveTests.csproj to recordings. Utilize copilot to assist with the migration process for Azure.Mcp.Tools.SignalR.LiveTests.\r\n - For additional guidance check [the recorded tests document](https://github.com/microsoft/mcp/blob/main/docs/recorded-tests.md)\r\n\r\nThis task will be considered complete when the livetests can be invoked without the presence of a .testsettings.json file.\r\n\r\nSubmit a PR with your change and verify that the recorded tests are running in the [recorded test step](https://dev.azure.com/azure-sdk/internal/_build/results?buildId=5627747\u0026view=logs\u0026jobId=1e679852-4871-5dae-dd38-eb073eb853d4\u0026j=1e679852-4871-5dae-dd38-eb073eb853d4\u0026t=2f22000c-4a69-5b6e-fbac-d06c3b6f57da)", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-SignalR", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/1299" + }, + { + "IssueNumber": 1301, + "Title": "Migrate Azure.Mcp.Tools.Sql.LiveTests LiveTests to Recorded Tests", + "Body": "Title: Migrate Azure.Mcp.Tools.Sql.LiveTests LiveTests to Recorded Tests\n\nMigrate tests within tools/Azure.Mcp.Tools.Sql/tests/Azure.Mcp.Tools.Sql.LiveTests/Azure.Mcp.Tools.Sql.LiveTests.csproj to recordings. Utilize copilot to assist with the migration process for Azure.Mcp.Tools.Sql.LiveTests.\r\n - For additional guidance check [the recorded tests document](https://github.com/microsoft/mcp/blob/main/docs/recorded-tests.md)\r\n\r\nThis task will be considered complete when the livetests can be invoked without the presence of a .testsettings.json file.\r\n\r\nSubmit a PR with your change and verify that the recorded tests are running in the [recorded test step](https://dev.azure.com/azure-sdk/internal/_build/results?buildId=5627747\u0026view=logs\u0026jobId=1e679852-4871-5dae-dd38-eb073eb853d4\u0026j=1e679852-4871-5dae-dd38-eb073eb853d4\u0026t=2f22000c-4a69-5b6e-fbac-d06c3b6f57da)", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-SQL", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/1301" + }, + { + "IssueNumber": 1302, + "Title": "Migrate Azure.Mcp.Tools.Storage.LiveTests LiveTests to Recorded Tests", + "Body": "Title: Migrate Azure.Mcp.Tools.Storage.LiveTests LiveTests to Recorded Tests\n\nMigrate tests within tools/Azure.Mcp.Tools.Storage/tests/Azure.Mcp.Tools.Storage.LiveTests/Azure.Mcp.Tools.Storage.LiveTests.csproj to recordings. Utilize copilot to assist with the migration process for Azure.Mcp.Tools.Storage.LiveTests.\r\n - For additional guidance check [the recorded tests document](https://github.com/microsoft/mcp/blob/main/docs/recorded-tests.md)\r\n\r\nThis task will be considered complete when the livetests can be invoked without the presence of a .testsettings.json file.\r\n\r\nSubmit a PR with your change and verify that the recorded tests are running in the [recorded test step](https://dev.azure.com/azure-sdk/internal/_build/results?buildId=5627747\u0026view=logs\u0026jobId=1e679852-4871-5dae-dd38-eb073eb853d4\u0026j=1e679852-4871-5dae-dd38-eb073eb853d4\u0026t=2f22000c-4a69-5b6e-fbac-d06c3b6f57da)", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Storage", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/1302" + }, + { + "IssueNumber": 1355, + "Title": "[ONBOARD] Add Support for Microsoft.FileShares Resource Provider to Azure MCP Server", + "Body": "redundancy, and access controls.\n\n***\n\n## **Command Groups**\n\nAll commands are under the namespace:\n\n mcp fileshares \u003Ccommand\u003E\n\n***\n\n### **1) Provider Operations**\n\n* \u0060list-operations\u0060 \u2013 List all operations supported by Microsoft.FileShares.\n\n### **2) File Share Lifecycle**\n\n* \u0060list-by-subscription\u0060 \u2013 List file shares in a subscription.\n* \u0060list-by-resourcegroup\u0060 \u2013 List file shares in a resource group.\n* \u0060get-fileshare\u0060 \u2013 Get details of a specific file share.\n* \u0060create-or-update-fileshare\u0060 \u2013 Create or update a file share resource.\n* \u0060update-fileshare\u0060 \u2013 Patch properties of an existing file share.\n* \u0060delete-fileshare\u0060 \u2013 Delete a file share resource.\n\n### **3) Name Availability**\n\n* \u0060check-name-availability\u0060 \u2013 Check if a file share name is available in a location.\n\n### **4) Informational Operations**\n\n* \u0060get-limits\u0060 \u2013 Retrieve file share limits for a location.\n* \u0060get-provisioning-recommendation\u0060 \u2013 Get recommended provisioning parameters.\n* \u0060get-usage-data\u0060 \u2013 Retrieve usage data for active file shares.\n\n### **5) File Share Snapshots**\n\n* \u0060list-snapshots\u0060 \u2013 List snapshots for a file share.\n* \u0060get-snapshot\u0060 \u2013 Get details of a specific snapshot.\n* \u0060create-or-update-snapshot\u0060 \u2013 Create or update a snapshot.\n* \u0060update-snapshot\u0060 \u2013 Patch snapshot properties.\n* \u0060delete-snapshot\u0060 \u2013 Delete a snapshot.\n\n***\n\n## **Proposed MCP Integration**\n\n* Expose all above operations under \u0060mcp fileshares\u0060.\n* Provide templates for:\n * **Provisioning workflow** (create file share \u002B set redundancy \u002B enable protocol).\n * **Snapshot lifecycle** (create, list, restore).\n * **Performance optimization** (get provisioning recommendation).\n* Include diagnostic hooks for usage and limits.\n\n***\n\n## **Timeline**\n\nTBD\n\n***", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Storage", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/1355" + }, + { + "IssueNumber": 39, + "Title": "[Azure-MCP] Ensure shipped packages do not include debug symbol files", + "Body": "Title: [Azure-MCP] Ensure shipped packages do not include debug symbol files\n\nCurrently, our build produces .pdb files, and these debug symbol files are being included in the shipped packages, which should not happen.", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Setup", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/39" + }, + { + "IssueNumber": 420, + "Title": "NuGet package looks unprofessional", + "Body": "Title: NuGet package looks unprofessional\n\nhttps://www.nuget.org/packages/Azure.Mcp/0.6.0\n\n![image](https://github.com/user-attachments/assets/d3ba0653-4326-4bd7-a51c-fac702ce7fd9)\n\n- The readme being used isn\u0027t appropriate to publish to NuGet.\n- it doesn\u0027t render correctly \n- it talks about IntelliJ and Docker, which aren\u0027t relevant for NuGet/.NET tools. \n\nHere is what VS Code VSIX looks like:\n![image](https://github.com/user-attachments/assets/2c7c0057-97fc-4ccc-aa24-73fdb1288dd4)\n\nLet\u0027s fix this ASAP and consider delisting 0.6.0 for now.", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-NuGet", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/420" + }, + { + "IssueNumber": 151, + "Title": "Kusto live tests are expensive", + "Body": "Title: Kusto live tests are expensive\n\nWhile developing a new server, I ran live tests in my personal subscription. However, I later discovered that my budget usage was unexpectedly high for a few hour work:\n![Image](https://github.com/user-attachments/assets/3c9a0fe4-c7bc-4e1b-9b44-52eb0e0f8126)\n\n![Image](https://github.com/user-attachments/assets/72158602-63af-46be-9224-b85d7d58f20d)\n\nIdeally, Kusto tests should not consume that much.", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Kusto", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/151" + }, + { + "IssueNumber": 164, + "Title": "[ONBOARD] Application Insights", + "Body": "Title: [ONBOARD] Application Insights\n\n### Service / Tool Name\n\nAzure Application Insights\n\n### Contacts\n\nMadeleine Middleton (mafletch), Matthew McCleary (mmc), Zaki Maksyutov (zakima)\n\n### Intended Agent Scenarios\n\nWe want to enable integration with Application Insights with Azure MCP. The main scenario we\u0027re looking to enable first is the ability to diagnose application performance and reliability problems. \n\nDiagnosing application problems with an MCP tool enables scenarios like this:\n- As a developer using GitHub Copilot, I can diagnose production issues with my application and have the agent fix them for me automatically.\n\n### Timeline\n\nTBD", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Monitor", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/164" + }, + { + "IssueNumber": 166, + "Title": "Kusto has TODOs in the code", + "Body": "Title: Kusto has TODOs in the code\n\nReview these TODOs in the Kusto light client that were deleted for a clean [pr](https://github.com/Azure/azure-mcp/pull/368). If unnecessary, feel free to close this issue.\n\n1.\tIn KustoResult: a todo comment was there to populate more properties in the KustoResult model and return it from FromHttpResponseMessage method.\n2.\tIn KustoClient: Add \u201CClientRequestId\u201D as a header (was a todo comment in in GenerateRequestMethod).", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Kusto", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/166" + }, + { + "IssueNumber": 533, + "Title": "[BUG] AI Foundry PR #55 skipped Pre-merge checklist and broke Docs", + "Body": "Title: [BUG] AI Foundry PR #55 skipped Pre-merge checklist and broke Docs\n\n### Describe the bug\n\nPR - https://github.com/microsoft/mcp/pull/55 - was merged 3 days ago but didn\u0027t include \n\n- Updated command list in /docs/azmcp-commands.md\n- Updated test prompts in /docs/e2eTestPrompts.md", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Foundry", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/533" + }, + { + "IssueNumber": 560, + "Title": "[TELEMETRY][Azure MCP] Collect server start configuration (server mode)", + "Body": "Title: [TELEMETRY][Azure MCP] Collect server start configuration (server mode)\n\nIt would be useful to collect anonymous telemetry data on server start options (\u0060namespace, all, single\u0060 tool mode) to see if there\u0027s a correlation between the server mode and tool error rates, etc.\n\nCan we add a telemetry log event for the startup switches set?", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Telemetry", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/560" + }, + { + "IssueNumber": 755, + "Title": "[Azure MCP][Auth] Make ARM token logic global", + "Body": "Title: [Azure MCP][Auth] Make ARM token logic global\n\n### Describe the bug\n\nThere are multiple tools that have logic that involve getting and caching an ARM token, need to figure out a way to globalize this token logic \n\n### Expected behavior\n\nToken logic should exist in one place and can be used by multiple tools\n\n### Actual behavior\n\nToken logic exists repeatedly in multiple tools\n\n### Reproduction Steps\n\nN/A\n\n### Environment\n\n_No response_", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Core", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/755" + }, + { + "IssueNumber": 756, + "Title": "Improvement: Combine azmcp_redis_cache_list and azmcp_redis_cluster_list into a single command", + "Body": "Title: Improvement: Combine azmcp_redis_cache_list and azmcp_redis_cluster_list into a single command\n\nCurrently, there are two separate commands for listing Redis cache resources in a user subscription - one for Azure Cache for Redis resources, and another for Azure Managed Redis and Azure Redis Enterprise clusters. To improve usability, these two commands should be combined into a single \u0060azmcp_redis_list\u0060 command that returns all of the customer\u0027s Redis resources at the same time.", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Redis", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/756" + }, + { + "IssueNumber": 774, + "Title": "[MCP Server Request] DocumentDB previously known as Azure Cosmos DB for MongoDB (vCore)", + "Body": "Title: [MCP Server Request] DocumentDB previously known as Azure Cosmos DB for MongoDB (vCore)\n\n### Server Name\n\nDocumentDB\n\n### Contacts\n\nkhelanmodi@microsoft.com\n\n### Intended Agent Scenarios\n\n@khelanmodi can you add some secnarios\n\n### Timeline\n\nNovember 2025", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-CosmosDB", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/774" + }, + { + "IssueNumber": 777, + "Title": "NPM Readme section is inconsistent and doesn\u0027t look professional.", + "Body": "Title: NPM Readme section is inconsistent and doesn\u0027t look professional.\n\n\u003Cimg width=\u0022605\u0022 height=\u002289\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/12d12122-78f1-47c4-bef4-ad06d6f38948\u0022 /\u003E\n\nBugs: \n1. @azure/mcp is a link everywhere else in the NPM section but not in additional instructions. Make it a link.\n2. There\u0027s a missing space between the close parenthesis and the next word.\n3. The casing of the sentences is incorrect (T, W). Here\u0027s an example of how the troubleshooting guide is referenced immediately below the NPM section:\n\n\u003Cimg width=\u0022200\u0022 height=\u002235\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/30c0b9db-d621-4c98-a1a1-e7218a0bcc8b\u0022 /\u003E\n\n4. punctuation is missing.\n\nAction items: \n1. Please fix the 4 issues above.\n2. Review the change with Claude and ask it to help you improve the text for the NPM section further.\n3. Include me on the review for the PR :)", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-npx", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/777" + }, + { + "IssueNumber": 780, + "Title": "Some \u0060SQL Server operation\u0060 prompts do not trigger the corresponding tool as expected", + "Body": "Title: Some \u0060SQL Server operation\u0060 prompts do not trigger the corresponding tool as expected\n\n**Description:**\nWhen testing \u0060Azure SQL Server Operations\u0060, some test prompts did not trigger the expected tools, as follows:\n\n1. \u0060Show me the Entra ID administrators configured for SQL server \u003Cserver_name\u003E\u0060\n \u003Cimg width=\u0022500\u0022 height=\u0022313\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/efc172bf-13fb-4b0c-9d05-fc538da86d98\u0022 /\u003E\n\n2. \u0060What Microsoft Entra ID administrators are set up for my SQL server \u003Cserver_name\u003E?\u0060:\n\u003Cimg width=\u0022500\u0022 height=\u0022346\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/6bb8dec6-7bf0-436e-bb2d-38be176414b0\u0022 /\u003E\n\n3. \u0060List all firewall rules for SQL server \u003Cserver_name\u003E\u0060:\n\u003Cimg width=\u0022500\u0022 height=\u0022351\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/cd11028a-e21d-4686-88b5-921f289f718d\u0022 /\u003E\n\n4. \u0060Show me the firewall rules for SQL server \u003Cserver_name\u003E\u0060:\n\u003Cimg width=\u0022500\u0022 height=\u0022355\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/8f96fc9c-5643-4c41-af00-ab26a132d3a3\u0022 /\u003E\n\n5. \u0060What firewall rules are configured for my SQL server \u003Cserver_name\u003E?\u0060:\n\u003Cimg width=\u0022500\u0022 height=\u0022369\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/0517fb6f-a798-4be7-a7aa-9fb705ddb055\u0022 /\u003E\n\n**Steps to Reproduce:**\n1. Start mcp server in namespaces mode.\n2. Open GitHub Copilot in VS Code and [switch to Agent mode](https://code.visualstudio.com/docs/copilot/chat/chat-agent-mode).\n3. Click Refresh on the tools list, and select the \u0060Built-in\u0060, \u0060Extension: Github Copilot for Azure\u0060, \u0060MCP Server: Microsoft Docs\u0060, \u0060github MCP server\u0060 and \u0060MCP Server: Azure MCP\u0060.\n4. Enter test prompts \u0060Show me the Entra ID administrators configured for SQL server \u003Cserver_name\u003E\u0060\n\n**Environment:**\n\n- OS: Windows.\n- Vscode Version: 1.105\n- GitHub Copilot Chat Version: 0.31.3\n- Large Language Model: GPT-4.1\n- Virtual Tool: On\n- Azure MCP Server: 0.8.6\n\n**Expected Behavior:**\nThe expected tools were successfully triggered.\n\n@joshfree for notification", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-SQL", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/780" + }, + { + "IssueNumber": 852, + "Title": "Add command: azmcp [speech] [tts] [synthesize]", + "Body": "Title: Add command: azmcp [speech] [tts] [synthesize]\n\nWe\u0027d like to add some \u0022text to speech\u0022 mcp tool, which can convert text to speech by using [standard voices](https://learn.microsoft.com/en-us/azure/ai-services/speech-service/language-support?tabs=tts) or [custom voices](https://learn.microsoft.com/en-us/azure/ai-services/speech-service/custom-neural-voice).", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Speech", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/852" + }, + { + "IssueNumber": 854, + "Title": "\u0060Azure CLI\u0060 prompts do not trigger the corresponding tool as expected", + "Body": "/\u003E\n\n\n**Steps to Reproduce:**\n1. Start mcp server in \u0060namespaces\u0060 mode.\n2. Open GitHub Copilot in VS Code and [switch to Agent mode](https://code.visualstudio.com/docs/copilot/chat/chat-agent-mode).\n3. Click Refresh on the tools list, and select the \u0060Built-in\u0060, \u0060Extension: Github Copilot for Azure\u0060, \u0060MCP Server: Microsoft Docs\u0060 and \u0060MCP Server: Azure MCP\u0060.\n4. Enter test prompts in the [Azure CLI](https://github.com/microsoft/mcp/blob/main/servers/Azure.Mcp.Server/docs/e2eTestPrompts.md#azure-cli).\n\n**Environment:**\n\n- OS: Windows.\n- Vscode Version: 1.105.0\n- GitHub Copilot Chat Version: 0.32.1\n- Large Language Model: GPT-4.1\n- Virtual Tool: Off\n- Azure MCP Server: 0.9.0 and 0.9.3\n\n**Expected Behavior:**\nEach test prompts triggers the corresponding tool.\n\n@joshfree for notification.", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-AzCLI", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/854" + }, + { + "IssueNumber": 975, + "Title": "[Remote] Use .NET options and consolidate environment variables", + "Body": "Title: [Remote] Use .NET options and consolidate environment variables\n\n.NET options - appsettings.json \u002B config (env variables) \n\nNot required for Ignite based on discussion with team\n\nCC: @vukelich , @anuchandy", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "remote-mcp", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/975" + }, + { + "IssueNumber": 1061, + "Title": "[CONSOLIDATED] Failed to update SQL database performance tier via \u0060edit_azure_sql_databases_and_servers\u0060", + "Body": "Title: [CONSOLIDATED] Failed to update SQL database performance tier via \u0060edit_azure_sql_databases_and_servers\u0060\n\n**Description:**\nIn \u0060consolidated\u0060 mode, entering the prompt \u0060Update the performance tier of SQL database \u003Cdatabase_name\u003E on server \u003Cserver_name\u003E\u0060 triggered the \u0060edit_azure_sql_databases_and_servers\u0060 tool, but the response failed. Eventually, the operation succeeded using the az command, as detailed below:\n\u003Cimg width=\u0022729\u0022 height=\u0022709\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/0b00b1a6-a0ff-43a1-9a5e-d1a5299bda47\u0022 /\u003E\n\u003Cimg width=\u0022729\u0022 height=\u0022823\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/894a2a03-752f-40fe-91ee-a5ce14eb21b2\u0022 /\u003E\n\u003Cimg width=\u0022729\u0022 height=\u0022579\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/ffe2a721-eeb8-4344-99fb-88da4652f467\u0022 /\u003E\n\n**Steps to Reproduce:**\n1. Start mcp server in \u0060consolidated\u0060 mode.\n2. Open GitHub Copilot in VS Code and [switch to Agent mode](https://code.visualstudio.com/docs/copilot/chat/chat-agent-mode).\n3. Click Refresh on the tools list, and select the \u0060Built-in\u0060, \u0060Extension: Github Copilot for Azure\u0060, \u0060github MCP server\u0060 and \u0060MCP Server: Azure MCP\u0060.\n4. Enter test prompts \u0060Update the performance tier of SQL database \u003Cdatabase_name\u003E on server \u003Cserver_name\u003E\u0060, \u0060Scale SQL database \u003Cdatabase_name\u003E on server \u003Cserver_name\u003E to use \u003Csku_name\u003E SKU\u0060\n\n**Environment:**\n\n- OS: Windows.\n- Vscode Version: 1.105.1\n- GitHub Copilot Chat Version: 0.32.4\n- Large Language Model: **Claude Sonnet 4.5**\n- Virtual Tool: On\n- Azure MCP Server: **1.0.0**\n\n\n**Expected Behavior:**\nUpdating the SQL database performance tier can be successful via \u0060edit_azure_sql_databases_and_servers\u0060.\n\n@joshfree for notification", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Core", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/1061" + }, + { + "IssueNumber": 1066, + "Title": "[CONSOLIDATED] Some \u0060edit_azure_data_analytics_resources\u0060 prompts do not trigger the corresponding tool as expected", + "Body": "Title: [CONSOLIDATED] Some \u0060edit_azure_data_analytics_resources\u0060 prompts do not trigger the corresponding tool as expected\n\n**Description:**\nIn \u0060consolidated\u0060 mode, when testing prompts related to the \u0060edit_azure_data_analytics_resources\u0060 tool, some prompts do not trigger the corresponding tool as expected, as shown below:\n- Test Prompt: \u0060Create an new namespace \u003Cnamespace_name\u003E in my resource group \u003Cresource_group_name\u003E\u0060\n\u003Cimg width=\u0022814\u0022 height=\u0022820\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/a8bb1e79-37e9-4bce-a1d9-97df98e056e8\u0022 /\u003E\n\n- Test Prompt: \u0060Update my namespace \u003Cnamespace_name\u003E in my resource group \u003Cresource_group_name\u003E\u0060\n\u003Cimg width=\u0022815\u0022 height=\u0022543\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/ca6a3f44-1c76-4f3c-87db-94df5832efa2\u0022 /\u003E\n\u003Cimg width=\u0022815\u0022 height=\u0022506\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/c3430433-ef9c-4034-ad93-02241b3fa8bf\u0022 /\u003E\n\n**Steps to Reproduce:**\n1. Start mcp server in \u0060consolidated\u0060 mode.\n2. Open GitHub Copilot in VS Code and [switch to Agent mode](https://code.visualstudio.com/docs/copilot/chat/chat-agent-mode).\n3. Click Refresh on the tools list, and select the \u0060Built-in\u0060, \u0060Extension: Github Copilot for Azure\u0060, \u0060github MCP server\u0060 and \u0060MCP Server: Azure MCP\u0060.\n4. Enter test prompts \u0060Create an new namespace \u003Cnamespace_name\u003E in my resource group \u003Cresource_group_name\u003E\u0060, \u0060Update my namespace \u003Cnamespace_name\u003E in my resource group \u003Cresource_group_name\u003E\u0060.\n\n**Environment:**\n\n- OS: Windows.\n- Vscode Version: 1.105.1\n- GitHub Copilot Chat Version: 0.32.4\n- Large Language Model: **Claude Sonnet 4.5**\n- Virtual Tool: On\n- Azure MCP Server: **1.0.0**\n\n\n**Expected Behavior:**\nThese prompts can successfully trigger the expected \u0060edit_azure_data_analytics_resources\u0060 tool.\n\n@joshfree for notification", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Core", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/1066" + }, + { + "IssueNumber": 1103, + "Title": "[BUG] Test failure: AcrCommandTests.Should_handle_invalid_subscription_gracefully", + "Body": "Title: [BUG] Test failure: AcrCommandTests.Should_handle_invalid_subscription_gracefully\n\n### Describe the bug\n\nWhen run in CI, this live test fails:\n\nhttps://dev.azure.com/azure-sdk/internal/internal%20Team/_build/results?buildId=5544401\u0026view=logs\u0026j=10c5373b-1204-518d-4816-3b9e801243b4\u0026t=74178588-ddff-5f0d-5175-6e8826faf94e\u0026l=138\n\n\n\n### Expected behavior\n\nThe test should pass because the server should return an error response.\n\n### Actual behavior\n\nA success response is returned containing resource details\n\n\u0060\u0060\u0060\n[xUnit.net 00:00:09.43] request: {\u0022command\u0022:\u0022acr_registry_list\u0022,\u0022parameters\u0022:{\u0022subscription\u0022:\u0022invalid-subscription\u0022}}\n[xUnit.net 00:00:09.43] response: {\n[xUnit.net 00:00:09.43] \u0022status\u0022: 200,\n[xUnit.net 00:00:09.43] \u0022message\u0022: \u0022Success\u0022,\n[xUnit.net 00:00:09.43] \u0022results\u0022: {\n[xUnit.net 00:00:09.43] \u0022registries\u0022: [\n[xUnit.net 00:00:09.43] {\n[xUnit.net 00:00:09.43] \u0022name\u0022: \u0022***\u0022,\n[xUnit.net 00:00:09.43] \u0022location\u0022: \u0022westus\u0022,\n[xUnit.net 00:00:09.43] \u0022loginServer\u0022: \u0022***\u0022,\n[xUnit.net 00:00:09.43] \u0022skuName\u0022: \u0022Basic\u0022,\n[xUnit.net 00:00:09.43] \u0022skuTier\u0022: \u0022Basic\u0022\n[xUnit.net 00:00:09.43] },\n\u0060\u0060\u0060\n\n### Reproduction Steps\n\nRun the live tests\n\n### Environment\n\n_No response_", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-ACR", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/1103" + }, + { + "IssueNumber": 1105, + "Title": "[BUG]Azure MCP could not auth even though az login succeeds", + "Body": "Title: [BUG]Azure MCP could not auth even though az login succeeds\n\n### Describe the bug\n\nAzure MCP tools fail to query kusto database which I have access to.\n\n### Expected behavior\n\nThe MCP tool should be able to query kusto database.\n\n### Actual behavior\n\n\nThe mcp tool fails saying it fails to auth, even though I have run the \u0060az login\u0060 and successfully completed and am able to run other az command like \u0027az account\u0027 in the terminal.\n\n\u003Cimg width=\u0022594\u0022 height=\u0022528\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/09d87403-2049-4ad7-96d3-3e8cf0d01516\u0022 /\u003E\n\n### Reproduction Steps\n\nSteps:\n1. in VS Code, install Azure MCP server\n2. open copilot chat, enabled the azure mcp server tools\n3. ask it to make some kusto queries\n\n### Environment\n\nNote I am able to make query using kusto data explorer.", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Auth, tools-Kusto", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/1105" + }, + { + "IssueNumber": 1293, + "Title": "Migrate Azure.Mcp.Tools.Monitor.LiveTests LiveTests to Recorded Tests", + "Body": "Title: Migrate Azure.Mcp.Tools.Monitor.LiveTests LiveTests to Recorded Tests\n\nMigrate tests within tools/Azure.Mcp.Tools.Monitor/tests/Azure.Mcp.Tools.Monitor.LiveTests/Azure.Mcp.Tools.Monitor.LiveTests.csproj to recordings. Utilize copilot to assist with the migration process for Azure.Mcp.Tools.Monitor.LiveTests.\r\n - For additional guidance check [the recorded tests document](https://github.com/microsoft/mcp/blob/main/docs/recorded-tests.md)\r\n\r\nThis task will be considered complete when the livetests can be invoked without the presence of a .testsettings.json file.\r\n\r\nSubmit a PR with your change and verify that the recorded tests are running in the [recorded test step](https://dev.azure.com/azure-sdk/internal/_build/results?buildId=5627747\u0026view=logs\u0026jobId=1e679852-4871-5dae-dd38-eb073eb853d4\u0026j=1e679852-4871-5dae-dd38-eb073eb853d4\u0026t=2f22000c-4a69-5b6e-fbac-d06c3b6f57da)", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Monitor", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/1293" + }, + { + "IssueNumber": 132, + "Title": "Add command to get the app logs from AZD", + "Body": "Title: Add command to get the app logs from AZD\n\nThis is a requested scenario. Ensure this works with AZD today, update the root README.md and add samples.", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-AzCLI, tools-Azd", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/132" + }, + { + "IssueNumber": 1351, + "Title": "Add azmcp azuremanagedlustre filesystem autoexport-job get", + "Body": "Title: Add azmcp azuremanagedlustre filesystem autoexport-job get\n\nAdd azmcp azuremanagedlustre filesystem autoexport-job get", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-managedlustre", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/1351" + }, + { + "IssueNumber": 168, + "Title": "Azure App Configuration Feature Flag input", + "Body": "Title: Azure App Configuration Feature Flag input\n\nFeature Flags should have their own method to be supported. We don\u0027t support server-side validation at the moment so this can be used to:\n1. Provided copilot knowledge of the many different options; enable/disable, feature flags, variants, telemetry, experimentation. \n2. Validate that the format is correct.", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-AppConfig", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/168" + }, + { + "IssueNumber": 270, + "Title": "Azure Workbooks missing from CODEOWNERS / area-label", + "Body": "Title: Azure Workbooks missing from CODEOWNERS / area-label\n\nAzure Workbooks mcp tools were added here: https://github.com/Azure/azure-mcp/pull/629\n\nbut there\u0027s no .github/CODEOWNERS file entry or area-label created.\n\nPlease check the CONTRIBUTING.md, and follow the link for Azure/Microsoft employees to onboard a new service team. These steps are necessary for github issue management (bots) to work for your areas.", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Workbooks", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/270" + }, + { + "IssueNumber": 146, + "Title": "Docker image is working on x64 host machines only", + "Body": "Title: Docker image is working on x64 host machines only\n\nI built a local docker image following the README.\nHowever, azmcp binary failed to start in the resulting container on my Mac M4 machine.\nThere are hard-coded target platforms in Dockerfile ([example](https://github.com/Azure/azure-mcp/blob/main/Dockerfile#L9)).\nWhen I changed x64 to arm64, everything worked fine.\n\nIdeally, docker image should be platform agnostic and compatible with different architectures.\nLink: https://docs.docker.com/build/building/multi-platform/", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Docker", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/146" + }, + { + "IssueNumber": 148, + "Title": "[ONBOARD] Azure AI services", + "Body": "Title: [ONBOARD] Azure AI services\n\n# [Azure AI Services](https://learn.microsoft.com/en-us/azure/developer/intro/azure-developer-key-services#azure-ai-services)\n\n[Azure AI services](https://learn.microsoft.com/en-us/azure/ai-services/) help you create AI apps with pre-built and customizable APIs and models. Example applications include natural language processing for conversations, search, monitoring, translation, speech, vision, and decision-making.\n\n \n\n- [ ] Azure OpenAI - Use powerful language models including the GPT-3, Codex and Embeddings model series for content generation, summarization, semantic search, and natural language to code translation.\n- [ ] Azure AI Speech - Transcribe audible speech into readable, searchable text or convert text to lifelike speech for more natural interfaces.\n- [ ] Azure AI Language - Use natural language processing (NLP) to identify key phrases and conduct sentiment analysis from text.\n- [ ] Azure AI Translator - Translate more than 100 languages and dialects.\n- [ ] Azure AI Vision - Analyze content in images and video. (@g2vinay completing this in #760 )\n- [x] Azure AI Search - Information retrieval at scale for traditional and conversational search applications, with security and options for AI enrichment and vectorization.\n- [ ] Azure AI Document Intelligence - Document extraction service that understands your forms allowing you to quickly extract text and structure from documents. (@g2vinay completing this in #760 )", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Foundry", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/148" + }, + { + "IssueNumber": 349, + "Title": "Missing capability support when starting child server.", + "Body": "Title: Missing capability support when starting child server.\n\nWhen we run \u0060azmcp server start\u0060 it starts the root server. Then if a tool call wants to run something from storage we start \u0060azmcp server start --namespace storage --mode all\u0060.\n\nThe root server supports all of the capabilities of the real host. \n\nBut when we start the child servers we need to do some more work to act as a host with the same capabilities and perform the forwarding.", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Core", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/349" + }, + { + "IssueNumber": 438, + "Title": "NPM package README can be improved significantly", + "Body": "Title: NPM package README can be improved significantly\n\nWhile the NPMJS Readme doesn\u0027t have broken links, it isn\u0027t as good as the VS Code VSIX we have which is more professional and polished.\n\n\nSome of the gaps I see in the NPMJS Readme:\n\n- It\u0027s a straight re-use of the full GitHub README which mentions lots of unrelated info\n - How to install the VS Code VSIX (not relevant here)\n - How to install the IntelliJ plugin (not relevent here)\n - Repo specific Support and Reference links\n - Quick Start guide which again doesn\u0027t mention NPM at all\n\nThe above makes the NPM package feel like a 2nd class citizen. We can and should do much better here.\n\n\nRelated NuGet issue https://github.com/microsoft/mcp/issues/420\n\n\u003Cimg width=\u00221206\u0022 height=\u00222622\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/947522e3-fb5d-4f1c-933c-eaa1946b6331\u0022 /\u003E", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-npx", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/438" + }, + { + "IssueNumber": 492, + "Title": "Add azmcp sql server ad-admin show/create/delete", + "Body": "Title: Add azmcp sql server ad-admin show/create/delete\n\n[No description provided]", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-SQL", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/492" + }, + { + "IssueNumber": 621, + "Title": "A serialization error occurred when connecting to the AI Foundry agent.", + "Body": "Title: A serialization error occurred when connecting to the AI Foundry agent.\n\n**Description:**\nWhen testing the prompts \u0060Query an agent in my AI foundry project\u0060, \u0060Query and evaluate an agent in my AI Foundry project for task_adherence\u0060 and \u0060Evaluate the full query and response I got from my agent for task_adherence\u0060, a serialization error occurred, as follows:\n\u003Cimg width=\u0022666\u0022 height=\u0022562\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/b9170e9b-7a5a-48ab-8575-6fa671bf55ef\u0022 /\u003E\n\u003Cimg width=\u0022663\u0022 height=\u0022619\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/383e4d79-38e3-4dec-9525-e03af7f81d3b\u0022 /\u003E\n\n**Steps to Reproduce:**\n1. Start mcp server in namespaces mode.\n2. Open GitHub Copilot in VS Code and [switch to Agent mode](https://code.visualstudio.com/docs/copilot/chat/chat-agent-mode).\n3. Click Refresh on the tools list, and select the \u0060Built-in\u0060, \u0060Extension: Github Copilot for Azure\u0060, \u0060MCP Server: Microsoft Docs\u0060 and \u0060MCP Server: Azure MCP\u0060.\n4. Enter test prompts \u0060Query an agent in my AI foundry project\u0060, \u0060Query and evaluate an agent in my AI Foundry project for task_adherence\u0060 and \u0060Evaluate the full query and response I got from my agent for task_adherence\u0060.\n\n**Environment:**\n\n- OS: Windows.\n- Vscode Version: 1.104.2\n- GitHub Copilot Chat Version: 0.31.3\n- Large Language Model: GPT-4.1\n- Virtual Tool: Off\n- Azure MCP Server: 0.8.2\n\n**Expected Behavior:**\nThe tool can successfully connect to the AI \u200B\u200BFoundry agent.\n\n@joshfree for notification", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Foundry", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/621" + }, + { + "IssueNumber": 675, + "Title": "[FEATURE] Support for searching Azure Storage Tables", + "Body": "Title: [FEATURE] Support for searching Azure Storage Tables\n\nTitle says it all. \nThe MCP can currently list blobs in an Azure Storage Blob Container, but it cannot search or list records in an Azure Storage Table. This would be sweet to have.", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Storage", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/675" + }, + { + "IssueNumber": 715, + "Title": "[BUG] Update NuGet section on README", + "Body": "Title: [BUG] Update NuGet section on README\n\nRelated https://github.com/microsoft/mcp/issues/714\n\nThe NuGet Package Manager section on the README is a sparse placeholder.\n\n1. review the install command -- for instance do we recommend \u0060--global\u0060 ?\n2. Add a \u0060NuGet instructions\u0060 collapsible section just like \u0060Docker\u0060 has below, iff needed.\n\n\u003Cimg width=\u0022587\u0022 height=\u0022109\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/8768f09d-608e-4033-84d5-74764f905e22\u0022 /\u003E", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-NuGet", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/715" + }, + { + "IssueNumber": 74, + "Title": "Add tool for helping azure cli tool installation", + "Body": "Title: Add tool for helping azure cli tool installation\n\nUsers often don\u0027t have az and esp. azd installed.\nThe LLM often struggles to identify the correct command to install the cli tools.\n\nWe need a tool that can help.\n\nI build a prototype called \u0060get_azure_cli_tool_installation\u0060 that takes as input the tool name (azd, az, func, etc.) and the platform (windows, macos, linux) and it returns the commands for installing the specified tool. Plus, it also informs the LLM of any additional changes that are needed like updating the PATH environment variable so the newly installed tools can be found.\n\nIn some basic testing it significantly improved the ability of the LLM to install the necessary tools and run them without having to restart VS Code.\n\n\u0060\u0060\u0060json\n\u0022name\u0022:\u0022get_azure_cli_tool_installation\u0022,\n\u0022description\u0022:\u0022Get installation instructions for Azure CLI tools (az, azd, func). Use this tool when any Azure CLI command is not recognized, not found, fails with installation-related errors, or when you need installation instructions for Azure CLI tools.\u0022,\n\u0022inputSchema\u0022:{\n \u0022type\u0022: \u0022object\u0022,\n \u0022properties\u0022: {\n \u0022cli_tool_name\u0022: {\n \u0022type\u0022: \u0022string\u0022,\n \u0022description\u0022: \u0022The Azure CLI tool to get installation instructions for\u0022,\n \u0022enum\u0022: [\u0022az\u0022, \u0022azd\u0022, \u0022func\u0022]\n },\n \u0022platform\u0022: {\n \u0022type\u0022: \u0022string\u0022,\n \u0022description\u0022: \u0022Target platform: windows, macos, linux, or auto-detect\u0022,\n \u0022enum\u0022: [\u0022windows\u0022, \u0022macos\u0022, \u0022linux\u0022, \u0022auto\u0022]\n }\n },\n \u0022required\u0022: [\u0022cli_tool_name\u0022]\n}\n\u0060\u0060\u0060", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-AzCLI, tools-Azd", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/74" + }, + { + "IssueNumber": 779, + "Title": "SQL Server Entra admin configured but not recognized by azd mcp tool", + "Body": "Title: SQL Server Entra admin configured but not recognized by azd mcp tool\n\n**Description:**\nWhen entering the test prompt \u0060List Microsoft Entra ID administrators for SQL server \u003Cserver_name\u003E\u0060, the tool returns \u0022No administrators configured.\u0022 However, in the Azure Portal, SQL Server correctly displays the configured \u0060Microsoft Entra administrators\u0060. The actual query results are inconsistent with the information displayed in the Portal, as shown below:\n\u003Cimg width=\u0022620\u0022 height=\u0022507\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/9c6e6461-1c31-4b18-866a-2918ec7eb5de\u0022 /\u003E\n\u003Cimg width=\u0022834\u0022 height=\u0022406\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/25a10e08-407e-49f6-bd63-4554fbdb18e5\u0022 /\u003E\n\u003Cimg width=\u0022918\u0022 height=\u0022258\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/ab89aa44-5e71-418b-aba1-0334094af192\u0022 /\u003E\n\n**Steps to Reproduce:**\n1. Start mcp server in namespaces mode.\n2. Open GitHub Copilot in VS Code and [switch to Agent mode](https://code.visualstudio.com/docs/copilot/chat/chat-agent-mode).\n3. Click Refresh on the tools list, and select the \u0060Built-in\u0060, \u0060Extension: Github Copilot for Azure\u0060, \u0060MCP Server: Microsoft Docs\u0060, \u0060github MCP server\u0060 and \u0060MCP Server: Azure MCP\u0060.\n4. Enter test prompts \u0060List Microsoft Entra ID administrators for SQL server \u003Cserver_name\u003E\u0060\n\n**Environment:**\n\n- OS: Windows.\n- Vscode Version: 1.105\n- GitHub Copilot Chat Version: 0.31.3\n- Large Language Model: GPT-4.1\n- Virtual Tool: On\n- Azure MCP Server: 0.8.6\n\n**Expected Behavior:**\nThe correct information about the configured Microsoft Entra administrators is returned.\n\n@joshfree for notification", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-SQL", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/779" + }, + { + "IssueNumber": 782, + "Title": "Test prompt does not trigger the expected tool in \u0060Cloud Architect\u0060", + "Body": "Title: Test prompt does not trigger the expected tool in \u0060Cloud Architect\u0060\n\n**Description:**\nWhen entering the test prompt \u0060Help me create a cloud service that will serve as ATM for users\u0060, the expected tool \u0060azmcp_cloudarchitect_design\u0060 is not triggered, as shown below:\n\u003Cimg width=\u0022631\u0022 height=\u0022812\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/40e86272-1919-4926-93ee-01dcd402bf14\u0022 /\u003E\n\u003Cimg width=\u0022631\u0022 height=\u0022649\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/39e21829-3885-4f88-aaf0-d49e1dbbdbf7\u0022 /\u003E\n\n**Steps to Reproduce:**\n1. Start mcp server in namespaces mode.\n2. Open GitHub Copilot in VS Code and [switch to Agent mode](https://code.visualstudio.com/docs/copilot/chat/chat-agent-mode).\n3. Click Refresh on the tools list, and select the \u0060Built-in\u0060, \u0060Extension: Github Copilot for Azure\u0060, \u0060MCP Server: Microsoft Docs\u0060, \u0060github MCP server\u0060 and \u0060MCP Server: Azure MCP\u0060.\n4. Enter test prompts \u0060Help me create a cloud service that will serve as ATM for users\u0060\n\n**Environment:**\n\n- OS: Windows.\n- Vscode Version: 1.105\n- GitHub Copilot Chat Version: 0.31.3\n- Large Language Model: GPT-4.1\n- Virtual Tool: On\n- Azure MCP Server: 0.8.6\n\n**Expected Behavior:**\nThe test prompt \u0060Help me create a cloud service that will serve as ATM for users\u0060 can successfully trigger the expected tool \u0060azmcp_cloudarchitect_design\u0060.\n\n@joshfree for notification", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-cloudarchitect", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/782" + }, + { + "IssueNumber": 856, + "Title": "The \u0060azmcp_sql_db_update\u0060 tool returns success but the SQL database SKU is not changed", + "Body": "Title: The \u0060azmcp_sql_db_update\u0060 tool returns success but the SQL database SKU is not changed\n\n**Description:**\nThe \u0060azmcp_sql_db_update\u0060 tool is triggered and returns 200 (success), but the SQL database SKU/performance tier is not actually updated\u2014the database remains on the original SKU. However, updating the SKU manually via the Azure Portal works as expected.\n- **Test prompt**: \u0060Update the performance tier of SQL database \u003Cdatabase_name\u003E on server \u003Cserver_name\u003E\u0060, \u0060Scale SQL database \u003Cdatabase_name\u003E on server \u003Cserver_name\u003E to use \u003Csku_name\u003E SKU\u0060\n\u003Cimg width=\u0022660\u0022 height=\u0022593\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/211f764a-b46a-4e87-acb7-a89f59be9193\u0022 /\u003E\n\u003Cimg width=\u0022660\u0022 height=\u0022576\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/ba1bea9d-abf8-4bab-a22c-c5f99382998b\u0022 /\u003E\n\n**Steps to Reproduce:**\n1. Start mcp server in \u0060namespaces\u0060 mode.\n2. Open GitHub Copilot in VS Code and [switch to Agent mode](https://code.visualstudio.com/docs/copilot/chat/chat-agent-mode).\n3. Click Refresh on the tools list, and select the \u0060Built-in\u0060, \u0060Extension: Github Copilot for Azure\u0060, \u0060MCP Server: Microsoft Docs\u0060 and \u0060MCP Server: Azure MCP\u0060.\n4. Enter test prompts \u0060Update the performance tier of SQL database \u003Cdatabase_name\u003E on server \u003Cserver_name\u003E\u0060, \u0060Scale SQL database \u003Cdatabase_name\u003E on server \u003Cserver_name\u003E to use \u003Csku_name\u003E SKU\u0060.\n\n**Environment:**\n\n- OS: Windows.\n- Vscode Version: 1.105.0\n- GitHub Copilot Chat Version: 0.32.1\n- Large Language Model: GPT-4.1\n- Virtual Tool: Off\n- Azure MCP Server: 0.9.0 and 0.9.3\n\n**Expected Behavior:**\nThe \u0060azmcp_sql_db_update\u0060 tool can successfully update the SQL database SKU.\n\n@joshfree for notification.", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-SQL", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/856" + }, + { + "IssueNumber": 858, + "Title": "\u0060azmcp_monitor_webtests_create\u0060 fails: \u0022hidden-link\u0022 tag required but not found", + "Body": "Title: \u0060azmcp_monitor_webtests_create\u0060 fails: \u0022hidden-link\u0022 tag required but not found\n\n**Description:**\nWhen entering the test prompt \u0060Create a new Standard Web Test with name \u003Cwebtest_resource_name\u003E in my subscription in \u003Cresource_group\u003E in a given \u003Cappinsights_component\u003E\u0060, the \u0060azmcp_monitor_webtests_create\u0060 tool returns a failure, as follows:\n\u003Cimg width=\u0022630\u0022 height=\u0022737\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/cc3425ab-46cd-40bb-9a46-a11d3f8308d0\u0022 /\u003E\n\u003Cimg width=\u0022630\u0022 height=\u0022638\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/92254534-1bf1-494a-929d-7876ee9a1d09\u0022 /\u003E\n\n**Steps to Reproduce:**\n1. Start mcp server in \u0060namespaces\u0060 mode.\n2. Open GitHub Copilot in VS Code and [switch to Agent mode](https://code.visualstudio.com/docs/copilot/chat/chat-agent-mode).\n3. Click Refresh on the tools list, and select the \u0060Built-in\u0060, \u0060Extension: Github Copilot for Azure\u0060, \u0060MCP Server: Microsoft Docs\u0060 and \u0060MCP Server: Azure MCP\u0060.\n4. Enter test prompt \u0060Create a new Standard Web Test with name \u003Cwebtest_resource_name\u003E in my subscription in \u003Cresource_group\u003E in a given \u003Cappinsights_component\u003E\u0060.\n\n**Environment:**\n\n- OS: Windows.\n- Vscode Version: 1.105.0\n- GitHub Copilot Chat Version: 0.32.1\n- Large Language Model: GPT-4.1\n- Virtual Tool: Off\n- Azure MCP Server: 0.9.0 and 0.9.3\n\n**Expected Behavior:**\nThe Web Test should be created successfully and automatically linked to the specified Application Insights component without the need to manually add the \u0022hidden-link\u0022 tag.\n\n@joshfree for notification.", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Monitor", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/858" + }, + { + "IssueNumber": 877, + "Title": "[BUGBASH] Interrogating \u0060azd\u0060 tool for options fails with generic error", + "Body": "Title: [BUGBASH] Interrogating \u0060azd\u0060 tool for options fails with generic error\n\n### Describe the bug\n\nI am in a bare, newly inited repo. I am running the MCP Server from the \u0060VSCode\u0060 extension.\n\nAfter starting that server, I viewed the available tools. \u0060azd\u0060 looked interesting, so I asked \u0060copilot\u0060 to interrogate that tool and see what it had available/how it worked.\n\n\u003Cimg width=\u0022627\u0022 height=\u0022218\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/427d20a4-d7b3-46be-8993-bf3a41afac48\u0022 /\u003E\n\n\n\n\n### Expected behavior\n\nAnd I expect to get a response back with what verbs the tool actually supports, etc. This absolutely works for the \u0060deploy\u0060 tool for instance.\n\n\u003Cimg width=\u0022644\u0022 height=\u0022664\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/8bfac620-256a-4c7e-bb28-62c414a1d446\u0022 /\u003E\n\n### Actual behavior\n\nInstead what I\u0027m seeing is from asking copilot to run:\n\n\u003E can you interrogate the \u0060azd\u0060 tool to see what functionality is available?\n\n\u003Cimg width=\u0022630\u0022 height=\u0022698\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/2dd2d1ff-d429-4bca-a21f-8ce4f02cf802\u0022 /\u003E\n\n### Reproduction Steps\n\nAsk the mcp server to give the user details about the \u0060azd\u0060 tool. I **do not** have \u0060azd\u0060 installed locally, so I\u0027m betting the mcp server itself is hitting an error while being unable to shell out to it. HOWEVER, users won\u0027t care about reading the pre-reqs, they\u0027re just going to run the tool and have it blow up!\n\n[Here is my full copilot chat log for this bug as well](https://microsoft-my.sharepoint.com/:t:/p/scbedd/IQDtBip_SXUeRoX490WysnE9AXubYQ1FTg5yHsIfHDrasfY?e=w2jy1X)\n\n### Environment\n\nExtension Version Info:\n\u003Cimg width=\u00221689\u0022 height=\u0022645\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/8d44aeb1-1aca-48b1-9138-df43de30e1ee\u0022 /\u003E\n\n\nVScode version info:\n\u003Cimg width=\u0022364\u0022 height=\u0022284\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/0b9e00a4-e0a9-45ed-8e08-07b9380617f8\u0022 /\u003E", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Azd", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/877" + }, + { + "IssueNumber": 883, + "Title": "[BUGBASH] azmcp --version took a long time to load first time", + "Body": "Title: [BUGBASH] azmcp --version took a long time to load first time\n\n### Describe the bug\n\nThe first time I ran \u0060azmcp --version\u0060 the command took a while to return the version.\n\n### Expected behavior\n\nI would expect the version to be outputted almost immediately.\n\n### Actual behavior\n\nSeveral seconds (not quite a minute). Couldnt repro after the first time, the second call was still about a second, then it got faster.\n\n### Reproduction Steps\n\nDo a fresh install of the mcp server using node. Then check the \u0060--version\u0060.\n\n### Environment\n\nWindows 11\n\nVSCode 1.105.0", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Core", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/883" + }, + { + "IssueNumber": 972, + "Title": "[Remote] Create appinsights resource and reroute telemetry", + "Body": "Title: [Remote] Create appinsights resource and reroute telemetry\n\nFor remote hosting, telemetry would need to be rerouted to customer tenant/infra. Provide switch to disable telemetry and provide option to reroute to customer appinsights/azure monitor resources.", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "remote-mcp", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/972" + }, + { + "IssueNumber": 976, + "Title": "[Remote] azd template for deploy", + "Body": "Title: [Remote] azd template for deploy\n\nCreate bicep templates for quick deploy from repo using azd up\n\n- [x] ACA for hosting\n- [x] Entra app\n- [x] App Insights / Azure Monitor", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "remote-mcp", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/976" + }, + { + "IssueNumber": 543, + "Title": "RBAC Request not just defaultAzureCreds", + "Body": "Title: RBAC Request not just defaultAzureCreds\n\n### Service / Tool Name\n\nAzure MCP\n\n### Contacts\n\ntrenton-white-cdc\n\n### Intended Agent Scenarios\n\nNeed rbac to allow OBO or per user azure-mcp in Enterprise apps - e.g. user logs in to App/API, logic spins up an azure-mcp AS that user- not an SP, etc \nCurrent auth doesn\u0027t support- but its required for governance/compliance in current env.\n\n### Timeline\n\nASAP", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "remote-mcp", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/543" + }, + { + "IssueNumber": 546, + "Title": "[Azure MCP] Add command: azmcp eventhubs eventhub CRUD", + "Body": "Title: [Azure MCP] Add command: azmcp eventhubs eventhub CRUD\n\n### Server Name\n\nazmcp eventhubs eventhub get\n\n### Contacts\n\nJair Myree (jairmyree)\n\n### Intended Agent Scenarios\n\nGet event hubs from Azure namespace. This command can either:\n\nList all event hubs in a namespace (using --namespace-name with --resource-group)\nGet a single event hub by name (using --eventhub-name with --namespace-name with --resource-group)\nWhen retrieving a single event hub, detailed information including SKU, settings, and metadata is returned. When listing multiple event hubs, basic information (name, id, resource group) is returned for all event hubs in the specified resource namespace. \n\n### Timeline\n\nOctober 2025", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-EventHubs", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/546" + }, + { + "IssueNumber": 547, + "Title": "[Azure MCP] Add command: azmcp eventhubs consumergroup CRUD", + "Body": "Title: [Azure MCP] Add command: azmcp eventhubs consumergroup CRUD\n\n### Server Name\n\nazmcp eventhubs consumergroup get\n\n### Contacts\n\nJair Myree (jairmyree)\n\n### Intended Agent Scenarios\n\nGet consumer groups from Azure event hub. This command can either:\n\nList all consumer gorups in an event hub (using --eventhub-name with --namespace-name with --resource-group)\nGet a single consumer group by name (using --consumer-group-name with --eventhub-name with --namespace-name with --resource-group)\nWhen retrieving a single consumer group, detailed information including SKU, settings, and metadata is returned. When listing multiple consumer groups, basic information is returned for all consumer groups in the specified resource. \n\n### Timeline\n\nOctober 2025", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-EventHubs", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/547" + }, + { + "IssueNumber": 561, + "Title": "[TELEMETRY][Azure MCP] Add a way for telemetry to detect dev-builds", + "Body": "Title: [TELEMETRY][Azure MCP] Add a way for telemetry to detect dev-builds\n\nTelemetry data has some bad data like \u0022NO TOOL\u0022 \u0022MY-TOOL-1\u0022 \u0022MY-TOOL-2\u0022 \u0022GOOD BUILD-4\u0022 from devs building and running locally.\n\nLet\u0027s add a way to easily detect and filter non-official builds.\n\nConsider:\n* Using appsettings to determine if we should set up telemetery. (i.e. \u0060appsettings.{Development}.json\u0060)\n* Checking if it is a debug build\n* #737 is another option.", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Telemetry", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/561" + }, + { + "IssueNumber": 573, + "Title": "[Tool Description] Improve Cloud Architect tool description for better LLM selection", + "Body": "Title: [Tool Description] Improve Cloud Architect tool description for better LLM selection\n\nEnhance the tool description for Cloud Architect to get a confidence score of \u003E0.4. It currently has a confidence score of 0.2-0.3", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-cloudarchitect", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/573" + }, + { + "IssueNumber": 727, + "Title": "[BUG] \u0060ExecuteSingleResourceQueryAsync\u0060 regression", + "Body": "Title: [BUG] \u0060ExecuteSingleResourceQueryAsync\u0060 regression\n\n### Describe the bug\n\nThe signature for \u0060ExecuteSingleResourceQueryAsync\u0060 was changed on [PR #607](https://github.com/microsoft/mcp/pull/607/files#diff-90873735813f341180ede934ed060e63a185c05391f34dfe13efc4f38ffc4dacR89) by adding an additional parameter \u0060tableName\u0060 in the middle of other parameters. This change broke tools that were passing other values in the place that this new parameter is using.\n\n### Fix\nTo fix this, we just have to specify the parameter name we\u0027re using on all the references.\n\n### Known Impact:\n\n- [x] AppConfig: FindAppConfigStore\n- [ ] EventHubs: GetNamespaceAsync\n- [ ] ACR: GetRegistry\n\n### Expected behavior\n\nThe query sent to the request should be valid.\n\n### Actual behavior\n\nBad request error\n\n### Reproduction Steps\n\nRun the Live Tests\n\n### Environment\n\n_No response_", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Core", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/727" + }, + { + "IssueNumber": 737, + "Title": "Use \u0022unreleased\u0022 for MCP server version dev builds", + "Body": "Title: Use \u0022unreleased\u0022 for MCP server version dev builds\n\nWhen we are testing/running dev builds, the server version number (0.8.6) implies that the client has been released. It pollutes our telemetry. \n\nSuggestion is to update the version number to suggest that it is a test build. Similar to how Java has: \u0022SNAPSHOT\u0022. So, 0.8.6-SNAPSHOT or some differentiator (i.e. -alpha, etc.)\n\nRelated #561", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Telemetry", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/737" + }, + { + "IssueNumber": 824, + "Title": "[BUG] User confirmation (elicitation) is no longer working in v0.9.x", + "Body": "Title: [BUG] User confirmation (elicitation) is no longer working in v0.9.x\n\n### Describe the bug\n\nhttps://github.com/microsoft/mcp/pull/704/files seems to have introduced a regression, breaking the v0.8.2 user confirmation feature.\n\n### Expected behavior\n\nExpected :\n\n\u003Cimg width=\u0022459\u0022 height=\u0022476\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/84697817-14e4-4630-ae25-f42482095147\u0022 /\u003E\n\n### Actual behavior\n\n-\n\n### Reproduction Steps\n\n-\n\n### Environment\n\n-", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Core", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/824" + }, + { + "IssueNumber": 825, + "Title": "Improve the installation experience", + "Body": "Title: Improve the installation experience\n\nWhen I install the MCP server for Playwrite, there is a nice little button that enables a VS Code install.\n\n\u003Cimg width=\u0022467\u0022 height=\u0022251\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/87879daa-68f8-4da6-b43c-4101f03bbc23\u0022 /\u003E\n\nCould you make the installation process for this MCP to be the same. a simple click of a button on the Readme page.", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Setup", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/825" + }, + { + "IssueNumber": 841, + "Title": "[BUGBASH] Azure MCP tenant is in a weird state", + "Body": "Title: [BUGBASH] Azure MCP tenant is in a weird state\n\n### Describe the bug\n\nAzure MCP is using my TME tenant rather than my normal tenant and I\u0027m not sure how it got there or how to get it reset.\n\nThis is what \u0060az account show\u0060 shows, and this is my desired tenant (starts with \u006072f988bf\u0060):\n\u0060\u0060\u0060\nPS D:\\git\\zava\\ZavaDev\u003E az account show\n{\n \u0022environmentName\u0022: \u0022AzureCloud\u0022,\n \u0022homeTenantId\u0022: \u002272f988bf-86f1-41af-91ab-2d7cd011db47\u0022,\n \u0022id\u0022: \u00224feebfc0-ddbe-4bc2-802c-0ae0c40517d0\u0022,\n \u0022isDefault\u0022: true,\n \u0022managedByTenants\u0022: [],\n \u0022name\u0022: \u0022charris-demosub\u0022,\n \u0022state\u0022: \u0022Enabled\u0022,\n \u0022tenantDefaultDomain\u0022: \u0022microsoft.onmicrosoft.com\u0022,\n \u0022tenantDisplayName\u0022: \u0022Microsoft\u0022,\n \u0022tenantId\u0022: \u002272f988bf-86f1-41af-91ab-2d7cd011db47\u0022,\n \u0022user\u0022: {\n \u0022name\u0022: \u0022charris@microsoft.com\u0022,\n \u0022type\u0022: \u0022user\u0022\n }\n}\n\u0060\u0060\u0060\n\nUsing Azure MCP tools in Copilot CLI I get this:\n\n\u003Cimg width=\u00221192\u0022 height=\u0022406\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/436c7933-aa10-4db7-9eb0-10f9f0de768a\u0022 /\u003E\n\nIn VS Code I\u0027m able to change my tenant, but that\u0027s using tools from GHCP4A extension.\n\n### Expected behavior\n\nThere is some way to change my tenant - probably just using \u0060az\u0060 cli and letting azmcp default to using the same tenant.\n\n### Actual behavior\n\nAzmcp got switch to an alternate tenant and I have no idea how to get it switched back.\n\n### Reproduction Steps\n\nI\u0027m not sure how it got in this state.\n\n### Environment\n\nWindows 11\nVS Code Insiders latest\nCopilot CLI latest", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Core", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/841" + }, + { + "IssueNumber": 843, + "Title": "Generate help content for each individual commands", + "Body": "Title: Generate help content for each individual commands\n\nProvide rich help content back to LLM when it is predictable that current tool call will fail.\n\nFind a way to automatically generate help content for each existing command.", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Core", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/843" + }, + { + "IssueNumber": 844, + "Title": "[ONBOARD] Additional Foundry tools for Ignite timeframe", + "Body": "Title: [ONBOARD] Additional Foundry tools for Ignite timeframe\n\n### Service / Tool Name\n\nFoundry\n\n### Contacts\n\nChunan Ye (chuye), Vinay Gera (vigera), Hanchi Wang (hancwang)\n\n### Intended Agent Scenarios\n\nThe tools need to support two scenarios\n1. Perform operations on Azure AI Foundry resources that are necessary for the most basic AI Foundry Agent usecase\n2. Vibe code an client application that can interact with an AI Foundry Agent using Azure SDK AI package for Python, C# and JavaScript. For example, [python package](https://github.com/Azure/azure-sdk-for-python/tree/main/sdk/ai/azure-ai-agents)\n\nProposed new tools:\n- [x] \u0060azmcp foundry agents create\u0060: Create an AI Foundry agent from scratch in an existing AI Foundry project. The verb \u0027create\u0027 can be debated on. One reason to not use the word \u0027deploy\u0027 is that there is another concept of transforming an Agent Framework based agent to an AI Foundry Agent and that process uses the word \u0027deploy\u0027 to describe the action. [dotnet SDK create agent](https://github.com/Azure/azure-sdk-for-net/tree/main/sdk/ai/Azure.AI.Agents.Persistent#create-an-agent)\n- [x] \u0060azmcp foundry agents get-sdk-sample\u0060: Returns instructions and code samples on how to use the Azure SDK AI library to interact with an AI Foundry Agent. This tool needs to support Python, C# and JavaScript.\n- [x] \u0060azmcp foundry thread create\u0060: Create a thread in an AI Foundry project. [dotnet SDK create thread](https://github.com/Azure/azure-sdk-for-net/tree/main/sdk/ai/Azure.AI.Agents.Persistent#create-thread)\n- [x] \u0060azmcp foundry thread list\u0060: List threads. [dotnet SDK list threads](https://github.com/Azure/azure-sdk-for-net/blob/a93a3d94f74eb5e0d131d79c44d109d0a55bd2d4/sdk/ai/Azure.AI.Agents.Persistent/src/Custom/Threads.cs#L142)\n- [x] \u0060azmcp foundry thread get-messages\u0060: Get messages from a thread [dotnet SDK get messages from thread](https://github.com/Azure/azure-sdk-for-net/tree/main/sdk/ai/Azure.AI.Agents.Persistent#retrieve-messages)\n\n### Timeline\n\nNovember 2025 (Ignite)", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Foundry", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/844" + }, + { + "IssueNumber": 866, + "Title": "[BUG] azcmp-commands.md autogeneration incorrect for bash code snippets", + "Body": "Title: [BUG] azcmp-commands.md autogeneration incorrect for bash code snippets\n\n### Describe the bug\n\nThe autogeneration (is it autogenerated?) aren\u0027t correctly putting individual bash code snippets into their own backticks. \n\n\u003Cimg width=\u00221066\u0022 height=\u0022532\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/9456cb02-2aac-4101-b9a3-2fccaa0c8c4d\u0022 /\u003E\n\n### Expected behavior\n\nBackticks are correct\n\n### Actual behavior\n\nBackticks are missing\n\n### Reproduction Steps\n\nView file\n\n### Environment\n\nIn browser", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Core", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/866" + }, + { + "IssueNumber": 870, + "Title": "[BUG] server.json in Azure.Mcp uses the old schema", + "Body": "Title: [BUG] server.json in Azure.Mcp uses the old schema\n\n### Describe the bug\n\nThe MCP Registry has iterated the server.json a couple of times since Azure.Mcp was published to NuGet.org. NuGet.org is about to roll out a change to look for the newer version.\n\nDocs: https://github.com/modelcontextprotocol/registry/blob/main/docs/reference/server-json/generic-server-json.md\nExamples: https://github.com/modelcontextprotocol/registry/blob/main/docs/reference/server-json/generic-server-json.md#examples\n\nThe \u0060$schema\u0060 URI has changed, some properties have been renamed, and the naming convention is camelCase instead of snake_case.\n\nI can make the fix :)\n\n### Expected behavior\n\nThe server.json should use the schema matching the MCP Registry.\n\n\n### Actual behavior\n\nThe server.json does not match the latest schema.\n\n### Reproduction Steps\n\nLook at the latest schema:\nhttps://github.com/modelcontextprotocol/registry/blob/main/docs/reference/server-json/server.schema.json\nCompare this to the server.json\nhttps://github.com/microsoft/mcp/blob/main/eng/dnx/.mcp/server.json\n\n### Environment\n\n_No response_", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-NuGet", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/870" + }, + { + "IssueNumber": 873, + "Title": "[BUG] Sampling requests for tool selection should specify a low-cost LLM", + "Body": "Title: [BUG] Sampling requests for tool selection should specify a low-cost LLM\n\n### Describe the bug\n\nIn namespace mode, sampling is used to map the user\u0027s intent to one of a set of base tools. The MCP protocol allows sampling requests to specify preferences for the language model to use but we currently leave this blank; we\u0027ll end up with whatever model is the default determined by the client. It is possible this goes to an expensive model (consuming the user\u0027s tokens/time) when a lower cost or free model would work just as well.\n\n### Expected behavior\n\nWhen used for tool selection, sampling requests should specify free (\u00220x\u0022) or low-cost models.\n\n### Actual behavior\n\nSampling requests do not specify any preferred LLM models.\n\n### Reproduction Steps\n\nRun Azure MCP in the default (namespace) mode and run a prompt that will invoke sampling.\n\n### Environment\n\n_No response_", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Core", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/873" + }, + { + "IssueNumber": 884, + "Title": "[BUGBASH] \u0060azmcp server start\u0060 hangs (should print \u0060Running...\u0060)", + "Body": "Title: [BUGBASH] \u0060azmcp server start\u0060 hangs (should print \u0060Running...\u0060)\n\n### Describe the bug\n\nRan \u0060azmcp server start\u0060 in VSCode\u0027s integrated pwsh terminal and it seemed to just hang.\n\n### Expected behavior\n\nExpected the command to complete and/or provide a message about the mcp server status and next steps.\n\n### Actual behavior\n\nThe command just hung for several minutes until I hit ctrl \u002B c: \n\n\u003Cimg width=\u0022793\u0022 height=\u002290\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/5ca46895-d4c9-4439-9d60-6f28a5581823\u0022 /\u003E\n\n### Reproduction Steps\n\nRun:\n\n\u003Cimg width=\u0022793\u0022 height=\u002290\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/ebad5c6a-7424-4b81-b1fa-ed59c612ae82\u0022 /\u003E\n\n### Environment\n\nWindows 11\n\nVSCode 1.1.05.0", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Core", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/884" + }, + { + "IssueNumber": 1001, + "Title": "[Remote] Add threat model diagram and content for remote self hosted scenario", + "Body": "Title: [Remote] Add threat model diagram and content for remote self hosted scenario\n\nAdd threat model diagram and content for remote self hosted scenario\n\nAdditionally add blurb to : https://github.com/microsoft/mcp-pr/blob/docs/docs/azure-mcp/threat-model.md", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "remote-mcp", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/1001" + }, + { + "IssueNumber": 1004, + "Title": "Include Tool GUID in telemetry", + "Body": "Title: Include Tool GUID in telemetry\n\nInclude the GUID of the called tool when sending telemetry", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Telemetry", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/1004" + }, + { + "IssueNumber": 1064, + "Title": "[CONSOLIDATED] The prompts for \u0060install_azure_cli_extensions\u0060 did not trigger the corresponding tools as expected.", + "Body": "Title: [CONSOLIDATED] The prompts for \u0060install_azure_cli_extensions\u0060 did not trigger the corresponding tools as expected.\n\n**Description:**\nIn \u0060consolidated\u0060 mode, when testing prompts related to the \u0060install_azure_cli_extensions\u0060 tool, all prompts do not trigger the corresponding tool as expected, as shown below:\n- Test Prompt: \u0060Get Azure CLI installation instructions\u0060\n\u003Cimg width=\u0022816\u0022 height=\u0022656\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/3f0075f5-379f-49f4-baca-999149084a09\u0022 /\u003E\n\n- Test Prompt: \u0060How to install azd\u0060\n\u003Cimg width=\u0022816\u0022 height=\u0022510\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/44ce107b-5348-4d75-aa21-c93a2705061f\u0022 /\u003E\n\n- Test Prompt: \u0060What is Azure Functions Core tools and how to install it\u0060\n\u003Cimg width=\u0022816\u0022 height=\u0022693\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/70c8390e-8142-4768-ab56-bd0131f4712a\u0022 /\u003E\n\n**Steps to Reproduce:**\n1. Start mcp server in \u0060consolidated\u0060 mode.\n2. Open GitHub Copilot in VS Code and [switch to Agent mode](https://code.visualstudio.com/docs/copilot/chat/chat-agent-mode).\n3. Click Refresh on the tools list, and select the \u0060Built-in\u0060, \u0060Extension: Github Copilot for Azure\u0060, \u0060github MCP server\u0060 and \u0060MCP Server: Azure MCP\u0060.\n4. Enter test prompts \u0060Get Azure CLI installation instructions\u0060, \u0060How to install azd\u0060, \u0060What is Azure Functions Core tools and how to install it\u0060.\n\n**Environment:**\n\n- OS: Windows.\n- Vscode Version: 1.105.1\n- GitHub Copilot Chat Version: 0.32.4\n- Large Language Model: **Claude Sonnet 4.5**\n- Virtual Tool: On\n- Azure MCP Server: **1.0.0**\n\n\n**Expected Behavior:**\nThese prompts can successfully trigger the expected \u0060install_azure_cli_extensions\u0060 tool.\n\n@joshfree for notification", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Core", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/1064" + }, + { + "IssueNumber": 1079, + "Title": "[BUG] If subscription_list tool called, copilot only uses first response instead of user prompting or other defaults", + "Body": "Title: [BUG] If subscription_list tool called, copilot only uses first response instead of user prompting or other defaults\n\n### Describe the bug\n\nI\u0027m not 100% that this isue is the Azure MCP or copilot in general.\nI\u0027m seeing frequent cases where copilot does not know what subscription is needed and looks for it via the Azure MCP subscription_list tool. This returns a list of subscriptions correctly. At this point Copilot will typically pick the first subscription which might be quite often incorrect.\n\u003Cimg width=\u0022547\u0022 height=\u0022788\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/83a908d7-9cd5-4b8b-bf06-5566fa142b24\u0022 /\u003E\n\n### Expected behavior\n\nIf a subscription needed is unknown, it should do one of the following:\n- Determine if there is a default subscription somewhere.\n - Could use get_auth_context from GithubCopilotForAzure extension to see which subscriptions are selected. (Doesn\u0027t usually do this)\n - Run az cli command to determine with subscription is default there.\n- Ask for user input after grabbing the list of subscriptions.\n\n### Actual behavior\n\nCopilot gets the list of subscriptions from the tool subscription_list. It picks the first one and continues the prompt using that subscription. The first subscription often changes. I\u0027ve seen it be 4 different subscriptions out of my ~50.\n\nOccasionally at the end of the prompt it will ask if the user wants to check other subscriptions, but this is infrequent, especially if the prompt finds results.\n\n### Reproduction Steps\n\nIn a new conversation type a prompt to search for a resource type. Such as:\n- List all container apps in my subscription:\n- Show me my regis resources.\n\nGithubCopilotForAzure-Testing can be enabled or disabled. It will occasionally use ARG to search if enabled instead.\n\n### Environment\n\nVSCode Stable 1.105.1\nMCP Server 20251104.1\nWindows 11", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-ARM", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/1079" + }, + { + "IssueNumber": 1148, + "Title": "[BUG] ICosmosService should implement IAsyncDisposable instead of IDisposable", + "Body": "Title: [BUG] ICosmosService should implement IAsyncDisposable instead of IDisposable\n\n### Describe the bug\n\nCosmosService.Dispose is currently an \u0060async void\u0060 which is an anti-pattern since the work cannot be awaited on by callers. [The async code is needed for its cache clearing.](https://github.com/microsoft/mcp/blob/8cf339f84c10406a39f947d874545801531c766b/tools/Azure.Mcp.Tools.Cosmos/src/Services/CosmosService.cs#L341)\n\n### Expected behavior\n\nICosmosService should implement IAsyncDisposable instead of IDisposable\n\n### Actual behavior\n\nCosmosService.Dispose is currently an \u0060async void\u0060 which is an anti-pattern since the work cannot be awaited on by callers. [The async code is needed for its cache clearing.](https://github.com/microsoft/mcp/blob/8cf339f84c10406a39f947d874545801531c766b/tools/Azure.Mcp.Tools.Cosmos/src/Services/CosmosService.cs#L341)\n\n### Reproduction Steps\n\nNone\n\n### Environment\n\n_No response_", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-CosmosDB, remote-mcp", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/1148" + }, + { + "IssueNumber": 116, + "Title": "Feature: Azure AI tools need to check for Copilot Tenant Admin setting", + "Body": "Title: Feature: Azure AI tools need to check for Copilot Tenant Admin setting\n\nGHCP4A checks for Copilot allowed setting in azure tenant before allowing tools that use AI.\n\nAzure MCP should check and honor that setting as well.\n\nNote, this can be circumvented by Copilot using azure cli tools.", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Core", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/116" + }, + { + "IssueNumber": 1202, + "Title": "Ability to Deploy Azure MCP Server as a Remote Server as an Azure Function or in an App Service", + "Body": "Title: Ability to Deploy Azure MCP Server as a Remote Server as an Azure Function or in an App Service\n\nThe ability to deploy the Azure MCP server following patterns we have already established would be very beneficial. We already have several MCP servers running as Azure Functions and we have found it to be a great way to host remote MCP servers and Agents particularly when one instance will do.", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "remote-mcp", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/1202" + }, + { + "IssueNumber": 1292, + "Title": "Migrate Azure.Mcp.Tools.Marketplace.LiveTests LiveTests to Recorded Tests", + "Body": "Title: Migrate Azure.Mcp.Tools.Marketplace.LiveTests LiveTests to Recorded Tests\n\nMigrate tests within tools/Azure.Mcp.Tools.Marketplace/tests/Azure.Mcp.Tools.Marketplace.LiveTests/Azure.Mcp.Tools.Marketplace.LiveTests.csproj to recordings. Utilize copilot to assist with the migration process for Azure.Mcp.Tools.Marketplace.LiveTests.\r\n - For additional guidance check [the recorded tests document](https://github.com/microsoft/mcp/blob/main/docs/recorded-tests.md)\r\n\r\nThis task will be considered complete when the livetests can be invoked without the presence of a .testsettings.json file.\r\n\r\nSubmit a PR with your change and verify that the recorded tests are running in the [recorded test step](https://dev.azure.com/azure-sdk/internal/_build/results?buildId=5627747\u0026view=logs\u0026jobId=1e679852-4871-5dae-dd38-eb073eb853d4\u0026j=1e679852-4871-5dae-dd38-eb073eb853d4\u0026t=2f22000c-4a69-5b6e-fbac-d06c3b6f57da)", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Marketplace", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/1292" + }, + { + "IssueNumber": 1294, + "Title": "Migrate Azure.Mcp.Tools.Postgres.LiveTests LiveTests to Recorded Tests", + "Body": "Title: Migrate Azure.Mcp.Tools.Postgres.LiveTests LiveTests to Recorded Tests\n\nMigrate tests within tools/Azure.Mcp.Tools.Postgres/tests/Azure.Mcp.Tools.Postgres.LiveTests/Azure.Mcp.Tools.Postgres.LiveTests.csproj to recordings. Utilize copilot to assist with the migration process for Azure.Mcp.Tools.Postgres.LiveTests.\r\n - For additional guidance check [the recorded tests document](https://github.com/microsoft/mcp/blob/main/docs/recorded-tests.md)\r\n\r\nThis task will be considered complete when the livetests can be invoked without the presence of a .testsettings.json file.\r\n\r\nSubmit a PR with your change and verify that the recorded tests are running in the [recorded test step](https://dev.azure.com/azure-sdk/internal/_build/results?buildId=5627747\u0026view=logs\u0026jobId=1e679852-4871-5dae-dd38-eb073eb853d4\u0026j=1e679852-4871-5dae-dd38-eb073eb853d4\u0026t=2f22000c-4a69-5b6e-fbac-d06c3b6f57da)", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Postgres", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/1294" + }, + { + "IssueNumber": 1400, + "Title": "Display warning message during install/first setup of Azure MCP extension when organizational policies are set to disable mcp", + "Body": "Title: Display warning message during install/first setup of Azure MCP extension when organizational policies are set to disable mcp\n\nWhen organizational policies are disabled or not set in github, the enablement of mcp servers are set to disable by default.\n\n\u003Cimg width=\u00221389\u0022 height=\u0022701\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/7f6898c5-ce38-4be9-b170-bfb89eff78e0\u0022 /\u003E\n\nThe Policy Diagnostics viewer in VSCode shows -\n| chat_preview_features_enabled | false |\n| chat_agent_enabled | true |\n**| mcp | false |**\n\nWhen users install the Azure MCP, we need a way of displaying a warning via toast notification or other ways to alert the user on this behavior -\n\nSample message \u0022Your organizational policies have MCP servers disabled. Please contact admin for access\u0022 or something to that effect. @charris-msft please feel free to suggest appropriate verbiage\n\nHere\u0027s an example of what VSCode does today to display organization level setting -\n\n\u003Cimg width=\u00221899\u0022 height=\u0022992\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/52f3dade-20e1-4bbc-947b-f4556bddd819\u0022 /\u003E\n\nCC: @g2vinay , @joshfree , @charris-msft", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-VSIX", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/1400" + }, + { + "IssueNumber": 184, + "Title": "[ONBOARD] Virtual Machines", + "Body": "Title: [ONBOARD] Virtual Machines\n\n### Service / Tool Name\n\nAzure.VirtualMachines\n\n### Contacts\n\nTBD\n\n### Intended Agent Scenarios\n\n\n\nHere\u0027s the set of commands exposed by the Virtual Machines VS Code extension. This is a great place to get started on potential capabilities/scenarios to support.\n\n## \uD83D\uDEE0\uFE0F Create \u0026 Setup\n- Create Virtual Machine \n- Create Virtual Machine (Advanced) \n- Add SSH Key \n\n## \u2699\uFE0F Configure \u0026 Manage\n- Copy IP Address \n- Report Issue \n\n## \uD83D\uDD0C Access\n- Connect to Host via Remote SSH \n\n## \uD83D\uDD04 Update \u0026 Maintain\n- Delete \n- Restart \n- Start \n- Stop \n\n\n### Timeline\n\nTBD", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-VirtualDesktop", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/184" + }, + { + "IssueNumber": 189, + "Title": "Add command: azmcp [startups] [guidance] [get]", + "Body": "Title: Add command: azmcp [startups] [guidance] [get]\n\n### Service / Tool Name\n\nStartups.Guidance\n\n### Contacts\n\nSophia Lin (t-sophlin)\n\n### Intended Agent Scenarios\n\nThe Startups team is creating a guidance command to introduce startup developers to Microsoft for Startups, what we offer, and provide a link to startups.microsoft.com. \n\n### Timeline\n\nJuly 2025", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Startups", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/189" + }, + { + "IssueNumber": 251, + "Title": "[Tool Description] Improve Grafana tool description for better LLM selection", + "Body": "or creating dashboard content - this tool manages the Grafana service instances themselves. This tool is a hierarchical MCP command router where sub-commands are routed to MCP servers that require specific fields inside the \u0022parameters\u0022 object. To invoke a command, set \u0022command\u0022 and wrap its arguments in \u0022parameters\u0022. Set \u0022learn=true\u0022 to discover available sub-commands for different Grafana workspace operations. Note that this tool requires appropriate Azure permissions to access Grafana workspace resources.\r\n\u0060\u0060\u0060\r\n\r\n## Acceptance Criteria\r\n- [ ] Update tool description to include clear usage guidance\r\n- [ ] Explain Azure Managed Grafana context and relationship to other monitoring tools\r\n- [ ] Clarify when NOT to use this tool (vs other monitoring tools)\r\n- [ ] Detail the specific workspace management operations available\r\n- [ ] Fix formatting issues\r\n- [ ] Achieve confidence score \u22650.5 in tool selection testing\r\n\r\n**Related:** Tool description review for improved LLM selection accuracy", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Grafana", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/251" + }, + { + "IssueNumber": 258, + "Title": "[Tool Description] Improve Redis Cache tool description for better LLM selection", + "Body": "Title: [Tool Description] Improve Redis Cache tool description for better LLM selection\n\n## Problem\r\n\r\nThe current Redis Cache tool description is functional but lacks the detail and clarity needed for optimal LLM tool selection. Estimated confidence score of ~0.5-0.6 (at target but could be improved for better precision).\r\n\r\n**Current Description Issues:**\r\n- Missing usage guidance (when to use vs when not to use)\r\n- Limited context about Redis caching use cases\r\n- Poor parameter explanation\r\n- Missing performance and caching scenario context\r\n- Formatting issues (missing space after period)\r\n- No mention of typical Redis data structures or operations\r\n\r\n## Current Description\r\n\u0060\u0060\u0060\r\nRedis Cache operations - Commands for managing Azure Redis Cache and Azure Managed Redis resources. Includes operations for listing cache instances, managing clusters and databases, configuring access policies, and working with both traditional Redis Cache and Managed Redis services.This tool is a hierarchical MCP command router. Sub commands are routed to MCP servers that require specific fields inside the \u0022parameters\u0022 object. To invoke a command, set \u0022command\u0022 and wrap its args in \u0022parameters\u0022. Set \u0022learn=true\u0022 to discover available sub commands.\r\n\u0060\u0060\u0060\r\n\r\n## Suggested Improvement\r\n\u0060\u0060\u0060\r\nRedis Cache operations - Commands for managing Azure Redis Cache and Azure Managed Redis instances used for high-performance caching, session storage, and in-memory data operations. Use this tool when you need to list Redis cache instances, manage cache clusters and databases, configure access policies, monitor cache performance, or work with Redis caching infrastructure for application performance optimization. This tool supports both traditional Azure Redis Cache and the newer Azure Managed Redis services for scalable caching scenarios. Do not use this tool for persistent database storage, complex relational queries, document storage, or long-term data retention - Redis is optimized for fast, temporary caching and in-memory operations. This tool is a hierarchical MCP command router where sub-commands are routed to MCP servers that require specific fields inside the \u0022parameters\u0022 object.", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Redis", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/258" + }, + { + "IssueNumber": 275, + "Title": "[ONBOARD] Network Copilot service", + "Body": "Title: [ONBOARD] Network Copilot service\n\n### Service / Tool Name\n\nNetwork Copilot\n\n### Contacts\n\niancrhudson\n\n### Intended Agent Scenarios\n\nNetwork Copilot is an Azure service that runs diagnosis and performs analysis for networking resources and issues. There are two scenarios we want to onboard:\n1. Resource issue analysis. Performs diagnostics on a network resource such as vnets, nics, or public ips.\n2. Connectivity analysis. Analyzes the configuration of a network topology to check if the network policies allow or disallow traffic between Azure network resources\n\nMore examples of Network Copilot can be found here: [Design, troubleshoot, and secure networks using Microsoft Copilot in Azure | Microsoft Learn](https://learn.microsoft.com/en-us/azure/copilot/network-management#respond-to-network-connectivity-troubleshooting-and-service-diagnostics-queries)\n\n\n### Timeline\n\nAug 2025", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-CopilotNetwork", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/275" + }, + { + "IssueNumber": 297, + "Title": "azmcp-messaging-eventgrid-events-publish", + "Body": "Title: azmcp-messaging-eventgrid-events-publish\n\n\u0060azmcp-messaging-eventgrid-events-publish\u0060 - Publish custom events to Event Grid topics for event-driven architectures. This tool sends structured event data to Event Grid topics with schema validation and delivery guarantees for downstream subscribers. Returns publish operation status. Requires topic-name, event-data, and optional event-schema. - Suggested prompt: \u0022Publish an event with data \u003Cevent-data\u003E to Event Grid topic \u003Ctopic-name\u003E\u0022", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-EventGrid", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/297" + }, + { + "IssueNumber": 306, + "Title": "Issue with Subscription Tools in MCP Server Default Mode", + "Body": "Title: Issue with Subscription Tools in MCP Server Default Mode\n\nHello,\nI\u0027m encountering an issue with the subscription tools when running the MCP server in default mode. Here\u0027s what I did:\n\nDownloaded the repository.\nCompiled the AzureMcp.Cli.csproj.\nAdded the resulting .exe to the mcp.json configuration.\nAttached a debugger to the process.\n\nWhen I attempted to generate a KQL query using the Kusto MCP via the full azmcp.exe, the operation failed due to a missing subscription ID. It seems that the subscription tool isn\u0027t being properly invoked in default mode.\nInterestingly, when I ran the MCP server in all mode, which exposes each individual tool, everything worked as expected\u2014I was able to see and use the subscription tool. This suggests that in default mode, the subscription tool might be hidden or not properly exposed due to command grouping.\nCould this be a configuration issue or a limitation in how tools are surfaced in default mode?", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Core", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/306" + }, + { + "IssueNumber": 318, + "Title": "Add \u0060azmcp azuremanagedlustre filesystem importjob create\u0060", + "Body": "Title: Add \u0060azmcp azuremanagedlustre filesystem importjob create\u0060\n\nAdd \u0060azmcp azuremanagedlustre filesystem import-job create\u0060 and required testing and docs.", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-managedlustre", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/318" + }, + { + "IssueNumber": 142, + "Title": "The MCP Server should have debug quality logs", + "Body": "Title: The MCP Server should have debug quality logs\n\nFor live testing, we need to have detailed logs from the MCP Server made available to the test harness.\n\nSeveral options are:\n- Pass an environment variable or parameter to the azmcp cli to enable verbose logging on STDERR.\n- Output logs to a file and let the test attach the log file to the test run", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Observability", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/142" + }, + { + "IssueNumber": 153, + "Title": "Took too long to execute the postgres query using Azure MCP due to auth issues", + "Body": "Title: Took too long to execute the postgres query using Azure MCP due to auth issues\n\nTransferred issue: https://github.com/microsoft/GitHub-Copilot-for-Azure/issues/326#issuecomment-2940841639\n\nI\u0027m wondering if we should default to Entra auth rather than trying to use password auth...\n\nWe need to discuss with the Azure MCP and Postgres teams.\n\nExtension version: 1.0.8\nVS Code version: Code - Insiders 1.101.0-insider (b4912823f452c08e81283d8fd8dd9e758a00f5f4, 2025-05-28T05:45:00.228Z)\nOS version: Windows_NT x64 10.0.26100\nModes:\n\n[extensionData_2025-05-28_15-02-29 (1).md](https://github.com/user-attachments/files/20598591/extensionData_2025-05-28_15-02-29.1.md)", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Core, tools-Postgres", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/153" + }, + { + "IssueNumber": 159, + "Title": "Provide sample prompt templates for users", + "Body": "Title: Provide sample prompt templates for users\n\nSome users have to prompt copilot to specify the target tenant as well along with the subscription to ensure Entra ID token is fetched for the tenant where subscription is hosted in.\n\nThe target tenant and subscription could be prompted to the LLM once and not have to be repeated for each prompt from the user. this is something that we could provide a prompt template for.", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Auth", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/159" + }, + { + "IssueNumber": 475, + "Title": "[BUG] NuGet 0.7.0 README errors", + "Body": "Title: [BUG] NuGet 0.7.0 README errors\n\n### Describe the bug\n\nGood progress from 0.6.0 to 0.7.0 but there are errors that still need to be fixed:\n\n1. Fix the remaining html tags which are incorrectly included and do not render properly\n2. Fix \u201C26\u201D to be \u201C30\u002B\u201D\n3. Make all sentences neutral. Replace all uses of \u201Cyou\u201D/\u201Cyour\u201D with neutral phrasing like \u201Cthe\u201D which is less combative. \n4. Remove contractions from text like \u201Cyou\u2019re\u201D and \u201Cyou\u2019d\u201D. \n\n\n![Image](https://github.com/user-attachments/assets/45023487-9080-4883-89a6-379675ffd502)\n![Image](https://github.com/user-attachments/assets/eeb13a9a-c5bb-465a-a200-7a163d47449c)\n\n### Expected behavior\n\nREADME displays without formatting errors.\n\n### Actual behavior\n\nSee screenshots above\n\n### Reproduction Steps\n\nGo to NuGet.org and search for Azure.MCP\n\nhttps://www.nuget.org/packages/Azure.Mcp\n\n### Environment\n\n_No response_", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-NuGet", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/475" + }, + { + "IssueNumber": 527, + "Title": "Unable to run kusto query", + "Body": "Title: Unable to run kusto query\n\nI am using agent mode and I can see kusto tool enabled. I am trying to run a kusto query with cluster url and database id. Agent is trying to run various az command (like getting an access token, list databases, use a rest endpoint etc) to run kusto query and eventually fails with JSON parsing error.\nIt worked once yesterday and I think it used kusto_query command/tool was able to execute query without running any az commands on terminal. \nWhat am i missing?", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Kusto", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/527" + }, + { + "IssueNumber": 564, + "Title": "Azure MCP Server CLI - ability to list tool metadata", + "Body": "Title: Azure MCP Server CLI - ability to list tool metadata\n\nI would like to be able to get metadata requirements from the CLI such as elicitation is required or not. Is this already in the CLI? \n\nI would also like the server startup options. Is that possible?", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Core", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/564" + }, + { + "IssueNumber": 631, + "Title": "[Azure MCP] Event Hubs CRUD tools", + "Body": "Title: [Azure MCP] Event Hubs CRUD tools\n\nParent Issue for CRUD tools that need to be added for Event Hubs\n\n- [x] [Azure MCP] eventhubs namespace update command\n- [x] [Azure MCP] eventhubs namespace delete command\n- [x] [Azure MCP] eventhubs eventhub get command\n- [x] [Azure MCP] eventhubs eventhub update command\n- [x] [Azure MCP] eventhubs eventhub delete command\n- [x] [Azure MCP] eventhubs consumergroup get command\n- [x] [Azure MCP] eventhubs consumergroup update command \n- [x] [Azure MCP] eventhubs consumergroup delete command", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-EventHubs", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/631" + }, + { + "IssueNumber": 703, + "Title": "[BUG] Unable to run via Docker", + "Body": "Title: [BUG] Unable to run via Docker\n\n### Describe the bug\n\n## Unable to run via Docker\n\n\n\n### Expected behavior\n\nAs per instructions mentioned here : https://github.com/microsoft/mcp/blob/main/servers/Azure.Mcp.Server/README.md\n\nI should be able to run Azure MCP locally in docker\n\n### Actual behavior\n\nerror running in docker\n\n\u0060\u0060\u0060 \ndocker: Error response from daemon: failed to create task for container: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: error during container init: exec: \u0022./azmcp\u0022: permission denied: unknown\n2025-10-04 19:25:15.593 [warning] [server stderr] \n2025-10-04 19:25:15.593 [warning] [server stderr] Run \u0027docker run --help\u0027 for more information\n2025-10-04 19:25:15.599 [info] Connection state: Error Process exited with code 126\n\u0060\u0060\u0060\n\n### Reproduction Steps\n\n### Steps to reproduce\n\n- In VS Code, add a new MCP server as shown below\n\u0060\u0060\u0060\n{\n\t\u0022servers\u0022: {\n\t\t\u0022Azure MCP Server\u0022: {\n\t\t\t\u0022command\u0022: \u0022docker\u0022,\n\t\t\t\u0022args\u0022: [\n\t\t\t\t\u0022run\u0022,\n\t\t\t\t\u0022-i\u0022,\n\t\t\t\t\u0022--rm\u0022,\n\t\t\t\t\u0022--env-file\u0022,\n\t\t\t\t\u0022.env\u0022,\n\t\t\t\t\u0022mcr.microsoft.com/azure-sdk/azure-mcp:latest\u0022\n\t\t\t]\n\t\t}\n\t}\n}\n\u0060\u0060\u0060\n- Start the server\n- The \u0060.env\u0060 has the below format\n\n\u0060\u0060\u0060\nAZURE_CLIENT_ID=xxx\nAZURE_CLIENT_SECRET=xxx\nAZURE_TENANT_ID=xxx\nAZURE_SUBSCRIPTION_ID=xxx\n\n\u0060\u0060\u0060\n\n### Environment\n\nClient:\n Version: 28.4.0\n API version: 1.51\n Go version: go1.24.7\n Built: Wed Sep 3 20:59:40 2025\n OS/Arch: windows/amd64\n Context: desktop-linux\n\nServer: Docker Desktop 4.46.0 (204649)\n Engine:\n Version: 28.4.0\n API version: 1.51 (minimum version 1.24)\n Go version: go1.24.7\n Built: Wed Sep 3 20:57:37 2025\n OS/Arch: linux/amd64\n Experimental: false", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Docker", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/703" + }, + { + "IssueNumber": 735, + "Title": "[BUG] Extend for full coverage E2E tests, livetests and unittests of Azure Managed Lustre", + "Body": "Title: [BUG] Extend for full coverage E2E tests, livetests and unittests of Azure Managed Lustre\n\n### Describe the bug\n\n- Extend the E2E tests of Azure Managed Lustre for full coverage\n- Extend unittests to cover additional cases\n- Extend livetests for additional coverage", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-managedlustre", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/735" + }, + { + "IssueNumber": 811, + "Title": "[BUG] Azure mcp VS Code extension can register duplicate tools", + "Body": "Title: [BUG] Azure mcp VS Code extension can register duplicate tools\n\n### Describe the bug\n\nAzure MCP may appear to have duplicate sets of tools in VS Code. I am not sure if this is an Azure MCP bug or VS Code bug. \n\n\n\n\n\n### Expected behavior\n\nAzure MCP always has one set of its tools in VS Code.\n\n### Actual behavior\n\nI can get it to appear to have arbitrarily many copies of its tools.\n\n### Reproduction Steps\n\nSteps to reproduce:\n\n1. Install Azure MCP Server extension in VS Code\n2. Wait for the tools to load\n3. Disable Azure MCP Server extension. VS Code shows a button to \u0022restart extension\u0022 and click it. Now if I look at the tools in VS Code, Azure MCP has 2 copies of tools under it.\n4. Enable Azure MCP Server extension. Now if I look at the tools in VS Code, Azure MCP has 3 copies of tools under it.\n5. I can repeat the steps above to make arbitrarily many copies of tools show up under Azure MCP.\n\n\u003Cimg width=\u0022711\u0022 height=\u0022488\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/ff2141fc-5151-4713-82b7-53e1bfdadb53\u0022 /\u003E\n\nThis is bizarre but a more pratical way to trigger this bug is to update the extension which naturally disables the extension and restarts it. That\u0027s how I discovered this bug.\n\n### Environment\n\n_No response_", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-VSIX", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/811" + }, + { + "IssueNumber": 855, + "Title": "\u0060azmcp_sql_server_firewall-rule_list\u0060 returns empty list despite existing firewall rules", + "Body": "Title: \u0060azmcp_sql_server_firewall-rule_list\u0060 returns empty list despite existing firewall rules\n\n**Description:**\nWhen entering the test prompt \u0060List all firewall rules for SQL server \u003Cserver_name\u003E\u0060, the tool returns an empty list (\u201CNo firewall rules configured\u201D). However, the Azure Portal shows that multiple firewall rules are configured for the SQL server, and querying via Azure CLI also displays these rules. The actual query results from the tool are inconsistent with the firewall rules shown in the Portal and CLI.\n\u003Cimg width=\u0022593\u0022 height=\u0022553\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/881507dd-f7e1-4751-acd6-59a151c0c733\u0022 /\u003E\n\u003Cimg width=\u0022896\u0022 height=\u0022639\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/7f02ffd0-b3b0-4a14-8f38-c6ca16c76c39\u0022 /\u003E\n\u003Cimg width=\u00221290\u0022 height=\u0022715\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/e3fe8a9c-36ca-4774-be85-cc6dbb1702f2\u0022 /\u003E\n\n**Steps to Reproduce:**\n1. Start mcp server in \u0060namespaces\u0060 mode.\n2. Open GitHub Copilot in VS Code and [switch to Agent mode](https://code.visualstudio.com/docs/copilot/chat/chat-agent-mode).\n3. Click Refresh on the tools list, and select the \u0060Built-in\u0060, \u0060Extension: Github Copilot for Azure\u0060, \u0060MCP Server: Microsoft Docs\u0060 and \u0060MCP Server: Azure MCP\u0060.\n4. Enter test prompts \u0060List all firewall rules for SQL server \u003Cserver_name\u003E\u0060, \u0060Show me the firewall rules for SQL server \u003Cserver_name\u003E\u0060, \u0060What firewall rules are configured for my SQL server \u003Cserver_name\u003E?\u0060,\n\n**Environment:**\n\n- OS: Windows.\n- Vscode Version: 1.105.0\n- GitHub Copilot Chat Version: 0.32.1\n- Large Language Model: GPT-4.1\n- Virtual Tool: Off\n- Azure MCP Server: 0.9.0 and 0.9.3\n\n**Expected Behavior:**\nThe tool should return a list of all firewall rules configured on the SQL server.\n\n@joshfree for notification.", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-SQL", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/855" + }, + { + "IssueNumber": 862, + "Title": "Tool incorrectly requests Azure AI Foundry endpoint instead of project endpoint", + "Body": "Title: Tool incorrectly requests Azure AI Foundry endpoint instead of project endpoint\n\n**Description:**\nWhen entering prompts to list agents, knowledge indexes, or model deployments in my AI Foundry project, the tool asks for the Azure AI Foundry service endpoint URL. However, providing the service endpoint results in a \u0022Resource not found\u0022 error as follow:\n\u003Cimg width=\u0022686\u0022 height=\u0022684\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/af187d4d-04bc-4e91-b8ca-cbd88d3b2dca\u0022 /\u003E\n\nOnly the Azure AI Foundry project endpoint (e.g., https://\u003Cresource-name\u003E.services.ai.azure.com/api/projects/\u003Cproject-name\u003E) is valid as follow:\n\u003Cimg width=\u0022642\u0022 height=\u0022375\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/5228c84a-d1ee-4d22-8550-361abd8aca56\u0022 /\u003E\n\n**Steps to Reproduce:**\n1. Start mcp server in \u0060namespaces\u0060 mode.\n2. Open GitHub Copilot in VS Code and [switch to Agent mode](https://code.visualstudio.com/docs/copilot/chat/chat-agent-mode).\n3. Click Refresh on the tools list, and select the \u0060Built-in\u0060, \u0060Extension: Github Copilot for Azure\u0060, \u0060MCP Server: Microsoft Docs\u0060 and \u0060MCP Server: Azure MCP\u0060.\n4. Enter test prompts \u0060List all agents in my AI Foundry project\u0060, \u0060Show me the available agents in my AI Foundry project\u0060, \u0060List all knowledge indexes in my AI Foundry project\u0060, \u0060Show me the knowledge indexes in my AI Foundry project\u0060, \u0060Show me all AI Foundry model deployments\u0060\n\n**Environment:**\n\n- OS: Windows.\n- Vscode Version: 1.105.0\n- GitHub Copilot Chat Version: 0.32.1\n- Large Language Model: GPT-4.1\n- Virtual Tool: Off\n- Azure MCP Server: 0.9.0 and 0.9.3\n\n**Expected Behavior:**\nTool request parameters should describe the Azure AI Foundry project endpoint rather than the Azure AI Foundry service endpoint.\n\n@joshfree for notification.", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Foundry", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/862" + }, + { + "IssueNumber": 890, + "Title": "[BESTPRACTICES] \u0060azd init\u0060 is init\u0027ing an ACA project when App Service is desired", + "Body": "Title: [BESTPRACTICES] \u0060azd init\u0060 is init\u0027ing an ACA project when App Service is desired\n\n### Describe the bug\n\nApp Service was requested for deploying a new app to Azure.\nCopilot ran \u0060azd init\u0060 to initialize the project, but \u0060azd init\u0060 only supports container apps (ACA) currently.\n\n\u003Cimg width=\u00221919\u0022 height=\u00222083\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/a0200dd1-4c9d-44a9-a315-3cbcaa641431\u0022 /\u003E\n\nSo copilot then rewrote the azure.yaml and bicep files to use App Service instead:\n\n\u003Cimg width=\u00221919\u0022 height=\u00222083\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/71d6924f-8e6a-4881-9c36-079f816b4bfd\u0022 /\u003E\n\nIt would have been faster and more straight forward if Copilot had just generated the files instead of using \u0060azd init\u0060.\n\n### Expected behavior\n\nCopilot would just generate the necessary azd and bicep files rather than relying on \u0060azd init\u0060.\n\nWe should update the best practices to tell copilot to generate files instead of using \u0060azd init\u0060.\n\n### Actual behavior\n\nCopilot may call \u0060azd init\u0060 when it\u0027s not appropriate.\n\n### Reproduction Steps\n\n1. agent mode in vs code\n2. enable ghcp4a \u0026 azure mcp \u0026 built-in tools\n3. tell Copilot you want to deploy a simple flask app to app service on azure\n\n### Environment\n\nWindows 11\nLatest VS Code Insiders\nCurrent extension versions", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-BestPractices", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/890" + }, + { + "IssueNumber": 973, + "Title": "[Remote] Manual test integration for remote mcp server", + "Body": "Title: [Remote] Manual test integration for remote mcp server\n\nThe manual tests should exercise the following -\n\n- [ ] server configuration works fine\n- [ ] auth works fine - managed identity and OBO\n- [ ] tool configuration and call works fine\n- [ ] deploy using azd\n- [ ] load testing \n- [ ] end to end - you may need to coordinate with Abe on this", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "remote-mcp", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/973" + }, + { + "IssueNumber": 1041, + "Title": "Identify the appropriate CLI tool based on Aspire version", + "Body": "Title: Identify the appropriate CLI tool based on Aspire version\n\n**Description**\nWhen a developer is working with Aspire framework, make sure the CLI recommendation tool is updated so that:\n\n- For Aspire versions 13 and above, the tool recommends Aspire CLI for deployment.\n- For versions below 13, maintain the existing recommendation logic.\n\n**Acceptance Criteria**\n\n- CLI recommendation tool correctly identifies Aspire version.\n- Aspire CLI is recommended for versions 13\u002B.\n- Existing behavior for versions \u003C13 remains unchanged.\n- Unit tests updated to cover new logic.\n- When not using Aspire framework, the Azure Developer CI \u0060azd\u0060 should still be recommended.", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Core", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/1041" + }, + { + "IssueNumber": 1051, + "Title": "[BUG] Ship AOT/Trimmed HTTP Docker image (tracking Identity AOT bug)", + "Body": "Title: [BUG] Ship AOT/Trimmed HTTP Docker image (tracking Identity AOT bug)\n\n### Describe the bug\n\nCurrently, the HTTP transport - supported only in the Docker image distribution - uses the untrimmed build of Azure MCP Server. The reason the trimmed build isn\u2019t used is that the HTTP transport implementation depends on the Microsoft.Identity.Web package, which is not trim-safe.\n\nThis issue tracks the work to vendor a trimmed build once the Identity partner team enables trim-compatible APIs.\n\nRelated identity work item: https://github.com/AzureAD/microsoft-identity-web/issues/3576\n\n### Expected behavior\n\nSupports trim build in Docker image distribution\n\n### Actual behavior\n\nuses untrimmed build in Docker image distribution\n\n### Reproduction Steps\n\nN/A\n\n### Environment\n\n_No response_", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Docker, remote-mcp", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/1051" + }, + { + "IssueNumber": 1063, + "Title": "[CONSOLIDATED] Some \u0060generate_azure_cli_commands\u0060 prompts do not trigger the corresponding tool as expected", + "Body": "Title: [CONSOLIDATED] Some \u0060generate_azure_cli_commands\u0060 prompts do not trigger the corresponding tool as expected\n\n**Description:**\nIn \u0060consolidated\u0060 mode, when testing prompts related to the \u0060generate_azure_cli_commands\u0060 tool, some prompts do not trigger the corresponding tool as expected, as shown below:\n- Test Prompt: \u0060Show me how to use Azure CLI to list all virtual machines in my subscription\u0060\n\u003Cimg width=\u0022821\u0022 height=\u0022643\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/b5874c95-bacd-4cd9-9d6d-6a5f2db30ff7\u0022 /\u003E\n\n- Test Prompt: \u0060Show me the details of the storage account \u003Caccount_name\u003E with Azure CLI commands\u0060\n\u003Cimg width=\u0022821\u0022 height=\u0022638\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/71a63ab8-8a34-4804-94d4-f5324dd54f63\u0022 /\u003E\n\n\n**Steps to Reproduce:**\n1. Start mcp server in \u0060consolidated\u0060 mode.\n2. Open GitHub Copilot in VS Code and [switch to Agent mode](https://code.visualstudio.com/docs/copilot/chat/chat-agent-mode).\n3. Click Refresh on the tools list, and select the \u0060Built-in\u0060, \u0060Extension: Github Copilot for Azure\u0060, \u0060github MCP server\u0060 and \u0060MCP Server: Azure MCP\u0060.\n4. Enter test prompts \u0060Show me how to use Azure CLI to list all virtual machines in my subscription\u0060, \u0060Show me the details of the storage account \u003Caccount_name\u003E with Azure CLI commands\u0060.\n\n**Environment:**\n\n- OS: Windows.\n- Vscode Version: 1.105.1\n- GitHub Copilot Chat Version: 0.32.4\n- Large Language Model: **Claude Sonnet 4.5**\n- Virtual Tool: On\n- Azure MCP Server: **1.0.0**\n\n\n**Expected Behavior:**\nThese prompts can successfully trigger the expected \u0060generate_azure_cli_commands\u0060 tool.\n\n@joshfree for notification", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Core", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/1063" + }, + { + "IssueNumber": 1081, + "Title": "[BUG] Test failure: Azure.Mcp.Tools.Sql.UnitTests.FirewallRule.FirewallRuleListCommandTests.ExecuteAsync_ValidatesInputCorrectly", + "Body": "Title: [BUG] Test failure: Azure.Mcp.Tools.Sql.UnitTests.FirewallRule.FirewallRuleListCommandTests.ExecuteAsync_ValidatesInputCorrectly\n\n### Describe the bug\n\nLink to the build: https://dev.azure.com/azure-sdk/internal/_build/results?buildId=5539133\u0026view=logs\u0026j=49488890-c1d0-5a70-282b-85c8b43b1436\u0026t=f1c34ac6-801d-56cc-8a01-8f676d0a67a6\n\nError message\n\u0060\u0060\u0060\n Failed Azure.Mcp.Tools.Sql.UnitTests.FirewallRule.FirewallRuleListCommandTests.ExecuteAsync_ValidatesInputCorrectly(args: \u0022--resource-group rg --server server\u0022, shouldSucceed: False) [40 ms]\n Error Message:\n Assert.Equal() Failure: Values differ\nExpected: BadRequest\nActual: OK\n Stack Trace:\n at Azure.Mcp.Tools.Sql.UnitTests.FirewallRule.FirewallRuleListCommandTests.ExecuteAsync_ValidatesInputCorrectly(String args, Boolean shouldSucceed) in D:\\a\\_work\\1\\s\\tools\\Azure.Mcp.Tools.Sql\\tests\\Azure.Mcp.Tools.Sql.UnitTests\\FirewallRule\\FirewallRuleListCommandTests.cs:line 77\n\u0060\u0060\u0060\n\n### Expected behavior\n\nTest should pass on CI\n\n### Actual behavior\n\nTest failed\n\n### Reproduction Steps\n\nI am not sure. It seems to be flaky.\n\n### Environment\n\n_No response_", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-SQL", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/1081" + }, + { + "IssueNumber": 1093, + "Title": "Add \u0060azmcp redis create\u0060 command for Azure Managed Redis resource creation", + "Body": "Title: Add \u0060azmcp redis create\u0060 command for Azure Managed Redis resource creation\n\nAdd a new \u0060redis create\u0060 command to allow creation of Azure Managed Redis resources. For the initial version, only support basic customization - required inputs (resource group, name, sku, location) and the ability to select modules.", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Redis", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/1093" + }, + { + "IssueNumber": 1143, + "Title": "[BUG] kusto resource deployment failed on CI", + "Body": "Title: [BUG] kusto resource deployment failed on CI\n\n### Describe the bug\n\nLink to build: https://dev.azure.com/azure-sdk/internal/_build/results?buildId=5558527\u0026view=logs\u0026j=aed090f5-6a6c-586f-e63c-45ae930e494b\u0026t=3d8b78fa-0308-50e4-791b-384a51d9dc96\n\nError message:\n\u0060\u0060\u0060\nCorrelationId: 5371dc3c-f6e5-43cd-a260-273888c0645c\u0022. Trying again in 80 seconds...\nVERBOSE: 16:47:41 - Template is valid.\nVERBOSE: 16:47:42 - Create template deployment \u0027t0890922c8a804e0f\u0027\nVERBOSE: 16:47:42 - Checking deployment status in 5 seconds\nVERBOSE: Running registered exit actions\nVERBOSE: Restoring initial context: ***\nParentContainsErrorRecordException: /mnt/vss/_work/1/s/eng/common/TestResources/TestResources-Helpers.ps1:22\nLine |\n 22 | return $Action.Invoke()\n | ~~~~~~~~~~~~~~~~\n | Exception calling \u0022Invoke\u0022 with \u00220\u0022 argument(s): \u0022The running command\n | stopped because the preference variable \u0022ErrorActionPreference\u0022 or\n | common parameter is set to Stop: 16:47:47 - The deployment\n | \u0027t0890922c8a804e0f\u0027 failed with error(s). Showing 1 out of 1 error(s).\n | Status Message: Cannot modify resource with id\n | \u0027/subscriptions/4d042dc6-fe17-4698-a23f-ec6a8d1e98f4/resourceGroups/SSS3PT_rg-t0890922c8a804e0f/providers/Microsoft.Kusto/Clusters/t0890922c8a804e0f\u0027 because the resource entity provisioning state is not terminal. Please wait for the provisioning state to become terminal and then retry the request. (Code:RequestConflict) CorrelationId: 4052340b-bc81-4d10-85e4-cf04b93cdf92\u0022\n\n##[error]PowerShell exited with code \u00271\u0027.\n/usr/bin/pwsh -NoLogo -NoProfile -NonInteractive -ExecutionPolicy Unrestricted -Command . \u0027/mnt/vss/_work/_tasks/AzurePowerShell_72a1931b-effb-4d2e-8fd8-f8472a07cb62/5.261.0/RemoveAzContext.ps1\u0027\nDisconnect-AzAccount -Scope CurrentUser -ErrorAction Stop\nDisconnect-AzAccount -Scope Process -ErrorAction Stop\nClear-AzContext -Scope Process -ErrorAction Stop\n\u0060\u0060\u0060\n\n### Expected behavior\n\nKusto resource failed to deploy\n\n### Actual behavior\n\nResource deployment should be successful.\n\n### Reproduction Steps\n\nIt seems to be flaky.\n\n### Environment\n\n_No response_", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Kusto", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/1143" + }, + { + "IssueNumber": 1182, + "Title": "[BUG] AI Foundry tests fail intermittently due to insufficient quota", + "Body": "Title: [BUG] AI Foundry tests fail intermittently due to insufficient quota\n\n### Describe the bug\n\nAn uptick in live test runs has made the AI Foundry tests occasionally fail with a message like the following:\n\n\u0060\u0060\u0060json\n{\n \u0022error\u0022: {\n \u0022code\u0022: \u0022InvalidTemplateDeployment\u0022,\n \u0022message\u0022: \u0022The template deployment \u0027t367d90f162f247c3\u0027 is not valid according to the validation procedure. The tracking id is \u0027cbfe2fb8-32ec-4a1f-bf1d-300b6c8dc240\u0027. See inner errors for details.\u0022,\n \u0022details\u0022: [\n {\n \u0022code\u0022: \u0022InsufficientQuota \u0022,\n \u0022message\u0022: \u0022This operation require 30 new capacity in quota Tokens Per Minute (thousands) - gpt-4o, which is bigger than the current available capacity 26. The current quota usage is 124 and the quota limit is 150 for quota Tokens Per Minute (thousands) - gpt-4o.\u0022\n }\n ]\n }\n}\n\u0060\u0060\u0060\n_Taken from Azure Monitor. Produced by [this CI run](https://dev.azure.com/azure-sdk/internal/internal%20Team/_build/results?buildId=5570854\u0026view=logs\u0026j=357ec7a0-d99c-5cba-7eef-3d7f548c2979\u0026s=ee3800fd-6e81-525f-e564-94108585217d\u0026t=a235b9e0-0fa4-5386-10d6-aac9d96cb7b3\u0026l=74)_\n\n@hallipr mentioned that this is likely caused due to AI Foundry resources being marked for soft-deletion by default. We should investigate a way of disabling this from the configuration to avoid running into insufficient quota issues in the future.\n\n### Expected behavior\n\nTest should not fail due to insufficient resource quota.\n\n### Actual behavior\n\nTest do fail because new resources cannot be deployed.\n\n### Reproduction Steps\n\nRun the live tests for Azure.Mcp.Server (see [here](https://dev.azure.com/azure-sdk/internal/_build?definitionId=7866)) multiple times in a short period. Maybe 10-ish in about 3-4 hours? I don\u0027t really know the quota limits imposed on our test subscription at this time.\n\n### Environment\n\n_No response_", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Foundry", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/1182" + }, + { + "IssueNumber": 1196, + "Title": "Add server instructions to call get_bestpractices", + "Body": "Title: Add server instructions to call get_bestpractices\n\nCurrently we depend on GHCP4A to add instructions to the system prompt to recommend the LLM to call get_bestpractices tool (which greatly improves the user experience with Azure). \n\nThis issue tracks the work to add similar instructions to the server instructions https://blog.modelcontextprotocol.io/posts/2025-11-03-using-server-instructions/ so that AZMCP can have a great experience without GHCP4A installed (all non-VS/VSCode clients)", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-BestPractices", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/1196" + }, + { + "IssueNumber": 1273, + "Title": "Migrate Azure.Mcp.Core.LiveTests LiveTests to Recorded Tests", + "Body": "Title: Migrate Azure.Mcp.Core.LiveTests LiveTests to Recorded Tests\n\nMigrate tests within core/Azure.Mcp.Core/tests/Azure.Mcp.Core.LiveTests/Azure.Mcp.Core.LiveTests.csproj to recordings. Utilize copilot to assist with the migration process for Azure.Mcp.Core.LiveTests.\r\n - For additional guidance check [the recorded tests document](https://github.com/microsoft/mcp/blob/main/docs/recorded-tests.md)\r\n\r\nThis task will be considered complete when the livetests can be invoked without the presence of a .testsettings.json file.\r\n\r\nSubmit a PR with your change and verify that the recorded tests are running in the [recorded test step](https://dev.azure.com/azure-sdk/internal/_build/results?buildId=5627747\u0026view=logs\u0026jobId=1e679852-4871-5dae-dd38-eb073eb853d4\u0026j=1e679852-4871-5dae-dd38-eb073eb853d4\u0026t=2f22000c-4a69-5b6e-fbac-d06c3b6f57da)", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Core", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/1273" + }, + { + "IssueNumber": 1298, + "Title": "Migrate Azure.Mcp.Tools.ServiceBus.LiveTests LiveTests to Recorded Tests", + "Body": "Title: Migrate Azure.Mcp.Tools.ServiceBus.LiveTests LiveTests to Recorded Tests\n\nMigrate tests within tools/Azure.Mcp.Tools.ServiceBus/tests/Azure.Mcp.Tools.ServiceBus.LiveTests/Azure.Mcp.Tools.ServiceBus.LiveTests.csproj to recordings. Utilize copilot to assist with the migration process for Azure.Mcp.Tools.ServiceBus.LiveTests.\r\n - For additional guidance check [the recorded tests document](https://github.com/microsoft/mcp/blob/main/docs/recorded-tests.md)\r\n\r\nThis task will be considered complete when the livetests can be invoked without the presence of a .testsettings.json file.\r\n\r\nSubmit a PR with your change and verify that the recorded tests are running in the [recorded test step](https://dev.azure.com/azure-sdk/internal/_build/results?buildId=5627747\u0026view=logs\u0026jobId=1e679852-4871-5dae-dd38-eb073eb853d4\u0026j=1e679852-4871-5dae-dd38-eb073eb853d4\u0026t=2f22000c-4a69-5b6e-fbac-d06c3b6f57da)", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-ServiceBus", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/1298" + }, + { + "IssueNumber": 135, + "Title": "Live tests for Kusto commands", + "Body": "Title: Live tests for Kusto commands\n\nTracking issue for follow up to merged PR from Kusto team - https://github.com/Azure/azure-mcp/pull/21\n\nExample: https://github.com/Azure/azure-mcp/pull/90", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Kusto", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/135" + }, + { + "IssueNumber": 136, + "Title": "Add azmcp to registry.modelcontextprotocol.io", + "Body": "Title: Add azmcp to registry.modelcontextprotocol.io\n\nhttps://github.com/modelcontextprotocol/registry\n\nhttps://github.com/modelcontextprotocol/registry/blob/main/docs/MCP%20Developers%20Summit%202025%20-%20Registry%20Talk%20Slides.pdf\n\n\u003Cimg width=\u0022674\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/0b47ce4d-134b-444a-9458-5a698cde3c25\u0022 /\u003E\n\n\u003Cimg width=\u0022677\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/e8fb60f6-9f9d-4044-b377-7712575e046f\u0022 /\u003E", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-McpRegistry", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/136" + }, + { + "IssueNumber": 183, + "Title": "[ONBOARD] Azure Functions", + "Body": "Title: [ONBOARD] Azure Functions\n\n### Service / Tool Name\n\nAzure.Functions\n\n### Contacts\n\nTBD\n\n### Intended Agent Scenarios\n\n\nHere\u0027s the set of commands exposed by the Functions VS Code extension. This is a great place to get started on potential capabilities/scenarios to support.\n\n## \uD83D\uDEE0\uFE0F Create \u0026 Setup\n- Create Function App in Azure \n- Create Function App in Azure (Advanced) \n- Create Function \n- Create New Containerized Project \n- Create New Project \n- Create Slot \n- Initialize Project for Use with VS Code \n- Install or Update Azure Functions Core Tools \n\n## \u2699\uFE0F Configure \u0026 Manage\n- Add Binding \n- Add Function App Identity Connections \n- Add Local Project Identity Connections \n- Add New Setting \n- Assign Managed Identity to Function App \n- Configure Deployment Source \n- Connect to GitHub Repository \n- Decrypt Settings \n- Download Remote Settings \n- Edit Setting \n- Enable System Assigned Identity \n- Encrypt Settings \n- Rename Setting \n- Report Issue \n- Save and Execute \n- Set AzureWebJobsStorage \n- Toggle as Slot Setting \n- Upload Local Settings \n- Uninstall Azure Functions Core Tools \n\n## \uD83D\uDE80 Deploy \u0026 Redeploy\n- Deploy to Azure \n- Deploy to Function App \n- Deploy to Slot \n- Redeploy \n\n## \uD83D\uDD04 Update \u0026 Maintain\n- Delete Function App \n- Delete Function \n- Delete Setting \n- Delete Slot \n- Disable Function \n- Disconnect from Repo \n- Enable Function \n- Restart \n- Swap Slot \n\n## \uD83D\uDCE1 Logs \u0026 Monitoring\n- Start Streaming Logs \n- Stop Streaming Logs \n- View Deployment Logs \n\n## \uD83E\uDDEA Debug \u0026 Test\n- Execute Function Now \n- Start \n- Stop \n- Start Streaming Logs \n- Stop Streaming Logs \n\n## \uD83D\uDD0D Access \u0026 DevOps\n- Browse Website \n- Copy Function Url \n- Open Azure Functions Extension Walkthrough \n- View Commit in GitHub \n\n\n\n### Timeline\n\nTBD", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-FunctionApp", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/183" + }, + { + "IssueNumber": 241, + "Title": "There is no available servers after installation and can not install any", + "Body": "Title: There is no available servers after installation and can not install any\n\nI follow the installation steps from the README, when I run \u0060Run MCP: List Servers\u0060 - there are no servers\n\u003Cimg width=\u0022612\u0022 height=\u002277\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/6ce20d97-78b3-4d74-8116-e54941a1cf66\u0022 /\u003E\nok, press \u0022Add\u0022\n\u003Cimg width=\u0022608\u0022 height=\u0022184\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/76cddbca-aa72-409d-aabe-f976ff7e6f41\u0022 /\u003E\nthen Browse and choose **Azure**\n\u003Cimg width=\u0022705\u0022 height=\u0022309\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/f38592c4-c7e7-459c-a3e6-b2e699afe8a2\u0022 /\u003E\nbut it\u0027s installing forever\nwhat could be the reason and how to install and use severs", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-VSIX", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/241" + }, + { + "IssueNumber": 271, + "Title": "Add missing livetests for Azure Database for PostgreSQL", + "Body": "Title: Add missing livetests for Azure Database for PostgreSQL\n\nhttps://github.com/Azure/azure-mcp/pull/81\n\nTracking issue for @kk-src to add missing livetests for PostgreSQL, similar to Azure SQL and Azure MySQL areas.", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Postgres", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/271" + }, + { + "IssueNumber": 288, + "Title": "\u0060azmcp-monitor-ingestion-upload\u0060", + "Body": "Title: \u0060azmcp-monitor-ingestion-upload\u0060\n\nazmcp-monitor-ingestion-upload - Upload custom log data to Azure Monitor workspaces using data collection rules. This tool sends structured log data to Azure Monitor with schema validation and transformation support for custom monitoring scenarios. Returns ingestion operation status and record count. Requires ingestion-endpoint, data-collection-rule, and log-data. - Suggested prompt: \u0022Upload custom log data \u003Clog-data\u003E to the following endpoint:\u003Cingestion-endpoint\u003E\u0022", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Monitor", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/288" + }, + { + "IssueNumber": 303, + "Title": "[Deploy Tool] Architecture Diagram Generate prompts failed \u2014 Deploy Tool not invoked on PR #626 in \u0060single\u0060 mode", + "Body": "Title: [Deploy Tool] Architecture Diagram Generate prompts failed \u2014 Deploy Tool not invoked on PR #626 in \u0060single\u0060 mode\n\n**Description:**\nWhen running the MCP server in \u0060single\u0060 mode on PR #626 , the Copilot chat does not trigger the deploy tool for all prompts in the [Deploy \u2014 Infrastructure Rules Get](https://github.com/qianwens/azure-mcp/blob/7e5748b94705bb51c6005412569fe5d70d91e85e/docs/PR-626-Manual-Testing-Plan.md#deploy--architecture-diagram-generate-prompts-4650) section. Responses to some of the prompts are as follows:\n\n\u003Cimg width=\u0022517\u0022 height=\u0022435\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/afa99093-96cd-4b1e-a49d-b8702d66d5a4\u0022 /\u003E\n\n\u003Cimg width=\u0022514\u0022 height=\u0022721\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/a59a0e0e-4090-4a0d-9535-838a005833b0\u0022 /\u003E\n\n**Steps to Reproduce:**\n1. Run \u0060git clone https://github.com/qianwens/azure-mcp/tree/qianwen/deploy\u0060 and switch branch to \u0060qianwen/deploy\u0060.\n2. Run \u0060dotnet build\u0060.\n3. Run \u0060az login\u0060.\n4. Configure \u0060mcp.json\u0060 in default mode.\n5. Start mcp server.\n6. Open GitHub Copilot in VS Code and [switch to Agent mode](https://code.visualstudio.com/docs/copilot/chat/chat-agent-mode).\n7. Click Refresh on the tool list to select only the MCP Server tool in \u0060single\u0060 mode.\n8. Enter test prompts \u0060Generate a simple architecture diagram for this application showing web, API, and database.\u0060.\n\n**Environment:**\n- OS: Windows.\n- Vscode Insiders Version: 1.103.0\n- GitHub Copilot Chat Version: 0.31.2025081401\n- MCP Service Mode: single\n- Large Language Model: GPT-4.1\n\n**Test Prompts:** \n\n1. Generate a simple architecture diagram for this application showing web, API, and database.\n2. Create an architecture diagram for a 3-service container app with an external database.\n3. Produce a deployment diagram highlighting ingress, app services/containers, and storage.\n4. Draw a diagram including a queue-based worker, the API, and a public web frontend.\n5. Generate a diagram for a microservices layout with internal service-to-service calls and a shared VNet.\n\n**Expected Behavior:**\nCopilot chat should invoke the Deploy tool for each prompt.\n\n@jongio for notification.", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Deploy", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/303" + }, + { + "IssueNumber": 549, + "Title": "[BUG] Kusto tools often fail with invalid arguments or generic runtime exceptions", + "Body": "Title: [BUG] Kusto tools often fail with invalid arguments or generic runtime exceptions\n\n### Describe the bug\n\nParameter descriptions need some TLC, and error handling to return model-friendly error descriptions.\n\n\u003Cimg width=\u0022560\u0022 height=\u0022305\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/f6fc884f-6546-40c1-947a-73fb01252625\u0022 /\u003E\n\n\u003Cimg width=\u0022567\u0022 height=\u0022267\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/4e91ee04-defd-4dc0-a12a-ebffac946ec0\u0022 /\u003E\n\n### Expected behavior\n\nRock-solid tool calling.\n\n### Actual behavior\n\nMany errors, with errors that are CLI optimized or runtime exceptions.\n\n### Reproduction Steps\n\nKusto data flow: https://github.com/microsoft/vscode/blob/main/.github/prompts/data.prompt.md\n\n### Environment\n\nLatest VS Code insiders.", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Kusto", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/549" + }, + { + "IssueNumber": 554, + "Title": "Add AZMCP to https://mcpservers.org/", + "Body": "Title: Add AZMCP to https://mcpservers.org/\n\nAdd AZMCP to https://mcpservers.org/", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-McpRegistry", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/554" + }, + { + "IssueNumber": 566, + "Title": "Add support for Azure Developer CLI tools", + "Body": "Title: Add support for Azure Developer CLI tools\n\nEnables support for MCP tools exposed by the Azure Developer CLI (azd)", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Azd", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/566" + }, + { + "IssueNumber": 617, + "Title": "Incorrect tool triggered: \u0060azmcp_monitor_resource_log_query\u0060 and \u0060azmcp_monitor_healthmodels_entity_gethealth\u0060 not called as expected", + "Body": "Title: Incorrect tool triggered: \u0060azmcp_monitor_resource_log_query\u0060 and \u0060azmcp_monitor_healthmodels_entity_gethealth\u0060 not called as expected\n\n**Description:**\nWhen entering the prompt \u0060Show me the health status of entity \u003Centity_id\u003E in the Log Analytics workspace \u003Cworkspace_name\u003E\u0060, the expected tool \u0060azmcp_monitor_healthmodels_entity_gethealth\u0060 was not triggered; instead, a different tool was called, as shown in the screenshot below.\n\u003Cimg width=\u0022761\u0022 height=\u0022691\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/169f3802-75b3-40ab-a1de-5f5846a24389\u0022 /\u003E\n\nSimilarly, when entering the prompt \u0060Show me the logs for the past hour for the resource \u003Cresource_name\u003E in the Log Analytics workspace \u003Cworkspace_name\u003E\u0060, the expected tool \u0060azmcp_monitor_resource_log_query\u0060 was not triggered.\n\u003Cimg width=\u0022756\u0022 height=\u0022643\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/cf242d2c-668a-447b-af46-85c485ad427d\u0022 /\u003E\n\n**Steps to Reproduce:**\n1. Start mcp server in namespaces mode.\n2. Open GitHub Copilot in VS Code and [switch to Agent mode](https://code.visualstudio.com/docs/copilot/chat/chat-agent-mode).\n3. Click Refresh on the tools list, and select the \u0060Built-in\u0060, \u0060Extension: Github Copilot for Azure\u0060, \u0060MCP Server: Microsoft Docs\u0060 and \u0060MCP Server: Azure MCP\u0060.\n4. Enter test prompts \u0060Show me the health status of entity \u003Centity_id\u003E in the Log Analytics workspace \u003Cworkspace_name\u003E\u0060.\n\n**Environment:**\n\n- OS: Windows.\n- Vscode Version: 1.104.2\n- GitHub Copilot Chat Version: 0.31.3\n- Large Language Model: GPT-4.1\n- Virtual Tool: Off\n- Azure MCP Server: 0.8.2\n\n**Expected Behavior:**\n\u0060azmcp_monitor_resource_log_query\u0060 and \u0060azmcp_monitor_healthmodels_entity_gethealth\u0060 should be called for the relevant prompt inputs.\n\n@joshfree for notification", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Monitor", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/617" + }, + { + "IssueNumber": 619, + "Title": "Key Vault secret operations do not return expected results due to security restrictions", + "Body": "Title: Key Vault secret operations do not return expected results due to security restrictions\n\n**Description:**\nWhen testing prompts for reading secret values \u200B\u200Bor creating new secrets, the tool failed to return the secret content or creation results as expected due to security restrictions, as shown below:\n- \u0060Create a new secret called mycert with 123456 in the key vault mhkey\u0060:\n\u003Cimg width=\u0022700\u0022 height=\u0022502\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/85e54d30-5752-49f2-ae37-b83c6a38f328\u0022 /\u003E\n\n- \u0060Show me the secret mhsecret1 in the key vault mhkey\u0060:\n\u003Cimg width=\u0022691\u0022 height=\u0022471\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/b6920e6b-d8e7-4eab-b7b4-7c0c319b3f34\u0022 /\u003E\n\n**Steps to Reproduce:**\n1. Start mcp server in namespaces mode.\n2. Open GitHub Copilot in VS Code and [switch to Agent mode](https://code.visualstudio.com/docs/copilot/chat/chat-agent-mode).\n3. Click Refresh on the tools list, and select the \u0060Built-in\u0060, \u0060Extension: Github Copilot for Azure\u0060, \u0060MCP Server: Microsoft Docs\u0060 and \u0060MCP Server: Azure MCP\u0060.\n4. Enter test prompts \u0060Create a new secret called \u003Csecret_name\u003E with value \u003Csecret_value\u003E in the key vault \u003Ckey_vault_account_name\u003E\u0060\n\n**Environment:**\n\n- OS: Windows.\n- Vscode Version: 1.104.2\n- GitHub Copilot Chat Version: 0.31.3\n- Large Language Model: GPT-4.1\n- Virtual Tool: Off\n- Azure MCP Server: 0.8.2\n\n**Expected Behavior:**\nThe tool should return the secret value or creation result as expected when triggered by the prompt.\n\n@joshfree for notification", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-KeyVault", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/619" + }, + { + "IssueNumber": 671, + "Title": "[ONBOARD] Add command: azmcp applicationinsights apptrace list", + "Body": "Title: [ONBOARD] Add command: azmcp applicationinsights apptrace list\n\n### Service / Tool Name\n\nApplicationInsights\n\n### Contacts\n\nSaar Shen (xiaomi7732)\n\n### Intended Agent Scenarios\n\nList application insights trace for diagnose Performance issues.\n\n### Timeline\n\nTBD", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-ApplicationInsights", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/671" + }, + { + "IssueNumber": 679, + "Title": "Update CONTRIBUTING.md", + "Body": "Title: Update CONTRIBUTING.md\n\nAfter https://github.com/microsoft/mcp/pull/600 was merged, package README.md files are auto-generated from the azure MCP server\u0027s main readme (which has data on all packages, and needs some sections dropped for individual readmes). \n\nWith the comment-tags, it\u0027s easy for someone to accidentally cause a generated readme to look different than they intended. \n\n1. Update the CONTRIBUTING.md with instructions on how to manually build and validate the generated readme files (ideally also where to find the files in the CI build for spot testing) -- https://github.com/microsoft/mcp/blob/main/CONTRIBUTING.md#package-readme\n2. Link to this new section from the PULL_REQUEST_TEMPLATE so people updating the readme know how to check their changes show up correctly in the generated READMEs.", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-NuGet", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/679" + }, + { + "IssueNumber": 696, + "Title": "[BUG] Docker run --rm -it mcr.microsoft.com/azure-sdk/azure-mcp fails to run", + "Body": "Title: [BUG] Docker run --rm -it mcr.microsoft.com/azure-sdk/azure-mcp fails to run\n\n### Describe the bug\n\nTrying to run the MCP according to the README:\n\n\u0060\u0060\u0060\ndocker run --rm -it mcr.microsoft.com/azure-sdk/azure-mcp\ndocker: Error response from daemon: failed to create task for container: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: exec: \u0022./azmcp\u0022: permission denied: unknown.\n\u0060\u0060\u0060\n\nThe reason is probably because the azmcp is not executable:\n\n\u0060\u0060\u0060\ndocker run --rm -it --entrypoint ash mcr.microsoft.com/azure-sdk/azure-mcp -c \u0022ls -la ./azmcp\u0022\n-rw-rw-r-- 1 root root 131937098 Oct 3 01:09 ./azmcp\n\u0060\u0060\u0060\n\nWhen chmod-ing it, it works:\n\n\u0060\u0060\u0060\ndocker run --rm -it --entrypoint ash mcr.microsoft.com/azure-sdk/azure-mcp -c \u0022chmod \u002Bx azmcp \u0026\u0026 ./azmcp\u0022 \nRequired command was not provided.\n\nDescription:\n Azure MCP Server\n\nUsage:\n azmcp [command] [options]\n\nOptions:\n -?, -h, --help Show help and usage information\n --version Show version information\n\n...\n\u0060\u0060\u0060\n\n### Expected behavior\n\nThe entrypoint should be executable. The image should run. \n\n### Actual behavior\n\nazmcp is not executable and the you cannot run the image.\n\n### Reproduction Steps\n\ndocker run --rm -it mcr.microsoft.com/azure-sdk/azure-mcp\n\n### Environment\n\n_No response_", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Docker", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/696" + }, + { + "IssueNumber": 748, + "Title": "[BUG] azmcp__monitor_healthmodels_entity_gethealth tool name should end with a verb", + "Body": "Title: [BUG] azmcp__monitor_healthmodels_entity_gethealth tool name should end with a verb\n\n### Describe the bug\n\nName of tool azmcp__monitor_healthmodels_entity_gethealth doesn\u0027t ned with a verb https://github.com/microsoft/mcp/blob/4a366d705a7a1b62f58d4a6f5311c07a561b2fad/servers/Azure.Mcp.Server/docs/e2eTestPrompts.md?plain=1#L389\n\n### Expected behavior\n\nAll names of tools should be updated to end with a verb\n\n### Actual behavior\n\nName of tool doesn\u0027t end with a verb (\u0022health\u0022)\n\n### Reproduction Steps\n\nn/a\n\n### Environment\n\n_No response_", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Health", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/748" + }, + { + "IssueNumber": 766, + "Title": "[BUG] Improve Azure Managed Lustre Doc String", + "Body": "Title: [BUG] Improve Azure Managed Lustre Doc String\n\n### Describe the bug\n\nInclude more realistic format for dummy:\n- Subscription ID\n- Secret version\n\n### Expected behavior\n\nN/A\n\n### Actual behavior\n\nN/A\n\n### Reproduction Steps\n\nN/A\n\n### Environment\n\n_No response_", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-managedlustre", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/766" + }, + { + "IssueNumber": 842, + "Title": "[BUGBASH] Tools longer than 64 characters don\u0027t run in Copilot CLI", + "Body": "Title: [BUGBASH] Tools longer than 64 characters don\u0027t run in Copilot CLI\n\n### Describe the bug\n\nInvestigating a failure in Copilot CLI, the CCLI team found that the API is returning errors indicating we have tool names that are too long. But this only occurs for some api endpoints.\n\n### Long tools\n- AzureMCP-AllTools-azmcp_managedlustre_filesystem_subnetsize_validate\n- AzureMCP-AllTools-azmcp_resourcehealth_service-health-events_list\n- AzureMCP-AllTools-azmcp_virtualdesktop_hostpool_sessionhost_usersession-list\n\nFYI - \u0060AzureMCP-AllTools\u0060 is the name I gave the MCP server\n\n### Reference issue\nhttps://github.com/microsoft/copilot-cli/issues/74\n\n### Error message\n\u0060\u0060\u0060\n bad request: operation error Bedrock Runtime: ConverseStream, https response error StatusCode: 400, RequestID: 8ee6135b-023a-438e-a885-e92eab8aef31, ValidationException: 3 validation errors detected: Value \u0027AzureMCP-AllTools-azmcp_managedlustre_filesystem_subnetsize_validate\u0027 at \u0027toolConfig.tools.111.member.toolSpec.name\u0027 failed to satisfy constraint: Member must have length less than or equal to 64; Value \u0027AzureMCP-AllTools-azmcp_resourcehealth_service-health-events_list\u0027 at \u0027toolConfig.tools.149.member.toolSpec.name\u0027 failed to satisfy constraint: Member must have length less than or equal to 64; Value \u0027AzureMCP-AllTools-azmcp_virtualdesktop_hostpool_sessionhost_usersession-list\u0027 at \u0027toolConfig.tools.186.member.toolSpec.name\u0027 failed to satisfy constraint: Member must have length less than or equal to 64\n\u0060\u0060\u0060\n\n### Considerations\n- We can\u0027t control the MCP server name, though we can probably assume it\u0027s _usually_ going to be just \u0060AzureMCP\u0060. \n- We are already looking to remove \u0060azmcp_\u0060, so that will help.\n\n\n### Expected behavior\n\nTools are short enough to prevent failures\n\n### Actual behavior\n\nSee bug description.\n\n### Reproduction Steps\n\nHere\u0027s the MCP config for CCLI:\n\n\u003Cimg width=\u00221266\u0022 height=\u0022765\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/21f71afb-7b6f-455b-a114-38dad29c99b8\u0022 /\u003E\n\nAnd you need to be \u0022lucky\u0022 enough to call the wrong endpoint.\n\n### Environment\n\nWindows 11\nCopilot CLI 0.0.342\nLatest Azure MCP", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Core", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/842" + }, + { + "IssueNumber": 886, + "Title": "[BUGBASH] Learning about tools fail with missing required options", + "Body": "Title: [BUGBASH] Learning about tools fail with missing required options\n\n### Describe the bug\n\nWhen attempting to learn about a tool it will return a failure status if there are required options. Which feels wrong when attempting to learn.\n\n\u003Cimg width=\u0022279\u0022 height=\u0022689\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/cdb20e11-8d11-4c0a-8fcb-e9cbd795fc0a\u0022 /\u003E\n\n### Expected behavior\n\nWhen attempting to learn about a tool we shouldn\u0027t be returning a failure status if a tool exists.\n\n### Actual behavior\n\nSee above\n\n### Reproduction Steps\n\n- Start server in \u0060namespace\u0060 (default) mode.\n- Make a learn call that can clearly be associated with a real tool.\n\nRun the prompt\n\nList my Storage blobs with learn=true in subscription \u003Csubscription\u003E in tenant \u003Ctenant\u003E in account \u003Cstorage account name\u003E and container \u003Ccontainer name\u003E\n\n### Environment\n\n_No response_", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Core", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/886" + }, + { + "IssueNumber": 918, + "Title": "Some prompts in \u0060Azure Deploy\u0060 cannot stably trigger corresponding tools", + "Body": "Title: Some prompts in \u0060Azure Deploy\u0060 cannot stably trigger corresponding tools\n\n**Description:**\nIn Azure MCP Server versions \u00600.9.0\u0060 and \u00600.9.6\u0060, when testing the prompt \u0060Show me the rules to generate bicep scripts\u0060, \u0060Create a plan to deploy this application to azure\u0060 and \u0060Generate the azure architecture diagram for this application\u0060, the expected tool cannot be triggered, as shown in the following figure:\n\n- Test prompt: \u0060Show me the rules to generate bicep scripts\u0060.\n Expected tools: \u0060azmcp_deploy_app_logs_get\u0060\n\u003Cimg width=\u0022656\u0022 height=\u0022812\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/73157bc1-9151-4ddc-9139-a001f9979bbf\u0022 /\u003E\n\n- Test prompt: \u0060Create a plan to deploy this application to azure\u0060.\n Expected tools: \u0060azmcp_deploy_plan_get\u0060\n\u003Cimg width=\u0022656\u0022 height=\u0022811\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/4fe3c354-9b75-45e6-abe8-9cffed387cc3\u0022 /\u003E\n\n- Test prompt: \u0060Generate the azure architecture diagram for this application\u0060.\n Expected tools: \u0060azmcp_deploy_architecture_diagram_generate\u0060\n\u003Cimg width=\u0022656\u0022 height=\u0022795\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/747a1dd9-4433-4410-8093-4deec605ece1\u0022 /\u003E\n\n**Steps to Reproduce:**\n1. Start mcp server in namespaces mode.\n2. Open GitHub Copilot in VS Code and [switch to Agent mode](https://code.visualstudio.com/docs/copilot/chat/chat-agent-mode).\n3. Click Refresh on the tools list, and select the \u0060Built-in\u0060, \u0060Extension: Github Copilot for Azure\u0060, \u0060MCP Server: Microsoft Docs\u0060, \u0060github MCP server\u0060 and \u0060MCP Server: Azure MCP\u0060.\n4. Enter test prompts \u0060Show me the rules to generate bicep scripts\u0060, \u0060Create a plan to deploy this application to azure\u0060 and \u0060Generate the azure architecture diagram for this application\u0060.\n\n**Environment:**\n\n- OS: Windows.\n- Vscode Version: 1.104.2\n- GitHub Copilot Chat Version: 0.31.3\n- Large Language Model: Claude Sonnet 4.5\n- Virtual Tool: On\n- Azure MCP Server: **0.9.0 and 0.9.6**\n\n**Expected Behavior:**\nThese prompts can successfully trigger the expected tools.\n\n@joshfree for notification", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Deploy", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/918" + }, + { + "IssueNumber": 930, + "Title": "[BUGBASH] Learning may take more loops than necessary", + "Body": "Title: [BUGBASH] Learning may take more loops than necessary\n\n### Describe the bug\n\nAttempting to use learn to determine which command is be for your use case can help guide the agent in the right direction, but it may take more back-and-forth communication than necessary due to how \u0060subscription\u0060 requirement is reported.\n\n### Expected behavior\n\nWhen learning, subscription should be determined to be required and passed through either \u0060--subscription\u0060 or the environment variable.\n\n### Actual behavior\n\nIf there isn\u0027t context about subscription or it\u0027s not set in the environment variable, the agent will attempt to call the MCP server without it as it doesn\u0027t know it\u0027s required,\n\n\u003Cimg width=\u0022557\u0022 height=\u0022675\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/289789d7-5041-474f-87dc-adfe3bc5ae10\u0022 /\u003E\n\nI started with \u0060List my Storage blobs with learn=true\u0060 and the agent correctly assessed that I didn\u0027t specify a Storage account to list in, so it attempted to list those first but since subscription isn\u0027t marked as required it failed.\n\n### Reproduction Steps\n\nUse \u0060List my Storage blobs with learn=true\u0060 as the initial command. Iterate through until learning determines which command(s) should be used.\n\n### Environment\n\n_No response_", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Core", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/930" + }, + { + "IssueNumber": 198, + "Title": "[namespace mode] does not correctly identify PostgreSQL replication parameters", + "Body": "Title: [namespace mode] does not correctly identify PostgreSQL replication parameters\n\n**Description:**\nWhen entering the test prompt \u0060Show me if the parameter my PostgreSQL server mhpost has replication enabled\u0060, the namespace mode does not check whether the parameter \u0060wal_level\u0060 is \u0060replica\u0060, resulting in an incorrect judgment that replication is not enabled. The default mode can correctly identify and feedback that replication is enabled. The specific results are as follows:\n- Default mode:\n\u003Cimg width=\u0022556\u0022 height=\u0022602\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/0974c9e7-c0dd-42ce-8f03-85337a6400d0\u0022 /\u003E\n\n- Namespace mode:\n\u003Cimg width=\u0022591\u0022 height=\u0022585\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/4131111f-986e-4636-bf6b-d1f52ac6a820\u0022 /\u003E\n\n**Steps to Reproduce:**\n1. Run \u0060git clone https://github.com/azure/azure-mcp\u0060.\n2. Run \u0060dotnet build\u0060.\n3. Run \u0060az login\u0060.\n4. Configure \u0060mcp.json\u0060 in default or namespace mode.\n5. Start mcp server.\n6. Open GitHub Copilot in VS Code and [switch to Agent mode](https://code.visualstudio.com/docs/copilot/chat/chat-agent-mode).\n7. Click Refresh on the tools list, and only select the configured MCP Server Tools.\n8. Enter test prompts such as \u0060Show me if the parameter my PostgreSQL server mhpost has replication enabled\u0060.\n\n**Environment:**\n- OS: Windows.\n\n**Expected Behavior:**\nThe namespace mode correctly recognizes the PostgreSQL replication parameters.\n\n@jongio for notification.", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Postgres", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/198" + }, + { + "IssueNumber": 201, + "Title": "Allow Resource Group Option to be reused in child commands.", + "Body": "Title: Allow Resource Group Option to be reused in child commands.\n\nRight now we have resource group option in MonitorOptionDefinitions as OptionalResourceGroup, and it is also in OptionDefinitions. The reason they did that in MonitorOptionsDefinitions is because it isn\u0027t required. Setting IsRequired to false broke other scenarios. It is a static variable so shared amongst many commands, which breaks tests. So we need a design that will allow us to define parameters once and have commands register them in RegisterOptions and also indicate if the option is required or not for their particular command without impacting other commands or tests. Build something that is idiomatic to C#.\n\nUpdate CHANGELOG.md with your fixes. Make sure \u0060dotnet test\u0060 from the root passes. Run \u0060dotnet format\u0060 before committing.", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Core", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/201" + }, + { + "IssueNumber": 203, + "Title": "[ONBOARD] AzCli Copilot tool", + "Body": "Title: [ONBOARD] AzCli Copilot tool\n\n### Service / Tool Name\n\naz (I am proposing to reuse the existing tool name az, with a different implementation)\n\n### Contacts\n\nChunan Ye\n\n### Intended Agent Scenarios\n\nAzure CLI team owns an AI powered API that can generate Az CLI commands from natural language intent. GitHub Copilot for Azure has been using this tool and we have seen signficantly less hallucinations compared to the Az commands generated by the LLM on its own. This request is to onboard a tool that calls this API to help Azure MCP users generate Azure CLI commands. I got their approval to onboard a new tool to call this API.\n\nI propose to replace the existing az tool with this tool. Basically, keep the command name, but change the inputSchema and the underlying implementation. Many mainstream MCP clients has the capability to run commands in terminal (e.g. AI powered IDEs) so we don\u0027t need a dedicated tool just for that.\n\n### Timeline\n\nJuly 2025", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-AzCLI", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/203" + }, + { + "IssueNumber": 207, + "Title": "[PROPOSAL] Have the general best practices mention the troubleshooting guide", + "Body": "Title: [PROPOSAL] Have the general best practices mention the troubleshooting guide\n\nI was using Claude Sonnet 4 to try and list KV secrets and ran into the following issue:\n\n\u003E \u0022status\u0022:500, \u0022message\u0022: \u0022Error retrieving secrets from vault vicolinamanualtests: The ChainedTokenCredential failed due to an unhandled exception: The current credential is not configured to acquire tokens for tenant 70a036f6-8e4d-4615-bad6-149c02e7720d. To enable acquiring tokens for this tenant add it to the AdditionallyAllowedTenants on the credential options, or add \\u0022*\\u0022 to AdditionallyAllowedTenants to allow acquiring tokens for any tenant. See the troubleshooting guide for more information. https://aka.ms/azsdk/net/identity/multitenant/troubleshoot. To mitigate this issue, please refer to the troubleshooting guidelines here at https://aka.ms/azmcp/troubleshooting.\u0022\n\nTurns out it was because he tenantId the CustomChainedCredential.CreateVsCodeBrokerCredential() obtained from VS Code\u0027s authRecord.json file did not match the one my key vault resides on.\n \nOut troubleshooting guide says to use the \u0060--tenant-id\u0060 parameter in the tool call when faced with an [incorrect subscription or tenant context](https://github.com/Azure/azure-mcp/blob/main/TROUBLESHOOTING.md#possible-causes-and-resolutions) (although only mentioned for a \u0060403\u0060 status code), so I was able to get the agent to do this after explicitly telling it to, but it could not figure it out on its own, which brings me to the point of this post: **Should we tell agents to also check out the TROUBLESHOOTING.md file when providing it with our best practices?** It would have certainly saved me some time \u2014 and I\u0027m familiar with the server, can\u0027t imagine how bad it could go for someone that\u0027s more distanced from it or Azure itself.", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-BestPractices", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/207" + }, + { + "IssueNumber": 283, + "Title": "Add azmcp storage account create command", + "Body": "Title: Add azmcp storage account create command\n\nSub task of https://github.com/Azure/azure-mcp-pr/issues/283#issuecomment-3168865896", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Storage", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/283" + }, + { + "IssueNumber": 300, + "Title": "[Kusto MCP] New Tool Generate Sharing Link from query", + "Body": "Title: [Kusto MCP] New Tool Generate Sharing Link from query\n\nI would like to be able to generate sharing links to a query. The two scenarios I can think of:\n\n- I\u0027ve had the AI write a kusto query for me. Generate a link so I can click it and have it open in ADX\n- The MCP server just ran a query. Generate a link so I can click it and see the raw results, or share it with other members of the team\n\nThis would allow me to better integrate MCP into my team tooling. Also would provide really good audit of results, so I can go back later and more easily check its work.", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Kusto", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/300" + }, + { + "IssueNumber": 1047, + "Title": "[BUG] Azure MCP on Claude Desktop : Unable to get list of VMs from the Azure Tenant", + "Body": "Title: [BUG] Azure MCP on Claude Desktop : Unable to get list of VMs from the Azure Tenant\n\n### Describe the bug\n\nEnvironment Details\n- Claude Desktop\n- Azure MCP server installation type npm local on MacOS\n- Review the attached screenshots for claude desktop conversation\n\n\u003Cimg width=\u0022782\u0022 height=\u0022653\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/61df82f2-8be6-4c37-a185-8119dddcf868\u0022 /\u003E\n\n\u003Cimg width=\u0022803\u0022 height=\u0022742\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/fc5ba7cb-4aac-497b-862a-5da78aceb03a\u0022 /\u003E\n\n\u003Cimg width=\u0022852\u0022 height=\u0022797\u0022 alt=\u0022Image\u0022 src=\u0022https://github.com/user-attachments/assets/94214a0a-9d8d-4c4d-b12b-39fe34868d79\u0022 /\u003E\n\n- Claude Desktop Config Json Section\n\u0060\u0060\u0060\n \u0022azure\u0022: {\n \u0022command\u0022: \u0022npx\u0022,\n \u0022args\u0022: [\n \u0022-y\u0022,\n \u0022@azure/mcp@latest\u0022,\n \u0022server\u0022,\n \u0022start\u0022\n ],\n \u0022env\u0022: {\n \u0022AZURE_TENANT_ID\u0022: \u0022AAAAAAAAA\u0022,\n \u0022AZURE_CLIENT_ID\u0022: \u0022BBBBBB\u0022,\n \u0022AZURE_CLIENT_SECRET\u0022: \u0022CCCCCC\u0022\n }\n },\n\n\u0060\u0060\u0060\n- Claude Desktop user prompt \u0060what all vms do we have on azure currently use MCP server\u0060 via model \u0060Sonnet 4.5\u0060\n\nAzure MCP server was successfully invoked , however the MCP server had missing tools / CLI (not sure if this is expected) and hence the execution was incomplete.\n\n\n\n### Expected behavior\n\nThe MCP should have all necessary dependencies (CLI , executables) so that it can fetch right information that is requested by the user\n\n### Actual behavior\n\nAzure MCP server was successfully invoked , however the MCP server had missing tools / CLI (not sure if this is expected) and hence the execution was incomplete.\n\n### Reproduction Steps\n\n- Add MCP server to claude desktop , on a MacOS via NPM install method\n- Run user chat \u0060what all vms do we have on azure currently use MCP server\u0060\n\n### Environment\n\n- MacOS\n- NPM install\n- Claude Desktop", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-AzCLI", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/1047" + }, + { + "IssueNumber": 1092, + "Title": "[Remote] Enable https by default in locally hosted container when http transport is enabled", + "Body": "Title: [Remote] Enable https by default in locally hosted container when http transport is enabled\n\n- [ ] When http is enabled, ensure that communication defaults to http. Provide error message - https is required by default.\n- [ ] Launch Azure MCP server using https with a development certificate\n- [ ] Use a \u0022dangerous_\u0022 switch to override with http behavior.", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "remote-mcp", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/1092" + }, + { + "IssueNumber": 1121, + "Title": "[Remote] Have azd up warn/confirm with the user when security best-practices are not being followed in their bicep file", + "Body": "Title: [Remote] Have azd up warn/confirm with the user when security best-practices are not being followed in their bicep file\n\nAs an e.g., if the aca-infrastructure.bicep L82:--read-only is changed; or if the --dangerously-* flag is set warn/confirm", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "remote-mcp", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/1121" + }, + { + "IssueNumber": 1272, + "Title": "Migrate Azure Monitor metrics query tools to the new Azure.Monitor.Query.Metrics package", + "Body": "Title: Migrate Azure Monitor metrics query tools to the new Azure.Monitor.Query.Metrics package\n\nAzure MCP server is currently using a deprecated [Azure.Monitor.Query](https://www.nuget.org/packages/Azure.Monitor.Query) package. There is a new package [Azure.Monitor.Query.Metrics](https://www.nuget.org/packages/Azure.Monitor.Query.Metrics) to query metrics.", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Monitor", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/1272" + }, + { + "IssueNumber": 1280, + "Title": "Migrate Azure.Mcp.Tools.Communication.LiveTests LiveTests to Recorded Tests", + "Body": "Title: Migrate Azure.Mcp.Tools.Communication.LiveTests LiveTests to Recorded Tests\n\nMigrate tests within tools/Azure.Mcp.Tools.Communication/tests/Azure.Mcp.Tools.Communication.LiveTests/Azure.Mcp.Tools.Communication.LiveTests.csproj to recordings. Utilize copilot to assist with the migration process for Azure.Mcp.Tools.Communication.LiveTests.\r\n - For additional guidance check [the recorded tests document](https://github.com/microsoft/mcp/blob/main/docs/recorded-tests.md)\r\n\r\nThis task will be considered complete when the livetests can be invoked without the presence of a .testsettings.json file.\r\n\r\nSubmit a PR with your change and verify that the recorded tests are running in the [recorded test step](https://dev.azure.com/azure-sdk/internal/_build/results?buildId=5627747\u0026view=logs\u0026jobId=1e679852-4871-5dae-dd38-eb073eb853d4\u0026j=1e679852-4871-5dae-dd38-eb073eb853d4\u0026t=2f22000c-4a69-5b6e-fbac-d06c3b6f57da)", + "ExpectedServerLabel": "server-Azure.Mcp", + "ExpectedToolLabel": "tools-Communication", + "Notes": "Real issue: https://github.com/microsoft/mcp/issues/1280" + } +] \ No newline at end of file diff --git a/tools/issue-labeler/src/SearchIndexCreator/DocumentTypes.cs b/tools/issue-labeler/src/SearchIndexCreator/DocumentTypes.cs index 93f1fe6654f..2703ee81509 100644 --- a/tools/issue-labeler/src/SearchIndexCreator/DocumentTypes.cs +++ b/tools/issue-labeler/src/SearchIndexCreator/DocumentTypes.cs @@ -6,6 +6,7 @@ namespace SearchIndexCreator public enum DocumentTypes { Issue, - Document + Document, + Comment } } \ No newline at end of file diff --git a/tools/issue-labeler/src/SearchIndexCreator/IssueKnowledgeAgent.cs b/tools/issue-labeler/src/SearchIndexCreator/IssueKnowledgeAgent.cs index 7d91195dae2..73905729e31 100644 --- a/tools/issue-labeler/src/SearchIndexCreator/IssueKnowledgeAgent.cs +++ b/tools/issue-labeler/src/SearchIndexCreator/IssueKnowledgeAgent.cs @@ -31,9 +31,14 @@ public async Task CreateOrUpdateAsync() ModelName = _config["KnowledgeAgentModelName"] }; var agentModel = new KnowledgeAgentAzureOpenAIModel(azureOpenAIParameters: openAiParameters); + + // Read threshold from config, default to 1.0f for backward compatibility + var rerankerThreshold = float.TryParse(_config["RerankerThreshold"], out var threshold) + ? threshold : 1.0f; + var targetIndex = new KnowledgeAgentTargetIndex(IndexName) { - DefaultRerankerThreshold = 1.0f + DefaultRerankerThreshold = rerankerThreshold }; var agent = new KnowledgeAgent( @@ -58,5 +63,20 @@ public async Task KnowledgeAgentExistsAsync() return false; } } + + public async Task DeleteAsync() + { + var agentName = _config["KnowledgeAgentName"]; + Console.WriteLine($"Deleting knowledge agent '{agentName}'..."); + try + { + await _indexClient.DeleteKnowledgeAgentAsync(agentName); + Console.WriteLine($"Knowledge agent '{agentName}' deleted successfully."); + } + catch (Exception ex) + { + Console.WriteLine($"Error deleting knowledge agent: {ex.Message}"); + } + } } } diff --git a/tools/issue-labeler/src/SearchIndexCreator/IssueTriageContentIndex.cs b/tools/issue-labeler/src/SearchIndexCreator/IssueTriageContentIndex.cs index 02ae95b51bc..a6d18d67d2c 100644 --- a/tools/issue-labeler/src/SearchIndexCreator/IssueTriageContentIndex.cs +++ b/tools/issue-labeler/src/SearchIndexCreator/IssueTriageContentIndex.cs @@ -10,10 +10,16 @@ namespace SearchIndexCreator public class IssueTriageContentIndex { private readonly IConfiguration _config; + private readonly string _embeddingModelName; + private readonly int _vectorDimensions; public IssueTriageContentIndex(IConfiguration config) { _config = config; + _embeddingModelName = _config["EmbeddingModelName"]; + _vectorDimensions = _embeddingModelName?.Equals("text-embedding-3-large", StringComparison.OrdinalIgnoreCase) == true + ? 3072 + : 1536; } /// @@ -35,19 +41,24 @@ public async Task SetupAndRunIndexer(SearchIndexClient indexClient, SearchIndexe //Create a data source Console.WriteLine("Creating/Updating the data source..."); var dataSource = GetDataSource(); - indexerClient.CreateOrUpdateDataSourceConnection(dataSource); + await indexerClient.CreateOrUpdateDataSourceConnectionAsync(dataSource); Console.WriteLine("Data Source Created/Updated!"); //Create a skillset Console.WriteLine("Creating/Updating the skillset..."); - var skillset = GetSkillset(); + + var repo = _config["repo"]; + var isMcpRepo = repo?.Equals("mcp", StringComparison.OrdinalIgnoreCase) == true; + var skillset = isMcpRepo ? GetSkillsetForMcp() : GetSkillset(); + + Console.WriteLine($"Using {(isMcpRepo ? "MCP-optimized" : "Azure SDK")} skillset..."); await indexerClient.CreateOrUpdateSkillsetAsync(skillset).ConfigureAwait(false); Console.WriteLine("Skillset Created/Updated!"); // Create or update the indexer Console.WriteLine("Creating/Updating the indexer..."); var indexer = GetSearchIndexer(dataSource, skillset); - indexerClient.CreateOrUpdateIndexer(indexer); + await indexerClient.CreateOrUpdateIndexerAsync(indexer); Console.WriteLine("Indexer Created/Updated!"); } catch (Exception ex) @@ -106,8 +117,8 @@ private VectorSearch CreateVectorSearch() Parameters = new AzureOpenAIVectorizerParameters() { ResourceUri = new Uri(_config["OpenAIEndpoint"]), - DeploymentName = _config["EmbeddingModelName"], - ModelName = _config["EmbeddingModelName"] + DeploymentName = _embeddingModelName, + ModelName = _embeddingModelName } } }, @@ -145,8 +156,6 @@ private SemanticSearch CreateSemanticSearch() private IList CreateFields() { - - const int modelDimensions = 1536; const string vectorSearchHnswProfile = "issue-vector-profile"; return new List @@ -169,7 +178,7 @@ private IList CreateFields() new SearchField("TextVector", SearchFieldDataType.Collection(SearchFieldDataType.Single)) { IsSearchable = true, - VectorSearchDimensions = modelDimensions, + VectorSearchDimensions = _vectorDimensions, VectorSearchProfileName = vectorSearchHnswProfile }, new SearchField("Id", SearchFieldDataType.String) @@ -185,6 +194,14 @@ private IList CreateFields() { IsFilterable = true }, + new SearchableField("Server") + { + IsFilterable = true + }, + new SearchableField("Tool") + { + IsFilterable = true + }, new SearchField("Author", SearchFieldDataType.String) { IsSearchable = false @@ -230,7 +247,9 @@ private SearchIndexerDataSourceConnection GetDataSource() ) { DataChangeDetectionPolicy = new HighWaterMarkChangeDetectionPolicy("metadata_storage_last_modified"), - DataDeletionDetectionPolicy = new NativeBlobSoftDeleteDeletionDetectionPolicy() + DataDeletionDetectionPolicy = new NativeBlobSoftDeleteDeletionDetectionPolicy(), + IndexerPermissionOptions = new List() + }; } @@ -267,8 +286,8 @@ private SearchIndexerSkillset GetSkillset() { Context = "/document/pages/*", ResourceUri = new Uri(_config["OpenAIEndpoint"]), - ModelName = _config["EmbeddingModelName"], - DeploymentName = _config["EmbeddingModelName"] + ModelName = _embeddingModelName, + DeploymentName = _embeddingModelName } }) { @@ -340,6 +359,79 @@ private SearchIndexerSkillset GetSkillset() }; } + private SearchIndexerSkillset GetSkillsetForMcp() + { + return new SearchIndexerSkillset( + $"{_config["ContainerName"]}-skillset", + new List + { + new SplitSkill( + inputs: new List + { + new InputFieldMappingEntry("text") { Source = "/document/Body" } + }, + outputs: new List + { + new OutputFieldMappingEntry("textItems") { TargetName = "pages" } + } + ) + { + Context = "/document", + TextSplitMode = TextSplitMode.Pages, + MaximumPageLength = 2200, + PageOverlapLength = 250 + }, + + new AzureOpenAIEmbeddingSkill( + inputs: new List + { + new InputFieldMappingEntry("text") { Source = "/document/pages/*" } + }, + outputs: new List + { + new OutputFieldMappingEntry("embedding") { TargetName = "TextVector" } + } + ) + { + Context = "/document/pages/*", + ResourceUri = new Uri(_config["OpenAIEndpoint"]), + ModelName = _embeddingModelName, + DeploymentName = _embeddingModelName + } + }) + { + IndexProjection = new SearchIndexerIndexProjection(new[] + { + new SearchIndexerIndexProjectionSelector( + targetIndexName: _config["IndexName"], + parentKeyFieldName: "ParentId", + sourceContext: "/document/pages/*", + mappings: new[] + { + new InputFieldMappingEntry("TextVector") { Source = "/document/pages/*/TextVector" }, + new InputFieldMappingEntry("Chunk") { Source = "/document/pages/*" }, + new InputFieldMappingEntry("Id") { Source = "/document/Id" }, + new InputFieldMappingEntry("Title") { Source = "/document/Title" }, + new InputFieldMappingEntry("Server") { Source = "/document/Server" }, + new InputFieldMappingEntry("Tool") { Source = "/document/Tool" }, + new InputFieldMappingEntry("Author") { Source = "/document/Author" }, + new InputFieldMappingEntry("Repository") { Source = "/document/Repository" }, + new InputFieldMappingEntry("CreatedAt") { Source = "/document/CreatedAt" }, + new InputFieldMappingEntry("Url") { Source = "/document/Url" }, + new InputFieldMappingEntry("CodeOwner") { Source = "/document/CodeOwner" }, + new InputFieldMappingEntry("DocumentType") { Source = "/document/DocumentType" }, + new InputFieldMappingEntry("MetadataStorageLastModified") { Source = "/document/MetadataStorageLastModified" } + }) + }) + { + Parameters = new SearchIndexerIndexProjectionsParameters + { + ProjectionMode = IndexProjectionMode.SkipIndexingParentDocuments + } + } + }; + } + private SearchIndexer GetSearchIndexer(SearchIndexerDataSourceConnection dataSource, SearchIndexerSkillset skillset) { return new SearchIndexer( diff --git a/tools/issue-labeler/src/SearchIndexCreator/IssueTriageContentRetrieval.cs b/tools/issue-labeler/src/SearchIndexCreator/IssueTriageContentRetrieval.cs index 7e166a45caf..414d6c5e022 100644 --- a/tools/issue-labeler/src/SearchIndexCreator/IssueTriageContentRetrieval.cs +++ b/tools/issue-labeler/src/SearchIndexCreator/IssueTriageContentRetrieval.cs @@ -74,7 +74,8 @@ public async Task UploadSearchContent(List IssueTriageConten { await blobClient.UploadAsync(stream, new Azure.Storage.Blobs.Models.BlobUploadOptions { - HttpHeaders = blobHttpHeaders + HttpHeaders = blobHttpHeaders, + Conditions = null // Allow overwrite of existing blobs }); } @@ -396,5 +397,153 @@ private class GitTree public bool Truncated { get; set; } } + public async Task> RetrieveContentForMcp(string repoOwner) + { + Console.WriteLine($"Retrieving content for {repoOwner}/{_repo} (MCP repository)..."); + + try + { + var codeownersContents = await _client.Repository.Content.GetAllContents(repoOwner, _repo, ".github/CODEOWNERS"); + CodeOwnerUtils.codeOwnersFilePathOverride = codeownersContents[0].DownloadUrl; + Console.WriteLine("CODEOWNERS file loaded."); + } + catch (Exception ex) + { + Console.WriteLine($"Warning: Could not load CODEOWNERS: {ex.Message}"); + } + + var issues = await RetrieveAllMcpIssuesAsync(repoOwner); + var documents = await RetrieveAllDocumentsAsync(repoOwner); + + var results = new List(); + results.AddRange(issues); + results.AddRange(documents); + + Console.WriteLine($"Total content retrieved: {results.Count} items"); + return results; + } + + + private async Task> RetrieveAllMcpIssuesAsync(string repoOwner) + { + List results = new List(); + + var issueReq = new RepositoryIssueRequest + { + State = ItemStateFilter.All, + Filter = IssueFilter.All, + }; + + var issues = await _client.Issue.GetAllForRepository(repoOwner, _repo, issueReq); + Console.WriteLine($"Found {issues.Count} issues."); + var processedCount = 0; + foreach (var issue in issues) + { + if (issue.PullRequest != null) + { + continue; + } + + processedCount++; + if (processedCount % 50 == 0) + { + Console.WriteLine($"Processing issue {processedCount}/{issues.Count}... (Issue #{issue.Number})"); + } + + var (serverLabel, toolLabel) = AnalyzeMcpLabels(issue.Labels); + + var labels = new List(); + if (serverLabel != null) labels.AddRange(serverLabel.Split(", ")); + if (toolLabel != null) labels.AddRange(toolLabel.Split(", ")); + + var codeowners = CodeOwnerUtils.GetCodeownersEntryForLabelList(labels).ServiceOwners; + + var bodyText = string.IsNullOrWhiteSpace(issue.Body) + ? $"Title: {issue.Title}\n\n[No description provided]" + : $"Title: {issue.Title}\n\n{issue.Body}"; + + IssueTriageContent searchContent = new IssueTriageContent( + $"{repoOwner}/{_repo}/{issue.Number.ToString()}/Issue", + repoOwner + "/" + _repo, + issue.HtmlUrl, + DocumentTypes.Issue.ToString() + ) + { + Title = issue.Title, + Body = bodyText, + Server = serverLabel, + Tool = toolLabel, + Author = issue.User.Login, + CreatedAt = issue.CreatedAt, + CodeOwner = 0 + }; + + results.Add(searchContent); + + // var issue_comments = await GetMcpIssueCommentsAsync(repoOwner, _repo, issue.Number); + + // foreach (var comment in issue_comments) + // { + // IssueTriageContent commentContent = new IssueTriageContent( + // $"{repoOwner}/{_repo}/{issue.Number.ToString()}/{comment.Id.ToString()}", + // repoOwner + "/" + _repo, + // comment.HtmlUrl, + // DocumentTypes.Comment.ToString() + // ) + // { + // Title = issue.Title, + // Body = $"Title: {issue.Title}\n\n{comment.Body}", // Include title in body for context + // Server = serverLabel, + // Tool = toolLabel, + // Author = comment.User.Login, + // CreatedAt = comment.CreatedAt, + // CodeOwner = codeowners.Contains(comment.User.Login) ? 1 : 0, + // }; + + // results.Add(commentContent); + + // } + } + + return results; + } + + private static bool IsServerLabel(Octokit.Label label) => + label.Name.StartsWith("server-", StringComparison.OrdinalIgnoreCase); + + private static bool IsToolLabel(Octokit.Label label) => + label.Name.StartsWith("tools-", StringComparison.OrdinalIgnoreCase) || + label.Name.Equals("remote-mcp", StringComparison.OrdinalIgnoreCase); + + /// + /// Extract MCP labels from an issue's label list + /// Returns comma-separated strings of all server- and tools-/remote-mcp labels + /// This allows issues to have multiple tool labels (e.g., "tools-Storage, tools-CosmosDb") + /// remote-mcp is treated as a tool-like label for Azure MCP server + /// + private (string serverLabels, string toolLabels) AnalyzeMcpLabels(IReadOnlyList labels) + { + var serverLabelsList = labels.Where(IsServerLabel).Select(l => l.Name).ToList(); + var toolLabelsList = labels.Where(IsToolLabel).Select(l => l.Name).ToList(); + + var serverLabels = serverLabelsList.Any() ? string.Join(", ", serverLabelsList) : null; + var toolLabels = toolLabelsList.Any() ? string.Join(", ", toolLabelsList) : null; + + return (serverLabels, toolLabels); + } + + private async Task> GetMcpIssueCommentsAsync(string repoOwner, string repo, int issueNumber) + { + var issue_comments = await _client.Issue.Comment.GetAllForIssue(repoOwner, repo, issueNumber); + + return issue_comments + .Where(c => + !c.User.Login.Equals("github-actions[bot]") && + c.Body.Length > 150 && + !c.User.Login.Equals("ghost") && + !c.AuthorAssociation.StringValue.Equals("NONE")) + .ToList(); + } + } } diff --git a/tools/issue-labeler/src/SearchIndexCreator/LabelRetrieval.cs b/tools/issue-labeler/src/SearchIndexCreator/LabelRetrieval.cs index 23bfea1ad26..8f8a8f674de 100644 --- a/tools/issue-labeler/src/SearchIndexCreator/LabelRetrieval.cs +++ b/tools/issue-labeler/src/SearchIndexCreator/LabelRetrieval.cs @@ -6,6 +6,7 @@ using Azure.Storage.Blobs; using System.Text.Json; using Azure.Identity; +using Azure.Storage.Blobs.Models; namespace SearchIndexCreator { @@ -87,6 +88,74 @@ public async Task CreateOrRefreshLabels(string repoOwner) } } + public async Task CreateOrRefreshMcpLabels(string repoOwner) + { + var client = new GitHubClient(new ProductHeaderValue("Microsoft-ML-IssueBot")); + client.Credentials = _tokenAuth; + + var repoNamesConfig = _config["McpRepositoryForLabels"]; + if (string.IsNullOrEmpty(repoNamesConfig)) + { + throw new InvalidOperationException("McpRepositoryForLabels configuration is missing or empty."); + } + + var repoNames = repoNamesConfig.Split(';', StringSplitOptions.RemoveEmptyEntries); + + var blobServiceClient = GetBlobServiceClient(_config["IssueStorageName"]); + var containerClient = blobServiceClient.GetBlobContainerClient("labels"); + + await containerClient.CreateIfNotExistsAsync(); + + foreach (var repo in repoNames) + { + var labels = await client.Issue.Labels.GetAllForRepository(repoOwner, repo); + + var blobClient = containerClient.GetBlobClient(repo); + + try + { + var labelData = labels + .Where(label => + label.Name.StartsWith("server-", StringComparison.OrdinalIgnoreCase) || + label.Name.StartsWith("tools-", StringComparison.OrdinalIgnoreCase) || + label.Name.Equals("remote-mcp", StringComparison.OrdinalIgnoreCase)) + .Select(label => new + { + Name = label.Name , + Type = label.Name.StartsWith("server-", StringComparison.OrdinalIgnoreCase) ? "Server" : "Tool", + }) + .OrderBy(label => label.Name); + + var labelsJson = JsonSerializer.Serialize(labelData); + + var blobHttpHeaders = new Azure.Storage.Blobs.Models.BlobHttpHeaders + { + ContentType = "application/json" + }; + + using var stream = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(labelsJson)); + await blobClient.DeleteIfExistsAsync(); + + var uploadOptions = new BlobUploadOptions + { + HttpHeaders = new BlobHttpHeaders + { + ContentType = "application/json" + } + }; + + await blobClient.UploadAsync(stream, uploadOptions); + + Console.WriteLine($"Uploaded {repo} to {containerClient.Name} container."); + + } + catch (Exception ex) + { + throw new Exception($"Error uploading labels for: {repo}", ex); + } + } + } + private BlobServiceClient GetBlobServiceClient(string accountName) { BlobServiceClient client = new( diff --git a/tools/issue-labeler/src/SearchIndexCreator/Program.cs b/tools/issue-labeler/src/SearchIndexCreator/Program.cs index 5668ada674f..54ab62e33a9 100644 --- a/tools/issue-labeler/src/SearchIndexCreator/Program.cs +++ b/tools/issue-labeler/src/SearchIndexCreator/Program.cs @@ -26,6 +26,7 @@ public static async Task Main(string[] args) Console.WriteLine("3. Process Demo"); Console.WriteLine("4. Create or Refresh Labels"); Console.WriteLine("5. Create or Update Knowledge Agent"); + Console.WriteLine("6. Delete Knowledge Agent"); var input = Console.ReadLine(); @@ -48,6 +49,9 @@ public static async Task Main(string[] args) case "5": await ProcessKnowledgeAgent(config); break; + case "6": + await DeleteKnowledgeAgent(config); + break; default: Console.WriteLine("Invalid option selected."); break; @@ -63,7 +67,19 @@ private static async Task ProcessSearchContent(IConfigurationSection config) { // 1. Retrieve all issues from a repository var issueTriageContentRetrieval = new IssueTriageContentRetrieval(config); - var issueTriageContent = await issueTriageContentRetrieval.RetrieveContent("Azure"); + var repository = config["repo"]; + var repoOwner = repository?.Equals("mcp", StringComparison.OrdinalIgnoreCase) == true + ? "microsoft" + : "Azure"; + List issueTriageContent; + if (repoOwner.Equals("microsoft", StringComparison.OrdinalIgnoreCase)) + { + issueTriageContent = await issueTriageContentRetrieval.RetrieveContentForMcp("microsoft"); + } + else + { + issueTriageContent = await issueTriageContentRetrieval.RetrieveContent("Azure"); + } Console.WriteLine($"Retrieved {issueTriageContent.Count} search contents from the repository."); // 2. Upload the search contents to Azure Blob Storage @@ -113,7 +129,19 @@ private static async Task ProcessLabels(IConfigurationSection config) { var tokenAuth = new Credentials(config["GithubKey"]); var labelRetrieval = new LabelRetrieval(tokenAuth, config); - await labelRetrieval.CreateOrRefreshLabels("Azure"); + var repo = config["repo"]; + var repoOwner = repo?.Equals("mcp", StringComparison.OrdinalIgnoreCase) == true + ? "microsoft" + : "Azure"; + + if (repoOwner.Equals("microsoft", StringComparison.OrdinalIgnoreCase)) + { + await labelRetrieval.CreateOrRefreshMcpLabels(repoOwner); + } + else + { + await labelRetrieval.CreateOrRefreshLabels(repoOwner); + } } private static async Task ProcessKnowledgeAgent(IConfigurationSection config) @@ -123,5 +151,13 @@ private static async Task ProcessKnowledgeAgent(IConfigurationSection config) var issueKnowledgeAgent = new IssueKnowledgeAgent(indexClient, config); await issueKnowledgeAgent.CreateOrUpdateAsync(); } + + private static async Task DeleteKnowledgeAgent(IConfigurationSection config) + { + var defaultCredential = new DefaultAzureCredential(); + var indexClient = new SearchIndexClient(new Uri(config["SearchEndpoint"]), defaultCredential); + var issueKnowledgeAgent = new IssueKnowledgeAgent(indexClient, config); + await issueKnowledgeAgent.DeleteAsync(); + } } } diff --git a/tools/issue-labeler/src/SearchIndexCreator/README.md b/tools/issue-labeler/src/SearchIndexCreator/README.md new file mode 100644 index 00000000000..0f8e43dcc0e --- /dev/null +++ b/tools/issue-labeler/src/SearchIndexCreator/README.md @@ -0,0 +1,310 @@ +# SearchIndexCreator + +A console application for setting up and managing Azure AI Search infrastructure for the GitHub Issue Labeler triage bot. This tool creates search indexes, retrieves GitHub issues/documents, and configures the knowledge agent used for intelligent issue triaging. + +## Overview + +SearchIndexCreator is responsible for: +- Fetching issues and documentation from GitHub repositories +- Uploading content to Azure Blob Storage +- Creating/updating Azure AI Search indexes with vector and semantic search capabilities +- Configuring skillsets for text chunking and embedding generation +- Managing Azure AI Search knowledge agents for intelligent retrieval + +## Prerequisites + +- .NET 8.0 SDK +- Azure subscription with the following resources: + - Azure AI Search service + - Azure OpenAI service (with embedding and chat models deployed) + - Azure Blob Storage account + - Azure App Configuration (for production deployment) +- GitHub Personal Access Token with `repo` permissions +- Appropriate Azure RBAC roles: + - `Search Index Data Contributor` on Azure AI Search + - `Storage Blob Data Contributor` on Azure Storage + - `Cognitive Services OpenAI User` on Azure OpenAI + +## Configuration + +Create a `local.settings.json` file in the SearchIndexCreator project directory: + +```json +{ + "IsEncrypted": false, + "Values": { + "SearchEndpoint": "https://.search.windows.net", + "OpenAIEndpoint": "https://.openai.azure.com", + "IndexName": "", + "StorageName": "", + "ContainerName": "", + "KnowledgeAgentModelName": "gpt-4.1-mini", + "KnowledgeAgentName": "", + "BlobConnectionString": "ResourceId=/subscriptions//resourceGroups//providers/Microsoft.Storage/storageAccounts/;", + "GithubKey": "", + "OpenAIModelName": "", + "EmbeddingModelName": "", + "IssueStorageName": "", + "repo": "", + "RepositoryNamesForLabels": "azure-sdk-for-net;azure-sdk-for-js;azure-sdk-for-python", + "ConfigurationEndpoint": "https://.azconfig.io", + "McpRepositoryForLabels": "mcp", + "RerankerThreshold": "1.0" + } +} +``` + +### Configuration Fields + +| Field | Description | Example | +|-------|-------------|---------| +| `SearchEndpoint` | Azure AI Search service endpoint | `https://my-search.search.windows.net` | +| `OpenAIEndpoint` | Azure OpenAI service endpoint | `https://my-openai.openai.azure.com` | +| `IndexName` | Name for the search index | `issue-triage-index` | +| `StorageName` | Azure Storage account name for blob storage | `mystorageaccount` | +| `ContainerName` | Prefix for blob container (suffix `-blob` added automatically) | `issue-triage` | +| `KnowledgeAgentModelName` | Azure OpenAI chat model deployment name | `gpt-4.1-mini` | +| `KnowledgeAgentName` | Name for the knowledge agent | `issue-triage-agent` | +| `BlobConnectionString` | Resource ID connection string for managed identity | See Azure Portal → Storage Account → Access Keys | +| `GithubKey` | GitHub Personal Access Token | `github_pat_...` | +| `OpenAIModelName` | Azure OpenAI model for chat completions | `gpt-4.1-mini` | +| `EmbeddingModelName` | Azure OpenAI embedding model deployment | `text-embedding-ada-002` or `text-embedding-3-large` | +| `IssueStorageName` | Storage account for label retrieval | Same as `StorageName` | +| `repo` | Target repository name | `azure-sdk-for-net` or `mcp` | +| `RepositoryNamesForLabels` | Semicolon-separated list of Azure SDK repos | `azure-sdk-for-net;azure-sdk-for-js` | +| `ConfigurationEndpoint` | Azure App Configuration endpoint (optional) | `https://my-config.azconfig.io` | +| `McpRepositoryForLabels` | MCP repository name | `mcp` | +| `RerankerThreshold` | Semantic reranker score threshold (0.0-1.0) | `1.0` (default), `0.7` (for MCP) | + +### Embedding Model Notes + +- **`text-embedding-3-small`**: 1536 dimensions (default for Azure SDK repos) +- **`text-embedding-3-large`**: 3072 dimensions (used for MCP repository) + +The vector dimensions are automatically calculated based on the embedding model name. + +### Repository-Specific Settings + +**For Azure SDK repositories:** +- `repo`: Set to specific SDK repo (e.g., `azure-sdk-for-net`) +- Uses Service/Category labels (colors: `e99695` for service, `ffeb77` for category) +- Chunk size: 1000 characters, overlap: 100 characters +- `RerankerThreshold`: `1.0` (default) + +**For MCP repository:** +- `repo`: Set to `mcp` +- Uses Server/Tool labels (`server-*`, `tools-*`, `remote-mcp` prefixes) +- Chunk size: 2200 characters, overlap: 250 characters +- `RerankerThreshold`: `0.7` (more permissive for broader matches) + +## Usage + +Run the application: + +```powershell +dotnet run +``` + +You'll be presented with a menu: + +``` +Select an option: +1. Process Search Content +2. Process Issue Examples +3. Process Demo +4. Create or Refresh Labels +5. Create or Update Knowledge Agent +6. Delete Knowledge Agent +``` + +### Option 1: Process Search Content + +**Purpose:** Complete end-to-end setup/refresh of the search infrastructure. + +**What it does:** +1. Fetches all closed, labeled issues from the configured GitHub repository +2. Retrieves documentation files from the repository (for Azure SDK repos) +3. Uploads content to Azure Blob Storage as JSON documents +4. Creates or updates the Azure AI Search index with: + - Vector search (HNSW algorithm with binary quantization) + - Semantic search configuration + - Appropriate fields for the repository type +5. Creates or updates the data source connection to Blob Storage +6. Creates or updates the skillset: + - Text splitting skill (chunking) + - Azure OpenAI embedding skill +7. Creates or updates the indexer with daily schedule + +**When to use:** +- Initial setup of the search infrastructure +- Refreshing the knowledge base with latest issues +- After modifying index schema or skillset configuration + +**Expected time:** 5-30 minutes depending on repository size and number of issues + +### Option 2: Process Issue Examples + +**Purpose:** Extract sample issues for testing. + +**What it does:** +- Retrieves the last 7 days of closed issues with `customer-reported` and `issue-addressed` labels +- Saves to `issues.json` in the current directory + +**When to use:** +- Creating test datasets +- Manual testing of labeler predictions + +### Option 3: Process Demo + +**Purpose:** Upload recent issues to a private demo repository. + +**What it does:** +- Retrieves issues from the last 14 days +- Creates duplicate issues in a private repository (requires `GithubKeyPrivate` configuration) + +**When to use:** +- Setting up demo environments +- Testing without affecting production repositories + +### Option 4: Create or Refresh Labels + +**Purpose:** Extract and store label definitions from GitHub repositories. + +**What it does:** +- Fetches labels from configured repositories +- Filters labels by type: + - Azure SDK: Service labels (`e99695` color) and Category labels (`ffeb77` color) + - MCP: Server labels (`server-*`), Tool labels (`tools-*`, `remote-mcp`) +- Uploads label definitions to Azure Blob Storage (`labels` container) + +**When to use:** +- Initial setup +- After adding/modifying labels in GitHub +- Periodically to sync label changes + +### Option 5: Create or Update Knowledge Agent + +**Purpose:** Configure the Azure AI Search knowledge agent. + +**What it does:** +- Creates or updates a knowledge agent that references the search index +- Configures the chat model (`KnowledgeAgentModelName`) +- Sets the semantic reranker threshold (`RerankerThreshold`) + +**When to use:** +- After creating/updating the search index +- When changing reranker threshold settings +- After modifying knowledge agent configuration +- **To verify changes after code refactoring** (quickest validation method) + +**Expected time:** < 1 minute + +### Option 6: Delete Knowledge Agent + +**Purpose:** Remove the knowledge agent. + +**What it does:** +- Deletes the knowledge agent from Azure AI Search +- Does not affect the search index or data + +**When to use:** +- Cleanup operations +- Before recreating with different configuration + +## Architecture + +### Data Flow + +``` +GitHub Issues/Docs + ↓ +IssueTriageContentRetrieval + ↓ +Azure Blob Storage (JSON documents) + ↓ +Azure Search Indexer (scheduled) + ↓ +Skillset (chunking + embeddings) + ↓ +Azure Search Index (vector + semantic) + ↓ +Knowledge Agent (retrieval interface) +``` + +### Search Index Features + +- **Vector Search**: HNSW algorithm with binary quantization for efficient similarity search +- **Semantic Search**: L2 semantic ranker for improved relevance +- **Hybrid Search**: Combines vector, semantic, and keyword search +- **Built-in Vectorizer**: Automatic embedding generation using Azure OpenAI + +### Field Schema + +**Common Fields:** +- `ChunkId` (key): Unique identifier for each chunk +- `ParentId`: Original issue/document ID +- `Chunk`: Text content (chunked) +- `TextVector`: Embedding vector (1536 or 3072 dimensions) +- `Title`: Issue/document title +- `Author`: GitHub username +- `Repository`: Repository name +- `CreatedAt`: Creation timestamp +- `Url`: GitHub issue/document URL +- `CodeOwner`: Code owner identifier (1 or 0) +- `DocumentType`: `Issue`, `Document`, or `Comment` + +**Azure SDK Specific:** +- `Service`: Service label (filterable) +- `Category`: Category label (filterable) + +**MCP Specific:** +- `Server`: Server label(s) (filterable) +- `Tool`: Tool label(s) (filterable) + +## Troubleshooting + +### Authentication Errors + +**Issue:** `Unauthorized` or `Forbidden` errors + +**Solution:** +- Ensure you're authenticated with Azure CLI: `az login` +- Verify RBAC role assignments on Azure resources +- Check that managed identity or service principal has correct permissions + +### Indexer Failures + +**Issue:** Indexer shows failed status in Azure Portal + +**Solution:** +- Check indexer execution history for detailed error messages +- Verify blob storage contains valid JSON documents +- Ensure skillset configuration matches your Azure OpenAI deployment names +- Confirm embedding model deployment exists and is accessible + +### Missing Issues in Search Results + +**Issue:** Search doesn't return expected issues + +**Solution:** +- Verify issues have required labels (Service/Category or Server/Tool) +- Check if issues are closed (only closed issues are indexed) +- Wait for indexer to complete processing (check Azure Portal) +- Verify `RerankerThreshold` isn't too strict (lower for more results) + +### Embedding Dimension Mismatch + +**Issue:** `Vector dimensions do not match` error + +**Solution:** +- Verify `EmbeddingModelName` in configuration matches your deployment +- If changing models, delete and recreate the index (or change `IndexName`) +- Ensure consistency: `text-embedding-ada-002` = 1536 dims, `text-embedding-3-large` = 3072 dims + +### Testing Changes + +Full refresh workflow: +1. Run **Option 1** (Process Search Content) - 5-30 minutes +2. Monitor indexer status in Azure Portal +3. Run **Option 4** to refresh labels +4. Run **Option 5** (Update Knowledge Agent)