Decompile and inspect .NET assemblies from the command line — and from an AI assistant Glass.NET 1.3.0, a free .NET decompiler, adds a headless command-line interface and a Model Context Protocol server that lets AI coding assistants open assemblies and read decompiled C#. The release introduces four batch commands — export, sbom, verify and diff — built on the same ICSharpCode.Decompiler engine as the UI, all performing static analysis without executing the inspected assembly. Glass.NET is a free .NET decompiler built around navigation — you open an assembly and read it like your own source. But plenty of the work you do with a decompiler isn't interactive at all. You want to gate a CI job on whether a dependency changed its public surface, emit a software bill of materials for every binary you ship, or check that the NuGet package you just pulled is really what it claims to be. And increasingly you want your AI coding assistant to answer "what does this dependency actually do?" without you hand-feeding it decompiled snippets. Glass.NET 1.3.0 covers both. It adds a headless CLI — the same ICSharpCode.Decompiler engine as the UI, no window required — and glass mcp , a Model Context Protocol server that lets an AI assistant open assemblies and read decompiled C on your behalf. Everything below is strictly static analysis : Glass reads metadata and IL and reconstructs C . It never runs the assembly it inspects. And all of it is free — no tiers, no license, no seats. Four commands do the batch and scripting work, plus the server: glass export — reconstruct a buildable C project, or dump a single member. glass sbom — emit a software bill of materials for an assembly or package. glass verify — check a NuGet package's authenticity and strong-name identity. glass diff — compare two builds and report what changed in the public surface. glass mcp — start the MCP server for an AI assistant. Run glass --help for the full list; every command takes --json so you can pipe output into jq or a build step. Point export at an assembly and a directory and you get a reconstructed, compilable project back: bash $ glass export ./Acme.Payments.dll -o ./out/Acme.Payments Decompiling Acme.Payments.dll net8.0 … 142 types, 1,206 members Wrote ./out/Acme.Payments/Acme.Payments.csproj Wrote 142 source files Done in 1.9s — static analysis only, assembly was not executed. That .csproj targets the assembly's own TFM and lists its references, so dotnet build ./out/Acme.Payments just works — useful when you need to diff against source, patch-and-recompile, or hand a reproducible tree to someone. When you only care about one method, skip the whole project and ask for the member by its documentation-comment ID: bash $ glass export ./Acme.Payments.dll --member "M:Acme.Payments.Gateway.Charge System.Decimal " public ChargeResult Charge decimal amount { if amount <= 0m throw new ArgumentOutOfRangeException nameof amount ; var req = new ChargeRequest amount, clock.UtcNow ; return transport.Send req ; } You can pass a type ID T:Acme.Payments.Gateway to dump every member of a type, or --il to get the IL view instead of C . This is the fast path for "show me exactly what this one method does" without opening a UI. glass sbom reads an assembly's metadata and produces a dependency inventory in CycloneDX JSON — the assembly's identity, its target framework, and every AssemblyRef it binds against, with versions and public-key tokens: bash $ glass sbom ./Acme.Payments.dll --format cyclonedx -o payments.sbom.json $ jq '.components | {name, version}' payments.sbom.json { "name": "Newtonsoft.Json", "version": "13.0.3" } { "name": "System.Text.Json", "version": "8.0.0" } { "name": "Acme.Core", "version": "4.2.1" } Because it works from the compiled binary rather than a packages.lock.json , it tells you what the shipped artifact actually references — including transitive assemblies that a project-file audit can miss. Point it at a .nupkg and Glass enumerates the assemblies inside each lib/