From a051678361fd26c7cff7b34307c64a6a91da750b Mon Sep 17 00:00:00 2001 From: Leslie Richardson Date: Thu, 23 Jul 2026 16:11:30 -0700 Subject: [PATCH] Strengthen mcp-csharp-publish with prescriptive defaults The cross-family eval (#889) flagged mcp-csharp-publish as inert (STRENGTHEN 0/5, mostly ties) because its guidance was too generic and non-prescriptive, so it rarely changed agent behavior vs. baseline. Add an opinionated 'Default decisions' block and make the previously optional/menu-style choices decisive so the skill produces different, better behavior than an unskilled run: - stdio -> NuGet.org as a .NET tool (dnx) - HTTP -> Azure Container Apps with --min-replicas 0 (scale to zero) - Always publish server.json to the MCP Registry for shared servers - Gate Azure App Service behind explicit user need (VNet, slots, existing plan) Refs dotnet/skills#889 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 6a8ce111-58e5-48a7-9f7f-8de972bdc693 --- .../skills/mcp-csharp-publish/SKILL.md | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/plugins/dotnet-ai/skills/mcp-csharp-publish/SKILL.md b/plugins/dotnet-ai/skills/mcp-csharp-publish/SKILL.md index 35d25cdc52..e3c4c4bb3c 100644 --- a/plugins/dotnet-ai/skills/mcp-csharp-publish/SKILL.md +++ b/plugins/dotnet-ai/skills/mcp-csharp-publish/SKILL.md @@ -18,6 +18,19 @@ license: MIT Publish and deploy MCP servers to their target platforms. stdio servers are distributed as NuGet tool packages. HTTP servers are containerized and deployed to Azure or other container hosts. Both can optionally be listed in the official MCP Registry. +## Default decisions + +Unless the user says otherwise, **make these choices without asking** — this is the prescriptive path that fits the vast majority of MCP servers: + +| Decision | Default | Why | +|----------|---------|-----| +| stdio distribution | **NuGet.org as a .NET tool** (users run via `dnx`) | The standard way MCP clients consume stdio servers | +| HTTP hosting | **Azure Container Apps** with `--min-replicas 0` | Serverless, scales to zero — cheapest for bursty MCP traffic | +| MCP Registry | **Always publish `server.json`** | Discoverability is free and expected for shared servers | +| Versioning | Keep `.csproj` ``, `server.json` root `version`, and `packages[].version` **identical** | A mismatch fails Registry validation | + +Deviate only when the user names a specific host (App Service, Docker Hub, self-hosted), the server is private/internal (skip the Registry), or an existing pipeline dictates otherwise. + ## When to Use - Packaging a stdio MCP server for NuGet distribution @@ -53,6 +66,8 @@ Publish and deploy MCP servers to their target platforms. stdio servers are dist Both paths can optionally publish to the MCP Registry for discoverability. +> **Default:** publish `server.json` to the MCP Registry (Step 4) for every shared server — skip it only for private/internal servers. + ### Step 2a: NuGet publishing (stdio servers) 1. **Configure `.csproj`** with package properties: @@ -156,7 +171,7 @@ docker push .azurecr.io/:1.0.0 ### Step 3: Deploy to Azure (HTTP servers) -**Azure Container Apps** (recommended — serverless with auto-scaling): +**Default — Azure Container Apps** (serverless, scales to zero with `--min-replicas 0`). Use this unless the user asks for something else: ```bash az containerapp create \ --name mymcpserver \ @@ -171,7 +186,7 @@ az containerapp create \ --env-vars API_KEY=secretref:api-key ``` -**Azure App Service** (traditional web hosting): +**Azure App Service** — use **only** when the user requires an existing App Service plan, VNet integration, or slot-based deployment. Otherwise prefer Container Apps above: ```bash az webapp create \ --name mymcpserver \