はじめに
まだちゃんと作りきれてないので宣伝していないのですが、実は最近MCP Serverを細々と作っています。
www.nuget.org
細かいところまで作りきれたらちゃんと記事なども書こうと思うのですが、その際に.mcp/server.jsonを配置しているのに何故かNuGet.orgでMCP Serverだと認識してくれませんでした。

↓ .mcp/server.json
{ "$schema": "https://modelcontextprotocol.io/schemas/draft/2025-07-09/server.json", "description": "MCP Server for easily and efficiently analyzing Unity AssetBundles", "name": "io.github.hanachiru/AssetBundleMCP", "packages": [ { "registry_name": "nuget", "name": "AssetBundleMCP", "version": "0.1.8", "package_arguments": [] } ], "repository": { "url": "https://github.com/hanachiru/AssetBundleMCP", "source": "github" }, "version_detail": { "version": "0.1.8" } }
<None Include=".mcp\server.json" Pack="true" PackagePath="/.mcp/" />
調べてみたところ結構初見殺しな根深い問題でして、備忘録も兼ねて書き残しておきたいと思います。
原因
おそらく多くの方はMicrosoft.Extensions.AI.Templatesから生成してるかなと思います。
$ dotnet new install Microsoft.Extensions.AI.Templates $ dotnet new mcpserver -n SampleMcpServer
そこには以下のように記述されているはずです。
<PackageType>McpServer</PackageType>
これは正しい記述なのですが、実は.NET10以降でないと動作しません。このままpackするとDotnetToolのみ付与されます。.NET10以降ならDotnetToolとMcpServerが設定され、ちゃんとNuGet.orgがMCP Serverとして認識します。
補足ですがあくまでビルドするのが.NET10以降ならという話なので、TargetFrameworkは関係ありません
対処法
GitHub Actionsなどでリリースする際は.NET10以降をセットアップしてほしいのですが、どうしても.NET 9以前が良いと言う方は、以下のようにcsprojに記述してください。
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <OutputType>Exe</OutputType> <TargetFrameworks>net8.0</TargetFrameworks> <ImplicitUsings>enable</ImplicitUsings> <Nullable>enable</Nullable> <ToolCommandName>my-command-name</ToolCommandName> <PackAsTool>true</PackAsTool> <GenerateNuspecDependsOn>$(GenerateNuspecDependsOn);OverridePackageType</GenerateNuspecDependsOn> </PropertyGroup> <Target Name="OverridePackageType"> <PropertyGroup> <PackageType>DotnetTool;McpServer</PackageType> </PropertyGroup> </Target> </Project>
重要なところはTargetでプロパティを上書きしている箇所です。