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
package/tools.json
ADDED
|
@@ -0,0 +1,483 @@
|
|
|
1
|
+
{
|
|
2
|
+
"conversations_history": {
|
|
3
|
+
"name": "conversations_history",
|
|
4
|
+
"description": "Retrieve messages from a Slack channel or direct message conversation.\n\n**Primary Use Cases:**\n- Read recent conversations in a channel\n- Get context before posting a message\n- Summarize channel activity\n- Find specific discussions\n\n**Supports:**\n- Channel IDs (C01ABC2DEF3), channel names (#general), and DM shortcuts (@username)\n- Time-based limits (1d, 1w, 30d) or numeric limits (50, 100)\n- Optional user details enrichment for readable output\n- Pagination for large result sets\n\n**Best Practice:** Use time-based limits (e.g., \"1d\") for recent activity; use numeric limits for fixed message counts.",
|
|
5
|
+
"inputSchema": {
|
|
6
|
+
"type": "object",
|
|
7
|
+
"properties": {
|
|
8
|
+
"channel_id": {
|
|
9
|
+
"type": "string",
|
|
10
|
+
"description": "The Slack channel or direct message to fetch messages from.\n\n**Accepted Formats:**\n1. **Channel ID** (recommended for reliability):\n - Public channels: C followed by 10 alphanumeric chars (e.g., \"C01ABC2DEF3\")\n - Private channels: C or G followed by 10 chars\n - Direct messages: D followed by 10 chars\n - Group DMs: G followed by 10 chars\n\n2. **Channel Name** (auto-resolved to ID):\n - \"#general\" - Public channel\n - \"#engineering-team\" - Hyphenated names work\n\n3. **DM Shortcut** (opens/finds DM with user):\n - \"@john\" - DM with user named john\n - \"@john_dm\" - Alternative DM format\n\n**How to Find Channel IDs:**\n- Use `channels_list` tool\n- From Slack URL: https://workspace.slack.com/archives/C01ABC2DEF3\n- In Slack app: Right-click channel -> Copy link"
|
|
11
|
+
},
|
|
12
|
+
"limit": {
|
|
13
|
+
"type": "string",
|
|
14
|
+
"description": "Controls how many messages to retrieve.\n\n**Time-Based Limits (Recommended):**\n- \"1d\" - Last 1 day (DEFAULT)\n- \"1w\" - Last 7 days\n- \"30d\" - Last 30 days\n\n**Numeric Limits:**\n- \"50\" - Last 50 messages\n- \"100\" - Last 100 messages\n- \"1000\" - Maximum (API limit)\n\n**Choosing the Right Limit:**\n- Daily activity: \"1d\" or \"2d\"\n- Weekly summary: \"1w\"\n- Fixed count: Use numeric like \"50\""
|
|
15
|
+
},
|
|
16
|
+
"include_activity_messages": {
|
|
17
|
+
"type": "boolean",
|
|
18
|
+
"description": "Whether to include system/activity messages.\n\n**false (DEFAULT):** Only user-posted messages. Best for reading conversations.\n\n**true:** Includes system messages like:\n- \"john joined the channel\"\n- \"Topic changed to: Q4 Planning\"\n- Bot integration messages"
|
|
19
|
+
},
|
|
20
|
+
"include_user_details": {
|
|
21
|
+
"type": "boolean",
|
|
22
|
+
"description": "Whether to enrich messages with user information.\n\n**true (DEFAULT):** Each message includes user_details:\n- username, real_name, display_name, is_bot\n- No need for separate user_info calls\n\n**false:** Only user ID included. Faster, smaller payload."
|
|
23
|
+
},
|
|
24
|
+
"cursor": {
|
|
25
|
+
"type": "string",
|
|
26
|
+
"description": "Pagination cursor from previous response.\n\nCheck for \"has_more\": true and \"next_cursor\" in response, then pass next_cursor as cursor for more messages."
|
|
27
|
+
}
|
|
28
|
+
},
|
|
29
|
+
"required": ["channel_id"]
|
|
30
|
+
}
|
|
31
|
+
},
|
|
32
|
+
"conversations_replies": {
|
|
33
|
+
"name": "conversations_replies",
|
|
34
|
+
"description": "Get all replies in a message thread.\n\n**Use Cases:**\n- Read full thread discussion\n- Get context on a threaded conversation\n- Find follow-up messages to a question\n\n**Required:** Both channel_id and thread_ts (parent message timestamp).\n\n**Tip:** Find thread_ts from conversations_history - look for messages with \"reply_count\" > 0.",
|
|
35
|
+
"inputSchema": {
|
|
36
|
+
"type": "object",
|
|
37
|
+
"properties": {
|
|
38
|
+
"channel_id": {
|
|
39
|
+
"type": "string",
|
|
40
|
+
"description": "Channel containing the thread.\n\n**Formats:**\n- Channel ID: \"C01ABC2DEF3\" (recommended)\n- Channel name: \"#general\"\n- DM: \"@username\" or \"D01ABC2DEF3\""
|
|
41
|
+
},
|
|
42
|
+
"thread_ts": {
|
|
43
|
+
"type": "string",
|
|
44
|
+
"description": "Timestamp of the parent message (thread starter).\n\n**Format:** Unix timestamp with microseconds: \"1609459200.000100\"\n\n**How to Find:**\n1. From conversations_history: Look for \"ts\" field on messages with \"reply_count\" > 0\n2. From Slack URL: https://workspace.slack.com/archives/C01ABC/p1609459200000100\n - Remove 'p' prefix and insert decimal: 1609459200.000100"
|
|
45
|
+
},
|
|
46
|
+
"limit": {
|
|
47
|
+
"type": "string",
|
|
48
|
+
"description": "Reply limit. Same format as conversations_history:\n- Time-based: \"1d\", \"1w\"\n- Numeric: \"100\"\n\nMost threads have <100 replies."
|
|
49
|
+
},
|
|
50
|
+
"include_activity_messages": {
|
|
51
|
+
"type": "boolean",
|
|
52
|
+
"description": "Include system messages within thread. Default: false."
|
|
53
|
+
},
|
|
54
|
+
"cursor": {
|
|
55
|
+
"type": "string",
|
|
56
|
+
"description": "Pagination cursor for long threads."
|
|
57
|
+
}
|
|
58
|
+
},
|
|
59
|
+
"required": ["channel_id", "thread_ts"]
|
|
60
|
+
}
|
|
61
|
+
},
|
|
62
|
+
"conversations_add_message": {
|
|
63
|
+
"name": "conversations_add_message",
|
|
64
|
+
"description": "Send a message to a Slack channel or DM.\n\n**Use Cases:**\n- Post updates to a channel\n- Send DMs to users\n- Reply to threads\n- Make announcements\n\n**Supports:**\n- Slack formatting: *bold*, _italic_, `code`, ```code blocks```\n- Mentions: <@USER_ID>, <!here>, <!channel>\n- Links: <https://url.com|display text>\n- Emojis: :thumbsup: :rocket:\n\n**Markdown Conversion:** When content_type is \"text/markdown\" (default), standard markdown is converted to Slack format.",
|
|
65
|
+
"inputSchema": {
|
|
66
|
+
"type": "object",
|
|
67
|
+
"properties": {
|
|
68
|
+
"channel_id": {
|
|
69
|
+
"type": "string",
|
|
70
|
+
"description": "Where to post the message.\n\n**Formats:**\n- Channel ID: \"C01ABC2DEF3\" (most reliable)\n- Channel name: \"#general\", \"#announcements\"\n- DM to user: \"@john\" (creates/uses existing DM)\n- DM by ID: \"D01ABC2DEF3\"\n\n**Permissions:**\n- Public channels: chat:write scope\n- Private channels: Must be a member + chat:write\n- DMs: im:write scope"
|
|
71
|
+
},
|
|
72
|
+
"payload": {
|
|
73
|
+
"type": "string",
|
|
74
|
+
"description": "The message content to send.\n\n**Plain Text:** \"Hello team!\"\n\n**Slack Formatting (mrkdwn):**\n- *bold* -> bold text\n- _italic_ -> italic text\n- `code` -> inline code\n- ```code block``` -> multi-line code\n\n**Links:** <https://example.com|Click here>\n\n**Mentions:**\n- User: <@U01ABC2DEF3> or use @username (auto-resolved)\n- <!here> - notify active members\n- <!channel> - notify all members\n\n**Emojis:** :thumbsup: :rocket: :white_check_mark:\n\n**Example:** \"*Important:* Deployment complete :white_check_mark: <!here>\""
|
|
75
|
+
},
|
|
76
|
+
"thread_ts": {
|
|
77
|
+
"type": "string",
|
|
78
|
+
"description": "Reply to a specific thread (optional).\n\n**Format:** \"1609459200.000100\" (parent message ts)\n\n**Behavior:**\n- If provided: Posts as reply in thread\n- If omitted: Posts as new message in channel"
|
|
79
|
+
},
|
|
80
|
+
"content_type": {
|
|
81
|
+
"type": "string",
|
|
82
|
+
"description": "Content type of the message.\n\n**\"text/markdown\" (DEFAULT):** Markdown converted to Slack mrkdwn\n**\"text/plain\":** Message sent as-is without conversion"
|
|
83
|
+
}
|
|
84
|
+
},
|
|
85
|
+
"required": ["channel_id", "payload"]
|
|
86
|
+
}
|
|
87
|
+
},
|
|
88
|
+
"conversations_search_messages": {
|
|
89
|
+
"name": "conversations_search_messages",
|
|
90
|
+
"description": "Search for messages across Slack using text queries and filters.\n\n**Use Cases:**\n- Find past discussions about a topic\n- Locate messages from a specific person\n- Retrieve a specific message by URL\n- Search within date ranges\n\n**URL Lookup:** Paste a Slack message URL directly to retrieve that exact message.\n\n**Search Operators:** Combine search_query with filters for precise results:\n- search_query=\"deployment\" + filter_in_channel=\"#engineering\"\n- filter_users_from=\"@john\" + filter_date_after=\"2024-01-01\"\n\n**Note:** Either search_query OR at least one filter is required.",
|
|
91
|
+
"inputSchema": {
|
|
92
|
+
"type": "object",
|
|
93
|
+
"properties": {
|
|
94
|
+
"search_query": {
|
|
95
|
+
"type": "string",
|
|
96
|
+
"description": "Search term(s) OR a Slack message URL.\n\n**Text Search:**\n- \"quarterly report\" - Messages containing words\n- \"\\\"release notes\\\"\" - Exact phrase match\n\n**URL Lookup:**\n- Paste Slack URL: \"https://workspace.slack.com/archives/C01ABC/p1609459200000100\"\n- Returns that exact message\n\n**Combining with Filters:**\n- search_query=\"deployment\" + filter_in_channel=\"#engineering\"\n- search_query=\"review\" + filter_users_from=\"@john\"\n\n**Note:** Either search_query OR at least one filter required."
|
|
97
|
+
},
|
|
98
|
+
"filter_in_channel": {
|
|
99
|
+
"type": "string",
|
|
100
|
+
"description": "Restrict search to specific channel.\n\n**Formats:**\n- \"#channel-name\" - By name\n- \"C01ABC2DEF3\" - By ID\n\n**Example:** \"#engineering\" - Only engineering channel"
|
|
101
|
+
},
|
|
102
|
+
"filter_in_im_or_mpim": {
|
|
103
|
+
"type": "string",
|
|
104
|
+
"description": "Restrict search to DM or group DM.\n\n**Formats:**\n- \"@username\" - DM with user\n- \"D01ABC2DEF3\" - DM by ID\n- \"G01ABC2DEF3\" - Group DM"
|
|
105
|
+
},
|
|
106
|
+
"filter_users_from": {
|
|
107
|
+
"type": "string",
|
|
108
|
+
"description": "Only messages sent BY a specific user.\n\n**Formats:**\n- \"@john\" - By username\n- \"U01ABC2DEF3\" - By user ID\n\n**Use Case:** Find all updates posted by a specific person"
|
|
109
|
+
},
|
|
110
|
+
"filter_users_with": {
|
|
111
|
+
"type": "string",
|
|
112
|
+
"description": "Messages in conversations that include a user.\n\n**Difference from filter_users_from:**\n- filter_users_from: Messages SENT BY the user\n- filter_users_with: Messages WHERE the user is present in conversation"
|
|
113
|
+
},
|
|
114
|
+
"filter_date_before": {
|
|
115
|
+
"type": "string",
|
|
116
|
+
"description": "Messages BEFORE this date.\n\n**Formats:**\n- \"2024-01-15\" - Before January 15, 2024\n- \"yesterday\" - Before yesterday\n- \"last week\" - Before last week"
|
|
117
|
+
},
|
|
118
|
+
"filter_date_after": {
|
|
119
|
+
"type": "string",
|
|
120
|
+
"description": "Messages AFTER this date.\n\n**Formats:**\n- \"2024-01-01\" - After January 1, 2024\n- \"yesterday\" - After yesterday\n- \"last month\" - After last month"
|
|
121
|
+
},
|
|
122
|
+
"filter_date_on": {
|
|
123
|
+
"type": "string",
|
|
124
|
+
"description": "Messages on a specific date only.\n\n**Formats:**\n- \"2024-01-15\" - On January 15 only\n- \"today\" - Today only\n- \"yesterday\" - Yesterday only"
|
|
125
|
+
},
|
|
126
|
+
"filter_date_during": {
|
|
127
|
+
"type": "string",
|
|
128
|
+
"description": "Messages during a named period.\n\n**Formats:**\n- \"today\", \"yesterday\"\n- \"this week\", \"last week\"\n- \"this month\", \"last month\"\n- \"January\", \"Q4\""
|
|
129
|
+
},
|
|
130
|
+
"filter_threads_only": {
|
|
131
|
+
"type": "boolean",
|
|
132
|
+
"description": "Only return threaded messages.\n\n**true:** Only thread parents and replies\n**false (DEFAULT):** All messages"
|
|
133
|
+
},
|
|
134
|
+
"limit": {
|
|
135
|
+
"type": "number",
|
|
136
|
+
"description": "Maximum search results (1-100). Default: 20.\n\n**Recommendations:**\n- Quick lookup: 10-20\n- Comprehensive search: 50-100"
|
|
137
|
+
},
|
|
138
|
+
"cursor": {
|
|
139
|
+
"type": "string",
|
|
140
|
+
"description": "Pagination cursor for more results."
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
},
|
|
145
|
+
"bulk_conversations_history": {
|
|
146
|
+
"name": "bulk_conversations_history",
|
|
147
|
+
"description": "Efficiently fetch messages from MULTIPLE channels in one operation.\n\n**Why Use This:**\n- More efficient than multiple conversations_history calls\n- Single cache load for all channels\n- Better rate limit management\n- Results organized by channel\n\n**Use Cases:**\n- Daily digest from multiple channels\n- Cross-channel activity summary\n- Find messages from one person across channels\n\n**Response Structure:**\n```json\n{\n \"channels\": [\n { \"channel_id\": \"C01ABC\", \"messages\": [...], \"message_count\": 50 },\n { \"channel_id\": \"C02DEF\", \"messages\": [...], \"message_count\": 30 }\n ],\n \"summary\": { \"total_messages\": 80, \"api_calls\": 2 }\n}\n```\n\n**Recommendation:** Limit to 5-10 channels per call.",
|
|
148
|
+
"inputSchema": {
|
|
149
|
+
"type": "object",
|
|
150
|
+
"properties": {
|
|
151
|
+
"channel_ids": {
|
|
152
|
+
"type": "string",
|
|
153
|
+
"description": "Comma-separated list of channels.\n\n**Formats (can mix):**\n- \"#general, #engineering, #support\"\n- \"C01ABC, C02DEF, C03GHI\"\n- \"#general, C01ABC, @john_dm\"\n\n**Examples:**\n- Team channels: \"#frontend, #backend, #devops\"\n- Project channels: \"#project-alpha, #project-beta\"\n\n**Limit:** Recommend 5-10 channels per call to avoid timeout."
|
|
154
|
+
},
|
|
155
|
+
"limit": {
|
|
156
|
+
"type": "string",
|
|
157
|
+
"description": "Message limit PER CHANNEL (not total).\n\n**Formats:**\n- \"1d\" (DEFAULT) - Last 24 hours from each\n- \"1w\" - Last 7 days from each\n- \"50\" - Last 50 messages from each"
|
|
158
|
+
},
|
|
159
|
+
"include_user_details": {
|
|
160
|
+
"type": "boolean",
|
|
161
|
+
"description": "Enrich messages with user details. Default: true.\n\nUses single cached user lookup for efficiency."
|
|
162
|
+
},
|
|
163
|
+
"include_activity_messages": {
|
|
164
|
+
"type": "boolean",
|
|
165
|
+
"description": "Include system/activity messages. Default: false."
|
|
166
|
+
},
|
|
167
|
+
"filter_user": {
|
|
168
|
+
"type": "string",
|
|
169
|
+
"description": "Filter to messages from a specific user across ALL channels.\n\n**Formats:**\n- \"@username\" - By username\n- \"U01ABC2DEF3\" - By user ID\n- \"john.doe\" - By name\n\n**Use Case:** See all messages from one person across multiple channels."
|
|
170
|
+
}
|
|
171
|
+
},
|
|
172
|
+
"required": ["channel_ids"]
|
|
173
|
+
}
|
|
174
|
+
},
|
|
175
|
+
"users_list": {
|
|
176
|
+
"name": "users_list",
|
|
177
|
+
"description": "Get a list of workspace users with basic information.\n\n**Use Cases:**\n- Find team members\n- Get user IDs for mentions\n- Audit active vs deleted accounts\n- List workspace administrators\n\n**Performance:** Always uses cached data (24h TTL) for fast response.\n\n**Filter Options:**\n- \"active\" - Current users (default)\n- \"deleted\" - Deactivated accounts\n- \"admins\" - Administrators only\n- \"all\" - Everyone",
|
|
178
|
+
"inputSchema": {
|
|
179
|
+
"type": "object",
|
|
180
|
+
"properties": {
|
|
181
|
+
"filter_type": {
|
|
182
|
+
"type": "string",
|
|
183
|
+
"description": "Filter users by account status.\n\n**Options:**\n- \"active\" (DEFAULT) - Users with active accounts\n- \"deleted\" - Deactivated/deleted users\n- \"admins\" - Workspace administrators only\n- \"all\" - All users regardless of status"
|
|
184
|
+
},
|
|
185
|
+
"include_bots": {
|
|
186
|
+
"type": "boolean",
|
|
187
|
+
"description": "Include bot users in results.\n\n**false (DEFAULT):** Only human users\n**true:** Includes Slackbot, integration bots, apps"
|
|
188
|
+
},
|
|
189
|
+
"limit": {
|
|
190
|
+
"type": "number",
|
|
191
|
+
"description": "Maximum users to return.\n\n**Default:** 50\n**Set to 0:** Returns all users (no limit)\n\nResults from cache, so large limits are fast."
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
},
|
|
196
|
+
"user_info": {
|
|
197
|
+
"name": "user_info",
|
|
198
|
+
"description": "Get detailed information about one or more users.\n\n**Use Cases:**\n- Get full profile (email, title, phone)\n- Look up user by name or ID\n- Get multiple users at once\n- Verify user details\n\n**Flexible Matching:** Matches username, display_name, or real_name.\n\n**Returns:** Full profile, status (deleted, admin, bot), timezone, profile images.",
|
|
199
|
+
"inputSchema": {
|
|
200
|
+
"type": "object",
|
|
201
|
+
"properties": {
|
|
202
|
+
"user_ids": {
|
|
203
|
+
"type": "string",
|
|
204
|
+
"description": "User(s) to get information about.\n\n**Single User:**\n- \"@john\" - By username\n- \"U01ABC2DEF3\" - By user ID\n- \"john\" - Without @ also works\n\n**Multiple Users (comma-separated):**\n- \"@john, @jane, @bob\"\n- \"U01ABC, U02DEF\"\n- \"@john, U01ABC\" - Mixed formats\n\n**Name Matching:** Flexibly matches username, display_name, or real_name"
|
|
205
|
+
},
|
|
206
|
+
"use_cache": {
|
|
207
|
+
"type": "boolean",
|
|
208
|
+
"description": "Try cache before API calls.\n\n**true (DEFAULT):** Faster, data may be up to 24h old\n**false:** Always fetches fresh from Slack API"
|
|
209
|
+
}
|
|
210
|
+
},
|
|
211
|
+
"required": ["user_ids"]
|
|
212
|
+
}
|
|
213
|
+
},
|
|
214
|
+
"user_presence": {
|
|
215
|
+
"name": "user_presence",
|
|
216
|
+
"description": "Check a user's presence status (online, away, etc.).\n\n**Use Cases:**\n- Check if someone is available before messaging\n- Verify if a user is currently online\n- See when someone was last active\n\n**Returns:**\n- presence: \"active\" or \"away\"\n- online: true/false\n- auto_away: true if Slack set away automatically\n- manual_away: true if user set away manually\n- last_activity: timestamp",
|
|
217
|
+
"inputSchema": {
|
|
218
|
+
"type": "object",
|
|
219
|
+
"properties": {
|
|
220
|
+
"user_id": {
|
|
221
|
+
"type": "string",
|
|
222
|
+
"description": "The user to check presence for.\n\n**Formats:**\n- \"@username\" - By username\n- \"U01ABC2DEF3\" - By user ID"
|
|
223
|
+
}
|
|
224
|
+
},
|
|
225
|
+
"required": ["user_id"]
|
|
226
|
+
}
|
|
227
|
+
},
|
|
228
|
+
"channel_info": {
|
|
229
|
+
"name": "channel_info",
|
|
230
|
+
"description": "Get detailed information about a specific channel.\n\n**Use Cases:**\n- Get channel topic and purpose\n- Check member count\n- Verify channel exists before posting\n- Get channel metadata\n\n**Returns:**\n- Basic: name, id, created timestamp\n- Content: topic, purpose\n- Membership: member_count, is_member\n- Status: is_archived, is_private",
|
|
231
|
+
"inputSchema": {
|
|
232
|
+
"type": "object",
|
|
233
|
+
"properties": {
|
|
234
|
+
"channel_id": {
|
|
235
|
+
"type": "string",
|
|
236
|
+
"description": "The channel to get information about.\n\n**Formats:**\n- \"C01ABC2DEF3\" - Channel ID (recommended)\n- \"#general\" - Channel name\n- \"@username_dm\" - DM channel"
|
|
237
|
+
},
|
|
238
|
+
"include_locale": {
|
|
239
|
+
"type": "boolean",
|
|
240
|
+
"description": "Include locale/language information. Usually not needed. Default: false."
|
|
241
|
+
},
|
|
242
|
+
"use_cache": {
|
|
243
|
+
"type": "boolean",
|
|
244
|
+
"description": "Try cache first (6h TTL for channels).\n\n**true (DEFAULT):** Fast response from cache\n**false:** Fresh data from Slack API"
|
|
245
|
+
}
|
|
246
|
+
},
|
|
247
|
+
"required": ["channel_id"]
|
|
248
|
+
}
|
|
249
|
+
},
|
|
250
|
+
"channel_members": {
|
|
251
|
+
"name": "channel_members",
|
|
252
|
+
"description": "Get list of members in a channel with their details.\n\n**Use Cases:**\n- See who's in a channel\n- Verify channel membership\n- Find admins/bots in channel\n- Get member count\n\n**Returns:** List with user ID, username, real_name, display_name, admin status, bot status.",
|
|
253
|
+
"inputSchema": {
|
|
254
|
+
"type": "object",
|
|
255
|
+
"properties": {
|
|
256
|
+
"channel_id": {
|
|
257
|
+
"type": "string",
|
|
258
|
+
"description": "The channel to list members of.\n\n**Formats:**\n- \"C01ABC2DEF3\" - Channel ID\n- \"#general\" - Channel name"
|
|
259
|
+
},
|
|
260
|
+
"limit": {
|
|
261
|
+
"type": "number",
|
|
262
|
+
"description": "Maximum members to return (1-1000). Default: 100.\n\nFor large channels, use pagination with cursor."
|
|
263
|
+
},
|
|
264
|
+
"cursor": {
|
|
265
|
+
"type": "string",
|
|
266
|
+
"description": "Pagination cursor from previous response.\n\nUse for channels with 100+ members."
|
|
267
|
+
}
|
|
268
|
+
},
|
|
269
|
+
"required": ["channel_id"]
|
|
270
|
+
}
|
|
271
|
+
},
|
|
272
|
+
"channels_list": {
|
|
273
|
+
"name": "channels_list",
|
|
274
|
+
"description": "Get list of channels by type.\n\n**Use Cases:**\n- Browse available channels\n- Find channel IDs for other operations\n- List DMs and group DMs\n- Find popular channels (by member count)\n\n**Channel Types:**\n- public_channel - Public channels\n- private_channel - Private channels (only those you're in)\n- im - Direct messages\n- mpim - Group direct messages",
|
|
275
|
+
"inputSchema": {
|
|
276
|
+
"type": "object",
|
|
277
|
+
"properties": {
|
|
278
|
+
"channel_types": {
|
|
279
|
+
"type": "string",
|
|
280
|
+
"description": "Types of channels to list (comma-separated).\n\n**Options:**\n- \"public_channel\" - Public channels\n- \"private_channel\" - Private channels (only those you're in)\n- \"im\" - Direct messages (1:1)\n- \"mpim\" - Group DMs\n\n**Examples:**\n- \"public_channel\" - Just public\n- \"public_channel,private_channel\" - All regular channels\n- \"im,mpim\" - All direct messages"
|
|
281
|
+
},
|
|
282
|
+
"sort": {
|
|
283
|
+
"type": "string",
|
|
284
|
+
"description": "Sort order.\n\n**Options:**\n- \"popularity\" - Sort by member count (most first)\n- (omit) - Default Slack API order"
|
|
285
|
+
},
|
|
286
|
+
"limit": {
|
|
287
|
+
"type": "number",
|
|
288
|
+
"description": "Maximum channels (1-999). Default: 100."
|
|
289
|
+
},
|
|
290
|
+
"cursor": {
|
|
291
|
+
"type": "string",
|
|
292
|
+
"description": "Pagination cursor for workspaces with many channels."
|
|
293
|
+
}
|
|
294
|
+
},
|
|
295
|
+
"required": ["channel_types"]
|
|
296
|
+
}
|
|
297
|
+
},
|
|
298
|
+
"channels_detailed": {
|
|
299
|
+
"name": "channels_detailed",
|
|
300
|
+
"description": "Get comprehensive channel list with details.\n\n**Use Cases:**\n- Get channel overview with metadata\n- Compare channels by member count\n- Export channel list with details\n\n**Difference from channels_list:**\n- More detailed information\n- Optional extra API calls for full details\n- Single efficient call vs N individual calls",
|
|
301
|
+
"inputSchema": {
|
|
302
|
+
"type": "object",
|
|
303
|
+
"properties": {
|
|
304
|
+
"channel_types": {
|
|
305
|
+
"type": "string",
|
|
306
|
+
"description": "Channel types to fetch.\n\n**Default:** \"public_channel,private_channel\"\n\n**Options:** Same as channels_list"
|
|
307
|
+
},
|
|
308
|
+
"sort": {
|
|
309
|
+
"type": "string",
|
|
310
|
+
"description": "Sort by \"popularity\" (member count) or omit for default."
|
|
311
|
+
},
|
|
312
|
+
"limit": {
|
|
313
|
+
"type": "number",
|
|
314
|
+
"description": "Maximum channels (1-999). Default: 100."
|
|
315
|
+
},
|
|
316
|
+
"include_detailed_info": {
|
|
317
|
+
"type": "boolean",
|
|
318
|
+
"description": "Fetch extra details with additional API calls.\n\n**false (DEFAULT):** Single API call, basic info, fast\n**true:** Additional call per channel, full details, slower\n\nRecommendation: Use false unless you need every detail."
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
},
|
|
323
|
+
"set_channel_topic": {
|
|
324
|
+
"name": "set_channel_topic",
|
|
325
|
+
"description": "Set the topic for a channel.\n\n**Use Cases:**\n- Update channel topic for a project phase\n- Set meeting schedule in topic\n- Add important links/info to topic\n\n**Display:** Topic shows at the top of the channel.\n**Max Length:** 250 characters.",
|
|
326
|
+
"inputSchema": {
|
|
327
|
+
"type": "object",
|
|
328
|
+
"properties": {
|
|
329
|
+
"channel_id": {
|
|
330
|
+
"type": "string",
|
|
331
|
+
"description": "Channel to update topic.\n\n**Formats:** \"C01ABC2DEF3\" or \"#channel-name\"\n\n**Permissions:** Must have channel edit permissions."
|
|
332
|
+
},
|
|
333
|
+
"topic": {
|
|
334
|
+
"type": "string",
|
|
335
|
+
"description": "New topic text (max 250 chars, plain text).\n\n**Examples:**\n- \"Q4 Planning - Meeting Thursdays at 2pm\"\n- \"Support escalations - @oncall for urgent\"\n- \"Read-only announcements channel\""
|
|
336
|
+
}
|
|
337
|
+
},
|
|
338
|
+
"required": ["channel_id", "topic"]
|
|
339
|
+
}
|
|
340
|
+
},
|
|
341
|
+
"set_channel_purpose": {
|
|
342
|
+
"name": "set_channel_purpose",
|
|
343
|
+
"description": "Set the purpose for a channel.\n\n**Use Cases:**\n- Describe what the channel is for\n- Set guidelines for channel usage\n- Help new members understand the channel\n\n**Display:** Purpose shows in channel details/about section.\n**Max Length:** 250 characters.",
|
|
344
|
+
"inputSchema": {
|
|
345
|
+
"type": "object",
|
|
346
|
+
"properties": {
|
|
347
|
+
"channel_id": {
|
|
348
|
+
"type": "string",
|
|
349
|
+
"description": "Channel to update purpose.\n\n**Formats:** \"C01ABC2DEF3\" or \"#channel-name\""
|
|
350
|
+
},
|
|
351
|
+
"purpose": {
|
|
352
|
+
"type": "string",
|
|
353
|
+
"description": "New purpose text (max 250 chars).\n\n**Examples:**\n- \"Engineering team discussions and updates\"\n- \"Customer support ticket escalations\"\n- \"Random watercooler chat and team bonding\""
|
|
354
|
+
}
|
|
355
|
+
},
|
|
356
|
+
"required": ["channel_id", "purpose"]
|
|
357
|
+
}
|
|
358
|
+
},
|
|
359
|
+
"message_permalink": {
|
|
360
|
+
"name": "message_permalink",
|
|
361
|
+
"description": "Get a permanent link to a specific message.\n\n**Use Cases:**\n- Share message references\n- Create links that work across Slack clients\n- Reference specific messages in documentation\n\n**Returns:** Permanent URL like:\nhttps://workspace.slack.com/archives/C01ABC/p1609459200000100",
|
|
362
|
+
"inputSchema": {
|
|
363
|
+
"type": "object",
|
|
364
|
+
"properties": {
|
|
365
|
+
"channel_id": {
|
|
366
|
+
"type": "string",
|
|
367
|
+
"description": "Channel containing the message.\n\n**Formats:** \"C01ABC2DEF3\" or \"#channel-name\""
|
|
368
|
+
},
|
|
369
|
+
"message_ts": {
|
|
370
|
+
"type": "string",
|
|
371
|
+
"description": "Timestamp of the message.\n\n**Format:** \"1609459200.000100\" (Unix timestamp with microseconds)\n\n**Source:** From \"ts\" field in any message object."
|
|
372
|
+
}
|
|
373
|
+
},
|
|
374
|
+
"required": ["channel_id", "message_ts"]
|
|
375
|
+
}
|
|
376
|
+
},
|
|
377
|
+
"add_reaction": {
|
|
378
|
+
"name": "add_reaction",
|
|
379
|
+
"description": "Add an emoji reaction to a message.\n\n**Use Cases:**\n- Acknowledge messages with reactions\n- Add emoji responses (thumbsup, checkmark, etc.)\n- Indicate message status with reactions\n\n**Important:** Use emoji name WITHOUT colons.",
|
|
380
|
+
"inputSchema": {
|
|
381
|
+
"type": "object",
|
|
382
|
+
"properties": {
|
|
383
|
+
"channel_id": {
|
|
384
|
+
"type": "string",
|
|
385
|
+
"description": "Channel containing the message.\n\n**Formats:** \"C01ABC2DEF3\" or \"#channel-name\""
|
|
386
|
+
},
|
|
387
|
+
"message_ts": {
|
|
388
|
+
"type": "string",
|
|
389
|
+
"description": "Timestamp of the message to react to.\n\n**Format:** \"1609459200.000100\"\n**Source:** From message \"ts\" field"
|
|
390
|
+
},
|
|
391
|
+
"emoji_name": {
|
|
392
|
+
"type": "string",
|
|
393
|
+
"description": "Emoji name WITHOUT colons.\n\n**Common Emojis:**\n- \"thumbsup\" - NOT \":thumbsup:\"\n- \"thumbsdown\"\n- \"heart\"\n- \"rocket\"\n- \"eyes\"\n- \"white_check_mark\"\n- \"x\"\n- \"thinking_face\"\n- \"tada\"\n- \"fire\"\n- \"+1\" (same as thumbsup)\n\n**Custom Emojis:** Your workspace's custom emojis work too."
|
|
394
|
+
}
|
|
395
|
+
},
|
|
396
|
+
"required": ["channel_id", "message_ts", "emoji_name"]
|
|
397
|
+
}
|
|
398
|
+
},
|
|
399
|
+
"files_list": {
|
|
400
|
+
"name": "files_list",
|
|
401
|
+
"description": "List files shared in the workspace.\n\n**Use Cases:**\n- Find files shared in a channel\n- List files uploaded by a user\n- Filter by file type (images, PDFs, etc.)\n- Get file metadata and URLs\n\n**Returns:** File name, type, size, URLs, uploader, timestamps.",
|
|
402
|
+
"inputSchema": {
|
|
403
|
+
"type": "object",
|
|
404
|
+
"properties": {
|
|
405
|
+
"channel_id": {
|
|
406
|
+
"type": "string",
|
|
407
|
+
"description": "Filter to files shared in a specific channel.\n\n**Formats:** \"C01ABC2DEF3\" or \"#channel-name\"\n\n**Omit:** Returns files from all accessible channels."
|
|
408
|
+
},
|
|
409
|
+
"user_id": {
|
|
410
|
+
"type": "string",
|
|
411
|
+
"description": "Filter to files uploaded by a specific user.\n\n**Formats:** \"@username\" or \"U01ABC2DEF3\"\n\n**Omit:** Returns files from all users."
|
|
412
|
+
},
|
|
413
|
+
"count": {
|
|
414
|
+
"type": "number",
|
|
415
|
+
"description": "Number of files to return (1-1000). Default: 10.\n\nStart with 10-20, increase if needed."
|
|
416
|
+
},
|
|
417
|
+
"types": {
|
|
418
|
+
"type": "string",
|
|
419
|
+
"description": "Filter by file type(s).\n\n**Options:**\n- \"all\" (DEFAULT) - All file types\n- \"images\" - png, jpg, gif\n- \"videos\" - mp4, mov\n- \"pdfs\" - PDF documents\n- \"docs\" - Word documents\n- \"gdocs\" - Google Docs\n- \"zips\" - Compressed files\n- \"spaces\" - Slack posts/snippets\n\n**Multiple types:** \"images,pdfs\""
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
|
+
}
|
|
423
|
+
},
|
|
424
|
+
"workspace_info": {
|
|
425
|
+
"name": "workspace_info",
|
|
426
|
+
"description": "Get information about the current Slack workspace/team.\n\n**Use Cases:**\n- Verify which workspace you're connected to\n- Get workspace domain for building URLs\n- Check Enterprise Grid membership\n\n**No parameters required.**\n\n**Returns:**\n- id: Team/workspace ID (T01ABC2DEF3)\n- name: Workspace name\n- domain: Slack domain (for URLs)\n- email_domain: Email domain for members\n- enterprise_id/name (if applicable)\n\n**Required Scope:** team:read",
|
|
427
|
+
"inputSchema": {
|
|
428
|
+
"type": "object",
|
|
429
|
+
"properties": {}
|
|
430
|
+
}
|
|
431
|
+
},
|
|
432
|
+
"initialize_cache": {
|
|
433
|
+
"name": "initialize_cache",
|
|
434
|
+
"description": "Pre-populate local caches with users and channels from Slack API.\n\n**Use Cases:**\n- Call at START of a session for faster subsequent calls\n- Warm up cache for name resolution (@username, #channel)\n- Ensure users_list and channel_info are fast\n\n**What It Does:**\n1. Fetches all users -> ~/slack-cache/users_cache.json\n2. Fetches all channels -> ~/slack-cache/channels_cache_v2.json\n\n**Cache Duration:**\n- Users: 24 hours TTL\n- Channels: 6 hours TTL\n\n**No parameters required.**",
|
|
435
|
+
"inputSchema": {
|
|
436
|
+
"type": "object",
|
|
437
|
+
"properties": {}
|
|
438
|
+
}
|
|
439
|
+
},
|
|
440
|
+
"cache_info": {
|
|
441
|
+
"name": "cache_info",
|
|
442
|
+
"description": "Get details about the local cache files.\n\n**Use Cases:**\n- Debug why name resolution isn't working\n- Check if cache is stale\n- Verify cache was created successfully\n\n**Returns:**\n- File paths (absolute locations)\n- File sizes (KB)\n- Last modified times\n- Age in hours\n- Freshness status (is_fresh)\n\n**No parameters required.**",
|
|
443
|
+
"inputSchema": {
|
|
444
|
+
"type": "object",
|
|
445
|
+
"properties": {}
|
|
446
|
+
}
|
|
447
|
+
},
|
|
448
|
+
"clear_cache": {
|
|
449
|
+
"name": "clear_cache",
|
|
450
|
+
"description": "Clear cache files to force refresh from Slack API.\n\n**Use Cases:**\n- Force refresh when data seems stale\n- After workspace changes (new users, new channels)\n- Troubleshooting resolution issues\n\n**After Clearing:** Cache files recreated on next API call.",
|
|
451
|
+
"inputSchema": {
|
|
452
|
+
"type": "object",
|
|
453
|
+
"properties": {
|
|
454
|
+
"cache_type": {
|
|
455
|
+
"type": "string",
|
|
456
|
+
"enum": ["users", "channels", "both"],
|
|
457
|
+
"description": "Which cache to clear.\n\n**Options:**\n- \"both\" (DEFAULT) - Clear users AND channels\n- \"users\" - Clear only users cache\n- \"channels\" - Clear only channels cache"
|
|
458
|
+
}
|
|
459
|
+
}
|
|
460
|
+
}
|
|
461
|
+
},
|
|
462
|
+
"check_permissions": {
|
|
463
|
+
"name": "check_permissions",
|
|
464
|
+
"description": "Test what Slack API scopes/permissions the current token has.\n\n**Use Cases:**\n- Debug \"permission denied\" errors\n- Verify token has needed scopes\n- Check what operations are possible\n\n**Tests These Scopes:**\n- users:read - Can list users\n- channels:read - Can list public channels\n- groups:read - Can list private channels\n- im:read - Can list DMs\n- mpim:read - Can list group DMs\n- team:read - Can get workspace info\n- channels:history - Can read messages\n- chat:write - Can send messages\n\n**Returns:** Status for each scope, recommendations.\n\n**No parameters required.**",
|
|
465
|
+
"inputSchema": {
|
|
466
|
+
"type": "object",
|
|
467
|
+
"properties": {}
|
|
468
|
+
}
|
|
469
|
+
},
|
|
470
|
+
"analytics_summary": {
|
|
471
|
+
"name": "analytics_summary",
|
|
472
|
+
"description": "Get basic workspace analytics from cached data.\n\n**Use Cases:**\n- Quick workspace overview\n- Understand team size\n- Count channels by type\n\n**Returns:**\n- User stats: total, active, bots, admins\n- Channel stats: public, private, DMs, group DMs\n\n**Data Source:** Uses cached data, not real-time metrics.\nProvides snapshot of workspace structure.",
|
|
473
|
+
"inputSchema": {
|
|
474
|
+
"type": "object",
|
|
475
|
+
"properties": {
|
|
476
|
+
"date_range": {
|
|
477
|
+
"type": "string",
|
|
478
|
+
"description": "Time period label (affects label, not data).\n\n**Options:**\n- \"7d\" - Label as 7-day period\n- \"30d\" (DEFAULT) - Label as 30-day period\n- \"90d\" - Label as 90-day period\n\n**Note:** Analytics based on cached data, not historical."
|
|
479
|
+
}
|
|
480
|
+
}
|
|
481
|
+
}
|
|
482
|
+
}
|
|
483
|
+
}
|