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
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool Registry Index
|
|
3
|
+
* Exports all tools and the registry
|
|
4
|
+
*/
|
|
5
|
+
import './channel-tools.js';
|
|
6
|
+
import './message-tools.js';
|
|
7
|
+
import './thread-tools.js';
|
|
8
|
+
import './user-tools.js';
|
|
9
|
+
import './write-tools.js';
|
|
10
|
+
export { toolRegistry, createToolResult, createErrorResult } from './base.js';
|
|
11
|
+
export type { ToolDefinition, ToolResult } from './base.js';
|
|
12
|
+
export { listChannelsTool, searchChannelsTool, getChannelInfoTool } from './channel-tools.js';
|
|
13
|
+
export { getMessagesTool, searchMessagesTool, getMessageTool } from './message-tools.js';
|
|
14
|
+
export { listThreadsTool, getThreadTool, searchThreadsTool } from './thread-tools.js';
|
|
15
|
+
export { lookupUserTool, listUsersTool, getMeTool } from './user-tools.js';
|
|
16
|
+
export { sendMessageTool, reactTool, getWriteStatusTool } from './write-tools.js';
|
|
17
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,oBAAoB,CAAC;AAC5B,OAAO,oBAAoB,CAAC;AAC5B,OAAO,mBAAmB,CAAC;AAC3B,OAAO,iBAAiB,CAAC;AACzB,OAAO,kBAAkB,CAAC;AAG1B,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9E,YAAY,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAG5D,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC9F,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzF,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtF,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC3E,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Tool Registry Index
|
|
4
|
+
* Exports all tools and the registry
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.getWriteStatusTool = exports.reactTool = exports.sendMessageTool = exports.getMeTool = exports.listUsersTool = exports.lookupUserTool = exports.searchThreadsTool = exports.getThreadTool = exports.listThreadsTool = exports.getMessageTool = exports.searchMessagesTool = exports.getMessagesTool = exports.getChannelInfoTool = exports.searchChannelsTool = exports.listChannelsTool = exports.createErrorResult = exports.createToolResult = exports.toolRegistry = void 0;
|
|
8
|
+
// Import all tool modules to register them
|
|
9
|
+
require("./channel-tools.js");
|
|
10
|
+
require("./message-tools.js");
|
|
11
|
+
require("./thread-tools.js");
|
|
12
|
+
require("./user-tools.js");
|
|
13
|
+
require("./write-tools.js");
|
|
14
|
+
// Re-export the registry and utilities
|
|
15
|
+
var base_js_1 = require("./base.js");
|
|
16
|
+
Object.defineProperty(exports, "toolRegistry", { enumerable: true, get: function () { return base_js_1.toolRegistry; } });
|
|
17
|
+
Object.defineProperty(exports, "createToolResult", { enumerable: true, get: function () { return base_js_1.createToolResult; } });
|
|
18
|
+
Object.defineProperty(exports, "createErrorResult", { enumerable: true, get: function () { return base_js_1.createErrorResult; } });
|
|
19
|
+
// Export individual tools for direct access if needed
|
|
20
|
+
var channel_tools_js_1 = require("./channel-tools.js");
|
|
21
|
+
Object.defineProperty(exports, "listChannelsTool", { enumerable: true, get: function () { return channel_tools_js_1.listChannelsTool; } });
|
|
22
|
+
Object.defineProperty(exports, "searchChannelsTool", { enumerable: true, get: function () { return channel_tools_js_1.searchChannelsTool; } });
|
|
23
|
+
Object.defineProperty(exports, "getChannelInfoTool", { enumerable: true, get: function () { return channel_tools_js_1.getChannelInfoTool; } });
|
|
24
|
+
var message_tools_js_1 = require("./message-tools.js");
|
|
25
|
+
Object.defineProperty(exports, "getMessagesTool", { enumerable: true, get: function () { return message_tools_js_1.getMessagesTool; } });
|
|
26
|
+
Object.defineProperty(exports, "searchMessagesTool", { enumerable: true, get: function () { return message_tools_js_1.searchMessagesTool; } });
|
|
27
|
+
Object.defineProperty(exports, "getMessageTool", { enumerable: true, get: function () { return message_tools_js_1.getMessageTool; } });
|
|
28
|
+
var thread_tools_js_1 = require("./thread-tools.js");
|
|
29
|
+
Object.defineProperty(exports, "listThreadsTool", { enumerable: true, get: function () { return thread_tools_js_1.listThreadsTool; } });
|
|
30
|
+
Object.defineProperty(exports, "getThreadTool", { enumerable: true, get: function () { return thread_tools_js_1.getThreadTool; } });
|
|
31
|
+
Object.defineProperty(exports, "searchThreadsTool", { enumerable: true, get: function () { return thread_tools_js_1.searchThreadsTool; } });
|
|
32
|
+
var user_tools_js_1 = require("./user-tools.js");
|
|
33
|
+
Object.defineProperty(exports, "lookupUserTool", { enumerable: true, get: function () { return user_tools_js_1.lookupUserTool; } });
|
|
34
|
+
Object.defineProperty(exports, "listUsersTool", { enumerable: true, get: function () { return user_tools_js_1.listUsersTool; } });
|
|
35
|
+
Object.defineProperty(exports, "getMeTool", { enumerable: true, get: function () { return user_tools_js_1.getMeTool; } });
|
|
36
|
+
var write_tools_js_1 = require("./write-tools.js");
|
|
37
|
+
Object.defineProperty(exports, "sendMessageTool", { enumerable: true, get: function () { return write_tools_js_1.sendMessageTool; } });
|
|
38
|
+
Object.defineProperty(exports, "reactTool", { enumerable: true, get: function () { return write_tools_js_1.reactTool; } });
|
|
39
|
+
Object.defineProperty(exports, "getWriteStatusTool", { enumerable: true, get: function () { return write_tools_js_1.getWriteStatusTool; } });
|
|
40
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,2CAA2C;AAC3C,8BAA4B;AAC5B,8BAA4B;AAC5B,6BAA2B;AAC3B,2BAAyB;AACzB,4BAA0B;AAE1B,uCAAuC;AACvC,qCAA8E;AAArE,uGAAA,YAAY,OAAA;AAAE,2GAAA,gBAAgB,OAAA;AAAE,4GAAA,iBAAiB,OAAA;AAG1D,sDAAsD;AACtD,uDAA8F;AAArF,oHAAA,gBAAgB,OAAA;AAAE,sHAAA,kBAAkB,OAAA;AAAE,sHAAA,kBAAkB,OAAA;AACjE,uDAAyF;AAAhF,mHAAA,eAAe,OAAA;AAAE,sHAAA,kBAAkB,OAAA;AAAE,kHAAA,cAAc,OAAA;AAC5D,qDAAsF;AAA7E,kHAAA,eAAe,OAAA;AAAE,gHAAA,aAAa,OAAA;AAAE,oHAAA,iBAAiB,OAAA;AAC1D,iDAA2E;AAAlE,+GAAA,cAAc,OAAA;AAAE,8GAAA,aAAa,OAAA;AAAE,0GAAA,SAAS,OAAA;AACjD,mDAAkF;AAAzE,iHAAA,eAAe,OAAA;AAAE,2GAAA,SAAS,OAAA;AAAE,oHAAA,kBAAkB,OAAA"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Message Tools
|
|
3
|
+
* Tools for reading and searching messages
|
|
4
|
+
*/
|
|
5
|
+
export declare const getMessagesTool: import("./base.js").ToolDefinition<{
|
|
6
|
+
roomId: string;
|
|
7
|
+
offset?: number | undefined;
|
|
8
|
+
limit?: number | undefined;
|
|
9
|
+
timeRange?: string | undefined;
|
|
10
|
+
}>;
|
|
11
|
+
export declare const searchMessagesTool: import("./base.js").ToolDefinition<{
|
|
12
|
+
query: string;
|
|
13
|
+
offset?: number | undefined;
|
|
14
|
+
roomId?: string | undefined;
|
|
15
|
+
limit?: number | undefined;
|
|
16
|
+
}>;
|
|
17
|
+
export declare const getMessageTool: import("./base.js").ToolDefinition<{
|
|
18
|
+
messageId: string;
|
|
19
|
+
}>;
|
|
20
|
+
//# sourceMappingURL=message-tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"message-tools.d.ts","sourceRoot":"","sources":["../../src/tools/message-tools.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAmCH,eAAO,MAAM,eAAe;;;;;EAiE3B,CAAC;AAiBF,eAAO,MAAM,kBAAkB;;;;;EAkE9B,CAAC;AAWF,eAAO,MAAM,cAAc;;EA6B1B,CAAC"}
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Message Tools
|
|
4
|
+
* Tools for reading and searching messages
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.getMessageTool = exports.searchMessagesTool = exports.getMessagesTool = void 0;
|
|
8
|
+
const zod_1 = require("zod");
|
|
9
|
+
const client_js_1 = require("../api/client.js");
|
|
10
|
+
const message_formatter_js_1 = require("../formatters/message-formatter.js");
|
|
11
|
+
const response_builder_js_1 = require("../formatters/response-builder.js");
|
|
12
|
+
const token_counter_js_1 = require("../utils/token-counter.js");
|
|
13
|
+
const time_parser_js_1 = require("../utils/time-parser.js");
|
|
14
|
+
const logger_js_1 = require("../utils/logger.js");
|
|
15
|
+
const base_js_1 = require("./base.js");
|
|
16
|
+
const logger = (0, logger_js_1.getLogger)('MessageTools');
|
|
17
|
+
/**
|
|
18
|
+
* rocketchat_get_messages
|
|
19
|
+
* Get messages from a channel with optional time filtering
|
|
20
|
+
*/
|
|
21
|
+
const getMessagesSchema = zod_1.z.object({
|
|
22
|
+
roomId: zod_1.z.string()
|
|
23
|
+
.describe('Channel/room ID to get messages from'),
|
|
24
|
+
limit: zod_1.z.number().min(1).max(100).default(50).optional()
|
|
25
|
+
.describe('Maximum number of messages to return (1-100, default: 50)'),
|
|
26
|
+
offset: zod_1.z.number().min(0).default(0).optional()
|
|
27
|
+
.describe('Number of messages to skip for pagination'),
|
|
28
|
+
timeRange: zod_1.z.string().optional()
|
|
29
|
+
.describe('Time filter: relative (1d, 7d, 1w, 1m), ISO date (2024-01-15), or "oldest" for oldest first')
|
|
30
|
+
});
|
|
31
|
+
exports.getMessagesTool = (0, base_js_1.defineTool)('rocketchat_get_messages', `Get messages from a Rocket.Chat channel.
|
|
32
|
+
|
|
33
|
+
Returns message information including:
|
|
34
|
+
- Message ID, text, and author
|
|
35
|
+
- Timestamp and edit history
|
|
36
|
+
- Thread information (if part of a thread)
|
|
37
|
+
- Reactions and attachments
|
|
38
|
+
- Pinned status
|
|
39
|
+
|
|
40
|
+
Time filtering options:
|
|
41
|
+
- Relative: "1d" (1 day), "7d" (7 days), "1w" (1 week), "1m" (1 month)
|
|
42
|
+
- ISO date: "2024-01-15" (from that date to now)
|
|
43
|
+
- Unix timestamp: "1705276800"
|
|
44
|
+
|
|
45
|
+
Examples:
|
|
46
|
+
- Recent messages: { "roomId": "GENERAL" }
|
|
47
|
+
- Last 24 hours: { "roomId": "GENERAL", "timeRange": "1d" }
|
|
48
|
+
- Last week: { "roomId": "GENERAL", "timeRange": "1w", "limit": 100 }`, getMessagesSchema, async (params) => {
|
|
49
|
+
try {
|
|
50
|
+
const client = (0, client_js_1.getClient)();
|
|
51
|
+
const limit = params.limit || 50;
|
|
52
|
+
const offset = params.offset || 0;
|
|
53
|
+
// Build query with time filter if provided
|
|
54
|
+
let query;
|
|
55
|
+
if (params.timeRange) {
|
|
56
|
+
try {
|
|
57
|
+
const range = (0, time_parser_js_1.parseTimeExpression)(params.timeRange);
|
|
58
|
+
query = {
|
|
59
|
+
ts: {
|
|
60
|
+
$gte: range.start.toISOString(),
|
|
61
|
+
$lte: range.end.toISOString()
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
// Invalid time expression, log and continue without filter
|
|
67
|
+
logger.debug('Invalid time expression, ignoring filter', { timeRange: params.timeRange, error });
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
const response = await client.getMessages({
|
|
71
|
+
roomId: params.roomId,
|
|
72
|
+
count: limit,
|
|
73
|
+
offset,
|
|
74
|
+
query,
|
|
75
|
+
sort: { ts: -1 } // Newest first
|
|
76
|
+
});
|
|
77
|
+
if (!response.success) {
|
|
78
|
+
return (0, base_js_1.createErrorResult)(base_js_1.ErrorCodes.API_ERROR, 'Failed to get messages');
|
|
79
|
+
}
|
|
80
|
+
const formatted = (0, message_formatter_js_1.formatMessages)(response.messages);
|
|
81
|
+
const { items, truncated } = token_counter_js_1.TokenCounter.truncateToFit(formatted);
|
|
82
|
+
const result = (0, response_builder_js_1.buildPaginatedResponse)(items, response.total, offset, truncated);
|
|
83
|
+
return (0, base_js_1.createToolResult)(result);
|
|
84
|
+
}
|
|
85
|
+
catch (error) {
|
|
86
|
+
return (0, base_js_1.createErrorResultFromException)(base_js_1.ErrorCodes.API_ERROR, 'Failed to get messages', error);
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
/**
|
|
90
|
+
* rocketchat_search_messages
|
|
91
|
+
* Search messages across channels (global search supported with OpenSearch)
|
|
92
|
+
*/
|
|
93
|
+
const searchMessagesSchema = zod_1.z.object({
|
|
94
|
+
query: zod_1.z.string().min(1)
|
|
95
|
+
.describe('Search text to find in messages'),
|
|
96
|
+
roomId: zod_1.z.string().optional()
|
|
97
|
+
.describe('Channel/room ID to search in. If omitted, searches globally across all accessible channels (requires OpenSearch integration)'),
|
|
98
|
+
limit: zod_1.z.number().min(1).max(100).default(50).optional()
|
|
99
|
+
.describe('Maximum number of results (1-100, default: 50)'),
|
|
100
|
+
offset: zod_1.z.number().min(0).default(0).optional()
|
|
101
|
+
.describe('Number of results to skip for pagination')
|
|
102
|
+
});
|
|
103
|
+
exports.searchMessagesTool = (0, base_js_1.defineTool)('rocketchat_search_messages', `Search for messages containing specific text in a channel.
|
|
104
|
+
|
|
105
|
+
This searches message content (parent messages only, not thread replies).
|
|
106
|
+
For searching within threads, use rocketchat_search_threads instead.
|
|
107
|
+
|
|
108
|
+
**OpenSearch Dependency:**
|
|
109
|
+
- WITH roomId: Works on all servers (uses RocketChat native search)
|
|
110
|
+
- WITHOUT roomId (global search): REQUIRES OpenSearch integration
|
|
111
|
+
- If global search fails, add roomId parameter and retry
|
|
112
|
+
|
|
113
|
+
Returns:
|
|
114
|
+
- Search summary (query, total results, time range)
|
|
115
|
+
- Matching messages with full details
|
|
116
|
+
- Thread IDs for messages that are thread parents
|
|
117
|
+
- Highlighted text snippets (when OpenSearch is available)
|
|
118
|
+
|
|
119
|
+
**When to use which tool:**
|
|
120
|
+
- rocketchat_search_messages: Find messages by keyword (fast, single messages)
|
|
121
|
+
- rocketchat_search_threads: Find discussions/decisions (searches replies too)
|
|
122
|
+
- rocketchat_get_messages: Browse recent messages chronologically
|
|
123
|
+
|
|
124
|
+
**Error Handling:**
|
|
125
|
+
- If "roomId required" error: Server lacks OpenSearch, provide roomId
|
|
126
|
+
- If empty results: Try broader search terms or different channel
|
|
127
|
+
|
|
128
|
+
Examples:
|
|
129
|
+
- Channel-specific (always works): { "query": "API integration", "roomId": "GENERAL" }
|
|
130
|
+
- Global search (needs OpenSearch): { "query": "authentication" }
|
|
131
|
+
- Find decisions: { "query": "decision", "roomId": "project-alpha" }`, searchMessagesSchema, async (params) => {
|
|
132
|
+
try {
|
|
133
|
+
const client = (0, client_js_1.getClient)();
|
|
134
|
+
const limit = params.limit || 50;
|
|
135
|
+
const offset = params.offset || 0;
|
|
136
|
+
const response = await client.searchMessages({
|
|
137
|
+
roomId: params.roomId,
|
|
138
|
+
searchText: params.query,
|
|
139
|
+
count: limit,
|
|
140
|
+
offset
|
|
141
|
+
});
|
|
142
|
+
if (!response.success) {
|
|
143
|
+
return (0, base_js_1.createErrorResult)(base_js_1.ErrorCodes.API_ERROR, 'Failed to search messages');
|
|
144
|
+
}
|
|
145
|
+
const formatted = (0, message_formatter_js_1.formatMessages)(response.messages);
|
|
146
|
+
const { items, truncated } = token_counter_js_1.TokenCounter.truncateToFit(formatted);
|
|
147
|
+
const summary = (0, message_formatter_js_1.createSearchSummary)(params.query, response.messages, response.total);
|
|
148
|
+
const result = (0, response_builder_js_1.buildSuccessResponse)({
|
|
149
|
+
summary,
|
|
150
|
+
messages: items
|
|
151
|
+
}, {
|
|
152
|
+
count: items.length,
|
|
153
|
+
total: response.total,
|
|
154
|
+
truncated
|
|
155
|
+
});
|
|
156
|
+
return (0, base_js_1.createToolResult)(result);
|
|
157
|
+
}
|
|
158
|
+
catch (error) {
|
|
159
|
+
return (0, base_js_1.createErrorResultFromException)(base_js_1.ErrorCodes.API_ERROR, 'Failed to search messages', error);
|
|
160
|
+
}
|
|
161
|
+
});
|
|
162
|
+
/**
|
|
163
|
+
* rocketchat_get_message
|
|
164
|
+
* Get a specific message by ID
|
|
165
|
+
*/
|
|
166
|
+
const getMessageSchema = zod_1.z.object({
|
|
167
|
+
messageId: zod_1.z.string()
|
|
168
|
+
.describe('Message ID to retrieve')
|
|
169
|
+
});
|
|
170
|
+
exports.getMessageTool = (0, base_js_1.defineTool)('rocketchat_get_message', `Get a specific message by its ID.
|
|
171
|
+
|
|
172
|
+
Use this to retrieve full details of a message when you have its ID.
|
|
173
|
+
|
|
174
|
+
Examples:
|
|
175
|
+
- Get message: { "messageId": "abc123xyz" }`, getMessageSchema, async (params) => {
|
|
176
|
+
try {
|
|
177
|
+
const client = (0, client_js_1.getClient)();
|
|
178
|
+
const response = await client.getMessage(params.messageId);
|
|
179
|
+
if (!response.success) {
|
|
180
|
+
return (0, base_js_1.createErrorResult)(base_js_1.ErrorCodes.NOT_FOUND, 'Message not found', `No message found with ID "${params.messageId}"`);
|
|
181
|
+
}
|
|
182
|
+
const formatted = (0, message_formatter_js_1.formatMessages)([response.message])[0];
|
|
183
|
+
const result = (0, response_builder_js_1.buildSuccessResponse)(formatted);
|
|
184
|
+
return (0, base_js_1.createToolResult)(result);
|
|
185
|
+
}
|
|
186
|
+
catch (error) {
|
|
187
|
+
return (0, base_js_1.createErrorResultFromException)(base_js_1.ErrorCodes.API_ERROR, 'Failed to get message', error);
|
|
188
|
+
}
|
|
189
|
+
});
|
|
190
|
+
// Register tools
|
|
191
|
+
base_js_1.toolRegistry.register(exports.getMessagesTool);
|
|
192
|
+
base_js_1.toolRegistry.register(exports.searchMessagesTool);
|
|
193
|
+
base_js_1.toolRegistry.register(exports.getMessageTool);
|
|
194
|
+
//# sourceMappingURL=message-tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"message-tools.js","sourceRoot":"","sources":["../../src/tools/message-tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Thread Tools
|
|
3
|
+
* Tools for listing, searching, and reading threads
|
|
4
|
+
* Threads are the primary unit for organizational knowledge retrieval
|
|
5
|
+
*/
|
|
6
|
+
export declare const listThreadsTool: import("./base.js").ToolDefinition<{
|
|
7
|
+
roomId: string;
|
|
8
|
+
offset?: number | undefined;
|
|
9
|
+
limit?: number | undefined;
|
|
10
|
+
timeRange?: string | undefined;
|
|
11
|
+
}>;
|
|
12
|
+
export declare const getThreadTool: import("./base.js").ToolDefinition<{
|
|
13
|
+
threadId: string;
|
|
14
|
+
offset?: number | undefined;
|
|
15
|
+
limit?: number | undefined;
|
|
16
|
+
}>;
|
|
17
|
+
export declare const searchThreadsTool: import("./base.js").ToolDefinition<{
|
|
18
|
+
roomId: string;
|
|
19
|
+
query: string;
|
|
20
|
+
limit?: number | undefined;
|
|
21
|
+
includeReplies?: boolean | undefined;
|
|
22
|
+
}>;
|
|
23
|
+
//# sourceMappingURL=thread-tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"thread-tools.d.ts","sourceRoot":"","sources":["../../src/tools/thread-tools.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAmCH,eAAO,MAAM,eAAe;;;;;EAsD3B,CAAC;AAeF,eAAO,MAAM,aAAa;;;;EA8DzB,CAAC;AAkBF,eAAO,MAAM,iBAAiB;;;;;EAqG7B,CAAC"}
|
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Thread Tools
|
|
4
|
+
* Tools for listing, searching, and reading threads
|
|
5
|
+
* Threads are the primary unit for organizational knowledge retrieval
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.searchThreadsTool = exports.getThreadTool = exports.listThreadsTool = void 0;
|
|
9
|
+
const zod_1 = require("zod");
|
|
10
|
+
const client_js_1 = require("../api/client.js");
|
|
11
|
+
const message_formatter_js_1 = require("../formatters/message-formatter.js");
|
|
12
|
+
const response_builder_js_1 = require("../formatters/response-builder.js");
|
|
13
|
+
const token_counter_js_1 = require("../utils/token-counter.js");
|
|
14
|
+
const time_parser_js_1 = require("../utils/time-parser.js");
|
|
15
|
+
const logger_js_1 = require("../utils/logger.js");
|
|
16
|
+
const base_js_1 = require("./base.js");
|
|
17
|
+
const logger = (0, logger_js_1.getLogger)('ThreadTools');
|
|
18
|
+
/**
|
|
19
|
+
* rocketchat_list_threads
|
|
20
|
+
* List all threads in a channel
|
|
21
|
+
*/
|
|
22
|
+
const listThreadsSchema = zod_1.z.object({
|
|
23
|
+
roomId: zod_1.z.string()
|
|
24
|
+
.describe('Channel/room ID to list threads from'),
|
|
25
|
+
limit: zod_1.z.number().min(1).max(100).default(50).optional()
|
|
26
|
+
.describe('Maximum number of threads to return (1-100, default: 50)'),
|
|
27
|
+
offset: zod_1.z.number().min(0).default(0).optional()
|
|
28
|
+
.describe('Number of threads to skip for pagination'),
|
|
29
|
+
timeRange: zod_1.z.string().optional()
|
|
30
|
+
.describe('Time filter: relative (1d, 7d, 1w, 1m) or ISO date')
|
|
31
|
+
});
|
|
32
|
+
exports.listThreadsTool = (0, base_js_1.defineTool)('rocketchat_list_threads', `List all threads in a Rocket.Chat channel.
|
|
33
|
+
|
|
34
|
+
Returns thread information including:
|
|
35
|
+
- Thread ID (same as parent message ID)
|
|
36
|
+
- Title (first message text, truncated)
|
|
37
|
+
- Author and creation time
|
|
38
|
+
- Reply count and last reply time
|
|
39
|
+
- Participant user IDs
|
|
40
|
+
|
|
41
|
+
Use this to discover discussions in a channel before diving into details.
|
|
42
|
+
|
|
43
|
+
Examples:
|
|
44
|
+
- List all threads: { "roomId": "GENERAL" }
|
|
45
|
+
- Recent threads: { "roomId": "GENERAL", "timeRange": "7d" }
|
|
46
|
+
- Paginate: { "roomId": "GENERAL", "limit": 20, "offset": 20 }`, listThreadsSchema, async (params) => {
|
|
47
|
+
try {
|
|
48
|
+
const client = (0, client_js_1.getClient)();
|
|
49
|
+
const limit = params.limit || 50;
|
|
50
|
+
const offset = params.offset || 0;
|
|
51
|
+
const response = await client.listThreads(params.roomId, limit, offset);
|
|
52
|
+
if (!response.success) {
|
|
53
|
+
return (0, base_js_1.createErrorResult)(base_js_1.ErrorCodes.API_ERROR, 'Failed to list threads');
|
|
54
|
+
}
|
|
55
|
+
// Filter by time range if specified
|
|
56
|
+
let threads = response.threads;
|
|
57
|
+
if (params.timeRange) {
|
|
58
|
+
try {
|
|
59
|
+
const range = (0, time_parser_js_1.parseTimeExpression)(params.timeRange);
|
|
60
|
+
threads = threads.filter(t => {
|
|
61
|
+
const threadTime = new Date(t.ts).getTime();
|
|
62
|
+
return threadTime >= range.start.getTime() && threadTime <= range.end.getTime();
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
// Invalid time expression, log and ignore
|
|
67
|
+
logger.debug('Invalid time expression, ignoring filter', { timeRange: params.timeRange, error });
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
const formatted = (0, message_formatter_js_1.formatThreads)(threads);
|
|
71
|
+
const { items, truncated } = token_counter_js_1.TokenCounter.truncateToFit(formatted);
|
|
72
|
+
const result = (0, response_builder_js_1.buildPaginatedResponse)(items, response.total, offset, truncated);
|
|
73
|
+
return (0, base_js_1.createToolResult)(result);
|
|
74
|
+
}
|
|
75
|
+
catch (error) {
|
|
76
|
+
return (0, base_js_1.createErrorResultFromException)(base_js_1.ErrorCodes.API_ERROR, 'Failed to list threads', error);
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
/**
|
|
80
|
+
* rocketchat_get_thread
|
|
81
|
+
* Get a thread with all its replies
|
|
82
|
+
*/
|
|
83
|
+
const getThreadSchema = zod_1.z.object({
|
|
84
|
+
threadId: zod_1.z.string()
|
|
85
|
+
.describe('Thread ID (parent message ID, tmid)'),
|
|
86
|
+
limit: zod_1.z.number().min(1).max(100).default(50).optional()
|
|
87
|
+
.describe('Maximum number of replies to return (1-100, default: 50)'),
|
|
88
|
+
offset: zod_1.z.number().min(0).default(0).optional()
|
|
89
|
+
.describe('Number of replies to skip for pagination')
|
|
90
|
+
});
|
|
91
|
+
exports.getThreadTool = (0, base_js_1.defineTool)('rocketchat_get_thread', `Get a thread with all its replies.
|
|
92
|
+
|
|
93
|
+
Returns complete thread information:
|
|
94
|
+
- Thread metadata (ID, title, author, timestamps)
|
|
95
|
+
- Parent message with full details
|
|
96
|
+
- All reply messages in chronological order
|
|
97
|
+
- Participant information
|
|
98
|
+
|
|
99
|
+
This is the primary tool for reading organizational discussions, agreements, and decisions.
|
|
100
|
+
|
|
101
|
+
Examples:
|
|
102
|
+
- Get full thread: { "threadId": "abc123xyz" }
|
|
103
|
+
- Get with pagination: { "threadId": "abc123xyz", "limit": 100 }`, getThreadSchema, async (params) => {
|
|
104
|
+
try {
|
|
105
|
+
const client = (0, client_js_1.getClient)();
|
|
106
|
+
const limit = params.limit || 50;
|
|
107
|
+
const offset = params.offset || 0;
|
|
108
|
+
// Get thread parent message
|
|
109
|
+
const parentResponse = await client.getThreadParent(params.threadId);
|
|
110
|
+
if (!parentResponse.success) {
|
|
111
|
+
return (0, base_js_1.createErrorResult)(base_js_1.ErrorCodes.NOT_FOUND, 'Thread not found', `No thread found with ID "${params.threadId}"`);
|
|
112
|
+
}
|
|
113
|
+
// Get thread replies
|
|
114
|
+
const repliesResponse = await client.getThreadMessages({
|
|
115
|
+
tmid: params.threadId,
|
|
116
|
+
count: limit,
|
|
117
|
+
offset
|
|
118
|
+
});
|
|
119
|
+
const formatted = (0, message_formatter_js_1.formatThreadWithReplies)(parentResponse.message, repliesResponse.messages || []);
|
|
120
|
+
// Truncate if needed
|
|
121
|
+
const { items: truncatedReplies, truncated } = token_counter_js_1.TokenCounter.truncateToFit(formatted.replies);
|
|
122
|
+
const result = (0, response_builder_js_1.buildSuccessResponse)({
|
|
123
|
+
...formatted,
|
|
124
|
+
replies: truncatedReplies
|
|
125
|
+
}, {
|
|
126
|
+
count: truncatedReplies.length,
|
|
127
|
+
total: formatted.totalReplies,
|
|
128
|
+
offset,
|
|
129
|
+
truncated
|
|
130
|
+
});
|
|
131
|
+
return (0, base_js_1.createToolResult)(result);
|
|
132
|
+
}
|
|
133
|
+
catch (error) {
|
|
134
|
+
return (0, base_js_1.createErrorResultFromException)(base_js_1.ErrorCodes.API_ERROR, 'Failed to get thread', error);
|
|
135
|
+
}
|
|
136
|
+
});
|
|
137
|
+
/**
|
|
138
|
+
* rocketchat_search_threads
|
|
139
|
+
* Search for threads containing specific text (searches both parent and replies)
|
|
140
|
+
* This is a key differentiator from standard Slack MCPs
|
|
141
|
+
*/
|
|
142
|
+
const searchThreadsSchema = zod_1.z.object({
|
|
143
|
+
query: zod_1.z.string().min(1)
|
|
144
|
+
.describe('Search text to find in thread content (parent and replies)'),
|
|
145
|
+
roomId: zod_1.z.string()
|
|
146
|
+
.describe('Channel/room ID to search in'),
|
|
147
|
+
limit: zod_1.z.number().min(1).max(50).default(20).optional()
|
|
148
|
+
.describe('Maximum number of threads to return (1-50, default: 20)'),
|
|
149
|
+
includeReplies: zod_1.z.boolean().default(true).optional()
|
|
150
|
+
.describe('Whether to search within thread replies (default: true)')
|
|
151
|
+
});
|
|
152
|
+
exports.searchThreadsTool = (0, base_js_1.defineTool)('rocketchat_search_threads', `Search for threads containing specific text.
|
|
153
|
+
|
|
154
|
+
IMPORTANT: Unlike basic message search, this tool searches BOTH parent messages AND replies within threads. This is essential for finding organizational knowledge that may be discussed in thread replies.
|
|
155
|
+
|
|
156
|
+
Returns:
|
|
157
|
+
- Thread ID and title
|
|
158
|
+
- Where the match was found (parent or reply)
|
|
159
|
+
- Match count within the thread
|
|
160
|
+
- Reply count and participants
|
|
161
|
+
|
|
162
|
+
Use cases:
|
|
163
|
+
- Finding discussions: "Find threads about API authentication"
|
|
164
|
+
- Finding decisions: "Server migration decisions"
|
|
165
|
+
- Finding agreements: "API spec agreements"
|
|
166
|
+
|
|
167
|
+
Examples:
|
|
168
|
+
- Search discussions: { "query": "deployment", "roomId": "GENERAL" }
|
|
169
|
+
- Search with more results: { "query": "migration", "roomId": "dev-team", "limit": 50 }`, searchThreadsSchema, async (params) => {
|
|
170
|
+
try {
|
|
171
|
+
const client = (0, client_js_1.getClient)();
|
|
172
|
+
const limit = params.limit || 20;
|
|
173
|
+
// Search in main messages first
|
|
174
|
+
const searchResponse = await client.searchMessages({
|
|
175
|
+
roomId: params.roomId,
|
|
176
|
+
searchText: params.query,
|
|
177
|
+
count: 100 // Get more to filter threads
|
|
178
|
+
});
|
|
179
|
+
if (!searchResponse.success) {
|
|
180
|
+
return (0, base_js_1.createErrorResult)(base_js_1.ErrorCodes.API_ERROR, 'Failed to search threads');
|
|
181
|
+
}
|
|
182
|
+
// Collect unique thread IDs (messages with tcount > 0 or with tmid)
|
|
183
|
+
const threadMap = new Map();
|
|
184
|
+
for (const msg of searchResponse.messages) {
|
|
185
|
+
if (msg.tcount && msg.tcount > 0) {
|
|
186
|
+
// This is a thread parent
|
|
187
|
+
const existing = threadMap.get(msg._id);
|
|
188
|
+
threadMap.set(msg._id, {
|
|
189
|
+
parentId: msg._id,
|
|
190
|
+
matchedIn: 'parent',
|
|
191
|
+
matchCount: (existing?.matchCount || 0) + 1
|
|
192
|
+
});
|
|
193
|
+
}
|
|
194
|
+
else if (msg.tmid) {
|
|
195
|
+
// This is a thread reply
|
|
196
|
+
const existing = threadMap.get(msg.tmid);
|
|
197
|
+
threadMap.set(msg.tmid, {
|
|
198
|
+
parentId: msg.tmid,
|
|
199
|
+
matchedIn: existing?.matchedIn === 'parent' ? 'parent' : 'reply',
|
|
200
|
+
matchCount: (existing?.matchCount || 0) + 1
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
// Fetch thread details for found threads
|
|
205
|
+
const threadResults = [];
|
|
206
|
+
const threadIds = Array.from(threadMap.keys()).slice(0, limit);
|
|
207
|
+
for (const threadId of threadIds) {
|
|
208
|
+
try {
|
|
209
|
+
const parentResponse = await client.getThreadParent(threadId);
|
|
210
|
+
if (parentResponse.success) {
|
|
211
|
+
const info = threadMap.get(threadId);
|
|
212
|
+
threadResults.push({
|
|
213
|
+
...(0, message_formatter_js_1.formatThreads)([parentResponse.message])[0],
|
|
214
|
+
matchedIn: info.matchedIn,
|
|
215
|
+
matchCount: info.matchCount
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
catch (error) {
|
|
220
|
+
// Skip threads we can't access, but log for debugging
|
|
221
|
+
logger.debug('Failed to fetch thread, skipping', { threadId, error });
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
const { items, truncated } = token_counter_js_1.TokenCounter.truncateToFit(threadResults);
|
|
225
|
+
const result = (0, response_builder_js_1.buildSuccessResponse)({
|
|
226
|
+
query: params.query,
|
|
227
|
+
threads: items
|
|
228
|
+
}, {
|
|
229
|
+
count: items.length,
|
|
230
|
+
total: threadMap.size,
|
|
231
|
+
truncated
|
|
232
|
+
});
|
|
233
|
+
return (0, base_js_1.createToolResult)(result);
|
|
234
|
+
}
|
|
235
|
+
catch (error) {
|
|
236
|
+
return (0, base_js_1.createErrorResultFromException)(base_js_1.ErrorCodes.API_ERROR, 'Failed to search threads', error);
|
|
237
|
+
}
|
|
238
|
+
});
|
|
239
|
+
// Register tools
|
|
240
|
+
base_js_1.toolRegistry.register(exports.listThreadsTool);
|
|
241
|
+
base_js_1.toolRegistry.register(exports.getThreadTool);
|
|
242
|
+
base_js_1.toolRegistry.register(exports.searchThreadsTool);
|
|
243
|
+
//# sourceMappingURL=thread-tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"thread-tools.js","sourceRoot":"","sources":["../../src/tools/thread-tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* User Tools
|
|
3
|
+
* Tools for looking up user information
|
|
4
|
+
*/
|
|
5
|
+
export declare const lookupUserTool: import("./base.js").ToolDefinition<{
|
|
6
|
+
userId?: string | undefined;
|
|
7
|
+
username?: string | undefined;
|
|
8
|
+
}>;
|
|
9
|
+
export declare const listUsersTool: import("./base.js").ToolDefinition<{
|
|
10
|
+
offset?: number | undefined;
|
|
11
|
+
limit?: number | undefined;
|
|
12
|
+
}>;
|
|
13
|
+
export declare const getMeTool: import("./base.js").ToolDefinition<{}>;
|
|
14
|
+
//# sourceMappingURL=user-tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user-tools.d.ts","sourceRoot":"","sources":["../../src/tools/user-tools.ts"],"names":[],"mappings":"AAAA;;;GAGG;AA2BH,eAAO,MAAM,cAAc;;;EA8C1B,CAAC;AAaF,eAAO,MAAM,aAAa;;;EAgCzB,CAAC;AAQF,eAAO,MAAM,SAAS,wCAyBrB,CAAC"}
|