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.
Files changed (131) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +332 -0
  3. package/dist/api/client.d.ts +119 -0
  4. package/dist/api/client.d.ts.map +1 -0
  5. package/dist/api/client.js +305 -0
  6. package/dist/api/client.js.map +1 -0
  7. package/dist/api/index.d.ts +6 -0
  8. package/dist/api/index.d.ts.map +1 -0
  9. package/dist/api/index.js +22 -0
  10. package/dist/api/index.js.map +1 -0
  11. package/dist/api/schemas.d.ts +10636 -0
  12. package/dist/api/schemas.d.ts.map +1 -0
  13. package/dist/api/schemas.js +267 -0
  14. package/dist/api/schemas.js.map +1 -0
  15. package/dist/api/types.d.ts +263 -0
  16. package/dist/api/types.d.ts.map +1 -0
  17. package/dist/api/types.js +7 -0
  18. package/dist/api/types.js.map +1 -0
  19. package/dist/config/config.d.ts +37 -0
  20. package/dist/config/config.d.ts.map +1 -0
  21. package/dist/config/config.js +79 -0
  22. package/dist/config/config.js.map +1 -0
  23. package/dist/config/index.d.ts +5 -0
  24. package/dist/config/index.d.ts.map +1 -0
  25. package/dist/config/index.js +21 -0
  26. package/dist/config/index.js.map +1 -0
  27. package/dist/di/container.d.ts +101 -0
  28. package/dist/di/container.d.ts.map +1 -0
  29. package/dist/di/container.js +214 -0
  30. package/dist/di/container.js.map +1 -0
  31. package/dist/di/index.d.ts +6 -0
  32. package/dist/di/index.d.ts.map +1 -0
  33. package/dist/di/index.js +12 -0
  34. package/dist/di/index.js.map +1 -0
  35. package/dist/formatters/index.d.ts +6 -0
  36. package/dist/formatters/index.d.ts.map +1 -0
  37. package/dist/formatters/index.js +22 -0
  38. package/dist/formatters/index.js.map +1 -0
  39. package/dist/formatters/message-formatter.d.ts +64 -0
  40. package/dist/formatters/message-formatter.d.ts.map +1 -0
  41. package/dist/formatters/message-formatter.js +161 -0
  42. package/dist/formatters/message-formatter.js.map +1 -0
  43. package/dist/formatters/response-builder.d.ts +60 -0
  44. package/dist/formatters/response-builder.d.ts.map +1 -0
  45. package/dist/formatters/response-builder.js +108 -0
  46. package/dist/formatters/response-builder.js.map +1 -0
  47. package/dist/guards/index.d.ts +12 -0
  48. package/dist/guards/index.d.ts.map +1 -0
  49. package/dist/guards/index.js +42 -0
  50. package/dist/guards/index.js.map +1 -0
  51. package/dist/guards/input-validator.d.ts +89 -0
  52. package/dist/guards/input-validator.d.ts.map +1 -0
  53. package/dist/guards/input-validator.js +266 -0
  54. package/dist/guards/input-validator.js.map +1 -0
  55. package/dist/guards/rate-limiter.d.ts +115 -0
  56. package/dist/guards/rate-limiter.d.ts.map +1 -0
  57. package/dist/guards/rate-limiter.js +226 -0
  58. package/dist/guards/rate-limiter.js.map +1 -0
  59. package/dist/guards/sanitizer.d.ts +35 -0
  60. package/dist/guards/sanitizer.d.ts.map +1 -0
  61. package/dist/guards/sanitizer.js +111 -0
  62. package/dist/guards/sanitizer.js.map +1 -0
  63. package/dist/guards/write-guard.d.ts +33 -0
  64. package/dist/guards/write-guard.d.ts.map +1 -0
  65. package/dist/guards/write-guard.js +90 -0
  66. package/dist/guards/write-guard.js.map +1 -0
  67. package/dist/http-server.d.ts +9 -0
  68. package/dist/http-server.d.ts.map +1 -0
  69. package/dist/http-server.js +190 -0
  70. package/dist/http-server.js.map +1 -0
  71. package/dist/index.d.ts +14 -0
  72. package/dist/index.d.ts.map +1 -0
  73. package/dist/index.js +114 -0
  74. package/dist/index.js.map +1 -0
  75. package/dist/tools/base.d.ts +85 -0
  76. package/dist/tools/base.d.ts.map +1 -0
  77. package/dist/tools/base.js +184 -0
  78. package/dist/tools/base.js.map +1 -0
  79. package/dist/tools/channel-tools.d.ts +18 -0
  80. package/dist/tools/channel-tools.d.ts.map +1 -0
  81. package/dist/tools/channel-tools.js +151 -0
  82. package/dist/tools/channel-tools.js.map +1 -0
  83. package/dist/tools/handler-utils.d.ts +75 -0
  84. package/dist/tools/handler-utils.d.ts.map +1 -0
  85. package/dist/tools/handler-utils.js +105 -0
  86. package/dist/tools/handler-utils.js.map +1 -0
  87. package/dist/tools/index.d.ts +17 -0
  88. package/dist/tools/index.d.ts.map +1 -0
  89. package/dist/tools/index.js +40 -0
  90. package/dist/tools/index.js.map +1 -0
  91. package/dist/tools/message-tools.d.ts +20 -0
  92. package/dist/tools/message-tools.d.ts.map +1 -0
  93. package/dist/tools/message-tools.js +194 -0
  94. package/dist/tools/message-tools.js.map +1 -0
  95. package/dist/tools/thread-tools.d.ts +23 -0
  96. package/dist/tools/thread-tools.d.ts.map +1 -0
  97. package/dist/tools/thread-tools.js +243 -0
  98. package/dist/tools/thread-tools.js.map +1 -0
  99. package/dist/tools/user-tools.d.ts +14 -0
  100. package/dist/tools/user-tools.d.ts.map +1 -0
  101. package/dist/tools/user-tools.js +120 -0
  102. package/dist/tools/user-tools.js.map +1 -0
  103. package/dist/tools/write-tools.d.ts +15 -0
  104. package/dist/tools/write-tools.d.ts.map +1 -0
  105. package/dist/tools/write-tools.js +181 -0
  106. package/dist/tools/write-tools.js.map +1 -0
  107. package/dist/utils/cache.d.ts +47 -0
  108. package/dist/utils/cache.d.ts.map +1 -0
  109. package/dist/utils/cache.js +116 -0
  110. package/dist/utils/cache.js.map +1 -0
  111. package/dist/utils/error-handler.d.ts +64 -0
  112. package/dist/utils/error-handler.d.ts.map +1 -0
  113. package/dist/utils/error-handler.js +148 -0
  114. package/dist/utils/error-handler.js.map +1 -0
  115. package/dist/utils/index.d.ts +12 -0
  116. package/dist/utils/index.d.ts.map +1 -0
  117. package/dist/utils/index.js +33 -0
  118. package/dist/utils/index.js.map +1 -0
  119. package/dist/utils/logger.d.ts +50 -0
  120. package/dist/utils/logger.d.ts.map +1 -0
  121. package/dist/utils/logger.js +118 -0
  122. package/dist/utils/logger.js.map +1 -0
  123. package/dist/utils/time-parser.d.ts +37 -0
  124. package/dist/utils/time-parser.d.ts.map +1 -0
  125. package/dist/utils/time-parser.js +98 -0
  126. package/dist/utils/time-parser.js.map +1 -0
  127. package/dist/utils/token-counter.d.ts +42 -0
  128. package/dist/utils/token-counter.d.ts.map +1 -0
  129. package/dist/utils/token-counter.js +81 -0
  130. package/dist/utils/token-counter.js.map +1 -0
  131. package/package.json +68 -0
