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.md +156 -145
- package/README.ru.md +147 -136
- package/docs/MCP.md +718 -0
- package/docs/MCP.ru.md +719 -0
- package/package.json +3 -2
- package/src/mcp/server.js +32 -28
- package/src/mcp/tools.js +294 -76
- package/src/nodebb/posts.js +72 -21
- package/src/nodebb/topics.js +121 -24
- package/src/nodebb/users.js +19 -4
- package/src/routes/api.js +297 -35
- package/src/routes/index.js +24 -31
package/README.ru.md
CHANGED
|
@@ -1,198 +1,209 @@
|
|
|
1
|
-
# NodeBB Integration
|
|
1
|
+
# NodeBB Integration
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Слой интеграции NodeBB с AI-сервисами и MCP.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
Плагин подключает NodeBB к семантическому поиску на базе искусственного интеллекта и предоставляет внешним AI-клиентам доступ к функциям форума через Model Context Protocol (MCP).
|
|
6
6
|
|
|
7
|
-
-
|
|
8
|
-
-
|
|
9
|
-
-
|
|
10
|
-
-
|
|
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
|
-
|
|
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
|
-
|
|
28
|
+
## Требования
|
|
26
29
|
|
|
27
|
-
|
|
30
|
+
- Node.js >= 22.
|
|
31
|
+
- npm >= 10.
|
|
32
|
+
- NodeBB 4.x.
|
|
33
|
+
- Работающий экземпляр NodeBB.
|
|
28
34
|
|
|
29
|
-
|
|
35
|
+
Для семантического поиска дополнительно необходимы:
|
|
30
36
|
|
|
31
|
-
-
|
|
32
|
-
-
|
|
33
|
-
- NodeBB 4.x
|
|
37
|
+
- API-ключ OpenAI.
|
|
38
|
+
- Доступный экземпляр Qdrant и настроенная коллекция, соответствующая используемой модели embeddings.
|
|
34
39
|
|
|
35
|
-
|
|
40
|
+
MCP может использоваться независимо от семантического поиска. Инструмент `search_knowledge` требует провайдера OpenAI и Qdrant.
|
|
36
41
|
|
|
37
42
|
## Установка
|
|
38
43
|
|
|
39
|
-
Установите плагин через интерфейс
|
|
44
|
+
Установите плагин через интерфейс администрирования NodeBB или стандартным способом установки плагинов NodeBB.
|
|
40
45
|
|
|
41
|
-
|
|
46
|
+
При ручной установке:
|
|
42
47
|
|
|
43
|
-
|
|
48
|
+
```bash
|
|
49
|
+
cd /path/to/nodebb
|
|
50
|
+
npm install nodebb-plugin-integration
|
|
51
|
+
```
|
|
44
52
|
|
|
45
|
-
|
|
53
|
+
Соберите NodeBB и перезапустите его стандартным способом, предусмотренным вашей установкой.
|
|
46
54
|
|
|
47
|
-
|
|
55
|
+
После установки откройте:
|
|
48
56
|
|
|
49
|
-
|
|
57
|
+
**NodeBB ACP → Plugins → NodeBB Integration**
|
|
50
58
|
|
|
51
|
-
|
|
59
|
+
Настройте необходимые параметры и сохраните настройки.
|
|
52
60
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
Включает:
|
|
56
|
-
- Генерацию embeddings через OpenAI
|
|
57
|
-
- Хранение векторов в Qdrant
|
|
58
|
-
- Индексацию сообщений
|
|
59
|
-
- Семантический поиск
|
|
60
|
-
- RAG-поиск
|
|
61
|
+
## Настройка
|
|
61
62
|
|
|
62
|
-
|
|
63
|
+
Настройки плагина выполняются через NodeBB ACP.
|
|
63
64
|
|
|
64
|
-
|
|
65
|
+
### AI-провайдер
|
|
65
66
|
|
|
66
|
-
|
|
67
|
-
- API OpenAI не вызывается.
|
|
68
|
-
- Qdrant не используется.
|
|
69
|
-
- Embeddings не создаются.
|
|
70
|
-
- Индексация сообщений отключена.
|
|
71
|
-
- Семантический поиск отключён.
|
|
67
|
+
Поддерживаются два режима:
|
|
72
68
|
|
|
73
|
-
|
|
69
|
+
- **OpenAI** — включает embeddings и семантический поиск.
|
|
70
|
+
- **Fake** — отключает обращения к OpenAI. Семантический поиск в этом режиме недоступен.
|
|
74
71
|
|
|
75
|
-
|
|
72
|
+
Для семантического поиска настройте API-ключ OpenAI, параметры embeddings и подключение к Qdrant в соответствии с вашей инфраструктурой.
|
|
76
73
|
|
|
77
|
-
|
|
74
|
+
### Поиск и индексация
|
|
78
75
|
|
|
79
|
-
|
|
76
|
+
Плагин использует embeddings для индексации содержимого форума, а Qdrant — для хранения и поиска векторов.
|
|
80
77
|
|
|
81
|
-
|
|
78
|
+
Результаты не возвращаются только на основании векторного сходства. Перед выдачей результата плагин проверяет, может ли настроенный пользователь NodeBB читать соответствующее сообщение и тему.
|
|
82
79
|
|
|
83
|
-
|
|
80
|
+
Параметр Excluded Categories позволяет исключить выбранные категории из семантического поиска.
|
|
84
81
|
|
|
85
|
-
|
|
82
|
+
Плагин проверяет метаданные найденных сообщений по данным NodeBB перед возвратом содержимого. Qdrant используется как векторный индекс; источником содержимого сообщений и информации о правах доступа остаётся NodeBB.
|
|
86
83
|
|
|
87
|
-
|
|
84
|
+
### MCP-сервер
|
|
88
85
|
|
|
89
|
-
|
|
86
|
+
Настройки MCP:
|
|
90
87
|
|
|
91
|
-
|
|
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
|
-
|
|
97
|
+
Настройки подключения MCP по умолчанию:
|
|
94
98
|
|
|
95
|
-
|
|
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
|
-
|
|
105
|
+
Адрес `127.0.0.1` по умолчанию ограничивает доступ к MCP локальным интерфейсом. Меняйте его только при осознанной необходимости удалённого доступа и при условии защиты сетевого подключения.
|
|
98
106
|
|
|
99
|
-
Плагин
|
|
107
|
+
Плагин автоматически генерирует отдельный случайный токен внутреннего API. Он отличается от Bearer-токена MCP-клиентов и не предназначен для передачи клиентам.
|
|
100
108
|
|
|
101
|
-
|
|
109
|
+
Настроенный сервисный пользователь является субъектом всех операций MCP. Клиент не может подменить UID пользователя, от имени которого выполняется операция.
|
|
102
110
|
|
|
103
|
-
## MCP
|
|
111
|
+
## MCP-инструменты
|
|
104
112
|
|
|
105
|
-
MCP-сервер
|
|
113
|
+
MCP-сервер предоставляет 15 инструментов:
|
|
106
114
|
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
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
|
-
|
|
133
|
+
Все операции записи используют нативные методы NodeBB и штатные проверки прав.
|
|
112
134
|
|
|
113
|
-
|
|
114
|
-
- Включение и отключение MCP
|
|
115
|
-
- Адрес привязки
|
|
116
|
-
- Порт
|
|
117
|
-
- URL NodeBB
|
|
118
|
-
- Bearer Token
|
|
119
|
-
- UID сервисного пользователя
|
|
135
|
+
Инструменты удаления выполняют логическое удаление, а не безвозвратное уничтожение данных. `delete_user_posts` пропускает первое сообщение каждой темы. Восстановление темы не восстанавливает автоматически сообщения, удалённые отдельно.
|
|
120
136
|
|
|
121
|
-
|
|
137
|
+
Полное описание аргументов, схем, значений по умолчанию, ограничений, результатов, прав доступа, пагинации и примеров:
|
|
122
138
|
|
|
123
|
-
|
|
139
|
+
- [Справочник MCP API (Русский)](docs/MCP.ru.md)
|
|
140
|
+
- [MCP API Reference (English)](docs/MCP.md)
|
|
124
141
|
|
|
125
|
-
|
|
126
|
-
- get_post — Получение сообщения после проверки прав доступа.
|
|
127
|
-
- get_topic — Получение темы после проверки прав доступа.
|
|
128
|
-
- get_user — Получение общедоступной информации о пользователе.
|
|
129
|
-
- search_knowledge — Поиск по проиндексированным данным форума.
|
|
142
|
+
## Безопасность
|
|
130
143
|
|
|
131
|
-
|
|
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
|
-
|
|
136
|
-
- Внутренние API-запросы используют отдельный секрет.
|
|
137
|
-
- Секреты не возвращаются в интерфейс ACP.
|
|
138
|
-
- Пустые поля секретов сохраняют ранее заданные значения.
|
|
139
|
-
- Идентификаторам пользователей, переданным MCP-клиентами, не доверяют.
|
|
140
|
-
- Для проверки прав используется настроенный сервисный пользователь.
|
|
141
|
-
- Права на сообщения и темы проверяются до возврата содержимого.
|
|
142
|
-
- При ошибке проверки доступа доступ запрещается.
|
|
143
|
-
- Payload Qdrant содержит идентификаторы и метаданные, но не текст сообщений.
|
|
156
|
+
## Разработка
|
|
144
157
|
|
|
145
|
-
|
|
158
|
+
Установка зависимостей:
|
|
146
159
|
|
|
147
|
-
|
|
160
|
+
```bash
|
|
161
|
+
npm install
|
|
162
|
+
```
|
|
148
163
|
|
|
149
|
-
|
|
164
|
+
Проверка синтаксиса:
|
|
150
165
|
|
|
151
|
-
|
|
166
|
+
```bash
|
|
167
|
+
npm run check
|
|
168
|
+
```
|
|
152
169
|
|
|
153
|
-
Запуск тестов:
|
|
170
|
+
Запуск тестов:
|
|
154
171
|
|
|
172
|
+
```bash
|
|
173
|
+
npm test
|
|
174
|
+
```
|
|
155
175
|
|
|
156
|
-
Тесты
|
|
176
|
+
Тесты охватывают аутентификацию API, обработчики API, проверку аргументов и работу MCP-инструментов.
|
|
157
177
|
|
|
158
178
|
## Структура проекта
|
|
159
179
|
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
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
|
|