nodebb-plugin-integration 0.4.4 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.ru.md CHANGED
@@ -1,198 +1,209 @@
1
- # NodeBB Integration Layer
1
+ # NodeBB Integration
2
2
 
3
- Плагин интеграции с форумами NodeBB, предоставляющий MCP (Model Context Protocol), семантический поиск на базе AI, RAG-поиск и хранение векторов в Qdrant.
3
+ Слой интеграции NodeBB с AI-сервисами и MCP.
4
4
 
5
- ## Возможности
5
+ Плагин подключает NodeBB к семантическому поиску на базе искусственного интеллекта и предоставляет внешним AI-клиентам доступ к функциям форума через Model Context Protocol (MCP).
6
6
 
7
- - Интеграция с NodeBB
8
- - MCP-сервер с транспортом Streamable HTTP
9
- - Отдельный дочерний процесс MCP под управлением NodeBB
10
- - Аутентификация MCP-клиентов по Bearer Token
11
- - Внутренняя аутентификация API между MCP и NodeBB
12
- - Генерация embeddings через OpenAI
13
- - Хранение векторов и семантический поиск в Qdrant
14
- - RAG-поиск с проверкой прав доступа NodeBB
15
- - Индексация каждого сообщения отдельно, включая ответы
16
- - Настройка исключённых категорий
17
- - Режимы AI-провайдера OpenAI и Fake
18
- - Интерфейс настройки в ACP
19
- - Автоматизированные тесты
7
+ - **Версия:** 0.6.0
8
+ - **Лицензия:** MIT
9
+ - **NodeBB:** 4.x
10
+ - **Node.js:** >= 22
20
11
 
21
- ## Архитектура
12
+ ## Возможности
22
13
 
23
- NodeBB → Integration Plugin → MCP / AI
14
+ - MCP-сервер с транспортом Streamable HTTP.
15
+ - Отдельный дочерний процесс MCP под управлением плагина.
16
+ - Аутентификация MCP-клиентов по Bearer-токену.
17
+ - Отдельный токен аутентификации внутреннего API NodeBB.
18
+ - Настройка адреса прослушивания, порта MCP и сервисного аккаунта.
19
+ - 15 MCP-инструментов для получения информации о форуме, чтения, поиска и управления содержимым.
20
+ - Создание векторных представлений (embeddings) с помощью OpenAI и семантический поиск.
21
+ - Интеграция с векторной базой данных Qdrant.
22
+ - Фильтрация результатов с учётом прав доступа NodeBB.
23
+ - Индексация отдельных сообщений и исключение категорий.
24
+ - Режимы AI-провайдера OpenAI и Fake.
25
+ - Интерфейс настройки в NodeBB ACP.
26
+ - Автоматические тесты обработчиков API и MCP-инструментов.
24
27
 
25
- MCP: Streamable HTTP → MCP Child Process → Internal NodeBB API → NodeBB Access Control
28
+ ## Требования
26
29
 
27
- AI: OpenAI → Embeddings → Qdrant → Vector Search → Knowledge Retrieval
30
+ - Node.js >= 22.
31
+ - npm >= 10.
32
+ - NodeBB 4.x.
33
+ - Работающий экземпляр NodeBB.
28
34
 
29
- ## Требования
35
+ Для семантического поиска дополнительно необходимы:
30
36
 
31
- - Node.js >= 20
32
- - npm >= 10
33
- - NodeBB 4.x
37
+ - API-ключ OpenAI.
38
+ - Доступный экземпляр Qdrant и настроенная коллекция, соответствующая используемой модели embeddings.
34
39
 
35
- Для работы AI необходимы API-ключ OpenAI и сервер Qdrant. Для работы MCP необходим запущенный экземпляр NodeBB.
40
+ MCP может использоваться независимо от семантического поиска. Инструмент `search_knowledge` требует провайдера OpenAI и Qdrant.
36
41
 
37
42
  ## Установка
38
43
 
39
- Установите плагин через интерфейс управления плагинами NodeBB или используйте обычную процедуру установки плагинов.
44
+ Установите плагин через интерфейс администрирования NodeBB или стандартным способом установки плагинов NodeBB.
40
45
 
41
- Установите зависимости командой npm install в каталоге плагина.
46
+ При ручной установке:
42
47
 
