microsoft/binlog-failure-analysis
Analyze MSBuild binary logs to diagnose build failures. USE FOR: build errors that are unclear from console output, diagnosing cascading failures across multi-project builds, tracing MSBuild target execution order, and generally any MSBuild build issues. Requires an existing .binlog file. DO NOT USE FOR: generating binlogs (use binlog-generation), non-MSBuild build systems.
This is a copy. The original lives at dotnet/binlog-failure-analysis.
npx skills add https://github.com/microsoft/testfx --skill binlog-failure-analysis
This skill diagnoses MSBuild build failures from a .binlog file. The preferred
path uses the binlog MCP server (Microsoft.AITools.BinlogMcp, exposed under the
binlog MCP namespace) which is bundled with this plugin. If the MCP server is
not available, fall back to the binlog replay workflow at the bottom.
The MCP server exposes structured tools for inspecting a .binlog without
parsing text logs. Call them directly instead of replaying the binlog to a text
file. Call tools/list for the MCP first if you are unsure which tools are available.
Important constraints:
.binlog file is a binary format — do NOT try to cat, head, strings, or read it directly. Use only the MCP tools to query it.Use the available MCP server tools to query the binary log for:
Use this only when the MCP server cannot be started (for example, on an older
SDK or in an offline environment without access to the dotnet-tools NuGet feed).
dotnet msbuild build.binlog -noconlog \
-fl -flp:v=diag;logfile=full.log;performancesummary \
-fl1 -flp1:errorsonly;logfile=errors.log \
-fl2 -flp2:warningsonly;logfile=warnings.log
> PowerShell note: Use -flp:"v=diag;logfile=full.log;performancesummary"
> (quoted semicolons).
cat errors.log
grep -n -B2 -A2 "CS0246" full.log
grep -i "CoreCompile.*FAILED\|Build FAILED\|error MSB" full.log
grep 'Target "CoreCompile"' full.log | grep -oP 'project "[^"]*"'
dotnet build /bl:build.binlog
Take microsoft/binlog-failure-analysis from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.