This Slack MCP server has 8 well-named tools with complete input schemas and descriptions. However, there are significant gaps in parameter descriptions, output schema documentation, and error handling guidance. The naming convention is strong (all start with action verbs: slack_list, slack_post, slack_reply, slack_add, slack_get). Descriptions are present but terse (averaging ~60 chars), falling short of the 194-char baseline for production tools. Parameter descriptions are mostly present but lack detail on constraints, ranges, and expected formats. Output schemas are not documented, LLMs cannot reason about what fields to expect from tool responses. No error handling guidance or recovery paths are provided. The tool set is well-composed with clear single responsibilities, but lacks the detail needed for confident LLM invocation at scale.
Add a reaction emoji to a message
Get recent messages from a channel
Get all replies in a message thread
Get detailed profile information for a specific user
Get a list of all users in the workspace with their basic profile information
List public channels in the workspace with pagination
Output schemas are completely undocumented. LLMs cannot reason about response structure, field names, or available chaining IDs. No documentation of pagination responses, message object structure, user object fields, or success indicators.
Tool descriptions are too terse (averaging 60 chars vs 194-char baseline). They lack context on WHEN to use each tool, dependencies between tools, and what data is returned. E.g., 'List public channels' doesn't explain pagination behavior or whether archived channels are included.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 68 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 20 | - | v1 |
Post a new message to a Slack channel
Reply to a specific message thread in Slack
Parameter descriptions lack constraint specification. 'limit' parameters have no explicit min/max in descriptions (source shows limit.default=100, max 200 for channels but this is only stated in description text, not validated in schema). Format constraints for 'thread_ts' are documented in description but not as JSON Schema patterns. No enum constraints where appropriate.
No error handling guidance. Tools lack recovery paths. When a channel is not found, deleted, or access-denied, there's no documented recovery (e.g., 'call slack_list_channels to find the right channel'). No guidance on retryable vs fatal errors.
Irreversible operations (slack_post_message, slack_reply_to_thread, slack_add_reaction) lack confirmation/dry-run support. An agent could accidentally post to the wrong channel or add an incorrect reaction with no ability to preview or confirm before execution.
Input schemas lack proper type and constraint declarations. 'limit' is type 'number' but should constrain to integer; missing mininum/maximum properties. 'reaction' parameter has no enum of valid emoji names, forcing LLMs to guess valid reactions.
Parameters accept system IDs only (channel_id, user_id, thread_ts). No support for human-friendly identifiers. Users say 'post to #general' but the tool requires 'C1234567'. This forces extra lookup calls and breaks the chat data model.
No result limits documented or enforced. slack_list_channels and slack_get_users accept pagination but lack guidance on maximum result set size. Large result sets (e.g., 200 users with full profiles) could exhaust context windows.