Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
53 commits
Select commit Hold shift + click to select a range
2409e1b
Add PackageVersion for Kusto.Data and Kusto.Ingest
conniey Oct 23, 2025
6ed1764
Add Id to shared McpModels.
conniey Oct 23, 2025
9e969b4
Initial commit
conniey Oct 23, 2025
401a5c3
Remove AoT
conniey Oct 23, 2025
c408b27
Add initial mock up
conniey Oct 23, 2025
d457f28
Split to use Query and Ingestion endpoint.
conniey Oct 23, 2025
1f9aa3c
Add Query to create table.
conniey Oct 23, 2025
2821837
Add LaunchSettings.
conniey Oct 23, 2025
489992e
Set Default queries folder.
conniey Oct 23, 2025
ab17337
Adding Appsettings.json. Copy to output
conniey Oct 28, 2025
85307e6
Update Json serialization to output Enum names.
conniey Oct 27, 2025
dd00c3c
Start host
conniey Oct 27, 2025
cab589b
Move JsonOutput parsing. Fix command line arguments to pass to exe
conniey Oct 27, 2025
43156a5
Pass in command rather than just name in changes.
conniey Oct 27, 2025
c185cc2
Update Logging
conniey Oct 27, 2025
b24854a
Change interface to use List. Update Ingestion settings for singlejson
conniey Oct 27, 2025
218c005
Fix column mappings
conniey Oct 27, 2025
eb6feb4
Change to use Direct Ingestion client
conniey Oct 27, 2025
b368386
Fix formatting issues
conniey Oct 28, 2025
b1a39ba
Fix formatting
conniey Oct 28, 2025
518db94
Add Friend assembly
conniey Oct 28, 2025
addcfcc
Add unit test project
conniey Oct 28, 2025
7733529
Make method virtual
conniey Oct 28, 2025
3ba8162
Fix formatting issue.
conniey Oct 28, 2025
c66ffe8
Add header
conniey Oct 28, 2025
b8f8909
Add dev settings
conniey Oct 28, 2025
7bd7bd9
Add header
conniey Oct 29, 2025
398ad9d
Add ServerName support.
conniey Nov 11, 2025
fcadc9e
Remove test template.
conniey Nov 11, 2025
fc3e09b
Add ServerName
conniey Nov 11, 2025
1e7eee5
Propagate cancellation
conniey Nov 11, 2025
a527261
Moving classes into src/tests
conniey Dec 4, 2025
5ab55ab
Move parsing from command line to use IConfiguration.
conniey Jan 7, 2026
dd8d9b9
Add ServerName column to Kusto mapping at the end.
conniey Jan 8, 2026
f868255
Add documentation to CommandLineOptions
conniey Jan 8, 2026
9b88050
Add ServerInfoResult for `server info`
conniey Jan 8, 2026
dd909a6
Add IsDryRun, AzMcp to app configuration
conniey Jan 8, 2026
1b1449a
Update Program to configure AppConfiguration and CommandLineOptions
conniey Jan 8, 2026
dd6dad3
Add FileName parameter to utility methods.
conniey Jan 8, 2026
836c3b3
Update ToolAnalyzer to use file name parameter from Utility.
conniey Jan 8, 2026
01082f5
Create functions for AzMcp program.
conniey Jan 12, 2026
c6bcca4
Change utility classes into a class
conniey Jan 12, 2026
d8e65c9
- Add utility into DI container
conniey Jan 12, 2026
d7bc8cd
Use lazy initialization.
conniey Jan 12, 2026
0249c0b
Add tests
conniey Jan 12, 2026
0c90ff6
Make methods virtual for testability
conniey Jan 12, 2026
ec744b3
Add tests for AzaureMcpKustoDatastore
conniey Jan 12, 2026
4657c44
Add ToolAnalyzerTests
conniey Jan 12, 2026
c23ca90
Add tool projects to solution
conniey Jan 12, 2026
bcdfa4b
Fix formatting error in AzureMcpKustoDatastore
conniey Jan 13, 2026
f2c0d38
Fix formatting error in ToolAnalyzerTests
conniey Jan 13, 2026
cab9ecf
Fix whitespace AzmcpProgram
conniey Jan 13, 2026
d30a9b6
Add Ticks to FileName.
conniey Jan 13, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 35 additions & 4 deletions AzureMcp.sln
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.0.31903.59
# Visual Studio Version 18
VisualStudioVersion = 18.1.11312.151 d18.0
MinimumVisualStudioVersion = 10.0.40219.1
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "core", "core", "{FBF56CC3-7AE6-AD2D-3F14-7F97FD322CD6}"
EndProject
Expand Down Expand Up @@ -591,6 +590,12 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tests", "tests", "{294AC723
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Fabric.Mcp.Tools.PublicApi.UnitTests", "tools\Fabric.Mcp.Tools.PublicApi\tests\Fabric.Mcp.Tools.PublicApi.UnitTests\Fabric.Mcp.Tools.PublicApi.UnitTests.csproj", "{D3F46C2D-3AFD-FD9C-9C6A-180B1514DD2F}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ToolMetadataExporter", "ToolMetadataExporter", "{BB32CFBE-B28C-4ADD-B518-0B161017E82B}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ToolMetadataExporter.UnitTests", "eng\tools\ToolMetadataExporter\tests\ToolMetadataExporter.UnitTests\ToolMetadataExporter.UnitTests.csproj", "{72A3BA32-F77D-FCBD-6A2C-1FEE3C3EA1FD}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ToolMetadataExporter", "eng\tools\ToolMetadataExporter\src\ToolMetadataExporter.csproj", "{7438F013-054C-3F6E-D56C-D6559BFD835E}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Expand Down Expand Up @@ -2233,6 +2238,30 @@ Global
{D3F46C2D-3AFD-FD9C-9C6A-180B1514DD2F}.Release|x64.Build.0 = Release|Any CPU
{D3F46C2D-3AFD-FD9C-9C6A-180B1514DD2F}.Release|x86.ActiveCfg = Release|Any CPU
{D3F46C2D-3AFD-FD9C-9C6A-180B1514DD2F}.Release|x86.Build.0 = Release|Any CPU
{72A3BA32-F77D-FCBD-6A2C-1FEE3C3EA1FD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{72A3BA32-F77D-FCBD-6A2C-1FEE3C3EA1FD}.Debug|Any CPU.Build.0 = Debug|Any CPU
{72A3BA32-F77D-FCBD-6A2C-1FEE3C3EA1FD}.Debug|x64.ActiveCfg = Debug|Any CPU
{72A3BA32-F77D-FCBD-6A2C-1FEE3C3EA1FD}.Debug|x64.Build.0 = Debug|Any CPU
{72A3BA32-F77D-FCBD-6A2C-1FEE3C3EA1FD}.Debug|x86.ActiveCfg = Debug|Any CPU
{72A3BA32-F77D-FCBD-6A2C-1FEE3C3EA1FD}.Debug|x86.Build.0 = Debug|Any CPU
{72A3BA32-F77D-FCBD-6A2C-1FEE3C3EA1FD}.Release|Any CPU.ActiveCfg = Release|Any CPU
{72A3BA32-F77D-FCBD-6A2C-1FEE3C3EA1FD}.Release|Any CPU.Build.0 = Release|Any CPU
{72A3BA32-F77D-FCBD-6A2C-1FEE3C3EA1FD}.Release|x64.ActiveCfg = Release|Any CPU
{72A3BA32-F77D-FCBD-6A2C-1FEE3C3EA1FD}.Release|x64.Build.0 = Release|Any CPU
{72A3BA32-F77D-FCBD-6A2C-1FEE3C3EA1FD}.Release|x86.ActiveCfg = Release|Any CPU
{72A3BA32-F77D-FCBD-6A2C-1FEE3C3EA1FD}.Release|x86.Build.0 = Release|Any CPU
{7438F013-054C-3F6E-D56C-D6559BFD835E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{7438F013-054C-3F6E-D56C-D6559BFD835E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{7438F013-054C-3F6E-D56C-D6559BFD835E}.Debug|x64.ActiveCfg = Debug|Any CPU
{7438F013-054C-3F6E-D56C-D6559BFD835E}.Debug|x64.Build.0 = Debug|Any CPU
{7438F013-054C-3F6E-D56C-D6559BFD835E}.Debug|x86.ActiveCfg = Debug|Any CPU
{7438F013-054C-3F6E-D56C-D6559BFD835E}.Debug|x86.Build.0 = Debug|Any CPU
{7438F013-054C-3F6E-D56C-D6559BFD835E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{7438F013-054C-3F6E-D56C-D6559BFD835E}.Release|Any CPU.Build.0 = Release|Any CPU
{7438F013-054C-3F6E-D56C-D6559BFD835E}.Release|x64.ActiveCfg = Release|Any CPU
{7438F013-054C-3F6E-D56C-D6559BFD835E}.Release|x64.Build.0 = Release|Any CPU
{7438F013-054C-3F6E-D56C-D6559BFD835E}.Release|x86.ActiveCfg = Release|Any CPU
{7438F013-054C-3F6E-D56C-D6559BFD835E}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
Expand Down Expand Up @@ -2528,6 +2557,8 @@ Global
{E3F46C2D-3AFD-FD9C-9C6A-180B1514DD30} = {7CB41572-AACD-B631-FA61-D313B4B8C8E9}
{294AC723-70DA-F50A-2C7A-AC6C0AEA0A62} = {9072C7AF-9EB2-E481-3974-77957587AC76}
{D3F46C2D-3AFD-FD9C-9C6A-180B1514DD2F} = {294AC723-70DA-F50A-2C7A-AC6C0AEA0A62}
{BB32CFBE-B28C-4ADD-B518-0B161017E82B} = {DAAE2FFB-70A9-DCEF-23A0-0ABAED0A9720}
{72A3BA32-F77D-FCBD-6A2C-1FEE3C3EA1FD} = {BB32CFBE-B28C-4ADD-B518-0B161017E82B}
{7438F013-054C-3F6E-D56C-D6559BFD835E} = {BB32CFBE-B28C-4ADD-B518-0B161017E82B}
EndGlobalSection
EndGlobal

3 changes: 2 additions & 1 deletion Directory.Packages.props
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,8 @@
<PackageVersion Include="Azure.ResourceManager.StorageSync" Version="1.3.1" />
<PackageVersion Include="Azure.ResourceManager.FileShares" Version="1.0.0-beta.1" />
<PackageVersion Include="Azure.ResourceManager.ResourceGraph" Version="1.1.0" />
<PackageVersion Include="Microsoft.Azure.Kusto.Data" Version="13.0.2" />
<PackageVersion Include="Microsoft.Azure.Kusto.Data" Version="14.0.1" />
<PackageVersion Include="Microsoft.Azure.Kusto.Ingest" Version="14.0.1" />
<PackageVersion Include="Microsoft.Identity.Client.Broker" Version="4.72.1" />
<PackageVersion Include="Microsoft.Extensions.AI.Abstractions" Version="9.10.0" />
<PackageVersion Include="Microsoft.Extensions.AI.Evaluation" Version="9.10.0" />
Expand Down
3 changes: 3 additions & 0 deletions eng/tools/ToolDescriptionEvaluator/src/Models/McpModels.cs
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,9 @@ public class ToolAnnotations
// Tool definition for azmcp tools list response
public class Tool
{
[JsonPropertyName("id")]
public string? Id { get; set; }

[JsonPropertyName("name")]
public required string Name { get; set; }

Expand Down
25 changes: 25 additions & 0 deletions eng/tools/ToolMetadataExporter/src/AppConfiguration.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.

namespace ToolMetadataExporter;

public class AppConfiguration
{
public string? IngestionEndpoint { get; set; }

public string? QueryEndpoint { get; set; }

public string? DatabaseName { get; set; }

public string? McpToolEventsTableName { get; set; }

public string? QueriesFolder { get; set; } = "Resources/queries";

public string? WorkDirectory { get; set; }

public bool IsDryRun { get; set; }

public string? AzmcpExe { get; set; }

public bool IsAzmcpExeSpecified { get; set; }
}
7 changes: 7 additions & 0 deletions eng/tools/ToolMetadataExporter/src/AssemblyInfo.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.

using System.Runtime.CompilerServices;

[assembly: InternalsVisibleTo("ToolMetadataExporter.UnitTests")]
[assembly: InternalsVisibleTo("DynamicProxyGenAssembly2")]
5 changes: 5 additions & 0 deletions eng/tools/ToolMetadataExporter/src/GlobalUsings.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.

global using System;
global using System.Text.Json;
9 changes: 9 additions & 0 deletions eng/tools/ToolMetadataExporter/src/Models/AzureMcpTool.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
// Copyright (c) Microsoft Corporation.
Copy link

Copilot AI Nov 11, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Missing copyright header. According to the coding standards, all C# files should include the copyright header:

// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
Suggested change
// Copyright (c) Microsoft Corporation.
// Copyright (c) Microsoft Corporation.

Copilot uses AI. Check for mistakes.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

????????????

// Licensed under the MIT License.

namespace ToolMetadataExporter.Models;

public record AzureMcpTool(
string ToolId,
string ToolName,
string ToolArea);
26 changes: 26 additions & 0 deletions eng/tools/ToolMetadataExporter/src/Models/CommandLineOptions.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.

namespace ToolMetadataExporter.Models;

/// <summary>
/// Options specified via command line arguments. Supported options are:
/// <list type="bullet">
/// <item><c>--dry-run</c>: If specified, the tool will run in dry-run mode, meaning no changes will be made to the target datastore.</item>
/// <item><c>--azmcp-exe &lt;path&gt;</c>: The path to the azmcp executable to use for interacting with the MCP server.</item>
/// </list>
/// </summary>
internal class CommandLineOptions
{
/// <summary>
/// Gets or sets a value indicating whether the tool analysis should be performed as a dry run.
/// </summary>
/// <remarks>When set to <see langword="true"/>, the operation is performed, output to the console, but not persisted to the datastore. When set to
/// <see langword="false"/>, the operation is executed normally.</remarks>
public bool? IsDryRun { get; set; }

/// <summary>
/// Gets or sets the full path to the AzMcp executable file.
/// </summary>
public string? AzmcpExe { get; set; }
}
62 changes: 62 additions & 0 deletions eng/tools/ToolMetadataExporter/src/Models/Kusto/McpToolEvent.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.

using System.Text.Json.Serialization;
using Kusto.Data.Common;

namespace ToolMetadataExporter.Models.Kusto;

public class McpToolEvent
{
private const string EventTimeColumn = "EventTime";
private const string EventTypeColumn = "EventType";
private const string ServerNameColumn = "ServerName";
private const string ServerVersionColumn = "ServerVersion";
private const string ToolIdColumn = "ToolId";
private const string ToolNameColumn = "ToolName";
private const string ToolAreaColumn = "ToolArea";
private const string ReplacedByToolNameColumn = "ReplacedByToolName";
private const string ReplacedByToolAreaColumn = "ReplacedByToolArea";

[JsonPropertyName(EventTimeColumn)]
public DateTimeOffset? EventTime { get; set; }

[JsonPropertyName(EventTypeColumn)]
public McpToolEventType? EventType { get; set; }

[JsonPropertyName(ServerNameColumn)]
public string? ServerName { get; set; }

[JsonPropertyName(ServerVersionColumn)]
public string? ServerVersion { get; set; }

[JsonPropertyName(ToolIdColumn)]
public string? ToolId { get; set; }

[JsonPropertyName(ToolNameColumn)]
public string? ToolName { get; set; }

[JsonPropertyName(ToolAreaColumn)]
public string? ToolArea { get; set; }

[JsonPropertyName(ReplacedByToolNameColumn)]
public string? ReplacedByToolName { get; set; }

[JsonPropertyName(ReplacedByToolAreaColumn)]
public string? ReplacedByToolArea { get; set; }

public static ColumnMapping[] GetColumnMappings()
{
return [
new ColumnMapping { ColumnName = EventTimeColumn, ColumnType = "datetime" },
new ColumnMapping { ColumnName = EventTypeColumn, ColumnType = "string"},
new ColumnMapping { ColumnName = ReplacedByToolAreaColumn, ColumnType = "string"},
new ColumnMapping { ColumnName = ReplacedByToolNameColumn, ColumnType = "string"},
new ColumnMapping { ColumnName = ServerVersionColumn, ColumnType = "string" },
new ColumnMapping { ColumnName = ToolAreaColumn , ColumnType = "string" },
new ColumnMapping { ColumnName = ToolIdColumn, ColumnType = "string"},
new ColumnMapping { ColumnName = ToolNameColumn, ColumnType = "string" },
new ColumnMapping { ColumnName = ServerNameColumn, ColumnType = "string" },
];
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.

using System.Text.Json.Serialization;

namespace ToolMetadataExporter.Models.Kusto;

public enum McpToolEventType
{
[JsonStringEnumMemberName("Created")]
Created,
[JsonStringEnumMemberName("Updated")]
Updated,
[JsonStringEnumMemberName("Deleted")]
Deleted
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.

using System.Text.Json.Serialization;
using ToolMetadataExporter.Models.Kusto;

namespace ToolMetadataExporter.Models;

[JsonSerializable(typeof(ServerInfo))]
[JsonSerializable(typeof(ServerInfoResult))]
[JsonSerializable(typeof(McpToolEvent))]
[JsonSerializable(typeof(McpToolEventType))]
[JsonSerializable(typeof(List<McpToolEvent>))]
[JsonSourceGenerationOptions(Converters = [typeof(JsonStringEnumConverter<McpToolEventType>)])]
public partial class ModelsSerializationContext : JsonSerializerContext
{
}
31 changes: 31 additions & 0 deletions eng/tools/ToolMetadataExporter/src/Models/ServerInfoResult.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.

using System.Text.Json.Serialization;

namespace ToolMetadataExporter.Models;

/// <summary>
/// The result of a `server info` request from the MCP server.
/// </summary>
public class ServerInfoResult
{
[JsonPropertyName("status")]

public int Status { get; set; }

[JsonPropertyName("message")]
public string? Message { get; set; }

[JsonPropertyName("results")]
public ServerInfo? Results { get; set; }
}

public class ServerInfo
{
[JsonPropertyName("name")]
public string Name { get; set; } = string.Empty;

[JsonPropertyName("version")]
public string Version { get; set; } = string.Empty;
}
Loading
Loading