Slack CLI MCP server providing tools for interacting with Slack workspaces including channels, messages, users, files, reactions, and search functionality
The slackcli MCP server demonstrates solid definition quality with consistent naming patterns, complete parameter descriptions, and explicit schema definitions across all 23 tools. All tools follow verb_noun naming conventions (list_*, get_*, create_*, send_*, etc.). Tool descriptions are present and actionable, ranging from 26-95 characters. Input schemas use proper JSON Schema with typed parameters and descriptions. However, output schemas are not documented in the tool definitions themselves, responses are returned as JSON text without explicit type declarations. This is a moderate gap per the production baseline (100% of A+ tools have documented return types). Error handling exists but lacks granular recovery guidance (pattern:recovery-guide). No tool annotations (readOnlyHint/destructiveHint/idempotentHint) are visible despite the Risk column indicating semantic intent. The server correctly avoids exposing secrets as parameters (using environment-injected Slack API tokens).
Add an emoji reaction to a message
Archive a Slack channel
Test authentication and get current user info
Create a new Slack channel
Delete a file
Delete a message
Edit an existing message
Output schemas not documented. Tools return JSON text via mcp.NewToolResultText(toJSON(result)) but do not declare what fields/types the response contains. LLMs cannot plan downstream tool calls or extract the right data without knowing response structure.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | B | 76 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 0 | - | v1 |
Get information about a Slack channel
Get information about a file
Get information about a Slack user
Get a user's presence status
Invite users to a channel
Remove a user from a channel
List Slack channels
List files in Slack
List messages in a Slack channel
List reactions for a user
List Slack users
Remove an emoji reaction from a message
Search for messages in Slack
Send a message to a Slack channel
Set a channel's purpose
Set a channel's topic
Tool annotations missing. Despite the Risk column in the tool list indicating semantic intent (READ_ONLY, WRITE, REVERSIBLE, DESTRUCTIVE), the tool definitions do not register readOnlyHint, destructiveHint, or idempotentHint annotations. This prevents clients from applying appropriate guardrails (e.g., requiring user confirmation before delete_message or delete_file).
Error handling lacks recovery guidance. The errResult() helper returns errors but code does not show explicit categorization of errors as retryable/user-fixable/fatal or actionable recovery suggestions. Pattern:recovery-guide recommends 'User not found. Try search_users() with a partial name.' but these hints are absent.
Pagination response structure undocumented. list_channels, list_users, list_messages, list_files, and list_reactions accept cursor/limit/all parameters but the response format (e.g., does it return [items], {items, next_cursor}, {items, total, offset}?) is not declared. LLMs cannot iterate pagination correctly without knowing response shape.
No confirmation pattern for destructive operations. delete_message and delete_file are DESTRUCTIVE but do not support dry-run or confirmation step. Pattern:confirmation-request recommends LLMs should be able to preview consequences before irreversible actions.
Natural identifiers not fully supported. All tools that reference users, channels, and files use IDs (user_id, channel_id, file_id) but do not accept human-friendly identifiers like usernames, channel names, or natural language descriptions. Per mxe:natural-identifiers, agents often have display names but not internal IDs, requiring opaque IDs forces unnecessary lookup calls. Recommend accepting both user_name and user_id, channel_name and channel_id.