8 tools with complete schemas and descriptions. Naming follows verb_noun convention (list_, get_, post_, add_, reply_). Descriptions are adequate (50-150 chars) but lack actionable context for LLM selection. Parameters are typed and mostly described, but lack constraints (enums, ranges, patterns). No output schemas documented. Error handling absent, no recovery guidance or categorization. Missing idempotency hints for write operations. Pagination support present but inconsistent (cursor vs offset). No tool annotations (readOnlyHint/destructiveHint). Composition is sound, tools are single-responsibility and chainable.
Add a reaction emoji to a message
Get recent messages from a channel
Get all replies in a message thread
Get detailed profile information for a specific user
Get a list of all users in the workspace with their basic profile information
List public channels in the workspace with pagination
No output schemas documented. LLMs cannot predict response structure, forcing them to guess at field names for downstream tool chaining. E.g., does slack_list_channels return 'channels' or 'items'? Does it include 'next_cursor' or 'pagination.cursor'?
Write operations (slack_post_message, slack_reply_to_thread, slack_add_reaction) lack destructiveHint annotations and error recovery guidance. No confirmation step or dry-run mode. Agents cannot distinguish safe retries from irreversible side effects.
Parameter descriptions lack constraints. 'limit' accepts any number but should be bounded (1-200). 'reaction' accepts any string but should validate emoji names. 'thread_ts' format is explained in prose but not enforced via regex pattern. LLMs will pass invalid values.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 56 | 2026-07-28+ | v2 |
Post a new message to a Slack channel
Reply to a specific message thread in Slack
No error handling or recovery guidance. If slack_post_message fails (invalid channel, permission denied, rate limited), the tool returns raw API error. LLM has no guidance on whether to retry, ask user, or try alternative channels.
Descriptions are generic and lack actionable context. 'Get detailed profile information for a specific user' does not explain when to call this vs slack_get_users, what fields are returned, or whether it requires special permissions. LLMs cannot optimize tool selection.