bn-slack-mcp-server 0.0.1

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 (71) hide show
  1. package/README.md +243 -0
  2. package/dist/debug-middleware.d.ts +12 -0
  3. package/dist/debug-middleware.d.ts.map +1 -0
  4. package/dist/debug-middleware.js +36 -0
  5. package/dist/debug-middleware.js.map +1 -0
  6. package/dist/helpers.d.ts +86 -0
  7. package/dist/helpers.d.ts.map +1 -0
  8. package/dist/helpers.js +235 -0
  9. package/dist/helpers.js.map +1 -0
  10. package/dist/index.d.ts +9 -0
  11. package/dist/index.d.ts.map +1 -0
  12. package/dist/index.js +162 -0
  13. package/dist/index.js.map +1 -0
  14. package/dist/schemas.d.ts +286 -0
  15. package/dist/schemas.d.ts.map +1 -0
  16. package/dist/schemas.js +840 -0
  17. package/dist/schemas.js.map +1 -0
  18. package/dist/slack-api-client.d.ts +51 -0
  19. package/dist/slack-api-client.d.ts.map +1 -0
  20. package/dist/slack-api-client.js +227 -0
  21. package/dist/slack-api-client.js.map +1 -0
  22. package/dist/tool-loader.d.ts +35 -0
  23. package/dist/tool-loader.d.ts.map +1 -0
  24. package/dist/tool-loader.js +121 -0
  25. package/dist/tool-loader.js.map +1 -0
  26. package/dist/tool-registry.d.ts +44 -0
  27. package/dist/tool-registry.d.ts.map +1 -0
  28. package/dist/tool-registry.js +56 -0
  29. package/dist/tool-registry.js.map +1 -0
  30. package/dist/tools/cache.d.ts +69 -0
  31. package/dist/tools/cache.d.ts.map +1 -0
  32. package/dist/tools/cache.js +94 -0
  33. package/dist/tools/cache.js.map +1 -0
  34. package/dist/tools/channels.d.ts +76 -0
  35. package/dist/tools/channels.d.ts.map +1 -0
  36. package/dist/tools/channels.js +251 -0
  37. package/dist/tools/channels.js.map +1 -0
  38. package/dist/tools/conversations.d.ts +77 -0
  39. package/dist/tools/conversations.d.ts.map +1 -0
  40. package/dist/tools/conversations.js +302 -0
  41. package/dist/tools/conversations.js.map +1 -0
  42. package/dist/tools/files.d.ts +15 -0
  43. package/dist/tools/files.d.ts.map +1 -0
  44. package/dist/tools/files.js +30 -0
  45. package/dist/tools/files.js.map +1 -0
  46. package/dist/tools/index.d.ts +12 -0
  47. package/dist/tools/index.d.ts.map +1 -0
  48. package/dist/tools/index.js +20 -0
  49. package/dist/tools/index.js.map +1 -0
  50. package/dist/tools/messages.d.ts +20 -0
  51. package/dist/tools/messages.d.ts.map +1 -0
  52. package/dist/tools/messages.js +40 -0
  53. package/dist/tools/messages.js.map +1 -0
  54. package/dist/tools/system.d.ts +48 -0
  55. package/dist/tools/system.d.ts.map +1 -0
  56. package/dist/tools/system.js +124 -0
  57. package/dist/tools/system.js.map +1 -0
  58. package/dist/tools/users.d.ts +69 -0
  59. package/dist/tools/users.d.ts.map +1 -0
  60. package/dist/tools/users.js +179 -0
  61. package/dist/tools/users.js.map +1 -0
  62. package/dist/tools/workspace.d.ts +50 -0
  63. package/dist/tools/workspace.d.ts.map +1 -0
  64. package/dist/tools/workspace.js +56 -0
  65. package/dist/tools/workspace.js.map +1 -0
  66. package/dist/types.d.ts +160 -0
  67. package/dist/types.d.ts.map +1 -0
  68. package/dist/types.js +2 -0
  69. package/dist/types.js.map +1 -0
  70. package/package.json +48 -0
  71. package/tools.json +483 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemas.js","sourceRoot":"","sources":["../src/schemas.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Slack API Client
