Skip to main content
Glama
crunchtools

mcp-slack-crunchtools

by crunchtools

mcp-slack-crunchtools

Secure MCP server for Slack workspaces. Provides Claude Code (and other MCP clients) with read access to your Slack channels, messages, users, and files, and can send a message on your behalf.

Features

  • Mostly read: 15 of the 17 tools only read and publish readOnlyHint: true. The other two send a message and cancel a scheduled one; nothing edits or deletes existing content.

  • 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 httpx directly for minimal, auditable HTTP calls.

Related MCP server: Slack MCP Server

Quick Start

claude mcp add mcp-slack-crunchtools \
    --env SLACK_USER_TOKEN=xoxp-your-token \
    -- uvx mcp-slack-crunchtools

Using 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-slack

Local Development

claude mcp add mcp-slack-crunchtools \
    --env SLACK_USER_TOKEN=xoxp-your-token \
    -- uv run mcp-slack-crunchtools

Setup

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

SLACK_USER_TOKEN

token mode

—

User OAuth token (xoxp-...) from a Slack app installed in the workspace.

SLACK_COOKIE_TOKEN

cookie mode

—

Browser session token (xoxc-...). Must be paired with SLACK_COOKIE_D.

SLACK_COOKIE_D

cookie mode

—

Value of the d cookie (xoxd-...) from the same browser session. Sent as a Cookie: header alongside SLACK_COOKIE_TOKEN.

SLACK_ADD_MESSAGE_DELAY

no

3m

How far ahead outgoing messages are scheduled, giving you a window to cancel one. Duration string: 30s, 5m, 2h, or a bare integer for seconds. Set to 0, 0s, none, or false to disable scheduling and post immediately.

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

slack_auth_test

Test connection and get token owner info

slack_list_channels

List workspace channels

slack_get_channel_info

Get channel details

slack_get_channel_history

Read channel messages

slack_get_thread_replies

Read thread replies

slack_list_channel_members

List channel members

slack_search_messages

Search messages

slack_get_reactions

Get message reactions

slack_list_reactions

List user's reactions

slack_list_stars

List starred items

slack_get_user_info

Get user details

slack_list_users

List workspace members

slack_get_user_profile

Get user profile

slack_list_files

List files (metadata only)

slack_get_file_info

Get file metadata

slack_send_message

Schedule a message SLACK_ADD_MESSAGE_DELAY ahead, or post it immediately when the delay is 0 (write)

slack_cancel_scheduled_message

Cancel a scheduled message before it sends (write)

The two write tools need the chat:write scope in token mode.

Security

See SECURITY.md for the full security design document.

License

AGPL-3.0-or-later

Available Tools

17 tools
slack_auth_testSlack Auth TestA
Read-only

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.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint annotation already declares this as a safe read operation. The description adds that it returns token-owner fields and is intended for connection verification, but with an output schema present it does not need to detail return structure, and it omits any permission or rate-limit context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tightly written sentences, front-loaded with the core purpose and followed by a direct usage instruction. Every sentence earns its place with no repetition or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter authentication test with readOnly annotations and an existing output schema, the description provides everything needed: what it tests, what it returns conceptually, and when to use it. Nothing an agent needs in order to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so there are no parameter semantics to document. The baseline for a no-parameter tool is 4, and the description does not introduce unnecessary parameter-related claims.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource ('Test Slack authentication') and clarifies the scope as token-owner verification, distinguishing it from the sibling user-info tools. An agent can immediately understand that this is a connectivity/auth check rather than a general user lookup.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly states 'Use this to verify the connection is working,' giving clear when-to-use context. It does not name alternatives or exclusion cases, so it falls short of the top score, but the primary usage cue is unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

slack_cancel_scheduled_messageSlack Cancel Scheduled MessageB

Cancel a scheduled Slack message before it sends.

