Skip to content

Add ToolMetadataExporter#992

Merged
conniey merged 78 commits intomicrosoft:mainfrom
conniey:exporter
Jan 26, 2026
Merged

Add ToolMetadataExporter#992
conniey merged 78 commits intomicrosoft:mainfrom
conniey:exporter

Conversation

@conniey
Copy link
Copy Markdown
Member

@conniey conniey commented Oct 28, 2025

What does this PR do?

Adds tool to export current metadata from azmcp.

GitHub issue number?

[Link to the GitHub issue this PR addresses]
https://github.com/microsoft/mcp-pr/issues/123

Pre-merge Checklist

  • Required for All PRs
    • Read contribution guidelines
    • PR title clearly describes the change
    • Commit history is clean with descriptive messages (cleanup guide)
    • Added comprehensive tests for new/modified functionality
    • Updated servers/Azure.Mcp.Server/CHANGELOG.md and/or servers/Fabric.Mcp.Server/CHANGELOG.md for product changes (features, bug fixes, UI/UX, updated dependencies)
  • For MCP tool changes:
    • One tool per PR: This PR adds or modifies only one MCP tool for faster review cycles
    • Updated servers/Azure.Mcp.Server/README.md and/or servers/Fabric.Mcp.Server/README.md documentation
    • Validate README.md changes using script at eng/scripts/Process-PackageReadMe.ps1. See Package README
    • Updated command list in /servers/Azure.Mcp.Server/docs/azmcp-commands.md and/or /docs/fabric-commands.md
    • Run .\eng\scripts\Update-AzCommandsMetadata.ps1 to update tool metadata in azmcp-commands.md (required for CI)
    • For new or modified tool descriptions, ran ToolDescriptionEvaluator and obtained a score of 0.4 or more and a top 3 ranking for all related test prompts
    • For new tools associated with Azure services or publicly available tools/APIs/products, add URL to documentation in the PR description
  • Extra steps for Azure MCP Server tool changes:
    • Updated test prompts in /servers/Azure.Mcp.Server/docs/e2eTestPrompts.md
    • 👉 For Community (non-Microsoft team member) PRs:
      • Security review: Reviewed code for security vulnerabilities, malicious code, or suspicious activities before running tests (crypto mining, spam, data exfiltration, etc.)
      • Manual tests run: added comment /azp run mcp - pullrequest - live to run Live Test Pipeline

@joshfree joshfree added this to the 2025-11 milestone Oct 29, 2025
@joshfree joshfree moved this from Untriaged to In Progress in Azure MCP Server Oct 29, 2025
Comment thread eng/tools/ToolMetadataExporter/Services/AzmcpProgram.cs Outdated
Comment thread eng/tools/ToolMetadataExporter/Utility.cs Outdated
@conniey conniey changed the title (WIP) Add ToolMetadataExporter Add ToolMetadataExporter Nov 11, 2025
@conniey conniey marked this pull request as ready for review November 11, 2025 19:33
@conniey conniey requested a review from a team as a code owner November 11, 2025 19:33
Copilot AI review requested due to automatic review settings November 11, 2025 19:33
@conniey conniey requested review from a team as code owners November 11, 2025 19:33
Copy link
Copy Markdown
Contributor

Copilot AI left a 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 adds a new ToolMetadataExporter tool that exports and tracks metadata changes from the Azure MCP server (azmcp). The tool compares current tool definitions against historical data stored in Azure Data Explorer (Kusto) and records creation, update, and deletion events.

Key changes:

  • New ToolMetadataExporter console application that dynamically loads tools from azmcp and compares them against a Kusto datastore
  • Integration with Azure Data Explorer for querying existing tools and ingesting change events
  • Support for tracking tool lifecycle events (Created, Updated, Deleted) with version information

Reviewed Changes

Copilot reviewed 23 out of 23 changed files in this pull request and generated 12 comments.

