Skip to main content
Glama
Atlassian MCP Server

Atlassian MCP Server

by bree7e

Atlassian MCP Server (Jira + Confluence)

MCP-сервер для Jira и Confluence Server/Data Center. Работает по stdio и предоставляет модели инструменты для чтения и изменения задач Jira, а также поиска и редактирования страниц Confluence через REST API.

Возможности

Jira

Инструмент

Назначение

jira_search_issues

Поиск задач по JQL с пагинацией

jira_get_issue

Детали задачи, родительская задача, подзадачи, связи, удалённые ссылки и ссылки Confluence

jira_create_issue

Создание задачи

jira_update_issue

Изменение заголовка, описания или приоритета

jira_list_projects

Список проектов

jira_get_comments

Комментарии к задаче

jira_add_comment

Добавление комментария

Confluence

Инструмент

Назначение

confluence_search_pages

Поиск страниц по CQL с URL и метаданными

confluence_get_page

Содержимое страницы по ID

confluence_create_page

Создание страницы в формате ADF

confluence_update_page

Изменение заголовка или тела страницы в формате ADF

confluence_list_spaces

Список пространств

confluence_find_pages_for_issue

Поиск документации для задачи Jira: сначала удалённые ссылки Jira, затем поиск заголовков по CQL

Related MCP server: Jira Utilities MCP Server

Требования

  • Node.js 20 или новее;

  • доступ к REST API Jira и Confluence;

  • учётные данные с правами на выполняемые операции.

Jira использует Basic-аутентификацию (JIRA_USERNAME и JIRA_API_TOKEN). Confluence использует Bearer-аутентификацию: CONFLUENCE_API_TOKEN должен быть персональным токеном доступа. Значение CONFLUENCE_USERNAME обязательно для единообразной конфигурации, но в Bearer-аутентификации не передаётся.

Установка и сборка

npm install
npm run build

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

Сервер ожидает шесть переменных окружения:

# Jira Server/Data Center
JIRA_URL=https://jira.example.com
JIRA_USERNAME=your-username
JIRA_API_TOKEN=your-api-token-or-password

# Confluence Server/Data Center
CONFLUENCE_URL=https://confluence.example.com
CONFLUENCE_USERNAME=your-username
CONFLUENCE_API_TOKEN=your-personal-access-token

Шаблон находится в .env.example. Обычные команды npm start и npm run inspect не читают .env: передавайте переменные в конфигурации MCP-клиента либо экспортируйте их в окружение. Для локальной разработки используйте npm run start:local или npm run inspect:local — эти команды загружают .env средствами Node.js 20+.

Например, в PowerShell:

$env:JIRA_URL = "https://jira.example.com"
$env:JIRA_USERNAME = "your-username"
$env:JIRA_API_TOKEN = "your-api-token-or-password"
$env:CONFLUENCE_URL = "https://confluence.example.com"
$env:CONFLUENCE_USERNAME = "your-username"
$env:CONFLUENCE_API_TOKEN = "your-personal-access-token"
npm start

Подключение к Codex

Codex Desktop, Codex CLI и IDE-расширение используют общую конфигурацию MCP. В Codex Desktop откройте Settings → MCP servers → Add server, выберите STDIO, укажите команду и переменные окружения из примера ниже, сохраните и перезапустите Codex. Подробности — в официальной документации Codex.

После публикации пакета в npm добавьте в ~/.codex/config.toml:

[mcp_servers.atlassian]
command = "npx"
args = ["-y", "mcp-server-atlassian"]

[mcp_servers.atlassian.env]
JIRA_URL = "https://jira.example.com"
JIRA_USERNAME = "your-username"
JIRA_API_TOKEN = "your-api-token-or-password"
CONFLUENCE_URL = "https://confluence.example.com"
CONFLUENCE_USERNAME = "your-username"
CONFLUENCE_API_TOKEN = "your-personal-access-token"

Для запуска из локального клона без копирования секретов в config.toml используйте .env:

[mcp_servers.atlassian]
command = "node"
args = ["--env-file=.env", "dist/index.js"]
cwd = "D:\\path\\to\\jira-confluence-mcp"

После перезапуска откройте /mcp в Codex CLI либо список MCP-серверов в Desktop и убедитесь, что сервер atlassian подключён. Для первой проверки выполните jira_list_projects или confluence_list_spaces.

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

После сборки точкой входа является dist/index.js. Пример конфигурации клиента:

{
  "mcpServers": {
    "atlassian": {
      "command": "node",
      "args": ["/absolute/path/to/jira-confluence-mcp/dist/index.js"],
      "env": {
        "JIRA_URL": "https://jira.example.com",
        "JIRA_USERNAME": "your-username",
        "JIRA_API_TOKEN": "your-api-token-or-password",
        "CONFLUENCE_URL": "https://confluence.example.com",
        "CONFLUENCE_USERNAME": "your-username",
        "CONFLUENCE_API_TOKEN": "your-personal-access-token"
      }
    }
  }
}

Не добавляйте реальные токены в репозиторий или общие конфигурационные файлы.

