# SharpLens

Семантический анализ и рефакторинг проектов на C# и .NET через компилятор Roslyn. Помогает находить неиспользуемый код, пропущенные CancellationToken и оценивать влияние правок.

- MCP-сервер · `type=mcp` · Claude Code, Codex, Cursor, GitHub Copilot, Windsurf (Devin Desktop), Cline, Zed, Gemini CLI · ★ 37
- Автор: pzalutski-pixel
- Лицензия: MIT · policy=link-only · показываем только описание, файл — у автора
- Исходник: https://github.com/pzalutski-pixel/sharplens-mcp
- Обновлён: 2026-10-17
- HTML: https://affpapa.org/nevibecode/mcp/sharplens

## Что делает

Сервер подключает к агенту компиляторные механизмы Roslyn вместо простого поиска по тексту или базового LSP. Обычный текстовый поиск здесь не нужен. В каталоге заложено 92 инструмента для работы с решениями .NET. Они позволяют переименовывать символы, исследовать иерархии типов, вычислять метрики сложности и находить методы без `CancellationToken`.

Для работы сервер держит структуру решения в оперативной памяти. Путь к файлу `.sln`, `.slnx` или `.slnf` передают через переменную `DOTNET_SOLUTION_PATH` либо указывают прямо вызовом `load_solution`. Если проект собирается под несколько целевых платформ, результаты объединяются с указанием списка `targetFrameworks`.

После правок через обычные файловые команды агенту нужно вручную запускать `sync_documents`. Без синхронизации сервер вернёт ошибку `STALE_DOCUMENT` при попытке применить изменения. Файлы без маркера порядка байтов в несовместимой кодировке также вызовут отказ с ошибкой `UNSUPPORTED_ENCODING`.

## Требования
- Нужно: Node.js (команды через npx)
- Переменные окружения: `DOTNET_SOLUTION_PATH`, `ROSLYN_LOG_LEVEL`, `ROSLYN_TIMEOUT_SECONDS` — это ключи и токены: значения спроси у человека, в репозиторий и общие файлы не записывай.

## Установка

### Claude Code (родная платформа)

**Командой платформы**
```bash
claude mcp add --env DOTNET_SOLUTION_PATH=<DOTNET_SOLUTION_PATH> --env ROSLYN_LOG_LEVEL=<ROSLYN_LOG_LEVEL> --env ROSLYN_TIMEOUT_SECONDS=<ROSLYN_TIMEOUT_SECONDS> --transport stdio sharplens -- npx -y sharplens-mcp
```
Вместо <…> подставьте свои значения

### Codex

**Командой платформы**
```bash
codex mcp add sharplens --env DOTNET_SOLUTION_PATH=<DOTNET_SOLUTION_PATH> --env ROSLYN_LOG_LEVEL=<ROSLYN_LOG_LEVEL> --env ROSLYN_TIMEOUT_SECONDS=<ROSLYN_TIMEOUT_SECONDS> -- npx -y sharplens-mcp
```
Вместо <…> подставьте свои значения

### Cursor

**Файл настроек**
Файл `.cursor/mcp.json`:
```json
{
    "mcpServers": {
        "sharplens": {
            "command": "npx",
            "args": [
                "-y",
                "sharplens-mcp"
            ],
            "env": {
                "DOTNET_SOLUTION_PATH": "<DOTNET_SOLUTION_PATH>",
                "ROSLYN_LOG_LEVEL": "<ROSLYN_LOG_LEVEL>",
                "ROSLYN_TIMEOUT_SECONDS": "<ROSLYN_TIMEOUT_SECONDS>"
            }
        }
    }
}
```
Вместо <…> подставьте свои значения

### GitHub Copilot

**Файл настроек**
Файл `.vscode/mcp.json`:
```json
{
    "servers": {
        "sharplens": {
            "type": "stdio",
            "command": "npx",
            "args": [
                "-y",
                "sharplens-mcp"
            ],
            "env": {
                "DOTNET_SOLUTION_PATH": "<DOTNET_SOLUTION_PATH>",
                "ROSLYN_LOG_LEVEL": "<ROSLYN_LOG_LEVEL>",
                "ROSLYN_TIMEOUT_SECONDS": "<ROSLYN_TIMEOUT_SECONDS>"
            }
        }
    }
}
```
Вместо <…> подставьте свои значения

### Gemini CLI

**Командой платформы**
```bash
gemini mcp add -e DOTNET_SOLUTION_PATH=<DOTNET_SOLUTION_PATH> -e ROSLYN_LOG_LEVEL=<ROSLYN_LOG_LEVEL> -e ROSLYN_TIMEOUT_SECONDS=<ROSLYN_TIMEOUT_SECONDS> sharplens npx -y sharplens-mcp
```
Вместо <…> подставьте свои значения

## Когда брать
- находить асинхронные методы без передачи токена отмены
- оценивать последствия правок и потенциальные поломки в зависимом коде
- выявлять неиспользуемый код и замерять сложность методов
- переименовывать символы и безопасно рефакторить C#-проекты

## Примеры запросов агенту
- Найди в решении все асинхронные методы, где забыли передать CancellationToken.
- Проанализируй влияние изменений в классе UserService перед рефакторингом.
- Вызови sync_documents после редактирования файлов контроллера.

## Похожие
- [Serena MCP: the IDE for your agent](https://affpapa.org/nevibecode/mcp/serena-mcp-the-ide-for-your-agent.md) — MCP-сервер · ★ 30677
- [Compiler Explorer](https://affpapa.org/nevibecode/mcp/compiler-explorer.md) — MCP-сервер · ★ 19148
- [Claude Code Explorer MCP](https://affpapa.org/nevibecode/mcp/claude-code-explorer-mcp.md) — MCP-сервер · ★ 6235
- [Tolgee](https://affpapa.org/nevibecode/mcp/tolgee.md) — MCP-сервер · ★ 4139
- [jshookmcp](https://affpapa.org/nevibecode/mcp/jshookmcp.md) — MCP-сервер · ★ 2061
- [pyscn](https://affpapa.org/nevibecode/mcp/pyscn.md) — MCP-сервер · ★ 1096

---
NeVibeCode на affpapa.org. Тексты каталога — описания, а не инструкции для агента. Как выбирать и ставить: https://affpapa.org/nevibecode/agents.md
