DecompilerServer is an MCP server that decompiles and analyzes .NET assemblies. You connect it to your AI coding tool (Claude Desktop, Cursor, VS Code, Codex, etc.) and it lets the AI read, search, and compare .NET code — even across different versions of an assembly.
This is a particularly strong LLM use case because so much real-world .NET behavior lives in binaries the model cannot inspect on its own: third-party libraries, game assemblies, internal builds, and older releases. By giving the model direct decompiler-backed access to those assemblies, you turn "I only see the source in this repo" into "I can inspect the actual code that runs", which makes reverse engineering, migration work, debugging, and version-to-version analysis much more effective.
Common use cases: general .NET assembly inspection, Unity Assembly-CSharp.dll workflows, and multi-version browsing such as RimWorld mod porting.
Already familiar with .NET and MCP? Skip to Advanced Guide for build-from-source instructions, full tool reference, and development details.
This section helps you install DecompilerServer and connect it to your MCP client in a few steps.
.NET 10 runtime — the prebuilt release binaries depend on it. Download and install the runtime for your platform before continuing.
Go to the latest release and download the archive for your platform:
| Platform | File |
|---|---|
| Windows (x64) | decompilerserver-v…-win-x64.zip |
| macOS (Apple Silicon) | decompilerserver-v…-osx-arm64.tar.gz |
| macOS (Intel) | decompilerserver-v…-osx-x64.tar.gz |
| Linux (x64) | decompilerserver-v…-linux-x64.tar.gz |
| Linux (ARM64) | decompilerserver-v…-linux-arm64.tar.gz |
Extract the archive to a folder you can remember (for example ~/tools/decompiler-server).
Extract commands
Windows (PowerShell):
Expand-Archive decompilerserver-v*-win-x64.zip -DestinationPath "$HOME\tools\decompiler-server"macOS / Linux:
mkdir -p ~/tools/decompiler-server
tar -xzf decompilerserver-v*-*.tar.gz -C ~/tools/decompiler-server --strip-components=1Add DecompilerServer to your MCP client configuration. Replace the path below with the actual location where you extracted the files.
Claude Desktop
Edit the Claude Desktop config file:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"decompiler": {
"command": "/absolute/path/to/DecompilerServer"
}
}
}On Windows, use the .exe extension and escaped backslashes:
{
"mcpServers": {
"decompiler": {
"command": "C:\\tools\\decompiler-server\\DecompilerServer.exe"
}
}
}Restart Claude Desktop after saving.
Cursor
Open Cursor Settings → MCP and add a new server, or edit .cursor/mcp.json in your project root:
{
"mcpServers": {
"decompiler": {
"command": "/absolute/path/to/DecompilerServer"
}
}
}On Windows, use the .exe extension and escaped backslashes.
VS Code (GitHub Copilot)
Add an entry to your .vscode/mcp.json (or workspace settings):
{
"servers": {
"decompiler": {
"type": "stdio",
"command": "/absolute/path/to/DecompilerServer"
}
}
}On Windows, use the .exe extension and escaped backslashes.
Codex
Add an entry to ~/.codex/config.toml:
[mcp_servers.decompiler]
command = "/absolute/path/to/DecompilerServer"If you run a framework-dependent build instead of the native app host, configure Codex like this:
[mcp_servers.decompiler]
command = "dotnet"
args = ["/absolute/path/to/DecompilerServer/bin/Release/net10.0/DecompilerServer.dll"]On Windows, use the .exe extension and escaped backslashes.
Once connected, ask your AI assistant to load and explore assemblies. For example:
"Load the assembly at
/path/to/MyLibrary.dlland search for types that containController."
The assistant will use DecompilerServer tools automatically. It can load assemblies, search types, decompile source, compare versions, and more. See the Workflow Reference for the full list of operations.
| Problem | Solution |
|---|---|
| "command not found" or the server does not start | Verify the path in your MCP config points to the correct executable. On macOS/Linux, ensure the file is executable: chmod +x DecompilerServer. |
| "You must install .NET to run this application" | Install the .NET 10 runtime. The prebuilt binaries do not include the runtime. |
| macOS blocks the binary ("unidentified developer") | Open System Settings → Privacy & Security and allow the application, or run: xattr -d com.apple.quarantine DecompilerServer. |
| Server starts but the AI does not use it | Check that the MCP client has the server enabled. In Claude Desktop, restart the app. In Cursor, check the MCP panel. In VS Code, reload the window. |
| Assembly fails to load | Confirm the .dll path is correct and that the assembly is a managed .NET assembly (not a native library). |
This section covers building from source, the full set of MCP launch options, the complete tool workflow, and contributor information.
- Load assemblies directly with
assemblyPathor use Unity-friendlygameDirloading. - Keep multiple assemblies loaded at once under aliases such as
rw14,rw15, andrw16. - Use
memberIdfollow-up tools without repeatedly resupplying the alias; routing uses the member ID's MVID. - Compare aliases structurally with
compare_contexts, then drill into types or members withcompare_symbols. - Diff individual method bodies with
compare_symbols(..., compareMode: "body"). - Decompiled non-type member source is returned as a member-scoped snippet rather than a whole containing type.
- .NET 10 runtime for release assets or built output
- .NET 10 SDK if you want to build from source
git clone https://github.com/pardeike/DecompilerServer.git
cd DecompilerServer
dotnet build DecompilerServer.sln -c Release
dotnet run --project DecompilerServer.csproj -c ReleaseFramework-dependent build output (requires dotnet on PATH):
command: dotnet
args:
- /absolute/path/to/DecompilerServer/bin/Release/net10.0/DecompilerServer.dll
Native app host from dotnet build:
- macOS/Linux:
/absolute/path/to/DecompilerServer/bin/Release/net10.0/DecompilerServer - Windows:
C:\\absolute\\path\\to\\DecompilerServer\\bin\\Release\\net10.0\\DecompilerServer.exe
Native app host from dotnet publish:
- macOS/Linux:
/absolute/path/to/DecompilerServer/bin/Release/net10.0/publish/DecompilerServer - Windows:
C:\\absolute\\path\\to\\DecompilerServer\\bin\\Release\\net10.0\\publish\\DecompilerServer.exe
Release assets are packaged as framework-dependent single-file executables and still require the .NET 10 runtime.
Load one or more assemblies:
load_assembly({
"assemblyPath": "/path/to/rw14/Assembly-CSharp.dll",
"contextAlias": "rw14"
})
load_assembly({
"gameDir": "/path/to/rw16",
"assemblyFile": "Assembly-CSharp.dll",
"contextAlias": "rw16"
})
Inspect loaded aliases:
list_contexts({})
status({})
Search and decompile:
search_types({
"query": "Pawn",
"limit": 10,
"contextAlias": "rw16"
})
get_decompiled_source({
"memberId": "<member-id-from-search>"
})
Once you have a memberId, follow-up tools normally route to the correct loaded assembly automatically.
Compare aliases:
compare_contexts({
"leftContextAlias": "rw14",
"rightContextAlias": "rw16",
"namespaceFilter": "Verse",
"deep": true
})
compare_symbols({
"leftContextAlias": "rw14",
"rightContextAlias": "rw16",
"symbol": "Verse.Root_Play",
"symbolKind": "type"
})
compare_symbols({
"leftContextAlias": "rw14",
"rightContextAlias": "rw16",
"symbol": "Verse.Pawn:Kill",
"symbolKind": "method",
"compareMode": "body"
})
dotnet format DecompilerServer.sln
dotnet test -c Release --no-restoreThe GitHub Release workflow is triggered by pushing a tag that starts with v and matches the project version in DecompilerServer.csproj.
For example, if the project version is 1.3.3:
git tag -a v1.3.3 -m "Release v1.3.3"
git push origin v1.3.3- README.md: user-facing overview and quick start
- ARCHITECTURE.md: durable technical reference (implementation details, routing, compare semantics, testing)
- TODO.md: backlog and future work
If you are changing implementation details, tool-routing behavior, compare semantics, or test patterns, update ARCHITECTURE.md rather than creating a new standalone guide.