-
Notifications
You must be signed in to change notification settings - Fork 227
MCP Issue Labeler GitHub Triage Bot - PART I #13552
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
… non labelled issues
Removed unnecessary parameter 'mcpProcessor' from ProcessScheduledEvent call.
…-sdk-tools into mcp-gh-issue-labeler
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pull request overview
This PR implements an AI-powered issue labeling system for the microsoft/mcp repository using Azure AI Search, Azure OpenAI, and RAG (Retrieval-Augmented Generation). The system automatically predicts Server and Tool labels for new issues based on similarity to historical labeled issues.
Changes:
- Adds
McpOpenAiLabelerwith RAG-based label prediction achieving ~90% accuracy - Implements MCP-specific infrastructure (
McpTriageRag) with query preprocessing and filtering - Creates evaluation tool (
Mcp.Evaluator) for testing labeler accuracy against ground truth - Updates GitHub event processor to route microsoft/mcp issues to new MCP-specific triage logic
Reviewed changes
Copilot reviewed 30 out of 30 changed files in this pull request and generated 29 comments.
Show a summary per file
| File | Description |
|---|---|
| tools/issue-labeler/src/SearchIndexCreator/README.md | Comprehensive setup documentation for search infrastructure |
| tools/issue-labeler/src/SearchIndexCreator/Program.cs | Adds repository-specific routing and delete agent option |
| tools/issue-labeler/src/SearchIndexCreator/LabelRetrieval.cs | Implements MCP label extraction from GitHub |
| tools/issue-labeler/src/SearchIndexCreator/IssueTriageContentRetrieval.cs | Adds MCP issue retrieval with Server/Tool label support |
| tools/issue-labeler/src/SearchIndexCreator/IssueTriageContentIndex.cs | Configures MCP-optimized skillset and field mappings |
| tools/issue-labeler/src/SearchIndexCreator/IssueKnowledgeAgent.cs | Adds configurable reranker threshold and delete capability |
| tools/issue-labeler/src/SearchIndexCreator/DocumentTypes.cs | Adds Comment document type |
| tools/issue-labeler/src/Mcp.Evaluator/README.md | Documentation for evaluation tool usage |
| tools/issue-labeler/src/Mcp.Evaluator/McpLabelerTool.cs | Main evaluation program with prediction and extraction modes |
| tools/issue-labeler/src/Mcp.Evaluator/Mcp.Evaluator.csproj | Project configuration |
| tools/issue-labeler/src/Mcp.Evaluator/Evaluation/* | Test models and evaluator implementation |
| tools/issue-labeler/src/IssueLabelerService/TraigeRag.cs | Changes filter parameter from Dictionary to string |
| tools/issue-labeler/src/IssueLabelerService/Program.cs | Registers McpTriageRag and adds config override capability |
| tools/issue-labeler/src/IssueLabelerService/Labelers/Mcp/McpTriageRag.cs | MCP-specific RAG with query cleaning and labeled issue filtering |
| tools/issue-labeler/src/IssueLabelerService/Labelers/Mcp/McpOpenAiLabeler.cs | Main labeler with extensive classification prompt and validation |
| tools/issue-labeler/src/IssueLabelerService/Labelers/LabelerFactory.cs | Adds McpOpenAI labeler factory case |
| tools/issue-labeler/src/IssueLabeler.Shared/IssueTriageContent.cs | Adds Server and Tool fields |
| tools/issue-labeler/IssueLabeler.sln | Adds Mcp.Evaluator project with platform configurations |
| tools/issue-labeler/Directory.Build.props | Updates Microsoft.Extensions versions |
| tools/github-event-processor/*/Program.cs | Adds DI container and McpIssueProcessing service |
| tools/github-event-processor/*/McpIssueProcessing.cs | MCP-specific triage logic with code owner assignment |
| tools/github-event-processor/*/IssueProcessing.cs | Routes MCP issues to dedicated processor |
| tools/github-event-processor/*/ConfigConstants.cs | Defines MCP label prefixes |
| tools/github-event-processor/*/Azure.Sdk.Tools.GitHubEventProcessor.csproj | Adds hosting dependencies |
| tools/github-event-processor/Tests/* | Test payloads and McpIssueProcessingTests |
...ntProcessor.Tests/Tests.JsonEventPayloads/McpIssueTriage_issue_opened_with_needs_triage.json
Outdated
Show resolved
Hide resolved
tools/issue-labeler/src/SearchIndexCreator/IssueTriageContentRetrieval.cs
Outdated
Show resolved
Hide resolved
tools/issue-labeler/src/SearchIndexCreator/IssueTriageContentRetrieval.cs
Outdated
Show resolved
Hide resolved
tools/issue-labeler/src/IssueLabelerService/Labelers/LabelerFactory.cs
Outdated
Show resolved
Hide resolved
...b-event-processor/Azure.Sdk.Tools.GitHubEventProcessor/EventProcessing/McpIssueProcessing.cs
Outdated
Show resolved
Hide resolved
...t-processor/Azure.Sdk.Tools.GitHubEventProcessor/Azure.Sdk.Tools.GitHubEventProcessor.csproj
Outdated
Show resolved
Hide resolved
tools/github-event-processor/Azure.Sdk.Tools.GitHubEventProcessor/Constants/ConfigConstants.cs
Outdated
Show resolved
Hide resolved
| using System.Collections.Specialized; | ||
| using System.Diagnostics.Contracts; | ||
| using System.Linq; | ||
| using System.Reflection.Metadata; | ||
| using System.Security.Cryptography.X509Certificates; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is a good suggestion; using "Remove and sort usings" would be a good idea here.
tools/github-event-processor/Azure.Sdk.Tools.GitHubEventProcessor/Constants/ConfigConstants.cs
Outdated
Show resolved
Hide resolved
...thub-event-processor/Azure.Sdk.Tools.GitHubEventProcessor/EventProcessing/IssueProcessing.cs
Outdated
Show resolved
Hide resolved
...b-event-processor/Azure.Sdk.Tools.GitHubEventProcessor/EventProcessing/McpIssueProcessing.cs
Show resolved
Hide resolved
...b-event-processor/Azure.Sdk.Tools.GitHubEventProcessor/EventProcessing/McpIssueProcessing.cs
Outdated
Show resolved
Hide resolved
tools/issue-labeler/src/Mcp.Evaluator/Evaluation/McpTestModels.cs
Outdated
Show resolved
Hide resolved
tools/issue-labeler/src/IssueLabelerService/Labelers/Mcp/McpOpenAiLabeler.cs
Outdated
Show resolved
Hide resolved
tools/issue-labeler/src/IssueLabelerService/Labelers/Mcp/McpOpenAiLabeler.cs
Show resolved
Hide resolved
tools/issue-labeler/src/IssueLabelerService/Labelers/Mcp/McpOpenAiLabeler.cs
Show resolved
Hide resolved
tools/issue-labeler/src/IssueLabelerService/Labelers/Mcp/McpTriageRag.cs
Outdated
Show resolved
Hide resolved
tools/issue-labeler/src/IssueLabelerService/Labelers/Mcp/McpTriageRag.cs
Outdated
Show resolved
Hide resolved
tools/issue-labeler/src/IssueLabelerService/Labelers/Mcp/McpOpenAiLabeler.cs
Show resolved
Hide resolved
tools/issue-labeler/src/SearchIndexCreator/IssueTriageContentIndex.cs
Outdated
Show resolved
Hide resolved
tools/issue-labeler/src/SearchIndexCreator/IssueTriageContentIndex.cs
Outdated
Show resolved
Hide resolved
tools/issue-labeler/src/SearchIndexCreator/IssueTriageContentRetrieval.cs
Outdated
Show resolved
Hide resolved
tools/issue-labeler/src/SearchIndexCreator/IssueTriageContentRetrieval.cs
Outdated
Show resolved
Hide resolved
...b-event-processor/Azure.Sdk.Tools.GitHubEventProcessor/EventProcessing/McpIssueProcessing.cs
Show resolved
Hide resolved
Major differences
Likelyhood of regression is minimal given dependency injection and changes. Workflow
Server labelsCrated as part of onboarding. Not referenced from CODEOWNERS. https://github.com/microsoft/mcp/issues/labels?q=server-
DeploymentHow is this deployed? How do we roll back/patch forward if there's a regression? |
danieljurek
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM. Let's get this deployed and iterating.
There's some stuff to document here but that knowledge should probably all go in a wiki.
…3634) Sync .github/workflows directory with azure-sdk-tools for PR Azure/azure-sdk-tools#13552 See [eng/common workflow](https://github.com/Azure/azure-sdk-tools/blob/main/eng/common/README.md#workflow) --------- Co-authored-by: anannya03 <aaniee09@gmail.com>
…37185) Sync .github/workflows directory with azure-sdk-tools for PR Azure/azure-sdk-tools#13552 See [eng/common workflow](https://github.com/Azure/azure-sdk-tools/blob/main/eng/common/README.md#workflow) --------- Co-authored-by: anannya03 <aaniee09@gmail.com>
| var csvOutput = args.FirstOrDefault(a => a.StartsWith("--output="))?.Split('=')[1] | ||
| ?? "mcp_evaluation_results.csv"; | ||
|
|
||
| var credential = new DefaultAzureCredential(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hey Anannya,
Could you please change this, it is causing S360 alertalerts for the CodeQL DefaultAzureCredential scan. I was told the due date is Feb 13th.

MCP Issue Labeler GitHub Triage Bot
This PR adds an issue labeling system for the
microsoft/mcprepository using Azure AI Search, Azure OpenAI, and RAG (Retrieval-Augmented Generation). It also updates the InitialIssueTriage rule for the microsoft/mcp repository to ensure consistent triage behavior across newly created issues.Changes
MCP Labeler (
McpOpenAiLabeler)ServerandToollabels for new MCP issuesexcludeIssueIdfilterMCP-Specific Infrastructure (
McpTriageRag)Server ne null)Evaluation Tool (
Mcp.Evaluator)TASK: microsoft/mcp#127