43
- Перезапустите NodeBB и откройте настройки плагина: ACP → Plugins → NodeBB Integration.
48
+ ```bash
49
+ cd /path/to/nodebb
50
+ npm install nodebb-plugin-integration
51
+ ```
44
52
 
45
- ## Настройка
53
+ Соберите NodeBB и перезапустите его стандартным способом, предусмотренным вашей установкой.
46
54
 
47
- Плагин настраивается через интерфейс ACP NodeBB.
55
+ После установки откройте:
48
56
 
49
- ### AI-провайдер
57
+ **NodeBB ACP → Plugins → NodeBB Integration**
50
58
 
51
- Доступны два режима.
59
+ Настройте необходимые параметры и сохраните настройки.
52
60
 
53
- **OpenAI**
54
-
55
- Включает:
56
- - Генерацию embeddings через OpenAI
57
- - Хранение векторов в Qdrant
58
- - Индексацию сообщений
59
- - Семантический поиск
60
- - RAG-поиск
61
+ ## Настройка
61
62
 
62
- Настраиваются API-ключ OpenAI, модель и размерность embeddings, URL Qdrant и имя коллекции.
63
+ Настройки плагина выполняются через NodeBB ACP.
63
64
 
64
- **Fake**
65
+ ### AI-провайдер
65
66
 
66
- Полностью отключает функциональность AI:
67
- - API OpenAI не вызывается.
68
- - Qdrant не используется.
69
- - Embeddings не создаются.
70
- - Индексация сообщений отключена.
71
- - Семантический поиск отключён.
67
+ Поддерживаются два режима:
72
68
 
73
- Интеграция с NodeBB и MCP продолжают работать.
69
+ - **OpenAI** — включает embeddings и семантический поиск.
70
+ - **Fake** — отключает обращения к OpenAI. Семантический поиск в этом режиме недоступен.
74
71
 
75
- Настройки OpenAI и Qdrant сохраняются при переключении провайдеров. Повторный выбор OpenAI снова включает AI-конвейер.
72
+ Для семантического поиска настройте API-ключ OpenAI, параметры embeddings и подключение к Qdrant в соответствии с вашей инфраструктурой.
76
73
 
77
- Режим Fake предназначен для разработки и тестирования интеграции NodeBB и MCP без внешних AI-сервисов.
74
+ ### Поиск и индексация
78
75
 
79
- ### Исключённые категории
76
+ Плагин использует embeddings для индексации содержимого форума, а Qdrant — для хранения и поиска векторов.
80
77
 
81
- Категории, выбранные в ACP, исключаются из AI-индексации и семантического поиска.
78
+ Результаты не возвращаются только на основании векторного сходства. Перед выдачей результата плагин проверяет, может ли настроенный пользователь NodeBB читать соответствующее сообщение и тему.
82
79
 
83
- ## AI-конвейер
80
+ Параметр Excluded Categories позволяет исключить выбранные категории из семантического поиска.
84
81
 
85
- При включённом OpenAI обработка выполняется следующим образом:
82
+ Плагин проверяет метаданные найденных сообщений по данным NodeBB перед возвратом содержимого. Qdrant используется как векторный индекс; источником содержимого сообщений и информации о правах доступа остаётся NodeBB.
86
83
 
87
- Сообщение форума → Генерация Embeddings → Сохранение векторов в Qdrant → Семантический поиск → Проверка прав доступа NodeBB → Получение содержимого сообщений
84
+ ### MCP-сервер
88
85
 
89
- Каждое сообщение индексируется отдельно, включая ответы.
86
+ Настройки MCP:
90
87
 
91
- Результаты поиска проверяются на соответствие правам NodeBB до получения содержимого сообщений. Сообщения и темы, недоступные сервисному пользователю, исключаются из результатов.
88
+ | Параметр | Описание |
89
+ |---|---|
90
+ | Enable MCP | Включение и выключение MCP-сервера |
91
+ | Bind address | Адрес, на котором слушает HTTP-сервер MCP |
92
+ | Port | HTTP-порт MCP |
93
+ | NodeBB URL | Внутренний URL NodeBB для доступа процесса MCP |
94
+ | Bearer token | Токен аутентификации MCP-клиентов |
95
+ | Service user UID | NodeBB-аккаунт для проверок прав и операций записи |
92
96
 