NameRequiredDescriptionDefault
channel_idYesChannel ID the message was scheduled in
scheduled_message_idYesThe scheduled_message_id returned by slack_send_message

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden. It identifies the operation as a cancellation and the timing constraint, but does not disclose permission requirements, irreversibility, behavior if the message is already sent, or error conditions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single efficient sentence with no wasted words. The action and timing constraint are front-loaded and immediately useful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple with two fully documented required parameters and an output schema, so basic completeness is met. However, as an unannotated mutation tool, the description should provide more behavioral context such as reversibility and permission expectations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both parameters are already well documented in the input schema. The description adds no additional parameter meaning beyond what the schema provides, which is acceptable given full schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: cancel a scheduled Slack message. It also adds the timing scope 'before it sends,' which distinguishes it from sending messages, though it does not explicitly name sibling alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'before it sends' implies the use case: cancel a scheduled message prior to delivery. However, the description does not state when not to use the tool, what to do if the message already sent, or name any related alternative tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

slack_get_channel_historySlack Get Channel HistoryC
Read-only

Get message history from a Slack channel.

NameRequiredDescriptionDefault
limitNoMax messages to return, 1-1000 (default: 100)
cursorNoPagination cursor from previous response
latestNoOnly messages before this timestamp
oldestNoOnly messages after this timestamp (e.g., 1234567890.123456)
inclusiveNoInclude messages at oldest/latest boundary
channel_idYesChannel ID (starts with C, D, or G)

Output Schema

NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

readOnlyHint=true already tells the agent this is a safe read, so the description needed to add the non-obvious behavior: result ordering, whether history is bounded by retention or bot membership, and pagination via cursor. It says none of that, adding zero context beyond the annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler or repetition. It is tightly written, though its brevity borders on under-specification given six parameters.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need no explanation, but for a six-parameter paginated history read the description omits pagination flow, ordering, and channel-type constraints (public, DM, group) implied by the channel_id hint. The structured fields are the only guidance an agent gets for a moderately complex tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the timestamp windowing (oldest/latest/inclusive), limit cap of 1000, and cursor semantics are already fully documented. The description adds no extra meaning, which is the baseline 3 case.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb (Get) and resource (message history) scoped to a Slack channel, so an agent knows exactly what it retrieves. It does not distinguish itself from siblings like slack_search_messages or slack_get_thread_replies, which is the only thing keeping it from a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no statement of when to use this tool versus slack_search_messages (keyword lookup), slack_get_thread_replies (thread expansion), or slack_list_channels. The reader must infer that this is the bulk-read path for a known channel ID 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_channel_infoSlack Get Channel InfoC
Read-only

Get detailed information about a Slack channel.

NameRequiredDescriptionDefault
channel_idYesChannel ID (starts with C, D, or G)

Output Schema

NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds essentially nothing beyond that — no statement about what 'detailed information' includes, whether private/DM/GM channels (C/D/G) behave differently, or any permission requirements.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One short, front-loaded sentence with zero filler. It is efficient, though the brevity reflects under-specification rather than deliberate density.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists and the single parameter is fully documented, so much of the burden is already carried by structured fields. Still, a near-tautological sentence for a lookup tool leaves the agent without guidance on channel-type differences or relationship to sibling read tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There is a single parameter with 100% schema description coverage, including the C/D/G prefix hint, so the schema carries the full semantic load. The description adds no additional meaning about the channel_id, which is acceptable at baseline 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get detailed information about a Slack channel'), which is clearly a single-channel lookup rather than a listing. It does not explicitly distinguish itself from close siblings like slack_get_channel_history or slack_list_channel_members, so differentiation is left implicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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 versus slack_list_channels, slack_get_channel_history, or slack_list_channel_members. There are no prerequisites or exclusions stated, so the agent must infer selection 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_file_infoSlack Get File InfoB
Read-only

Get metadata about a Slack file (no content download).

NameRequiredDescriptionDefault
pageNoPage of comments (default: 1)
countNoNumber of comments per page (default: 100)
file_idYesFile ID (starts with F)

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

readOnlyHint=true already tells the agent this is a safe read; the description reinforces it by declaring metadata only and no content download. However, it discloses nothing about the surprising comments-pagination behavior implied by the page/count parameters, nor about rate limits or error cases.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single short sentence with the resource and its key constraint front-loaded. No filler, no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be described, and the read-only safety profile is covered by annotations. What is missing is any explanation of the comments pagination parameters and their effect, which is the one non-obvious aspect of this tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all three parameters are documented in the schema and the baseline is 3. The description adds no meaning beyond the schema, and in particular does not explain why a file-info tool takes comment pagination parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (get metadata about a Slack file) and adds a scope qualifier ('no content download'). It is clearly distinct from list-style siblings like slack_list_files and from message-oriented tools, though it never names an alternative explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The parenthetical '(no content download)' implies a boundary but gives no explicit when-to-use, when-not-to-use, or alternative such as slack_list_files. An agent must infer the routing decision entirely.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

