Skip to main content
Glama
jcucci

dotnet-sherlock-mcp

Sherlock MCP для .NET

Sherlock MCP для .NET — это комплексный сервер протокола контекста модели (MCP), который предоставляет возможности глубокой интроспекции сборок .NET. Он позволяет языковым моделям (LLM) анализировать и понимать ваш код .NET с высокой точностью, предоставляя точные и контекстно-зависимые ответы для сложных сценариев разработки.

Этот инструмент необходим разработчикам, которые хотят использовать возможности LLM для:

  • Глубокого анализа кодовой базы — понимания сложных архитектур и зависимостей .NET

  • Точной информации о типах — получения подробных метаданных о типах, членах и их сигнатурах

  • Автоматизированной документации — извлечения и использования XML-документации и атрибутов

  • Пользовательских инструментов — создания сложных инструментов, взаимодействующих со сборками .NET

  • Генерации кода — создания точного кода на основе существующих структур типов

Основные возможности

  • Комплексный MCP-сервер: предоставляет 31+ специализированный инструмент для анализа сборок .NET

  • Расширенная интроспекция сборок: глубокий анализ типов, членов и метаданных на основе рефлексии

  • Богатый анализ членов: детальная проверка методов, свойств, полей, событий и конструкторов

  • Умная фильтрация и пагинация: расширенная фильтрация по имени/атрибутам с эффективной пагинацией для больших наборов данных

  • Интеграция XML-документации: автоматическое извлечение сводок, параметров, возвращаемых значений и примечаний

  • Оптимизация производительности: кэширование, потоковая передача и эффективная обработка памяти

  • Стабильный JSON API: согласованные конверты с версионированием и структурированными кодами ошибок

  • Нативный .NET 9.0: построен на новейшей платформе .NET с современными функциями C#

  • Интеграция с проектами: анализ решений и файлов проектов с разрешением зависимостей

Установка

Установите глобальный инструмент из NuGet (добавляет sherlock-mcp в ваш PATH):

dotnet tool install -g Sherlock.MCP.Server

Альтернативно, во время разработки вы можете запустить сервер локально:

dotnet run --project src/server/Sherlock.MCP.Server.csproj

Настройка вашего MCP-клиента

Sherlock работает как стандартный MCP-сервер, который обменивается данными через stdio.

  • Cursor: Настройки → MCP / Пользовательские инструменты → Добавить инструмент → Команда: sherlock-mcp

  • Claude Desktop / другие MCP-клиенты: Добавьте запись сервера, указывающую на команду sherlock-mcp. Пример записи JSON (обратитесь к документации вашего клиента для точного расположения файла/формата):

{
  "servers": {
    "sherlock": {
      "command": "sherlock-mcp"
    }
  }
}

Аргументы не требуются. Сервер автоматически регистрирует все инструменты при запуске.

Автоматическая настройка для проектов .NET

Чтобы автоматически использовать Sherlock при работе с кодом .NET, добавьте следующие конфигурации:

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: детали свойств, включая геттеры/сеттеры и индексаторы

  • GetTypeFields: информация о полях, включая константы и поля только для чтения

  • GetTypeEvents: объявления событий с типами обработчиков

  • GetTypeConstructors: сигнатуры конструкторов и параметры

  • AnalyzeMethod: глубокий анализ метода с перегрузками и атрибутами

Обратный поиск

  • FindImplementationsOf: типы, реализующие интерфейс или наследующие от базового класса

  • FindMethodsReturning: методы, чей возвращаемый тип соответствует заданному типу (поддерживается сопоставление открытых дженериков)

  • FindReferencesTo: более широкий охват параметров, полей, свойств, событий и аргументов дженериков

Атрибуты и метаданные

  • GetMemberAttributes: атрибуты для конкретных членов

  • GetParameterAttributes: информация об атрибутах на уровне параметров

XML-документация

  • GetXmlDocsForType: извлечение XML-документации на уровне типа

  • GetXmlDocsForMember: документация конкретного члена (сводка/параметры/возвращаемые значения/примечания)

Анализ проектов и решений

  • 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`.

Вклад в проект

Вклад приветствуется. Этот репозиторий включает .editorconfig с современными предпочтениями C# (пространства имен в файле, члены с выражением, отступ в 4 пробела).

Формат сообщения коммита

Этот проект использует 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

Руководство

  • Сохраняйте изменения небольшими и сфокусированными; добавляйте модульные тесты для нового поведения.

  • Соблюдайте соглашения о конверте ответа и кодах ошибок при добавлении инструментов.

  • Запустите dotnet build и dotnet test локально перед открытием PR.

Создание релиза

Сопровождающие могут создавать релизы, используя:

# 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

Рабочий процесс релиза автоматически:

  1. Соберет и протестирует проект

  2. Создаст GitHub Release с примечаниями к списку изменений

  3. Опубликует пакет NuGet

  4. Обновит server.json новой версией

Реестр MCP

mcp-name: io.github.jcucci/dotnet-sherlock-mcp

Лицензия

Sherlock MCP для .NET лицензирован под лицензией MIT.

A
license - permissive license
-
quality - not tested
C
maintenance

Maintenance

Maintainers
7dResponse time
8wRelease cycle
3Releases (12mo)
Issues opened vs closed

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