93
- Qdrant хранит только векторы и метаданные. Текст сообщений извлекается из NodeBB после проверки прав доступа.
97
+ Настройки подключения MCP по умолчанию:
94
98
 
95
- ## Qdrant
99
+ ```text
100
+ Bind address: 127.0.0.1
101
+ Port: 3100
102
+ NodeBB URL: http://127.0.0.1:4567
103
+ ```
96
104
 
97
- Через ACP задаются URL Qdrant, имя коллекции и размерность векторов.
105
+ Адрес `127.0.0.1` по умолчанию ограничивает доступ к MCP локальным интерфейсом. Меняйте его только при осознанной необходимости удалённого доступа и при условии защиты сетевого подключения.
98
106
 
99
- Плагин проверяет наличие коллекции и создаёт её при необходимости.
107
+ Плагин автоматически генерирует отдельный случайный токен внутреннего API. Он отличается от Bearer-токена MCP-клиентов и не предназначен для передачи клиентам.
100
108
 
101
- При выборе Fake обращения к Qdrant не выполняются.
109
+ Настроенный сервисный пользователь является субъектом всех операций MCP. Клиент не может подменить UID пользователя, от имени которого выполняется операция.
102
110
 
103
- ## MCP-сервер
111
+ ## MCP-инструменты
104
112
 
105
- MCP-сервер управляется плагином NodeBB и работает в отдельном дочернем процессе.
113
+ MCP-сервер предоставляет 15 инструментов:
106
114
 
107
- Транспорт:
108
- - Streamable HTTP
109
- - Аутентификация Bearer Token
115
+ | Инструмент | Описание |
116
+ |---|---|
117
+ | `get_forum_info` | Получение общедоступной информации о форуме |
118
+ | `get_post` | Чтение сообщения |
119
+ | `get_topic` | Получение метаданных темы |
120
+ | `get_user` | Получение публичных полей профиля пользователя |
121
+ | `search_knowledge` | Семантический поиск по содержимому форума |
122
+ | `create_topic` | Создание темы |
123
+ | `delete_topic` | Логическое удаление темы |
124
+ | `restore_topic` | Восстановление темы |
125
+ | `list_topics` | Получение списка доступных тем |
126
+ | `create_post` | Создание ответа |
127
+ | `edit_post` | Редактирование сообщения |
128
+ | `delete_post` | Логическое удаление сообщения |
129
+ | `restore_post` | Восстановление сообщения |
130
+ | `delete_user_posts` | Пакетное логическое удаление ответов пользователя |
131
+ | `list_posts` | Получение сообщений темы |
110
132
 
111
- MCP-сервер взаимодействует с NodeBB через защищённый внутренний API. Для него используется отдельный секрет, управляемый плагином.
133
+ Все операции записи используют нативные методы NodeBB и штатные проверки прав.
112
134
 
113
- В ACP настраиваются:
114
- - Включение и отключение MCP
115
- - Адрес привязки
116
- - Порт
117
- - URL NodeBB
118
- - Bearer Token
119
- - UID сервисного пользователя
135
+ Инструменты удаления выполняют логическое удаление, а не безвозвратное уничтожение данных. `delete_user_posts` пропускает первое сообщение каждой темы. Восстановление темы не восстанавливает автоматически сообщения, удалённые отдельно.
120
136
 
121
- UID сервисного пользователя задаётся администратором. MCP-клиенты не могут его переопределять.
137
+ Полное описание аргументов, схем, значений по умолчанию, ограничений, результатов, прав доступа, пагинации и примеров:
122
138
 
123
- ### Доступные инструменты
139
+ - [Справочник MCP API (Русский)](docs/MCP.ru.md)
140
+ - [MCP API Reference (English)](docs/MCP.md)
124
141
 
125
- - get_forum_info — Получение общедоступной информации о форуме.
126
- - get_post — Получение сообщения после проверки прав доступа.
127
- - get_topic — Получение темы после проверки прав доступа.
128
- - get_user — Получение общедоступной информации о пользователе.
129
- - search_knowledge — Поиск по проиндексированным данным форума.
142
+ ## Безопасность
130
143
 