slack_get_reactionsSlack Get ReactionsB
Read-only

Get reactions for a specific Slack message.

NameRequiredDescriptionDefault
fullNoIf true, return complete reaction list for each emoji
timestampYesMessage timestamp (e.g., 1234567890.123456)
channel_idYesChannel ID (starts with C, D, or G)

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, so the safety profile is covered. However, the description adds no behavioral context beyond the basic purpose: it does not mention completeness, pagination, limitations, or how the 'full' option changes results.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The single sentence is front-loaded and contains no wasted words. It is appropriately sized for a simple read tool, though its brevity contributes to gaps in guidance elsewhere.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read operation with full schema coverage and an output schema, the description provides enough to identify the tool and its target. It need not explain return values, but it could better distinguish itself from sibling reaction-listing tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the input schema already documents channel_id, timestamp, and full. The description does not add meaning beyond the schema, which is acceptable at baseline 3 when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource: 'Get reactions for a specific Slack message.' This clearly identifies the operation, but it does not distinguish the tool from the sibling slack_list_reactions or clarify scope differences.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no explicit guidance on when to use this tool versus alternatives such as slack_list_reactions, nor does it state prerequisites or exclusions. Usage is only implied by the operation name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

slack_get_thread_repliesSlack Get Thread RepliesC
Read-only

Get replies in a Slack message thread.

NameRequiredDescriptionDefault
limitNoMax replies to return, 1-1000 (default: 100)
cursorNoPagination cursor from previous response
latestNoOnly replies before this timestamp
oldestNoOnly replies after this timestamp
inclusiveNoInclude messages at oldest/latest boundary
thread_tsYesTimestamp of the parent message
channel_idYesChannel ID (starts with C, D, or G)

Output Schema

NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=true, so the safety profile is covered, but the description adds nothing beyond that: no disclosure that the result is paginated (limit/cursor), whether the parent message is included, or the ordering of replies. For a paginated list tool this leaves real behavioral questions unanswered.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler, but it is terse to the point of omitting useful context (pagination, parent-message inclusion) rather than optimizing information density.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return-value explanation is not required, and the schema covers all 7 parameters. However, for a tool with pagination and time-boundary filtering, the description could reasonably note the paged nature and thread-message scope; it is minimally viable rather than complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with every parameter including limit, cursor, oldest/latest, and inclusive fully documented inline. The description adds no parameter meaning beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('Get replies in a Slack message thread'), which clearly delimits it from siblings like slack_get_channel_history or slack_search_messages. It does not name the closest alternative (channel history) to sharpen the distinction, keeping it below a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this instead of slack_get_channel_history or slack_search_messages, nor any prerequisites (e.g., needing a parent message timestamp). Usage is only implied by the phrase 'in a Slack message thread'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

slack_get_user_infoSlack Get User InfoC
Read-only

Get information about a Slack user.

NameRequiredDescriptionDefault
user_idYesUser ID (starts with U, W, or B)

Output Schema

NameRequiredDescription

No output parameters

TDQS

C2.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, so the safety profile is covered, but the description adds nothing beyond that — no note on what fields are returned, lookup failure behavior for an unknown ID, or whether deactivated users are included. Given the low bar set by existing annotations, it still contributes essentially no extra behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with zero padding, which is well-structured. It is arguably too terse rather than verbose, but there is no wasted text to penalize.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The output schema means return values needn't be explained, but with a sibling like slack_get_user_profile in the same namespace, the definition leaves the primary ambiguity unresolved. For a lookup tool in a crowded sibling set, it is not complete enough to guide correct selection.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With a single parameter and 100% schema description coverage, the schema fully documents user_id including its prefix format. The description adds no meaning beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Get information about a Slack user"), which is better than a tautology but adds no scope detail. Critically, it does not distinguish this tool from its close sibling slack_get_user_profile, so an agent cannot tell from the description which one returns profile-type data.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus slack_get_user_profile or slack_list_users. The single sentence provides no context, prerequisites, or exclusions, leaving routing entirely to inference from the tool name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

