mcpField
C
ContextManager

ContextManager

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

ContextManager について

ContextManagerは、C#ソリューションを扱うAIコーディングエージェント向けのRoslynベースのMCPサーバーです。ファイル構造と依存グラフを調べるツールを提供し、ファイル全体を読まずに関連コードや変更の影響を把握できます。

主な機能

  1. 01C#ファイル構造のJSON抽出
  2. 02.slnから依存グラフを構築
  3. 03名前によるファイル・メソッド検索
  4. 04依存関係と影響経路の確認
  5. 05ファイル変更時のグラフ更新

活用シーン

  1. 01C#ソリューション内の関連コードの特定
  2. 02変更前の型構造の確認
  3. 03コード変更による下流への影響評価

MCP 対応

MCP stdioサーバーとして動作し、接続クライアントにファイル検査とソリューショングラフのツールを提供します。

設定

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

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

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

リポジトリ
パッケージ
nugetContextManager1.3.5

ツール

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

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

詳細

ContextManager のロゴ

ContextManager

Roslyn を活用し、AI コーディングエージェントに構造化された C# のコンテキストを提供します。
読む前に、構造を把握しましょう。

NuGet のバージョン

インストール • ツール • 使い方 • よくある質問 • インストールガイド全文


ContextManager は、エージェントが C# ファイル全体を読まずに済むようにする MCP サーバーです。次の 2 つの機能があります。

  • ファイルを調査します。 .cs ファイルを、型、パブリックメンバー、コンストラクターの依存関係、基底型、インターフェース、イベントを含む JSON コントラクトに変換します。メソッド本体、プライベートメンバー、XML ドキュメントは除外されます。各メソッドには行範囲が付いているため、エージェントは必要なメソッド本体だけを読めます。
  • ソリューションをマッピングします。 .sln のナレッジグラフを構築し、ファイルを開く前に、どのファイルが重要か、変更のリスクがどの程度かをエージェントが把握できるようにします。

インストール

.NET 10 SDK 以降が必要です。

macOS / Linux:

curl -fsSL https://raw.githubusercontent.com/nushey/ContextManager/main/scripts/install.sh | bash

Windows(PowerShell):

irm https://raw.githubusercontent.com/nushey/ContextManager/main/scripts/install.ps1 | iex

インストーラーは ContextManager .NET グローバルツールをインストールまたは更新し、context-manager setup を実行します。このウィザードでは、選択した MCP クライアント(Claude Code、Claude Desktop、Codex、Antigravity、Kilo Code、Cursor、Devin、Opencode)にサーバーを追加します。

手動でインストールする場合:

dotnet tool install -g ContextManager
claude mcp add --scope user context-manager -- context-manager   # Claude Code

その他のクライアント、フラグ、設定ファイルのパス、トラブルシューティングについては、INSTALL.md を参照してください。

.NET Framework 4.8 のソリューションでの project_scan は Windows でのみ動作し、 .NET デスクトップビルドツールのワークロードを含む Visual Studio Build Tools が必要です。それ以外の機能はすべて、どのプラットフォームでも動作します。

ツール

ツール返される内容
inspect_file1 つの .cs ファイルの構造的なコントラクト。
inspect_context最大 15 個の .cs ファイルと、それらの間の参照をまとめたビュー。unresolved には、対象に含まれていないユーザー定義型が一覧表示されます。
project_scanソリューションのグラフを構築または更新し、そのカバレッジを報告します。
graph_search名前の候補に一致するファイルとメソッドを、名前空間とメソッドノード ID とともにファイルごとにまとめて表示します。
graph_get_dependenciesノードの隣接ノードを、宣言元の型ごとに集約し、種類ごとのエッジ数とともに表示します。
graph_impact_analysisノードに直接または間接的に依存するすべての型を、それぞれのファイルとともに表示します。
graph_path_find2 つのノード間の最短依存パス。

グラフツールには .sln のパスを指定します。グラフは自動的に最新の状態に保たれ、回答する前に、前回のスキャン以降に変更された部分だけを再抽出します。グラフは .sln の隣にある .context-manager/<solution name>.graph.json に保存されるため、そのソリューションを使うすべてのセッションで共有されます。

使い方

ファイルから始める

ユーザーがファイルに言及したら、まずそのファイルから始めます。

  1. inspect_file(path):型を読み取り、ノード ID を Namespace.TypeName として構築します。
  2. graph_get_dependencies(solutionPath, nodeId):読む価値のある隣接ノードを見つけます。
  3. それらの隣接ノードのみを inspect_file で調べます。
  4. 変更を加える前に graph_impact_analysis(solutionPath, nodeId) で影響範囲を確認します。

