Skip to main content
Glama
apo100l

MCP Jira Server

by apo100l
README.md
# MCP Jira Server

MCP-сервер для работы с self-hosted Jira через Model Context Protocol. Поддерживает три способа авторизации:

- Personal Access Token (`JIRA_PAT`);
- вручную переданный cookie (`JIRA_COOKIE`);
- автоматически поддерживаемая Jira/SSO-сессия в отдельном Chrome-профиле (`JIRA_AUTH_MODE=browser`).

Браузерный режим рекомендуется для корпоративных Jira, где создание PAT отключено, а доступ выполняется через SSO. Пользователь входит один раз в отдельном окне Chrome; профиль сохраняет и обновляет cookies между запусками MCP.

## Возможности

- просмотр задач, проектов, типов задач и комментариев;
- поиск задач через JQL;
- создание и обновление задач;
- назначение исполнителей и смена статуса;
- добавление комментариев;
- удаление задач;
- получение текущего пользователя.

Сервер обращается к Jira REST API v2: `<JIRA_BASE_URL>/rest/api/2`.

## Требования

- Node.js 18 или новее;
- доступ к self-hosted Jira;
- PAT, cookie либо возможность войти в Jira через Chrome.

## Установка

Из npm:

```bash
npm install --global @apo100l/mcp-jira-server
```

Либо запуск без глобальной установки:

```bash
npx --yes @apo100l/mcp-jira-server
```

Имя без области `mcp-jira-server` в npm принадлежит исходному проекту, поэтому эта версия публикуется как `@apo100l/mcp-jira-server`.

Из исходников:

```bash
git clone git@github.com:apo100l/mcp-jira-server.git
cd mcp-jira-server
npm install
npm run build
```

Собранная точка входа: `build/index.js`.

## Переменные окружения

| Переменная | Обязательность | Описание |
| --- | --- | --- |
| `JIRA_BASE_URL` | Да | Базовый URL Jira без `/rest/api/2`, например `https://jira.example.com` |
| `JIRA_AUTH_MODE` | Нет | Установите `browser`, чтобы автоматически получать cookies из постоянного Chrome-профиля |
| `JIRA_BROWSER_PROFILE` | Нет | Каталог отдельного Chrome-профиля; по умолчанию `~/.mcp-jira-server/chrome-profile` |
| `JIRA_BROWSER_CHANNEL` | Нет | Канал Playwright; по умолчанию `chrome` |
| `JIRA_BROWSER_HEADLESS` | Нет | `true` для фонового Chrome после первоначального входа; по умолчанию `false` |
| `JIRA_BROWSER_VALIDATION_TTL_SECONDS` | Нет | Период повторной проверки Jira-сессии; по умолчанию 60 секунд |
| `JIRA_COOKIE` | Один из способов авторизации | Полное значение HTTP-заголовка `Cookie` из авторизованной браузерной сессии |
| `JIRA_PAT` | Один из способов авторизации | Personal Access Token; используется, только если `JIRA_COOKIE` не задан |
| `JIRA_USER_AGENT` | Нет | Пользовательский `User-Agent`, если reverse proxy или SSO фильтрует запросы |

Для cookie-аутентификации сервер также отправляет `X-Atlassian-Token: no-check`, необходимый некоторым Jira-инсталляциям для изменяющих запросов.

## Настройка Codex

Добавьте сервер в `~/.codex/config.toml`:

Рекомендуемая настройка с автоматической браузерной сессией:

```toml
[mcp_servers.jira]
enabled = true
command = "node"
args = ["/absolute/path/to/mcp-jira-server/build/index.js"]

[mcp_servers.jira.env]
JIRA_BASE_URL = "https://jira.example.com"
JIRA_AUTH_MODE = "browser"
JIRA_BROWSER_PROFILE = "/absolute/private/path/jira-chrome-profile"
JIRA_BROWSER_CHANNEL = "chrome"
```

При первом обращении к Jira MCP откроет отдельное окно Chrome. Войдите в Jira через SSO и повторите запрос. Cookie сохранится в `JIRA_BROWSER_PROFILE`; копировать его в `config.toml` не требуется.

Настройка с cookie, переданным вручную:

```toml
[mcp_servers.jira]
enabled = true
command = "node"
args = ["/absolute/path/to/mcp-jira-server/build/index.js"]

[mcp_servers.jira.env]
JIRA_BASE_URL = "https://jira.example.com"
JIRA_COOKIE = 'JSESSIONID=...; another_cookie=...'
JIRA_USER_AGENT = "Mozilla/5.0"
```

Для PAT укажите:

```toml
JIRA_PAT = "your-personal-access-token"
```

После изменения конфигурации полностью перезапустите Codex, чтобы MCP-процесс получил новые переменные окружения.

## Автоматическая браузерная авторизация

Доступны два служебных инструмента:

- `jira_browser_login` — открывает Jira в отдельном постоянном Chrome-профиле;
- `jira_browser_auth_status` — проверяет, авторизован ли профиль.

