A strong MCP server for Slack that provides tools for sending messages, reading messages, managing reactions, and interacting with Slack channels and threads.
The Slack MCP server has 6 well-named tools with clear verb-noun patterns (slack_post_message, slack_read_thread_messages, etc.). Tool descriptions are present and reasonably detailed (averaging ~100-150 chars), which is acceptable but could be more LLM-optimized. Input schemas are fully defined with proper JSON Schema types and parameter descriptions. However, OUTPUT schemas are not documented, critical omission for downstream tool chaining. Error handling guidance is minimal. Security considerations around rate limiting and input validation are not visible in the provided code. The server follows fastmcp framework conventions and tool annotations are declared, which is positive. Average of per-tool scores: 68.
Add emoji reactions to a message in a Slack channel.
Send a textual message to a Slack channel.
Read messages from the given Slack channel.
List all emojis available in the Slack workspace.
Read messages from a specific thread in a given Slack channel.
Send a textual message to a specific thread in a Slack channel.
OUTPUT SCHEMAS NOT DOCUMENTED, Critical for tool chaining. Every tool must document what it returns (field names, types, structure). Currently, consumers cannot know if slack_post_message returns {message_ts, channel_id, user_id} or some other shape, forcing discovery or trial-and-error.
ERROR HANDLING AND RECOVERY GUIDANCE MISSING, LLMs have no guidance on what to do when a call fails. E.g., if slack_read_channel_messages('invalid-channel') fails, should the agent retry, search for the channel, or ask the user? No guidance.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | B | 71 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 36 | - | v1 |
PAGINATION AND RESULT LIMITS NOT FULLY SPECIFIED, slack_read_channel_messages accepts a limit param (default 100, max 1000) and supports time-range filtering, but no documentation of pagination strategy (offset vs cursor), total count return value, or guidance on when to use time-range vs repeated limit calls. slack_read_emojis has no pagination despite potentially returning thousands of items.
PARAMETER RELATIONSHIPS UNDOCUMENTED, slack_read_channel_messages has interdependent params (oldest, latest, inclusive) but no note on valid combinations or boundary conditions. E.g., what if oldest > latest? What does inclusive=true mean exactly when both oldest and latest are provided vs just one?
HUMAN-FRIENDLY IDENTIFIERS NOT FULLY SUPPORTED, Tools accept 'channel ID (e.g., C12345678) or name with #', which is good, but no documentation of resolution logic. E.g., if user says 'post to #general' and multiple workspaces have #general, what happens? Ambiguity invites agent errors.
IDEMPOTENCY NOT DECLARED, None of the tools explicitly document idempotency. E.g., if slack_post_message is called twice with the same params, does it create two messages or return the existing one? Agents need this to know whether retries are safe.