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.
- package/README.md +243 -0
- package/dist/debug-middleware.d.ts +12 -0
- package/dist/debug-middleware.d.ts.map +1 -0
- package/dist/debug-middleware.js +36 -0
- package/dist/debug-middleware.js.map +1 -0
- package/dist/helpers.d.ts +86 -0
- package/dist/helpers.d.ts.map +1 -0
- package/dist/helpers.js +235 -0
- package/dist/helpers.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +162 -0
- package/dist/index.js.map +1 -0
- package/dist/schemas.d.ts +286 -0
- package/dist/schemas.d.ts.map +1 -0
- package/dist/schemas.js +840 -0
- package/dist/schemas.js.map +1 -0
- package/dist/slack-api-client.d.ts +51 -0
- package/dist/slack-api-client.d.ts.map +1 -0
- package/dist/slack-api-client.js +227 -0
- package/dist/slack-api-client.js.map +1 -0
- package/dist/tool-loader.d.ts +35 -0
- package/dist/tool-loader.d.ts.map +1 -0
- package/dist/tool-loader.js +121 -0
- package/dist/tool-loader.js.map +1 -0
- package/dist/tool-registry.d.ts +44 -0
- package/dist/tool-registry.d.ts.map +1 -0
- package/dist/tool-registry.js +56 -0
- package/dist/tool-registry.js.map +1 -0
- package/dist/tools/cache.d.ts +69 -0
- package/dist/tools/cache.d.ts.map +1 -0
- package/dist/tools/cache.js +94 -0
- package/dist/tools/cache.js.map +1 -0
- package/dist/tools/channels.d.ts +76 -0
- package/dist/tools/channels.d.ts.map +1 -0
- package/dist/tools/channels.js +251 -0
- package/dist/tools/channels.js.map +1 -0
- package/dist/tools/conversations.d.ts +77 -0
- package/dist/tools/conversations.d.ts.map +1 -0
- package/dist/tools/conversations.js +302 -0
- package/dist/tools/conversations.js.map +1 -0
- package/dist/tools/files.d.ts +15 -0
- package/dist/tools/files.d.ts.map +1 -0
- package/dist/tools/files.js +30 -0
- package/dist/tools/files.js.map +1 -0
- package/dist/tools/index.d.ts +12 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +20 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/messages.d.ts +20 -0
- package/dist/tools/messages.d.ts.map +1 -0
- package/dist/tools/messages.js +40 -0
- package/dist/tools/messages.js.map +1 -0
- package/dist/tools/system.d.ts +48 -0
- package/dist/tools/system.d.ts.map +1 -0
- package/dist/tools/system.js +124 -0
- package/dist/tools/system.js.map +1 -0
- package/dist/tools/users.d.ts +69 -0
- package/dist/tools/users.d.ts.map +1 -0
- package/dist/tools/users.js +179 -0
- package/dist/tools/users.js.map +1 -0
- package/dist/tools/workspace.d.ts +50 -0
- package/dist/tools/workspace.d.ts.map +1 -0
- package/dist/tools/workspace.js +56 -0
- package/dist/tools/workspace.js.map +1 -0
- package/dist/types.d.ts +160 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +48 -0
- package/tools.json +483 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"system.js","sourceRoot":"","sources":["../../src/tools/system.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* User tool handlers for Slack MCP Server
|
|
3
|
+
*/
|
|
4
|
+
import type { Request } from "express";
|
|
5
|
+
import type { z } from "zod";
|
|
6
|
+
import type { UsersListSchema, UserInfoSchema, UserPresenceSchema } from "../schemas.js";
|
|
7
|
+
/**
|
|
8
|
+
* Get a list of users with basic info (always uses cache for performance)
|
|
9
|
+
*/
|
|
10
|
+
export declare function usersList(req: Request, args: z.infer<typeof UsersListSchema>): Promise<{
|
|
11
|
+
success: boolean;
|
|
12
|
+
users: {
|
|
13
|
+
id: string;
|
|
14
|
+
username: string;
|
|
15
|
+
real_name: string;
|
|
16
|
+
display_name: string;
|
|
17
|
+
is_admin: boolean;
|
|
18
|
+
is_bot: boolean;
|
|
19
|
+
is_deleted: boolean;
|
|
20
|
+
timezone: string;
|
|
21
|
+
title: string;
|
|
22
|
+
}[];
|
|
23
|
+
summary: {
|
|
24
|
+
total_users: number;
|
|
25
|
+
filter_applied: string;
|
|
26
|
+
include_bots: boolean;
|
|
27
|
+
limit_applied: number | null;
|
|
28
|
+
};
|
|
29
|
+
cache_file: string;
|
|
30
|
+
source: string;
|
|
31
|
+
note: string;
|
|
32
|
+
}>;
|
|
33
|
+
/**
|
|
34
|
+
* Get detailed information about one or more users (cache-first approach)
|
|
35
|
+
*/
|
|
36
|
+
export declare function userInfo(req: Request, args: z.infer<typeof UserInfoSchema>): Promise<{
|
|
37
|
+
success: boolean;
|
|
38
|
+
users: {
|
|
39
|
+
input: string;
|
|
40
|
+
resolved_id?: string;
|
|
41
|
+
user?: unknown;
|
|
42
|
+
source?: string;
|
|
43
|
+
success: boolean;
|
|
44
|
+
error?: string;
|
|
45
|
+
warning?: string;
|
|
46
|
+
}[];
|
|
47
|
+
summary: {
|
|
48
|
+
total_requested: number;
|
|
49
|
+
successful: number;
|
|
50
|
+
failed: number;
|
|
51
|
+
cache_hits: number;
|
|
52
|
+
api_calls: number;
|
|
53
|
+
};
|
|
54
|
+
cache_file: string | null;
|
|
55
|
+
note: string;
|
|
56
|
+
}>;
|
|
57
|
+
/**
|
|
58
|
+
* Get user's presence status (online, away, etc.)
|
|
59
|
+
*/
|
|
60
|
+
export declare function userPresence(req: Request, args: z.infer<typeof UserPresenceSchema>): Promise<{
|
|
61
|
+
success: boolean;
|
|
62
|
+
presence: string;
|
|
63
|
+
online: boolean | undefined;
|
|
64
|
+
auto_away: boolean | undefined;
|
|
65
|
+
manual_away: boolean | undefined;
|
|
66
|
+
connection_count: number | undefined;
|
|
67
|
+
last_activity: number | undefined;
|
|
68
|
+
}>;
|
|
69
|
+
//# sourceMappingURL=users.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"users.d.ts","sourceRoot":"","sources":["../../src/tools/users.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAG7B,OAAO,KAAK,EACV,eAAe,EACf,cAAc,EACd,kBAAkB,EACnB,MAAM,eAAe,CAAC;AAEvB;;GAEG;AACH,wBAAsB,SAAS,CAC7B,GAAG,EAAE,OAAO,EACZ,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC;;;YAc/B,MAAM;kBACA,MAAM;mBACL,MAAM;sBACH,MAAM;kBACV,OAAO;gBACT,OAAO;oBACH,OAAO;kBACT,MAAM;eACT,MAAM;;;;;;;;;;;GAkDhB;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAC5B,GAAG,EAAE,OAAO,EACZ,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC;;;eAQ3B,MAAM;sBACC,MAAM;eACb,OAAO;iBACL,MAAM;iBACN,OAAO;gBACR,MAAM;kBACJ,MAAM;;;;;;;;;;;GAgGnB;AAED;;GAEG;AACH,wBAAsB,YAAY,CAChC,GAAG,EAAE,OAAO,EACZ,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC;;;;;;;;GA0BzC"}
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* User tool handlers for Slack MCP Server
|
|
3
|
+
*/
|
|
4
|
+
import { getSlackClient } from "../slack-api-client.js";
|
|
5
|
+
import { createUserLookup } from "../helpers.js";
|
|
6
|
+
/**
|
|
7
|
+
* Get a list of users with basic info (always uses cache for performance)
|
|
8
|
+
*/
|
|
9
|
+
export async function usersList(req, args) {
|
|
10
|
+
const client = getSlackClient(req);
|
|
11
|
+
const { filter_type = "active", include_bots = false, limit = 50, } = args;
|
|
12
|
+
// Always use cache for listing users (performance)
|
|
13
|
+
const usersData = await client.getCachedUsers();
|
|
14
|
+
// Filter users based on criteria
|
|
15
|
+
const filteredUsers = [];
|
|
16
|
+
for (const user of usersData) {
|
|
17
|
+
// Skip deleted users unless specifically requested
|
|
18
|
+
if (filter_type === "active" && user.deleted) {
|
|
19
|
+
continue;
|
|
20
|
+
}
|
|
21
|
+
if (filter_type === "deleted" && !user.deleted) {
|
|
22
|
+
continue;
|
|
23
|
+
}
|
|
24
|
+
if (filter_type === "admins" && !user.is_admin) {
|
|
25
|
+
continue;
|
|
26
|
+
}
|
|
27
|
+
// Skip bots unless specifically requested
|
|
28
|
+
if (!include_bots && user.is_bot) {
|
|
29
|
+
continue;
|
|
30
|
+
}
|
|
31
|
+
// Add simplified user info
|
|
32
|
+
filteredUsers.push({
|
|
33
|
+
id: user.id,
|
|
34
|
+
username: user.name || "unknown",
|
|
35
|
+
real_name: user.real_name || "Unknown",
|
|
36
|
+
display_name: user.profile?.display_name || "",
|
|
37
|
+
is_admin: user.is_admin || false,
|
|
38
|
+
is_bot: user.is_bot || false,
|
|
39
|
+
is_deleted: user.deleted || false,
|
|
40
|
+
timezone: user.tz || "",
|
|
41
|
+
title: user.profile?.title || "",
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
// Apply limit
|
|
45
|
+
const limitedUsers = limit > 0 ? filteredUsers.slice(0, limit) : filteredUsers;
|
|
46
|
+
return {
|
|
47
|
+
success: true,
|
|
48
|
+
users: limitedUsers,
|
|
49
|
+
summary: {
|
|
50
|
+
total_users: limitedUsers.length,
|
|
51
|
+
filter_applied: filter_type,
|
|
52
|
+
include_bots,
|
|
53
|
+
limit_applied: limitedUsers.length >= limit ? limit : null,
|
|
54
|
+
},
|
|
55
|
+
cache_file: client.usersCacheFile,
|
|
56
|
+
source: "cache",
|
|
57
|
+
note: "User listing always uses cache for performance",
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Get detailed information about one or more users (cache-first approach)
|
|
62
|
+
*/
|
|
63
|
+
export async function userInfo(req, args) {
|
|
64
|
+
const client = getSlackClient(req);
|
|
65
|
+
const { user_ids, use_cache = true } = args;
|
|
66
|
+
// Parse user IDs (support both single and multiple)
|
|
67
|
+
const userList = user_ids.split(",").map((u) => u.trim()).filter(Boolean);
|
|
68
|
+
const results = [];
|
|
69
|
+
let cacheHits = 0;
|
|
70
|
+
let apiCalls = 0;
|
|
71
|
+
// Load cache once for all users
|
|
72
|
+
const usersData = await client.getCachedUsers();
|
|
73
|
+
let cachedUsers = null;
|
|
74
|
+
if (use_cache) {
|
|
75
|
+
try {
|
|
76
|
+
cachedUsers = createUserLookup(usersData);
|
|
77
|
+
}
|
|
78
|
+
catch (cacheError) {
|
|
79
|
+
console.warn("Cache loading failed:", cacheError);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
for (const userInput of userList) {
|
|
83
|
+
// Resolve user name to ID
|
|
84
|
+
let resolvedUserId;
|
|
85
|
+
try {
|
|
86
|
+
resolvedUserId = await client.resolveUserId(userInput);
|
|
87
|
+
}
|
|
88
|
+
catch (error) {
|
|
89
|
+
results.push({
|
|
90
|
+
input: userInput,
|
|
91
|
+
error: `Could not resolve user: ${error instanceof Error ? error.message : String(error)}`,
|
|
92
|
+
success: false,
|
|
93
|
+
});
|
|
94
|
+
continue;
|
|
95
|
+
}
|
|
96
|
+
// Try cache first if enabled
|
|
97
|
+
let userFound = false;
|
|
98
|
+
if (use_cache && cachedUsers && cachedUsers.has(resolvedUserId)) {
|
|
99
|
+
results.push({
|
|
100
|
+
input: userInput,
|
|
101
|
+
resolved_id: resolvedUserId,
|
|
102
|
+
user: cachedUsers.get(resolvedUserId),
|
|
103
|
+
source: "cache",
|
|
104
|
+
success: true,
|
|
105
|
+
});
|
|
106
|
+
cacheHits++;
|
|
107
|
+
userFound = true;
|
|
108
|
+
}
|
|
109
|
+
// Fall back to API call if cache miss or disabled
|
|
110
|
+
if (!userFound) {
|
|
111
|
+
try {
|
|
112
|
+
const data = await client.makeRequest("users.info", { user: resolvedUserId });
|
|
113
|
+
results.push({
|
|
114
|
+
input: userInput,
|
|
115
|
+
resolved_id: resolvedUserId,
|
|
116
|
+
user: data.user || {},
|
|
117
|
+
source: "api",
|
|
118
|
+
success: true,
|
|
119
|
+
});
|
|
120
|
+
apiCalls++;
|
|
121
|
+
}
|
|
122
|
+
catch (error) {
|
|
123
|
+
// If API fails, try cache as last resort
|
|
124
|
+
if (cachedUsers && cachedUsers.has(resolvedUserId)) {
|
|
125
|
+
results.push({
|
|
126
|
+
input: userInput,
|
|
127
|
+
resolved_id: resolvedUserId,
|
|
128
|
+
user: cachedUsers.get(resolvedUserId),
|
|
129
|
+
source: "cache_fallback",
|
|
130
|
+
success: true,
|
|
131
|
+
warning: `API failed, using cached data: ${error instanceof Error ? error.message : String(error)}`,
|
|
132
|
+
});
|
|
133
|
+
cacheHits++;
|
|
134
|
+
}
|
|
135
|
+
else {
|
|
136
|
+
results.push({
|
|
137
|
+
input: userInput,
|
|
138
|
+
resolved_id: resolvedUserId,
|
|
139
|
+
error: error instanceof Error ? error.message : String(error),
|
|
140
|
+
success: false,
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
return {
|
|
147
|
+
success: true,
|
|
148
|
+
users: results,
|
|
149
|
+
summary: {
|
|
150
|
+
total_requested: userList.length,
|
|
151
|
+
successful: results.filter((r) => r.success).length,
|
|
152
|
+
failed: results.filter((r) => !r.success).length,
|
|
153
|
+
cache_hits: cacheHits,
|
|
154
|
+
api_calls: apiCalls,
|
|
155
|
+
},
|
|
156
|
+
cache_file: use_cache ? client.usersCacheFile : null,
|
|
157
|
+
note: `Cache: ${cacheHits} hits, API: ${apiCalls} calls`,
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Get user's presence status (online, away, etc.)
|
|
162
|
+
*/
|
|
163
|
+
export async function userPresence(req, args) {
|
|
164
|
+
const client = getSlackClient(req);
|
|
165
|
+
const { user_id } = args;
|
|
166
|
+
// Resolve user name to ID
|
|
167
|
+
const resolvedUserId = await client.resolveUserId(user_id);
|
|
168
|
+
const data = await client.makeRequest("users.getPresence", { user: resolvedUserId });
|
|
169
|
+
return {
|
|
170
|
+
success: true,
|
|
171
|
+
presence: data.presence,
|
|
172
|
+
online: data.online,
|
|
173
|
+
auto_away: data.auto_away,
|
|
174
|
+
manual_away: data.manual_away,
|
|
175
|
+
connection_count: data.connection_count,
|
|
176
|
+
last_activity: data.last_activity,
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
//# sourceMappingURL=users.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"users.js","sourceRoot":"","sources":["../../src/tools/users.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Workspace tool handlers for Slack MCP Server
|
|
3
|
+
*/
|
|
4
|
+
import type { Request } from "express";
|
|
5
|
+
import type { z } from "zod";
|
|
6
|
+
import type { WorkspaceInfoSchema } from "../schemas.js";
|
|
7
|
+
/**
|
|
8
|
+
* Get information about the current Slack workspace/team
|
|
9
|
+
*/
|
|
10
|
+
export declare function workspaceInfo(req: Request, _args: z.infer<typeof WorkspaceInfoSchema>): Promise<{
|
|
11
|
+
success: boolean;
|
|
12
|
+
id: string;
|
|
13
|
+
name: string;
|
|
14
|
+
domain: string;
|
|
15
|
+
email_domain: string | undefined;
|
|
16
|
+
icon: Record<string, string>;
|
|
17
|
+
enterprise_id: string | undefined;
|
|
18
|
+
enterprise_name: string | undefined;
|
|
19
|
+
source: string;
|
|
20
|
+
note?: undefined;
|
|
21
|
+
error?: undefined;
|
|
22
|
+
required_scope?: undefined;
|
|
23
|
+
} | {
|
|
24
|
+
success: boolean;
|
|
25
|
+
id: string | undefined;
|
|
26
|
+
name: string;
|
|
27
|
+
domain: string;
|
|
28
|
+
source: string;
|
|
29
|
+
note: string;
|
|
30
|
+
email_domain?: undefined;
|
|
31
|
+
icon?: undefined;
|
|
32
|
+
enterprise_id?: undefined;
|
|
33
|
+
enterprise_name?: undefined;
|
|
34
|
+
error?: undefined;
|
|
35
|
+
required_scope?: undefined;
|
|
36
|
+
} | {
|
|
37
|
+
success: boolean;
|
|
38
|
+
error: string;
|
|
39
|
+
note: string;
|
|
40
|
+
required_scope: string;
|
|
41
|
+
id?: undefined;
|
|
42
|
+
name?: undefined;
|
|
43
|
+
domain?: undefined;
|
|
44
|
+
email_domain?: undefined;
|
|
45
|
+
icon?: undefined;
|
|
46
|
+
enterprise_id?: undefined;
|
|
47
|
+
enterprise_name?: undefined;
|
|
48
|
+
source?: undefined;
|
|
49
|
+
}>;
|
|
50
|
+
//# sourceMappingURL=workspace.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace.d.ts","sourceRoot":"","sources":["../../src/tools/workspace.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAE7B,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAEzD;;GAEG;AACH,wBAAsB,aAAa,CACjC,GAAG,EAAE,OAAO,EACZ,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiE3C"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Workspace tool handlers for Slack MCP Server
|
|
3
|
+
*/
|
|
4
|
+
import { getSlackClient } from "../slack-api-client.js";
|
|
5
|
+
/**
|
|
6
|
+
* Get information about the current Slack workspace/team
|
|
7
|
+
*/
|
|
8
|
+
export async function workspaceInfo(req, _args) {
|
|
9
|
+
const client = getSlackClient(req);
|
|
10
|
+
try {
|
|
11
|
+
const data = await client.makeRequest("team.info");
|
|
12
|
+
const team = data.team || {};
|
|
13
|
+
return {
|
|
14
|
+
success: true,
|
|
15
|
+
id: team.id,
|
|
16
|
+
name: team.name,
|
|
17
|
+
domain: team.domain,
|
|
18
|
+
email_domain: team.email_domain,
|
|
19
|
+
icon: team.icon || {},
|
|
20
|
+
enterprise_id: team.enterprise_id,
|
|
21
|
+
enterprise_name: team.enterprise_name,
|
|
22
|
+
source: "team.info API",
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
catch (error) {
|
|
26
|
+
// Fallback: try to get workspace info from other sources
|
|
27
|
+
const errorMsg = error instanceof Error ? error.message : String(error);
|
|
28
|
+
if (errorMsg.includes("missing_scope")) {
|
|
29
|
+
try {
|
|
30
|
+
// Try to get basic info from users list (which usually works)
|
|
31
|
+
const usersData = await client.makeRequest("users.list", { limit: 1 });
|
|
32
|
+
if (usersData.members && usersData.members.length > 0) {
|
|
33
|
+
const teamId = usersData.members[0].team_id;
|
|
34
|
+
return {
|
|
35
|
+
success: true,
|
|
36
|
+
id: teamId,
|
|
37
|
+
name: "Unknown (missing team:read scope)",
|
|
38
|
+
domain: "Unknown",
|
|
39
|
+
source: "derived from users.list",
|
|
40
|
+
note: "Limited info due to missing 'team:read' scope. Add this scope for full workspace details.",
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
catch {
|
|
45
|
+
// Fall through to error response
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
return {
|
|
49
|
+
success: false,
|
|
50
|
+
error: errorMsg,
|
|
51
|
+
note: "This tool requires 'team:read' scope. Please add this scope to your Slack app for full workspace information.",
|
|
52
|
+
required_scope: "team:read",
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=workspace.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace.js","sourceRoot":"","sources":["../../src/tools/workspace.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAGxD;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,GAAY,EACZ,KAA0C;IAE1C,MAAM,MAAM,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;IAEnC,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,WAAW,CAUlC,WAAW,CAAC,CAAC;QAEhB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;QAE7B,OAAO;YACL,OAAO,EAAE,IAAI;YACb,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,EAAE;YACrB,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,eAAe,EAAE,IAAI,CAAC,eAAe;YACrC,MAAM,EAAE,eAAe;SACxB,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,yDAAyD;QACzD,MAAM,QAAQ,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAExE,IAAI,QAAQ,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;YACvC,IAAI,CAAC;gBACH,8DAA8D;gBAC9D,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,WAAW,CAEvC,YAAY,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;gBAE/B,IAAI,SAAS,CAAC,OAAO,IAAI,SAAS,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACtD,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;oBAE5C,OAAO;wBACL,OAAO,EAAE,IAAI;wBACb,EAAE,EAAE,MAAM;wBACV,IAAI,EAAE,mCAAmC;wBACzC,MAAM,EAAE,SAAS;wBACjB,MAAM,EAAE,yBAAyB;wBACjC,IAAI,EAAE,2FAA2F;qBAClG,CAAC;gBACJ,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,iCAAiC;YACnC,CAAC;QACH,CAAC;QAED,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,QAAQ;YACf,IAAI,EAAE,+GAA+G;YACrH,cAAc,EAAE,WAAW;SAC5B,CAAC;IACJ,CAAC;AACH,CAAC"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
export interface DebugMetadata {
|
|
2
|
+
toolName: string;
|
|
3
|
+
toolInput: unknown;
|
|
4
|
+
toolCallTime: number;
|
|
5
|
+
timestamp: string;
|
|
6
|
+
}
|
|
7
|
+
export interface ToolResponse<T = unknown> {
|
|
8
|
+
data: T;
|
|
9
|
+
debug?: DebugMetadata;
|
|
10
|
+
}
|
|
11
|
+
export interface SlackUser {
|
|
12
|
+
id: string;
|
|
13
|
+
name: string;
|
|
14
|
+
real_name?: string;
|
|
15
|
+
deleted?: boolean;
|
|
16
|
+
is_admin?: boolean;
|
|
17
|
+
is_bot?: boolean;
|
|
18
|
+
tz?: string;
|
|
19
|
+
profile?: {
|
|
20
|
+
display_name?: string;
|
|
21
|
+
real_name?: string;
|
|
22
|
+
title?: string;
|
|
23
|
+
email?: string;
|
|
24
|
+
image_24?: string;
|
|
25
|
+
image_48?: string;
|
|
26
|
+
};
|
|
27
|
+
team_id?: string;
|
|
28
|
+
}
|
|
29
|
+
export interface SlackChannel {
|
|
30
|
+
id: string;
|
|
31
|
+
name?: string;
|
|
32
|
+
is_channel?: boolean;
|
|
33
|
+
is_group?: boolean;
|
|
34
|
+
is_im?: boolean;
|
|
35
|
+
is_mpim?: boolean;
|
|
36
|
+
is_private?: boolean;
|
|
37
|
+
is_archived?: boolean;
|
|
38
|
+
created?: number;
|
|
39
|
+
creator?: string;
|
|
40
|
+
num_members?: number;
|
|
41
|
+
topic?: {
|
|
42
|
+
value: string;
|
|
43
|
+
creator: string;
|
|
44
|
+
last_set: number;
|
|
45
|
+
};
|
|
46
|
+
purpose?: {
|
|
47
|
+
value: string;
|
|
48
|
+
creator: string;
|
|
49
|
+
last_set: number;
|
|
50
|
+
};
|
|
51
|
+
user?: string;
|
|
52
|
+
}
|
|
53
|
+
export interface SlackMessage {
|
|
54
|
+
type: string;
|
|
55
|
+
ts: string;
|
|
56
|
+
user?: string;
|
|
57
|
+
text: string;
|
|
58
|
+
thread_ts?: string;
|
|
59
|
+
reply_count?: number;
|
|
60
|
+
reactions?: Array<{
|
|
61
|
+
name: string;
|
|
62
|
+
count: number;
|
|
63
|
+
users: string[];
|
|
64
|
+
}>;
|
|
65
|
+
files?: SlackFile[];
|
|
66
|
+
user_details?: {
|
|
67
|
+
username: string;
|
|
68
|
+
real_name: string;
|
|
69
|
+
display_name: string;
|
|
70
|
+
is_bot: boolean;
|
|
71
|
+
};
|
|
72
|
+
channel_context?: {
|
|
73
|
+
channel_id: string;
|
|
74
|
+
channel_input: string;
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
export interface SlackFile {
|
|
78
|
+
id: string;
|
|
79
|
+
name: string;
|
|
80
|
+
title: string;
|
|
81
|
+
mimetype: string;
|
|
82
|
+
filetype: string;
|
|
83
|
+
size: number;
|
|
84
|
+
url_private?: string;
|
|
85
|
+
url_private_download?: string;
|
|
86
|
+
user?: string;
|
|
87
|
+
created?: number;
|
|
88
|
+
timestamp?: number;
|
|
89
|
+
}
|
|
90
|
+
export interface SlackTeam {
|
|
91
|
+
id: string;
|
|
92
|
+
name: string;
|
|
93
|
+
domain: string;
|
|
94
|
+
email_domain?: string;
|
|
95
|
+
icon?: Record<string, string>;
|
|
96
|
+
enterprise_id?: string;
|
|
97
|
+
enterprise_name?: string;
|
|
98
|
+
}
|
|
99
|
+
export interface SlackApiResponse<T = unknown> {
|
|
100
|
+
ok: boolean;
|
|
101
|
+
error?: string;
|
|
102
|
+
[key: string]: unknown;
|
|
103
|
+
}
|
|
104
|
+
export interface PaginatedResponse {
|
|
105
|
+
response_metadata?: {
|
|
106
|
+
next_cursor?: string;
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
export interface LimitParams {
|
|
110
|
+
limit?: number;
|
|
111
|
+
oldest?: string;
|
|
112
|
+
}
|
|
113
|
+
export interface CacheFileInfo {
|
|
114
|
+
exists: boolean;
|
|
115
|
+
absolute_path: string;
|
|
116
|
+
size_bytes: number;
|
|
117
|
+
size_kb: number;
|
|
118
|
+
last_modified: string | null;
|
|
119
|
+
age_hours: number | null;
|
|
120
|
+
is_fresh: boolean;
|
|
121
|
+
}
|
|
122
|
+
export interface SuccessResult<T = unknown> {
|
|
123
|
+
success: true;
|
|
124
|
+
data?: T;
|
|
125
|
+
[key: string]: unknown;
|
|
126
|
+
}
|
|
127
|
+
export interface ErrorResult {
|
|
128
|
+
success: false;
|
|
129
|
+
error: string;
|
|
130
|
+
[key: string]: unknown;
|
|
131
|
+
}
|
|
132
|
+
export type ToolResult<T = unknown> = SuccessResult<T> | ErrorResult;
|
|
133
|
+
export interface UserDetails {
|
|
134
|
+
username: string;
|
|
135
|
+
real_name: string;
|
|
136
|
+
display_name: string;
|
|
137
|
+
is_bot: boolean;
|
|
138
|
+
}
|
|
139
|
+
export interface MemberWithDetails {
|
|
140
|
+
id: string;
|
|
141
|
+
username: string;
|
|
142
|
+
real_name: string;
|
|
143
|
+
display_name: string;
|
|
144
|
+
is_admin: boolean;
|
|
145
|
+
is_bot: boolean;
|
|
146
|
+
deleted: boolean;
|
|
147
|
+
}
|
|
148
|
+
export interface PresenceInfo {
|
|
149
|
+
presence: string;
|
|
150
|
+
online?: boolean;
|
|
151
|
+
auto_away?: boolean;
|
|
152
|
+
manual_away?: boolean;
|
|
153
|
+
connection_count?: number;
|
|
154
|
+
last_activity?: number;
|
|
155
|
+
}
|
|
156
|
+
export interface PermissionStatus {
|
|
157
|
+
endpoint: string;
|
|
158
|
+
status: string;
|
|
159
|
+
}
|
|
160
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
package/package.json
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "bn-slack-mcp-server",
|
|
3
|
+
"version": "0.0.1",
|
|
4
|
+
"description": "Stateless MCP Server for Slack API",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"bin": {
|
|
8
|
+
"bn-slack-mcp-server": "dist/index.js"
|
|
9
|
+
},
|
|
10
|
+
"scripts": {
|
|
11
|
+
"build": "tsc",
|
|
12
|
+
"dev": "node --watch dist/index.js",
|
|
13
|
+
"start": "node dist/index.js",
|
|
14
|
+
"test": "vitest run",
|
|
15
|
+
"test:watch": "vitest",
|
|
16
|
+
"package": "docker build -t bn-slack-mcp-server .",
|
|
17
|
+
"clean": "rm -rf dist"
|
|
18
|
+
},
|
|
19
|
+
"keywords": [
|
|
20
|
+
"mcp",
|
|
21
|
+
"slack",
|
|
22
|
+
"conversations",
|
|
23
|
+
"channels",
|
|
24
|
+
"messages",
|
|
25
|
+
"users",
|
|
26
|
+
"stateless"
|
|
27
|
+
],
|
|
28
|
+
"author": "BlueNexus AI",
|
|
29
|
+
"license": "PROPRIETARY",
|
|
30
|
+
"dependencies": {
|
|
31
|
+
"@modelcontextprotocol/sdk": "^1.0.4",
|
|
32
|
+
"express": "^4.21.2",
|
|
33
|
+
"zod": "^3.24.1"
|
|
34
|
+
},
|
|
35
|
+
"devDependencies": {
|
|
36
|
+
"@types/express": "^5.0.0",
|
|
37
|
+
"@types/node": "^22.10.2",
|
|
38
|
+
"typescript": "^5.8.3",
|
|
39
|
+
"vitest": "^3.0.0"
|
|
40
|
+
},
|
|
41
|
+
"files": [
|
|
42
|
+
"dist/**/*",
|
|
43
|
+
"README.md",
|
|
44
|
+
"LICENSE",
|
|
45
|
+
"tools.json"
|
|
46
|
+
],
|
|
47
|
+
"packageManager": "pnpm@10.22.0"
|
|
48
|
+
}
|