MCP server providing Slack and weather integration tools
Server has 5 tools with basic schemas and descriptions, but significant gaps limit production readiness. Tool names follow verb_noun convention (good), but descriptions are minimal (avg ~50 chars, well below 194-char baseline). Parameters lack type specificity and validation guidance. No output schemas documented. Error handling returns plain strings without recovery guidance. Slack tools mix domain concerns (list_channels, send_message, get_messages) without clear composition. Weather tools are unrelated to Slack domain, suggesting scope creep. No tool annotations (readOnlyHint/destructiveHint). Secrets (bot_token) are passed as parameters rather than injected server-side.
Get recent messages from a Slack channel.
List all channels in the Slack workspace.
Send a message to a Slack channel.
Get weather alerts for a US state.
Get weather forecast for a location.
Secrets exposed as tool parameters: bot_token passed to every Slack tool. Must use server-side secret injection via environment variables or vault. Agent traces log all parameters, secrets leak into logs and prompt history.
Descriptions too short and lack LLM-optimized context. 'List all channels in the Slack workspace' (50 chars) does not explain WHEN to use this vs other discovery tools, what structure is returned, or prerequisites. Baseline is 194 chars; descriptions should be 50-200 chars with WHAT/WHEN/RETURN guidance.
No output schemas documented. Tools return free-text strings (e.g. 'Message sent successfully', formatted channel lists). LLMs cannot parse unstructured output reliably or plan downstream calls. Must document return types with typed fields.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 45 | <=2025-11-25 | v2 |
Error handling returns plain strings without recovery guidance. 'Failed to list channels: <error>' tells LLM nothing about whether to retry, ask user, or try alternative tools. Must categorize errors and provide actionable next steps.
Destructive tool (slack_send_message) lacks confirmation or dry-run support. Agents make mistakes, no safeguard prevents accidental message sends. Should support confirm_before_execute pattern or require explicit approval.