Tiger-Slack presents a solid foundation with 7 well-named, read-only tools backed by clear descriptions and proper parameter schemas. All tools follow verb_noun naming (getChannels, getConversationsInChannel, search) and descriptions are substantive (average ~100 chars). Parameter schemas are present with type declarations and descriptions for all parameters. However, critical gaps prevent a higher score: (1) Output schemas are NOT documented anywhere in the code provided, no TypeScript return types visible in tool definitions, no response field listings, no guidance on what fields the agent should expect; (2) No pagination support despite tools returning potentially large result sets (getChannels, getConversationsInChannel could return hundreds of items); (3) Error handling is not visible, no evidence of actionable error messages, recovery guidance, or invalid-input feedback; (4) Some descriptions lack specificity about use cases and prerequisite conditions. The codebase references `@tigerdata/mcp-boilerplate` which likely provides the HTTP transport layer, but tool-specific implementation details for error handling and response shaping are not visible in the provided source excerpts.
Retrieve all Slack channels from the database
Retrieve conversations (threads and messages) within a specific Slack channel
Retrieve direct message conversations with a specific Slack user
Retrieve context around a specific message including surrounding messages
Retrieve all messages in a Slack thread
Retrieve all Slack users from the database
Search Slack messages using hybrid search (BM25 and vector similarity)
Output schemas are completely undocumented. No visible TypeScript return types, field descriptions, or guidance on response structure for any of the 7 tools. LLMs cannot plan downstream tool calls or extract required fields without knowing what data is returned.
No pagination support visible for list-returning tools (getChannels, getUsers, getConversationsInChannel, search). Large result sets could exhaust context windows or cause timeouts. Tools should accept limit and offset/cursor parameters and return total_count or next_cursor.
Error handling strategy is not visible in provided code. No evidence of actionable error messages, retryable vs. fatal error classification, or recovery guidance. Error responses must tell the LLM what to do next (e.g., 'Channel not found. Available channels: #general, #random').
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-21 | C | 63 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 15 | - | v1 |
Some tool descriptions lack when/why guidance. For example, getMessageContext and getThreadMessages both retrieve messages but the distinction (surrounding context vs. thread-specific) could be clearer. 'When should the LLM call this instead of a similar tool?' is unanswered.
Channel and user parameters accept only system IDs (channelId, userId) with no support for human-friendly names. This forces agents to call discovery tools (getChannels, getUsers) first before using other tools, breaking the 'one call for common intents' principle. Consider accepting both names and IDs, resolving internally.