3
+ *
4
+ * Stateless HTTP client for Slack Web API with Bearer token authentication.
5
+ * Extracts token from Express request headers for per-request auth.
6
+ */
7
+ import type { Request } from "express";
8
+ import type { SlackApiResponse, SlackUser, SlackChannel } from "./types.js";
9
+ /**
10
+ * Extract Bearer token from request Authorization header
11
+ */
12
+ export declare function getTokenFromRequest(req: Request): string;
13
+ /**
14
+ * Slack API client class with caching support
15
+ */
16
+ export declare class SlackClient {
17
+ private token;
18
+ private headers;
19
+ usersCacheFile: string;
20
+ channelsCacheFile: string;
21
+ constructor(token: string);
22
+ /**
23
+ * Make GET request to Slack API
24
+ */
25
+ makeRequest<T = SlackApiResponse>(endpoint: string, params?: Record<string, string | number | boolean>): Promise<T>;
26
+ /**
27
+ * Make POST request to Slack API
28
+ */
29
+ postRequest<T = SlackApiResponse>(endpoint: string, body?: Record<string, unknown>): Promise<T>;
30
+ /**
31
+ * Get users with caching support
32
+ */
33
+ getCachedUsers(cacheDurationHours?: number): Promise<SlackUser[]>;
34
+ /**
35
+ * Get channels with caching support and graceful permission handling
36
+ */
37
+ getCachedChannels(cacheDurationHours?: number): Promise<SlackChannel[]>;
38
+ /**
39
+ * Resolve channel name/mention to channel ID
40
+ */
41
+ resolveChannelId(channelInput: string): Promise<string>;
42
+ /**
43
+ * Resolve user name/mention to user ID
44
+ */
45
+ resolveUserId(userInput: string): Promise<string>;
46
+ }
47
+ /**
48
+ * Get Slack client from Express request
49
+ */
50
+ export declare function getSlackClient(req: Request): SlackClient;
51
+ //# sourceMappingURL=slack-api-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slack-api-client.d.ts","sourceRoot":"","sources":["../src/slack-api-client.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,KAAK,EAAE,gBAAgB,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAM5E;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAQxD;AAED;;GAEG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,OAAO,CAAyB;IACjC,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC;gBAErB,KAAK,EAAE,MAAM;IAiBzB;;OAEG;IACG,WAAW,CAAC,CAAC,GAAG,gBAAgB,EACpC,QAAQ,EAAE,MAAM,EAChB,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAM,GACrD,OAAO,CAAC,CAAC,CAAC;IA8Bb;;OAEG;IACG,WAAW,CAAC,CAAC,GAAG,gBAAgB,EACpC,QAAQ,EAAE,MAAM,EAChB,IAAI,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GACjC,OAAO,CAAC,CAAC,CAAC;IAwBb;;OAEG;IACG,cAAc,CAAC,kBAAkB,SAAK,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAqBnE;;OAEG;IACG,iBAAiB,CAAC,kBAAkB,SAAI,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAsCxE;;OAEG;IACG,gBAAgB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAiE7D;;OAEG;IACG,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CA2BxD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,GAAG,WAAW,CAGxD"}
@@ -0,0 +1,227 @@
1
+ /**
2
+ * Slack API Client
3
+ *
4
+ * Stateless HTTP client for Slack Web API with Bearer token authentication.
5
+ * Extracts token from Express request headers for per-request auth.
6
+ */
7
+ import { loadCache, saveCache, isCacheFresh, getCacheDir } from "./helpers.js";
8
+ import { resolve } from "path";
9
+ const SLACK_API_BASE = "https://slack.com/api";
10
+ /**
11
+ * Extract Bearer token from request Authorization header
12
+ */
13
+ export function getTokenFromRequest(req) {
14
+ const authHeader = req.headers.authorization;
15
+ if (!authHeader || !authHeader.startsWith("Bearer ")) {
16
+ throw new Error("Authentication required. Please provide Authorization: Bearer <token> header");
17
+ }
18
+ return authHeader.slice(7);
19
+ }
20
+ /**
21
+ * Slack API client class with caching support
22
+ */
23
+ export class SlackClient {
24
+ token;
25
+ headers;
26
+ usersCacheFile;
27
+ channelsCacheFile;
28
+ constructor(token) {
29
+ this.token = token;
30
+ this.headers = {
31
+ Authorization: `Bearer ${token}`,
32
+ "Content-Type": "application/json; charset=utf-8",
33
+ };
34
+ // Cache configuration from environment variables with defaults
35
+ const cacheDir = getCacheDir();
36
+ this.usersCacheFile =
37
+ process.env.SLACK_MCP_USERS_CACHE ||
38
+ resolve(cacheDir, "users_cache.json");
39
+ this.channelsCacheFile =
40
+ process.env.SLACK_MCP_CHANNELS_CACHE ||
41
+ resolve(cacheDir, "channels_cache_v2.json");
42
+ }
43
+ /**
44
+ * Make GET request to Slack API
45
+ */
46
+ async makeRequest(endpoint, params = {}) {
47
+ const url = new URL(`${SLACK_API_BASE}/${endpoint}`);
48
+ // Add query parameters
49
+ for (const [key, value] of Object.entries(params)) {
50
+ if (value !== undefined && value !== null) {
51
+ url.searchParams.append(key, String(value));
52
+ }
53
+ }
54
+ const response = await fetch(url.toString(), {
55
+ method: "GET",
56
+ headers: this.headers,
57
+ });
58
+ if (!response.ok) {
59
+ throw new Error(`Slack API error: ${response.status} - ${response.statusText}`);
60
+ }
61
+ const data = (await response.json());
62
+ if (!data.ok) {
63
+ throw new Error(`Slack API error: ${data.error || "Unknown error"}`);
64
+ }
65
+ return data;
66
+ }
67
+ /**
68
+ * Make POST request to Slack API
69
+ */
70
+ async postRequest(endpoint, body = {}) {
71
+ const url = `${SLACK_API_BASE}/${endpoint}`;
72
+ const response = await fetch(url, {
73
+ method: "POST",
74
+ headers: this.headers,
75
+ body: JSON.stringify(body),
76
+ });
77
+ if (!response.ok) {
78
+ throw new Error(`Slack API error: ${response.status} - ${response.statusText}`);
79
+ }
80
+ const data = (await response.json());
81
+ if (!data.ok) {
82
+ throw new Error(`Slack API error: ${data.error || "Unknown error"}`);
83
+ }
84
+ return data;
85
+ }
86
+ /**
87
+ * Get users with caching support
88
+ */
89
+ async getCachedUsers(cacheDurationHours = 24) {
90
+ // Check if cache is fresh
91
+ if (isCacheFresh(this.usersCacheFile, cacheDurationHours)) {
92
+ const cached = loadCache(this.usersCacheFile);
93
+ if (cached) {
94
+ return cached;
95
+ }
96
+ }
97
+ // Fetch fresh data from API
98
+ const data = await this.makeRequest("users.list", {
99
+ limit: 999,
100
+ });
101
+ const users = data.members || [];
102
+ // Save to cache
103
+ saveCache(this.usersCacheFile, users);
104
+ return users;
105
+ }
106
+ /**
107
+ * Get channels with caching support and graceful permission handling
108
+ */
109
+ async getCachedChannels(cacheDurationHours = 6) {
110
+ // Check if cache is fresh
111
+ if (isCacheFresh(this.channelsCacheFile, cacheDurationHours)) {
112
+ const cached = loadCache(this.channelsCacheFile);
113
+ if (cached) {
114
+ return cached;
115
+ }
116
+ }
117
+ // Fetch fresh data from API for all channel types
118
+ const allChannels = [];
119
+ const channelTypes = ["public_channel", "private_channel", "im", "mpim"];
120
+ for (const channelType of channelTypes) {
121
+ try {
122
+ const data = await this.makeRequest("conversations.list", {
123
+ types: channelType,
124
+ limit: 999,
125
+ });
126
+ const channels = data.channels || [];
127
+ allChannels.push(...channels);
128
+ }
129
+ catch {
130
+ // Skip channel types we don't have permission for
131
+ continue;
132
+ }
133
+ }
134
+ // Save to cache
135
+ if (allChannels.length > 0) {
136
+ saveCache(this.channelsCacheFile, allChannels);
137
+ }
138
+ return allChannels;
139
+ }
140
+ /**
141
+ * Resolve channel name/mention to channel ID
142
+ */
143
+ async resolveChannelId(channelInput) {
144
+ // Return as-is if already a valid channel ID format
145
+ if (channelInput.startsWith("C") && channelInput.length === 11) {
146
+ return channelInput;
147
+ }
148
+ // Also accept D (DM) and G (group) IDs
149
+ if ((channelInput.startsWith("D") || channelInput.startsWith("G")) &&
150
+ channelInput.length === 11) {
151
+ return channelInput;
152
+ }
153
+ // Load cached channels
154
+ const channels = await this.getCachedChannels();
155
+ // Handle #channel format
156
+ if (channelInput.startsWith("#")) {
157
+ const channelName = channelInput.slice(1);
158
+ for (const channel of channels) {
159
+ if (channel.name === channelName) {
160
+ return channel.id;
161
+ }
162
+ }
163
+ }
164
+ // Handle @user_dm format for direct messages
165
+ if (channelInput.startsWith("@")) {
166
+ const userName = channelInput
167
+ .slice(1)
168
+ .replace("_dm", "")
169
+ .replace("_group", "");
170
+ // For DMs, find the user and open a conversation
171
+ const users = await this.getCachedUsers();
172
+ for (const user of users) {
173
+ if (user.name === userName ||
174
+ user.profile?.display_name === userName ||
175
+ user.real_name === userName) {
176
+ try {
177
+ const dmData = await this.postRequest("conversations.open", { users: user.id });
178
+ return dmData.channel.id;
179
+ }
180
+ catch {
181
+ continue;
182
+ }
183
+ }
184
+ }
185
+ }
186
+ // Try direct name match for channels
187
+ for (const channel of channels) {
188
+ if (channel.name === channelInput) {
189
+ return channel.id;
190
+ }
191
+ }
192
+ // Return as-is if no resolution found
193
+ return channelInput;
194
+ }
195
+ /**
196
+ * Resolve user name/mention to user ID
197
+ */
198
+ async resolveUserId(userInput) {
199
+ // Return as-is if already a valid user ID format
200
+ if (userInput.startsWith("U") && userInput.length === 11) {
201
+ return userInput;
202
+ }
203
+ // Load cached users
204
+ const users = await this.getCachedUsers();
205
+ // Handle @username format
206
+ const userName = userInput.startsWith("@") ? userInput.slice(1) : userInput;
207
+ // Search for user by various name fields
208
+ for (const user of users) {
209
+ if (user.name === userName ||
210
+ user.profile?.display_name === userName ||
211
+ user.real_name === userName ||
212
+ user.profile?.real_name === userName) {
213
+ return user.id;
214
+ }
215
+ }
216
+ // Return as-is if no resolution found
217
+ return userInput;
218
+ }
219
+ }
220
+ /**
221
+ * Get Slack client from Express request
222
+ */
223
+ export function getSlackClient(req) {
224
+ const token = getTokenFromRequest(req);
225
+ return new SlackClient(token);
226
+ }
227
+ //# sourceMappingURL=slack-api-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slack-api-client.js","sourceRoot":"","sources":["../src/slack-api-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Tool configuration loader
3
+ * Loads tool definitions from tools.json and validates them
4
+ *
5
+ * Supports loading from (in priority order):
6
+ * 1. Custom path via TOOLS_CONFIG_PATH environment variable
7
+ * 2. tools.json in current working directory (for development)
8
+ * 3. tools.json in package installation directory (for npx/installed usage)
9
+ */
10
+ export interface ToolDefinition {
11
+ name: string;
12
+ description: string;
13
+ inputSchema: {
14
+ type: string;
15
+ properties: Record<string, unknown>;
16
+ required?: string[];
17
+ };
18
+ }
19
+ export interface ToolsConfig {
20
+ [toolName: string]: ToolDefinition;
21
+ }
22
+ /**
23
+ * Load tool definitions from tools.json
24
+ * Uses caching in production, always reloads in development
25
+ */
26
+ export declare function loadToolDefinitions(forceReload?: boolean): ToolDefinition[];
27
+ /**
28
+ * Get a specific tool definition by name
29
+ */
30
+ export declare function getToolDefinition(toolName: string): ToolDefinition | undefined;
31
+ /**
32
+ * Clear the tool cache (useful for testing or forced reloads)
33
+ */
34
+ export declare function clearToolCache(): void;
35
+ //# sourceMappingURL=tool-loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-loader.d.ts","sourceRoot":"","sources":["../src/tool-loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAOH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE;QACX,IAAI,EAAE,MAAM,CAAC;QACb,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACpC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;KACrB,CAAC;CACH;AAED,MAAM,WAAW,WAAW;IAC1B,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc,CAAC;CACpC;AAmDD;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,UAAQ,GAAG,cAAc,EAAE,CAwDzE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAG9E;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,IAAI,CAIrC"}
@@ -0,0 +1,121 @@
1
+ /**
2
+ * Tool configuration loader
3
+ * Loads tool definitions from tools.json and validates them
4
+ *
5
+ * Supports loading from (in priority order):
6
+ * 1. Custom path via TOOLS_CONFIG_PATH environment variable
7
+ * 2. tools.json in current working directory (for development)
8
+ * 3. tools.json in package installation directory (for npx/installed usage)
9
+ */
10
+ import { readFileSync, existsSync } from "fs";
11
+ import { resolve, isAbsolute, dirname } from "path";
12
+ import { homedir } from "os";
13
+ import { fileURLToPath } from "url";
14
+ let cachedTools = null;
15
+ let lastLoadTime = 0;
16
+ let lastLoadPath = "";
17
+ /**
18
+ * Resolve the tools configuration file path
19
+ * Supports:
20
+ * - Environment variable: TOOLS_CONFIG_PATH
21
+ * - Absolute paths: /Users/username/Desktop/tools.json
22
+ * - Relative paths: ./tools.json, ../config/tools.json
23
+ * - Home directory: ~/Desktop/tools.json
24
+ * - Default: tools.json in current working directory
25
+ * - Fallback: tools.json in package installation directory
26
+ */
27
+ function resolveToolsPath() {
28
+ // Check environment variable first
29
+ const envPath = process.env.TOOLS_CONFIG_PATH;
30
+ if (envPath) {
31
+ // Expand ~ to home directory
32
+ const expandedPath = envPath.startsWith("~/")
33
+ ? resolve(homedir(), envPath.slice(2))
34
+ : envPath;
35
+ // If absolute path, use as-is
36
+ if (isAbsolute(expandedPath)) {
37
+ return expandedPath;
38
+ }
39
+ // Otherwise resolve relative to current working directory
40
+ return resolve(process.cwd(), expandedPath);
41
+ }
42
+ // Try current working directory first (for dev mode)
43
+ const cwdPath = resolve(process.cwd(), "tools.json");
44
+ if (existsSync(cwdPath)) {
45
+ return cwdPath;
46
+ }
47
+ // Fallback: tools.json in package installation directory (for npx/installed usage)
48
+ // Get the directory of this module file
49
+ const moduleDir = dirname(fileURLToPath(import.meta.url));
50
+ // Go up from dist/tool-loader.js to package root
51
+ const packageRoot = resolve(moduleDir, "..");
52
+ const packagePath = resolve(packageRoot, "tools.json");
53
+ return packagePath;
54
+ }
55
+ /**
56
+ * Load tool definitions from tools.json
57
+ * Uses caching in production, always reloads in development
58
+ */
59
+ export function loadToolDefinitions(forceReload = false) {
60
+ const isDev = process.env.NODE_ENV !== "production";
61
+ const now = Date.now();
62
+ // Get the tools config path
63
+ const toolsPath = resolveToolsPath();
64
+ // In production, cache tools and only reload if forced or path changed
65
+ // In development, reload every time (for nodemon compatibility)
66
+ if (!isDev && !forceReload && cachedTools && (now - lastLoadTime) < 60000 && lastLoadPath === toolsPath) {
67
+ return cachedTools;
68
+ }
69
+ try {
70
+ // Check if file exists
71
+ if (!existsSync(toolsPath)) {
72
+ throw new Error(`Tools configuration file not found: ${toolsPath}`);
73
+ }
74
+ const toolsJson = readFileSync(toolsPath, "utf-8");
75
+ const toolsConfig = JSON.parse(toolsJson);
76
+ // Convert config object to array of tool definitions
77
+ const tools = Object.values(toolsConfig);
78
+ // Validate tool definitions
79
+ for (const tool of tools) {
80
+ if (!tool.name || !tool.description || !tool.inputSchema) {
81
+ throw new Error(`Invalid tool definition: ${JSON.stringify(tool)}`);
82
+ }
83
+ }
84
+ cachedTools = tools;
85
+ lastLoadTime = now;
86
+ lastLoadPath = toolsPath;
87
+ console.log(`[Tool Loader] Loaded ${tools.length} tool definitions from: ${toolsPath}`);
88
+ if (isDev) {
89
+ console.log(`[Tool Loader] Development mode: tools will be reloaded on server restart`);
90
+ }
91
+ if (process.env.TOOLS_CONFIG_PATH) {
92
+ console.log(`[Tool Loader] Using custom config path from TOOLS_CONFIG_PATH`);
93
+ }
94
+ return tools;
95
+ }
96
+ catch (error) {
97
+ console.error("[Tool Loader] Error loading tools.json:", error);
98
+ // In case of error, return cached tools if available
99
+ if (cachedTools) {
100
+ console.warn("[Tool Loader] Using cached tool definitions due to load error");
101
+ return cachedTools;
102
+ }
103
+ throw new Error(`Failed to load tool definitions: ${error instanceof Error ? error.message : "Unknown error"}`);
104
+ }
105
+ }
106
+ /**
107
+ * Get a specific tool definition by name
108
+ */
109
+ export function getToolDefinition(toolName) {
110
+ const tools = loadToolDefinitions();
111
+ return tools.find(tool => tool.name === toolName);
112
+ }
113
+ /**
114
+ * Clear the tool cache (useful for testing or forced reloads)
115
+ */
116
+ export function clearToolCache() {
117
+ cachedTools = null;
118
+ lastLoadTime = 0;
119
+ console.log("[Tool Loader] Tool cache cleared");
120
+ }
121
+ //# sourceMappingURL=tool-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-loader.js","sourceRoot":"","sources":["../src/tool-loader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ import type { Request } from "express";
2
+ import type { z } from "zod";
3
+ import type { ToolResponse } from "./types.js";
4
+ type ToolHandler = (req: Request, args: any) => Promise<any>;
5
+ type ToolSchema = z.ZodSchema<any>;
6
+ /**
7
+ * Registry for managing and executing MCP tools with automatic debug wrapping
8
+ */
9
+ export declare class ToolRegistry {
10
+ private tools;
11
+ /**
12
+ * Register a new tool in the registry
13
+ *
14
+ * @param name - Unique name of the tool
15
+ * @param schema - Zod schema for validating tool input
16
+ * @param handler - Async function that executes the tool logic
17
+ */
18
+ register(name: string, schema: ToolSchema, handler: ToolHandler): void;
19
+ /**
20
+ * Execute a tool by name with automatic validation and debug wrapping
21
+ *
22
+ * @param toolName - Name of the tool to execute
23
+ * @param rawInput - Raw input arguments (will be validated against schema)
24
+ * @param req - Express request object for accessing headers/context
25
+ * @returns ToolResponse with data and optional debug metadata
26
+ * @throws Error if tool is not found or validation fails
27
+ */
28
+ execute(toolName: string, rawInput: unknown, req: Request): Promise<ToolResponse<any>>;
29
+ /**
30
+ * Check if a tool exists in the registry
31
+ *
32
+ * @param toolName - Name of the tool to check
33
+ * @returns True if the tool is registered
34
+ */
35
+ has(toolName: string): boolean;
36
+ /**
37
+ * Get all registered tool names
38
+ *
39
+ * @returns Array of registered tool names
40
+ */
41
+ getToolNames(): string[];
42
+ }
43
+ export {};
44
+ //# sourceMappingURL=tool-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-registry.d.ts","sourceRoot":"","sources":["../src/tool-registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAK/C,KAAK,WAAW,GAAG,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;AAE7D,KAAK,UAAU,GAAG,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;AAWnC;;GAEG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,KAAK,CAAqC;IAElD;;;;;;OAMG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,GAAG,IAAI;IAItE;;;;;;;;OAQG;IACG,OAAO,CACX,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,OAAO,EACjB,GAAG,EAAE,OAAO,GAEX,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;IAc7B;;;;;OAKG;IACH,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAI9B;;;;OAIG;IACH,YAAY,IAAI,MAAM,EAAE;CAGzB"}
@@ -0,0 +1,56 @@
1
+ import { wrapWithDebug } from "./debug-middleware.js";
2
+ /**
3
+ * Registry for managing and executing MCP tools with automatic debug wrapping
4
+ */
5
+ export class ToolRegistry {
6
+ tools = new Map();
7
+ /**
8
+ * Register a new tool in the registry
9
+ *
10
+ * @param name - Unique name of the tool
11
+ * @param schema - Zod schema for validating tool input
12
+ * @param handler - Async function that executes the tool logic
13
+ */
14
+ register(name, schema, handler) {
15
+ this.tools.set(name, { name, schema, handler });
16
+ }
17
+ /**
18
+ * Execute a tool by name with automatic validation and debug wrapping
19
+ *
20
+ * @param toolName - Name of the tool to execute
21
+ * @param rawInput - Raw input arguments (will be validated against schema)
22
+ * @param req - Express request object for accessing headers/context
23
+ * @returns ToolResponse with data and optional debug metadata
24
+ * @throws Error if tool is not found or validation fails
25
+ */
26
+ async execute(toolName, rawInput, req
27
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
28
+ ) {
29
+ const tool = this.tools.get(toolName);
30
+ if (!tool) {
31
+ throw new Error(`Unknown tool: ${toolName}`);
32
+ }
33
+ // Validate input against schema
34
+ const args = tool.schema.parse(rawInput);
35
+ // Execute with debug wrapping
36
+ return wrapWithDebug(toolName, args, () => tool.handler(req, args));
37
+ }
38
+ /**
39
+ * Check if a tool exists in the registry
40
+ *
41
+ * @param toolName - Name of the tool to check
42
+ * @returns True if the tool is registered
43
+ */
44
+ has(toolName) {
45
+ return this.tools.has(toolName);
46
+ }
47
+ /**
48
+ * Get all registered tool names
49
+ *
50
+ * @returns Array of registered tool names
51
+ */
52
+ getToolNames() {
53
+ return Array.from(this.tools.keys());
54
+ }
55
+ }
56
+ //# sourceMappingURL=tool-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-registry.js","sourceRoot":"","sources":["../src/tool-registry.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAiBtD;;GAEG;AACH,MAAM,OAAO,YAAY;IACf,KAAK,GAAG,IAAI,GAAG,EAA0B,CAAC;IAElD;;;;;;OAMG;IACH,QAAQ,CAAC,IAAY,EAAE,MAAkB,EAAE,OAAoB;QAC7D,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;IAClD,CAAC;IAED;;;;;;;;OAQG;IACH,KAAK,CAAC,OAAO,CACX,QAAgB,EAChB,QAAiB,EACjB,GAAY;IACZ,8DAA8D;;QAE9D,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAEtC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,iBAAiB,QAAQ,EAAE,CAAC,CAAC;QAC/C,CAAC;QAED,gCAAgC;QAChC,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAEzC,8BAA8B;QAC9B,OAAO,aAAa,CAAC,QAAQ,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;IACtE,CAAC;IAED;;;;;OAKG;IACH,GAAG,CAAC,QAAgB;QAClB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAClC,CAAC;IAED;;;;OAIG;IACH,YAAY;QACV,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;IACvC,CAAC;CACF"}
@@ -0,0 +1,69 @@
1
+ /**
2
+ * Cache tool handlers for Slack MCP Server
3
+ */
4
+ import type { Request } from "express";
5
+ import type { z } from "zod";
6
+ import type { InitializeCacheSchema, CacheInfoSchema, ClearCacheSchema } from "../schemas.js";
7
+ /**
8
+ * Initialize both user and channel caches by fetching fresh data
9
+ */
10
+ export declare function initializeCache(req: Request, _args: z.infer<typeof InitializeCacheSchema>): Promise<{
11
+ success: boolean;
12
+ message: string;
13
+ users_cache: {
14
+ path: string;
15
+ size_kb: number;
16
+ count: number;
17
+ };
18
+ channels_cache: {
19
+ path: string;
20
+ size_kb: number;
21
+ count: number;
22
+ };
23
+ total_cache_size_kb: number;
24
+ }>;
25
+ /**
26
+ * Get information about cache file locations, sizes, and last updated times
27
+ */
28
+ export declare function cacheInfo(req: Request, _args: z.infer<typeof CacheInfoSchema>): Promise<{
29
+ success: boolean;
30
+ cache_directory: string;
31
+ users_cache: {
32
+ exists: boolean;
33
+ absolute_path: string;
34
+ size_bytes: number;
35
+ size_kb: number;
36
+ last_modified: string | null;
37
+ age_hours: number | null;
38
+ is_fresh: boolean;
39
+ configured_path: string;
40
+ };
41
+ channels_cache: {
42
+ exists: boolean;
43
+ absolute_path: string;
44
+ size_bytes: number;
45
+ size_kb: number;
46
+ last_modified: string | null;
47
+ age_hours: number | null;
48
+ is_fresh: boolean;
49
+ configured_path: string;
50
+ };
51
+ environment_variables: {
52
+ SLACK_MCP_USERS_CACHE: string;
53
+ SLACK_MCP_CHANNELS_CACHE: string;
54
+ };
55
+ recommendations: {
56
+ users_cache_fresh: boolean;
57
+ channels_cache_fresh: boolean;
58
+ total_cache_size_kb: number;
59
+ };
60
+ }>;
61
+ /**
62
+ * Clear cache files to force refresh from Slack API
63
+ */
64
+ export declare function clearCache(req: Request, args: z.infer<typeof ClearCacheSchema>): Promise<{
65
+ success: boolean;
66
+ cleared: string[];
67
+ message: string;
68
+ }>;
69
+ //# sourceMappingURL=cache.d.ts.map