Metadata-Version: 2.4
Name: dnspy-mcp
Version: 0.1.0
Summary: MCP server exposing dnSpy decompilation (search, navigate, decompile .NET assemblies to C#)
License: GPL-3.0-or-later
Requires-Python: >=3.10
Description-Content-Type: text/markdown
Requires-Dist: mcp>=1.2
Provides-Extra: dev
Requires-Dist: pytest>=8; extra == "dev"
Requires-Dist: build; extra == "dev"
Requires-Dist: wheel; extra == "dev"
Requires-Dist: twine; extra == "dev"

# dnSpy MCP

MCP server exposing dnSpy decompilation — search, list members, decompile to C#, and get IL
from .NET assemblies. A Python (FastMCP) shim supervises a .NET decompiler worker built from
this dnSpy fork; the published wheel bundles the worker, so installing needs no .NET build.

## Use (Windows)

    claude mcp add dnspy -- uvx dnspy-mcp

or `pip install dnspy-mcp`. That's it — the worker ships inside the wheel.

### Tools
- `search_symbols(assembly, query, kind?)` — kind: `type` | `method` | `field` | `any`
- `list_members(assembly, typeFullName)`
- `decompile_type(assembly, typeFullName)`
- `decompile_method(assembly, typeFullName, method)` — `method` = name or `0x`-token
- `get_il(assembly, typeFullName, method)`

`assembly` is an absolute path; the worker loads + caches it on first use.

## Develop

    git submodule update --init Extensions/ILSpy.Decompiler/ICSharpCode.Decompiler Extensions/ILSpy.Decompiler/NRefactory
    dotnet build dnSpy.Mcp.Worker/dnSpy.Mcp.Worker.csproj -c Release
    cd mcp && py -m pip install -e ".[dev]"
    $env:DNSPY_WORKER_EXE = "<repo>/dnSpy.Mcp.Worker/bin/Release/net48/dnSpy.Mcp.Worker.exe"
    py -m pytest -q

`DNSPY_WORKER_EXE` overrides the bundled worker path for development.

## Publish

    # set $env:TWINE_USERNAME='__token__'; $env:TWINE_PASSWORD=<pypi-token>
    powershell -ExecutionPolicy Bypass -File mcp/publish.ps1
