Resolve binlog MCP from the dnceng dotnet-public feed - #969
Conversation
The `binlog` server ran `dnx Microsoft.AITools.BinlogMcp --yes` with no feed pinned, so resolution depended on whatever ambient NuGet configuration the agent happened to run under. Pin it to the dnceng dotnet-public feed with `--source` so the server resolves deterministically. Applied to all four manifests that embed the server definition (plugin.json, .claude-plugin/plugin.json, .codex-plugin/.mcp.json, and .claude-plugin/marketplace.json) so the mirrors stay in sync. Also corrects two stale feed names in comments/docs (dotnet-eng, dotnet-tools). Verified: `skill-validator check` passes (exit 0, no new warnings), and `dnx --yes --source <dotnet-public> Microsoft.AITools.BinlogMcp` starts aitools-binlog-mcp 2.0.1 and completes an MCP initialize handshake. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: eef3a5cc-7c9b-41b2-88e5-fbc7e786f3f2
Skill Coverage Report
Uncovered:
|
There was a problem hiding this comment.
Pull request overview
This PR aims to make the binlog MCP server startup deterministic by pinning Microsoft.AITools.BinlogMcp restore to the dnceng dotnet-public NuGet feed, avoiding dependence on ambient NuGet configuration on the host environment.
Changes:
- Updated the
binlogMCP server invocation to include a pinned NuGet source (--source https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public/nuget/v3/index.json) across the mirrored manifests. - Corrected stale feed wording in documentation and the allowed-external-deps comment to reference
dotnet-public.
Reviewed changes
Copilot reviewed 6 out of 6 changed files in this pull request and generated 4 comments.
Show a summary per file
| File | Description |
|---|---|
| plugins/dotnet-msbuild/skills/binlog-failure-analysis/SKILL.md | Updates fallback documentation to reference the correct feed name (dotnet-public). |
| plugins/dotnet-msbuild/plugin.json | Adds a pinned NuGet feed to the binlog MCP server definition. |
| plugins/dotnet-msbuild/.codex-plugin/.mcp.json | Mirrors the pinned-feed binlog MCP server definition for Codex plugin consumption. |
| plugins/dotnet-msbuild/.claude-plugin/plugin.json | Mirrors the pinned-feed binlog MCP server definition for Claude plugin consumption. |
| eng/allowed-external-deps.txt | Updates the explanatory comment to reflect the dotnet-public feed. |
| .claude-plugin/marketplace.json | Mirrors the pinned-feed binlog MCP server definition in the marketplace manifest. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Addresses review feedback. Both orderings resolve and start the server correctly (verified), but keeping `Microsoft.AITools.BinlogMcp` immediately after `dnx` matches the ordering already used in this repo and turns the change into a pure insertion of `--source` with no reordering noise. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: eef3a5cc-7c9b-41b2-88e5-fbc7e786f3f2
|
/evaluate d70cc01 |
📊 Skill Evaluation Results1 skill(s) evaluated — ✅ 0 improved, ❌ 0 no credible change, 🔻 0 regressed.
A skill passes only on a credible net win over baseline: more wins than losses, by an exact one-sided sign test at
ℹ️ Column legend
|
| Scenario | Net win | Δ Pref | Trials (W/T/L) |
|---|---|---|---|
| ▲ Diagnose build failures from binlog only (no source files) | +100.0% | +100.0% | 1/0/0 |
🔍 Full Results - additional metrics and failure investigation steps
▶ Sessions Visualisation -- interactive replay of all evaluation sessions
📊 Session Analytics (preview) -- aggregated metrics across evaluation sessions
ViktorHofer
left a comment
There was a problem hiding this comment.
This looks questionable to me. We should never promote a package to customers from the dotnet-public nuget feed. That's a public feed but exists only for our own engineering infrastructure (to build .NET). cc @mmitche to double check my statement
|
👋 @YuliiaKovalova — this PR has changes requested. When you're ready, please address the feedback and push an update; the triage bot will pick up the next state automatically. (Add the |
I had conversation about feeds here befroe dotnet/dotnet-buildtools-prereqs-docker#1682 (comment) these cases look similar to me, but i might be wrong. |
|
👋 @YuliiaKovalova — this PR has changes requested. When you're ready, please address the feedback and push an update; the triage bot will pick up the next state automatically. (Add the |
|
/evaluate |
|
👋 Two ways to run it:
|
got confirmation that change is correct
📊 Skill Evaluation Results1 skill(s) evaluated — ✅ 0 improved, ❌ 0 no credible change, 🔻 0 regressed.
A skill passes only on a credible net win over baseline: more wins than losses, by an exact one-sided sign test at
ℹ️ Column legend
|
| Scenario | Net win | Δ Pref | Trials (W/T/L) |
|---|---|---|---|
| = Diagnose build failures from binlog only (no source files) | +0.0% | +0.0% | 0/1/0 |
🔍 Full Results - additional metrics and failure investigation steps
▶ Sessions Visualisation -- interactive replay of all evaluation sessions
📊 Session Analytics (preview) -- aggregated metrics across evaluation sessions
Apparently requesting changes doesn't matter anymore? Next time share context before dismissing a change request or even better, don't dismiss at all. That doesn't feel right. |
I apologize, it looked to me like I had enough evidence to proceed. |
|
Thanks for being considerate, really appreciate that. Let's move the discussion offline. I opened a Teams channel to collaborate further on the dotnet-msbuild plugin. |
|
@YuliiaKovalova - were there any cases where the tooling didn't work as expected? I'd prefer leaving the feed definition up to destination env - similar to e.g. Roslyn lsp https://github.com/dotnet/skills/blob/main/plugins/dotnet/lsp.json |
Summary
The
binlogMCP server was declared asdnx Microsoft.AITools.BinlogMcp --yeswith no feed pinned, soMicrosoft.AITools.BinlogMcpresolved through whatever ambient NuGet configuration the agent happened to run under (user-levelNuGet.Config, an enclosing repo'sNuGet.config, etc.). That makes startup environment-dependent and hard to reproduce.This pins the server to the dnceng dotnet-public feed via
--source:--source(rather than--add-source) replaces all sources, so resolution is fully deterministic. This is safe here because .NET tool packages bundle their dependencies — only the single package needs to be restored.The existing argument order is preserved, so the change is a pure insertion with no reordering.
Files changed
The server definition is duplicated across four manifests, all updated together so the mirrors stay in sync:
plugins/dotnet-msbuild/plugin.jsonplugins/dotnet-msbuild/.claude-plugin/plugin.jsonplugins/dotnet-msbuild/.codex-plugin/.mcp.json.claude-plugin/marketplace.jsonTwo stale feed names are also corrected:
eng/allowed-external-deps.txt— comment saiddotnet-eng feedplugins/dotnet-msbuild/skills/binlog-failure-analysis/SKILL.md— fallback note saiddotnet-toolsNuGet feedplugins/dotnet-msbuild/.codex-plugin/plugin.jsonneeds no change — it delegates via"mcpServers": "./.mcp.json".Validation
Package availability confirmed on dotnet-public: versions
1.0.0,2.0.0,2.0.1(all stable, so--prereleaseis not needed).End-to-end server start against the pinned feed, piping an MCP
initializerequest into the server:CI gate reproduced locally —
skill-validator checkover all 16 plugins with--allowed-external-depsand--known-domainsexits 0: 96 skills, 16 agents, 208 files scanned, 0 reference errors and no new warnings.No
known-domains.txtentry is required:ReferenceScanneronly scansSKILL.md,*.agent.md, andreferences/*.md— notplugin.json.Note on the failing
eval-qualitycheckThe
check/ Check eval quality job failure is pre-existing onmainand unrelated to this PR — it fails on 4 staletests/dotnet-maui/*entries ineng/eval-quality/underpowered-allowlist.txtthat now meet the 5-trial floor:Same failure on
main: run 30532730249. This PR touches no files undertests/oreng/eval-quality/.Related
Companion PR: dotnet/arcade-skills#49 makes the same change for the
dotnet-dncengplugin, which publishes abinlogserver under the same name.