@chykalophia/clickup-mcp-server 3.2.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 (211) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +467 -0
  3. package/bin/clickup-mcp-server-ai.js +9 -0
  4. package/bin/clickup-mcp-server-basic.js +9 -0
  5. package/bin/clickup-mcp-server-efficiency.js +9 -0
  6. package/bin/clickup-mcp-server-enhanced.js +9 -0
  7. package/build/app.d.ts +1 -0
  8. package/build/app.js +2 -0
  9. package/build/app.js.map +1 -0
  10. package/build/clickup-client/attachments-enhanced.d.ts +128 -0
  11. package/build/clickup-client/attachments-enhanced.js +212 -0
  12. package/build/clickup-client/attachments-enhanced.js.map +1 -0
  13. package/build/clickup-client/auth.d.ts +254 -0
  14. package/build/clickup-client/auth.js +105 -0
  15. package/build/clickup-client/auth.js.map +1 -0
  16. package/build/clickup-client/chat-enhanced.d.ts +141 -0
  17. package/build/clickup-client/chat-enhanced.js +196 -0
  18. package/build/clickup-client/chat-enhanced.js.map +1 -0
  19. package/build/clickup-client/checklists.d.ts +87 -0
  20. package/build/clickup-client/checklists.js +63 -0
  21. package/build/clickup-client/checklists.js.map +1 -0
  22. package/build/clickup-client/comments-enhanced.d.ts +176 -0
  23. package/build/clickup-client/comments-enhanced.js +230 -0
  24. package/build/clickup-client/comments-enhanced.js.map +1 -0
  25. package/build/clickup-client/comments.d.ts +173 -0
  26. package/build/clickup-client/comments.js +312 -0
  27. package/build/clickup-client/comments.js.map +1 -0
  28. package/build/clickup-client/custom-fields-enhanced.d.ts +286 -0
  29. package/build/clickup-client/custom-fields-enhanced.js +416 -0
  30. package/build/clickup-client/custom-fields-enhanced.js.map +1 -0
  31. package/build/clickup-client/dependencies-enhanced.d.ts +144 -0
  32. package/build/clickup-client/dependencies-enhanced.js +142 -0
  33. package/build/clickup-client/dependencies-enhanced.js.map +1 -0
  34. package/build/clickup-client/docs-enhanced.d.ts +176 -0
  35. package/build/clickup-client/docs-enhanced.js +374 -0
  36. package/build/clickup-client/docs-enhanced.js.map +1 -0
  37. package/build/clickup-client/docs.d.ts +84 -0
  38. package/build/clickup-client/docs.js +156 -0
  39. package/build/clickup-client/docs.js.map +1 -0
  40. package/build/clickup-client/folders.d.ts +62 -0
  41. package/build/clickup-client/folders.js +53 -0
  42. package/build/clickup-client/folders.js.map +1 -0
  43. package/build/clickup-client/goals-enhanced.d.ts +163 -0
  44. package/build/clickup-client/goals-enhanced.js +309 -0
  45. package/build/clickup-client/goals-enhanced.js.map +1 -0
  46. package/build/clickup-client/index.d.ts +16 -0
  47. package/build/clickup-client/index.js +61 -0
  48. package/build/clickup-client/index.js.map +1 -0
  49. package/build/clickup-client/lists.d.ts +105 -0
  50. package/build/clickup-client/lists.js +108 -0
  51. package/build/clickup-client/lists.js.map +1 -0
  52. package/build/clickup-client/secure-client.d.ts +88 -0
  53. package/build/clickup-client/secure-client.js +275 -0
  54. package/build/clickup-client/secure-client.js.map +1 -0
  55. package/build/clickup-client/spaces.d.ts +58 -0
  56. package/build/clickup-client/spaces.js +28 -0
  57. package/build/clickup-client/spaces.js.map +1 -0
  58. package/build/clickup-client/tasks.d.ts +161 -0
  59. package/build/clickup-client/tasks.js +99 -0
  60. package/build/clickup-client/tasks.js.map +1 -0
  61. package/build/clickup-client/time-tracking-enhanced.d.ts +153 -0
  62. package/build/clickup-client/time-tracking-enhanced.js +292 -0
  63. package/build/clickup-client/time-tracking-enhanced.js.map +1 -0
  64. package/build/clickup-client/views-enhanced.d.ts +149 -0
  65. package/build/clickup-client/views-enhanced.js +210 -0
  66. package/build/clickup-client/views-enhanced.js.map +1 -0
  67. package/build/clickup-client/webhooks-enhanced.d.ts +119 -0
  68. package/build/clickup-client/webhooks-enhanced.js +169 -0
  69. package/build/clickup-client/webhooks-enhanced.js.map +1 -0
  70. package/build/controllers/lists.controller.d.ts +1 -0
  71. package/build/controllers/lists.controller.js +2 -0
  72. package/build/controllers/lists.controller.js.map +1 -0
  73. package/build/index-efficiency-simple.d.ts +2 -0
  74. package/build/index-efficiency-simple.js +379 -0
  75. package/build/index-efficiency-simple.js.map +1 -0
  76. package/build/index-enhanced-efficiency.d.ts +2 -0
  77. package/build/index-enhanced-efficiency.js +275 -0
  78. package/build/index-enhanced-efficiency.js.map +1 -0
  79. package/build/index-enhanced.d.ts +2 -0
  80. package/build/index-enhanced.js +74 -0
  81. package/build/index-enhanced.js.map +1 -0
  82. package/build/index.d.ts +2 -0
  83. package/build/index.js +77 -0
  84. package/build/index.js.map +1 -0
  85. package/build/resources/checklist-resources.d.ts +2 -0
  86. package/build/resources/checklist-resources.js +102 -0
  87. package/build/resources/checklist-resources.js.map +1 -0
  88. package/build/resources/comment-resources.d.ts +2 -0
  89. package/build/resources/comment-resources.js +152 -0
  90. package/build/resources/comment-resources.js.map +1 -0
  91. package/build/resources/doc-resources.d.ts +2 -0
  92. package/build/resources/doc-resources.js +77 -0
  93. package/build/resources/doc-resources.js.map +1 -0
  94. package/build/resources/folder-resources.d.ts +2 -0
  95. package/build/resources/folder-resources.js +160 -0
  96. package/build/resources/folder-resources.js.map +1 -0
  97. package/build/resources/list-resources.d.ts +2 -0
  98. package/build/resources/list-resources.js +104 -0
  99. package/build/resources/list-resources.js.map +1 -0
  100. package/build/resources/space-resources.d.ts +2 -0
  101. package/build/resources/space-resources.js +104 -0
  102. package/build/resources/space-resources.js.map +1 -0
  103. package/build/resources/task-resources.d.ts +2 -0
  104. package/build/resources/task-resources.js +57 -0
  105. package/build/resources/task-resources.js.map +1 -0
  106. package/build/routes/lists.routes.d.ts +1 -0
  107. package/build/routes/lists.routes.js +2 -0
  108. package/build/routes/lists.routes.js.map +1 -0
  109. package/build/schemas/attachments-schemas.d.ts +201 -0
  110. package/build/schemas/attachments-schemas.js +250 -0
  111. package/build/schemas/attachments-schemas.js.map +1 -0
  112. package/build/schemas/chat-schemas.d.ts +478 -0
  113. package/build/schemas/chat-schemas.js +173 -0
  114. package/build/schemas/chat-schemas.js.map +1 -0
  115. package/build/schemas/custom-field-schemas.d.ts +1617 -0
  116. package/build/schemas/custom-field-schemas.js +384 -0
  117. package/build/schemas/custom-field-schemas.js.map +1 -0
  118. package/build/schemas/dependencies-schemas.d.ts +274 -0
  119. package/build/schemas/dependencies-schemas.js +176 -0
  120. package/build/schemas/dependencies-schemas.js.map +1 -0
  121. package/build/schemas/document-schemas.d.ts +433 -0
  122. package/build/schemas/document-schemas.js +168 -0
  123. package/build/schemas/document-schemas.js.map +1 -0
  124. package/build/schemas/goals-schemas.d.ts +961 -0
  125. package/build/schemas/goals-schemas.js +293 -0
  126. package/build/schemas/goals-schemas.js.map +1 -0
  127. package/build/schemas/time-tracking-schemas.d.ts +741 -0
  128. package/build/schemas/time-tracking-schemas.js +234 -0
  129. package/build/schemas/time-tracking-schemas.js.map +1 -0
  130. package/build/schemas/views-schemas.d.ts +1168 -0
  131. package/build/schemas/views-schemas.js +221 -0
  132. package/build/schemas/views-schemas.js.map +1 -0
  133. package/build/schemas/webhook-schemas.d.ts +1127 -0
  134. package/build/schemas/webhook-schemas.js +137 -0
  135. package/build/schemas/webhook-schemas.js.map +1 -0
  136. package/build/services/lists.service.d.ts +1 -0
  137. package/build/services/lists.service.js +2 -0
  138. package/build/services/lists.service.js.map +1 -0
  139. package/build/tools/attachments-tools-setup.d.ts +2 -0
  140. package/build/tools/attachments-tools-setup.js +387 -0
  141. package/build/tools/attachments-tools-setup.js.map +1 -0
  142. package/build/tools/chat-tools-enhanced.d.ts +5 -0
  143. package/build/tools/chat-tools-enhanced.js +396 -0
  144. package/build/tools/chat-tools-enhanced.js.map +1 -0
  145. package/build/tools/chat-tools.d.ts +2 -0
  146. package/build/tools/chat-tools.js +614 -0
  147. package/build/tools/chat-tools.js.map +1 -0
  148. package/build/tools/checklist-tools.d.ts +2 -0
  149. package/build/tools/checklist-tools.js +139 -0
  150. package/build/tools/checklist-tools.js.map +1 -0
  151. package/build/tools/comment-tools.d.ts +2 -0
  152. package/build/tools/comment-tools.js +295 -0
  153. package/build/tools/comment-tools.js.map +1 -0
  154. package/build/tools/custom-field-tools.d.ts +2 -0
  155. package/build/tools/custom-field-tools.js +578 -0
  156. package/build/tools/custom-field-tools.js.map +1 -0
  157. package/build/tools/dependencies-tools-setup.d.ts +2 -0
  158. package/build/tools/dependencies-tools-setup.js +319 -0
  159. package/build/tools/dependencies-tools-setup.js.map +1 -0
  160. package/build/tools/doc-tools-enhanced.d.ts +2 -0
  161. package/build/tools/doc-tools-enhanced.js +417 -0
  162. package/build/tools/doc-tools-enhanced.js.map +1 -0
  163. package/build/tools/doc-tools.d.ts +2 -0
  164. package/build/tools/doc-tools.js +109 -0
  165. package/build/tools/doc-tools.js.map +1 -0
  166. package/build/tools/goals-tools.d.ts +2 -0
  167. package/build/tools/goals-tools.js +422 -0
  168. package/build/tools/goals-tools.js.map +1 -0
  169. package/build/tools/helper-tools.d.ts +2 -0
  170. package/build/tools/helper-tools.js +363 -0
  171. package/build/tools/helper-tools.js.map +1 -0
  172. package/build/tools/space-tools.d.ts +2 -0
  173. package/build/tools/space-tools.js +45 -0
  174. package/build/tools/space-tools.js.map +1 -0
  175. package/build/tools/task-tools.d.ts +2 -0
  176. package/build/tools/task-tools.js +415 -0
  177. package/build/tools/task-tools.js.map +1 -0
  178. package/build/tools/time-tracking-tools.d.ts +2 -0
  179. package/build/tools/time-tracking-tools.js +329 -0
  180. package/build/tools/time-tracking-tools.js.map +1 -0
  181. package/build/tools/views-tools-setup.d.ts +2 -0
  182. package/build/tools/views-tools-setup.js +358 -0
  183. package/build/tools/views-tools-setup.js.map +1 -0
  184. package/build/tools/webhook-tools-setup.d.ts +2 -0
  185. package/build/tools/webhook-tools-setup.js +304 -0
  186. package/build/tools/webhook-tools-setup.js.map +1 -0
  187. package/build/tools/webhook-tools.d.ts +4 -0
  188. package/build/tools/webhook-tools.js +345 -0
  189. package/build/tools/webhook-tools.js.map +1 -0
  190. package/build/utils/clickup-comment-formatter.d.ts +124 -0
  191. package/build/utils/clickup-comment-formatter.js +504 -0
  192. package/build/utils/clickup-comment-formatter.js.map +1 -0
  193. package/build/utils/context-aware-suggestions.d.ts +45 -0
  194. package/build/utils/context-aware-suggestions.js +360 -0
  195. package/build/utils/context-aware-suggestions.js.map +1 -0
  196. package/build/utils/error-handling.d.ts +140 -0
  197. package/build/utils/error-handling.js +392 -0
  198. package/build/utils/error-handling.js.map +1 -0
  199. package/build/utils/markdown-styling.d.ts +40 -0
  200. package/build/utils/markdown-styling.js +344 -0
  201. package/build/utils/markdown-styling.js.map +1 -0
  202. package/build/utils/markdown.d.ts +54 -0
  203. package/build/utils/markdown.js +243 -0
  204. package/build/utils/markdown.js.map +1 -0
  205. package/build/utils/security.d.ts +79 -0
  206. package/build/utils/security.js +303 -0
  207. package/build/utils/security.js.map +1 -0
  208. package/build/utils/tool-efficiency.d.ts +59 -0
  209. package/build/utils/tool-efficiency.js +247 -0
  210. package/build/utils/tool-efficiency.js.map +1 -0
  211. package/package.json +130 -0