slack_get_user_profileSlack Get User ProfileC
Read-only

Get a Slack user's profile information.

NameRequiredDescriptionDefault
user_idYesUser ID (starts with U, W, or B)
include_labelsNoInclude custom profile field labels

Output Schema

NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare readOnlyHint=true, so the description does not need to repeat safety. However, it adds no behavioral context beyond the annotations, such as scope of profile data, permission needs, or rate-limit behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single front-loaded sentence with no wasted words. It is concise, though its terseness contributes to the missing sibling differentiation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple, the schema is fully described, and an output schema exists, so return values do not need explanation. Still, the description does not help an agent distinguish this from slack_get_user_info or clarify what profile information is returned.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and both parameters are documented in the input schema. The description does not add meaning beyond the schema, so the baseline score of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Get a Slack user's profile information.' It is clear what the tool does, but it does not distinguish it from the sibling tool slack_get_user_info, which sounds nearly identical.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus alternatives such as slack_get_user_info or slack_list_users. The agent must infer selection 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_list_channel_membersSlack List Channel MembersC
Read-only

List members of a Slack channel.

NameRequiredDescriptionDefault
limitNoMax members to return, 1-1000 (default: 200)
cursorNoPagination cursor from previous response
channel_idYesChannel ID (starts with C, D, or G)

Output Schema

NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, so the safety profile is known. The description adds nothing further: no note on visibility restrictions (private vs public channels), pagination behavior, or permission requirements. With annotations carrying the safety bar, the description still leaves behavioral gaps unaddressed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with zero waste. Appropriately sized for a simple list tool, though it verges on under-specified rather than lean.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists and all parameters are documented in the schema, so the essentials are covered. However, for a tool whose results depend on channel type (C/D/G IDs imply channels, DMs, private groups), the description omits any behavioral context the agent would need to interpret results correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so channel_id, limit, and cursor are fully documented in the schema. The description adds no additional meaning, which is acceptable given the schema does the work — baseline 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List members of a Slack channel'), which distinguishes it from siblings like slack_list_users and slack_list_channels. Clear, though it does nothing beyond naming the operation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this versus slack_list_users or slack_get_channel_info, and no mention of prerequisites such as needing to be a channel member or having the right scopes. The agent must infer everything.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

slack_list_channelsSlack List ChannelsC
Read-only

List channels in the Slack workspace.

NameRequiredDescriptionDefault
limitNoMax results per page, 1-1000 (default: 200)
typesNoComma-separated channel types: public_channel, private_channel, mpim, impublic_channel,private_channel
cursorNoPagination cursor from previous response
exclude_archivedNoExclude archived channels (default: true)

Output Schema

NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint annotation already establishes this is a safe read, and an output schema exists, so the bar is low. The description still adds nothing beyond that: it doesn't mention pagination behavior, the fact that archived channels and non-public types are excluded by default, or ordering of results.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single short sentence with no filler and the key noun front-loaded. Brevity here crosses slightly into under-specification rather than being optimally informative.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With annotations covering safety, a full schema, and an output schema, an agent can call this correctly. Still, defaults like excluding archived channels and the paginated nature of the results are only discoverable by opening the schema, so the description is minimally adequate rather than complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with limit bounds, type values, cursor meaning, and the archived default all documented in the schema. The description adds no extra semantic detail, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource ('List channels') scoped to the Slack workspace, so an agent can immediately tell what it returns. It does not, however, differentiate itself from nearby siblings such as slack_get_channel_info or slack_list_channel_members, which an explicit clause could have done.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no statement of when to use this tool versus alternatives (e.g. channel info vs. member listing), nor of prerequisites or exclusions. Usage is only implied by the verb 'List'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

slack_list_filesSlack List FilesA
Read-only

List files in the Slack workspace (metadata only, no content download).