Локальный запуск и разработка

npm start             # запуск со значениями из окружения MCP-клиента
npm run start:local   # локальный запуск с переменными из .env
npm run dev           # компиляция TypeScript в watch-режиме
npm run build         # компиляция в dist/
npm run inspect       # Inspector со значениями из окружения
npm run inspect:local # Inspector с переменными из .env

npm start запускает сервер по stdio; это не HTTP-сервис и не открывает порт.

Примечания по API

  • URL Jira и Confluence указываются без обязательного завершающего /: лишние слеши автоматически убираются.

  • Тела страниц при создании и обновлении должны быть валидным JSON в формате Atlassian Document Format (ADF).

  • confluence_find_pages_for_issue по умолчанию ищет в пространстве ZPA; при необходимости передайте spaceKey.

Импорт Confluence в Markdown

Импорт доступен независимо от MCP, через Node.js. REST API используется только на чтение. Нужны Node.js 20.6+ для флага --env-file (либо передайте переменные окружения самостоятельно) и собранный проект:

npm ci
npm run build
node --env-file=.env dist/import-confluence.js 468684852 --out imports --modules=ma,qc

CLI использует CONFLUENCE_URL и CONFLUENCE_API_TOKEN. Jira credentials не нужны; JIRA_URL необязателен и задаёт адрес ссылок Jira. Без него используется origin Confluence. Для Jira с отдельным хостом или context path задайте его явно. Существующие переменные окружения имеют приоритет над .env.

Движок преобразования

Для импорта используется remark:

node --env-file=.env dist/import-confluence.js 468684852 478273679 --converter remark --out imports
npm run import:confluence -- --help

remark — единственный встроенный движок и значение по умолчанию. Интерфейс MarkdownConverter в src/import/converters.ts сохранён: id, version и convert(html). Нормализация Confluence и файловая синхронизация независимы от адаптера. При изменении правил увеличивайте FORMAT_VERSION, при изменении адаптера — его version.

Офлайн-пример без сети и учётных данных:

node dist/import-confluence.js --fixture test/fixtures/page.json --out imports/sample

Fixture — JSON страницы REST API с id, title, space, version, body.storage. Офлайн-режим не разрешает вложения и ссылки по названию через API; они получают предупреждения. Для правильного source задайте CONFLUENCE_URL; иначе используется демонстрационный адрес.

Формат и ограничения

