Context: The SK_MCP repository should utilize ManagePackageVersionsCentrally
to facilitate the easy upgrading of NuGet packages used in both client and server projects.
We have found a very cool tool called CentralisedPackageConverter
First, let's install the tool by using:
dotnet tool install CentralisedPackageConverter --global
Now, let's run it in the root of SK_MCP
project:
git clone git@github.com:thangchung/mcp-labs.git
cd SK_MCP
central-pkg-converter .
Then it will confirm and convert all of csproject
to use ManagePackageVersionsCentrally
, as shown in the picture below.
And Directory.Packages.props
created with content as:
<Project>
<PropertyGroup>
<ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
<CentralPackageTransitivePinningEnabled>false</CentralPackageTransitivePinningEnabled>
</PropertyGroup>
<ItemGroup>
<PackageVersion Include="Aspire.Hosting.AppHost" Version="9.2.0" />
<PackageVersion Include="Azure.AI.Projects" Version="1.0.0-beta.7" />
<PackageVersion Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="9.0.4" />
<PackageVersion Include="Microsoft.Extensions.Configuration.UserSecrets" Version="9.0.4" />
<PackageVersion Include="Microsoft.Extensions.Hosting" Version="8.0.1" />
<PackageVersion Include="Microsoft.Extensions.Logging" Version="9.0.4" />
<PackageVersion Include="Microsoft.Extensions.Logging.Console" Version="9.0.4" />
<PackageVersion Include="Microsoft.Extensions.Logging.Debug" Version="9.0.4" />
<PackageVersion Include="Microsoft.SemanticKernel" Version="1.47.0" />
<PackageVersion Include="Microsoft.SemanticKernel.Abstractions" Version="1.47.0" />
<PackageVersion Include="Microsoft.SemanticKernel.Agents.AzureAI" Version="1.47.0-preview" />
<PackageVersion Include="Microsoft.SemanticKernel.Agents.Core" Version="1.47.0" />
<PackageVersion Include="Microsoft.SemanticKernel.Connectors.AzureOpenAI " Version="1.47.0" />
<PackageVersion Include="Microsoft.SemanticKernel.Connectors.InMemory" Version="1.47.0-preview" />
<PackageVersion Include="Microsoft.SemanticKernel.Core" Version="1.47.0" />
<PackageVersion Include="Microsoft.SemanticKernel.PromptTemplates.Handlebars" Version="1.47.0" />
<PackageVersion Include="ModelContextProtocol" Version="0.1.0-preview.10" />
<PackageVersion Include="ModelContextProtocol.AspNetCore" Version="0.1.0-preview.10" />
<PackageVersion Include="OpenTelemetry.Exporter.OpenTelemetryProtocol" Version="1.11.2" />
<PackageVersion Include="OpenTelemetry.Extensions.Hosting" Version="1.11.2" />
<PackageVersion Include="OpenTelemetry.Instrumentation.AspNetCore" Version="1.11.1" />
<PackageVersion Include="OpenTelemetry.Instrumentation.Http" Version="1.11.0" />
</ItemGroup>
</Project>
Server
and Client
projects are modified to use ManagePackageVersionsCentrally
as well. Look at the below.
# MCPServer
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net9.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<UserSecretsId>5ee045b0-aea3-4f08-8d31-32d1a6f8fed0</UserSecretsId>
<NoWarn>$(NoWarn);VSTHRD111;CA2007;CA1054;SKEXP0001;SKEXP0010;SKEXP0110</NoWarn>
</PropertyGroup>
<ItemGroup>
<Content Remove="Prompts\getCurrentWeatherForCity.json" />
</ItemGroup>
<ItemGroup>
<None Remove="ProjectResources\EmployeeBirthdaysAndPositions.png" />
<None Remove="ProjectResources\SalesReport2014.png" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="ProjectResources\EmployeeBirthdaysAndPositions.png" />
<EmbeddedResource Include="ProjectResources\getCurrentWeatherForCity.json" />
<EmbeddedResource Include="ProjectResources\cat.jpg">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</EmbeddedResource>
<EmbeddedResource Include="ProjectResources\SalesReport2014.png" />
<EmbeddedResource Include="ProjectResources\semantic-kernel-info.txt">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Hosting" />
<PackageReference Include="ModelContextProtocol" />
<PackageReference Include="ModelContextProtocol.AspNetCore" />
<!-- Core Semantic Kernel packages -->
<PackageReference Include="Microsoft.SemanticKernel" />
<PackageReference Include="Microsoft.SemanticKernel.Abstractions" />
<PackageReference Include="Microsoft.SemanticKernel.Core" />
<!-- Connectors -->
<PackageReference Include="Microsoft.SemanticKernel.Connectors.AzureOpenAI " />
<PackageReference Include="Microsoft.SemanticKernel.Connectors.InMemory" />
<!-- Prompting -->
<PackageReference Include="Microsoft.SemanticKernel.PromptTemplates.Handlebars" />
<!-- Agent -->
<PackageReference Include="Microsoft.SemanticKernel.Agents.Core" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="OpenTelemetry.Exporter.OpenTelemetryProtocol" />
<PackageReference Include="OpenTelemetry.Extensions.Hosting" />
<PackageReference Include="OpenTelemetry.Instrumentation.AspNetCore" />
<PackageReference Include="OpenTelemetry.Instrumentation.Http" />
</ItemGroup>
</Project>
And,
# MCPClient
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net9.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<UserSecretsId>5ee045b0-aea3-4f08-8d31-32d1a6f8fed0</UserSecretsId>
<NoWarn>$(NoWarn);VSTHRD111;CA2007;CA1054;SKEXP0001;SKEXP0010;SKEXP0110</NoWarn>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="ModelContextProtocol" />
<PackageReference Include="Microsoft.Extensions.Configuration.EnvironmentVariables" />
<PackageReference Include="Microsoft.Extensions.Configuration.UserSecrets" />
<PackageReference Include="Microsoft.Extensions.Logging" />
<PackageReference Include="Microsoft.Extensions.Logging.Console" />
<PackageReference Include="Microsoft.Extensions.Logging.Debug" />
<!-- Core Semantic Kernel packages -->
<PackageReference Include="Microsoft.SemanticKernel" />
<PackageReference Include="Microsoft.SemanticKernel.Abstractions" />
<PackageReference Include="Microsoft.SemanticKernel.Core" />
<!-- Connectors -->
<PackageReference Include="Microsoft.SemanticKernel.Connectors.AzureOpenAI " />
<PackageReference Include="Microsoft.SemanticKernel.Connectors.InMemory" />
<!-- Prompting -->
<PackageReference Include="Microsoft.SemanticKernel.PromptTemplates.Handlebars" />
<!-- Agent -->
<PackageReference Include="Microsoft.SemanticKernel.Agents.Core" />
<PackageReference Include="Microsoft.SemanticKernel.Agents.AzureAI" />
</ItemGroup>
<ItemGroup Label="NotUsed">
<PackageReference Include="Azure.AI.Projects" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="OpenTelemetry.Exporter.OpenTelemetryProtocol" />
<PackageReference Include="OpenTelemetry.Extensions.Hosting" />
<PackageReference Include="OpenTelemetry.Instrumentation.AspNetCore" />
<PackageReference Include="OpenTelemetry.Instrumentation.Http" />
</ItemGroup>
</Project>
Bonus tip: migrate sln
to slnx
in .NET 9
dotnet sln migrate <your_solution.sln>
Now, we can upgrade the NuGet packages in Visual Studio. Happy tips, happy working!
Top comments (0)