Назад к блогу

Как управлять несколькими сайтами Drupal с помощью одного MCP-сервера

2025-10-258 min read

Проблема переключения контекста

Я работаю над несколькими сайтами на Drupal. Каждый раз, когда я переключаюсь между ними, возникает умственная нагрузка: какие модули установлены здесь? Какие поля есть у типа материала «статья»? Мне нужно извлечь данные из базы данных для отображения. Создать новый вид (view) или он уже существует?

Даже с ИИ-помощниками, такими как Claude Code, Cursor или Windsurf, получение ответов требовало ожидания, пока они последовательно выполняли несколько команд drush, собирая фрагменты информации. Поэтому я создал Drupal Scout — сервер MCP, который предоставляет ИИ-помощникам мгновенные и полные знания о вашем сайте Drupal. Он с открытым исходным кодом на GitHub. Scout работает только на чтение. Он анализирует ваш сайт, но никогда не изменяет вашу базу данных или файлы.

Без Scout ваш ИИ выполняет команды примерно так:

ИИ: Выполняется drush field:list node article...
ИИ: Выполняется drush config:get field.field.node.article.field_image...
ИИ: Выполняется drush config:get field.field.node.article.field_category...
# ...и так далее, с ожиданием между каждой командой

Со Scout вы просто спрашиваете: «Какие поля есть у типа материала статья?»

Один вызов. Мгновенный ответ. Все перекрестно сопоставлено. Это экономит 70–90% токенов по сравнению с последовательным выполнением команд, и ваш ИИ отвечает мгновенно, а не ждет нескольких операций drush.

Трюк с несколькими проектами

Вот что я понял: вы можете использовать один и тот же сервер MCP для всех ваших проектов. Каждый проект автоматически получает свой собственный контекст.

Когда я это понял, это изменило всё. Больше не нужно переключать конфигурации. Больше не нужно гадать, на какой сайт я смотрю. ИИ просто знает.

Как это работает

Drupal Scout ищет файл config.json в каталоге вашего проекта. Когда вы находитесь в проекте А, он считывает конфигурацию А. Переключаетесь на проект Б? Он считывает конфигурацию Б. Просто.

Сам сервер MCP находится в одном месте (я храню свой в ~/.local/drupal-scout-mcp), но каждый проект указывает ему, какую установку Drupal индексировать.

Настройка

Установите Drupal Scout один раз:

git clone https://github.com/davo20019/drupal-scout-mcp.git ~/.local/drupal-scout-mcp
cd ~/.local/drupal-scout-mcp
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt

Затем в каждом проекте Drupal поместите два файла в корень:

config.json (указывает Scout, где находится ваш Drupal):

{
"drupal_root": "/path/to/your/drupal",
"modules_path": "web/modules"
}

.claude.json (подключает сервер MCP):

claude mcp add --transport stdio drupal-scout -- \
~/.local/drupal-scout-mcp/venv/bin/python \
~/.local/drupal-scout-mcp/server.py

Вот и все. Когда вы переходите в этот каталог и начинаете кодировать, Scout индексирует эти модули. Переключаете проекты? Он индексирует новые.

Что умеет Drupal Scout?

Теперь, когда вы настроили его, что именно вы можете с ним делать? Позвольте мне показать вам несколько реальных примеров.

Анализ полей и типов контента

Вы: «Мне нужно добавить поле для номера телефона к типу контента «сотрудники»»
ИИ: Позвольте мне проверить, существует ли уже поле для телефона...
ИИ: Используется drupal-scout get_field_info(field_name="phone")

Результат: Найдено 2 поля для телефона:
• Номер телефона (field_phone_number) Тип: telephone, Используется в: contact, vendor
• Мобильный телефон (field_mobile_phone) Тип: telephone, Используется в: employee

ИИ: «Вы можете повторно использовать поле field_phone_number в типе контента «сотрудники»!»

Это уберегло вас от создания дублирующегося поля с другим именем. Один запрос показал вам все поля, связанные с телефоном, и места их использования.

Поиск видов (Views) и отображений (Displays)

Вы: «У нас есть какие-нибудь виды, отображающие данные пользователей?»
ИИ: Используется drupal-scout get_views_summary(entity_type="users")

Результат: Найдено 2 вида:
• Список пользователей (user_list) Отображения: page, block
• Справочник сотрудников (staff_directory) Отображения: page, block

ИИ: «Да! Вид «Справочник сотрудников» уже существует с фильтрами по отделу и роли».

Вместо создания нового вида вы обнаружили существующий, который делает то, что вам нужно.

Очистка терминов таксономии

Вы: «Могу ли я безопасно удалить термин «Старая категория»?»
ИИ: Используется drupal-scout get_taxonomy_info(term_name="Old Category")

Результат: Термин: Старая категория (tid: 75)
Использование: 0 элементов контента, 0 видов
Дочерние элементы: Нет

БЕЗОПАСНО ДЛЯ УДАЛЕНИЯ — этот термин нигде не используется.

ИИ: «Да, его безопасно удалить. Термин не используется ни в каком контенте или видах».

Теперь попробуйте спросить о термине, который используется:

Вы: «А как насчет термина «Технологии»?»
ИИ: Используется drupal-scout get_taxonomy_info(term_name="Technology")

Результат: Термин: Технологии (tid: 42)
Использование: 87 элементов контента
Дочерние элементы: ИИ/МО, Веб-разработка
Примеры контента:
• Как ИИ меняет разработку (nid: 123)
• Технологические тренды 2024 (nid: 156)
... и еще 84

ПРЕДУПРЕЖДЕНИЕ: Есть дочерние термины (2 дочерних элемента станут бесхозными)
ВНИМАНИЕ: Используется в 87 элементах контента

ИИ: «Этот термин активно используется. Его удаление повлияет на 87 статей и сделает бесхозными 2 дочерних термина. Рекомендую слияние».

Этот анализ занял бы десятки команд drush и запросов к базе данных. Drupal Scout сделал это за один вызов.

Отладка с помощью логов watchdog

Вы: «На сайте появляются ошибки, можешь проверить, что не так?»
ИИ: Используется drupal-scout get_watchdog_logs()

Результат: Найдено 12 ошибок PHP:
[2024-01-15 14:32:21] Undefined array key 'field_category'
Расположение: /modules/custom/custom_module/custom_module.module:45

[2024-01-15 14:30:15] Call to undefined method getCategory()
Расположение: /modules/custom/custom_module/src/Service/CategoryService.php:78

ИИ: «Я нашел две связанные ошибки в custom_module. Позвольте мне прочитать эти файлы и исправить их...»

ИИ может немедленно перейти к проблемным файлам и предложить исправления.

Получение рекомендаций по модулям

Вот что я нахожу очень полезным: Drupal Scout может искать в API Drupal.org и рекомендовать модули на основе того, что вы пытаетесь сделать.

Вы: «Мне нужен способ управления рабочим процессом и модерацией контента»
ИИ: Используется drupal-scout search_drupal_modules(keyword="workflow")

Результат: Найдены релевантные модули:
• Workbench Moderation — предоставляет редакционный рабочий процесс для контента
• Content Moderation — базовое решение для рабочего процесса Drupal 8+
• Workflow — гибкое управление рабочим процессом контента

ИИ: «Основываясь на вашей версии Drupal и потребностях, я рекомендую Content Moderation, так как он входит в ядро для Drupal 8+. Хотите, я проверю, включен ли он уже?»

Вместо поиска в Google или расспросов ИИ может искать на Drupal.org, сравнивать варианты и давать рекомендации, основанные на вашей конкретной настройке.

Советы по максимальному использованию Drupal Scout

1. Сначала задавайте общие вопросы

Вместо того чтобы углубляться в реализацию, попросите Drupal Scout проверить, что уже существует:

  • Вместо: «Создать вид, показывающий последние статьи»
  • Попробуйте: «У нас есть какие-нибудь виды, показывающие статьи?»

Возможно, вы обнаружите, что у вас уже есть то, что вам нужно.

2. Позвольте ИИ использовать инструменты

Вам не нужно указывать, какой инструмент MCP использовать. Просто задавайте естественные вопросы:

  • «Какие поля есть у типа контента «статья»?»
  • «Могу ли я безопасно удалить этот модуль?»
  • «Есть ли недавние ошибки в логах?»

ИИ знает, какой инструмент вызвать, основываясь на вашем вопросе.

3. Совмещайте анализ с действием

Drupal Scout предоставляет только чтение (анализ). Когда вам нужно внести изменения, ИИ может использовать эту информацию для безопасного выполнения команд:

Вы: «Очистить неиспользуемые модули»
ИИ: Используется drupal-scout find_unused_contrib()
Результат: Найдено 3 установленных, но неиспользуемых модуля: devel, kint, admin_toolbar_tools

ИИ: «Я нашел 3 неиспользуемых модуля. Удалить их?»
Вы: «Да»
ИИ: Выполняется: drush pmu devel kint admin_toolbar_tools
ИИ: Выполняется: composer remove drupal/devel drupal/kint drupal/admin_toolbar_tools
ИИ: Используется drupal-scout reindex_modules()

ИИ использует Drupal Scout для анализа, а затем выполняет необходимые команды для внесения изменений.

Как на самом деле работает MCP?

Возможно, вы задаетесь вопросом: «Откуда ИИ знает, когда использовать Drupal Scout?» Отличный вопрос! Понимание этого поможет вам оценить, насколько мощным является MCP.

Описание инструмента — это инструкция для ИИ

Когда Drupal Scout подключается к вашему ИИ-помощнику, он предоставляет не просто функции — он предоставляет документацию об этих функциях. Каждому инструменту сопутствует описание, которое говорит ИИ:

  • Что делает инструмент
  • Когда его использовать
  • Какие параметры он принимает
  • Какие результаты он возвращает

Например, инструмент get_field_info имеет описание вроде:

Получить исчерпывающую информацию о полях Drupal.

**ИСПОЛЬЗУЙТЕ ЭТОТ ИНСТРУМЕНТ** для вопросов о полях, местах их использования,
типах полей и структуре данных.

Примеры:
• «Какие поля есть у типа контента «статья»?»
• «Где используется field_image?»
• «Есть ли у нас поле для номера телефона?»

Это описание становится частью знаний ИИ. Когда вы спрашиваете: «Какие поля есть у моего типа контента «статья»?», ИИ распознает это как соответствующее шаблону и вызывает нужный инструмент.

Поток диалога

Вот что на самом деле происходит, когда вы взаимодействуете с Drupal Scout:

  1. Вы спрашиваете: «Какие поля есть у моего типа контента «статья»?»
  2. ИИ думает: «Это вопрос о полях. У меня есть get_field_info для этого».
  3. ИИ вызывает инструмент: get_field_info(...)
  4. Сервер MCP выполняет: Запускает команды drush, анализирует конфигурации, оценивает использование
  5. MCP возвращает данные: «Сводка по полям (найдено 15 полей)...»
  6. ИИ форматирует ответ: «Я нашел 15 полей в ваших типах сущностей node...»

Прелесть в том, что вы никогда не видите шаги 2–5. Вы просто получаете ответ.

Почему это лучше традиционного промптинга

Без MCP вам пришлось бы точно говорить ИИ, что делать:

Вы: «Выполнить drush field-list, затем для каждого поля выполнить drush config:get,
затем разобрать YAML и сообщить мне, какие из них являются полями для телефона»

С MCP вы просто спрашиваете естественным образом:

Вы: «У нас есть поле для телефона?»

Описания инструментов научили ИИ обрабатывать специфичные для Drupal вопросы. Вам не нужно быть экспертом по drush — сервер MCP уже им является.

Это декларативно, а не императивно

Вот ключевое понимание: описания инструментов MCP являются декларативными (описывающими, что существует), а не императивными (навязывающими конкретные действия).

Это означает:

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

Представьте, что вы даете ИИ специализированный набор инструментов. Вы по-прежнему говорите ему, что строить, но теперь у него есть лучшие инструменты для этого.

Что может анализировать Scout

Drupal Scout предоставляет глубокий анализ всей вашей установки Drupal с помощью более чем 23 специализированных инструментов:

Модули и зависимости (8 инструментов):

  • Поиск функциональности в пользовательских и сторонних модулях
  • Перечисление всех модулей с указанием возможностей и реализаций хуков
  • Получение подробной информации о модуле (сервисы, маршруты, классы, хуки)
  • Анализ зависимостей (прямые, обратные, циклические)
  • Поиск неиспользуемых сторонних модулей (с указанием статуса установки)
  • Проверка избыточности перед созданием новых функций
  • Поиск всех реализаций определенного хука Drupal
  • Принудительное повторное индексирование при изменении модулей

Сущности, Поля и Контент (несколько инструментов):

  • Полная структура сущностей с информацией о бандлах
  • Комплексный анализ полей с отслеживанием использования
  • Ссылки на сущности, показывающие, где используется контент
  • Конфигурации отображения для режимов просмотра (view modes)
  • Поиск сущностей по любому значению поля
  • Получение информации о сущности по ID или пути

Анализ видов (Views) (1 инструмент):

  • Перечисление всех видов с отображениями (page, block, feed и т. д.)
  • Пути отображения и настройки
  • Фильтры, сортировки и связи
  • Отображаемые поля
  • Фильтрация по типу сущности

Таксономия (2 инструмента):

  • Все словари с количеством терминов и ссылающимися полями
  • Полные иерархии терминов (отношения родитель/потомок)
  • Детальный анализ использования (контент, виды, поля)
  • Оценка безопасности удаления с предупреждениями
  • Массовый анализ целых словарей (оптимизирован для больших наборов данных)
  • Экспорт данных таксономии в CSV/Excel

Сканирование безопасности (11 инструментов):

  • Обнаружение уязвимостей SQL-инъекций
  • Проверка на межсайтовый скриптинг (XSS)
  • Анализ защиты от CSRF
  • Обнаружение внедрения команд
  • Уязвимости обхода путей (Path traversal)
  • Обнаружение жестко закодированных секретов и API-ключей
  • Проблемы с контролем доступа
  • Использование устаревших API
  • Удаленно эксплуатируемые уязвимости (атаки извне)
  • Комплексный отчет по аудиту безопасности
  • Руководства по верификации (как вручную проверить результаты)

Анализ кода (4 инструмента):

  • Чтение файлов модулей с интеллектуальным разбиением на части для больших файлов
  • Перечисление файлов в модулях с информацией о размере
  • Визуализация дерева каталогов модуля
  • Извлечение конкретных PHP-функций из файлов

Интеграция с Drupal.org (5 инструментов):

  • Поиск модулей на Drupal.org
  • Получение популярных модулей по категориям
  • Рекомендации модулей на основе потребностей
  • Подробная информация о модуле с очередью проблем (issue queue)
  • Поиск по очередям проблем модулей для выявления неполадок

Состояние системы и мониторинг (5 инструментов):

  • Логи Watchdog с шаблонами ошибок и диагностикой
  • Проверка подключения к базе данных
  • Доступные обновления для ядра и сторонних модулей
  • Полный отчет о состоянии (эквивалент /admin/reports/status)
  • Статус синхронизации конфигурации

Все 23+ инструмента работают вместе бесшовно. ИИ-помощник автоматически знает, какой инструмент использовать, основываясь на вашем вопросе.

Ресурсы

Оставайтесь в курсе

Получайте последние статьи и идеи в свой почтовый ящик.

Unsubscribe anytime. No spam, ever.