Файл начинается с YAML frontmatter: title, source, page_id (строка), space, version, updated. При указании --modules=ma,qc добавляется массив modules: ["ma","qc"]. Параметр необязателен; коды модулей указываются через запятую. updated — дата версии страницы в часовом поясе исходного timestamp, не время импорта. После frontmatter расположен единственный H1 с названием страницы.

  • Заголовки источника нормализуются начиная с H2; глубина сверх H6 сопровождается предупреждением.

  • Сохраняются вложенные списки, начальный номер списка, жирный/курсив/зачёркнутый текст и код.

  • Все таблицы сохраняются как GFM-таблицы для Obsidian с выравниванием колонок в исходном Markdown. Абзацы и пункты списков внутри ячеек разделяются через ; списки сохраняют номера и отступы. Длина ячейки не меняет представление. Пустые значения остаются пустыми.

  • Объединения rowspan и colspan в данных разворачиваются: значение повторяется в каждой покрытой ячейке. Многоуровневая шапка объединяется через : общий заголовок попадает в каждую дочернюю колонку. Для таблиц без шапки добавляется «Столбец N», для таблиц свойств — «Поле / Значение».

  • Вложенная таблица выносится сразу после родительской, с подписью и идентификатором блока. В исходной ячейке остаётся ссылка Obsidian вида [[#^table-id|[1]]]. Идентификатор строится по ID исходной таблицы, а при его отсутствии — по содержимому. В последнем случае изменение содержимого меняет идентификатор. Ссылки внутри экспорта обновляются вместе с ним.

  • Блоки кода внутри таблиц превращаются в строки встроенного кода через . Для сочетания обратного слеша с вертикальной чертой применяется HTML , чтобы не создавать лишнюю колонку. Неоднозначные размеры объединений отмечаются в отчёте; превышение 512 колонок прерывает импорт.

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

  • Ссылки на пользователей, включая ответственного аналитика, сохраняются как ссылки на профиль Confluence.

  • Ссылки на страницы и исходные якоря пока ведут в Confluence. В манифесте сохраняются распознанные linkedPageIds для будущего режима Obsidian; ссылки без ID не угадываются.

  • Контейнеры section/column/panel/expand/info/note/warning/tip раскрываются; toc удаляется. Jira key становится ссылкой, Jira JQL — ссылкой на поиск, а не снимком результатов. Code/noformat становятся блоками кода. Неизвестные макросы сохраняют доступный текст и явную отметку.

  • Динамические include/excerpt и результаты запросов не загружаются рекурсивно. Цвета и расположение колонок не сохраняются. Преобразование сложных таблиц является нормализацией структуры, а не копией внешнего вида страницы.

Обновление и конфликты

Имена файлов стабильны: .md. В каталоге создаётся .confluence-import.json с адресом источника, версией, движком, версией преобразования, SHA-256 результата, ссылками и предупреждениями.

  • Повторный запуск получает страницу заново, но идентичный результат не переписывает файлы.

  • Новая версия страницы или другой движок обновляют тот же файл.

  • Локальные правки и существующий файл без записи в манифесте дают conflict; файл сохраняется. Для сравнения или восстановления используйте другой выходной каталог.

  • Страница с тем же ID от другого источника и более старая версия также дают конфликт.

  • HTTP 403/404 и другие ошибки не удаляют предыдущий импорт.

  • Запись каждого файла атомарна. Каталог защищён от параллельных писателей через .import-lock. После аварийного завершения удалять оставшийся пустой lock-каталог можно только убедившись, что импорт не запущен. Файл страницы и манифест не являются общей транзакцией: сбой между их записью приведёт к безопасному конфликту на следующем запуске.

  • Итоговый JSON содержит статусы created, updated, unchanged, conflict, error и предупреждения. При конфликте/ошибке код выхода 1, при успешной обработке — 0. Ошибка одной страницы не останавливает остальные.

Импорты в стандартном imports/ исключены из Git. RAG-индекс и локальные wikilinks пока не реализованы.

MCP

Новый инструмент confluence_export_markdown:

{
  "pageId": "468684852",
  "converter": "remark",
  "modules": ["ma", "qc"],
  "outputDirectory": "D:/knowledge/confluence"
}

Без outputDirectory возвращает Markdown и предупреждения без файловой записи. С каталогом использует тот же механизм импорта, что и CLI; путь относится к машине MCP-сервера. После пересборки перезапустите подключение MCP, чтобы новый инструмент появился в клиенте.

Проверки

npm test

Тесты проверяют конвертацию, метаданные, таблицы, ссылки, макросы, конфликты, неизменность файлов при повторном импорте, CLI с локальным HTTP-сервером и MCP-обработчик. Реальная доступность конкретных страниц зависит от прав токена Confluence.

Available Tools

13 tools
confluence_create_pageA

Создать новую страницу в Confluence (формат ADF)

Inputs: body (required), title (required), spaceKey (required), parentId.

confluence_find_pages_for_issueA

Find Confluence pages for a Jira issue using remote links, then CQL title search

Inputs: issueKey (required), limit, spaceKey.

confluence_get_pageC

Получить содержимое страницы Confluence по её ID

Inputs: pageId (required).

confluence_list_spacesA

Получить список всех пространств Confluence

Inputs: no named parameters.

confluence_search_pagesB

Search Confluence pages with CQL and return page IDs and URLs

Inputs: cql (required), limit, start.

confluence_update_pageC

Обновить существующую страницу Confluence

Inputs: pageId (required), body, title.

jira_add_commentB

Добавить комментарий к задаче Jira

Inputs: body (required), issueKey (required).

jira_create_issueB

Создать новую задачу в Jira

Inputs: summary (required), projectKey (required), priority, issueType, +1 more.

jira_get_commentsB

Получить список комментариев к задаче Jira

Inputs: issueKey (required).

jira_get_issueA

Get Jira issue details including parent, subtasks, issue links and remote links

Inputs: issueKey (required).

jira_list_projectsA

Получить список всех проектов Jira

Inputs: no named parameters.

jira_search_issuesA

Поиск задач Jira по JQL-запросу

Inputs: jql (required), startAt, maxResults.

jira_update_issueA

Обновить существующую задачу в Jira

Inputs: issueKey (required), summary, priority, description.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A3.7/5.0

    Scored across 13 tools

    Disambiguation5/5

    Each tool targets a distinct resource and action, with clear separation between Jira and Confluence tools. Potential overlap between search tools is resolved by context: jira_search_issues searches issues, confluence_search_pages searches pages, and confluence_find_pages_for_issue links issues to pages.

    Naming Consistency5/5

    All tool names follow a consistent snake_case pattern with a product prefix and a verb_noun structure, e.g., jira_create_issue, confluence_get_page. Minor verb variation (search, list, find) is still predictable and does not create confusion.

    Tool Count5/5

    With 13 tools covering both Jira and Confluence core operations, the set is well-scoped for an Atlassian integration. Each tool addresses a meaningful operation without unnecessary bloat or duplication.

    Completeness4/5

    The server covers essential Jira issue and Confluence page workflows, including search, read, create, update, and comments. Minor gaps exist such as delete operations, Jira transitions, and Confluence page deletion, but core integration workflows are not blocked.

    Maintenance

    ActivitySlowing
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      B
      quality
      D
      maintenance
      Provides tools for AI assistants to interact with JIRA APIs, enabling them to read, create, update, and manage JIRA issues through standardized MCP tools.
      6
      10 npm
      3
      MIT
    • F
      license
      Not graded
      quality
      B
      maintenance
      Provides JIRA issue management and automation through MCP tools and standalone scripts, enabling reading, searching, analyzing, and modifying issues with batch processing and OCR capabilities.
      -