Skip to main content
Glama
README.md
# mcp-confluence

MCP-сервер для **Confluence Server / Data Center (Self-Hosted)** с авторизацией по Personal Access Token. Даёт LLM-агенту доступ к поиску, чтению, созданию/редактированию страниц, комментариям, меткам и вложениям.

> Работает с Confluence Server/DC REST API (`/rest/api`). Для Confluence Cloud API отличается — этот сервер ориентирован именно на self-hosted.

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

| Инструмент | Назначение |
| --- | --- |
| `confluence_search` | Поиск по CQL |
| `confluence_get_page` | Страница по ID (тело в storage-формате, версия, метки) |
| `confluence_get_page_by_title` | Страница по пространству + заголовку |
| `confluence_list_spaces` | Список пространств |
| `confluence_get_child_pages` | Дочерние страницы |
| `confluence_create_page` | Создать страницу |
| `confluence_update_page` | Обновить (версия инкрементируется автоматически) |
| `confluence_delete_page` | Удалить страницу |
| `confluence_add_comment` | Добавить комментарий |
| `confluence_get_labels` / `confluence_add_labels` / `confluence_remove_label` | Метки |
| `confluence_list_attachments` | Список вложений |
| `confluence_upload_attachment` | Загрузить файл как вложение |
| `confluence_download_attachment` | Скачать вложение на диск |

## Установка

```bash
npm install
npm run build
```

## Настройка

### Вариант A — веб-панель (проще)

```bash
npm run config
```

Откройте <http://127.0.0.1:4321>. Форма позволяет:

- заполнить все поля (Base URL, PAT либо логин/пароль, TLS);
- **проверить подключение** одной кнопкой (запрос к вашему Confluence);
- сохранить `.env` в корень проекта;
- скопировать готовый JSON-конфиг для Claude.

Панель слушает только `127.0.0.1` и наружу не доступна.

### Вариант B — вручную

Скопируйте `.env.example` в `.env` и заполните, либо задайте переменные окружения:

| Переменная | Обязательна | Описание |
| --- | --- | --- |
| `CONFLUENCE_BASE_URL` | да | URL инстанса, например `https://confluence.company.local` |
| `CONFLUENCE_PAT` | да* | Personal Access Token (рекомендуемый способ) |
| `CONFLUENCE_USERNAME` + `CONFLUENCE_PASSWORD` | да* | Basic Auth (fallback, если PAT не задан) |
| `CONFLUENCE_TLS_REJECT_UNAUTHORIZED` | нет | `false` — не проверять TLS (для self-signed) |

\* Нужен либо `CONFLUENCE_PAT`, либо пара логин/пароль.

**Как получить PAT:** в Confluence → аватар → *Settings* → *Personal Access Tokens* → *Create token*.

## Подключение к Claude Code / Claude Desktop

Добавьте в конфиг MCP-клиента:

```json
{
  "mcpServers": {
    "confluence": {
      "command": "node",
      "args": ["G:/Portfolio/mcp-confluence/dist/index.js"],
      "env": {
        "CONFLUENCE_BASE_URL": "https://confluence.company.local",
        "CONFLUENCE_PAT": "your-personal-access-token"
      }
    }
  }
}
```

Для Claude Code также можно быстрее:

```bash
claude mcp add confluence -- node G:/Portfolio/mcp-confluence/dist/index.js
```

(предварительно задав переменные окружения или прописав их через `-e KEY=value`).

## Docker

Образ собирается multi-stage (сборка TypeScript → лёгкий `node:22-alpine` рантайм, ~260 МБ, запуск от непривилегированного пользователя `node`).

```bash
docker build -t mcp-confluence:latest .
```

**MCP-сервер (stdio)** — MCP-клиент запускает контейнер сам. Пример для Claude Code:

```bash
claude mcp add confluence -- \
  docker run --rm -i \
    -e CONFLUENCE_BASE_URL=https://confluence.company.local \
    -e CONFLUENCE_PAT=your-token \
    mcp-confluence:latest
```

Ключевой флаг — `-i` (interactive): протокол MCP идёт через stdin/stdout.

**Веб-панель настройки** — нужен проброс порта и `CONFIG_UI_HOST=0.0.0.0`:

```bash
docker run --rm -p 4321:4321 -e CONFIG_UI_HOST=0.0.0.0 \
  -v "$(pwd)/.env:/app/.env" \
  mcp-confluence:latest dist/web.js
```

Или через compose:

```bash
docker compose up   # поднимет панель на http://localhost:4321
```

> `.env` внутри контейнера эфемерен — смонтируйте его томом (как выше), чтобы сохранённые настройки не пропали.

## О формате тела страниц

Confluence хранит контент в **storage-формате** (XHTML с макросами). Примеры:

```html
<p>Обычный абзац</p>
<h2>Заголовок</h2>
<ac:structured-macro ac:name="info">
  <ac:rich-text-body><p>Инфо-блок</p></ac:rich-text-body>
</ac:structured-macro>
```

При создании/обновлении страниц передавайте тело именно в этом формате.

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

```bash
npm run dev   # tsc в watch-режиме
```

## Лицензия

MIT

TDQS

A3.5/5.0

Scored across 15 tools

Disambiguation5/5

Every tool targets a distinct resource and action, with clear descriptions. No overlap between page, label, comment, attachment, and search tools.

Naming Consistency5/5

All tools follow the consistent `confluence_<verb>_<noun>` pattern, with verbs like add, create, delete, get, list, remove, search, update, upload.

Tool Count5/5

15 tools is appropriate for a Confluence integration, covering all major resource types without being excessive or insufficient.

Completeness4/5

Covers CRUD for pages, labels, attachments, and comments, plus search and spaces listing. Missing comment update/delete, but these are minor gaps.

Maintenance

ActivityInactive
ResponsivenessNo issues