内容
# dotnet-dll-inspector
**一款用于探索 .NET DLL 和 EXE 元数据的令牌高效的 MCP 服务器和命令行工具。**
与其反编译程序集或将大型 PowerShell 反射转储粘贴到 LLM 对话中,不如给模型提供本地程序集路径。它可以首先发现相关的类型,然后仅为它需要的少量 API 表面请求成员。
> 状态:早期公开版本。适用于公开 CLI 元数据的托管程序集。某些运行时特定或 ReadyToRun 程序集可能尚不支持底层元数据解析器。
## 为什么存在
LLM 擅长于推理 API,但当上下文是大型二进制文件、反编译的源代码树或未过滤的反射报告时,效率低下。此工具将本地 .NET 程序集转换为通过 [模型上下文协议(MCP)](https://modelcontextprotocol.io/) 的紧凑、结构化的元数据。
它适用于:
- 内部应用程序的 DLL(当源代码不可用时)。
- NuGet 包程序集。
- 旧版 .NET 集成。
- 在编写不熟悉的依赖项代码之前进行 API 发现。
## 致谢和上游项目
.NET PE/CLI 元数据解析核心功能来自 [nickbclifford/dotnetdll](https://github.com/nickbclifford/dotnetdll),即本项目所依赖的 Rust 库。`dotnet-dll-inspector` 是一个专注的 MCP/CLI 集成,围绕该库的元数据模型和解析 API 构建。
`dotnetdll` 在 GNU 通用公共许可证第 3 版或更高版本下许可。由于本项目分发与该库链接的二进制文件,`dotnet-dll-inspector` 同样在 GPL-3.0-or-later 下许可。参见 [NOTICE](NOTICE) 和 [LICENSE](LICENSE)。
## 安装
从存储库的 **Releases** 页面下载 `dotnet-dll-inspector-windows-x86_64.exe`,并将其放在您的 `PATH` 中。
或者,自己构建:
```powershell
git clone https://github.com/AndriiHavrylov/Dotnet_dll_inspector_mcp.git
cd Dotnet_dll_inspector_mcp
cargo build --release
```
二进制文件在 `target\release\dotnet-dll-inspector.exe` 中创建。
## 与 Codex 配合使用
将服务器添加到 `%USERPROFILE%\.codex\config.toml` 中以适用于所有项目,或添加到 `.codex/config.toml` 中以适用于一个项目:
```toml
[mcp_servers.dotnet_dll_inspector]
command = 'C:\Tools\dotnet-dll-inspector-windows-x86_64.exe'
args = ["--mcp"]
```
重启 Codex 后,它将公开此 MCP 工具:
| 工具 | 功能 |
| --- | --- |
| `inspect_dotnet_assembly` | 列出匹配的类型,并在请求时列出其属性、方法和字段。 |
### 推荐的提示序列
1. “检查 `C:\packages\Example.dll`;列出包含 `Invoice` 的类型。”
2. “对于 `Example.InvoiceService`,包括成员。”
3. “显示我如何使用找到的方法创建发票。”
这种渐进式的缩小保持了模型上下文的聚焦。
## 工具合约
| 参数 | 必需 | 默认值 | 描述 |
| --- | --- | --- | --- |
| `path` | 是 | — | 绝对或服务器工作目录相对的 DLL/EXE 路径。 |
| `type_filter` | 否 | 所有类型 | 不区分大小写的子字符串,与完全限定的类型名称匹配。 |
| `include_members` | 否 | `false` | 包括每个匹配类型的属性、方法和字段。 |
| `max_types` | 否 | `100` | 限制结果从 1 到 1,000;响应显示是否被截断。 |
响应是结构化的 JSON。一个典型的详细结果如下:
```json
{
"types": [{
"name": "Example.InvoiceService",
"methods": [{
"name": "Create",
"return_type": "Invoice",
"parameters": ["Customer", "decimal"]
}]
}],
"total_matches": 1,
"truncated": false
}
```
## 命令行界面
直接命令行界面仍然可用于脚本和诊断:
```powershell
# 列出类型名称
dotnet-dll-inspector --file C:\path\to\library.dll
# 过滤类型并输出带有成员的 JSON
dotnet-dll-inspector --file C:\path\to\library.dll --match-str InvoiceService --json
# 运行 MCP 标准输入/输出服务器
dotnet-dll-inspector --mcp
```
## 令牌和成本比较
该工具并不能神奇地使 LLM 的推理免费;它减少了模型必须消耗的**程序集发现上下文**。以下示例比较了常见的反射工作流和两步 MCP 工作流。
### 示例检查:在中等大小的 NuGet 程序集中查找一个服务
假设:
- PowerShell 返回未过滤的类型/API 报告,代理接收所有内容。
- 程序集大约有 1,500 个类型,API 转储约为 180,000 个字符。
- MCP 流首先列出匹配的类型名称,然后为一个类型请求成员。
- 令牌估计使用 `characters ÷ 4`,一个故意简单的跨模型近似。工具调用参数和模型推理作为保守估计。
| 步骤 | 默认 PowerShell + 广泛文本返回 | 近似令牌 | 自定义 MCP 工具 | 近似令牌 |
| --- | --- | ---: | --- | ---: |
| 定位 DLL | 目录/包搜索输出 | 800 | `path` 参数 | 80 |
| 发现 API 表面 | 完整的反射/类型转储(~180k 字符) | 45,000 | `type_filter` 类型库存 | 3,500 |
| 选择相关 API | 模型读取和缩小广泛输出 | 2,000 | 模型选择短匹配列表 | 500 |
| 检查成员 | 广泛的 `Get-Member`/反射输出 | 8,000 | 一个详细的匹配类型 | 1,500 |
| **总计** | **多个 shell 转换和大型文本有效载荷** | **55,800** | **两个聚焦的 MCP 调用** | **5,580** |
该示例避免了大约 **50,220 个令牌(约 90%)**,在模型开始解决实际编码问题之前。
### 近似输入成本影响
将表格与您自己的提供商的当前 **输入** 价格一起使用。它仅模拟任务的程序集检查部分,而不是模型的最终答案或任何缓存令牌折扣。
| 每 100 万令牌的输入价格 | 广泛的 PowerShell 流(55,800 令牌) | 聚焦的 MCP 流(5,580 令牌) | 近似节省 |
| ---: | ---: | ---: | ---: |
| $1 | $0.0558 | $0.0056 | **$0.0502** |
| $5 | $0.2790 | $0.0279 | **$0.2511** |
| $15 | $0.8370 | $0.0837 | **$0.7533** |
对于粗略的二进制上限,DLL 的 Base64 编码成本约为 `DLL bytes ÷ 3` 令牌,而有针对性的 JSON 响应成本约为 `JSON characters ÷ 4`。不要将二进制文件发送到模型中作为本地检查的替代。
这些是透明的规划估计,而不是关于任何特定模型标记器、提供商价格、缓存行为或每个 DLL 的声明。在成本很重要时,请在您的环境中衡量实际请求使用情况。
## 版本
推送 `v0.1.0` 之类的标签会在 Windows 上运行发布工作流。它会构建优化的可执行文件,并将这两个资产附加到 GitHub 发布:
| 资产 | 用途 |
| --- | --- |
| `dotnet-dll-inspector-windows-x86_64.exe` | 可下载的 Windows 可执行文件。 |
| `SHA256SUMS.txt` | 可执行文件的 SHA-256 完整性校验和。 |
## 开发
```powershell
cargo fmt -- --check
cargo clippy -- -D warnings
cargo test
cargo build --release --locked
```
拉取请求和推送到 `main` 会在 GitHub Actions 中运行相同的检查。
## 安全和隐私
服务器读取 MCP 客户端提供的程序集路径,并向该客户端返回元数据。请将 DLL 路径及其元数据视为潜在敏感信息。不要为不受信任的客户端启用服务器,并避免在预期的工作空间之外传递路径。
要私下报告安全问题,请参阅 [SECURITY.md](SECURITY.md)。
## 贡献
欢迎贡献。请在打开问题或拉取请求之前阅读 [CONTRIBUTING.md](CONTRIBUTING.md)。
## 许可证
GNU 通用公共许可证 v3.0 或更高版本。请参阅 [LICENSE](LICENSE) 和 [NOTICE](NOTICE)。