sharplens-mcp
SharpLensMcp
Microsoft Roslynを使用した.NET/C#のセマンティックコード解析、ナビゲーション、リファクタリング、コード生成のための62個のAI最適化ツールを提供するModel Context Protocol (MCP) サーバーです。
AIコーディングエージェント向けに構築されており、AIがソースファイルを読み取るだけでは推論できない、コンパイラ精度のコード理解を提供します。
インストール
NuGet経由 (推奨)
dotnet tool install -g SharpLensMcp次に以下を実行します:
sharplensnpm経由
npx -y sharplens-mcpソースからビルド
dotnet build -c Release
dotnet publish -c Release -o ./publishClaude Codeの設定
ツールをインストールします (いずれかを選択):
dotnet tool install -g SharpLensMcp
# or
npx -y sharplens-mcpプロジェクトのルートに
.mcp.jsonを作成します:
{
"mcpServers": {
"sharplens": {
"type": "stdio",
"command": "npx",
"args": ["-y", "sharplens-mcp"],
"env": {
"DOTNET_SOLUTION_PATH": "/path/to/your/Solution.sln (or .slnx)"
}
}
}
}Claude Codeを再起動してMCPサーバーを読み込みます
ClaudeにRoslynサーバーのヘルスチェックを実行するよう依頼して確認します
なぜClaude Codeでこれを使用するのか?
Claude Codeは、基本的なナビゲーション(定義への移動、参照の検索)に対してネイティブのLSPサポートを備えています。SharpLensMcpは、深いセマンティック解析を追加します:
機能 | ネイティブLSP | SharpLensMcp |
定義への移動 | ✅ | ✅ |
参照の検索 | ✅ | ✅ |
CancellationTokenが欠落している非同期メソッドの検索 | ❌ | ✅ |
影響分析 (何が壊れるか?) | ❌ | ✅ |
デッドコード検出 | ❌ | ✅ |
複雑性メトリクス | ❌ | ✅ |
プレビュー付きの安全なリファクタリング | ❌ | ✅ |
バッチ操作 | ❌ | ✅ |
設定
環境変数 | 説明 | デフォルト |
| 起動時に自動読み込みする | なし ( |
| 相対パスの代わりに絶対パスを使用 |
|
| ログの詳細度: |
|
| 長時間実行される操作のタイムアウト |
|
| 返される診断の最大数 |
|
| セマンティックモデルのキャッシュを有効化 |
|
DOTNET_SOLUTION_PATH が設定されていない場合は、他のツールを使用する前に load_solution ツールを呼び出す必要があります。
AIエージェント設定のヒント
AIモデルは、SharpLensMcpの方が優れた機能を提供している場合でも、ネイティブツール(Grep、Read、LSP)を使用するように学習上のバイアスがかかっている可能性があります。
最適なツール使用を確実にするために:
Claude Code: プロジェクトの
CLAUDE.mdに以下を追加します:For C# code analysis, prefer SharpLensMcp tools over native tools: - Use `roslyn:search_symbols` instead of Grep for finding symbols - Use `roslyn:get_method_source` instead of Read for viewing methods - Use `roslyn:find_references` for semantic (not text) referencesその他のMCPクライアント: エージェントのシステムプロンプトでツールの優先順位を設定します
Roslynによるセマンティック解析は、特にオーバーロードされたメソッド、部分クラス、継承階層において、テキストベースの検索よりも正確です。
エージェントの責任:ドキュメントの同期
重要: SharpLensMcpは、高速なクエリのためにソリューションのメモリ内表現を保持します。ファイルが外部から(Edit/Writeツール経由で)変更された場合、変更を同期するのはエージェントの責任です。
sync_documents を呼び出すタイミング:
アクション | sync_documentsを呼び出すか? |
Editツールを使用して.csファイルを変更した | ✅ はい |
Writeツールを使用して新しい.csファイルを作成した | ✅ はい |
.csファイルを削除した | ✅ はい |
SharpLensMcpのリファクタリングツール(名前変更、抽出など)を使用した | ❌ いいえ (自動更新されます) |
.csprojファイルを変更した | ❌ いいえ ( |
使用方法:
# After editing specific files
sync_documents(filePaths: ["src/MyClass.cs", "src/MyService.cs"])
# After bulk changes - sync all documents
sync_documents()なぜこの設計なのか?
これはLSP(Language Server Protocol)の仕組みを反映しています。クライアント(エディタ)がサーバーに変更を通知します。このアプローチは:
競合状態を排除します(エージェントがタイミングを制御)
ファイル監視の複雑さやプラットフォームの癖を回避します
ソリューション全体の再読み込みよりも高速です
エージェントにワークスペース状態の明示的な制御を与えます
同期しない場合: クエリが古いデータ(古いメソッドシグネチャ、新しいファイルの欠落など)を返す可能性があります。
機能
62個のセマンティック解析ツール - ナビゲーション、リファクタリング、コード生成、診断、発見
AI最適化された説明 - 明確なUSAGE/OUTPUT/WORKFLOWパターン
構造化されたレスポンス -
suggestedNextToolsを含む一貫したsuccess/error/data形式ゼロベースの座標 - 1ズレエラーを防ぐための明確な警告
プレビューモード - 適用前にプレビューで安全にリファクタリング
バッチ操作 - コンテキスト使用量を削減するための1回の呼び出しでの複数ルックアップ
ツールカテゴリ
ナビゲーションと発見 (17ツール)
ツール | 説明 |
| 位置におけるセマンティック情報 |
| シンボル定義へジャンプ |
| ソリューション全体のすべての参照 |
| インターフェース/抽象実装 |
| 影響分析 - これを呼び出すのは誰か? |
| 継承チェーン |
| グロブパターン検索 ( |
| マルチフィルター検索 (async, publicなど) |
| 型名によるすべてのメンバー |
| 1回の呼び出しで複数の型 |
| 名前による詳細なシグネチャ |
| すべてのサブクラスを検索 |
| 完全な継承チェーン |
| シンボルの属性をリスト化 |
| 位置における包含シンボル |
| メソッドのすべてのオーバーロード |
| 属性による型/メンバーの検索 |
解析 (11ツール)
ツール | 説明 |
| コンパイラエラー/警告 |
| 変数の割り当てと使用状況 |
| 分岐/到達可能性 |
| 変更すると何が壊れるか? |
| AはBに割り当て可能か? |
| このメソッドは何を呼び出すか? |
| デッドコード検出 |
| 書き込みなしのコンパイルチェック |
| 循環的、ネスト、LOC、認知的 |
| プロジェクトと名前空間の循環検出 |
| 未実装のインターフェース/抽象メンバー |
リファクタリング (14ツール)
ツール | 説明 |
| ソリューション全体の安全な名前変更 |
| パラメータの追加/削除/並べ替え |
| データフロー解析による抽出 |
| クラスからインターフェースを生成 |
| フィールド/プロパティから |
| 未使用の並べ替えと削除 |
| 複数ファイルのバッチ整理 |
| プロジェクト内のファイルバッチフォーマット |
| 位置におけるすべてのRoslynリファクタリング |
| タイトルによるリファクタリングの適用 |
| インターフェーススタブの生成 |
| フィールドからプロパティへ |
| 一時変数のインライン化 |
| 式を変数に抽出 |
コード生成 (2ツール)
ツール | 説明 |
| ArgumentNullExceptionガードを生成 |
| Equals/GetHashCode/演算子 |
複合ツール (6ツール)
ツール | 説明 |
| 1回の呼び出しで完全な型情報 |
| シグネチャ + 呼び出し元 + 呼び出し先 + 場所 |
| 診断付きのファイル概要 |
| 名前によるソースコード |
| 1回の呼び出しで複数のメソッドソース |
| 型の作成方法 |
発見 (2ツール)
ツール | 説明 |
| DIサービス登録をスキャン |
| リフレクション/動的使用を検出 |
インフラストラクチャ (10ツール)
ツール | 説明 |
| サーバーの状態 |
| 解析用に.sln/.slnxを読み込み |
| 読み込まれたソリューションにファイル変更を同期 |
| ソリューション構造 |
| プロジェクトの依存関係 |
| 診断に対して利用可能な修正 |
| 特定のコード修正を適用 |
| プロジェクトごとのNuGetパッケージリスト |
| アクティブなソースジェネレーターをリスト化 |
| 生成されたソースコードを表示 |
その他のMCPクライアント
Claude Code以外のMCPクライアントについては、設定に以下を追加してください:
{
"mcpServers": {
"sharplens": {
"command": "sharplens",
"args": [],
"env": {
"DOTNET_SOLUTION_PATH": "/path/to/your/Solution.sln (or .slnx)"
}
}
}
}使用方法
ソリューションを読み込む:
.slnまたは.slnxファイルへのパスを指定してroslyn:load_solutionを呼び出します(またはDOTNET_SOLUTION_PATHを設定します)コードを解析する: ナビゲーション、解析、リファクタリングのための57個のツールのいずれかを使用します
安全にリファクタリングする:
preview: trueを指定して、適用前に変更をプレビューします
アーキテクチャ
MCP Client (AI Agent)
| stdin/stdout (JSON-RPC 2.0)
v
SharpLensMcp
- Protocol handling
- 57 AI-optimized tools
|
v
Microsoft.CodeAnalysis (Roslyn)
- MSBuildWorkspace
- SemanticModel
- SymbolFinder要件
.NET 8.0 SDK以降 — .NET 8、9、10、および将来のバージョンで動作します。あらゆる.NET 8+プロジェクト/ソリューションを解析します。
MCP互換のAIエージェント
開発
新しいツールの追加
src/RoslynService.csにメソッドを追加します:
public async Task<object> YourToolAsync(string param1, int? param2 = null)
{
EnsureSolutionLoaded();
// Your logic...
return CreateSuccessResponse(
data: new { /* results */ },
suggestedNextTools: new[] { "next_tool_hint" }
);
}src/McpServer.csのHandleListToolsAsyncにツール定義を追加しますsrc/McpServer.csのHandleToolCallAsyncswitch文にルーティングを追加しますビルドと公開:
dotnet build -c Release
dotnet publish -c Release -o ./publish主要ファイル
ファイル | 目的 |
| ツール実装 (57メソッド) |
| MCPプロトコル、ツール定義、ルーティング |
ライセンス
MIT - 詳細については LICENSE を参照してください。
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/pzalutski-pixel/sharplens-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server