NameRequiredDescriptionDefault
pageNoPage number (default: 1)
countNoResults per page, 1-100 (default: 100)
ts_toNoFilter files created before this Unix timestamp
typesNoFilter by types (comma-separated: spaces, snippets, images, gdocs, zips, pdfs, all)
ts_fromNoFilter files created after this Unix timestamp
user_idNoFilter by uploader's user ID
channel_idNoFilter by channel ID

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint annotation already establishes the safety profile. The description adds useful behavioral context by clarifying that results are metadata only and do not include file content, but it does not discuss pagination behavior, rate limits, or auth requirements beyond what the schema already shows.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single front-loaded sentence with no wasted words. The critical clarification about metadata-only scope is included immediately.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present and full parameter documentation, the description is nearly complete for a listing tool. It could be stronger by naming when to choose this over sibling file-access tools, but nothing essential for correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so every parameter is already documented with purpose and defaults. The description adds no extra meaning beyond the schema, which is acceptable given the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb (List) and resource (files) scoped to the Slack workspace, and clarifies that only metadata is returned. It clearly separates this from a content-download operation, though it does not explicitly distinguish itself from sibling tools like slack_get_file_info or 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.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the phrase 'List files in the Slack workspace', and the metadata-only note sets a boundary against content retrieval. However, there is no explicit guidance on when to use this tool versus slack_get_file_info, slack_search_messages, or the channel-specific listing siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

slack_list_reactionsSlack List ReactionsC
Read-only

List reactions made by a user.

NameRequiredDescriptionDefault
fullNoIf true, return complete reaction list
pageNoPage number (default: 1)
countNoResults per page, 1-100 (default: 100)
user_idNoUser ID to list reactions for (default: authenticated user)

Output Schema

NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, so safety is covered; the description adds nothing beyond that. It does not mention pagination behavior, what 'full' actually changes in the result, or how the default (authenticated user) is resolved, all of which would be useful context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with zero filler. It is efficient, though the brevity comes at the cost of the guidance and behavioral detail noted above.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values need no explanation, and the schema fully documents parameters. However, for a tool with pagination and a 'full' flag, the description should at least clarify scoping relative to slack_get_reactions, which it does not.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all four parameters are already documented in the schema, and the baseline is 3. The phrase 'made by a user' loosely maps to user_id but adds no semantics beyond what the schema states about defaults.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'List reactions made by a user.' The 'made by a user' qualifier distinguishes it from the sibling slack_get_reactions, which presumably returns reactions on a message, though the description never names that sibling explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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 slack_get_reactions or other siblings, and no scenarios or prerequisites are given. The agent must infer the difference 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_list_starsSlack List StarsB
Read-only

List starred items for the authenticated user.

NameRequiredDescriptionDefault
pageNoPage number (default: 1)
countNoResults per page, 1-100 (default: 100)
cursorNoPagination cursor from previous response

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds that results are scoped to the authenticated user's own stars, which is useful context, but says nothing about ordering, pagination behavior, or result contents beyond that.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with zero filler. It is efficient but so terse that it omits any operational context, sitting just below the ideal for a list tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema, annotations, and full schema coverage, the mechanics are handled elsewhere. Still, the description leaves 'starred items' underspecified (what resource type, what ordering) for a tool an agent may choose among 16 siblings.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

All three parameters are fully documented in the schema (100% coverage), including defaults and the 1-100 bound for count. The description adds no parameter meaning beyond the schema, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('List') and resource ('starred items') with the scope 'for the authenticated user'. No sibling tool covers stars, so no differentiation is required, but the description does not clarify what kind of items (messages, files, channels) come back.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use or when-not guidance, no mention of alternatives, and no note that pagination params control traversal. The only selection signal is the tool name itself.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

slack_list_usersSlack List UsersC
Read-only

List users in the Slack workspace.

NameRequiredDescriptionDefault
limitNoMax users to return, 1-1000 (default: 200)
cursorNoPagination cursor from previous response

Output Schema

NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

readOnlyHint=true already establishes the safety profile, so the description needn't restate it, but it adds essentially nothing beyond the name: no mention of pagination via cursor, no note on whether bots/deactivated users are included, no guidance on result size defaults. For a paginated listing tool this leaves behavior undisclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with zero filler. It is efficient, though the brevity is closer to under-specification than to disciplined concision.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists and the params are fully documented, so the core contract is covered. What is missing for a paginated list tool is guidance on iterating cursors and on result scope (all workspace members vs. active only), which the description never addresses.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both limit and cursor are fully documented in the schema, and the default 200 is stated there. The description contributes no additional semantics, which is acceptable at the baseline when the schema does the work.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb ("List") plus resource ("users in the Slack workspace") makes the operation unmistakable. It does not, however, distinguish itself from nearby siblings such as slack_get_user_info, slack_get_user_profile, or slack_list_channel_members, so an agent must infer the boundary.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no when-to-use guidance and names no alternatives. With six sibling tools touching users or membership, the absence of a routing cue (workspace-wide listing vs. single-user lookup vs. per-channel membership) is a real gap.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

