slack-mcp provides 9 well-named, read-only tools with complete input schemas and descriptions. Naming follows verb_noun convention (slack_summary, slack_channel, slack_dm). All tools have descriptions (avg ~180 chars, within 10-1024 baseline). Input schemas are properly typed with JSON Schema. However, output schemas are NOT documented, LLMs cannot predict response structure for downstream chaining. Parameter descriptions are present but lack constraints (enums, ranges, patterns). No error handling guidance. No tool annotations (readOnlyHint, idempotentHint). Missing composition patterns: no batch tool despite mentioning it in slack_channels description. Descriptions emphasize 'FULL text (no truncation)' repeatedly, which is marketing language rather than actionable guidance.
Fetch messages from multiple channels in a single call. Much more efficient than calling slack_channel repeatedly. Returns full message text (no truncation).
Read recent messages from a specific channel with FULL text (no truncation). Supports flexible channel name matching (case-insensitive, partial match, spaces/hyphens interchangeable). Returns thread info for each message.
List all channels you're a member of. Use slack_batch to fetch messages from multiple channels at once.
Read DM conversation with a specific person. Returns FULL message text (no truncation). Supports flexible name matching: full name ('Jen Rexford'), partial ('Jen', 'jrex'), username with/without @. If multiple matches, shows suggestions.
Search for messages across Slack. IMPORTANT: Search may not reliably find DM content (Slack API limitation). Use `slack_dm` to read DM conversations directly by person name.
Output schemas not documented. LLMs cannot predict response structure (fields, types, pagination). Breaks tool chaining, agent cannot extract channel_id from slack_summary to pass to slack_channel.
No tool annotations (readOnlyHint, idempotentHint). All tools are read-only but this is not declared in the Tool definition. Agents cannot distinguish safe-to-retry tools from destructive ones.
Parameter constraints missing. 'mode' in slack_summary accepts 'quick' or 'full' but no enum constraint, LLM may hallucinate 'medium' or 'fast'. 'hours' parameters unbounded, LLM could pass 999999. No min/max or pattern declarations.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 60 | 2026-07-28+ | v2 |
Get a summary of Slack activity with FULL message text (no truncation). Returns actual message content from DMs, mentions, and channels. Use 'quick' mode for 8 channels/DMs with 3-5 messages each, 'full' for 15 channels/DMs with 10+ messages each.
Read all messages in a specific thread with FULL text (no truncation). Use the 'ts' value from other tools to identify the thread.
Get unread messages from DMs and channels with FULL message text (no truncation). Returns complete message content, timestamps, thread info, and user names. Includes thread replies.
List all configured Slack workspaces
No error handling guidance. Descriptions do not explain what happens on failure (user not found, channel not found, API rate limit). No recovery hints for LLM.
Descriptions contain marketing language ('FULL message text (no truncation)' repeated 5 times) instead of actionable guidance. Missing WHEN to use each tool, slack_summary vs slack_unread distinction unclear to LLM.