@@ -0,0 +1,79 @@
1
+ import { z } from 'zod';
2
+ /**
3
+ * Security utilities for the ClickUp MCP Server
4
+ */
5
+ export interface RateLimitConfig {
6
+ windowMs: number;
7
+ maxRequests: number;
8
+ }
9
+ export declare const DEFAULT_RATE_LIMITS: Record<string, RateLimitConfig>;
10
+ declare class RateLimiter {
11
+ private requests;
12
+ isAllowed(key: string, config: RateLimitConfig): boolean;
13
+ reset(key?: string): void;
14
+ }
15
+ export declare const rateLimiter: RateLimiter;
16
+ /**
17
+ * Validate and sanitize API token
18
+ */
19
+ export declare const validateApiToken: (token: string) => {
20
+ isValid: boolean;
21
+ error?: string;
22
+ };
23
+ /**
24
+ * Sanitize user input to prevent injection attacks
25
+ */
26
+ export declare const sanitizeInput: (input: any) => any;
27
+ /**
28
+ * Validate webhook signature with timing-safe comparison
29
+ */
30
+ export declare const validateWebhookSignature: (payload: string, signature: string, secret: string) => {
31
+ isValid: boolean;
32
+ error?: string;
33
+ };
34
+ /**
35
+ * Validate file upload security
36
+ */
37
+ export declare const validateFileUpload: (filename: string, mimetype?: string, size?: number) => {
38
+ isValid: boolean;
39
+ errors: string[];
40
+ };
41
+ /**
42
+ * Validate URL for security
43
+ */
44
+ export declare const validateUrl: (url: string) => {
45
+ isValid: boolean;
46
+ error?: string;
47
+ };
48
+ /**
49
+ * Generate secure random string
50
+ */
51
+ export declare const generateSecureToken: (length?: number) => string;
52
+ /**
53
+ * Hash sensitive data
54
+ */
55
+ export declare const hashSensitiveData: (data: string, salt?: string) => string;
56
+ /**
57
+ * Validate environment variables
58
+ */
59
+ export declare const validateEnvironment: () => {
60
+ isValid: boolean;
61
+ errors: string[];
62
+ };
63
+ /**
64
+ * Security headers for HTTP responses
65
+ */
66
+ export declare const getSecurityHeaders: () => Record<string, string>;
67
+ /**
68
+ * Log security events
69
+ */
70
+ export declare const logSecurityEvent: (event: string, details: Record<string, any>, level?: 'info' | 'warn' | 'error') => void;
71
+ /**
72
+ * Validate MCP tool parameters
73
+ */
74
+ export declare const validateMcpParameters: (schema: z.ZodSchema, params: any) => {
75
+ isValid: boolean;
76
+ data?: any;
77
+ errors?: string[];
78
+ };
79
+ export {};
@@ -0,0 +1,303 @@
1
+ import crypto from 'crypto';
2
+ import { z } from 'zod';
3
+ // Default rate limits
4
+ export const DEFAULT_RATE_LIMITS = {
5
+ webhook: { windowMs: 60000, maxRequests: 100 }, // 100 requests per minute
6
+ api: { windowMs: 60000, maxRequests: 1000 }, // 1000 requests per minute
7
+ upload: { windowMs: 60000, maxRequests: 10 } // 10 uploads per minute
8
+ };
9
+ // Rate limiter implementation
10
+ class RateLimiter {
11
+ constructor() {
12
+ this.requests = new Map();
13
+ }
14
+ isAllowed(key, config) {
15
+ const now = Date.now();
16
+ const windowStart = now - config.windowMs;
17
+ // Get existing requests for this key
18
+ const keyRequests = this.requests.get(key) || [];
19
+ // Filter out old requests
20
+ const recentRequests = keyRequests.filter(time => time > windowStart);
21
+ // Check if under limit
22
+ if (recentRequests.length >= config.maxRequests) {
23
+ return false;
24
+ }
25
+ // Add current request
26
+ recentRequests.push(now);
27
+ this.requests.set(key, recentRequests);
28
+ return true;
29
+ }
30
+ reset(key) {
31
+ if (key) {
32
+ this.requests.delete(key);
33
+ }
34
+ else {
35
+ this.requests.clear();
36
+ }
37
+ }
38
+ }
39
+ export const rateLimiter = new RateLimiter();
40
+ /**
41
+ * Validate and sanitize API token
42
+ */
43
+ export const validateApiToken = (token) => {
44
+ if (!token) {
45
+ return { isValid: false, error: 'API token is required' };
46
+ }
47
+ if (typeof token !== 'string') {
48
+ return { isValid: false, error: 'API token must be a string' };
49
+ }
50
+ if (token.length < 10) {
51
+ return { isValid: false, error: 'API token appears to be too short' };
52
+ }
53
+ if (token.length > 200) {
54
+ return { isValid: false, error: 'API token appears to be too long' };
55
+ }
56
+ // Check for suspicious patterns
57
+ if (token.includes(' ') || token.includes('\n') || token.includes('\t')) {
58
+ return { isValid: false, error: 'API token contains invalid characters' };
59
+ }
60
+ return { isValid: true };
61
+ };
62
+ /**
63
+ * Sanitize user input to prevent injection attacks
64
+ */
65
+ export const sanitizeInput = (input) => {
66
+ if (typeof input === 'string') {
67
+ // Remove potentially dangerous characters
68
+ return input
69
+ .replace(/[<>]/g, '') // Remove HTML tags
70
+ .replace(/javascript:/gi, '') // Remove javascript: protocol
71
+ .replace(/on\w+=/gi, '') // Remove event handlers
72
+ .trim();
73
+ }
74
+ if (Array.isArray(input)) {
75
+ return input.map(sanitizeInput);
76
+ }
77
+ if (input && typeof input === 'object') {
78
+ const sanitized = {};
79
+ for (const [key, value] of Object.entries(input)) {
80
+ sanitized[sanitizeInput(key)] = sanitizeInput(value);
81
+ }
82
+ return sanitized;
83
+ }
84
+ return input;
85
+ };
86
+ /**
87
+ * Validate webhook signature with timing-safe comparison
88
+ */
89
+ export const validateWebhookSignature = (payload, signature, secret) => {
90
+ try {
91
+ if (!payload || !signature || !secret) {
92
+ return { isValid: false, error: 'Missing required parameters for signature validation' };
93
+ }
94
+ // Generate expected signature
95
+ const expectedSignature = crypto
96
+ .createHmac('sha256', secret)
97
+ .update(payload, 'utf8')
98
+ .digest('hex');
99
+ // Extract signature from header (remove 'sha256=' prefix if present)
100
+ const receivedSignature = signature.replace(/^sha256=/, '');
101
+ // Validate signature format
102
+ if (!/^[a-f0-9]{64}$/i.test(receivedSignature)) {
103
+ return { isValid: false, error: 'Invalid signature format' };
104
+ }
105
+ // Timing-safe comparison
106
+ const isValid = crypto.timingSafeEqual(Buffer.from(expectedSignature, 'hex'), Buffer.from(receivedSignature, 'hex'));
107
+ return { isValid };
108
+ }
109
+ catch (error) {
110
+ return {
111
+ isValid: false,
112
+ error: `Signature validation error: ${error instanceof Error ? error.message : 'Unknown error'}`
113
+ };
114
+ }
115
+ };
116
+ /**
117
+ * Validate file upload security
118
+ */
119
+ export const validateFileUpload = (filename, mimetype, size) => {
120
+ const errors = [];
121
+ // Validate filename
122
+ if (!filename || typeof filename !== 'string') {
123
+ errors.push('Filename is required and must be a string');
124
+ }
125
+ else {
126
+ // Check for path traversal attempts
127
+ if (filename.includes('..') || filename.includes('/') || filename.includes('\\')) {
128
+ errors.push('Filename contains invalid path characters');
129
+ }
130
+ // Check for dangerous extensions
131
+ const dangerousExtensions = [
132
+ '.exe', '.bat', '.cmd', '.com', '.pif', '.scr', '.vbs', '.js', '.jar',
133
+ '.php', '.asp', '.aspx', '.jsp', '.sh', '.ps1', '.py', '.rb'
134
+ ];
135
+ const extension = filename.toLowerCase().split('.').pop();
136
+ if (extension && dangerousExtensions.includes(`.${extension}`)) {
137
+ errors.push('File type not allowed for security reasons');
138
+ }
139
+ // Check filename length
140
+ if (filename.length > 255) {
141
+ errors.push('Filename too long (max 255 characters)');
142
+ }
143
+ // Check for null bytes
144
+ if (filename.includes('\0')) {
145
+ errors.push('Filename contains null bytes');
146
+ }
147
+ }
148
+ // Validate mimetype if provided
149
+ if (mimetype) {
150
+ const allowedMimetypes = [
151
+ // Images
152
+ 'image/jpeg', 'image/png', 'image/gif', 'image/webp', 'image/svg+xml',
153
+ // Documents
154
+ 'application/pdf', 'text/plain', 'text/csv',
155
+ 'application/msword', 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
156
+ 'application/vnd.ms-excel', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
157
+ 'application/vnd.ms-powerpoint', 'application/vnd.openxmlformats-officedocument.presentationml.presentation',
158
+ // Archives
159
+ 'application/zip', 'application/x-rar-compressed', 'application/x-7z-compressed',
160
+ // Media
161
+ 'video/mp4', 'video/webm', 'audio/mp3', 'audio/wav', 'audio/ogg'
162
+ ];
163
+ if (!allowedMimetypes.includes(mimetype)) {
164
+ errors.push(`Mimetype '${mimetype}' not allowed`);
165
+ }
166
+ }
167
+ // Validate file size if provided (max 100MB)
168
+ if (size !== undefined) {
169
+ const maxSize = 100 * 1024 * 1024; // 100MB
170
+ if (size > maxSize) {
171
+ errors.push(`File size too large (max ${maxSize} bytes)`);
172
+ }
173
+ if (size < 0) {
174
+ errors.push('Invalid file size');
175
+ }
176
+ }
177
+ return {
178
+ isValid: errors.length === 0,
179
+ errors
180
+ };
181
+ };
182
+ /**
183
+ * Validate URL for security
184
+ */
185
+ export const validateUrl = (url) => {
186
+ try {
187
+ const parsedUrl = new URL(url);
188
+ // Only allow HTTP and HTTPS
189
+ if (!['http:', 'https:'].includes(parsedUrl.protocol)) {
190
+ return { isValid: false, error: 'Only HTTP and HTTPS URLs are allowed' };
191
+ }
192
+ // Block localhost and private IPs for security
193
+ const hostname = parsedUrl.hostname.toLowerCase();
194
+ if (hostname === 'localhost' ||
195
+ hostname === '127.0.0.1' ||
196
+ hostname === '::1' ||
197
+ hostname.startsWith('192.168.') ||
198
+ hostname.startsWith('10.') ||
199
+ hostname.startsWith('172.16.') ||
200
+ hostname.startsWith('172.17.') ||
201
+ hostname.startsWith('172.18.') ||
202
+ hostname.startsWith('172.19.') ||
203
+ hostname.startsWith('172.2') ||
204
+ hostname.startsWith('172.30.') ||
205
+ hostname.startsWith('172.31.')) {
206
+ return { isValid: false, error: 'Private and localhost URLs are not allowed' };
207
+ }
208
+ return { isValid: true };
209
+ }
210
+ catch (error) {
211
+ return { isValid: false, error: 'Invalid URL format' };
212
+ }
213
+ };
214
+ /**
215
+ * Generate secure random string
216
+ */
217
+ export const generateSecureToken = (length = 32) => {
218
+ return crypto.randomBytes(length).toString('hex');
219
+ };
220
+ /**
221
+ * Hash sensitive data
222
+ */
223
+ export const hashSensitiveData = (data, salt) => {
224
+ const actualSalt = salt || crypto.randomBytes(16).toString('hex');
225
+ return crypto.pbkdf2Sync(data, actualSalt, 10000, 64, 'sha512').toString('hex');
226
+ };
227
+ /**
228
+ * Validate environment variables
229
+ */
230
+ export const validateEnvironment = () => {
231
+ const errors = [];
232
+ // Check required environment variables
233
+ const requiredVars = ['CLICKUP_API_TOKEN'];
234
+ for (const varName of requiredVars) {
235
+ const value = process.env[varName];
236
+ if (!value) {
237
+ errors.push(`Missing required environment variable: ${varName}`);
238
+ }
239
+ else {
240
+ // Validate API token format
241
+ if (varName === 'CLICKUP_API_TOKEN') {
242
+ const validation = validateApiToken(value);
243
+ if (!validation.isValid) {
244
+ errors.push(`Invalid ${varName}: ${validation.error}`);
245
+ }
246
+ }
247
+ }
248
+ }
249
+ return {
250
+ isValid: errors.length === 0,
251
+ errors
252
+ };
253
+ };
254
+ /**
255
+ * Security headers for HTTP responses
256
+ */
257
+ export const getSecurityHeaders = () => {
258
+ return {
259
+ 'X-Content-Type-Options': 'nosniff',
260
+ 'X-Frame-Options': 'DENY',
261
+ 'X-XSS-Protection': '1; mode=block',
262
+ 'Strict-Transport-Security': 'max-age=31536000; includeSubDomains',
263
+ 'Content-Security-Policy': "default-src 'self'",
264
+ 'Referrer-Policy': 'strict-origin-when-cross-origin'
265
+ };
266
+ };
267
+ /**
268
+ * Log security events
269
+ */
270
+ export const logSecurityEvent = (event, details, level = 'info') => {
271
+ const timestamp = new Date().toISOString();
272
+ const logEntry = {
273
+ timestamp,
274
+ event,
275
+ level,
276
+ details: sanitizeInput(details)
277
+ };
278
+ // In production, this should go to a proper logging system
279
+ console.error(`[SECURITY ${level.toUpperCase()}] ${timestamp}: ${event}`, logEntry);
280
+ };
281
+ /**
282
+ * Validate MCP tool parameters
283
+ */
284
+ export const validateMcpParameters = (schema, params) => {
285
+ try {
286
+ // Sanitize input first
287
+ const sanitizedParams = sanitizeInput(params);
288
+ // Validate with schema
289
+ const data = schema.parse(sanitizedParams);
290
+ return { isValid: true, data };
291
+ }
292
+ catch (error) {
293
+ if (error instanceof z.ZodError) {
294
+ const errors = error.errors.map(err => `${err.path.join('.')}: ${err.message}`);
295
+ return { isValid: false, errors };
296
+ }
297
+ return {
298
+ isValid: false,
299
+ errors: [`Validation error: ${error instanceof Error ? error.message : 'Unknown error'}`]
300
+ };
301
+ }
302
+ };
303
+ //# sourceMappingURL=security.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"security.js","sourceRoot":"","sources":["../../src/utils/security.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAYxB,sBAAsB;AACtB,MAAM,CAAC,MAAM,mBAAmB,GAAoC;IAClE,OAAO,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,EAAE,0BAA0B;IAC1E,GAAG,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,2BAA2B;IACxE,MAAM,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,wBAAwB;CACtE,CAAC;AAEF,8BAA8B;AAC9B,MAAM,WAAW;IAAjB;QACU,aAAQ,GAA0B,IAAI,GAAG,EAAE,CAAC;IA+BtD,CAAC;IA7BC,SAAS,CAAC,GAAW,EAAE,MAAuB;QAC5C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,WAAW,GAAG,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC;QAE1C,qCAAqC;QACrC,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;QAEjD,0BAA0B;QAC1B,MAAM,cAAc,GAAG,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,GAAG,WAAW,CAAC,CAAC;QAEtE,uBAAuB;QACvB,IAAI,cAAc,CAAC,MAAM,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;YAChD,OAAO,KAAK,CAAC;QACf,CAAC;QAED,sBAAsB;QACtB,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACzB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;QAEvC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,GAAY;QAChB,IAAI,GAAG,EAAE,CAAC;YACR,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC5B,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QACxB,CAAC;IACH,CAAC;CACF;AAED,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;AAE7C;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,KAAa,EAAwC,EAAE;IACtF,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,uBAAuB,EAAE,CAAC;IAC5D,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,4BAA4B,EAAE,CAAC;IACjE,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;QACtB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,mCAAmC,EAAE,CAAC;IACxE,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;QACvB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,kCAAkC,EAAE,CAAC;IACvE,CAAC;IAED,gCAAgC;IAChC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACxE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,uCAAuC,EAAE,CAAC;IAC5E,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAC3B,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,KAAU,EAAO,EAAE;IAC/C,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,0CAA0C;QAC1C,OAAO,KAAK;aACT,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,mBAAmB;aACxC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC,8BAA8B;aAC3D,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,wBAAwB;aAChD,IAAI,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IAClC,CAAC;IAED,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACvC,MAAM,SAAS,GAAQ,EAAE,CAAC;QAC1B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACjD,SAAS,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;QACvD,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CACtC,OAAe,EACf,SAAiB,EACjB,MAAc,EACwB,EAAE;IACxC,IAAI,CAAC;QACH,IAAI,CAAC,OAAO,IAAI,CAAC,SAAS,IAAI,CAAC,MAAM,EAAE,CAAC;YACtC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,sDAAsD,EAAE,CAAC;QAC3F,CAAC;QAED,8BAA8B;QAC9B,MAAM,iBAAiB,GAAG,MAAM;aAC7B,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC;aAC5B,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC;aACvB,MAAM,CAAC,KAAK,CAAC,CAAC;QAEjB,qEAAqE;QACrE,MAAM,iBAAiB,GAAG,SAAS,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;QAE5D,4BAA4B;QAC5B,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC;YAC/C,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,0BAA0B,EAAE,CAAC;QAC/D,CAAC;QAED,yBAAyB;QACzB,MAAM,OAAO,GAAG,MAAM,CAAC,eAAe,CACpC,MAAM,CAAC,IAAI,CAAC,iBAAiB,EAAE,KAAK,CAAC,EACrC,MAAM,CAAC,IAAI,CAAC,iBAAiB,EAAE,KAAK,CAAC,CACtC,CAAC;QAEF,OAAO,EAAE,OAAO,EAAE,CAAC;IACrB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,+BAA+B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE;SACjG,CAAC;IACJ,CAAC;AACH,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAChC,QAAgB,EAChB,QAAiB,EACjB,IAAa,EAC2B,EAAE;IAC1C,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,oBAAoB;IACpB,IAAI,CAAC,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC9C,MAAM,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;IAC3D,CAAC;SAAM,CAAC;QACN,oCAAoC;QACpC,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YACjF,MAAM,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;QAC3D,CAAC;QAED,iCAAiC;QACjC,MAAM,mBAAmB,GAAG;YAC1B,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;YACrE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK;SAC7D,CAAC;QAEF,MAAM,SAAS,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;QAC1D,IAAI,SAAS,IAAI,mBAAmB,CAAC,QAAQ,CAAC,IAAI,SAAS,EAAE,CAAC,EAAE,CAAC;YAC/D,MAAM,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;QAC5D,CAAC;QAED,wBAAwB;QACxB,IAAI,QAAQ,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;YAC1B,MAAM,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;QACxD,CAAC;QAED,uBAAuB;QACvB,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5B,MAAM,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;IAED,gCAAgC;IAChC,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,gBAAgB,GAAG;YACvB,SAAS;YACT,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE,eAAe;YACrE,YAAY;YACZ,iBAAiB,EAAE,YAAY,EAAE,UAAU;YAC3C,oBAAoB,EAAE,yEAAyE;YAC/F,0BAA0B,EAAE,mEAAmE;YAC/F,+BAA+B,EAAE,2EAA2E;YAC5G,WAAW;YACX,iBAAiB,EAAE,8BAA8B,EAAE,6BAA6B;YAChF,QAAQ;YACR,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW;SACjE,CAAC;QAEF,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YACzC,MAAM,CAAC,IAAI,CAAC,aAAa,QAAQ,eAAe,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;IAED,6CAA6C;IAC7C,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,MAAM,OAAO,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,QAAQ;QAC3C,IAAI,IAAI,GAAG,OAAO,EAAE,CAAC;YACnB,MAAM,CAAC,IAAI,CAAC,4BAA4B,OAAO,SAAS,CAAC,CAAC;QAC5D,CAAC;QACD,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC;YACb,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;IAED,OAAO;QACL,OAAO,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC;QAC5B,MAAM;KACP,CAAC;AACJ,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,GAAW,EAAwC,EAAE;IAC/E,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QAE/B,4BAA4B;QAC5B,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC;YACtD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,sCAAsC,EAAE,CAAC;QAC3E,CAAC;QAED,+CAA+C;QAC/C,MAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;QAClD,IACE,QAAQ,KAAK,WAAW;YACxB,QAAQ,KAAK,WAAW;YACxB,QAAQ,KAAK,KAAK;YAClB,QAAQ,CAAC,UAAU,CAAC,UAAU,CAAC;YAC/B,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC;YAC1B,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC;YAC9B,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC;YAC9B,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC;YAC9B,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC;YAC9B,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC;YAC5B,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC;YAC9B,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,EAC9B,CAAC;YACD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,4CAA4C,EAAE,CAAC;QACjF,CAAC;QAED,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC3B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC;IACzD,CAAC;AACH,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,SAAiB,EAAE,EAAU,EAAE;IACjE,OAAO,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACpD,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,IAAY,EAAE,IAAa,EAAU,EAAE;IACvE,MAAM,UAAU,GAAG,IAAI,IAAI,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAClE,OAAO,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAClF,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAA2C,EAAE;IAC9E,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,uCAAuC;IACvC,MAAM,YAAY,GAAG,CAAC,mBAAmB,CAAC,CAAC;IAE3C,KAAK,MAAM,OAAO,IAAI,YAAY,EAAE,CAAC;QACnC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACnC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,CAAC,IAAI,CAAC,0CAA0C,OAAO,EAAE,CAAC,CAAC;QACnE,CAAC;aAAM,CAAC;YACN,4BAA4B;YAC5B,IAAI,OAAO,KAAK,mBAAmB,EAAE,CAAC;gBACpC,MAAM,UAAU,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;gBAC3C,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;oBACxB,MAAM,CAAC,IAAI,CAAC,WAAW,OAAO,KAAK,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC;gBACzD,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO;QACL,OAAO,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC;QAC5B,MAAM;KACP,CAAC;AACJ,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAA2B,EAAE;IAC7D,OAAO;QACL,wBAAwB,EAAE,SAAS;QACnC,iBAAiB,EAAE,MAAM;QACzB,kBAAkB,EAAE,eAAe;QACnC,2BAA2B,EAAE,qCAAqC;QAClE,yBAAyB,EAAE,oBAAoB;QAC/C,iBAAiB,EAAE,iCAAiC;KACrD,CAAC;AACJ,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAC9B,KAAa,EACb,OAA4B,EAC5B,QAAmC,MAAM,EACnC,EAAE;IACR,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC3C,MAAM,QAAQ,GAAG;QACf,SAAS;QACT,KAAK;QACL,KAAK;QACL,OAAO,EAAE,aAAa,CAAC,OAAO,CAAC;KAChC,CAAC;IAEF,2DAA2D;IAC3D,OAAO,CAAC,KAAK,CAAC,aAAa,KAAK,CAAC,WAAW,EAAE,KAAK,SAAS,KAAK,KAAK,EAAE,EAAE,QAAQ,CAAC,CAAC;AACtF,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CACnC,MAAmB,EACnB,MAAW,EAC0C,EAAE;IACvD,IAAI,CAAC;QACH,uBAAuB;QACvB,MAAM,eAAe,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;QAE9C,uBAAuB;QACvB,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;QAE3C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACjC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,CAAC,CAAC,QAAQ,EAAE,CAAC;YAChC,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;YAChF,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QACpC,CAAC;QAED,OAAO;YACL,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,CAAC,qBAAqB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC;SAC1F,CAAC;IACJ,CAAC;AACH,CAAC,CAAC"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Tool Efficiency and Metadata System
3
+ * Provides intelligent tool suggestions and efficiency hints for better AI decision making
4
+ */
5
+ export interface ToolMetadata {
6
+ name: string;
7
+ category: 'core' | 'search' | 'bulk' | 'helper' | 'advanced';
8
+ efficiency: 'direct' | 'hierarchical' | 'bulk' | 'search';
9
+ use_cases: string[];
10
+ alternatives: string[];
11
+ efficiency_hint?: string;
12
+ prerequisites?: string[];
13
+ related_tools?: string[];
14
+ performance_impact: 'low' | 'medium' | 'high';
15
+ }
16
+ export interface ToolSuggestion {
17
+ primary_tools: string[];
18
+ alternative_tools: string[];
19
+ efficiency_notes: string[];
20
+ workflow_hint: string;
21
+ }
22
+ /**
23
+ * Tool categories and their efficiency characteristics
24
+ */
25
+ export declare const TOOL_CATEGORIES: {
26
+ DIRECT: {
27
+ chat: string[];
28
+ tasks: string[];
29
+ search: string[];
30
+ bulk: string[];
31
+ };
32
+ HIERARCHICAL: {
33
+ navigation: string[];
34
+ discovery: string[];
35
+ };
36
+ HELPERS: {
37
+ suggestions: string[];
38
+ validation: string[];
39
+ };
40
+ };
41
+ /**
42
+ * Comprehensive tool metadata registry
43
+ */
44
+ export declare const TOOL_METADATA: Record<string, ToolMetadata>;
45
+ /**
46
+ * Analyzes a user request and suggests the most efficient tools
47
+ */
48
+ export declare function suggestToolsForTask(request: string): ToolSuggestion;
49
+ /**
50
+ * Finds chat channels efficiently
51
+ */
52
+ export declare function getChatChannelDiscoveryStrategy(): ToolSuggestion;
53
+ /**
54
+ * Gets efficiency rating for a tool combination
55
+ */
56
+ export declare function getEfficiencyRating(tools: string[]): {
57
+ rating: 'excellent' | 'good' | 'fair' | 'poor';
58
+ suggestions: string[];
59
+ };