slack_search_messagesSlack Search MessagesA
Read-only

Search messages in the Slack workspace.

Supports Slack search modifiers: from:user, in:channel, has:link, before:date, after:date, during:month.

NameRequiredDescriptionDefault
pageNoPage number (default: 1)
sortNoSort by "timestamp" or "score" (default: timestamp)timestamp
countNoResults per page, 1-100 (default: 20)
queryYesSearch query string
sort_dirNoSort direction "asc" or "desc" (default: desc)desc

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

readOnlyHint=true already tells the agent this is a non-mutating search, so the annotation carries the safety profile. The description adds the Slack query-language capability, which is real behavioral context, but says nothing about result caps, permission scope (which channels are searchable), or pagination limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, zero filler, with the core action front-loaded and the operator syntax immediately after. Nothing is repeated from the schema or annotations.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists and parameters are fully documented, so the description needn't explain return values. It is nearly complete for a search tool, but omitting what is actually searchable (DMs? private channels? user token scope) leaves one meaningful gap for an agent deciding whether results will be authoritative.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so all five parameters are self-documenting and the baseline would be 3. The description earns above baseline by explaining that the vague "query" field accepts Slack search modifiers with concrete examples (from:, in:, has:link, before:/after:/during:), which the schema does not convey.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: "Search messages in the Slack workspace," which is distinct from history/thread siblings that retrieve by channel or thread. The workspace-wide scope is a useful differentiator, though it never names a sibling explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The modifier list implies the tool is for cross-workspace keyword lookup rather than per-channel retrieval, so an agent can infer when to use it over slack_get_channel_history. However, there is no explicit "use this when / use X instead" routing and no prerequisites stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

slack_send_messageSlack 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.

