mcp-server-rocketchat-threads 1.0.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/LICENSE +21 -0
- package/README.md +332 -0
- package/dist/api/client.d.ts +119 -0
- package/dist/api/client.d.ts.map +1 -0
- package/dist/api/client.js +305 -0
- package/dist/api/client.js.map +1 -0
- package/dist/api/index.d.ts +6 -0
- package/dist/api/index.d.ts.map +1 -0
- package/dist/api/index.js +22 -0
- package/dist/api/index.js.map +1 -0
- package/dist/api/schemas.d.ts +10636 -0
- package/dist/api/schemas.d.ts.map +1 -0
- package/dist/api/schemas.js +267 -0
- package/dist/api/schemas.js.map +1 -0
- package/dist/api/types.d.ts +263 -0
- package/dist/api/types.d.ts.map +1 -0
- package/dist/api/types.js +7 -0
- package/dist/api/types.js.map +1 -0
- package/dist/config/config.d.ts +37 -0
- package/dist/config/config.d.ts.map +1 -0
- package/dist/config/config.js +79 -0
- package/dist/config/config.js.map +1 -0
- package/dist/config/index.d.ts +5 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +21 -0
- package/dist/config/index.js.map +1 -0
- package/dist/di/container.d.ts +101 -0
- package/dist/di/container.d.ts.map +1 -0
- package/dist/di/container.js +214 -0
- package/dist/di/container.js.map +1 -0
- package/dist/di/index.d.ts +6 -0
- package/dist/di/index.d.ts.map +1 -0
- package/dist/di/index.js +12 -0
- package/dist/di/index.js.map +1 -0
- package/dist/formatters/index.d.ts +6 -0
- package/dist/formatters/index.d.ts.map +1 -0
- package/dist/formatters/index.js +22 -0
- package/dist/formatters/index.js.map +1 -0
- package/dist/formatters/message-formatter.d.ts +64 -0
- package/dist/formatters/message-formatter.d.ts.map +1 -0
- package/dist/formatters/message-formatter.js +161 -0
- package/dist/formatters/message-formatter.js.map +1 -0
- package/dist/formatters/response-builder.d.ts +60 -0
- package/dist/formatters/response-builder.d.ts.map +1 -0
- package/dist/formatters/response-builder.js +108 -0
- package/dist/formatters/response-builder.js.map +1 -0
- package/dist/guards/index.d.ts +12 -0
- package/dist/guards/index.d.ts.map +1 -0
- package/dist/guards/index.js +42 -0
- package/dist/guards/index.js.map +1 -0
- package/dist/guards/input-validator.d.ts +89 -0
- package/dist/guards/input-validator.d.ts.map +1 -0
- package/dist/guards/input-validator.js +266 -0
- package/dist/guards/input-validator.js.map +1 -0
- package/dist/guards/rate-limiter.d.ts +115 -0
- package/dist/guards/rate-limiter.d.ts.map +1 -0
- package/dist/guards/rate-limiter.js +226 -0
- package/dist/guards/rate-limiter.js.map +1 -0
- package/dist/guards/sanitizer.d.ts +35 -0
- package/dist/guards/sanitizer.d.ts.map +1 -0
- package/dist/guards/sanitizer.js +111 -0
- package/dist/guards/sanitizer.js.map +1 -0
- package/dist/guards/write-guard.d.ts +33 -0
- package/dist/guards/write-guard.d.ts.map +1 -0
- package/dist/guards/write-guard.js +90 -0
- package/dist/guards/write-guard.js.map +1 -0
- package/dist/http-server.d.ts +9 -0
- package/dist/http-server.d.ts.map +1 -0
- package/dist/http-server.js +190 -0
- package/dist/http-server.js.map +1 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +114 -0
- package/dist/index.js.map +1 -0
- package/dist/tools/base.d.ts +85 -0
- package/dist/tools/base.d.ts.map +1 -0
- package/dist/tools/base.js +184 -0
- package/dist/tools/base.js.map +1 -0
- package/dist/tools/channel-tools.d.ts +18 -0
- package/dist/tools/channel-tools.d.ts.map +1 -0
- package/dist/tools/channel-tools.js +151 -0
- package/dist/tools/channel-tools.js.map +1 -0
- package/dist/tools/handler-utils.d.ts +75 -0
- package/dist/tools/handler-utils.d.ts.map +1 -0
- package/dist/tools/handler-utils.js +105 -0
- package/dist/tools/handler-utils.js.map +1 -0
- package/dist/tools/index.d.ts +17 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +40 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/message-tools.d.ts +20 -0
- package/dist/tools/message-tools.d.ts.map +1 -0
- package/dist/tools/message-tools.js +194 -0
- package/dist/tools/message-tools.js.map +1 -0
- package/dist/tools/thread-tools.d.ts +23 -0
- package/dist/tools/thread-tools.d.ts.map +1 -0
- package/dist/tools/thread-tools.js +243 -0
- package/dist/tools/thread-tools.js.map +1 -0
- package/dist/tools/user-tools.d.ts +14 -0
- package/dist/tools/user-tools.d.ts.map +1 -0
- package/dist/tools/user-tools.js +120 -0
- package/dist/tools/user-tools.js.map +1 -0
- package/dist/tools/write-tools.d.ts +15 -0
- package/dist/tools/write-tools.d.ts.map +1 -0
- package/dist/tools/write-tools.js +181 -0
- package/dist/tools/write-tools.js.map +1 -0
- package/dist/utils/cache.d.ts +47 -0
- package/dist/utils/cache.d.ts.map +1 -0
- package/dist/utils/cache.js +116 -0
- package/dist/utils/cache.js.map +1 -0
- package/dist/utils/error-handler.d.ts +64 -0
- package/dist/utils/error-handler.d.ts.map +1 -0
- package/dist/utils/error-handler.js +148 -0
- package/dist/utils/error-handler.js.map +1 -0
- package/dist/utils/index.d.ts +12 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +33 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/logger.d.ts +50 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +118 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/time-parser.d.ts +37 -0
- package/dist/utils/time-parser.d.ts.map +1 -0
- package/dist/utils/time-parser.js +98 -0
- package/dist/utils/time-parser.js.map +1 -0
- package/dist/utils/token-counter.d.ts +42 -0
- package/dist/utils/token-counter.d.ts.map +1 -0
- package/dist/utils/token-counter.js +81 -0
- package/dist/utils/token-counter.js.map +1 -0
- package/package.json +68 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2024
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,332 @@
|
|
|
1
|
+
# Rocket.Chat Threads MCP
|
|
2
|
+
|
|
3
|
+
[](https://opensource.org/licenses/MIT)
|
|
4
|
+
[](https://www.typescriptlang.org/)
|
|
5
|
+
[](https://modelcontextprotocol.io/)
|
|
6
|
+
|
|
7
|
+
[English](#english) | [한국어](#한국어) | [日本語](#日本語) | [中文](#中文)
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## English
|
|
12
|
+
|
|
13
|
+
MCP (Model Context Protocol) server for Rocket.Chat with **full thread support** - search, list, and retrieve thread discussions.
|
|
14
|
+
|
|
15
|
+
### Why This MCP?
|
|
16
|
+
|
|
17
|
+
Unlike basic chat integrations, this MCP focuses on **thread-based conversations**:
|
|
18
|
+
|
|
19
|
+
| Feature | Basic MCP | Threads MCP |
|
|
20
|
+
|---------|-----------|---------------|
|
|
21
|
+
| Thread Support | No | Full (list/get/search) |
|
|
22
|
+
| Search Thread Replies | No | Yes |
|
|
23
|
+
| Time Filtering | No | 1d, 7d, 1w, 1m |
|
|
24
|
+
| Auth Method | Password | Token (secure) |
|
|
25
|
+
| Write Protection | Always on | Off by default |
|
|
26
|
+
| @all Prevention | No | Auto-blocked |
|
|
27
|
+
| Rate Limiting | No | Yes |
|
|
28
|
+
| Unit Tests | No | 231 tests |
|
|
29
|
+
|
|
30
|
+
### Features
|
|
31
|
+
|
|
32
|
+
- **Thread-Centric**: Threads as the unit of discussions and decisions
|
|
33
|
+
- **Deep Search**: Search within thread replies, not just parent messages
|
|
34
|
+
- **Time Filtering**: Filter by `1d`, `7d`, `1w`, `1m` or date ranges
|
|
35
|
+
- **Safe Writes**: Disabled by default, @mentions auto-neutralized
|
|
36
|
+
- **Type-Safe**: Full TypeScript with Zod validation
|
|
37
|
+
|
|
38
|
+
### Installation
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
git clone https://github.com/huiseo/rocketchat-threads-mcp.git
|
|
42
|
+
cd rocketchat-threads-mcp
|
|
43
|
+
npm install
|
|
44
|
+
npm run build
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
### Configuration
|
|
48
|
+
|
|
49
|
+
```env
|
|
50
|
+
ROCKETCHAT_URL=https://your-rocketchat-server.com
|
|
51
|
+
ROCKETCHAT_AUTH_TOKEN=your-auth-token
|
|
52
|
+
ROCKETCHAT_USER_ID=your-user-id
|
|
53
|
+
|
|
54
|
+
# Optional: Enable writes (disabled by default)
|
|
55
|
+
ROCKETCHAT_WRITE_ENABLED=true
|
|
56
|
+
ROCKETCHAT_WRITE_ROOMS=general,dev-team
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
### Claude Desktop Setup
|
|
60
|
+
|
|
61
|
+
Add to `~/.config/claude/claude_desktop_config.json`:
|
|
62
|
+
|
|
63
|
+
```json
|
|
64
|
+
{
|
|
65
|
+
"mcpServers": {
|
|
66
|
+
"rocketchat": {
|
|
67
|
+
"command": "node",
|
|
68
|
+
"args": ["/path/to/rocketchat-threads-mcp/dist/index.js"],
|
|
69
|
+
"env": {
|
|
70
|
+
"ROCKETCHAT_URL": "https://your-server.com",
|
|
71
|
+
"ROCKETCHAT_AUTH_TOKEN": "your-token",
|
|
72
|
+
"ROCKETCHAT_USER_ID": "your-user-id"
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
### Available Tools
|
|
80
|
+
|
|
81
|
+
| Tool | Description |
|
|
82
|
+
|------|-------------|
|
|
83
|
+
| `rocketchat_list_channels` | List accessible channels |
|
|
84
|
+
| `rocketchat_search_channels` | Search channels by name |
|
|
85
|
+
| `rocketchat_get_channel_info` | Get channel details |
|
|
86
|
+
| `rocketchat_get_messages` | Get messages with time filtering |
|
|
87
|
+
| `rocketchat_search_messages` | Search message content |
|
|
88
|
+
| `rocketchat_get_message` | Get specific message |
|
|
89
|
+
| `rocketchat_list_threads` | List threads in channel |
|
|
90
|
+
| `rocketchat_get_thread` | Get thread with all replies |
|
|
91
|
+
| `rocketchat_search_threads` | Search within thread replies |
|
|
92
|
+
| `rocketchat_lookup_user` | Find user info |
|
|
93
|
+
| `rocketchat_list_users` | List users |
|
|
94
|
+
| `rocketchat_get_me` | Get current user |
|
|
95
|
+
| `rocketchat_send_message` | Send message (opt-in) |
|
|
96
|
+
| `rocketchat_react` | Add reaction (opt-in) |
|
|
97
|
+
| `rocketchat_get_write_status` | Check write permissions |
|
|
98
|
+
|
|
99
|
+
### Optional: OpenSearch Integration
|
|
100
|
+
|
|
101
|
+
This MCP works with or without OpenSearch on your Rocket.Chat server:
|
|
102
|
+
|
|
103
|
+
| Feature | Without OpenSearch | With OpenSearch |
|
|
104
|
+
|---------|-------------------|-----------------|
|
|
105
|
+
| Channel-specific search | ✅ Works | ✅ Works |
|
|
106
|
+
| Global search (no roomId) | ❌ Requires roomId | ✅ Works |
|
|
107
|
+
| Search highlighting | ❌ | ✅ `<mark>` tags |
|
|
108
|
+
| Multi-language search | Limited | ✅ Full support |
|
|
109
|
+
|
|
110
|
+
**How to check:** Try `rocketchat_search_messages` without roomId. If it works, OpenSearch is enabled.
|
|
111
|
+
|
|
112
|
+
**For server administrators:** To enable OpenSearch with Docker, see [rocketchat-enhanced](https://github.com/huiseo/rocketchat-enhanced) - a single Docker package with RocketChat + OpenSearch + real-time indexing.
|
|
113
|
+
|
|
114
|
+
---
|
|
115
|
+
|
|
116
|
+
## 한국어
|
|
117
|
+
|
|
118
|
+
Rocket.Chat용 MCP (Model Context Protocol) 서버 - AI 에이전트가 스레드, 토론, 결정 사항에서 **조직 지식을 검색**할 수 있게 합니다.
|
|
119
|
+
|
|
120
|
+
### 왜 이 MCP인가?
|
|
121
|
+
|
|
122
|
+
기본 채팅 연동과 달리, 이 MCP는 **지식 검색**에 초점을 맞춥니다:
|
|
123
|
+
|
|
124
|
+
| 기능 | 기본 MCP | Knowledge MCP |
|
|
125
|
+
|------|----------|---------------|
|
|
126
|
+
| 스레드 지원 | 없음 | 완전 지원 |
|
|
127
|
+
| 스레드 답글 검색 | 없음 | 지원 |
|
|
128
|
+
| 시간 필터링 | 없음 | 1d, 7d, 1w, 1m |
|
|
129
|
+
| 인증 방식 | 비밀번호 | 토큰 (보안) |
|
|
130
|
+
| 쓰기 보호 | 항상 켜짐 | 기본 꺼짐 |
|
|
131
|
+
| @all 차단 | 없음 | 자동 차단 |
|
|
132
|
+
| 속도 제한 | 없음 | 지원 |
|
|
133
|
+
| 유닛 테스트 | 없음 | 231개 |
|
|
134
|
+
|
|
135
|
+
### 주요 기능
|
|
136
|
+
|
|
137
|
+
- **스레드 중심**: 토론과 결정의 단위로서의 스레드
|
|
138
|
+
- **심층 검색**: 부모 메시지뿐 아니라 스레드 답글 내 검색
|
|
139
|
+
- **시간 필터링**: `1d`, `7d`, `1w`, `1m` 또는 날짜 범위로 필터
|
|
140
|
+
- **안전한 쓰기**: 기본 비활성화, @멘션 자동 중화
|
|
141
|
+
- **타입 안전**: Zod 검증을 포함한 완전한 TypeScript
|
|
142
|
+
|
|
143
|
+
### 설치
|
|
144
|
+
|
|
145
|
+
```bash
|
|
146
|
+
git clone https://github.com/huiseo/rocketchat-threads-mcp.git
|
|
147
|
+
cd rocketchat-threads-mcp
|
|
148
|
+
npm install
|
|
149
|
+
npm run build
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
### 설정
|
|
153
|
+
|
|
154
|
+
```env
|
|
155
|
+
ROCKETCHAT_URL=https://your-rocketchat-server.com
|
|
156
|
+
ROCKETCHAT_AUTH_TOKEN=your-auth-token
|
|
157
|
+
ROCKETCHAT_USER_ID=your-user-id
|
|
158
|
+
|
|
159
|
+
# 선택: 쓰기 활성화 (기본 비활성화)
|
|
160
|
+
ROCKETCHAT_WRITE_ENABLED=true
|
|
161
|
+
ROCKETCHAT_WRITE_ROOMS=general,dev-team
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
### 선택사항: OpenSearch 연동
|
|
165
|
+
|
|
166
|
+
이 MCP는 Rocket.Chat 서버에 OpenSearch가 있든 없든 작동합니다:
|
|
167
|
+
|
|
168
|
+
| 기능 | OpenSearch 없이 | OpenSearch 있음 |
|
|
169
|
+
|------|-----------------|-----------------|
|
|
170
|
+
| 채널별 검색 | ✅ 작동 | ✅ 작동 |
|
|
171
|
+
| 전역 검색 (roomId 없이) | ❌ roomId 필요 | ✅ 작동 |
|
|
172
|
+
| 검색 하이라이팅 | ❌ | ✅ `<mark>` 태그 |
|
|
173
|
+
| 다국어 검색 | 제한적 | ✅ 완전 지원 |
|
|
174
|
+
|
|
175
|
+
**확인 방법:** roomId 없이 `rocketchat_search_messages`를 실행해보세요. 작동하면 OpenSearch가 활성화된 것입니다.
|
|
176
|
+
|
|
177
|
+
**서버 관리자용:** Docker로 OpenSearch를 활성화하려면 [rocketchat-enhanced](https://github.com/huiseo/rocketchat-enhanced)를 참조하세요 - RocketChat + OpenSearch + 실시간 인덱싱이 포함된 단일 Docker 패키지입니다.
|
|
178
|
+
|
|
179
|
+
---
|
|
180
|
+
|
|
181
|
+
## 日本語
|
|
182
|
+
|
|
183
|
+
Rocket.Chat用MCP(Model Context Protocol)サーバー - AIエージェントがスレッド、議論、決定事項から**組織知識を検索**できるようにします。
|
|
184
|
+
|
|
185
|
+
### なぜこのMCPか?
|
|
186
|
+
|
|
187
|
+
基本的なチャット連携とは異なり、このMCPは**知識検索**に焦点を当てています:
|
|
188
|
+
|
|
189
|
+
| 機能 | 基本MCP | Knowledge MCP |
|
|
190
|
+
|------|---------|---------------|
|
|
191
|
+
| スレッドサポート | なし | 完全対応 |
|
|
192
|
+
| スレッド返信検索 | なし | 対応 |
|
|
193
|
+
| 時間フィルタリング | なし | 1d, 7d, 1w, 1m |
|
|
194
|
+
| 認証方式 | パスワード | トークン(安全) |
|
|
195
|
+
| 書き込み保護 | 常にオン | デフォルトオフ |
|
|
196
|
+
| @all ブロック | なし | 自動ブロック |
|
|
197
|
+
| レート制限 | なし | 対応 |
|
|
198
|
+
| ユニットテスト | なし | 231件 |
|
|
199
|
+
|
|
200
|
+
### 主な機能
|
|
201
|
+
|
|
202
|
+
- **スレッド中心**: 議論と決定の単位としてのスレッド
|
|
203
|
+
- **深層検索**: 親メッセージだけでなくスレッド返信内を検索
|
|
204
|
+
- **時間フィルタリング**: `1d`、`7d`、`1w`、`1m`または日付範囲でフィルタ
|
|
205
|
+
- **安全な書き込み**: デフォルト無効、@メンション自動無効化
|
|
206
|
+
- **型安全**: Zodバリデーションを含む完全なTypeScript
|
|
207
|
+
|
|
208
|
+
### インストール
|
|
209
|
+
|
|
210
|
+
```bash
|
|
211
|
+
git clone https://github.com/huiseo/rocketchat-threads-mcp.git
|
|
212
|
+
cd rocketchat-threads-mcp
|
|
213
|
+
npm install
|
|
214
|
+
npm run build
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
### オプション: OpenSearch連携
|
|
218
|
+
|
|
219
|
+
このMCPはRocket.ChatサーバーのOpenSearchの有無にかかわらず動作します:
|
|
220
|
+
|
|
221
|
+
| 機能 | OpenSearchなし | OpenSearchあり |
|
|
222
|
+
|------|----------------|----------------|
|
|
223
|
+
| チャンネル別検索 | ✅ 動作 | ✅ 動作 |
|
|
224
|
+
| グローバル検索(roomIdなし) | ❌ roomId必須 | ✅ 動作 |
|
|
225
|
+
| 検索ハイライト | ❌ | ✅ `<mark>`タグ |
|
|
226
|
+
| 多言語検索 | 制限あり | ✅ 完全対応 |
|
|
227
|
+
|
|
228
|
+
**確認方法:** roomIdなしで`rocketchat_search_messages`を実行してみてください。動作すればOpenSearchが有効です。
|
|
229
|
+
|
|
230
|
+
**サーバー管理者向け:** DockerでOpenSearchを有効にするには、[rocketchat-enhanced](https://github.com/huiseo/rocketchat-enhanced)を参照してください - RocketChat + OpenSearch + リアルタイムインデックスを含む単一Dockerパッケージです。
|
|
231
|
+
|
|
232
|
+
---
|
|
233
|
+
|
|
234
|
+
## 中文
|
|
235
|
+
|
|
236
|
+
Rocket.Chat的MCP(Model Context Protocol)服务器 - 使AI代理能够从线程、讨论和决策中**检索组织知识**。
|
|
237
|
+
|
|
238
|
+
### 为什么选择这个MCP?
|
|
239
|
+
|
|
240
|
+
与基本聊天集成不同,这个MCP专注于**知识检索**:
|
|
241
|
+
|
|
242
|
+
| 功能 | 基本MCP | Knowledge MCP |
|
|
243
|
+
|------|---------|---------------|
|
|
244
|
+
| 线程支持 | 无 | 完全支持 |
|
|
245
|
+
| 搜索线程回复 | 无 | 支持 |
|
|
246
|
+
| 时间过滤 | 无 | 1d, 7d, 1w, 1m |
|
|
247
|
+
| 认证方式 | 密码 | 令牌(安全) |
|
|
248
|
+
| 写入保护 | 始终开启 | 默认关闭 |
|
|
249
|
+
| @all 阻止 | 无 | 自动阻止 |
|
|
250
|
+
| 速率限制 | 无 | 支持 |
|
|
251
|
+
| 单元测试 | 无 | 231个 |
|
|
252
|
+
|
|
253
|
+
### 主要功能
|
|
254
|
+
|
|
255
|
+
- **线程中心**: 将线程作为讨论和决策的单位
|
|
256
|
+
- **深度搜索**: 不仅搜索父消息,还搜索线程回复
|
|
257
|
+
- **时间过滤**: 按`1d`、`7d`、`1w`、`1m`或日期范围过滤
|
|
258
|
+
- **安全写入**: 默认禁用,@提及自动中和
|
|
259
|
+
- **类型安全**: 包含Zod验证的完整TypeScript
|
|
260
|
+
|
|
261
|
+
### 安装
|
|
262
|
+
|
|
263
|
+
```bash
|
|
264
|
+
git clone https://github.com/huiseo/rocketchat-threads-mcp.git
|
|
265
|
+
cd rocketchat-threads-mcp
|
|
266
|
+
npm install
|
|
267
|
+
npm run build
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
### 可选:OpenSearch集成
|
|
271
|
+
|
|
272
|
+
此MCP无论Rocket.Chat服务器是否有OpenSearch都可以工作:
|
|
273
|
+
|
|
274
|
+
| 功能 | 无OpenSearch | 有OpenSearch |
|
|
275
|
+
|------|--------------|--------------|
|
|
276
|
+
| 频道内搜索 | ✅ 可用 | ✅ 可用 |
|
|
277
|
+
| 全局搜索(无roomId) | ❌ 需要roomId | ✅ 可用 |
|
|
278
|
+
| 搜索高亮 | ❌ | ✅ `<mark>`标签 |
|
|
279
|
+
| 多语言搜索 | 有限 | ✅ 完全支持 |
|
|
280
|
+
|
|
281
|
+
**检查方法:** 不带roomId运行`rocketchat_search_messages`。如果可以运行,说明OpenSearch已启用。
|
|
282
|
+
|
|
283
|
+
**服务器管理员:** 要使用Docker启用OpenSearch,请参阅[rocketchat-enhanced](https://github.com/huiseo/rocketchat-enhanced) - 包含RocketChat + OpenSearch + 实时索引的单一Docker包。
|
|
284
|
+
|
|
285
|
+
---
|
|
286
|
+
|
|
287
|
+
## Architecture
|
|
288
|
+
|
|
289
|
+
```
|
|
290
|
+
src/
|
|
291
|
+
├── index.ts # Entry point
|
|
292
|
+
├── server.ts # MCP server setup
|
|
293
|
+
├── tools/ # Tool definitions
|
|
294
|
+
│ ├── base.ts # Type-safe tool registry
|
|
295
|
+
│ ├── channel-tools.ts
|
|
296
|
+
│ ├── message-tools.ts
|
|
297
|
+
│ ├── thread-tools.ts
|
|
298
|
+
│ ├── user-tools.ts
|
|
299
|
+
│ └── write-tools.ts
|
|
300
|
+
├── api/ # Rocket.Chat API
|
|
301
|
+
│ ├── client.ts
|
|
302
|
+
│ ├── types.ts
|
|
303
|
+
│ └── schemas.ts # Zod validation
|
|
304
|
+
├── guards/ # Safety guards
|
|
305
|
+
│ ├── write-guard.ts
|
|
306
|
+
│ ├── sanitizer.ts
|
|
307
|
+
│ ├── input-validator.ts
|
|
308
|
+
│ └── rate-limiter.ts
|
|
309
|
+
└── utils/
|
|
310
|
+
├── cache.ts
|
|
311
|
+
├── time-parser.ts
|
|
312
|
+
└── token-counter.ts
|
|
313
|
+
```
|
|
314
|
+
|
|
315
|
+
## Development
|
|
316
|
+
|
|
317
|
+
```bash
|
|
318
|
+
npm install # Install dependencies
|
|
319
|
+
npm run dev # Development mode
|
|
320
|
+
npm run build # Build
|
|
321
|
+
npm test # Run 231 tests
|
|
322
|
+
npm run lint # Lint
|
|
323
|
+
```
|
|
324
|
+
|
|
325
|
+
## License
|
|
326
|
+
|
|
327
|
+
MIT License - see [LICENSE](LICENSE) for details.
|
|
328
|
+
|
|
329
|
+
## Acknowledgments
|
|
330
|
+
|
|
331
|
+
- [MCP (Model Context Protocol)](https://modelcontextprotocol.io/)
|
|
332
|
+
- [Rocket.Chat API](https://developer.rocket.chat/reference/api)
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Rocket.Chat API Client
|
|
3
|
+
* Handles all HTTP communication with Rocket.Chat server
|
|
4
|
+
*/
|
|
5
|
+
import { RocketChatConfig } from '../config/config.js';
|
|
6
|
+
import { ApiResponse, ChannelsListResponse, MessagesResponse, ThreadsListResponse, UserInfoResponse, UsersListResponse, SendMessageResponse, RocketChatMessage, RocketChatRoom, GetMessagesParams, GetThreadMessagesParams, SearchMessagesParams, SendMessageParams, GetRoomsParams } from './types.js';
|
|
7
|
+
export declare class RocketChatClient {
|
|
8
|
+
private baseUrl;
|
|
9
|
+
private authToken;
|
|
10
|
+
private userId;
|
|
11
|
+
private cache;
|
|
12
|
+
constructor(config?: RocketChatConfig);
|
|
13
|
+
/**
|
|
14
|
+
* Make authenticated API request
|
|
15
|
+
*/
|
|
16
|
+
private request;
|
|
17
|
+
/**
|
|
18
|
+
* List channels (public and joined)
|
|
19
|
+
*/
|
|
20
|
+
listChannels(params?: GetRoomsParams): Promise<ChannelsListResponse>;
|
|
21
|
+
/**
|
|
22
|
+
* List joined channels
|
|
23
|
+
*/
|
|
24
|
+
listJoinedChannels(params?: GetRoomsParams): Promise<ChannelsListResponse>;
|
|
25
|
+
/**
|
|
26
|
+
* Get channel info by ID or name
|
|
27
|
+
*/
|
|
28
|
+
getChannelInfo(roomId?: string, roomName?: string): Promise<{
|
|
29
|
+
channel: RocketChatRoom;
|
|
30
|
+
success: boolean;
|
|
31
|
+
}>;
|
|
32
|
+
/**
|
|
33
|
+
* Search channels by name
|
|
34
|
+
*/
|
|
35
|
+
searchChannels(query: string): Promise<{
|
|
36
|
+
channels: RocketChatRoom[];
|
|
37
|
+
success: boolean;
|
|
38
|
+
}>;
|
|
39
|
+
/**
|
|
40
|
+
* Get messages from a channel
|
|
41
|
+
*/
|
|
42
|
+
getMessages(params: GetMessagesParams): Promise<MessagesResponse>;
|
|
43
|
+
/**
|
|
44
|
+
* Search messages in a channel or globally
|
|
45
|
+
* When roomId is omitted, performs global search (requires OpenSearch integration)
|
|
46
|
+
*/
|
|
47
|
+
searchMessages(params: SearchMessagesParams): Promise<MessagesResponse>;
|
|
48
|
+
/**
|
|
49
|
+
* Get a specific message by ID
|
|
50
|
+
*/
|
|
51
|
+
getMessage(messageId: string): Promise<{
|
|
52
|
+
message: RocketChatMessage;
|
|
53
|
+
success: boolean;
|
|
54
|
+
}>;
|
|
55
|
+
/**
|
|
56
|
+
* List threads in a channel
|
|
57
|
+
*/
|
|
58
|
+
listThreads(roomId: string, count?: number, offset?: number): Promise<ThreadsListResponse>;
|
|
59
|
+
/**
|
|
60
|
+
* Get thread messages (replies)
|
|
61
|
+
*/
|
|
62
|
+
getThreadMessages(params: GetThreadMessagesParams): Promise<MessagesResponse>;
|
|
63
|
+
/**
|
|
64
|
+
* Get thread parent message
|
|
65
|
+
*/
|
|
66
|
+
getThreadParent(tmid: string): Promise<{
|
|
67
|
+
message: RocketChatMessage;
|
|
68
|
+
success: boolean;
|
|
69
|
+
}>;
|
|
70
|
+
/**
|
|
71
|
+
* Get user info by ID or username
|
|
72
|
+
*/
|
|
73
|
+
getUserInfo(userId?: string, username?: string): Promise<UserInfoResponse>;
|
|
74
|
+
/**
|
|
75
|
+
* List users
|
|
76
|
+
*/
|
|
77
|
+
listUsers(count?: number, offset?: number): Promise<UsersListResponse>;
|
|
78
|
+
/**
|
|
79
|
+
* Get current user (me)
|
|
80
|
+
* Note: /me endpoint returns user data directly, not wrapped in { user: ... }
|
|
81
|
+
*/
|
|
82
|
+
getMe(): Promise<UserInfoResponse>;
|
|
83
|
+
/**
|
|
84
|
+
* Send a message to a channel
|
|
85
|
+
*/
|
|
86
|
+
sendMessage(params: SendMessageParams): Promise<SendMessageResponse>;
|
|
87
|
+
/**
|
|
88
|
+
* React to a message
|
|
89
|
+
*/
|
|
90
|
+
reactToMessage(messageId: string, emoji: string): Promise<ApiResponse<void>>;
|
|
91
|
+
/**
|
|
92
|
+
* Test connection to Rocket.Chat server
|
|
93
|
+
*/
|
|
94
|
+
testConnection(): Promise<boolean>;
|
|
95
|
+
/**
|
|
96
|
+
* Clear cache
|
|
97
|
+
*/
|
|
98
|
+
clearCache(): void;
|
|
99
|
+
/**
|
|
100
|
+
* Get cache statistics
|
|
101
|
+
*/
|
|
102
|
+
getCacheStats(): {
|
|
103
|
+
size: number;
|
|
104
|
+
maxSize: number;
|
|
105
|
+
ttlMs: number;
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Custom error class for API errors
|
|
110
|
+
*/
|
|
111
|
+
export declare class RocketChatApiError extends Error {
|
|
112
|
+
readonly statusCode: number;
|
|
113
|
+
readonly responseBody: string;
|
|
114
|
+
constructor(message: string, statusCode: number, responseBody: string);
|
|
115
|
+
toJSON(): Record<string, unknown>;
|
|
116
|
+
}
|
|
117
|
+
export declare function getClient(): RocketChatClient;
|
|
118
|
+
export declare function resetClient(): void;
|
|
119
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"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"}
|