影響リストが短ければ、変更の影響は限定的です。長い場合、その型の公開コントラクトは重要な役割を担っているため、維持する必要があります。含まれるすべてのファイルをエージェントが読む必要があるという意味ではありません。

ノード ID には Roslyn の完全修飾形式を使用します。例:MyApp.Orders.OrderService、MyApp.Orders.OrderService.GetOrderAsync(System.Guid)。グラフツールが返す ID はそのまま渡してください。

// graph_impact_analysis("/abs/path/MyApp.sln", "MyApp.Orders.IOrderRepository")
{
  "affectedIds": ["MyApp.Orders.OrderService", "MyApp.Api.OrdersController"],
  "affectedFiles": {
    "MyApp.Orders.OrderService": "/abs/path/Orders/OrderService.cs",
    "MyApp.Api.OrdersController": "/abs/path/Api/OrdersController.cs"
  }
}
名前でコードを探す

何のことかおおよそ分かっているものの、どのファイルにあるか分からず、ノード ID もない場合は、候補となる名前を複数指定して graph_search を呼び出します。

{"solutionPath":"/abs/path/MyApp.sln","queries":["Login","Authentication","SignIn"]}

検索対象。 用語がファイル名(.cs を除く)またはメソッド名(シグネチャを除く)のどこかに含まれている場合、一致します。照合は序数ベースで、大文字と小文字は区別されません。いずれか 1 つの用語が一致すれば十分です。グラフ内にあるすべてのメソッド(プライベートなものも含む)を検索し、コンストラクターは型名で検索します。ディレクトリパス、パラメーター型、メソッド本体、名前空間は検索しません。

有効な用語。 用語の前後の空白は取り除かれ、3 文字以上である必要があります。空のリスト、または短すぎる用語が 1 つだけ指定された場合、グラフの同期前にクエリ全体が拒否され、コード invalid_query と次のメッセージが返されます。 Provide at least one query term; each term must be at least 3 characters long after trimming whitespace.

順序と上限。 完全一致が先に表示され、その後に部分一致が続きます。各グループ内では、グラフに現れる順序が維持されます。複数の用語に一致しても、名前の順位は上がりません。検索結果は最大 50 件です。上限はファイル数ではなく一致数に適用されます。各一致ファイルは 1 件、各一致メソッド ID も 1 件として数えられ、複数の用語に一致しても同じです。ページネーションはありません。truncated が true の場合、少なくとも 1 件の一致が省略されています。検索範囲を絞るには、より具体的な名前を使用してください。

{"results":[{"file":"/abs/path/Auth/Session.cs","namespaces":["MyApp.Auth"],"fileMatched":false,"methods":[{"name":"Login","nodeId":"MyApp.Auth.Session.Login()"}]}],"truncated":false}

レスポンス。 レスポンスは、ファイルごとにグループ化された 1 行のコンパクトな JSON です。各ファイルエントリーには file、namespaces、fileMatched、methods が含まれ、空の配列は [] のままです。namespaces には、そのファイル内のすべての名前空間が含まれます。ファイル自体の名前が上限内に残った一致の 1 つである場合、fileMatched は true です。ファイル名も一致していたものの上限外となり、メソッドだけが上限内に残った場合にも、そのファイルが表示されることがあります。一致がない場合、レスポンスは {"results":[],"truncated":false} です。

ここから、返された file に対して inspect_file を呼び出すか、メソッドの nodeId を変更せずに他のグラフツールに渡します。古いバージョンで保存されたグラフは、名前と名前空間を追加するために 1 回再抽出されます。その後、変更がない限り、以降のクエリでは更新済みのグラフが再利用されます。

エージェントにこれらのワークフローを実行させるには、docs/AGENTS-template.md をプロジェクトの AGENTS.md にコピーしてください。

よくある質問

バックグラウンドサービスですか? いいえ。MCP stdio サーバーです。セッションの開始時にクライアントが起動し、セッションの終了時に停止します。

どのような状態を保持しますか? 各 .sln の隣に書き込まれるグラフファイルのみです。検査ツールは渡されたファイルを読み取るだけで、何も保持しません。

ソリューション全体を読み取りますか? 読み取るのはグラフツールのみです。inspect_file と inspect_context は、指定されたファイルだけを読み取ります。

ビルドとテスト

dotnet build
dotnet test

ライセンス

MIT © nushey

コメント

MCP は初めてですか?

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

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