mcpField
A
ASP.NET Core Debugger — MCP Server for AI Agents

ASP.NET Core Debugger — MCP Server for AI Agents

ローカル
github.com開発ツール156 週間前に更新

ASP.NET Core Debugger — MCP Server for AI Agents について

AI エージェント向けに、netcoredbg と DAP を介して .NET/ASP.NET Core アプリをデバッグする MCP サーバーです。基本的なデバッグ操作に加え、例外分析、ハング診断、リクエスト追跡のツールを備えています。

主な機能

  1. 01デバッグセッションの起動・接続
  2. 02各種ブレークポイントの設定
  3. 03スレッド、スタック、変数の確認
  4. 04式の評価と状態の変更
  5. 05例外とスレッドハングの分析
  6. 06リクエスト呼び出し経路の追跡

活用シーン

  1. 01API応答異常時の実行時値の確認
  2. 02例外やデッドロックの調査
  3. 03コードを編集せず状態変更を検証
  4. 04リクエスト内の遅い処理の特定

MCP 対応

stdioとJSON-RPCでMCPクライアントに接続し、.NETデバッグ用ツールを公開します。Debug Adapter Protocolを介してnetcoredbgを利用します。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

インストール方法は未掲載です

このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。

リポジトリ
パッケージ
nugetAspNetCoreDebuggerMcp1.4.0

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

ASP.NET Core デバッグ MCP サーバー

MCP Toplist

クロスプラットフォーム対応の .NET デバッグ MCP — Linux、macOS、Windows で動作します。

CI NuGet .NET MCP Platforms License: MIT Glama Quality

MIT ライセンスの MCP サーバーです。AI エージェント(Claude など)が .NET / ASP.NET Core アプリをデバッグできます。netcoredbg はすべてのプラットフォーム向けに同梱されているため、追加のインストールは不要です。

*「バグは 42 行目あたりだと思います。これを試してください」*と提案する代わりに、エージェントはコードを実行して一時停止し、実際のランタイム値を読み取り、修正を試すために状態を変更して、実際に確認した内容に基づいて回答します。

目次

動作を見る

EF Core のクエリが空の結果を返すのはなぜ?

あなた

GET /users/active は [] を返しますが、DB にアクティブなユーザーがいることはわかっています。実際にはどのようなクエリが実行されていますか?

Claude

UserRepository.GetActiveAsync 内で一時停止して、EF Core が実際に送信した内容を読み取ります。

SELECT u.*
FROM Users AS u
WHERE u.IsActive = 1 AND u.TenantId = @__tenantId_0

@__tenantId_0 = 0

SQL は正しいですが、パラメーターが間違っています。テナント ID は 1 から始まるのに、TenantId = 0 になっています。リポジトリのコンストラクターで ICurrentUser.TenantId を読み取っていますが、リクエストスコープが解決される前です。修正方法:コンストラクターで取得するのではなく、クエリ内でテナントを読み取るか、IHttpContextAccessor を使って HasQueryFilter で適用します。

JWT 認証が 401 を返すのはなぜ?

あなた

Anna の /admin/users が 401 になりますが、トークンは有効に見えます。認証ハンドラーは実際に何を確認していますか?

Claude

Anna のリクエストを受け取った後、JwtBearerHandler.HandleAuthenticateAsync 内でブレークします。

Token signature: ✓ valid
Claims built:
  name : anna
  role : User
  iss  : https://auth.staging.example
  aud  : app-api
  exp  : 2026-05-26T14:12:00Z      (not expired)

トークンの検証自体は問題ありません。しかし、クレームは role=User です。エンドポイントには [Authorize(Roles="Admin")] が指定されています。そのため、401 は正しい動作です。Anna はまだ上流で管理者になっていません。IdP のレコードを更新するか、このポリシーを見直す必要があります。

再起動せずに修正をテストする

あなた

discount の上限を 100 にすればバグが直ると思います。私がコードに触れずに、その仮説をテストしてください。

Claude

次のチェックアウトで ApplyDiscount の中に一時停止し、discount をその場で変更します。

PricingService.cs:47 で一時停止
  discount = 250        ← バグ:2つのプロモーションが重複適用

discount = 100 に設定し、再開しました。

結果:
  subtotal = $400
  final    = $300
  refund-service complaints: 0

上限を 100 にすると、後続の処理が正常に進みます。仮説は確認できました。次は実際に変更を加え、上限をどこに設けるか(ApplyDiscount 自体か、上流の PromoEngine か)を決めましょう。

アプリがハングしています — 実際に何がブロックしているのでしょうか?

あなた

ステージング環境で /reports がいつまでも応答しません。アタッチして原因を教えてください。

Claude

アタッチして、hang_analyze を実行しました。

Thread 12 (HTTP request)
  → blockedOnTask    at ReportService.cs:38   T#14 の Task.Wait() で待機中

Thread 14 (worker)
  → blockedOnMonitor at SqlConnectionPool.cs:91
                      SqlConnection を待機中
                      (プールの最大数=5、使用中=5)

よくある同期処理と非同期処理の混在によるデッドロックです。Thread 12 は、別の SqlConnection を開く必要があるタスクに対して .Wait() を呼び出していますが、プールはすべて使用中です。保持している接続はタスクが完了するまで解放できず、タスクは接続が空くまで先に進めません。対処法は、ReportService の最後まで await を使うか、await 呼び出しの間に接続を保持しないことです。

遅いリクエストの時間は、実際にはどこで費やされているのでしょうか?

あなた

GET /order/42 に 800ms かかっています。あちこちにブレークポイントを設定したくありません。どこで時間がかかっているのかだけ見せてください。

Claude

注文処理パイプラインを自動計測して、リクエストを実行します。各処理の開始時にタイムスタンプと引数を記録してから再開するため、コードは通常に近い速度で動作します。

