TypeScript stdio MCP server and CLI for Slack Socket Mode apps.
Server has 8 well-named tools with consistent verb_noun patterns (slack_get_*, slack_list_*, slack_search_*). All tools have descriptions (avg ~120 chars, within baseline 34-392). Input schemas are present and use Zod validation with proper types. However, parameter descriptions are sparse or missing in several tools (e.g., slack_list_channels 'filters' param lacks description; slack_search_messages 'query' param description is minimal). Output schemas are not documented, LLMs cannot predict response structure. Error handling is absent from visible code. No tool annotations (readOnlyHint, destructiveHint). All tools are READ_ONLY per risk field, but this is not declared in schema.
Get details for a Slack public channel, private channel, DM, or MPIM by ID.
Fetch messages from a Slack conversation with optional pagination and time bounds.
List users that belong to a Slack public channel, private channel, or multi-person DM.
Return the current identity details for the connected Slack bot or user session.
Return the current Socket Mode connection status for this Slack app session.
List Slack conversations with optional type, sort, and pagination filters.
Output schemas not documented. LLMs cannot predict response structure (fields, types, pagination format). Breaks downstream tool chaining and forces agents to guess field names.
Parameter descriptions missing or incomplete. 'filters' object in slack_list_channels and slack_list_users lacks top-level description. 'query' in slack_search_messages is minimal ('Optional free-text search query or Slack message URL'). LLMs cannot infer when to use optional params.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). All tools are READ_ONLY per risk field, but this is not declared in schema. Agents cannot distinguish safe tools from destructive ones without explicit hints.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | B | 70 | 2026-07-28+ | v2 |
List Slack users with optional pagination filters.
Search Slack messages using a free-text query plus optional channel, user, date, and thread filters. This tool requires a user token rather than a bot token.
No error handling guidance in visible code. Tools return raw API responses without recovery hints. If a channel is not found or token is invalid, LLMs receive no actionable next steps.
Pagination cursors returned but not documented. slack_list_channels, slack_list_users, slack_search_messages, slack_get_channel_history accept 'cursor' param but response structure (next_cursor, has_more) is not documented. Agents cannot reliably iterate.