dotnet-sherlock-mcp
Sherlock MCP for .NET
Sherlock MCP for .NETは、.NETアセンブリに対する詳細なイントロスペクション機能を提供する包括的なModel Context Protocol (MCP) サーバーです。LLM(大規模言語モデル)が.NETコードを正確に分析・理解できるようにし、複雑な開発シナリオにおいて正確でコンテキストを意識した回答を提供します。
このツールは、以下のような目的でLLMの能力を活用したい開発者にとって不可欠です。
詳細なコードベース分析 - 複雑な.NETアーキテクチャと依存関係の理解
正確な型情報 - 型、メンバー、およびそのシグネチャに関する詳細なメタデータの取得
自動ドキュメント化 - XMLドキュメントと属性の抽出と活用
カスタムツール開発 - .NETアセンブリと対話する高度なツールの構築
コード生成 - 既存の型構造に基づいた正確なコードの作成
主な機能
包括的なMCPサーバー: .NETアセンブリ分析のための31以上の専門ツールを提供
高度なアセンブリイントロスペクション: 型、メンバー、メタデータのリフレクションベースの詳細分析
豊富なメンバー分析: メソッド、プロパティ、フィールド、イベント、コンストラクターの詳細な調査
スマートなフィルタリングとページネーション: 名前や属性による高度なフィルタリングと、大規模データセット向けの効率的なページネーション
XMLドキュメント統合: summary、parameters、returns、remarksの自動抽出
パフォーマンス最適化: キャッシュ、ストリーミング、メモリ効率の高い処理
安定したJSON API: バージョン管理と構造化されたエラーコードを備えた一貫性のあるエンベロープ
.NET 9.0ネイティブ: 最新のC#機能を備えた最新の.NETプラットフォーム上で構築
プロジェクト統合: 依存関係解決を含むソリューションおよびプロジェクトファイルの分析
インストール
NuGetからグローバルツールをインストールします(sherlock-mcpがPATHに追加されます):
dotnet tool install -g Sherlock.MCP.Serverあるいは、開発中にサーバーをローカルで実行することも可能です:
dotnet run --project src/server/Sherlock.MCP.Server.csprojMCPクライアントの設定
Sherlockは、stdio経由で通信する標準的なMCPサーバーとして動作します。
Cursor: 設定 → MCP / カスタムツール → ツールの追加 → コマンド:
sherlock-mcpClaude Desktop / その他のMCPクライアント:
sherlock-mcpコマンドを指すサーバーエントリを追加します。JSONエントリの例(正確なファイル場所や形式については、クライアントのドキュメントを参照してください):
{
"servers": {
"sherlock": {
"command": "sherlock-mcp"
}
}
}引数は不要です。サーバーは起動時にすべてのツールを自己登録します。
.NETプロジェクト用の自動設定
.NETコードを扱う際にSherlockを自動的に使用するには、以下の設定を追加してください。
Claude Code (CLAUDE.md)
プロジェクトのCLAUDE.mdファイルに以下を追加します:
## .NET Assembly Analysis
This project uses Sherlock MCP for .NET assembly analysis. When analyzing .NET types, methods, or assemblies:
1. Use sherlock-mcp tools instead of guessing about .NET APIs
2. For type analysis: `GetTypeInfo`, `GetTypeMethods`, `GetTypeProperties`
3. For assembly overview: `AnalyzeAssembly` or `GetTypesFromAssembly`
4. For project structure: `AnalyzeProject`, `AnalyzeSolution`
5. Assembly paths are typically: `./bin/Debug/net9.0/ProjectName.dll`
Always include assembly path, prefer full type names, and use pagination for large results.Cursor (.cursorrules)
プロジェクトの.cursorrulesファイルに以下を追加します:
# .NET Analysis Rules
When working with .NET code, assemblies, or types:
- Use sherlock-mcp tools for accurate type/member information
- Assembly paths: ./bin/Debug/net9.0/*.dll or ./bin/Release/net9.0/*.dll
- For unknown types: GetTypesFromAssembly -> GetTypeInfo -> GetTypeMethods/Properties
- For code analysis: AnalyzeAssembly for overview, GetTypeInfo for details
- Use pagination (maxItems=50) for large results to avoid token limitsグローバル設定
システム全体で使用する場合は、グローバルなClaude Code設定またはCursor設定に追加します:
For .NET development: Use sherlock-mcp tools when analyzing assemblies, types, methods, or project structure. Prefer these over guessing .NET API details.プロンプトのヒント
以下は、チャットに貼り付けてすぐに生産性を高めるためのコンパクトなプロンプトスニペットです。パスはローカルのDLLに合わせて調整してください。
一般的なセットアップ
You have access to an MCP server named "sherlock" that can analyze .NET assemblies. Prefer these tools for .NET questions and include short reasoning for which tool you chose. Ask me for the assembly path if missing.型のメンバーを列挙する
Analyze: /absolute/path/to/MyLib/bin/Debug/net9.0/MyLib.dll
Type: MyNamespace.MyType
List methods, including non-public, filter name contains "Async", include attributes, return JSON.メンバーのXMLドキュメントを取得する
Use GetXmlDocsForMember on /abs/path/MyLib.dll, type MyNamespace.MyType, member TryParse. Summarize the summary + params.型を検索して詳細を確認する
List types from /abs/path/MyLib.dll; then get type info for the first result and list its nested types.ページングとフィルターの調整
Use GetTypeMethods on /abs/path/MyLib.dll, type MyNamespace.MyType, sortBy name, sortOrder asc, skip 0, take 25, hasAttributeContains Obsolete.ツール概要
アセンブリの発見と分析
AnalyzeAssembly: 公開されている型とメタデータを含むアセンブリの完全な概要FindAssemblyByClassName: 特定のクラス名を含むアセンブリを特定FindAssemblyByFileName: 一般的なビルドパス内でファイル名からアセンブリを検索
型のイントロスペクション
GetTypesFromAssembly: メタデータを含むすべての公開型をリストアップ(ページネーション対応)AnalyzeType: すべてのメンバーを含む包括的な型分析GetTypeInfo: 詳細な型メタデータ(アクセシビリティ、ジェネリクス、ネストされた型)GetTypeHierarchy: 継承チェーンとインターフェースの実装GetGenericTypeInfo: ジェネリックパラメーター、引数、および分散情報GetTypeAttributes: 型に宣言されたカスタム属性GetNestedTypes: ネストされた型の宣言
メンバー分析(フィルタリング・ページネーション対応)
GetAllTypeMembers: すべてのカテゴリにわたる全メンバーGetTypeMethods: メソッドシグネチャ、オーバーロード、メタデータGetTypeProperties: getter/setterやインデクサーを含むプロパティの詳細GetTypeFields: 定数やreadonlyフィールドを含むフィールド情報GetTypeEvents: ハンドラー型を含むイベント宣言GetTypeConstructors: コンストラクターのシグネチャとパラメーターAnalyzeMethod: オーバーロードや属性を含む詳細なメソッド分析
逆引き検索
FindImplementationsOf: インターフェースを実装している、または基底クラスから派生している型FindMethodsReturning: 戻り値の型が指定された型と一致するメソッド(オープンジェネリックの一致をサポート)FindReferencesTo: パラメーター、フィールド、プロパティ、イベント、ジェネリック引数にわたる広範な検索
属性とメタデータ
GetMemberAttributes: 特定のメンバーの属性GetParameterAttributes: パラメーターレベルの属性情報
XMLドキュメント
GetXmlDocsForType: 型レベルのXMLドキュメントを抽出GetXmlDocsForMember: メンバー固有のドキュメント(summary/params/returns/remarks)
プロジェクトとソリューションの分析
AnalyzeSolution: .slnファイルを解析し、プロジェクトを列挙AnalyzeProject: プロジェクトのメタデータ、参照、ビルド構成GetProjectOutputPaths: 構成ごとの出力ディレクトリを解決ResolvePackageReferences: NuGetパッケージをキャッシュされたアセンブリにマッピングFindDepsJsonDependencies: ランタイム依存関係のためにdeps.jsonを解析
設定とランタイム
GetRuntimeOptions: 現在のサーバー設定とデフォルト値UpdateRuntimeOptions: ページネーション、キャッシュ、検索動作の変更
高度なフィルタリングとページネーション
すべてのメンバー分析ツールは、包括的なフィルタリングとページネーションをサポートしています:
フィルタリングオプション:
caseSensitive(bool): 型/メンバー名の大文字小文字を区別するマッチングnameContains(string): メンバー名の部分一致によるフィルタリングhasAttributeContains(string): 属性型の部分一致によるフィルタリングincludePublic/includeNonPublic(bool): 可視性によるフィルタリングincludeStatic/includeInstance(bool): メンバータイプによるフィルタリング
ページネーション:
skip/take(int): 標準的なオフセットページネーションmaxItems(int): リクエストごとの最大結果数continuationToken(string): 大規模データセット向けのトークンベースのページネーションsortBy/sortOrder(string): 名前/アクセス権による昇順/降順のソート
型の解決:
完全修飾名 (
Namespace.Type)、単純名 (Type)、ネストされた型 (Outer+Inner) をサポート大文字小文字の区別は
caseSensitiveパラメーターで制御あいまいな型名に対する自動フォールバック解決
レスポンススキーマ
すべてのツールは安定したJSONエンベロープを返します:
{ "kind": "type.list|member.methods|...", "version": "1.0.0", "data": { /* result */ } }エラーは一貫した形式を使用します:
{ "kind": "error", "version": "1.0.0", "code": "AssemblyNotFound|TypeNotFound|InvalidArgument|InternalError", "message": "...", "details": { } }
Common error codes include `AssemblyNotFound`, `TypeNotFound`, `MemberNotFound`, `InvalidArgument`, and `InternalError`.コントリビューション
コントリビューションを歓迎します。このリポジトリには、最新のC#設定(ファイルスコープの名前空間、式形式のメンバー、4スペースのインデント)を含む.editorconfigが含まれています。
コミットメッセージの形式
このプロジェクトは、自動チェンジログ生成のためにConventional Commitsを使用しています。すべてのコミットは以下の形式に従う必要があります:
type(scope): description有効なタイプ:
feat- 新機能fix- バグ修正docs- ドキュメントのみの変更style- コードスタイルの変更(フォーマット、セミコロンなど)refactor- バグ修正でも新機能追加でもないコード変更perf- パフォーマンス向上test- テストの追加または修正build- ビルドシステムや依存関係の変更ci- CI設定の変更chore- ソースやテストファイルを変更しないその他の変更revert- 前のコミットの取り消し
例:
git commit -m "feat(tools): add new assembly analysis tool"
git commit -m "fix: resolve null reference in type loader"
git commit -m "docs(readme): update installation instructions"開発環境のセットアップ
# Restore .NET tools (versionize, husky)
dotnet tool restore
# Install git hooks for commit validation
dotnet husky installガイドライン
変更は小さく、焦点を絞ってください。新しい動作にはユニットテストを追加してください。
ツールを追加する際は、レスポンスエンベロープとエラーコードの規約に従ってください。
PRを開く前に、ローカルで
dotnet buildとdotnet testを実行してください。
リリースの作成
メンテナーは以下を使用してリリースを作成できます:
# Restore tools if not already done
dotnet tool restore
# Preview what will change
dotnet versionize --dry-run
# Create release (bumps version, updates changelog, creates git tag)
dotnet versionize
# Push changes and tag to trigger release workflow
git push --follow-tagsリリースワークフローは自動的に以下を行います:
プロジェクトのビルドとテスト
チェンジログノートを含むGitHubリリースの作成
NuGetパッケージの公開
新しいバージョンで
server.jsonを更新
MCPレジストリ
mcp-name: io.github.jcucci/dotnet-sherlock-mcp
ライセンス
Sherlock MCP for .NETはMIT Licenseの下でライセンスされています。
This server cannot be installed
Maintenance
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/jcucci/dotnet-sherlock-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server