@@ -0,0 +1,111 @@
1
+ "use strict";
2
+ /**
3
+ * Message Sanitizer - Neutralizes dangerous mentions and patterns
4
+ * Prevents accidental mass notifications (@all, @here, @channel)
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.MessageSanitizer = void 0;
8
+ exports.getSanitizer = getSanitizer;
9
+ exports.resetSanitizer = resetSanitizer;
10
+ const config_js_1 = require("../config/config.js");
11
+ // Dangerous mention patterns that trigger mass notifications
12
+ const DANGEROUS_MENTIONS = [
13
+ { pattern: /@all\b/gi, replacement: '@\u200Ball', name: '@all' },
14
+ { pattern: /@here\b/gi, replacement: '@\u200Bhere', name: '@here' },
15
+ { pattern: /@channel\b/gi, replacement: '@\u200Bchannel', name: '@channel' },
16
+ { pattern: /@everyone\b/gi, replacement: '@\u200Beveryone', name: '@everyone' },
17
+ ];
18
+ // URL patterns that might be malicious
19
+ const URL_PATTERNS = [
20
+ // JavaScript URLs
21
+ { pattern: /javascript:/gi, replacement: 'javascript\u200B:', name: 'javascript:' },
22
+ // Data URLs (can contain malicious content)
23
+ { pattern: /data:text\/html/gi, replacement: 'data\u200B:text/html', name: 'data:' },
24
+ ];
25
+ class MessageSanitizer {
26
+ blockMentions;
27
+ blockedMentions;
28
+ constructor() {
29
+ const config = (0, config_js_1.loadConfig)();
30
+ this.blockMentions = config.safety.blockMentions;
31
+ this.blockedMentions = config.safety.blockedMentions;
32
+ }
33
+ /**
34
+ * Sanitize message text
35
+ */
36
+ sanitize(text) {
37
+ let result = text;
38
+ const neutralized = [];
39
+ if (this.blockMentions) {
40
+ // Neutralize dangerous mentions
41
+ for (const mention of DANGEROUS_MENTIONS) {
42
+ if (this.blockedMentions.length === 0 ||
43
+ this.blockedMentions.includes(mention.name)) {
44
+ if (mention.pattern.test(result)) {
45
+ result = result.replace(mention.pattern, mention.replacement);
46
+ neutralized.push(mention.name);
47
+ }
48
+ // Reset regex lastIndex
49
+ mention.pattern.lastIndex = 0;
50
+ }
51
+ }
52
+ }
53
+ // Always neutralize potentially dangerous URLs
54
+ for (const urlPattern of URL_PATTERNS) {
55
+ if (urlPattern.pattern.test(result)) {
56
+ result = result.replace(urlPattern.pattern, urlPattern.replacement);
57
+ neutralized.push(urlPattern.name);
58
+ }
59
+ urlPattern.pattern.lastIndex = 0;
60
+ }
61
+ return {
62
+ text: result,
63
+ modified: result !== text,
64
+ neutralized
65
+ };
66
+ }
67
+ /**
68
+ * Check if text contains dangerous patterns without modifying
69
+ */
70
+ check(text) {
71
+ const patterns = [];
72
+ for (const mention of DANGEROUS_MENTIONS) {
73
+ if (mention.pattern.test(text)) {
74
+ patterns.push(mention.name);
75
+ }
76
+ mention.pattern.lastIndex = 0;
77
+ }
78
+ for (const urlPattern of URL_PATTERNS) {
79
+ if (urlPattern.pattern.test(text)) {
80
+ patterns.push(urlPattern.name);
81
+ }
82
+ urlPattern.pattern.lastIndex = 0;
83
+ }
84
+ return {
85
+ hasDangerousPatterns: patterns.length > 0,
86
+ patterns
87
+ };
88
+ }
89
+ /**
90
+ * Get current configuration
91
+ */
92
+ getConfig() {
93
+ return {
94
+ blockMentions: this.blockMentions,
95
+ blockedMentions: [...this.blockedMentions]
96
+ };
97
+ }
98
+ }
99
+ exports.MessageSanitizer = MessageSanitizer;
100
+ // Singleton instance
101
+ let sanitizerInstance = null;
102
+ function getSanitizer() {
103
+ if (!sanitizerInstance) {
104
+ sanitizerInstance = new MessageSanitizer();
105
+ }
106
+ return sanitizerInstance;
107
+ }
108
+ function resetSanitizer() {
109
+ sanitizerInstance = null;
110
+ }
111
+ //# sourceMappingURL=sanitizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sanitizer.js","sourceRoot":"","sources":["../../src/guards/sanitizer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Write Guard - Controls write operations to channels
3
+ * Provides whitelist/blacklist based access control
4
+ */
5
+ export interface WriteCheckResult {
6
+ allowed: boolean;
7
+ reason?: string;
8
+ }
9
+ export declare class WriteGuard {
10
+ private enabled;
11
+ private whitelist;
12
+ private blacklist;
13
+ constructor();
14
+ /**
15
+ * Check if write operation is allowed for a room
16
+ */
17
+ checkWrite(roomId: string, roomName?: string): WriteCheckResult;
18
+ /**
19
+ * Check if write is globally enabled
20
+ */
21
+ isEnabled(): boolean;
22
+ /**
23
+ * Get current configuration
24
+ */
25
+ getConfig(): {
26
+ enabled: boolean;
27
+ whitelist: string[];
28
+ blacklist: string[];
29
+ };
30
+ }
31
+ export declare function getWriteGuard(): WriteGuard;
32
+ export declare function resetWriteGuard(): void;
33
+ //# sourceMappingURL=write-guard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"write-guard.d.ts","sourceRoot":"","sources":["../../src/guards/write-guard.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,MAAM,WAAW,gBAAgB;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,UAAU;IACnB,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,SAAS,CAAW;IAC5B,OAAO,CAAC,SAAS,CAAW;;IAS5B;;OAEG;IACH,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,gBAAgB;IA2C/D;;OAEG;IACH,SAAS,IAAI,OAAO;IAIpB;;OAEG;IACH,SAAS,IAAI;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,SAAS,EAAE,MAAM,EAAE,CAAC;QAAC,SAAS,EAAE,MAAM,EAAE,CAAA;KAAE;CAO9E;AAKD,wBAAgB,aAAa,IAAI,UAAU,CAK1C;AAED,wBAAgB,eAAe,IAAI,IAAI,CAEtC"}
@@ -0,0 +1,90 @@
1
+ "use strict";
2
+ /**
3
+ * Write Guard - Controls write operations to channels
4
+ * Provides whitelist/blacklist based access control
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.WriteGuard = void 0;
8
+ exports.getWriteGuard = getWriteGuard;
9
+ exports.resetWriteGuard = resetWriteGuard;
10
+ const config_js_1 = require("../config/config.js");
11
+ class WriteGuard {
12
+ enabled;
13
+ whitelist;
14
+ blacklist;
15
+ constructor() {
16
+ const config = (0, config_js_1.loadConfig)();
17
+ this.enabled = config.write.enabled;
18
+ this.whitelist = config.write.whitelist;
19
+ this.blacklist = config.write.blacklist;
20
+ }
21
+ /**
22
+ * Check if write operation is allowed for a room
23
+ */
24
+ checkWrite(roomId, roomName) {
25
+ // If write is globally disabled
26
+ if (!this.enabled) {
27
+ return {
28
+ allowed: false,
29
+ reason: 'Write operations are disabled. Set ROCKETCHAT_WRITE_ENABLED=true to enable.'
30
+ };
31
+ }
32
+ const identifiers = [roomId];
33
+ if (roomName) {
34
+ identifiers.push(roomName);
35
+ }
36
+ // Check blacklist first (takes precedence)
37
+ for (const id of identifiers) {
38
+ if (this.blacklist.includes(id)) {
39
+ return {
40
+ allowed: false,
41
+ reason: `Room "${id}" is in the blacklist and cannot be written to.`
42
+ };
43
+ }
44
+ }
45
+ // If whitelist is empty, all non-blacklisted rooms are allowed
46
+ if (this.whitelist.length === 0) {
47
+ return { allowed: true };
48
+ }
49
+ // Check if room is in whitelist
50
+ for (const id of identifiers) {
51
+ if (this.whitelist.includes(id)) {
52
+ return { allowed: true };
53
+ }
54
+ }
55
+ // Room not in whitelist
56
+ return {
57
+ allowed: false,
58
+ reason: `Room "${roomId}" is not in the whitelist. Allowed rooms: ${this.whitelist.join(', ')}`
59
+ };
60
+ }
61
+ /**
62
+ * Check if write is globally enabled
63
+ */
64
+ isEnabled() {
65
+ return this.enabled;
66
+ }
67
+ /**
68
+ * Get current configuration
69
+ */
70
+ getConfig() {
71
+ return {
72
+ enabled: this.enabled,
73
+ whitelist: [...this.whitelist],
74
+ blacklist: [...this.blacklist]
75
+ };
76
+ }
77
+ }
78
+ exports.WriteGuard = WriteGuard;
79
+ // Singleton instance
80
+ let writeGuardInstance = null;
81
+ function getWriteGuard() {
82
+ if (!writeGuardInstance) {
83
+ writeGuardInstance = new WriteGuard();
84
+ }
85
+ return writeGuardInstance;
86
+ }
87
+ function resetWriteGuard() {
88
+ writeGuardInstance = null;
89
+ }
90
+ //# sourceMappingURL=write-guard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"write-guard.js","sourceRoot":"","sources":["../../src/guards/write-guard.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAyFH,sCAKC;AAED,0CAEC;AAhGD,mDAAiD;AAOjD,MAAa,UAAU;IACX,OAAO,CAAU;IACjB,SAAS,CAAW;IACpB,SAAS,CAAW;IAE5B;QACI,MAAM,MAAM,GAAG,IAAA,sBAAU,GAAE,CAAC;QAC5B,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC;QACpC,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC;QACxC,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC;IAC5C,CAAC;IAED;;OAEG;IACH,UAAU,CAAC,MAAc,EAAE,QAAiB;QACxC,gCAAgC;QAChC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAChB,OAAO;gBACH,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE,6EAA6E;aACxF,CAAC;QACN,CAAC;QAED,MAAM,WAAW,GAAG,CAAC,MAAM,CAAC,CAAC;QAC7B,IAAI,QAAQ,EAAE,CAAC;YACX,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC/B,CAAC;QAED,2CAA2C;QAC3C,KAAK,MAAM,EAAE,IAAI,WAAW,EAAE,CAAC;YAC3B,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;gBAC9B,OAAO;oBACH,OAAO,EAAE,KAAK;oBACd,MAAM,EAAE,SAAS,EAAE,iDAAiD;iBACvE,CAAC;YACN,CAAC;QACL,CAAC;QAED,+DAA+D;QAC/D,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC9B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAC7B,CAAC;QAED,gCAAgC;QAChC,KAAK,MAAM,EAAE,IAAI,WAAW,EAAE,CAAC;YAC3B,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;gBAC9B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YAC7B,CAAC;QACL,CAAC;QAED,wBAAwB;QACxB,OAAO;YACH,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,SAAS,MAAM,6CAA6C,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;SAClG,CAAC;IACN,CAAC;IAED;;OAEG;IACH,SAAS;QACL,OAAO,IAAI,CAAC,OAAO,CAAC;IACxB,CAAC;IAED;;OAEG;IACH,SAAS;QACL,OAAO;YACH,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,SAAS,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC;YAC9B,SAAS,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC;SACjC,CAAC;IACN,CAAC;CACJ;AA3ED,gCA2EC;AAED,qBAAqB;AACrB,IAAI,kBAAkB,GAAsB,IAAI,CAAC;AAEjD,SAAgB,aAAa;IACzB,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACtB,kBAAkB,GAAG,IAAI,UAAU,EAAE,CAAC;IAC1C,CAAC;IACD,OAAO,kBAAkB,CAAC;AAC9B,CAAC;AAED,SAAgB,eAAe;IAC3B,kBAAkB,GAAG,IAAI,CAAC;AAC9B,CAAC"}
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Rocket.Chat MCP Server - HTTP/SSE Mode
4
+ *
5
+ * This runs the MCP server over HTTP for remote access.
6
+ * Use this when Claude Desktop is on a different machine.
7
+ */
8
+ export {};
9
+ //# sourceMappingURL=http-server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-server.d.ts","sourceRoot":"","sources":["../src/http-server.ts"],"names":[],"mappings":";AACA;;;;;GAKG"}
@@ -0,0 +1,190 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ /**
4
+ * Rocket.Chat MCP Server - HTTP/SSE Mode
5
+ *
6
+ * This runs the MCP server over HTTP for remote access.
7
+ * Use this when Claude Desktop is on a different machine.
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ const index_js_1 = require("@modelcontextprotocol/sdk/server/index.js");
11
+ const streamableHttp_js_1 = require("@modelcontextprotocol/sdk/server/streamableHttp.js");
12
+ const types_js_1 = require("@modelcontextprotocol/sdk/types.js");
13
+ const node_http_1 = require("node:http");
14
+ const node_crypto_1 = require("node:crypto");
15
+ const config_js_1 = require("./config/config.js");
16
+ const index_js_2 = require("./tools/index.js");
17
+ const client_js_1 = require("./api/client.js");
18
+ // Server metadata
19
+ const SERVER_NAME = 'mcp-rocketchat';
20
+ const SERVER_VERSION = '0.1.0';
21
+ // Store transports by session ID for multi-session support
22
+ const transports = new Map();
23
+ /**
24
+ * Create and configure the MCP server
25
+ */
26
+ function createMcpServer() {
27
+ const server = new index_js_1.Server({
28
+ name: SERVER_NAME,
29
+ version: SERVER_VERSION
30
+ }, {
31
+ capabilities: {
32
+ tools: {}
33
+ }
34
+ });
35
+ // Handle list tools request
36
+ server.setRequestHandler(types_js_1.ListToolsRequestSchema, async () => {
37
+ const tools = index_js_2.toolRegistry.getSchemas();
38
+ return { tools };
39
+ });
40
+ // Handle tool execution
41
+ server.setRequestHandler(types_js_1.CallToolRequestSchema, async (request) => {
42
+ const { name, arguments: args } = request.params;
43
+ const tool = index_js_2.toolRegistry.get(name);
44
+ if (!tool) {
45
+ throw new types_js_1.McpError(types_js_1.ErrorCode.MethodNotFound, `Unknown tool: ${name}`);
46
+ }
47
+ try {
48
+ const result = await tool.handler(args || {});
49
+ return {
50
+ content: result.content,
51
+ isError: result.isError
52
+ };
53
+ }
54
+ catch (error) {
55
+ const message = error instanceof Error ? error.message : 'Unknown error';
56
+ return {
57
+ content: [{
58
+ type: 'text',
59
+ text: JSON.stringify({
60
+ success: false,
61
+ error: {
62
+ code: 'EXECUTION_ERROR',
63
+ message: `Tool execution failed: ${message}`
64
+ }
65
+ }, null, 2)
66
+ }],
67
+ isError: true
68
+ };
69
+ }
70
+ });
71
+ return server;
72
+ }
73
+ /**
74
+ * Handle HTTP requests for MCP
75
+ */
76
+ async function handleRequest(req, res) {
77
+ const url = new URL(req.url || '/', `http://${req.headers.host}`);
78
+ // CORS headers
79
+ res.setHeader('Access-Control-Allow-Origin', '*');
80
+ res.setHeader('Access-Control-Allow-Methods', 'GET, POST, DELETE, OPTIONS');
81
+ res.setHeader('Access-Control-Allow-Headers', 'Content-Type, mcp-session-id');
82
+ res.setHeader('Access-Control-Expose-Headers', 'mcp-session-id');
83
+ // Handle preflight
84
+ if (req.method === 'OPTIONS') {
85
+ res.writeHead(204);
86
+ res.end();
87
+ return;
88
+ }
89
+ // Health check endpoint
90
+ if (url.pathname === '/health') {
91
+ res.writeHead(200, { 'Content-Type': 'application/json' });
92
+ res.end(JSON.stringify({ status: 'ok', server: SERVER_NAME, version: SERVER_VERSION }));
93
+ return;
94
+ }
95
+ // MCP endpoint
96
+ if (url.pathname === '/mcp') {
97
+ const sessionId = req.headers['mcp-session-id'];
98
+ // For new sessions (POST without session ID or initialization)
99
+ if (req.method === 'POST' && !sessionId) {
100
+ // Create new transport and server
101
+ const transport = new streamableHttp_js_1.StreamableHTTPServerTransport({
102
+ sessionIdGenerator: () => (0, node_crypto_1.randomUUID)(),
103
+ });
104
+ const server = createMcpServer();
105
+ // Store transport
106
+ transport.onclose = () => {
107
+ if (transport.sessionId) {
108
+ transports.delete(transport.sessionId);
109
+ }
110
+ };
111
+ await server.connect(transport);
112
+ if (transport.sessionId) {
113
+ transports.set(transport.sessionId, transport);
114
+ }
115
+ await transport.handleRequest(req, res);
116
+ return;
117
+ }
118
+ // For existing sessions
119
+ if (sessionId) {
120
+ const transport = transports.get(sessionId);
121
+ if (transport) {
122
+ await transport.handleRequest(req, res);
123
+ return;
124
+ }
125
+ else {
126
+ res.writeHead(404, { 'Content-Type': 'application/json' });
127
+ res.end(JSON.stringify({ error: 'Session not found' }));
128
+ return;
129
+ }
130
+ }
131
+ // GET request for SSE stream without session
132
+ if (req.method === 'GET') {
133
+ res.writeHead(400, { 'Content-Type': 'application/json' });
134
+ res.end(JSON.stringify({ error: 'Session ID required for GET requests' }));
135
+ return;
136
+ }
137
+ res.writeHead(400, { 'Content-Type': 'application/json' });
138
+ res.end(JSON.stringify({ error: 'Invalid request' }));
139
+ return;
140
+ }
141
+ // Not found
142
+ res.writeHead(404, { 'Content-Type': 'application/json' });
143
+ res.end(JSON.stringify({ error: 'Not found' }));
144
+ }
145
+ /**
146
+ * Main entry point
147
+ */
148
+ async function main() {
149
+ // Load and validate configuration
150
+ const config = (0, config_js_1.loadConfig)();
151
+ // Validate required configuration
152
+ if (!config.rocketchat.url) {
153
+ console.error('Error: ROCKETCHAT_URL environment variable is required');
154
+ process.exit(1);
155
+ }
156
+ if (!config.rocketchat.authToken) {
157
+ console.error('Error: ROCKETCHAT_AUTH_TOKEN environment variable is required');
158
+ process.exit(1);
159
+ }
160
+ if (!config.rocketchat.userId) {
161
+ console.error('Error: ROCKETCHAT_USER_ID environment variable is required');
162
+ process.exit(1);
163
+ }
164
+ // Test connection
165
+ const client = (0, client_js_1.getClient)();
166
+ const connected = await client.testConnection();
167
+ if (!connected) {
168
+ console.error('Error: Failed to connect to Rocket.Chat server');
169
+ console.error(`URL: ${config.rocketchat.url}`);
170
+ process.exit(1);
171
+ }
172
+ // Get port from environment or default
173
+ const port = parseInt(process.env.MCP_HTTP_PORT || '3456', 10);
174
+ // Create HTTP server
175
+ const httpServer = (0, node_http_1.createServer)(handleRequest);
176
+ httpServer.listen(port, '0.0.0.0', () => {
177
+ console.error(`${SERVER_NAME} v${SERVER_VERSION} HTTP server started`);
178
+ console.error(`Listening on http://0.0.0.0:${port}`);
179
+ console.error(`MCP endpoint: http://0.0.0.0:${port}/mcp`);
180
+ console.error(`Health check: http://0.0.0.0:${port}/health`);
181
+ console.error(`Connected to: ${config.rocketchat.url}`);
182
+ console.error(`Write operations: ${config.write.enabled ? 'enabled' : 'disabled'}`);
183
+ });
184
+ }
185
+ // Run the server
186
+ main().catch((error) => {
187
+ console.error('Fatal error:', error);
188
+ process.exit(1);
189
+ });
190
+ //# sourceMappingURL=http-server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-server.js","sourceRoot":"","sources":["../src/http-server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Rocket.Chat MCP Server
4
+ * Model Context Protocol server for Rocket.Chat integration
5
+ *
6
+ * Features:
7
+ * - Channel/room listing and search
8
+ * - Message history with time filtering
9
+ * - Thread-centric knowledge retrieval
10
+ * - User lookup
11
+ * - Safe message sending (optional)
12
+ */
13
+ export {};
14
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;;;;;;GAUG"}
package/dist/index.js ADDED
@@ -0,0 +1,114 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ /**
4
+ * Rocket.Chat MCP Server
5
+ * Model Context Protocol server for Rocket.Chat integration
6
+ *
7
+ * Features:
8
+ * - Channel/room listing and search
9
+ * - Message history with time filtering
10
+ * - Thread-centric knowledge retrieval
11
+ * - User lookup
12
+ * - Safe message sending (optional)
13
+ */
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ const index_js_1 = require("@modelcontextprotocol/sdk/server/index.js");
16
+ const stdio_js_1 = require("@modelcontextprotocol/sdk/server/stdio.js");
17
+ const types_js_1 = require("@modelcontextprotocol/sdk/types.js");
18
+ const config_js_1 = require("./config/config.js");
19
+ const index_js_2 = require("./tools/index.js");
20
+ const client_js_1 = require("./api/client.js");
21
+ // Server metadata
22
+ const SERVER_NAME = 'mcp-rocketchat';
23
+ const SERVER_VERSION = '0.1.0';
24
+ /**
25
+ * Create and configure the MCP server
26
+ */
27
+ function createServer() {
28
+ const server = new index_js_1.Server({
29
+ name: SERVER_NAME,
30
+ version: SERVER_VERSION
31
+ }, {
32
+ capabilities: {
33
+ tools: {}
34
+ }
35
+ });
36
+ // Handle list tools request
37
+ server.setRequestHandler(types_js_1.ListToolsRequestSchema, async () => {
38
+ const tools = index_js_2.toolRegistry.getSchemas();
39
+ return { tools };
40
+ });
41
+ // Handle tool execution
42
+ server.setRequestHandler(types_js_1.CallToolRequestSchema, async (request) => {
43
+ const { name, arguments: args } = request.params;
44
+ const tool = index_js_2.toolRegistry.get(name);
45
+ if (!tool) {
46
+ throw new types_js_1.McpError(types_js_1.ErrorCode.MethodNotFound, `Unknown tool: ${name}`);
47
+ }
48
+ try {
49
+ const result = await tool.handler(args || {});
50
+ return {
51
+ content: result.content,
52
+ isError: result.isError
53
+ };
54
+ }
55
+ catch (error) {
56
+ const message = error instanceof Error ? error.message : 'Unknown error';
57
+ return {
58
+ content: [{
59
+ type: 'text',
60
+ text: JSON.stringify({
61
+ success: false,
62
+ error: {
63
+ code: 'EXECUTION_ERROR',
64
+ message: `Tool execution failed: ${message}`
65
+ }
66
+ }, null, 2)
67
+ }],
68
+ isError: true
69
+ };
70
+ }
71
+ });
72
+ return server;
73
+ }
74
+ /**
75
+ * Main entry point
76
+ */
77
+ async function main() {
78
+ // Load and validate configuration
79
+ const config = (0, config_js_1.loadConfig)();
80
+ // Validate required configuration
81
+ if (!config.rocketchat.url) {
82
+ console.error('Error: ROCKETCHAT_URL environment variable is required');
83
+ process.exit(1);
84
+ }
85
+ if (!config.rocketchat.authToken) {
86
+ console.error('Error: ROCKETCHAT_AUTH_TOKEN environment variable is required');
87
+ process.exit(1);
88
+ }
89
+ if (!config.rocketchat.userId) {
90
+ console.error('Error: ROCKETCHAT_USER_ID environment variable is required');
91
+ process.exit(1);
92
+ }
93
+ // Test connection
94
+ const client = (0, client_js_1.getClient)();
95
+ const connected = await client.testConnection();
96
+ if (!connected) {
97
+ console.error('Error: Failed to connect to Rocket.Chat server');
98
+ console.error(`URL: ${config.rocketchat.url}`);
99
+ process.exit(1);
100
+ }
101
+ // Create and start server
102
+ const server = createServer();
103
+ const transport = new stdio_js_1.StdioServerTransport();
104
+ console.error(`Starting ${SERVER_NAME} v${SERVER_VERSION}`);
105
+ console.error(`Connected to: ${config.rocketchat.url}`);
106
+ console.error(`Write operations: ${config.write.enabled ? 'enabled' : 'disabled'}`);
107
+ await server.connect(transport);
108
+ }
109
+ // Run the server
110
+ main().catch((error) => {
111
+ console.error('Fatal error:', error);
112
+ process.exit(1);
113
+ });
114
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}