docs: update documentation for v0.4.0 features

- Add dump_package tool documentation to README and API.md
- Document generate_pdb and use_pdb_variable_names parameters
- Update tool count from 14 to 15 in API.md
- Add DumpPackageRequest/Response models to API.md
- Add v0.4.0 and v0.3.0 entries to CHANGELOG
- Renumber API.md tools to accommodate new dump_package tool
This commit is contained in:
Ryan Malloy 2026-02-11 00:51:51 -07:00
parent 8776c9cf74
commit ad72b013ca
4 changed files with 113 additions and 16 deletions

View File

@ -5,6 +5,29 @@ All notable changes to mcilspy will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Calendar Versioning](https://calver.org/) for major releases. and this project adheres to [Calendar Versioning](https://calver.org/) for major releases.
## [0.4.0] - 2026-02-11
### Added
- **PDB Generation** (`generate_pdb` flag) - Generate portable PDB files from decompiled assemblies for IDE debugging
- **PDB Variable Names** (`use_pdb_variable_names` flag) - Use original variable names from existing PDB files for improved readability
- **`dump_package` tool** - Extract all assemblies from NuGet package folder structures for bulk analysis
### Changed
- `decompile_assembly` now exposes all ilspycmd CLI options - mcilspy has 100% feature coverage
- Updated documentation with new tool and parameter descriptions
- Tool count increased from 14 to 15
## [0.3.0] - 2026-02-10
### Fixed
- **Type parsing regex** - Fixed `list_types` returning empty results (regex expected "Class:" but ilspycmd outputs "Class ")
- **UserStringHeap data access** - Fixed Python name mangling issue in `search_strings` causing crash
- **Decompile stdout mode** - Added `_decompile_to_stdout()` method for simple decompilation without output directory
### Changed
- Merged comprehensive code review fixes from parallel taskmaster branches (security, architecture, performance, testing)
- All 165 tests passing
## [0.2.0] - 2026-02-07 ## [0.2.0] - 2026-02-07
### Security ### Security

View File

@ -78,10 +78,10 @@ Learn from decompiled implementations when documentation falls short.
| Tool | What It Does | Requires ilspycmd? | | Tool | What It Does | Requires ilspycmd? |
|------|--------------|:------------------:| |------|--------------|:------------------:|
| `decompile_assembly` | Full C# source recovery | Yes | | `decompile_assembly` | Full C# source recovery (with PDB generation) | Yes |
| `list_types` | Enumerate classes, interfaces, enums | Yes | | `list_types` | Enumerate classes, interfaces, enums | Yes |
| `search_types` | Find types by name pattern | Yes | | `search_types` | Find types by name pattern | Yes |
| `search_strings` | Find hardcoded strings (URLs, keys) | Yes | | `search_strings` | Find hardcoded strings (URLs, keys) | No |
| `search_methods` | Find methods by name | No | | `search_methods` | Find methods by name | No |
| `search_fields` | Find fields and constants | No | | `search_fields` | Find fields and constants | No |
| `search_properties` | Find properties by name | No | | `search_properties` | Find properties by name | No |
@ -89,11 +89,12 @@ Learn from decompiled implementations when documentation falls short.
| `list_resources` | Find embedded files/images | No | | `list_resources` | Find embedded files/images | No |
| `get_metadata_summary` | Assembly stats and references | No | | `get_metadata_summary` | Assembly stats and references | No |
| `generate_diagrammer` | Interactive HTML type diagrams | Yes | | `generate_diagrammer` | Interactive HTML type diagrams | Yes |
| `dump_package` | Extract assemblies from NuGet packages | Yes |
| `get_assembly_info` | Version, framework, signing info | Yes | | `get_assembly_info` | Version, framework, signing info | Yes |
| `check_ilspy_installation` | Diagnose setup issues | No | | `check_ilspy_installation` | Diagnose setup issues | No |
| `install_ilspy` | Auto-install .NET SDK + ilspycmd | No | | `install_ilspy` | Auto-install .NET SDK + ilspycmd | No |
**6 tools work immediately** (via [dnfile](https://github.com/malwarefrank/dnfile)) — no .NET SDK required. **7 tools work immediately** (via [dnfile](https://github.com/malwarefrank/dnfile)) — no .NET SDK required.
**8 more tools** unlock with `ilspycmd` for full decompilation power. **8 more tools** unlock with `ilspycmd` for full decompilation power.
--- ---
@ -164,11 +165,14 @@ The primary reverse-engineering tool. Decompiles .NET assemblies to readable C#.
| `create_project` | No | Generate compilable .csproj structure | | `create_project` | No | Generate compilable .csproj structure |
| `language_version` | No | C# version (default: Latest) | | `language_version` | No | C# version (default: Latest) |
| `show_il_code` | No | Output IL bytecode instead of C# | | `show_il_code` | No | Output IL bytecode instead of C# |
| `generate_pdb` | No | Generate portable PDB for debugging (requires `output_dir`) |
| `use_pdb_variable_names` | No | Use original variable names from existing PDB |
```json ```json
{ {
"assembly_path": "/path/to/MyApp.dll", "assembly_path": "/path/to/MyApp.dll",
"type_name": "MyApp.Services.AuthService" "type_name": "MyApp.Services.AuthService",
"use_pdb_variable_names": true
} }
``` ```
</details> </details>
@ -246,6 +250,26 @@ Generates an HTML visualization of type hierarchies and relationships.
</details> </details>
<details>
<summary><strong>dump_package</strong> — Extract assemblies from NuGet packages</summary>
Extracts all assemblies from a NuGet package folder structure into a flat directory for bulk analysis.
| Parameter | Required | Description |
|-----------|:--------:|-------------|
| `assembly_path` | Yes | Path to assembly or NuGet package folder |
| `output_dir` | Yes | Directory to dump assemblies into |
```json
{
"assembly_path": "/path/to/packages/Newtonsoft.Json",
"output_dir": "./extracted-assemblies"
}
```
Useful for analyzing package dependencies or bulk decompilation of NuGet packages.
</details>
<details> <details>
<summary><strong>get_assembly_info</strong> — Get assembly metadata</summary> <summary><strong>get_assembly_info</strong> — Get assembly metadata</summary>

View File

@ -4,7 +4,7 @@ This document provides detailed API documentation for mcilspy.
## Overview ## Overview
mcilspy provides a Model Context Protocol (MCP) interface to the ILSpy .NET decompiler. It exposes **14 tools** and two prompts for interacting with .NET assemblies. mcilspy provides a Model Context Protocol (MCP) interface to the ILSpy .NET decompiler. It exposes **15 tools** and two prompts for interacting with .NET assemblies.
### Tool Categories ### Tool Categories
@ -44,6 +44,8 @@ Decompiles a .NET assembly to C# source code. This is the primary tool for rever
| `remove_dead_stores` | boolean | ✗ | false | Remove unused variable assignments | | `remove_dead_stores` | boolean | ✗ | false | Remove unused variable assignments |
| `show_il_sequence_points` | boolean | ✗ | false | Include debugging sequence points in IL output | | `show_il_sequence_points` | boolean | ✗ | false | Include debugging sequence points in IL output |
| `nested_directories` | boolean | ✗ | false | Use nested directories for namespaces | | `nested_directories` | boolean | ✗ | false | Use nested directories for namespaces |
| `generate_pdb` | boolean | ✗ | false | Generate portable PDB file (requires `output_dir`) |
| `use_pdb_variable_names` | boolean | ✗ | false | Use original variable names from existing PDB |
**Language Versions:** **Language Versions:**
- `CSharp1` through `CSharp12_0` - `CSharp1` through `CSharp12_0`
@ -206,9 +208,39 @@ Generates an interactive HTML diagram showing assembly type relationships.
**Response:** **Response:**
Returns success status and output directory path. The HTML file can be opened in a web browser to view the interactive diagram. Returns success status and output directory path. The HTML file can be opened in a web browser to view the interactive diagram.
### 6. get_assembly_info ### 6. dump_package
Gets metadata and version information about a .NET assembly. Dump package assemblies into a folder. Extracts all assemblies from a NuGet package folder structure into a flat directory for easier analysis.
**Parameters:**
| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| `assembly_path` | string | ✓ | - | Path to the assembly or NuGet package folder to extract from |
| `output_dir` | string | ✓ | - | Directory to dump assemblies into (will be created if needed) |
**Use Cases:**
- Bulk decompilation of NuGet packages
- Analyzing package dependencies
- Extracting DLLs from complex package structures
**Example:**
```json
{
"name": "dump_package",
"arguments": {
"assembly_path": "/path/to/packages/Newtonsoft.Json.13.0.1",
"output_dir": "./extracted-assemblies"
}
}
```
**Response:**
Returns a summary including output directory path and list of extracted assemblies.
### 7. get_assembly_info
Gets metadata and version information about a .NET assembly. Uses ilspycmd to extract detailed assembly attributes.
**Parameters:** **Parameters:**
@ -241,7 +273,7 @@ Returns assembly metadata including:
These tools use [dnfile](https://github.com/malwarefrank/dnfile) for direct PE/metadata parsing. They do **not require ilspycmd** to be installed. These tools use [dnfile](https://github.com/malwarefrank/dnfile) for direct PE/metadata parsing. They do **not require ilspycmd** to be installed.
### 7. search_methods ### 8. search_methods
Search for methods in an assembly by name pattern. Uses direct metadata parsing of the MethodDef table. Search for methods in an assembly by name pattern. Uses direct metadata parsing of the MethodDef table.
@ -278,7 +310,7 @@ Search for methods in an assembly by name pattern. Uses direct metadata parsing
**Response:** **Response:**
Returns matching methods grouped by declaring type, showing visibility modifiers (public, static, virtual, abstract). Returns matching methods grouped by declaring type, showing visibility modifiers (public, static, virtual, abstract).
### 8. search_fields ### 9. search_fields
Search for fields and constants in an assembly. Uses direct metadata parsing of the Field table. Search for fields and constants in an assembly. Uses direct metadata parsing of the Field table.
@ -312,7 +344,7 @@ Search for fields and constants in an assembly. Uses direct metadata parsing of
} }
``` ```
### 9. search_properties ### 10. search_properties
Search for properties in an assembly by name pattern. Uses direct metadata parsing of the Property table. Search for properties in an assembly by name pattern. Uses direct metadata parsing of the Property table.
@ -332,7 +364,7 @@ Search for properties in an assembly by name pattern. Uses direct metadata parsi
- Locate data model fields - Locate data model fields
- Discover API response/request properties - Discover API response/request properties
### 10. list_events ### 11. list_events
List all events defined in an assembly. Uses direct metadata parsing of the Event table. List all events defined in an assembly. Uses direct metadata parsing of the Event table.
@ -349,7 +381,7 @@ List all events defined in an assembly. Uses direct metadata parsing of the Even
- Discover observer patterns - Discover observer patterns
- Analyze UI event handlers - Analyze UI event handlers
### 11. list_resources ### 12. list_resources
List all embedded resources in an assembly. Uses direct metadata parsing of the ManifestResource table. List all embedded resources in an assembly. Uses direct metadata parsing of the ManifestResource table.
@ -364,7 +396,7 @@ List all embedded resources in an assembly. Uses direct metadata parsing of the
- Discover localization resources - Discover localization resources
- Locate embedded assemblies - Locate embedded assemblies
### 12. get_metadata_summary ### 13. get_metadata_summary
Get a comprehensive metadata summary with accurate statistics. Uses dnfile for direct metadata counts. Get a comprehensive metadata summary with accurate statistics. Uses dnfile for direct metadata counts.
@ -395,7 +427,7 @@ Returns comprehensive assembly information including:
These tools help manage ilspycmd installation and diagnose issues. These tools help manage ilspycmd installation and diagnose issues.
### 13. check_ilspy_installation ### 14. check_ilspy_installation
Check if ilspycmd and dotnet CLI are installed and working. Use this to diagnose issues with decompilation tools. Check if ilspycmd and dotnet CLI are installed and working. Use this to diagnose issues with decompilation tools.
@ -415,7 +447,7 @@ Returns installation status including:
} }
``` ```
### 14. install_ilspy ### 15. install_ilspy
Install or update ilspycmd, the ILSpy command-line decompiler. Automatically detects your platform and package manager to provide optimal installation instructions. Install or update ilspycmd, the ILSpy command-line decompiler. Automatically detects your platform and package manager to provide optimal installation instructions.
@ -549,6 +581,24 @@ class DecompileRequest(BaseModel):
remove_dead_stores: bool = False remove_dead_stores: bool = False
show_il_sequence_points: bool = False show_il_sequence_points: bool = False
nested_directories: bool = False nested_directories: bool = False
generate_pdb: bool = False # Generate portable PDB file
use_pdb_variable_names: bool = False # Use variable names from existing PDB
```
### DumpPackageRequest
```python
class DumpPackageRequest(BaseModel):
assembly_path: str # Path to assembly or NuGet package folder
output_dir: str # Required: directory to dump assemblies into
```
### DumpPackageResponse
```python
class DumpPackageResponse(BaseModel):
success: bool
output_path: str | None = None
assemblies_dumped: list[str] = []
error_message: str | None = None
``` ```
### TypeInfo ### TypeInfo

2
uv.lock generated
View File

@ -332,7 +332,7 @@ wheels = [
[[package]] [[package]]
name = "mcilspy" name = "mcilspy"
version = "0.3.0" version = "0.4.0"
source = { editable = "." } source = { editable = "." }
dependencies = [ dependencies = [
{ name = "dnfile" }, { name = "dnfile" },