Summary
Request to publish a containerized binlog MCP server image to mcr.microsoft.com/dotnet-buildtools/prereqs, for use by the .NET engineering team's AI-driven CI workflows (gh-aw / agentic build-failure analysis on dotnet/sdk, dotnet/msbuild, dotnet/runtime, microsoft/testfx, and similar repos).
This image hosts the Microsoft.AITools.BinlogMcp .NET tool (an MCP server that exposes ~29 binlog inspection/diagnosis tools — binlog_overview, binlog_errors, binlog_warnings, binlog_diagnose, binlog_search, binlog_task_details, etc.).
Why this repo (and not dotnet/dotnet-docker)
Per @richlander's guidance on dotnet/dotnet-docker#7211:
Team-focused MCPs: Images should be defined at https://github.com/dotnet/dotnet-buildtools-prereqs-docker
Public-focused MCPs: Images should be defined at https://github.com/dotnet/dotnet-docker
binlog-mcp is squarely team-focused — it is consumed by .NET-team CI workflows that analyze MSBuild binlogs produced by ./build.sh -bl. End users would not docker pull it for their own projects.
Why a container image is required
The downstream consumer is the gh-aw MCP Gateway, whose specification (v1.0.0, §3.2.1) mandates that stdio MCP servers be containerized:
"Stdio-based MCP servers MUST be containerized. The gateway SHALL NOT support direct command execution without containerization (stdio+command)."
So command: dnx ... Microsoft.AITools.BinlogMcp is rejected at gateway runtime; only a container: field is accepted. (We do already wire the tool via dnx in the in-process arcade-skills surface — see dotnet/arcade-skills#37 and #38, both merged — which validates the package as a working public artifact on the dnceng-public/dotnet-tools NuGet feed. That path does not require a container; only the gh-aw consumer does.)
Proposed image
| Field |
Value |
| Tag pattern |
mcr.microsoft.com/dotnet-buildtools/prereqs:azurelinux-3.0-binlog-mcp-amd64 (and -arm64v8) |
Tag pattern (alt, if a tool variant is preferred) |
…:binlog-mcp-<package-version>-azurelinux-3.0-amd64 |
| Base |
mcr.microsoft.com/dotnet/runtime:9.0-azurelinux3.0 (distroless preferred if available) |
| Source location |
src/azurelinux/3.0/binlog-mcp/amd64/Dockerfile (follows existing layout under src/<distro>/<version>/<variant>/<arch>/) |
| Package |
Microsoft.AITools.BinlogMcp (preview today, GA shortly) |
| Feed |
https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools/nuget/v3/index.json (anonymous public) |
Sample Dockerfile (~10 lines)
ARG REPO=mcr.microsoft.com/dotnet/runtime
FROM ${REPO}:9.0-azurelinux3.0
ENV DOTNET_TOOLS_FEED=https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools/nuget/v3/index.json
ENV BINLOG_MCP_VERSION=1.0.0-preview.26275.1
RUN dotnet tool install --tool-path /usr/local/bin \
Microsoft.AITools.BinlogMcp \
--version ${BINLOG_MCP_VERSION} \
--add-source ${DOTNET_TOOLS_FEED}
ENTRYPOINT ["binlog-mcp"]
Licensing & source ownership
Microsoft.AITools.BinlogMcp is a Microsoft-owned tool, published under standard Microsoft proprietary terms via the public dnceng feed.
- Source lives in a Microsoft-internal repo (
dotnet-microsoft/ai-tools). Per Rich's guidance, "the licensing should be clear" — happy to add a LICENSE reference / image readme spelling this out explicitly, similar to how other prereqs images document their bundled software.
- Anonymous, unauthenticated pull from
dnceng-public/dotnet-tools is already validated (we ship the same package via this feed to arcade-skills today).
Consumers (planned)
| Consumer |
Status |
dotnet/arcade-skills (in-process via dnx) |
✅ Live (PRs #37/#38 merged) |
microsoft/testfx gh-aw workflow |
Today: DumpBinlog/ JSON-shim workaround. After this image: mcp-servers: { container: mcr.microsoft.com/dotnet-buildtools/prereqs:…-binlog-mcp-… } |
dotnet/msbuild gh-aw workflow |
Same as above |
dotnet/sdk gh-aw workflow |
Same as above |
dotnet/runtime (or dotnet/dotnet) gh-aw workflow |
Same as above |
Eliminating DumpBinlog/ across these 4 repos is the immediate win.
Offer to contribute
Happy to author the Dockerfile, manifest.json entry, and any required tests/templates ourselves (modelled on existing src/azurelinux/3.0/<variant>/ directories) and submit as a PR. Just needs:
- ✅/❌ from @dotnet/dotnet-docker-reviewers that this repo + variant naming is the right shape
- Confirmation on preferred base image (azurelinux-distroless? runtime vs runtime-deps?)
- Confirmation on multi-arch scope (amd64 only initially, or amd64 + arm64v8 from day one?)
CC: @richlander @lbussell (continuation of dotnet/dotnet-docker#7211), @JanKrivanek (binlog-mcp tool owner)
Summary
Request to publish a containerized binlog MCP server image to
mcr.microsoft.com/dotnet-buildtools/prereqs, for use by the .NET engineering team's AI-driven CI workflows (gh-aw / agentic build-failure analysis ondotnet/sdk,dotnet/msbuild,dotnet/runtime,microsoft/testfx, and similar repos).This image hosts the
Microsoft.AITools.BinlogMcp.NET tool (an MCP server that exposes ~29 binlog inspection/diagnosis tools —binlog_overview,binlog_errors,binlog_warnings,binlog_diagnose,binlog_search,binlog_task_details, etc.).Why this repo (and not
dotnet/dotnet-docker)Per @richlander's guidance on dotnet/dotnet-docker#7211:
binlog-mcpis squarely team-focused — it is consumed by .NET-team CI workflows that analyze MSBuild binlogs produced by./build.sh -bl. End users would notdocker pullit for their own projects.Why a container image is required
The downstream consumer is the gh-aw MCP Gateway, whose specification (v1.0.0, §3.2.1) mandates that stdio MCP servers be containerized:
So
command: dnx ... Microsoft.AITools.BinlogMcpis rejected at gateway runtime; only acontainer:field is accepted. (We do already wire the tool viadnxin the in-process arcade-skills surface — see dotnet/arcade-skills#37 and #38, both merged — which validates the package as a working public artifact on thednceng-public/dotnet-toolsNuGet feed. That path does not require a container; only the gh-aw consumer does.)Proposed image
mcr.microsoft.com/dotnet-buildtools/prereqs:azurelinux-3.0-binlog-mcp-amd64(and-arm64v8)toolvariant is preferred)…:binlog-mcp-<package-version>-azurelinux-3.0-amd64mcr.microsoft.com/dotnet/runtime:9.0-azurelinux3.0(distroless preferred if available)src/azurelinux/3.0/binlog-mcp/amd64/Dockerfile(follows existing layout undersrc/<distro>/<version>/<variant>/<arch>/)Microsoft.AITools.BinlogMcp(preview today, GA shortly)https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools/nuget/v3/index.json(anonymous public)Sample Dockerfile (~10 lines)
Licensing & source ownership
Microsoft.AITools.BinlogMcpis a Microsoft-owned tool, published under standard Microsoft proprietary terms via the public dnceng feed.dotnet-microsoft/ai-tools). Per Rich's guidance, "the licensing should be clear" — happy to add aLICENSEreference / image readme spelling this out explicitly, similar to how other prereqs images document their bundled software.dnceng-public/dotnet-toolsis already validated (we ship the same package via this feed to arcade-skills today).Consumers (planned)
dotnet/arcade-skills(in-process viadnx)microsoft/testfxgh-aw workflowDumpBinlog/JSON-shim workaround. After this image:mcp-servers: { container: mcr.microsoft.com/dotnet-buildtools/prereqs:…-binlog-mcp-… }dotnet/msbuildgh-aw workflowdotnet/sdkgh-aw workflowdotnet/runtime(ordotnet/dotnet) gh-aw workflowEliminating
DumpBinlog/across these 4 repos is the immediate win.Offer to contribute
Happy to author the Dockerfile, manifest.json entry, and any required tests/templates ourselves (modelled on existing
src/azurelinux/3.0/<variant>/directories) and submit as a PR. Just needs:CC: @richlander @lbussell (continuation of dotnet/dotnet-docker#7211), @JanKrivanek (binlog-mcp tool owner)