Slack MCP server has 12 tools with complete input schemas and descriptions, but quality is inconsistent. All tools have descriptions (10-100 chars, mostly adequate), and schemas include type definitions and required fields. However, descriptions lack LLM-optimized guidance on WHEN to use each tool vs. alternatives, and parameter descriptions are minimal (5-30 chars). No output schemas documented. Error handling is absent, no recovery guidance, no actionable error messages. Risk annotations (READ_ONLY, WRITE, DESTRUCTIVE) are present but not formalized as tool annotations in the schema. Naming is clear and verb-driven (list_, get_, create_, send_, etc.), but some tools conflate concerns (send_message accepts both text and blocks; update_message and delete_message are separate but could benefit from composition guidance). No pagination support visible for list_channels despite potentially large result sets.
Archive a Slack channel.
Create a new Slack channel.
Delete a Slack message.
Get detailed information about a specific Slack channel.
Invite one or more users to a Slack channel.
Join a Slack channel.
Remove a user from a Slack channel.
No output schemas documented. LLMs cannot predict what fields are returned or plan downstream tool calls. E.g., does list_channels return channel_id, channel_name, topic, member_count? Unknown.
Parameter descriptions are minimal (5-30 chars). E.g., 'Channel ID to archive' lacks context on format (C1234567890?), whether it accepts names, or what happens to messages. LLMs cannot infer these details.
No error handling guidance. Tools do not document what errors are retryable, user-fixable, or fatal. E.g., if invite_to_channel fails because the user is already in the channel, should the agent retry or skip?
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 56 | 2026-07-28+ | v2 |
List all channels in the Slack workspace (public and private).
Send an ephemeral message visible only to a specific user.
Send a message to a Slack channel.
Set the topic for a Slack channel.
Update/edit an existing Slack message.
Tool annotations (readOnlyHint, destructiveHint, idempotentHint) are not formalized in schemas. Risk levels are noted in metadata but not exposed to the LLM via structured tool annotations.
send_message accepts both 'text' and 'blocks' parameters but does not document mutual exclusivity, precedence, or when to use each. LLMs may pass both, causing ambiguous behavior.