Skip to content

Strengthen mcp-csharp-publish with prescriptive defaults#939

Closed
leslierichardson95 wants to merge 2 commits into
mainfrom
leslierichardson95/strengthen-mcp-csharp-publish
Closed

Strengthen mcp-csharp-publish with prescriptive defaults#939
leslierichardson95 wants to merge 2 commits into
mainfrom
leslierichardson95/strengthen-mcp-csharp-publish

Conversation

@leslierichardson95

Copy link
Copy Markdown
Contributor

What

Strengthens the mcp-csharp-publish skill so it changes agent behavior instead of tying with the no-skill baseline.

Why

The cross-family skills-eval (#889) rated mcp-csharp-publish STRENGTHEN 0/5 with the diagnosis "mostly ties — too generic/non-prescriptive." The skill listed options (NuGet or Docker, Container Apps or App Service, Registry optional) without deciding, so a skilled run rarely differed from baseline.

Changes

  • Add a prescriptive Default decisions block up front that makes the common choices without asking:
    • 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
    • Keep versions identical across .csproj / server.json
  • Make Step 3 decisive: Container Apps is the default; App Service is gated behind an explicit need (existing plan, VNet, slots).
  • Reinforce the Registry step as the default for shared servers.

No new heavy content — the skill is already token-efficient; this sharpens decisiveness only.

Verification

skill-validator check runs in CI. Recommend a cross-family eval re-run (-f skills="mcp-csharp-publish" -f executors="opus,gpt" -f runs=5) to confirm the ties convert to wins.

Refs #889


Moved from fork branch to the primary dotnet/skills repo; supersedes #935.

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 #889

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 6a8ce111-58e5-48a7-9f7f-8de972bdc693
@github-actions

Copy link
Copy Markdown
Contributor

Skill Coverage Report

Plugin Skill Covered Coverage
dotnet-ai mcp-csharp-publish 0/15 0%
Uncovered: dotnet-ai/mcp-csharp-publish
  • [Validation] NuGet: Package installs and runs via dnx PackageId@version (line 258)
  • [Validation] Docker: Container starts and health check passes (line 259)
  • [Validation] Azure: Server is reachable and tools respond (line 260)
  • [Validation] MCP Registry: Server appears at registry.modelcontextprotocol.io (line 261)
  • [Validation] MCP client can connect and call tools on the deployed server (line 262)
  • [Pitfall] NuGet package doesn't run as a tool (line 268)
  • [Pitfall] Version mismatch between .csproj and server.json (line 269)
  • [Pitfall] Docker container exits immediately (line 270)
  • [Pitfall] Azure Container App returns 502 (line 271)
  • [Pitfall] MCP Registry rejects publish (line 272)
  • [Pitfall] API keys leaked in Docker image (line 273)
  • [WorkflowStep] Step 1: Choose the publishing path (line 60)
  • [WorkflowStep] Step 3: Deploy to Azure (HTTP servers) (line 172)
  • [WorkflowStep] Step 4: Publish to MCP Registry (optional) (line 200)
  • [WorkflowStep] Step 5: Security checklist (line 248)

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

This PR strengthens the mcp-csharp-publish skill by making it more prescriptive (defaulting key publishing/deployment decisions) so skilled runs diverge meaningfully from baseline and reduce “tie” outcomes in cross-family evals.

Changes:

  • Adds a “Default decisions” section that picks common defaults without prompting (NuGet stdio, Container Apps for HTTP, registry publishing, version sync).
  • Makes Azure Container Apps the explicit default for HTTP deployment and gates App Service behind specific requirements.
  • Reinforces MCP Registry publishing as the default path for shared servers.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

|----------|---------|-----|
| 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 |
@@ -171,7 +186,7 @@ az containerapp create \
--env-vars API_KEY=secretref:api-key
Copilot AI review requested due to automatic review settings July 24, 2026 20:52

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 1 out of 1 changed files in this pull request and generated no new comments.

@leslierichardson95

Copy link
Copy Markdown
Contributor Author

Superseded by #943, which retires this skill (and the rest of the mcp-csharp-* family) per the #889 eval + telemetry review. Closing as obsolete.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants