Skip to main content
Glama

bugzilla-mcp

MCP-сервер (Model Context Protocol) для управления тикетами и проектами Bugzilla, работающий поверх Express со встроенной cron-задачей, которая периодически обращается к Bugzilla по расписанию.

Ориентирован на Bugzilla 5.2 REST API.

Возможности

  • MCP через Streamable HTTP на POST /mcp (без состояния; работает с любым MCP-клиентом)

  • 15 инструментов для работы с багами, комментариями, вложениями, продуктами, компонентами и метаданными полей

  • Cron-задача, которая обращается к Bugzilla в заданное время и опрашивает новые и изменённые баги

  • Исходящий вебхук — cron-задача отправляет POST-запросы с подписанными событиями bug.created / bug.changed на настраиваемый URL

  • Страница настроек по адресу GET /settings для настройки расписания cron и вебхука из браузера

  • Поддержка Docker (многоступенчатая сборка, непривилегированный пользователь, docker-compose)

Related MCP server: kanban-mcp

Быстрый старт

Требуются Node.js 20+ и сетевой доступ к вашему экземпляру Bugzilla.

git clone https://github.com/COG-GTM/bugzilla-mcp
cd bugzilla-mcp
npm install
npm run build
cp .env.example .env

Отредактируйте .env:

BUGZILLA_BASE_URL=https://your-bugzilla.example.com/
BUGZILLA_API_KEY=<key from Bugzilla Preferences -> API Keys>
# Only for Bugzilla 5.0.x, which ignores the auth header (default: header):
BUGZILLA_AUTH_STYLE=query
# Any random string of your choosing, e.g. `openssl rand -hex 32`:
MCP_AUTH_TOKEN=<random token>

Затем запустите:

npm run start:local
  • MCP-клиенты подключаются к http://<host>:3000/mcp с заголовком Authorization: Bearer <MCP_AUTH_TOKEN>.

  • Страница настроек доступна по адресу http://<host>:3000/settings (введите тот же токен).

  • Настройки cron/вебхука сохраняются в файле .bugzilla-mcp-state.json рядом с приложением (путь можно переопределить через STATE_FILE).

Для продакшена: используйте выделенную сервисную учётную запись Bugzilla с минимальными правами для API-ключа, всегда задавайте MCP_AUTH_TOKEN (без него запись настроек запрещена) и завершайте TLS перед сервером, если он доступен за пределами localhost.

MCP-инструменты

Инструмент

Эндпоинт Bugzilla

search_bugs

GET /rest/bug

get_bug

GET /rest/bug/(id_or_alias)

create_bug

POST /rest/bug

update_bug

PUT /rest/bug/(id_or_alias)

get_bug_history

GET /rest/bug/(id)/history

get_comments

GET /rest/bug/(id)/comment

add_comment

POST /rest/bug/(id)/comment

list_attachments

GET /rest/bug/(id)/attachment

create_attachment

POST /rest/bug/(id)/attachment

list_products

GET /rest/product_{accessible,enterable,selectable}

get_product

GET /rest/product/(id_or_name)

create_product

POST /rest/product

update_product

PUT /rest/product/(id_or_name)

create_component

POST /rest/component

get_field_values

GET /rest/field/bug/(field)/values

search_bugs, create_bug и update_bug принимают необязательный объект custom_fields для пользовательских полей Bugzilla, например custom_fields: {"cf_severity_class": "Sev1-Critical"} при фильтрации или установке обязательного поля. Согласно контракту REST Bugzilla, значение массива для поля с множественным выбором заменяет всё значение поля — в отличие от keywords и cc, у пользовательских полей нет инкрементальной формы {add, remove}.

Примечание: у Bugzilla нет API для удаления багов; закрытие/резолюция выполняется через update_bug (например, status=RESOLVED, resolution=FIXED).

HTTP-эндпоинты

Эндпоинт

Описание

POST /mcp

Эндпоинт MCP Streamable HTTP

GET /health

Проверка живости (liveness)

GET /cron/status

Расписание cron, время/результат последнего запуска

POST /cron/run

Запустить cron-задачу вручную

GET /settings

HTML-страница настроек (расписание cron + вебхук)

GET /settings/config

Текущие настройки cron/вебхука и статус (JSON)

PUT /settings/config

Обновить расписание cron и/или настройки вебхука

POST /settings/test-webhook

Отправить подписанное событие webhook.test на настроенный URL

/mcp, /cron/* и JSON API /settings требуют заголовок Authorization: Bearer <MCP_AUTH_TOKEN>, если задан MCP_AUTH_TOKEN. Сама страница настроек — статический HTML; она запрашивает токен и отправляет его как Bearer-заголовок при каждом вызове API.

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

Скопируйте .env.example в .env и заполните:

Переменная

Обязательная

Описание

BUGZILLA_BASE_URL

да

URL экземпляра Bugzilla, например https://bugzilla.example.com

BUGZILLA_API_KEY

да

API-ключ из раздела Bugzilla Preferences → API Keys

BUGZILLA_AUTH_STYLE

нет

header (по умолчанию) передаёт ключ в заголовке; установите query для Bugzilla 5.0.x, который игнорирует заголовок

MCP_AUTH_TOKEN

нет

Bearer-токен, защищающий /mcp и /cron/*

CRON_SCHEDULE

нет

Cron-выражение, вычисляется в UTC (по умолчанию 0 9 * * * = ежедневно в 09:00 UTC)

PORT

нет

Порт прослушивания (по умолчанию 3000)

WEBHOOK_URL

нет

URL, на который cron-задача отправляет POST-запросы с событиями bug.created / bug.changed

WEBHOOK_SECRET

нет

Ключ HMAC-SHA256; добавляет заголовок X-Webhook-Signature: sha256=<hmac>

STATE_FILE

нет

JSON-файл для сохранения контрольной отметки cron и переопределений со страницы настроек (по умолчанию .bugzilla-mcp-state.json)

Значения, изменённые через страницу настроек, сохраняются в STATE_FILE и переопределяют соответствующие переменные окружения после перезапуска.

API-ключ отправляется в каждом запросе к Bugzilla в заголовке X-BUGZILLA-API-KEY или как query-параметр api_key, если задано BUGZILLA_AUTH_STYLE=query.

BUGZILLA_AUTH_STYLE=query помещает ключ в URL запроса, где его могут зафиксировать промежуточные прокси и журналы доступа. Bugzilla 5.0.x игнорирует заголовок и не принимает других способов аутентификации, поэтому используйте query только для таких экземпляров, с выделенной сервисной учётной записью с минимальными правами и периодической ротацией ключа.

Запуск

Docker (рекомендуется)

cp .env.example .env   # then edit
docker compose up --build

Локально

npm install
npm run build
npm run start:local   # loads .env via node --env-file; or: npm run dev

npm start читает конфигурацию только из окружения процесса (используется в Docker-образе); используйте start:local или dev, чтобы загрузить локальный файл .env.

Cron-задача

При каждом запланированном срабатывании задача:

  1. Вызывает GET /rest/version как проверку работоспособности.

  2. Опрашивает GET /rest/bug?last_change_time=<lastRun> для багов, изменённых с прошлого запуска (при первом запуске пропускается, так как нет базовой отметки), и разделяет их на новые баги (creation_time ≥ время последнего запуска) и изменённые баги.

  3. Доставляет события вебхука (см. ниже), если настроен URL вебхука.

  4. Логирует результаты и сохраняет последний результат в памяти; он доступен по адресу GET /cron/status.

Отметка последнего запуска сохраняется в STATE_FILE, поэтому после перезапуска не пропускаются баги, созданные, пока сервер был недоступен. Отметка продвигается только после успешной доставки вебхука (или если вебхук не настроен), поэтому неудачные доставки повторяются при следующем запуске (семантика at-least-once — получатели должны дедуплицировать по id бага).

Вебхук

Когда задан WEBHOOK_URL (или он настроен через страницу настроек), каждый запуск cron отправляет одну пакетную JSON-полезную нагрузку на каждый тип события:

{
  "event": "bug.created",
  "instance": "https://bugzilla.example.com",
  "firedAt": "2026-01-01T09:00:00.000Z",
  "bugs": [
    { "id": 17, "summary": "...", "status": "CONFIRMED",
      "creation_time": "...", "last_change_time": "..." }
  ]
}

bug.changed использует ту же структуру. Неудачные доставки повторяются 3 раза с экспоненциальной задержкой (1с/5с/25с); статус последней доставки виден на GET /cron/status и на странице настроек.

Если задан WEBHOOK_SECRET, каждый запрос содержит заголовок X-Webhook-Signature: sha256=<hex HMAC-SHA256 of the raw body>. Проверяйте его на стороне получателя, например в Node:

const expected = "sha256=" +
  crypto.createHmac("sha256", secret).update(rawBody).digest("hex");
crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(signatureHeader));

Вебхук видит только те баги, которые доступны учётной записи с настроенным BUGZILLA_API_KEY — баги, ограниченные группами и недоступные для чтения этой учётной записи, никогда не доставляются.

Страница настроек

GET /settings отдаёт страницу на простом HTML (без шага сборки и без фреймворков), которая позволяет:

  • просматривать и изменять интервал опроса в минутах (преобразуется в cron-выражение и применяется на лету),

  • задавать URL вебхука, секрет (только для записи — повторно не отображается) и флаг включения,

  • запускать Run now и Send test event,

  • просматривать статус последнего запуска и последней доставки вебхука.

Введите MCP_AUTH_TOKEN в верхней части страницы; без него JSON API отклоняет все вызовы. Изменения сохраняются в STATE_FILE (файл записывается с правами 0600).

Подключение MCP-клиента

Направьте любой MCP-клиент, поддерживающий Streamable HTTP, на http://<host>:3000/mcp, передав заголовок Authorization: Bearer <MCP_AUTH_TOKEN>, если он настроен.

Настройка с Devin

Чтобы Devin мог использовать этот сервер как MCP-интеграцию:

  1. Разверните сервер там, где Devin сможет до него добраться. Devin работает в облаке, поэтому localhost на вашем ноутбуке не подойдёт — разместите его на сервере с публичным (или доступным через VPN/по белому списку) HTTPS URL. Используйте Docker-настройку выше или npm run start:local за TLS-терминирующим обратным прокси.

  2. Настройте сервер, указав учётные данные Bugzilla:

    • BUGZILLA_BASE_URL — URL вашего экземпляра Bugzilla.

    • BUGZILLA_API_KEY — API-ключ для выделенной сервисной учётной записи с минимальными правами (Bugzilla → Preferences → API Keys). Devin будет действовать от имени этой учётной записи при каждом чтении и записи, а история багов будет относить изменения к ней.

    • BUGZILLA_AUTH_STYLE=query, если экземпляр работает на Bugzilla 5.0.x.

    • MCP_AUTH_TOKEN — случайный секрет (например, openssl rand -hex 32); обязателен, чтобы до сервера мог добраться только Devin.

  3. Добавьте MCP-сервер в Devin. Администраторы организаций могут добавить его через Settings → MCP Marketplace → Add a custom MCP (см. документацию Devin MCP); администраторы enterprise могут вместо этого настроить его один раз для нескольких организаций через Settings → Enterprise → Connections → Server catalog, как показано ниже. В любом случае укажите:

    • Transport: HTTP (Streamable HTTP; этот сервер не поддерживает stdio)

    • URL: https://<your-host>/mcp

    • Authentication / custom headers: Authorization: Bearer <MCP_AUTH_TOKEN> (значения только для записи — при изменении вводите каждый заголовок заново)

    • Оставьте Enable in sessions включённым и (только для enterprise-каталога) выберите, какие организации получат сервер, в разделе Targeting.

    Страница настройки enterprise MCP-сервера Devin

  4. Проверьте. Попросите Devin перечислить инструменты Bugzilla или выполнить быстрый вызов search_bugs. Все 15 инструментов (поиск/создание/обновление багов, комментарии, вложения, история, пользовательские поля) должны быть доступны.

  5. Опционально — вебхуки. Откройте https://<your-host>/settings, введите тот же MCP_AUTH_TOKEN, задайте интервал опроса и URL вебхука, чтобы сервер отправлял события bug.created / bug.changed (например, на эндпоинт, который запускает сессию Devin для каждого нового бага).

Примечания:

  • Один экземпляр сервера = одна учётная запись Bugzilla. Если разным вызывающим сторонам нужны разные права, запускайте по одному экземпляру на каждый API-ключ.

  • Никогда не коммитьте .env; храните API-ключ и токен как секреты.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    An MCP server for intelligent project planning and task management featuring task tracking, bug reporting, and feature specification with SQLite persistence. It includes full-text search capabilities and automatic filesystem synchronization to keep project data organized and accessible.
    MIT
  • F
    license
    Not graded
    quality
    C
    maintenance
    MCP server for task/ticket management with dependency tracking, supporting CRUD operations, status management, project filtering, and automatic data migrations.
    1
    -
  • A
    license
    A
    quality
    D
    maintenance
    A DAG-based task tracking MCP server for structured bug analysis and investigation workflows, with dependency management, priority-based execution, and automatic circular dependency detection.
    8
    11 npm
    MIT