mcp-slack-crunchtools
Provides read-only access to a Slack workspace, allowing listing channels and members, reading channel history and thread replies, searching messages, retrieving reactions, stars, user profiles, and file metadata without any write permissions.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@mcp-slack-crunchtoolswhat are the latest messages in #general?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
mcp-slack-crunchtools
Secure read-only MCP server for Slack workspaces. Provides Claude Code (and other MCP clients) with access to your Slack channels, messages, users, and files without any write permissions.
Features
Read-only: 15 tools, all read-only. Never posts, edits, or deletes anything.
Secure: 6-layer security model (input validation, token handling, client hardening, output sanitization, runtime protection, supply chain security).
User OAuth Token: Uses
xoxp-tokens for user-scoped access to your workspace.No SDK dependency: Uses
httpxdirectly for minimal, auditable HTTP calls.
Related MCP server: Slack MCP Server
Quick Start
Using uvx (Recommended)
claude mcp add mcp-slack-crunchtools \
--env SLACK_USER_TOKEN=xoxp-your-token \
-- uvx mcp-slack-crunchtoolsUsing Container
claude mcp add mcp-slack-crunchtools \
--env SLACK_USER_TOKEN=xoxp-your-token \
-- podman run -i --rm -e SLACK_USER_TOKEN quay.io/crunchtools/mcp-slackLocal Development
claude mcp add mcp-slack-crunchtools \
--env SLACK_USER_TOKEN=xoxp-your-token \
-- uv run mcp-slack-crunchtoolsSetup
See CLAUDE.md for detailed instructions on creating a Slack app and obtaining a User OAuth Token.
Configuration
Authentication uses one of two mutually exclusive modes. The server picks cookie mode when both cookie variables are set, and token mode otherwise.
Variable | Required | Default | Description |
| token mode | — | User OAuth token ( |
| cookie mode | — | Browser session token ( |
| cookie mode | — | Value of the |
| no |
| How far ahead outgoing messages are scheduled, giving you a window to cancel one. Duration string: |
Which auth mode to use
Cookie mode is the working path for this deployment. Token mode requires a Slack app to be created and approved in the workspace; where that approval is not available, cookie mode is the only way to authenticate at all.
Cookie mode borrows an existing browser session rather than holding a credential issued to an application. That has consequences worth stating plainly:
Both values are live session credentials. Anything holding them can act as you in Slack, with your full access. Treat them exactly as you would your password.
They expire when the browser session does, so cookie mode needs periodic re-extraction. A sudden wave of auth failures usually means the session rotated, not that the server broke.
Slack does not issue these for programmatic use and can invalidate them at any time. Cookie mode is a workaround for the absence of an approved app, not a supported integration path.
Prefer SLACK_USER_TOKEN whenever a Slack app can actually be installed.
Tools
Tool | Description |
| Test connection and get token owner info |
| List workspace channels |
| Get channel details |
| Read channel messages |
| Read thread replies |
| List channel members |
| Search messages |
| Get message reactions |
| List user's reactions |
| List starred items |
| Get user details |
| List workspace members |
| Get user profile |
| List files (metadata only) |
| Get file metadata |
Security
See SECURITY.md for the full security design document.
License
AGPL-3.0-or-later
Available Tools
17 toolsslack_auth_testA
Test Slack authentication and get info about the token owner.
Returns the authenticated user's ID, team ID, team name, username, and workspace URL. Use this to verify the connection is working.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states what the tool returns and implies it is a safe check, but it does not explicitly mention that it makes no modifications, how it handles invalid tokens, or whether specific scopes are required. This is acceptable for a simple auth test but leaves some gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long, front-loads the core purpose, and lists the return fields in a clear second sentence. Every sentence earns its place with no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no parameters, a low-complexity operation, and an output schema that likely details the returned fields, the description is sufficiently complete. An agent can determine when to call it and what to expect without needing further context or caveats.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the schema provides no parameter details to document. The description appropriately explains what the tool does without needing to add parameter-level semantics, matching the baseline for parameterless tools.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Test Slack authentication') and identifies the resource (token owner), then enumerates the returned fields. This clearly distinguishes it from sibling tools like slack_get_user_info, which focus on retrieving user data rather than verifying auth connectivity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use this tool: 'Use this to verify the connection is working.' It does not mention when not to use it or name alternative tools, but the context is clear enough for an agent to select it appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
slack_cancel_scheduled_messageA
Cancel a scheduled Slack message before it sends.
Args: channel_id: Channel ID the message was scheduled in scheduled_message_id: The scheduled_message_id returned by slack_send_message
Returns: Confirmation with scheduled_message_id
| Name | Required | Description | Default |
|---|---|---|---|
| channel_id | Yes | ||
| scheduled_message_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden; it does disclose the core behavior, the timing constraint ('before it sends'), and the confirmation-shaped return. However, it does not mention permissions/scope requirements, error behavior for already-sent messages, or whether cancellation is irreversible.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the one-sentence purpose, followed by a clear Args/Returns structure. Every line adds information and there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter cancellation tool, the description covers the core invocation details, lifecycle origin, and return value; an output schema exists to fill in return structure. It leaves out only edge-case behavior such as already-sent messages or required Slack scopes, which keeps it from a 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does: it identifies channel_id as the channel where the message was scheduled and explains that scheduled_message_id comes from slack_send_message. This is meaningful guidance beyond the bare string names in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Cancel a scheduled Slack message before it sends.' It clearly identifies the tool as the cancellation counterpart to slack_send_message and is not confusable with any sibling tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear context: use this to cancel a scheduled message before it sends, and it anchors the scheduled_message_id to a value 'returned by slack_send_message.' It does not explicitly list when-not-to-use alternatives, but no true alternative exists among the siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
slack_get_channel_historyA
Get message history from a Slack channel.
Args: channel_id: Channel ID (starts with C, D, or G) limit: Max messages to return, 1-1000 (default: 100) cursor: Pagination cursor from previous response oldest: Only messages after this timestamp (e.g., 1234567890.123456) latest: Only messages before this timestamp inclusive: Include messages at oldest/latest boundary
Returns: List of messages with pagination metadata
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| cursor | No | ||
| latest | No | ||
| oldest | No | ||
| inclusive | No | ||
| channel_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry behavioral disclosure. It states the return format ('List of messages with pagination metadata') and explains pagination via cursor, but does not mention error handling, rate limits, or authentication requirements. It is adequate but not exhaustive for a read-only tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with an Args/Returns format. It front-loads the purpose, then lists each parameter concisely, and ends with the return value. No wasted words; every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the six parameters and the presence of an output schema (which covers return details), the description covers all input semantics and pagination. It omits error scenarios but is otherwise complete for a simple read operation. Slight gap on potential failure modes.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 0%, so the description compensates fully. It explains every parameter: channel_id type, limit range/default, cursor for pagination, oldest/latest timestamp usage, and inclusive boundary behavior. This adds substantial meaning beyond the raw schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb and resource: 'Get message history from a Slack channel.' It differentiates from siblings like slack_search_messages (search) and slack_get_thread_replies (replies) by focusing on raw channel history. The channel_id types (C, D, G) add specificity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly implies usage for retrieving message history, but does not explicitly mention when not to use it or name alternatives. It provides clear context without exclusions, which matches the 'clear context, no exclusions' level.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
slack_get_channel_infoB
Get detailed information about a Slack channel.
Args: channel_id: Channel ID (starts with C, D, or G)
Returns: Channel details including name, topic, purpose, member count
| Name | Required | Description | Default |
|---|---|---|---|
| channel_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It states 'Get detailed information' which implies a read-only operation, but it does not explicitly mention that it is non-destructive, requires authentication, or what happens on errors (e.g., invalid channel_id). For a simple get, this is somewhat acceptable, but the description adds no context beyond the obvious and does not disclose potential caveats like rate limits or response size.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise with no unnecessary words. It is well-structured with an 'Args' and 'Returns' format, making it easy to scan. Every sentence serves a purpose: the first line defines the action, the Args line clarifies the parameter, and the Returns line outlines the output. No fluff or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple with a single required parameter and an output schema is present. The description covers the parameter format and a preview of the return fields. It does not explain error handling or authentication requirements, but these are common expectations for Slack API calls. Given the simplicity and presence of an output schema, the description is sufficiently complete for an agent to invoke it correctly, though a note on required scopes would elevate it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema only defines 'channel_id' as a string with no further description, so schema coverage is 0%. The description compensates by explaining the expected format: 'Channel ID (starts with C, D, or G)' and also previews the return content ('name, topic, purpose, member count'). This adds meaningful semantics beyond the raw schema, giving an agent clear guidance on how to supply the parameter and what to expect.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action: 'Get detailed information about a Slack channel.' It specifies the resource (a Slack channel) and the result (detailed information). It is distinct from sibling tools like listing channels or history, though it does not explicitly differentiate itself. The name and description together make the purpose unambiguous, but there is no explicit contrast with alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It does not mention any conditions, prerequisites, or exclusions. There is no reference to sibling tools or scenarios where another tool would be more appropriate. An agent is left to infer usage solely from the tool name and basic action.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
slack_get_file_infoA
Get metadata about a Slack file (no content download).
Args: file_id: File ID (starts with F) count: Number of comments per page (default: 100) page: Page of comments (default: 1)
Returns: File metadata, comments, and pagination info
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| count | No | ||
| file_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It adds the important fact that no content is downloaded and states that the return includes metadata, comments, and pagination info, but it omits error behavior, permissions, and rate limits. This is adequate but not extensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well structured: a one-sentence purpose, a short Args block, and a Returns line. There is no filler, and every sentence contributes information an agent needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple metadata endpoint with an output schema available, the description covers the core semantics: what it does, what the parameters mean, and what it returns. It is not fully complete because it omits usage/alternative guidance and any mention of prerequisites, but those are minor given the schema and output schema context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must explain the parameters itself, and it does: it defines file_id format ('starts with F'), count as comments per page, and page as page of comments. This adds real meaning beyond the bare schema, though defaults are left to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Get metadata about a Slack file (no content download)', which names a specific verb, resource, and a key exclusion. This clearly distinguishes it from sibling file-related tools like slack_list_files and slack_search_messages.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool over alternatives such as slack_list_files or slack_search_messages. The parenthetical 'no content download' is a behavioral note, not an explicit when-to-use/when-not-to-use rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
slack_get_reactionsB
Get reactions for a specific Slack message.
Args: channel_id: Channel ID (starts with C, D, or G) timestamp: Message timestamp (e.g., 1234567890.123456) full: If true, return complete reaction list for each emoji
Returns: Message with its reactions
| Name | Required | Description | Default |
|---|---|---|---|
| full | No | ||
| timestamp | Yes | ||
| channel_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It does explain the effect of the 'full' parameter (return complete reaction list vs. presumably aggregated counts) and states the return type ('Message with its reactions'). However, it omits details such as error handling, rate limits, or what happens when the message has no reactions. The description adds some behavioral context but lacks completeness.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured. The one-line purpose is front-loaded, followed by a clear parameter list and a returns line. There is no redundant or verbose content. The structure makes it easy to scan, and every sentence serves a purpose. It is appropriately sized for a simple tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity and the presence of an output schema (though not shown), the description covers the main aspects: what it does, its parameters, and the return type. However, it lacks contextual differentiation from the sibling tool slack_list_reactions, which could lead to incorrect tool selection. It also does not mention any edge cases or preconditions. For a straightforward read operation, this is adequate but not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It does explain all three parameters: channel_id (with valid prefixes), timestamp (with an example), and full (with its effect). This adds meaningful meaning beyond the bare schema, which only lists types and defaults. The explanation of 'full' is particularly useful. The parameter descriptions are concise and helpful, though not exhaustive (e.g., no mention of validation rules or default behavior when full is false).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action and resource: 'Get reactions for a specific Slack message.' It specifies the verb 'Get' and the resource (reactions for a message), which is distinct enough. However, it does not explicitly differentiate from the sibling tool slack_list_reactions, which could cause confusion. The purpose is clear but lacks explicit sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It does not mention that it is for a specific message as opposed to slack_list_reactions (which might be for a user's reactions). There is no mention of prerequisites, exclusions, or conditions for choosing this tool. This leaves the agent to infer usage context, which is a significant gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
slack_get_thread_repliesA
Get replies in a Slack message thread.
Args: channel_id: Channel ID (starts with C, D, or G) thread_ts: Timestamp of the parent message limit: Max replies to return, 1-1000 (default: 100) cursor: Pagination cursor from previous response oldest: Only replies after this timestamp latest: Only replies before this timestamp inclusive: Include messages at oldest/latest boundary
Returns: List of thread messages with pagination metadata
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| cursor | No | ||
| latest | No | ||
| oldest | No | ||
| inclusive | No | ||
| thread_ts | Yes | ||
| channel_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations supplied, the description carries the full burden of behavioral disclosure. It communicates a read-only 'Get' operation and describes pagination metadata and timestamp-filter behavior, but it does not mention authentication requirements, rate limits, error behavior, or side-effect caveats.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with a one-sentence purpose, followed by a tight Args block and a Returns line. There is no filler, and every line adds information not already obvious from the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter tool with an output schema, the description documents all parameters and the return shape including pagination metadata. It lacks broader invocation context such as error cases or prerequisites, but it is functionally complete enough for an agent to select and call the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description compensates fully. Every parameter receives plain-language meaning: channel_id prefix, thread_ts as parent timestamp, limit range and default, cursor provenance, oldest/latest semantics, and inclusive boundary behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource: 'Get replies in a Slack message thread.' It clearly identifies the tool's object (thread replies) and distinguishes it from channel history or search by naming the thread-specific resource, but it does not explicitly differentiate it from sibling tools in text.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The purpose statement and required thread_ts parameter imply the use case: fetch replies to a specific parent message. However, the description does not explicitly state when to prefer this tool over alternatives like slack_get_channel_history or slack_search_messages, nor does it provide any exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
slack_get_user_infoA
Get information about a Slack user.
Args: user_id: User ID (starts with U, W, or B)
Returns: User details including name, email, status, timezone
| Name | Required | Description | Default |
|---|---|---|---|
| user_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. The verb 'Get' implies a read-only operation and the Returns section indicates what kind of data to expect, but the description does not mention error behavior, permission requirements, or other call traits. This is adequate but minimal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured with a short summary followed by Args and Returns sections. Every line provides useful information, and the parameter format detail is included without unnecessary verbosity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter lookup tool with an output schema, the description covers the key information an agent needs: what the tool does, what its parameter is, and what kind of data it returns. It is slightly incomplete on usage distinctions and behavioral caveats, but the simple scope makes it mostly self-sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema only declares `user_id` as a string with no description, giving 0% schema coverage. The description compensates by explaining the expected format ('starts with U, W, or B'), which adds meaningful guidance beyond the schema for this single parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Get information') and resource ('a Slack user'), and it lists concrete return fields like name, email, status, and timezone. However, it does not distinguish this tool from the closely related sibling `slack_get_user_profile`, which likely overlaps in purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus alternatives such as `slack_get_user_profile` or `slack_list_users`. There are no explicit conditions, exclusions, or references to sibling tools, so an agent must infer the appropriate context from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
slack_get_user_profileB
Get a Slack user's profile information.
Args: user_id: User ID (starts with U, W, or B) include_labels: Include custom profile field labels
Returns: User profile with display name, status, image URLs, custom fields
| Name | Required | Description | Default |
|---|---|---|---|
| user_id | Yes | ||
| include_labels | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full behavioral disclosure. It does mention the returned fields (display name, status, image URLs, custom fields), but it doesn't state whether the operation is read-only, any permission requirements, error behavior, or side effects. This is minimal transparency for a tool with no annotation support.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured with an Args/Returns layout. The main purpose is front-loaded in the first sentence, and the parameter details are organized without unnecessary verbosity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple (2 params) and has an output schema, which covers return structure. However, the description omits potential error conditions, prerequisites (e.g., valid Slack token), or usage context relative to other profile-related tools. For a basic get operation, it's mostly adequate but could be more complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate. It provides meaningful explanations for both parameters: user_id includes the expected format ('starts with U, W, or B') and include_labels clarifies its purpose. This goes beyond the bare schema and helps the agent invoke correctly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get a Slack user's profile information'), clearly identifying the tool's function. It doesn't differentiate from the sibling slack_get_user_info, which could be confusing, but the name and description are not tautological.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives like slack_get_user_info. The description simply states what it does without any conditions, exclusions, or mention of alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
slack_list_channel_membersA
List members of a Slack channel.
Args: channel_id: Channel ID (starts with C, D, or G) limit: Max members to return, 1-1000 (default: 200) cursor: Pagination cursor from previous response
Returns: List of member user IDs with pagination metadata
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| cursor | No | ||
| channel_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the transparency burden. It adds useful behavioral details: pagination via cursor, limit range/default, and that channel_id may start with C, D, or G. It does not mention rate limits or auth requirements, but for a straightforward read/list operation this is acceptable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well organized with a one-line purpose followed by concise Args and Returns sections. Every sentence is informative, and there is no redundant or vague text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers all parameters, return shape, and pagination behavior. Given the simple scope, this is nearly complete; the only gap is explicit guidance about when to choose this tool over sibling list tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description fully compensates by explaining the meaning of each parameter, including channel_id prefix formats, limit range and default, and cursor's role in pagination. This adds significant value beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'List members of a Slack channel.' It clearly identifies the primary input (channel_id) and the return value (member user IDs), making it distinguishable from siblings like slack_list_channels and slack_list_users.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage through the channel_id parameter and the list-members behavior, but it does not explicitly state when to prefer this tool over alternates such as slack_list_users or slack_list_channels. No direct when/when-not guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
slack_list_channelsA
List channels in the Slack workspace.
Args: types: Comma-separated channel types: public_channel, private_channel, mpim, im exclude_archived: Exclude archived channels (default: true) limit: Max results per page, 1-1000 (default: 200) cursor: Pagination cursor from previous response
Returns: List of channels with pagination metadata
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| types | No | public_channel,private_channel | |
| cursor | No | ||
| exclude_archived | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavior. It states that it returns a list of channels with pagination metadata and explains the cursor parameter for pagination. This goes beyond the schema by describing the return structure. It does not mention rate limits, authentication, or any side effects, but as a read-only listing tool, the disclosure is adequate. A 4 reflects that it adds meaningful behavioral context beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, well-structured with 'Args' and 'Returns' sections. Each parameter is listed with its meaning and default, and the return type is stated. There is no fluff; every sentence adds value. It is front-loaded with the main action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (pagination, multiple parameters), the description is complete. It covers all parameters, defaults, and return format. The presence of an output schema further reduces the need to describe return values in detail. There is nothing an agent needs to call it correctly that is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It explains all four parameters: types (comma-separated channel types), exclude_archived (default true), limit (range 1-1000, default 200), and cursor (pagination cursor). This adds significant meaning beyond the bare schema, including defaults, ranges, and formats. This is exemplary parameter documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description begins with 'List channels in the Slack workspace,' which is a specific verb-resource pair. It clearly distinguishes from sibling tools like slack_list_channel_members (which lists members of a channel) and slack_get_channel_info (which gets details of one channel). The purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage: it lists channels, and the parameters allow filtering by type and archived status. However, it does not explicitly state when to use this versus alternatives like slack_search_messages. The context is clear, but no exclusions or alternative tool mentions are provided. A 4 is appropriate because the intended usage is evident without being explicitly contrasted.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
slack_list_filesA
List files in the Slack workspace (metadata only, no content download).
Args: channel_id: Filter by channel ID user_id: Filter by uploader's user ID types: Filter by types (comma-separated: spaces, snippets, images, gdocs, zips, pdfs, all) count: Results per page, 1-100 (default: 100) page: Page number (default: 1) ts_from: Filter files created after this Unix timestamp ts_to: Filter files created before this Unix timestamp
Returns: File metadata list with pagination info
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| count | No | ||
| ts_to | No | ||
| types | No | ||
| ts_from | No | ||
| user_id | No | ||
| channel_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It explicitly discloses that this is a metadata-only operation, that no content is downloaded, and that the response contains file metadata plus pagination info. It does not mention auth scopes or rate limits, but for a read-only listing tool this is a minor omission rather than a serious gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a compact, well-structured docstring with a front-loaded summary, an Args section, and a Returns section. Every line adds meaningful information, and no filler or repetition exists.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with seven optional parameters, no annotations, and zero schema-level descriptions, the description covers every parameter and the return shape. The output schema exists and can carry detailed return-value structure, so the description's concise 'File metadata list with pagination info' is sufficient for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description is the only source of parameter meaning. It explains all seven parameters: channel_id, user_id, types, count, page, ts_from, and ts_to, including valid values and defaults. This fully compensates for the empty schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'List files in the Slack workspace.' It also adds a meaningful scope qualifier, 'metadata only, no content download,' which distinguishes this from content-retrieval or single-file tools like slack_get_file_info.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The intended use case is clear from 'List files' and the filter arguments, but the description never explicitly contrasts this tool with siblings such as slack_get_file_info or slack_search_messages. Usage is implied rather than explicitly directed, so an agent is left to infer when this is the right choice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
slack_list_reactionsA
List reactions made by a user.
Args: user_id: User ID to list reactions for (default: authenticated user) count: Results per page, 1-100 (default: 100) page: Page number (default: 1) full: If true, return complete reaction list
Returns: Reaction items with pagination info
| Name | Required | Description | Default |
|---|---|---|---|
| full | No | ||
| page | No | ||
| count | No | ||
| user_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses pagination behavior (count/page) and the 'full' flag to return complete reaction list, and states that it returns reaction items with pagination info. However, with no annotations, it does not explicitly confirm read-only nature or mention permissions/rate limits, leaving some behavioral gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and well-structured: a one-line purpose, parameter details, and returns. No fluff, and the key information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list operation with all optional parameters, the description covers parameters and return info, and an output schema exists so return structure need not be detailed. It lacks mention of error conditions or authentication, but these are minor for this tool type.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 0% description coverage, so the description compensates by explaining each parameter: user_id, count, page, and full, including defaults and the effect of full. This adds meaning beyond the raw schema, though 'complete reaction list' could be more explicit about pagination behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description states 'List reactions made by a user' — a clear verb, resource, and scope. This distinguishes it from sibling tools like slack_get_reactions (likely message-specific) and slack_list_stars, though it does not explicitly name alternatives, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives. It does not mention context, exclusions, or selection criteria relative to slack_get_reactions or other siblings, leaving the agent to infer appropriate usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
slack_list_starsA
List starred items for the authenticated user.
Args: count: Results per page, 1-100 (default: 100) page: Page number (default: 1) cursor: Pagination cursor from previous response
Returns: Starred items with pagination info
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| count | No | ||
| cursor | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It does disclose the read-only nature via 'List', the user scoping, and pagination behavior through the parameter explanations and the return statement. However, it does not mention authentication requirements, error behavior, or how pagination modes interact, leaving some behavior implicit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the main purpose, followed by a clear Args/Returns structure. Every sentence adds information, with no tautology or redundant filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the main action, parameters, and return concept, and an output schema exists for detailed return fields. However, it does not clarify whether cursor and page/count are mutually exclusive, how they interact, or what happens if both are provided. This ambiguity could lead an agent to pass conflicting pagination arguments.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has zero parameter descriptions, so the description fully compensates by explaining each parameter meaningfully: count's range and default, page's purpose, and cursor's role as a continuation token. This goes well beyond the bare type/default information in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'List starred items for the authenticated user.' This clearly distinguishes the tool from siblings like slack_list_reactions, slack_list_files, or slack_list_channels by identifying the unique 'stars' resource and user scoping.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when to use this tool versus alternatives such as slack_search_messages, slack_list_reactions, or slack_list_files. The description gives no exclusions, prerequisites, or contextual cues beyond the core listing action.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
slack_list_usersA
List users in the Slack workspace.
Args: limit: Max users to return, 1-1000 (default: 200) cursor: Pagination cursor from previous response
Returns: List of workspace members with pagination metadata
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| cursor | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the burden. It does disclose pagination behavior via limit and cursor and states that the result is a member list with pagination metadata. It does not mention auth requirements, rate limits, or whether deactivated members are included, but these are moderate omissions for a simple read-only list tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well organized with a one-sentence purpose followed by Args and Returns sections. Every line adds useful information and there is no redundant prose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a low-complexity paginated list tool, the description covers both parameters and the return shape. An output schema exists, so the return values need not be detailed beyond what is given. It falls slightly short only by omitting explicit guidance on how to keep paging with the cursor and any membership inclusion caveats.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, and the description compensates fully: it documents the 1-1000 limit range, the default of 200, and cursor as 'Pagination cursor from previous response'. Without this text, the schema only reveals bare types and defaults.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'List users in the Slack workspace', which is a specific verb plus a clearly bounded resource. The workspace scope differentiates it from sibling tools like slack_list_channel_members that target channel-scoped memberships.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given about when to use this tool instead of alternatives such as slack_get_user_info for a single user or slack_list_channel_members for channel members. The intended use is only implied by the tool name and summary.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
slack_search_messagesA
Search messages in the Slack workspace.
Supports Slack search modifiers: from:user, in:channel, has:link, before:date, after:date, during:month.
Args: query: Search query string sort: Sort by "timestamp" or "score" (default: timestamp) sort_dir: Sort direction "asc" or "desc" (default: desc) count: Results per page, 1-100 (default: 20) page: Page number (default: 1)
Returns: Matching messages with total count and pagination info
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| sort | No | timestamp | |
| count | No | ||
| query | Yes | ||
| sort_dir | No | desc |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It discloses search modifiers, sort options, and return pagination info, but it does not explicitly state read-only behavior, authentication needs, or rate limits. This is adequate but not complete transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with purpose, modifiers, an Args block, and a Returns note. No filler is present; every line earns its place and the most important usage info is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers all parameters, defaults, and return shape, and an output schema exists to detail return values further. It lacks explicit usage guidance versus siblings and deeper behavioral context, but for a search tool with this schema, it is nearly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description fully compensates by explaining every parameter: query, sort with allowed values, sort_dir with asc/desc, count range (1-100), and page default. This adds significant meaning beyond the raw schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Search messages in the Slack workspace.' It clearly distinguishes from siblings like get_channel_history or get_thread_replies by emphasizing search across the workspace with Slack query modifiers.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when a message search is needed, and lists supported modifiers, but it does not explicitly contrast with alternatives or state when not to use this tool. No exclusion criteria or sibling references are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
slack_send_messageA
Send or schedule a Slack message.
When SLACK_ADD_MESSAGE_DELAY is set (default: 3m), the message is scheduled via chat.scheduleMessage, giving a cancellation window before delivery. Use slack_cancel_scheduled_message with the returned scheduled_message_id to cancel. Set SLACK_ADD_MESSAGE_DELAY=0 to post immediately.
Args: channel_id: Channel ID (starts with C, D, or G) text: Message text (Markdown supported) thread_ts: Parent message timestamp to reply in-thread
Returns: scheduled_message_id + post_at (if scheduled) or ts (if immediate)
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | ||
| thread_ts | No | ||
| channel_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden, and it excels: it discloses the default 3-minute scheduling delay, the cancellation window, the ability to post immediately with SLACK_ADD_MESSAGE_DELAY=0, and the exact return payload. An agent would not be surprised by the tool's side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is tightly structured with a behavior paragraph, argument list, and return section. Every sentence contributes useful information, and the most important behavioral caveat (scheduling delay) is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers behavior, parameters, returns, and the related cancellation tool. There is an output schema, but even without it the agent has enough to call the tool correctly and understand the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description compensates fully by explaining channel_id (C/D/G prefix), text (Markdown supported), and thread_ts (parent message timestamp for threaded replies). Every parameter receives meaningful semantic context beyond the raw JSON schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence 'Send or schedule a Slack message' uses a specific verb and resource, and the scheduling/cancellation details distinguish it from sibling read-only Slack tools. There is no ambiguity about what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides clear context for how the tool behaves, including the scheduling delay and how to cancel via slack_cancel_scheduled_message. It does not explicitly state when not to use this tool, but no sibling send tool exists so the guidance is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
17 tool updates
v0.2.0- First observed
slack_auth_test - First observed
slack_cancel_scheduled_message - First observed
slack_get_channel_history - First observed
slack_get_channel_info - First observed
slack_get_file_info - First observed
slack_get_reactions - First observed
slack_get_thread_replies - First observed
slack_get_user_info - First observed
slack_get_user_profile - First observed
slack_list_channel_members - First observed
slack_list_channels - First observed
slack_list_files - First observed
slack_list_reactions - First observed
slack_list_stars - First observed
slack_list_users - First observed
slack_search_messages - First observed
slack_send_message
TDQS
Scored across 17 tools
Most tools map to distinct resource/action pairs, but slack_get_user_info and slack_get_user_profile overlap heavily (both return user details), and slack_get_reactions vs slack_list_reactions have similar names despite different targets.
Nearly all tools follow slack_verb_noun in snake_case. slack_auth_test breaks the verb-first pattern slightly, and get/list are used interchangeably but consistently enough.
17 tools is slightly above the ideal 3-15 range but justified by Slack's broad read surface; no obvious redundant tools. It feels a bit heavy but manageable.
Covers auth, users, channels, history, threads, search, reactions, stars, files metadata, and message sending. However, there are notable gaps: no channel create/archive/invite, no message update/delete, no add/remove reactions, and no file upload/content access.
Maintenance
Related MCP Connectors
Read-only MCP for AI usage profiles, leaderboards, stats, and docs; no writes or private data.
Query your org's data in natural language — read-only MCP access to SQL, NoSQL, files & warehouses.
Read-only MCP access to sessions, funnels, campaigns, errors, live visitors, and anomalies.
Read-only MCP for identity resolution and write guardrails.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceA Model Context Protocol server that provides read-only access to Slack data including messages, channels, and users through secure API endpoints.MIT
- AlicenseNot gradedqualityDmaintenanceA read-only MCP server that enables AI assistants to access Slack workspace data, including channels, messages, threads, and user information.21,724 npm3MIT
- AlicenseNot gradedqualityBmaintenanceRead-only MCP server for Slack with OAuth 2.1 authentication, enabling message retrieval, thread replies, search, user and channel listing.9Apache 2.0
- AlicenseAqualityDmaintenanceA self-hosted, read-only Slack MCP server that runs locally and provides read-only access to Slack channels, messages, and users via the Slack Web API, with no third-party intermediary.7MIT