[+   4ms] → OrderController.GetOrder()       id=42
[+   6ms] --→ OrderService.LookupOrder()     id=42
[+   9ms] ----→ OrderRepository.FetchById()  id=42
[+  14ms] ------→ SqlClient.ExecuteQuery()   sql="SELECT * FROM orders WHERE id=42"
[+ 287ms] ----→ EnrichmentService.Enrich()   raw="rows(...)"
[+ 781ms] ------→ HttpClient.PostAsync()     url="https://crm.internal/enrich"

時間がかかっているのは CRM のデータ補完 HTTP 呼び出しで、HttpClient.PostAsync 内に 500ms かかっています。DB 自体は 5ms でした。EnrichmentService.Enrich の結果をキャッシュするか、リクエスト処理の外に移すとよいでしょう。

その他の例 →

仕組み

Claude (MCP client)
   │  MCP  (stdio / JSON-RPC)
   ▼
aspnetcore-debugger-mcp        ← this server
   │  DAP  (Debug Adapter Protocol)
   ▼
netcoredbg                     ← Samsung's MIT-licensed .NET debugger, child process
   │  ICorDebug
   ▼
target .NET process

エージェントに使いやすい複合ツール(exception_autopsy、stack_explore、hang_analyze、トレースツール)を備えたプロトコルブリッジです。複数の DAP リクエストを 1 回のツール呼び出しにまとめます。

3 ステップで使う

  1. ツールをインストールする — .NET 10 SDK が必要です。
    dotnet tool install -g AspNetCoreDebuggerMcp --prerelease
    
    パッケージには linux-x64、linux-arm64、win-x64、osx-x64、osx-arm64 用のビルド済み netcoredbg が含まれているため、別途インストールする必要はありません。
  2. Claude に登録する — 手早く済ませるには、次の CLI コマンドを実行します。
    claude mcp add aspnetcore-debugger -- aspnetcore-debugger-mcp
    
    …または .mcp.json(プロジェクト単位)/~/.claude.json(グローバル)/claude_desktop_config.json(Claude Desktop)を直接編集します。
    {
      "mcpServers": {
        "aspnetcore-debugger": {
          "command": "aspnetcore-debugger-mcp"
        }
      }
    }
    
  3. Claude に話しかけるだけです。 /mcp で接続を確認できます。あとは、「このエンドポイントが null を返すのはなぜですか」 のように説明すれば、エージェントが適切なツールを選びます。

インストールとトラブルシューティングの詳細 →

プラットフォーム

ビルド済みの netcoredbg バイナリが実行時に選択されるため、プラットフォームごとにインストールする必要はありません。

OSアーキテクチャ状態
Linuxx64、arm64✅ 対応(Samsung のビルド済みバイナリ)
macOSIntel(x64)、Apple Silicon(arm64)✅ 対応(Samsung が提供していないため、arm64 は当プロジェクトでビルド)
Windowsx64✅ 対応(Samsung のビルド済みバイナリ)

ホストには .NET 10 SDK が必要です。MCP サーバー自体はクロスプラットフォーム対応の .NET グローバルツールで、どの環境でも同じインストールコマンドを使えます。

ツール(27)

カテゴリツール用途
セッションdebug_launch, debug_attach, debug_disconnect, debug_stateデバッグセッションを開始、アタッチ、または停止します
実行debug_continue, debug_pause, debug_step, breakpoint_waitデバッグ対象を実行し、停止するまで待機します
ブレークポイントbreakpoint_set, breakpoint_set_function, breakpoint_set_exception, breakpoint_set_data, breakpoint_remove, breakpoint_list行、関数、例外、データのブレークポイントを設定します
検査threads_list, stacktrace_get, variables_get, variables_set, evaluate, stack_exploreプログラムの状態を調べ、変更します
例外の詳細分析exception_autopsy1 回の呼び出しで、例外チェーン+上位フレーム+ローカル変数+ソースコードの抜粋を取得します
ハング/デッドロックhang_analyze自動的に一時停止し、各スレッドのブロックパターン(Monitor/Task/Semaphore/async/…)を分類します
リクエストトレースtrace_start, trace_get, trace_stopサーバー側のリクエストトレース — 呼び出しチェーンを自動計測し、各エントリで引数を取得します
プロセス I/Oprocess_read_outputデバッグ対象の stdout/stderr を読み取ります
ヘルスチェックdebugger_healthnetcoredbg が読み込まれ、同梱バイナリにアクセスできることをすばやく確認します

全ツールのパラメーターを含むリファレンス →

比較

プロジェクトライセンスプラットフォームアプローチ.NET
aspnetcore-debugger-mcp (これ)MITLinux + macOS + WindowsDAP 経由の netcoredbg、ASP.NET 向けの複合機能(リクエストトレース、ハング分析)ネイティブ、.NET 10
debug-mcpAGPL-3.0Linux のみ(Win/macOS は予定)ICorDebug への直接アクセス、Roslyn によるコードナビゲーションネイティブ、.NET 10
mcp-debugger—クロスプラットフォームDAP外部デバッガー経由
dap-mcp—クロスプラットフォームDAP外部デバッガー経由
LLDB MCPNCSAクロスプラットフォームネイティブ LLDBなし

それぞれに得意分野があります。このプロジェクトは、DAP の上に ASP.NET 向けの複合機能を備えた、MIT ライセンスのクロスプラットフォームな選択肢です。debug-mcp は ICorDebug を通じてランタイム内部をより深く扱えますが、現時点では Linux のみで、ライセンスは AGPL です。

ドキュメント

ライセンス

MIT — LICENSE を参照してください。netcoredbg(MIT)および ModelContextProtocol SDK(MIT)を基盤としています。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。