Show a summary per file
File Description
eng/tools/ToolMetadataExporter/Program.cs Entry point configuring DI, Azure authentication, and Kusto clients
eng/tools/ToolMetadataExporter/ToolAnalyzer.cs Core analysis logic comparing current tools against datastore and detecting changes
eng/tools/ToolMetadataExporter/Utility.cs Helper methods for executing azmcp commands and parsing tool metadata
eng/tools/ToolMetadataExporter/Services/AzmcpProgram.cs Service wrapper for interacting with the azmcp executable
eng/tools/ToolMetadataExporter/Services/AzureMcpKustoDatastore.cs Kusto datastore implementation for querying and ingesting tool events
eng/tools/ToolMetadataExporter/Services/IAzureMcpDatastore.cs Interface defining datastore operations
eng/tools/ToolMetadataExporter/Models/Kusto/McpToolEvent.cs Model representing tool lifecycle events with Kusto column mappings
eng/tools/ToolMetadataExporter/Models/Kusto/McpToolEventType.cs Enum defining event types (Created, Updated, Deleted)
eng/tools/ToolMetadataExporter/Models/ModelsSerializationContext.cs JSON source generation context for AOT compatibility
eng/tools/ToolMetadataExporter/Models/AzureMcpTool.cs Record representing a tool with ID, name, and area
eng/tools/ToolMetadataExporter/AppConfiguration.cs Configuration model for Kusto endpoints and settings
eng/tools/ToolMetadataExporter/appsettings.json Production configuration template
eng/tools/ToolMetadataExporter/appsettings.Development.json Development environment configuration
eng/tools/ToolMetadataExporter/Resources/queries/GetAvailableTools.kql KQL query to retrieve latest tool states
eng/tools/ToolMetadataExporter/Resources/queries/CreateTable.kql KQL script to create the McpToolEvents table
eng/tools/ToolMetadataExporter/ToolMetadataExporter.csproj Project file with dependencies on Azure.Identity and Kusto SDKs
eng/tools/ToolMetadataExporter.UnitTests/ToolAnalyzerTests.cs Empty test class placeholder for unit tests
eng/tools/ToolMetadataExporter.UnitTests/ToolMetadataExporter.UnitTests.csproj Test project configuration
eng/tools/ToolDescriptionEvaluator/Models/McpModels.cs Added Id property to Tool model
Directory.Packages.props Updated Kusto package versions to 14.0.1 and added Ingest package
AzureMcp.sln Added ToolMetadataExporter projects to solution

Comment thread eng/tools/ToolMetadataExporter/src/Services/AzureMcpKustoDatastore.cs Outdated
Comment thread eng/tools/ToolMetadataExporter/src/Utility.cs
Comment thread eng/tools/ToolMetadataExporter/Program.cs Outdated
Comment thread eng/tools/ToolMetadataExporter/src/Utility.cs Outdated
Comment thread eng/tools/ToolMetadataExporter/src/ToolAnalyzer.cs Outdated
Comment thread eng/tools/ToolMetadataExporter/src/Utility.cs
Comment thread eng/tools/ToolMetadataExporter/src/Utility.cs Outdated
Comment thread eng/tools/ToolMetadataExporter/src/Utility.cs Outdated
Comment thread eng/tools/ToolMetadataExporter/src/ToolAnalyzer.cs Outdated
Comment thread eng/tools/ToolMetadataExporter/src/Utility.cs
conniey and others added 2 commits January 26, 2026 12:33
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
@conniey conniey merged commit 6bb4d76 into microsoft:main Jan 26, 2026
13 checks passed
@github-project-automation github-project-automation Bot moved this from In Progress to Done in Azure MCP Server Jan 26, 2026
@conniey conniey deleted the exporter branch January 26, 2026 22:34
colbytimm pushed a commit to colbytimm/microsoft-mcp that referenced this pull request Apr 20, 2026
* Add PackageVersion for Kusto.Data and Kusto.Ingest

* Add Id to shared McpModels.

* Initial commit

* Remove AoT

* Add initial mock up

* Split to use Query and Ingestion endpoint.

* Add Query to create table.

* Add LaunchSettings.

* Adding Appsettings.json. Copy to output

* Update Json serialization to output Enum names.

* Move JsonOutput parsing. Fix command line arguments to pass to exe

* Pass in command rather than just name in changes.

* Update Logging

* Change to use Direct Ingestion client

* Add header

* Add ServerName support.

* Remove test template.

* Add ServerName

* Propagate cancellation

* Moving classes into src/tests

* Move parsing from command line to use IConfiguration.

* Add ServerName column to Kusto mapping at the end.

* Add documentation to CommandLineOptions

* Add ServerInfoResult for `server info`

* Add IsDryRun, AzMcp to app configuration

* Update Program to configure AppConfiguration and CommandLineOptions

* Add FileName parameter to utility methods.

* Update ToolAnalyzer to use file name parameter from Utility.

* Create functions for AzMcp program.

* Change utility classes into a class

* - Add utility into DI container
- Fix Configuration binding for AppConfig.

* Use lazy initialization.

* Add tests

* Make methods virtual for testability

* Add tests for AzaureMcpKustoDatastore

* Add ToolAnalyzerTests

* UseAnalysisTime in EventTime

* Replace strings with nameof()

* Remove Constants file.

* Add documentation to app configuration and make constant internally accessible.

* Add README

Co-authored-by: Alan Zimmer <48699787+alzimmermsft@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

4 participants