Multi-service MCP server providing search/scrape and Slack integration capabilities
Three tools with significant definition gaps. search_and_summarize has a basic description but no parameter descriptions. send_message_endpoint lacks channel_id parameter visibility and has incomplete schema. get_messages_endpoint has better structure but all three tools lack error handling guidance, output schema documentation, and LLM-optimized descriptions. Tool names are verb-based but descriptions are generic (10-50 chars, well below 50-200 char baseline for A+ tools). No tool annotations (readOnlyHint/destructiveHint). Parameter descriptions missing entirely for most inputs.
API endpoint to retrieve the latest messages from a specified Slack channel.
Accepts a search query, performs a Tavily search, summarizes the results using an LLM, and returns the summary.
API endpoint to send a message to a specified Slack channel. Defaults to DEFAULT_CHANNEL_ID if channel_id is not provided.
send_message_endpoint has no visible channel_id parameter in schema, yet description mentions 'specified Slack channel' and code uses DEFAULT_CHANNEL_ID. Schema shows only message_text; channel selection logic is opaque to LLM.
No parameter descriptions for any tool inputs. 'query' in search_and_summarize, 'message_text' in send_message_endpoint, 'channel_id' and 'limit' in get_messages_endpoint lack guidance on format, constraints, or examples.
No output schema documentation. search_and_summarize returns SearchResponse with 'summary' field, but LLM cannot see this structure. send_message_endpoint returns dict with 'ok', 'channel', 'ts', undocumented. get_messages_endpoint returns List[Dict] with no field definitions.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 44 | 2026-07-28+ | v2 |
Tool descriptions are too short (10-50 chars vs 50-200 baseline). search_and_summarize: 'Accepts a search query...' (67 chars) is generic. send_message_endpoint: 'API endpoint to send...' (80 chars) lacks WHEN/WHY context. No guidance on when to use each tool vs alternatives.
No error handling guidance. Code catches exceptions and returns generic errors (e.g. 'error: str(e)' in search_and_summarize, HTTPException in Slack tools). LLM receives no recovery hints, should it retry, ask user, or abort?