memorylens-mcp について
MemoryLens MCPは、.NET開発者向けにオンデマンドのメモリプロファイリングを提供し、ランタイムのEventPipe診断チャネルを通じて実行中プロセスのヒープデータを収集します。プロファイラーのインストールなしで、分析ルールがメモリ問題を特定し、コード修正案を示します。
主な機能
- 01EventPipe経由のプロセス内ヒープスナップショット
- 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 に設定されている必要があります。
2 回目以降の起動ではインストールが省略され、オフラインで動作します。
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 VM のものです。この方法を選ぶ前に、docs/docker.md を確認してください。
-v /tmp:/tmp を指定すると、list_processes が結果を返すようになります。ランタイムの診断ソケットは一時ディレクトリにあるためです。また、スナップショットはコンテナー内の /tmp/memorylens-snapshots に書き込まれるので、この指定によって --rm の実行後もスナップショットが保持されます。-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 | 診断 IPC エンドポイントから検出した、プロファイリング可能な実行中の .NET プロセスを一覧表示します |
snapshot | 対象プロセスのメモリスナップショットを 1 つ取得します |
compare_snapshots | 設定可能な遅延時間を挟んで 2 つのスナップショットを取得し、比較します |
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 を実行し、重大度の高い順に検出結果を提示します。
取得前後の比較
時間を置いて取得した 2 つのスナップショットを比較し、メモリの増加を検出します。
> /memorylens
> Check if my app has a memory leak — compare before and after processing 1000 requests
Claude は 2 回の取得の間に delaySeconds の値(デフォルトは 10 秒)を指定して compare_snapshots を呼び出し、その後、差分を分析してスナップショット間で増加したオブジェクトを特定します。
ファミリー
MemoryLens MCP は、AI 関連の作業に向けた小規模な .NET プロジェクト群の一部です。
- AI.Sentinel:
IChatClient向けのセキュリティ監視ミドルウェアです。監査証跡を伴うプロンプトインジェクション、幻覚、PII の検出機能を備えています。 - Minos.NET: 型付きのソース生成による意思決定の質問と、確度が調整された回答を提供します。
- Rag.NET: Microsoft.Extensions.AI 上に構築された、モジュール式の検索拡張生成パイプラインです。
- Roslyn CodeLens MCP: MCP を介して AI エージェントにセマンティックな .NET コードインテリジェンスを提供します。
ZeroAlloc を基盤に構築
MemoryLens MCP は、実行時にリフレクションを使用しないソースジェネレーターおよびアナライザーである、以下の ZeroAlloc ライブラリを使用しています。
ライセンス
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。