Skip to main content
Glama
Heretek-RE

re-dotnet-patch

by Heretek-RE
README.md
# re-dotnet-patch

MCP server for structured patching of Mono / .NET assemblies.

## Status

**v2.8.0 — SKELETON.** Tool contracts are final and pinned by tests
(`tests/test_re_dotnet_patch.py`). The actual round-trip patcher
backend (dnlib / Mono.Cecil / pythonnet) lands in v2.8.1.

Every mutating tool currently returns a structured
`{status: "not_implemented", reason, remediation, schema_for_replay}`
dict, so:

1. Downstream skills can target the tool names today.
2. Callers can serialize the operation as a patch descriptor for
   later replay once v2.8.1 lands.
3. The CHANGELOG entry for v2.8.0 can advertise the new server even
   though the backend is deferred.

## Tools

| Tool | Status | What it does |
|---|---|---|
| `check_dnlib` | WARN (stub) | Probe for the future backend |
| `nop_method` | not_implemented | Replace a method body with a NOP-sled (return default) |
| `replace_method_body` | not_implemented | Replace a method body with caller-supplied IL bytes |
| `replace_string_ldstr` | not_implemented | Replace a specific `ldstr` operand within a method body |
| `patch_assembly` | not_implemented | Apply a list of operations atomically |
| `rollback_patch` | delegate | Delegate to `re-patch.restore_original` |

## Why a new server (not a helper in re-patch)?

`re-patch` is byte-splice only, pure-stdlib + mcp/pydantic. Adding a
heavy dnlib / Mono.Cecil dep would bloat re-patch's surface for
callers that only need a byte-splice. Per the v2.8.0 plan
(approved 2026-06-07, LO decision), the Mono dnlib patcher ships as
a new server to keep the dep boundary clean. Costs 1 server-count
entry in `.mcp.json` (30 → 31).

## What this server does NOT do

- It does NOT NOP a method body today. v2.8.1 will. For v2.8.0,
  decompile the assembly with `re-dotnet.decompile_type`, edit the
  C# source by hand to stub the target method, then recompile.
- It does NOT touch native / non-.NET binaries. Use `re-patch` for
  byte-splice; use `re-vm-reverse` for VM-protected native code.
- It does NOT restore originals — call `re-patch.restore_original`
  directly. The `rollback_patch` tool delegates by-documentation.

## Closing CD-3

The r03-stress run identified `MonoLauncher::PASystemInfoScanner.MainWindow`
as the Mono Steam-gate target (see
`See the RE-AI output directory.`
for the full decompile). Once v2.8.1 lands the dnlib backend,
`nop_method("PASystemInfoScanner.MainWindow::GetSteamRegistryKey")`
will close CD-3 as a HIGH-confidence patch (currently DOC-ONLY).

## License

MIT.

TDQS

B3.1/5.0

Scored across 6 tools

Disambiguation4/5

Tools have distinct purposes (probing, NOP, atomic patch, IL replacement, string replacement, rollback), but nop_method and replace_method_body both modify method bodies, causing slight overlap.

Naming Consistency4/5

Naming pattern is mostly consistent with verb_noun (e.g., patch_assembly, replace_method_body), but check_dnlib and nop_method deviate slightly from the pattern.

Tool Count5/5

6 tools is well-scoped for a .NET assembly patching server, covering essential operations without being overwhelming.

Completeness3/5

Core patching operations are covered, but missing tools for reading assembly metadata or scanning methods, and several tools are stubs (not_implemented) in v2.8.0, limiting practical completeness.

Maintenance

ActivitySlowing
ResponsivenessSyncing