](https://github.com/sponsors/MarcelRoozekrans)
MemoryLens MCP
On-demand .NET memory profiling with concrete, AI-actionable code fix suggestions — wraps JetBrains dotMemory with a heuristic-based rule engine.
______________________________________________________________________
托管部署
托管部署可在 Frontier AI.
快速开始
VS代码/Visual Studio(通过dnx)
添加到MCP设置(.vscode/mcp.json 或VS设置):
{
"servers": {
"memorylens": {
"type": "stdio",
"command": "dnx",
"args": ["MemoryLens.Mcp", "--yes"]
}
}
}Claude代码插件
claude install gh:MarcelRoozekrans/memorylens-mcp.NET全局工具
dotnet tool install -g MemoryLens.Mcp先决条件
- .NET 10 SDK 或以后
- JetBrains dotMemory CLI(安装选项见下文)
dotMemory CLI安装
MemoryLens MCP在首次使用时通过以下方式自动下载和缓存JetBrains dotMemory CLI ensure_dotmemory 工具——在支持的平台上不需要手动安装。
支持的平台(自动下载)
| 平台 | 架构 |
|---|---|
| Windows | x64、x86、ARM64 |
| Linux(glibc) | x64、ARM64、ARM |
| Linux(musl) | x64,ARM64 |
| macOS | x64(英特尔)、ARM64(苹果硅) |
缓存位置
下载的二进制文件缓存在 ~/.memorylens/tools/dotmemory/{version}/旧版本不会自动删除,请手动删除目录以释放磁盘空间。
不支持的平台
上面未列出的平台(例如FreeBSD、Linux x86)无法使用自动下载。集 DOTMEMORY_PATH 指向现有的dotMemory CLI可执行文件:
export DOTMEMORY_PATH="/path/to/dotMemory.sh" # Linux/macOS
set DOTMEMORY_PATH=C:\path\to\dotMemory.exe # Windows在JetBrains工具箱中查找dotMemory CLI:
- Linux:
~/.local/share/JetBrains/Toolbox/apps/rider/tools/profiler/dotMemory.sh - 窗户:
%LOCALAPPDATA%\JetBrains\Toolbox\apps\rider\tools\profiler\dotMemory.exe
手动回退发现
如果自动下载不可用,MemoryLens MCP将按顺序通过这些发现模式回退:
DOTMEMORY_PATH环境变量 --CLI可执行文件的显式路径- 系统路径 --搜索
dotMemory.sh/dotMemory(Linux/macOS)或dotMemory.exe(Windows) - 当地。NET工具清单 —
dotnet tool install dotnet-dotmemory --local - 全球的。NET工具 —
dotnet tool install -g dotnet-dotmemory(传统回退)
错误场景
| 错误 | 原因 | 修复 |
|---|---|---|
Platform '...' is not supported | 不支持的OS/arch | 设置 DOTMEMORY_PATH |
| 网络/下载失败 | 没有互联网/无法访问NuGet | 设置 DOTMEMORY_PATH 或重试 ensure_dotmemory |
chmod +x failed | 只读文件系统 | 设置 DOTMEMORY_PATH 到可写位置 |
dotMemory CLI not found | 所有发现模式均失败 | 运行 ensure_dotmemory 或设置 DOTMEMORY_PATH |
可用的MCP工具
| 工具 | 说明 |
|---|---|
ensure_dotmemory | 下载并验证JetBrains dotMemory CLI工具是否可用 |
list_processes | 列表正在运行。NET进程可用于分析 |
snapshot | 捕获目标进程的单个内存快照 |
compare_snapshots | 以可配置的延迟捕获两个快照并进行比较 |
analyze | 对捕获的快照运行规则引擎并返回结果 |
get_rules | 列出所有可用的分析规则及其元数据 |
内置规则
| ID | 严重性 | 类别 | 描述 |
|---|---|---|---|
| ML001 | 严重 | 泄漏 | 检测到事件处理程序泄漏 |
| ML002 | 临界 | 泄漏 | 静态收集增长无界 |
| ML003 | 高 | 泄漏 | 一次性物品未处理 |
| ML004 | 高 | 碎片化 | 大对象堆碎片化 |
| ML005 | 中等 | 保留时间 | 对象保留时间比预期长 |
| ML006 | 中等 | 分配 | 热路径分配过多 |
| ML007 | 中等 | 保留 | 关闭保留意外引用 |
| ML008 | 低 | 分配 | 数组/列表大小调整无容量提示 |
| ML009 | 低 | 模式 | 不带Dispose模式的终结器 |
| ML010 | 低 | 模式 | 字符串实习机会 |
配置
创建一个 .memorylens.json 项目根目录中的文件,用于自定义规则行为:
{
"rules": {
"ML001": { "enabled": true, "severity": "critical" },
"ML002": { "enabled": true, "severity": "critical" },
"ML003": { "enabled": true, "severity": "high" },
"ML004": { "enabled": true, "severity": "high" },
"ML005": { "enabled": true, "severity": "medium" },
"ML006": { "enabled": true, "severity": "medium" },
"ML007": { "enabled": true, "severity": "medium" },
"ML008": { "enabled": true, "severity": "low" },
"ML009": { "enabled": true, "severity": "low" },
"ML010": { "enabled": true, "severity": "low" }
}
}用法示例
单个快照
捕获正在运行的进程的内存快照以检查当前内存状态:
> /memorylens
> Take a snapshot of my running API (PID 12345)克劳德会打电话的 ensure_dotmemory那么 snapshot 使用目标PID,然后 analyze 结果和目前的发现按严重程度排序。
比较之前/之后
通过比较两个延迟拍摄的快照来检测内存增长:
> /memorylens
> Check if my app has a memory leak — compare before and after processing 1000 requests克劳德会打电话的 compare_snapshots 使用可配置的等待期,然后分析差异以识别快照之间增长的对象。
