dotnet new mcpserver agora vem embutido no SDK do .NET 11 Preview 4
.NET 11 Preview 4 inclui o template de projeto mcpserver diretamente no SDK. Sem instalar Microsoft.McpServer.ProjectTemplates separado, sem dança de feeds de preview. Escolha transporte stdio ou HTTP, ative Native AOT, e dotnet new mcpserver -o MyServer é toda a configuração.
As notas de release do .NET 11 Preview 4 trazem uma linha pequena mas crítica para quem entrega servidores Model Context Protocol em C#: o template de projeto mcpserver, antes disponível apenas instalando Microsoft.McpServer.ProjectTemplates, agora vem como template embutido no SDK do .NET. O dotnet new list descobre ele sem nenhuma instalação extra, e o servicing viaja com o stack do ASP.NET Core em vez de um pacote NuGet separado.
O que muda em um SDK Preview 4
Até o .NET 11 Preview 3 a receita para um servidor MCP novo era em duas etapas:
# Preview 3 and earlier
dotnet new install Microsoft.McpServer.ProjectTemplates
dotnet new mcpserver -o InventoryMcp
Em uma imagem de CI limpa ou no primeiro checkout de um colega, o passo dotnet new install era o que quebrava em silêncio: puxava do NuGet, tinha cadência própria, e o template ficava no seu perfil de usuário, que não sobrevive a um devcontainer novo.
Com o Preview 4 (11.0.100-preview.4), o passo um sumiu:
dotnet new mcpserver -o InventoryMcp
cd InventoryMcp
dotnet run
O template é versionado junto com a release do SDK, então um pin de global.json em 11.0.100-preview.4 fixa o template também.
O que você ganha de fábrica
O dotnet new mcpserver --help mostra as opções que o template suporta. As duas que mais importam:
dotnet new mcpserver --help
# Options:
# -f, --framework <net11.0> The target framework.
# --transport <stdio|http> MCP transport type. Default: stdio.
# --aot Enable Native AOT publish.
# --self-contained Enable self-contained publish.
Aqui moram duas escolhas reais:
--transport stdio(padrão) te dá um host de console que fala o protocolo por stdin/stdout. É isso que o Claude Code, o Claude Desktop e o VS Code lançam quando bifurcam um filho MCP a partir domcp.json. Resposta certa quando o agente está na mesma máquina.--transport httpte dá um host ASP.NET Core com o transporte Streamable HTTP mapeado. Você vai nele quando o servidor mora atrás de um ingress e é compartilhado por vários agentes.
A flag --aot já liga o Native AOT publish: PublishAot=true no .csproj, source generators compatíveis com AOT para os bindings do protocolo, e o encanamento trim-safe de atributos no registro de tools. Junto com --self-contained, você ganha um executável single-file que abre em dezenas de milissegundos, o que importa para servidores stdio porque o agente os bifurca a cada sessão.
Um esqueleto mínimo stdio fica assim:
// Program.cs -- generated by dotnet new mcpserver --transport stdio
using Microsoft.Extensions.Hosting;
using ModelContextProtocol.Server;
using System.ComponentModel;
var builder = Host.CreateApplicationBuilder(args);
builder.Logging.AddConsole(o =>
{
// stderr only -- stdout is the protocol channel
o.LogToStandardErrorThreshold = LogLevel.Trace;
});
builder.Services
.AddMcpServer()
.WithStdioServerTransport()
.WithToolsFromAssembly();
await builder.Build().RunAsync();
[McpServerToolType]
public static class EchoTool
{
[McpServerTool, Description("Echo the input back.")]
public static string Echo(string message) => $"hello {message}";
}
O logging só-pra-stderr vem cabeado de fábrica, que é a maior cilada de quem está começando: qualquer Console.WriteLine perdido no stdout corrompe o fluxo JSON-RPC e o agente reporta um erro de protocolo sem detalhe útil.
Como encaixa em um projeto existente
Se você já tem um servidor MCP scaffoldado do jeito antigo (veja o walkthrough mais a fundo em Como construir um servidor MCP customizado em C# no .NET 11), não há migração necessária. O template embutido gera as mesmas referências ao pacote ModelContextProtocol que o antigo. A mudança é puramente sobre como projetos novos começam.
O que vale a pena fazer hoje: fixar global.json em 11.0.100-preview.4, tirar a linha dotnet new install Microsoft.McpServer.ProjectTemplates dos docs de setup do time e do devcontainer, e ver sumir uma pergunta de dia de onboarding no Slack.
Comments
Sign in with GitHub to comment. Reactions and replies thread back to the comments repo.