131
- Для search_knowledge необходим провайдер OpenAI. В режиме Fake инструмент возвращает явную ошибку о выключенном AI.
144
+ - MCP-клиенты должны проходить Bearer-аутентификацию.
145
+ - Внутренний API NodeBB использует отдельный автоматически сгенерированный токен.
146
+ - Внутренние маршруты API требуют аутентификации и недоступны при выключенном MCP.
147
+ - Адрес прослушивания MCP по умолчанию — `127.0.0.1`.
148
+ - Права MCP-операций определяются настроенным сервисным пользователем.
149
+ - Операции чтения выполняют проверки доступа NodeBB.
150
+ - Семантический поиск фильтрует результаты с учётом прав сервисного пользователя.
151
+ - Публичный поиск пользователей возвращает только выбранные поля профиля.
152
+ - Секретные значения не включаются в публичную информацию о конфигурации плагина.
132
153
 
133
- ## Безопасность
154
+ Используйте отдельную учётную запись NodeBB с минимально необходимыми правами. Не раскрывайте токен внутреннего API.
134
155
 
135
- - MCP-клиенты проходят аутентификацию по Bearer Token.
136
- - Внутренние API-запросы используют отдельный секрет.
137
- - Секреты не возвращаются в интерфейс ACP.
138
- - Пустые поля секретов сохраняют ранее заданные значения.
139
- - Идентификаторам пользователей, переданным MCP-клиентами, не доверяют.
140
- - Для проверки прав используется настроенный сервисный пользователь.
141
- - Права на сообщения и темы проверяются до возврата содержимого.
142
- - При ошибке проверки доступа доступ запрещается.
143
- - Payload Qdrant содержит идентификаторы и метаданные, но не текст сообщений.
156
+ ## Разработка
144
157
 
145
- Не добавляйте API-ключи, токены и другие секреты в систему контроля версий.
158
+ Установка зависимостей:
146
159
 
147
- ## Разработка и тестирование
160
+ ```bash
161
+ npm install
162
+ ```
148
163
 
149
- Установка зависимостей: npm install
164
+ Проверка синтаксиса:
150
165
 
151
- Проверка синтаксиса: npm run check
166
+ ```bash
167
+ npm run check
168
+ ```
152
169
 
153
- Запуск тестов: npm test
170
+ Запуск тестов:
154
171
 
172
+ ```bash
173
+ npm test
174
+ ```
155
175
 
156
- Тесты проверяют конфигурацию, аргументы MCP-инструментов и другие компоненты плагина.
176
+ Тесты охватывают аутентификацию API, обработчики API, проверку аргументов и работу MCP-инструментов.
157
177
 
158
178
  ## Структура проекта
159
179
 
160
- library.js
161
- package.json
162
- plugin.json
163
- public/
164
- js/admin.js
165
- templates/admin/plugins/integration.tpl
166
- src/
167
- ai/
168
- embeddings.js
169
- indexer.js
170
- openai.js
171
- qdrant.js
172
- search.js
173
- config/
174
- index.js
175
- validation.js
176
- events/
177
- index.js
178
- mcp/
179
- manager.js
180
- server.js
181
- tools.js
182
- nodebb/
183
- categories.js
184
- index.js
185
- meta.js
186
- posts.js
187
- privileges.js
188
- topics.js
189
- users.js
190
- routes/
191
- api.js
192
- index.js
193
- test/
194
- config-validation.test.js
195
- mcp-tools.test.js
180
+ ```text
181
+ .
182
+ ├── library.js
183
+ ├── plugin.json
184
+ ├── package.json
185
+ ├── README.md
186
+ ├── README.ru.md
187
+ ├── docs/
188
+ │ ├── MCP.md
189
+ │ └── MCP.ru.md
190
+ ├── src/
191
+ │ ├── ai/
192
+ │ ├── config/
193
+ │ ├── mcp/
194
+ │ ├── nodebb/
195
+ │ └── routes/
196
+ ├── public/
197
+ ├── languages/
198
+ └── test/
199
+ ```
200
+
201
+ ## Совместимость
202
+
203
+ Плагин предназначен для NodeBB 4.x.
204
+ Версия 0.6.0 протестирована с NodeBB 4.16.7.
205
+
206
+ Плагину требуется Node.js >= 22. Набор полей нативных ответов может отличаться между версиями NodeBB.
196
207
 
197
208
  ## Лицензия
198
209