Skip to main content
Glama

SharpLensMcp

NuGet npm License: MIT

Сервер протокола контекста модели (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

  1. Установите инструмент (выберите один вариант):

dotnet tool install -g SharpLensMcp
# or
npx -y sharplens-mcp
  1. Создайте .mcp.json в корне вашего проекта:

{
  "mcpServers": {
    "sharplens": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "sharplens-mcp"],
      "env": {
        "DOTNET_SOLUTION_PATH": "/path/to/your/Solution.sln (or .slnx)"
      }
    }
  }
}
  1. Перезапустите Claude Code, чтобы загрузить MCP-сервер

  2. Проверьте работу, попросив Claude выполнить проверку работоспособности (health check) сервера Roslyn

Зачем использовать это с Claude Code?

Claude Code имеет встроенную поддержку LSP для базовой навигации (переход к определению, поиск ссылок). SharpLensMcp добавляет глубокий семантический анализ:

Возможность

Встроенный LSP

SharpLensMcp

Переход к определению

Поиск ссылок

Поиск асинхронных методов без CancellationToken

Анализ влияния (что сломается?)

Обнаружение мертвого кода

Метрики сложности

Безопасный рефакторинг с предварительным просмотром

Пакетные операции

Конфигурация

Переменная окружения

Описание

По умолчанию

DOTNET_SOLUTION_PATH

Путь к файлу .sln или .slnx для автозагрузки при запуске

Нет (нужно вызвать load_solution)

SHARPLENS_ABSOLUTE_PATHS

Использовать абсолютные пути вместо относительных

false (относительные пути экономят токены)

ROSLYN_LOG_LEVEL

Уровень детализации логов: Trace, Debug, Information, Warning, Error

Information

ROSLYN_TIMEOUT_SECONDS

Тайм-аут для длительных операций

30

ROSLYN_MAX_DIAGNOSTICS

Максимальное количество диагностических сообщений для возврата

100

ROSLYN_ENABLE_SEMANTIC_CACHE

Включить кэширование семантической модели

true (установите false для отключения)

Если DOTNET_SOLUTION_PATH не задан, вы должны вызвать инструмент load_solution перед использованием других инструментов.

Советы по настройке AI-агента

AI-модели могут иметь обученную предвзятость к использованию своих встроенных инструментов (Grep, Read, LSP) вместо инструментов MCP-сервера, даже если SharpLensMcp предоставляет лучшие возможности.

Чтобы обеспечить оптимальное использование инструментов:

  1. 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
  2. Другие MCP-клиенты: Настройте приоритет инструментов в системном промпте вашего агента

Семантический анализ от Roslyn более точен, чем текстовый поиск, особенно для перегруженных методов, частичных классов и иерархий наследования.

Ответственность агента: Синхронизация документов

Важно: SharpLensMcp поддерживает представление вашего решения в оперативной памяти для быстрых запросов. Когда файлы изменяются извне (через инструменты Edit/Write), агент несет ответственность за синхронизацию изменений.

Когда вызывать sync_documents:

Действие

Вызывать sync_documents?

Использован инструмент Edit для изменения .cs файлов

Да

Использован инструмент Write для создания новых .cs файлов

Да

Удалены .cs файлы

Да

Использованы инструменты рефакторинга SharpLensMcp (переименование, извлечение и т.д.)

❌ Нет (автоматическое обновление)

Изменены .csproj файлы

❌ Нет (используйте load_solution)

Использование:

# 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 инструментов)

Инструмент

Описание

get_symbol_info

Семантическая информация в позиции

go_to_definition

Переход к определению символа

find_references

Все ссылки в решении

find_implementations

Реализации интерфейсов/абстрактных классов

find_callers

Анализ влияния — кто вызывает это?

get_type_hierarchy

Цепочка наследования

search_symbols

Поиск по glob-шаблону (*Handler, Get*)

semantic_query

Поиск с несколькими фильтрами (async, public и т.д.)

get_type_members

Все члены по имени типа

get_type_members_batch

Несколько типов в одном вызове

get_method_signature

Подробная сигнатура по имени

get_derived_types

Поиск всех подклассов

get_base_types

Полная цепочка наследования

get_attributes

Список атрибутов символа

get_containing_member

Окружающий символ в позиции

get_method_overloads

