关于 memorylens-mcp
MemoryLens MCP 为 .NET 开发者提供按需内存分析,通过运行时的 EventPipe 诊断通道从运行中的进程收集堆数据。其分析规则可识别内存问题并提供可执行的代码修复建议,无需安装分析器。
主要功能
- 01通过 EventPipe 在进程内采集堆快照
- 02列出可用的 .NET 进程
- 03按可配置间隔比较快照
- 04按严重级别进行规则分析
- 05使用 .memorylens.json 自定义规则
适用场景
- 01检查运行中 .NET 应用的堆使用情况
- 02比较工作负载前后的内存
- 03调查疑似泄漏或对象滞留
- 04查看分析规则并调整严重级别
MCP 相关
向 MCP 客户端提供进程发现、快照采集与比较、分析和规则列表工具。可通过 npx、dnx、.NET 全局工具或 Docker 以 stdio 模式启动。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
MemoryLens MCP
按需进行 .NET 内存分析,并提供具体、可供 AI 采取行动的代码修复建议——无需安装分析器。
托管部署
可通过 Fronteir AI 使用托管部署。
快速开始
npx(任意 MCP 客户端)
{
"mcpServers": {
"memorylens": {
"type": "stdio",
"command": "npx",
"args": ["-y", "memorylens-mcp"]
}
}
}
npm 包不包含任何服务端代码——它是一个启动器,会安装匹配版本的 MemoryLens.Mcp .NET
全局工具并执行它,因此 必须将 .NET 10 SDK 添加到 PATH。
后续启动会完全跳过安装,并可离线运行。
VS Code / Visual Studio(通过 dnx)
将以下内容添加到 MCP 设置(.vscode/mcp.json 或 VS 设置):
{
"servers": {
"memorylens": {
"type": "stdio",
"command": "dnx",
"args": ["MemoryLens.Mcp", "--yes"]
}
}
}
Claude Code 插件
claude install gh:MarcelRoozekrans/memorylens-mcp
.NET 全局工具
dotnet tool install -g MemoryLens.Mcp
Docker
docker build -t memorylens-mcp .
docker run -i --rm --pid=host --cap-add=SYS_PTRACE \
-v /tmp:/tmp \
-v "$PWD:/workspace" memorylens-mcp
在容器中进行分析需要 ptrace 和主机 PID 命名空间;而在
Docker Desktop 上,该命名空间属于 Linux 虚拟机,而非你的桌面系统。选择这种方式前,请参阅
docs/docker.md。
-v /tmp:/tmp 是让 list_processes 返回内容的关键——运行时的
诊断套接字位于临时目录中;它也能确保在 --rm 后快照仍然保留,因为快照会写入
容器内的 /tmp/memorylens-snapshots。-v "$PWD:/workspace" 仅用于
读取 .memorylens.json;不会向此目录写入任何内容。
先决条件
- .NET 10 SDK,10.0.4xx 功能带(在
global.json中固定)
运行筛选后的部分测试(例如 dotnet test --filter <name>)时,将以代码 9 退出,
并打印 error: 1, failed: 0。这是测试项目的发现折叠保护机制
(--minimum-expected-tests)触发所致,因为筛选后剩余的测试数量低于预期——
这并不表示测试失败,也不影响完整的 dotnet test 运行。
工作原理
MemoryLens 通过 EventPipe 在进程内收集堆数据。EventPipe 是 .NET 运行时内置的诊断通道。无需安装探查器、首次使用时无需下载,也不依赖 PATH 中的外部工具。
snapshot 根据 pid 附加到正在运行的 .NET 进程,触发一次垃圾回收,并将堆数据汇总为各类型的对象数量和大小。快照会以小型 JSON 文件的形式写入临时目录,并通过一个短 ID 引用。
在 Linux 和容器中,附加到其他进程的诊断终结点可能需要匹配 UID 或 SYS_PTRACE——请参阅 docs/docker.md。
可用的 MCP 工具
| 工具 | 描述 |
|---|---|
list_processes | 列出可供分析的正在运行的 .NET 进程,这些进程通过其诊断 IPC 终结点发现 |
snapshot | 捕获目标进程的单个内存快照 |
compare_snapshots | 按可配置的延迟捕获两个快照并进行比较 |
analyze | 对已捕获的快照运行规则引擎并返回分析结果 |
get_rules | 列出所有可用分析规则及其元数据 |
内置规则
| ID | 严重性 | 类别 | 描述 |
|---|---|---|---|
| ML001 | critical | leak | 检测到事件处理程序泄漏 |
| ML002 | critical | leak | 静态集合持续增长且没有上限 |
| ML003 | high | leak | 可释放对象未释放 |
| ML004 | high | fragmentation | 大对象堆碎片化 |
| ML005 | medium | retention | 对象保留时间超过预期 |
| ML006 | medium | allocation | 热路径中分配过多 |
| ML007 | medium | retention | 闭包保留了意料之外的引用 |
| ML008 | low | allocation | 数组/列表扩容时未提供容量提示 |
| ML009 | low | pattern | 终结器未采用 Dispose 模式 |
| ML010 | low | pattern | 存在字符串驻留的机会 |
配置
在项目根目录中创建 .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)
Claude 会使用目标 PID 调用 snapshot,然后对返回的快照 ID 调用 analyze,并按严重性排序呈现分析结果。
前后对比
通过比较间隔一段时间捕获的两个快照,检测内存增长:
> /memorylens
> Check if my app has a memory leak — compare before and after processing 1000 requests
Claude 会调用 compare_snapshots,并在两次捕获之间设置 delaySeconds 值(默认为 10 秒),然后分析差异,以识别在两个快照之间增长的对象。
同系列项目
MemoryLens MCP 属于一个面向 AI 工作的小型 .NET 项目系列:
- AI.Sentinel:面向
IChatClient的安全监控中间件:提示词注入、幻觉和 PII 检测,并提供审计跟踪。 - Minos.NET:带类型、由源代码生成的决策问题,并提供经过校准的答案。
- Rag.NET:基于 Microsoft.Extensions.AI 的模块化检索增强生成管道。
- Roslyn CodeLens MCP:通过 MCP 为 AI Agent 提供语义级 .NET 代码智能。
基于 ZeroAlloc 构建
MemoryLens MCP 使用这些 ZeroAlloc 库。它们是源代码生成器和分析器,运行时无需反射:
许可证
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。