Catch up on Slack without reading it. Unreads, threads, search. Browser-session or hosted OAuth.
The Slack MCP server demonstrates solid definition quality with clear naming conventions, generally good descriptions, and well-structured schemas. All 13 tools follow verb_noun naming patterns (slack_<action>_<resource>). Tool descriptions are present and substantive (avg ~120 chars), providing context for when to use each tool. Input schemas are explicit with typed properties and descriptions. However, there are notable gaps: output schemas are not documented in the visible source, error handling guidance is absent, and some parameter descriptions lack specificity around constraints or formats. Tool annotations are present and correct (readOnlyHint, destructiveHint, idempotentHint), which is excellent for tool discovery. The server avoids the critical antipattern of exposing secrets as parameters. Overall, this is a well-executed toolkit that would benefit from documented output schemas and more detailed error recovery guidance.
Add an emoji reaction to a message
Get messages from a channel or DM with user names resolved
Export FULL conversation history with all messages, threads, and user names. Can save to file.
Get all replies in a message thread
Check if Slack tokens are valid and show authentication status
List all DMs and channels with user names resolved. Uses cached DMs by default for speed.
No documented output schemas. While input schemas are explicit, output schemas for each tool are not visible in the provided source. LLMs need to know what fields to expect (e.g., does slack_conversations_history return message_text or text? Does it include user_id or user_name?). This forces LLMs to guess at response structure and wastes tokens on exploratory calls.
Missing error handling guidance. Tool descriptions do not include recovery hints for common failure modes (e.g., 'If token is invalid, call slack_refresh_tokens' or 'If channel not found, use slack_list_conversations to discover available channels'). Error responses are not visible in the source, leaving uncertainty about whether errors include actionable messages.
Inferred effective spec: 2026-07-28+.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-21 | C | 69 | 2026-07-28+ | v2 |
| 2026-03-09 | C | 62 | - | v1 |
List all users in the workspace
Force refresh tokens by extracting from Chrome (requires Slack tab open in Chrome)
Remove an emoji reaction from a message
Search messages across the Slack workspace
Send a message to a channel or DM
Check token health, age, auto-refresh status, and cache stats
Get detailed information about a Slack user
Parameter constraint documentation is incomplete. Several parameters lack specificity around constraints: slack_conversations_history 'limit' (max 100?) is stated but no minimum; slack_list_conversations 'discover_dms' mentions rate limits but no specific guidance; slack_list_users 'limit' claims to support pagination but no next_cursor or offset parameters are shown. Enums are not used where they could constrain input (e.g., slack_list_conversations 'types' is a free-form string instead of an enum).
Pagination pattern incomplete. slack_list_conversations mentions cached results and a limit parameter, but no offset, page, or cursor parameter is documented for pagination. slack_list_users claims to support pagination but provides no next_cursor or page mechanism. Without pagination guidance, LLMs cannot reliably fetch large result sets.
Confirmation pattern missing for destructive operations. slack_send_message and reaction tools (add_reaction, remove_reaction) do not mention dry-run or confirmation-before-execute patterns. An agent could accidentally send a malformed message or add reactions to the wrong messages without a safety gate.
slack_list_conversations parameter documentation is vague. The 'types' parameter accepts a comma-separated string like 'im,mpim,public_channel,private_channel', but the description does not explicitly state that commas are the delimiter or that invalid type values are rejected. An LLM might pass 'im; mpim' or 'im | mpim' and receive an error with no self-correction guidance.
Natural identifiers are not consistently supported. slack_users_info requires 'user_id' (an opaque system ID), not 'user_name' or 'user_email'. Users say 'Tell me about Jack' (a name), not 'Tell me about U2405687'. The tool should accept names/emails and resolve them internally, or the description should explain that a lookup call (slack_list_users + manual ID extraction) is required first.