Все перегрузки метода

find_attribute_usages

Поиск типов/членов по атрибуту

Анализ (11 инструментов)

Инструмент

Описание

get_diagnostics

Ошибки/предупреждения компилятора

analyze_data_flow

Присваивания и использование переменных

analyze_control_flow

Ветвление/достижимость

analyze_change_impact

Что сломается при изменении?

check_type_compatibility

Можно ли присвоить A к B?

get_outgoing_calls

Что вызывает этот метод?

find_unused_code

Обнаружение мертвого кода

validate_code

Проверка компиляции без записи

get_complexity_metrics

Цикломатическая сложность, вложенность, LOC, когнитивная сложность

find_circular_dependencies

Обнаружение циклических зависимостей проектов и пространств имен

get_missing_members

Не реализованные члены интерфейса/абстрактного класса

Рефакторинг (14 инструментов)

Инструмент

Описание

rename_symbol

Безопасное переименование в решении

change_signature

Добавление/удаление/изменение порядка параметров

extract_method

Извлечение с анализом потока данных

extract_interface

Генерация интерфейса из класса

generate_constructor

Из полей/свойств

organize_usings

Сортировка и удаление неиспользуемых

organize_usings_batch

Пакетная организация для нескольких файлов

format_document_batch

Пакетное форматирование файлов в проекте

get_code_actions_at_position

Все рефакторинги Roslyn в позиции

apply_code_action_by_title

Применение любого рефакторинга по названию

implement_missing_members

Генерация заглушек интерфейса

encapsulate_field

Поле в свойство

inline_variable

Встраивание временной переменной

extract_variable

Извлечение выражения в переменную

Генерация кода (2 инструмента)

Инструмент

Описание

add_null_checks

Генерация проверок ArgumentNullException

generate_equality_members

Equals/GetHashCode/операторы

Составные инструменты (6 инструментов)

Инструмент

Описание

get_type_overview

Полная информация о типе в одном вызове

analyze_method

Сигнатура + вызывающие + исходящие вызовы + расположение

get_file_overview

Сводка файла с диагностикой

get_method_source

Исходный код по имени

get_method_source_batch

Несколько исходных кодов методов в одном вызове

get_instantiation_options

Как создать тип

Обнаружение (2 инструмента)

Инструмент

Описание

get_di_registrations

Сканирование регистраций DI-сервисов

find_reflection_usage

Обнаружение использования рефлексии/dynamic

Инфраструктура (10 инструментов)

Инструмент

Описание

health_check

Статус сервера

load_solution

Загрузка .sln/.slnx для анализа

sync_documents

Синхронизация изменений файлов в загруженном решении

get_project_structure

Структура решения

dependency_graph

Зависимости проектов

get_code_fixes

Доступные исправления для диагностики

apply_code_fix

Применение конкретного исправления кода

get_nuget_dependencies

Список пакетов NuGet по проектам

get_source_generators

Список активных генераторов исходного кода

get_generated_code

Просмотр сгенерированного исходного кода

Другие MCP-клиенты

Для MCP-клиентов, отличных от Claude Code, добавьте в свою конфигурацию:

{
  "mcpServers": {
    "sharplens": {
      "command": "sharplens",
      "args": [],
      "env": {
        "DOTNET_SOLUTION_PATH": "/path/to/your/Solution.sln (or .slnx)"
      }
    }
  }
}

Использование

  1. Загрузите решение: Вызовите roslyn:load_solution с путем к файлу .sln или .slnx (или установите DOTNET_SOLUTION_PATH)

  2. Анализируйте код: Используйте любой из 57 инструментов для навигации, анализа, рефакторинга

  3. Безопасно рефакторите: Предварительно просматривайте изменения перед применением с помощью 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-агент

Разработка

Добавление новых инструментов

  1. Добавьте метод в 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" }
    );
}
  1. Добавьте определение инструмента в src/McpServer.cs в HandleListToolsAsync

  2. Добавьте маршрутизацию в src/McpServer.cs в HandleToolCallAsync switch

  3. Соберите и опубликуйте:

dotnet build -c Release
dotnet publish -c Release -o ./publish

Ключевые файлы

Файл

Назначение

src/RoslynService.cs

Реализации инструментов (57 методов)

src/McpServer.cs

Протокол 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