Пост

Serena MCP: Ассистент для твоего агента разработки

Инструмент для семантической навигации по коду на базе LSP

Периодически просматриваю и тестирую разные MCP серверы, особенно те, которые доступны для локальной установки, с целью расширить или просто улучшить возможности используемых ИИ инструментов.

Из последних поставил сервер Serena MCP, основное назначение которого - это построение структуры и связей проекта (семантический контекст), чтобы ваш агент разработки быстрее и точнее понимал, где и что нужно изменять во время работы над очередной задачей.

В основе символьная навигация на базе LSP. Вместо того, чтобы перечитывать или переписывать десятки и сотни файлов полностью, сжигая токены, агент начинает подключать serena и, либо с помощью встроенных функций запускает команды, вносит правки, либо использует результаты serena, снижая объём затрат на промежуточные операции в разы. Эдакий полезный ассистент при разборе незнакомой кодовой базы, работе над большим проектом с множеством файлов, рефакторинге и точечных исправлениях.

Локальная установка

Устанавливаем еще один менеджер зависимостей uv (serena ставится через него)

1
2
3
4
5
# через curl / wget на macOS / Linux
curl -LsSf https://astral.sh/uv/install.sh | sh

# или через pip
pip install uv

Устанавливаем serena

1
2
3
4
5
# установка
uv tool install -p 3.13 serena-agent@latest --prerelease=allow

# обновление
uv tool upgrade serena-agent --prerelease=allow

Проверяем

1
serena --version

Подключение

В моём случае я сразу цепляю к Claude Desktop, т.к. это целевой инструмент, однако, способов подключения довольно много к разным клиентам и IDE - смотрим здесь.

Claude -> Settings -> Developer -> Local MCP servers -> Edit Config

1
2
3
4
5
6
7
8
9
10
11
{
  "mcpServers": {
    "serena": {
      "command": "serena",
      "args": [
        "start-mcp-server",
        "--context=desktop-app"
      ]
    }
  }
}

После перезапуска Claude Desktop автоматически открывается serena dashboard по адресу http://127.0.0.1:24283/dashboard со статистикой использования, веб просмотровщиком логов и разной служебной информацией.

Запуск в контейнере

Прописываем сразу в конфигурации вашего клиента MCP, указав путь до каталога со своими проектами. Опция экспериментальная, контейнер взлетел, но именно из Claude Desktop у меня подключиться и воспользоваться не получилось.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
{
  "mcpServers": {
    "serena": {
      "command": "docker",
      "args": [
        "run",
        "--rm",
        "-i",
        "--network",
        "host",
        "-v",
        "/path/to/your/projects:/workspaces/projects",
        "ghcr.io/oraios/serena:latest",
        "serena-mcp-server",
        "--transport",
        "stdio"
      ]
    }
  }
}

Сравнительная оценка

Для того, чтобы оценить эффективность нового инструмента, необходимо провести тестовые испытания на одних и тех же манипуляциях с кодом в рамках одного проекта.

Начал с того, что попросил claude изучить проект, воспользовавшись serena. Проанализировав структуру serena начала формировать описание проекта в своей виртуальной памяти для быстрого доступа в дальнейшем. В итоге получены: карта исходников, навигация, тех стек, архитектура, модели, ui описание, список предлагаемых для запуска команд.

Задание

Были определены проверочные операции, которые предлагалось выполнить claude с использованием serena и без:

  1. Прочитать тело конкретного метода
  2. Найти все места использования виджета
  3. Понять структуру экранного файла
  4. Найти определение enum
  5. Найти все места, где срабатывает навигационное событие

Методология

  • Измеряемое: символы в ответах инструментов (то, что попадает в контекст)
  • Токены: символы ÷ 4 (стандартный расчёт для кода, 1 токен = 4 символа)
  • Без serena: Bash grep / Read (целый файл)
  • С serena: точечные символьные запросы

Итоговая таблица

Оп Задача Без Serena (симв.) С Serena (симв.) Δ символов Δ токенов
1 Тело конкретного метода 6 173 850 −86% −1 331
2 Поиск всех использований 614 1 100 +79% ⚠️ +122
3 Структура экранного файла 24 968 950 −96% −6 005
4 Найти определение enum 3 017 290 −90% −682
5 Найти паттерн в коде 260 180 −31% −20
ИТОГО   35 032 3 370 −90% −7 916
Токены (÷4)   8 758 842    
Вызовов инструментов   7 5 −29%  

Выводы

Serena выигрывает принципиально в трёх сценариях (Оп 1, 3, 4):

  • Тело метода (−86%): вместо всего файла — только нужный символ
  • Структура файла (−96%): вместо 770 строк кода — компактный JSON-скелет
  • Определение по имени (−90%): нет поиска файла, нет чтения файла — прямой запрос

Паритет или незначительный проигрыш (Оп 2, 5): на простых grep-задачах Serena возвращает больше символов, но богаче информацию — к каждому вхождению добавлен контекст: имя метода, диапазон строк, сниппет кода вокруг ссылки. grep даёт только строку совпадения.

Главный итог: экономия 7 916 токенов на 5 операциях. Дело тут не в скорости выполнения, а прежде всего в размере занятого контекста, а значит и стоимости операций. При работе с крупными файлами (Oп 3: 24 968 символов) без Serena один запрос «съедает» в 26 раз больше контекста.

Больше полезной информации в Telegram-канале