NameRequiredDescriptionDefault
textYesMessage text (Markdown supported)
thread_tsNoParent message timestamp to reply in-thread
channel_idYesChannel ID (starts with C, D, or G)

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations at all, the description carries the full behavioral burden and does the most important part: it discloses that the tool does not actually post immediately but calls chat.scheduleMessage with a ~3 minute cancellation window, which is a genuinely non-obvious side effect an agent would otherwise get wrong. It omits permission/scopes requirements, rate-limit behavior, and error semantics for an invalid channel_id.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the core action in one line, then devotes the remainder to the single non-obvious behavioral fact and its escape hatch. Every sentence earns its place; nothing is repeated from the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return-value detail is unnecessary, and the key scheduling behavior plus the cancellation path are covered. The gap is the absence of any annotation coverage for a write operation — auth requirements and failure modes are left entirely implicit.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with text, channel_id, and thread_ts each documented inline, so the baseline is 3. The description adds no further meaning to any input parameter — the only identifier it mentions (scheduled_message_id) is a return value, not an input.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb pair and resource ('Send or schedule a Slack message'), which is immediately distinguishable from read-only siblings like slack_get_channel_history or slack_search_messages. The scope is unambiguous without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly explains the default path (scheduled with a 3m delay), names slack_cancel_scheduled_message as the follow-up with the required scheduled_message_id, and states the opt-out (SLACK_ADD_MESSAGE_DELAY=0) for immediate posting. It stops short of stating when not to use this tool (e.g., for reactions, files, or thread reads), so it is not a full when/when-not routing statement.

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.

  1. 16 tool updatesv0.4.0
    • Changedslack_cancel_scheduled_message2 fields changed
      • addedInput schema / properties / channel_id / description
        Added value: +"Channel ID the message was scheduled in"
      • addedInput schema / properties / scheduled_message_id / description
        Added value: +"The scheduled_message_id returned by slack_send_message"
    • Changedslack_get_channel_history6 fields changed
      • addedInput schema / properties / channel_id / description
        Added value: +"Channel ID (starts with C, D, or G)"
      • addedInput schema / properties / cursor / description
        Added value: +"Pagination cursor from previous response"
      • addedInput schema / properties / inclusive / description
        Added value: +"Include messages at oldest/latest boundary"
      • addedInput schema / properties / latest / description
        Added value: +"Only messages before this timestamp"
      • addedInput schema / properties / limit / description
        Added value: +"Max messages to return, 1-1000 (default: 100)"
      • addedInput schema / properties / oldest / description
        Added value: +"Only messages after this timestamp (e.g., 1234567890.123456)"
    • Changedslack_get_channel_info1 field changed
      • addedInput schema / properties / channel_id / description
        Added value: +"Channel ID (starts with C, D, or G)"
    • Changedslack_get_file_info3 fields changed
      • addedInput schema / properties / count / description
        Added value: +"Number of comments per page (default: 100)"
      • addedInput schema / properties / file_id / description
        Added value: +"File ID (starts with F)"
      • addedInput schema / properties / page / description
        Added value: +"Page of comments (default: 1)"
    • Changedslack_get_reactions3 fields changed
      • addedInput schema / properties / channel_id / description
        Added value: +"Channel ID (starts with C, D, or G)"
      • addedInput schema / properties / full / description
        Added value: +"If true, return complete reaction list for each emoji"
      • addedInput schema / properties / timestamp / description
        Added value: +"Message timestamp (e.g., 1234567890.123456)"
    • Changedslack_get_thread_replies7 fields changed
      • addedInput schema / properties / channel_id / description
        Added value: +"Channel ID (starts with C, D, or G)"
      • addedInput schema / properties / cursor / description
        Added value: +"Pagination cursor from previous response"
      • addedInput schema / properties / inclusive / description
        Added value: +"Include messages at oldest/latest boundary"
      • addedInput schema / properties / latest / description
        Added value: +"Only replies before this timestamp"
      • addedInput schema / properties / limit / description
        Added value: +"Max replies to return, 1-1000 (default: 100)"
      • addedInput schema / properties / oldest / description
        Added value: +"Only replies after this timestamp"
      • addedInput schema / properties / thread_ts / description
        Added value: +"Timestamp of the parent message"
    • Changedslack_get_user_info1 field changed
      • addedInput schema / properties / user_id / description
        Added value: +"User ID (starts with U, W, or B)"
    • Changedslack_get_user_profile2 fields changed
      • addedInput schema / properties / include_labels / description
        Added value: +"Include custom profile field labels"
      • addedInput schema / properties / user_id / description
        Added value: +"User ID (starts with U, W, or B)"
    • Changedslack_list_channel_members3 fields changed
      • addedInput schema / properties / channel_id / description
        Added value: +"Channel ID (starts with C, D, or G)"
      • addedInput schema / properties / cursor / description
        Added value: +"Pagination cursor from previous response"
      • addedInput schema / properties / limit / description
        Added value: +"Max members to return, 1-1000 (default: 200)"
    • Changedslack_list_channels4 fields changed
      • addedInput schema / properties / cursor / description
        Added value: +"Pagination cursor from previous response"
      • addedInput schema / properties / exclude_archived / description
        Added value: +"Exclude archived channels (default: true)"
      • addedInput schema / properties / limit / description
        Added value: +"Max results per page, 1-1000 (default: 200)"
      • addedInput schema / properties / types / description
        Added value: +"Comma-separated channel types: public_channel, private_channel, mpim, im"
    • Changedslack_list_files7 fields changed
      • addedInput schema / properties / channel_id / description
        Added value: +"Filter by channel ID"
      • addedInput schema / properties / count / description
        Added value: +"Results per page, 1-100 (default: 100)"
      • addedInput schema / properties / page / description
        Added value: +"Page number (default: 1)"
      • addedInput schema / properties / ts_from / description
        Added value: +"Filter files created after this Unix timestamp"
      • addedInput schema / properties / ts_to / description
        Added value: +"Filter files created before this Unix timestamp"
      • addedInput schema / properties / types / description
        Added value: +"Filter by types (comma-separated: spaces, snippets, images, gdocs, zips, pdfs, all)"
      • addedInput schema / properties / user_id / description
        Added value: +"Filter by uploader's user ID"
    • Changedslack_list_reactions4 fields changed
      • addedInput schema / properties / count / description
        Added value: +"Results per page, 1-100 (default: 100)"
      • addedInput schema / properties / full / description
        Added value: +"If true, return complete reaction list"
      • addedInput schema / properties / page / description
        Added value: +"Page number (default: 1)"
      • addedInput schema / properties / user_id / description
        Added value: +"User ID to list reactions for (default: authenticated user)"
    • Changedslack_list_stars3 fields changed
      • addedInput schema / properties / count / description
        Added value: +"Results per page, 1-100 (default: 100)"
      • addedInput schema / properties / cursor / description
        Added value: +"Pagination cursor from previous response"
      • addedInput schema / properties / page / description
        Added value: +"Page number (default: 1)"
    • Changedslack_list_users2 fields changed
      • addedInput schema / properties / cursor / description
        Added value: +"Pagination cursor from previous response"
      • addedInput schema / properties / limit / description
        Added value: +"Max users to return, 1-1000 (default: 200)"
    • Changedslack_search_messages5 fields changed
      • addedInput schema / properties / count / description
        Added value: +"Results per page, 1-100 (default: 20)"
      • addedInput schema / properties / page / description
        Added value: +"Page number (default: 1)"
      • addedInput schema / properties / query / description
        Added value: +"Search query string"
      • addedInput schema / properties / sort / description
        Added value: +"Sort by \"timestamp\" or \"score\" (default: timestamp)"
      • addedInput schema / properties / sort_dir / description
        Added value: +"Sort direction \"asc\" or \"desc\" (default: desc)"
    • Changedslack_send_message3 fields changed
      • addedInput schema / properties / channel_id / description
        Added value: +"Channel ID (starts with C, D, or G)"
      • addedInput schema / properties / text / description
        Added value: +"Message text (Markdown supported)"
      • addedInput schema / properties / thread_ts / description
        Added value: +"Parent message timestamp to reply in-thread"
  2. 17 tool updatesv0.2.0
    • First observedslack_auth_test
    • First observedslack_cancel_scheduled_message
    • First observedslack_get_channel_history
    • First observedslack_get_channel_info
    • First observedslack_get_file_info
    • First observedslack_get_reactions
    • First observedslack_get_thread_replies
    • First observedslack_get_user_info
    • First observedslack_get_user_profile
    • First observedslack_list_channel_members
    • First observedslack_list_channels
    • First observedslack_list_files
    • First observedslack_list_reactions
    • First observedslack_list_stars
    • First observedslack_list_users
    • First observedslack_search_messages
    • First observedslack_send_message

