A minimal Slack MCP server that conforms to the Model Context Protocol spec
This server has TWO tools with acceptable naming (verb_noun pattern: list_channels, fetch_messages) and visible input schemas. Both tools have descriptions present. However, critical gaps emerge: (1) parameter descriptions are minimal and lack actionable constraints (e.g., 'ISO-8601 date string' without format spec or example); (2) NO output schema is documented anywhere, the LLM cannot know what fields to expect from list_channels or fetch_messages responses; (3) descriptions are brevity-focused but lack the 'WHEN to use' and 'WHAT to return' guidance that LLMs need for proper tool selection; (4) error handling is present in the CallToolRequestSchema handler but sanitized to a generic string ('Tool execution failed due to an internal error'), which provides NO recovery guidance to the LLM. The partial fetch_messages implementation shown (truncated mid-code) reveals internal data transformation (filtering bot messages, fetching user info, remapping Slack response fields) but this transformation logic is not declared as part of the tool contract, LLMs cannot plan for it. Per the rubric baseline (194 chars avg tool description, 72 chars avg param description), both tools fall short: list_channels description is 60 chars (acceptable low end); fetch_messages is 66 chars (acceptable low end); but parameters lack any description depth. Overall: definitions are PRESENT but INCOMPLETE. Serviceable for simple agents but insufficient for production autonomous reasoning.
Fetch messages from a channel since a specific date
List all public channels in the Slack workspace
No output schema documented for any tool. LLMs cannot infer what fields list_channels or fetch_messages return, forcing guessing and potential misuse of response data.
Parameter descriptions lack actionable constraints. 'ISO-8601 date string to fetch messages since' does not specify: required format (e.g., YYYY-MM-DD or RFC3339), timezone handling, valid range (past 7 days? past 1 year?), or examples. LLMs will pass malformed dates.
Error messages are sanitized to generic text ('Tool execution failed due to an internal error') with no recovery guidance. Use YYYY-MM-DD.' or 'Channel not found. Call list_channels() to see available channels.').
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 50 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 39 | - | v1 |
Tool descriptions are too brief and lack WHEN/WHY guidance. 'List all public channels in the Slack workspace' (60 chars) does not explain: when should the LLM call this vs. another channel discovery tool? Is this a prerequisite for fetch_messages? The rubric baseline (194 chars avg) suggests 2-3x more detail is needed.
fetch_messages filters out bot messages internally but does not document this behavior in the tool description. Agents cannot plan for this filtering, they may expect to retrieve bot-generated summaries or automation events but will silently receive none. Contract should state: 'Returns only messages from human users (bot messages excluded).'