A Slack MCP server that provides tools for interacting with Slack workspaces, including listing channels, posting messages, searching, and managing user profiles
This Slack MCP server demonstrates solid definition quality with well-structured schemas, descriptive text, and clear tool naming. All 11 tools are explicitly registered with JSON schemas generated from Zod validators. Descriptions are substantive and include usage guidance (e.g., slack_get_channel_history vs slack_search_messages). However, several gaps prevent a higher score: (1) no tool annotations (readOnlyHint/destructiveHint/idempotentHint) despite clear risk profiles; (2) output schemas not documented in tool definitions; (3) some parameter descriptions could be more explicit about format/constraints; (4) no error handling patterns visible in tool registration. The server shows above-average attention to parameter description and naming clarity.
Add a reaction emoji to a message
Get messages from a channel in chronological order. Use this when: 1) You need the latest conversation flow without specific filters, 2) You want ALL messages including bot/automation messages, 3) You need to browse messages sequentially with pagination. Do NOT use if you have specific search criteria (user, keywords, dates) - use slack_search_messages instead.
Get all replies in a message thread
Get multiple users profile information in bulk
Retrieve basic profile information of all users in the workspace
List public channels in the workspace with pagination
No tool annotations (readOnlyHint/destructiveHint/idempotentHint) despite clear risk profiles. Tools like slack_post_message, slack_reply_to_thread, and slack_add_reaction are WRITE operations; slack_list_channels, slack_get_channel_history, and search_* are READ_ONLY. These annotations would signal to agents which tools are safe to retry and which modify state.
Output schemas not documented in tool definitions. Tool descriptions describe what each tool does, but the ListToolsRequestSchema response does not include outputSchema or documentation of return field structure. LLMs cannot determine what fields to expect (e.g., does slack_search_messages return message_id or ts? Does slack_get_users return user_id or id?).
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | B | 73 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 43 | - | v1 |
Post a new message to a Slack channel
Reply to a specific message thread in Slack
Search for channels by partial name match. Use this when you need to find channels containing specific keywords in their names. Returns up to the specified limit of matching channels.
Search for messages with specific criteria/filters. Use this when: 1) You need to find messages from a specific user, 2) You need messages from a specific date range, 3) You need to search by keywords, 4) You want to filter by channel. This tool is optimized for targeted searches. For general channel browsing without filters, use slack_get_channel_history instead.
Search for users by partial name match across username, display name, and real name. Use this when you need to find users containing specific keywords in their names. Returns up to the specified limit of matching users.
Parameter descriptions for pagination cursor fields are minimal ('Pagination cursor for next page of results'). No documentation of the actual cursor format, how to use it, or what it contains. For slack_search_messages, complex filter parameters (after, before, during, on) lack explicit guidance on format (are YYYY-MM-DD and natural language 'July' actually both valid? Which takes precedence?)
Parameter from_user in slack_search_messages requires a user ID but description says 'use slack_get_users to find the user by name and get their user ID'. This is a dependency hint, good, but no enum or examples of valid user ID format (U1234567?). Similar issue with in_channel (requires channel ID C1234567) and timestamp formats (thread_ts expected as '1234567890.123456').
No error handling patterns documented. Tool definitions do not specify what errors might occur (permission denied, rate limit, channel not found, invalid timestamp format) or what the LLM should do next. Error recovery guidance is absent.
slack_post_message and slack_reply_to_thread accept text but do not mention Slack message format support (plain text vs blocks vs mrkdwn). Users may expect to send formatted messages but the tool silently truncates or rejects markdown. Parameter description should clarify: 'Plain text messages only. For rich formatting, use Slack Block Kit via a separate tool or API.'