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 и без:
- Прочитать тело конкретного метода
- Найти все места использования виджета
- Понять структуру экранного файла
- Найти определение enum
- Найти все места, где срабатывает навигационное событие
Методология
- Измеряемое: символы в ответах инструментов (то, что попадает в контекст)
- Токены: символы ÷ 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 раз больше контекста.
