A Model Context Protocol server that exposes Slack operations as MCP tools by delegating each call to the slack-cli binary.
slack-mcp has well-structured tool definitions with consistent naming (verb_noun pattern), clear descriptions (avg 150 chars), and complete input schemas. All 9 tools are explicitly registered with types and descriptions. However, output schemas are not documented, LLMs cannot predict response structure for chaining. Error handling is present but generic ('failed to X'). No tool annotations (readOnlyHint/destructiveHint) despite clear risk levels. Parameter descriptions are solid but lack format constraints (e.g., workspace name validation rules, date format for start_from). Missing pagination guidance for search_messages and load_thread despite potentially large result sets.
Validate an xoxc- token and xoxd- cookie against auth.test, then save them for the workspace.
Open https://app.slack.com in the browser and return step-by-step instructions for extracting the xoxc- token and xoxd- cookie.
Remove stored credentials for a workspace.
Check whether credentials (token + cookie) exist for a workspace. Does NOT expose the raw token value.
Resolve a Slack user ID to a display name using users.info.
List all workspace names that have saved Slack credentials.
Output schemas not documented. LLMs cannot predict response structure (fields, types, pagination) for downstream tool chaining. search_messages and load_thread return lists but no documented limit, pagination cursor, or total count.
Tool annotations missing. Despite clear risk levels (READ_ONLY, WRITE, DESTRUCTIVE), no readOnlyHint/destructiveHint/idempotentHint annotations in tool definitions. Agents cannot distinguish safe vs unsafe operations without parsing descriptions.
Parameter format constraints missing. 'workspace' param lacks validation rules (allowed characters, length). 'start_from' accepts YYYY-MM-DD but no format constraint in schema. 'count' has default 20 and max 100 but no minItems/maxItems in schema.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 57 | <=2025-11-25 | v2 |
Load a Slack thread, resolve all user display names, and return a formatted markdown context block ready for AI consumption. Automatically paginates to fetch up to ~2000 messages. This is the primary tool for loading Slack conversation context.
Load all messages in a Slack thread using conversations.replies (with conversations.history fallback). Automatically paginates to fetch up to ~2000 messages. Returns raw user IDs; use load_slack_context for a fully resolved view.
Search Slack messages across all channels for the given query. Returns up to 'count' results with channel, author, snippet, timestamp and permalink.
Error messages generic and non-actionable. Tests show errors like 'failed to list workspaces' and 'failed to get credentials' without recovery guidance. No distinction between retryable (network) vs user-fixable (invalid workspace) vs fatal errors.
Pagination not addressed. search_messages and load_thread can return large result sets (~2000 messages for load_thread) but no documented pagination strategy, cursor, or offset. LLMs cannot fetch additional results without re-querying.