A portable Slack CLI and MCP server that provides tools for interacting with Slack workspaces, built via mcporter introspection of slack-mcp-server
This server has significant definition quality gaps across nearly all dimensions. While tool names follow verb_noun convention (channels-list, messages-post, etc.), descriptions are present but minimal (10 - 25 chars each), far below the 50 - 200 char baseline for A-grade tools. Input schemas are present for 4 of 6 tools but lack detail: parameters have type and basic description, but no enums, ranges, format constraints, or examples. Output schemas are entirely undocumented, the server does not specify what fields each tool returns, forcing LLMs to guess at response structure. Error handling is absent: no recovery guidance, no categorization, no actionable error messages. Critical omissions: no parameter validation docs (e.g., what format is 'thread_ts'?), no chaining IDs in responses (will make agent-chaining painful), no pagination guidance for list tools. The bundled source file (src/slack-cli-bundle.js) is compiled/minified, making it impossible to verify implementation quality or error handling logic.
List public channels in the Slack workspace
Read messages from a Slack channel
Post a message to a Slack channel
Search for messages across the Slack workspace
Add a reaction to a Slack message
Read messages from a thread in Slack
No output schemas documented. Tools do not specify what fields are returned (e.g., does channels-list return channel_id, channel_name, topic, etc.?). LLMs cannot plan downstream chaining without knowing what data is available.
Descriptions are all under 20 characters (e.g., 'List public channels in the Slack workspace' is minimal). Baseline for A-grade is 50 - 200 chars. Descriptions lack WHEN to use the tool, prerequisites, and side-effect warnings.
channels-list has NO input schema visible. A list tool should document pagination (limit, offset, next_cursor) and result limits.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 40 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 0 | - | v1 |
Parameter 'thread_ts' in threads-read lacks format constraint. Is it a Unix timestamp? ISO 8601? Slack's ts format (seconds.microseconds)? Description must specify exact format to avoid LLM guessing.
messages-post and reactions-add are write tools but lack dry-run or confirmation patterns. Agents can post messages or add reactions without explicit approval, increasing risk of unintended side effects.
No error handling guidance. No indication whether failures are retryable, user-fixable, or fatal. Blank error responses will leave LLMs unable to recover.
Parameters like 'channel' accept both ID and name (per description) but schema does not enforce constraint or give hint on format. LLMs will guess whether to pass 'C1234567' vs 'general'. Docs should say 'Channel ID (e.g., C1234567) or name (e.g., general).'
Source file is compiled/minified (src/slack-cli-bundle.js). Cannot verify implementation quality, error handling, or whether responses include necessary chaining IDs. Suggests testing and refinement may be incomplete.