Перед каждым Jira-запросом сервер получает актуальные cookies из профиля. Проверка `/rest/api/2/myself` выполняется не чаще заданного TTL. Если SSO-сессия истекла, сервер открывает Jira и просит повторно войти.

Не указывайте каталог основного профиля Chrome. Современный Chrome ограничивает автоматизацию основного профиля; отдельный каталог также уменьшает последствия компрометации MCP-процесса.

Папка профиля содержит секреты сессии. Не храните её внутри Git-репозитория и ограничьте к ней доступ на уровне ОС.

## Как получить cookie вручную

1. Авторизуйтесь в Jira в браузере.
2. Откройте Developer Tools → **Network**.
3. Перезагрузите страницу Jira.
4. Выберите запрос к Jira и откройте **Request Headers**.
5. Скопируйте полное значение заголовка `Cookie`, включая все пары `name=value`, разделённые `;`.
6. Поместите значение в `JIRA_COOKIE`.

Cookie является полноценным секретом доступа. Не публикуйте его, не добавляйте в Git и не отправляйте в сообщения. После завершения браузерной/SSO-сессии значение потребуется обновить.

## Настройка Claude Desktop

```json
{
  "mcpServers": {
    "jira": {
      "command": "node",
      "args": ["/absolute/path/to/mcp-jira-server/build/index.js"],
      "env": {
        "JIRA_BASE_URL": "https://jira.example.com",
        "JIRA_AUTH_MODE": "browser",
        "JIRA_BROWSER_PROFILE": "/absolute/private/path/jira-chrome-profile",
        "JIRA_BROWSER_CHANNEL": "chrome"
      }
    }
  }
}
```

## Доступные MCP-инструменты

| Инструмент | Назначение |
| --- | --- |
| `jira_browser_login` | Открытие постоянного Chrome-профиля для входа через SSO |
| `jira_browser_auth_status` | Проверка браузерной Jira-сессии |
| `jira_get_current_user` | Текущий авторизованный пользователь |
| `jira_get_issue` | Получение задачи по ключу |
| `jira_search_issues` | Поиск задач через JQL |
| `jira_create_issue` | Создание задачи |
| `jira_update_issue` | Обновление полей и смена статуса |
| `jira_add_comment` | Добавление комментария |
| `jira_get_comments` | Получение комментариев |
| `jira_get_projects` | Список доступных проектов |
| `jira_get_project` | Информация о проекте |
| `jira_get_issue_types` | Типы задач проекта |
| `jira_assign_issue` | Назначение исполнителя |
| `jira_delete_issue` | Безвозвратное удаление задачи |

## Проверка

После подключения начните с безопасных операций чтения:

1. вызовите `jira_get_current_user`;
2. вызовите `jira_get_projects`;
3. получите тестовую задачу через `jira_get_issue`.

Типичные ответы при ошибке авторизации:

- `401 Unauthorized` — cookie/PAT отсутствует, истёк или не принимается Jira;
- `404 Not Found` — обычно неверный `JIRA_BASE_URL`, старый MCP-процесс либо маршрут скрывается SSO/reverse proxy;
- HTML вместо JSON или редирект на страницу входа — браузерная сессия не прошла через SSO-прокси.

## Разработка

```bash
npm run build
npm run dev
```

## Версионирование и публикация

Проект использует Semantic Versioning: `patch` для исправлений, `minor` для обратно совместимых возможностей и `major` для несовместимых изменений.

Обновите `CHANGELOG.md`, затем создайте новую версию и тег одной из команд:

```bash
npm run release:patch
# npm run release:minor
# npm run release:major
git push origin main --follow-tags
```

Тег `vX.Y.Z` запускает GitHub Actions, который проверяет проект и публикует пакет в npm. Для автоматического выпуска добавьте секрет репозитория `NPM_TOKEN`, ограниченный пакетом `@apo100l/mcp-jira-server` и правом публикации.

Не добавляйте секреты в исходники. Для локальной разработки передавайте их только через переменные окружения или конфигурацию MCP-клиента.

## Происхождение и лицензия

Проект основан на [edrich13/mcp-jira-server](https://github.com/edrich13/mcp-jira-server) и расширен поддержкой Jira/SSO cookie-аутентификации.

Лицензия: MIT.

TDQS

A3.7/5.0

Scored across 12 tools

Disambiguation5/5

Each tool targets a distinct resource and action: issues, projects, comments, users, and issue types are clearly separated. There is no overlap between search/get/create/update/delete operations, making misselection unlikely.

Naming Consistency5/5

All tool names follow the consistent pattern jira_<verb>_<noun> using snake_case. The verbs are standard and predictable, such as get, create, update, delete, search, add, and assign, with no mixed conventions.

Tool Count5/5

12 tools is a well-scoped count for a Jira integration, covering core issue, project, and comment workflows without unnecessary bloat. Each tool serves a clear purpose within the domain.

Completeness4/5

The surface covers issue CRUD, searching, comments, project lookup, assignment, and user info, which handles common workflows well. A notable gap is the absence of issue transition/status-change functionality, which is core to Jira usage, though agents can work around it with update_issue in some cases.

Maintenance

ActivityMaintained
ResponsivenessNo issues