sharplens-mcp
SharpLensMcp
Сервер протокола контекста модели (MCP), предоставляющий 62 AI-оптимизированных инструмента для семантического анализа кода, навигации, рефакторинга и генерации кода на .NET/C# с использованием Microsoft Roslyn.
Создан для AI-агентов программирования — обеспечивает понимание кода на уровне компилятора, которое ИИ не может получить, просто читая исходные файлы.
Установка
Через NuGet (рекомендуется)
dotnet tool install -g SharpLensMcpЗатем запустите с помощью:
sharplensЧерез npm
npx -y sharplens-mcpСборка из исходного кода
dotnet build -c Release
dotnet publish -c Release -o ./publishНастройка Claude 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 выполнить проверку работоспособности (health check) сервера Roslyn
Зачем использовать это с Claude Code?
Claude Code имеет встроенную поддержку LSP для базовой навигации (переход к определению, поиск ссылок). SharpLensMcp добавляет глубокий семантический анализ:
Возможность | Встроенный LSP | SharpLensMcp |
Переход к определению | ✅ | ✅ |
Поиск ссылок | ✅ | ✅ |
Поиск асинхронных методов без CancellationToken | ❌ | ✅ |
Анализ влияния (что сломается?) | ❌ | ✅ |
Обнаружение мертвого кода | ❌ | ✅ |
Метрики сложности | ❌ | ✅ |
Безопасный рефакторинг с предварительным просмотром | ❌ | ✅ |
Пакетные операции | ❌ | ✅ |
Конфигурация
Переменная окружения | Описание | По умолчанию |
| Путь к файлу | Нет (нужно вызвать |
| Использовать абсолютные пути вместо относительных |
|
| Уровень детализации логов: |
|
| Тайм-аут для длительных операций |
|
| Максимальное количество диагностических сообщений для возврата |
|
| Включить кэширование семантической модели |
|
Если DOTNET_SOLUTION_PATH не задан, вы должны вызвать инструмент load_solution перед использованием других инструментов.
Советы по настройке AI-агента
AI-модели могут иметь обученную предвзятость к использованию своих встроенных инструментов (Grep, Read, LSP) вместо инструментов MCP-сервера, даже если SharpLensMcp предоставляет лучшие возможности.
Чтобы обеспечить оптимальное использование инструментов:
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-оптимизированные описания — четкие шаблоны ИСПОЛЬЗОВАНИЯ/ВЫВОДА/РАБОЧЕГО ПРОЦЕССА
Структурированные ответы — согласованный формат
success/error/dataсsuggestedNextToolsКоординаты с нуля — четкие предупреждения для предотвращения ошибок на единицу
Режим предварительного просмотра — безопасный рефакторинг с предпросмотром перед применением
Пакетные операции — несколько поисковых запросов в одном вызове для уменьшения использования контекста
Категории инструментов
Навигация и обнаружение (17 инструментов)
Инструмент | Описание |
| Семантическая информация в позиции |
| Переход к определению символа |
| Все ссылки в решении |
| Реализации интерфейсов/абстрактных классов |
| Анализ влияния — кто вызывает это? |
| Цепочка наследования |
| Поиск по glob-шаблону ( |
| Поиск с несколькими фильтрами (async, public и т.д.) |
| Все члены по имени типа |
| Несколько типов в одном вызове |
| Подробная сигнатура по имени |
| Поиск всех подклассов |
| Полная цепочка наследования |
| Список атрибутов символа |
| Окружающий символ в позиции |
| Все перегрузки метода |
| Поиск типов/членов по атрибуту |
Анализ (11 инструментов)
Инструмент | Описание |
| Ошибки/предупреждения компилятора |
| Присваивания и использование переменных |
| Ветвление/достижимость |
| Что сломается при изменении? |
| Можно ли присвоить A к B? |
| Что вызывает этот метод? |
| Обнаружение мертвого кода |
| Проверка компиляции без записи |
| Цикломатическая сложность, вложенность, LOC, когнитивная сложность |
| Обнаружение циклических зависимостей проектов и пространств имен |
| Не реализованные члены интерфейса/абстрактного класса |
Рефакторинг (14 инструментов)
Инструмент | Описание |
| Безопасное переименование в решении |
| Добавление/удаление/изменение порядка параметров |
| Извлечение с анализом потока данных |
| Генерация интерфейса из класса |
| Из полей/свойств |
| Сортировка и удаление неиспользуемых |
| Пакетная организация для нескольких файлов |
| Пакетное форматирование файлов в проекте |
| Все рефакторинги Roslyn в позиции |
| Применение любого рефакторинга по названию |
| Генерация заглушек интерфейса |
| Поле в свойство |
| Встраивание временной переменной |
| Извлечение выражения в переменную |
Генерация кода (2 инструмента)
Инструмент | Описание |
| Генерация проверок ArgumentNullException |
| Equals/GetHashCode/операторы |
Составные инструменты (6 инструментов)
Инструмент | Описание |
| Полная информация о типе в одном вызове |
| Сигнатура + вызывающие + исходящие вызовы + расположение |
| Сводка файла с диагностикой |
| Исходный код по имени |
| Несколько исходных кодов методов в одном вызове |
| Как создать тип |
Обнаружение (2 инструмента)
Инструмент | Описание |
| Сканирование регистраций DI-сервисов |
| Обнаружение использования рефлексии/dynamic |
Инфраструктура (10 инструментов)
Инструмент | Описание |
| Статус сервера |
| Загрузка .sln/.slnx для анализа |
| Синхронизация изменений файлов в загруженном решении |
| Структура решения |
| Зависимости проектов |
| Доступные исправления для диагностики |
| Применение конкретного исправления кода |
| Список пакетов NuGet по проектам |
| Список активных генераторов исходного кода |
| Просмотр сгенерированного исходного кода |
Другие MCP-клиенты
Для MCP-клиентов, отличных от Claude Code, добавьте в свою конфигурацию:
{
"mcpServers": {
"sharplens": {
"command": "sharplens",
"args": [],
"env": {
"DOTNET_SOLUTION_PATH": "/path/to/your/Solution.sln (or .slnx)"
}
}
}
}Использование
Загрузите решение: Вызовите
roslyn:load_solutionс путем к файлу.slnили.slnx(или установите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