A stdio Model Context Protocol server that exposes a minimal, read-only view of a Slack workspace: channel metadata, channel history, and thread replies, restricted to an explicit channel-ID allowlist.
Three read-only tools with complete JSON schemas, clear descriptions (120 - 180 chars), and proper parameter typing. All tools are verb-noun named (list, history, replies). Schemas include types, descriptions, and constraints (limit 1 - 100, pagination cursors). Error handling is present but generic. No destructive operations, reducing risk. Main gaps: parameter descriptions could be more prescriptive about format/constraints; output schemas not explicitly documented in code; no batch variants or composition guidance.
List metadata (name, privacy, membership, topic, purpose) for readable Slack channels: the allowlisted ones, or in wildcard mode the channels the bot belongs to. Never enumerates the workspace, never returns a non-member channel, and returns no message content.
Read a bounded page of recent messages from one allowlisted Slack channel. Supports cursor pagination and optional Slack ts bounds.
Read a bounded page of replies in one thread of an allowlisted Slack channel. Supports cursor pagination and optional Slack ts bounds.
Output schemas not documented in source code. While input schemas are complete (ChannelsListInput, etc.), return types (ChannelsListOutput, message objects) lack inline documentation of fields, types, and which IDs are included for chaining.
Parameter descriptions lack prescriptive format guidance. 'oldest' and 'latest' accept Slack ts format (e.g. 1699999999.123456) but description does not state this explicitly. LLMs may pass ISO 8601 or epoch milliseconds instead, causing silent failures.
No batch variants. Agents calling slack_channels_list repeatedly for multiple channel IDs must make sequential calls. A batch parameter accepting arrays would reduce token waste and latency.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 60 | 2025-06-18+ | v2 |
Error messages are generic. Code returns slackclient.NewError(CodePermissionDenied, 'channel is not in the read allowlist') but does not suggest alternatives or recovery steps. Per pattern:recovery-guide, errors should guide the LLM toward next actions.
No documentation of which fields are returned in message objects. slack_conversations_history and slack_conversations_replies return message arrays but the schema for individual messages (user, text, ts, thread_ts, etc.) is not visible in the provided code.