TDQS

B3.3/5.0

Scored across 17 tools

Disambiguation4/5

Most tools target a clearly distinct resource+action (channel history vs. thread replies vs. search vs. members). The weakest pair is slack_get_user_info vs. slack_get_user_profile, which read as near-duplicates, and get_reactions vs. list_reactions require reading descriptions carefully to separate (reactions on a message vs. reactions by a user). Otherwise selection is straightforward.

Naming Consistency5/5

Every tool uses the same slack_ prefix followed by a verb_noun pattern (get_channel_info, list_users, send_message, cancel_scheduled_message). There are no camelCase or stylistic deviations, and the verbs (get/list/search/send/cancel/test) map predictably to the operation type.

Tool Count4/5

Seventeen tools is slightly above the ideal band but is well justified for a Slack surface spanning users, channels, messages, threads, reactions, stars, and files. Each tool covers a distinct Slack endpoint rather than being redundant padding.

Completeness3/5

The surface is heavily read-oriented: there is no add_reaction, no update/edit message, no delete message, no channel create/join/leave, and no file upload (files are explicitly metadata-only). Sending, scheduling, and cancelling messages are covered, but an agent asked to react to, edit, or upload would hit dead ends.

Maintenance

ActivityActive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    A Model Context Protocol server that provides read-only access to Slack data including messages, channels, and users through secure API endpoints.
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    A read-only MCP server that enables AI assistants to access Slack workspace data, including channels, messages, threads, and user information.
    49,032 npm
    3
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Read-only MCP server for Slack with OAuth 2.1 authentication, enabling message retrieval, thread replies, search, user and channel listing.
    9
    Apache 2.0
  • A
    license
    A
    quality
    D
    maintenance
    A 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.
    7
    MIT