Skip to main content
Glama
piekstra

Slack MCP Server

by piekstra

Slack MCP Server

A Model Context Protocol (MCP) server that provides tools for interacting with Slack workspaces through the Slack Web API.

Features

Channel Management

  • list_channels - List all channels in the workspace

  • get_channel_info - Get detailed information about a specific channel

  • create_channel - Create a new channel

  • archive_channel - Archive a channel

  • unarchive_channel - Unarchive a channel

  • set_channel_topic - Set channel topic

  • set_channel_purpose - Set channel purpose

User Management

  • list_users - List all users in the workspace

  • get_user_info - Get detailed information about a specific user

  • invite_to_channel - Invite users to a channel

Messaging

  • send_message - Send a message to a channel (supports Block Kit)

  • update_message - Update an existing message (supports Block Kit)

  • delete_message - Delete a message

  • get_channel_history - Get message history for a channel

  • search_messages - Search for messages across the workspace

Rich Message Formatting (Block Kit)

  • send_formatted_message - Send formatted messages with headers, sections, fields

  • send_notification_message - Send status notifications with emoji indicators

  • send_list_message - Send formatted lists with titles and descriptions

File Management

  • upload_file - Upload a file to one or more channels

Reactions

  • add_reaction - Add a reaction to a message

  • remove_reaction - Remove a reaction from a message

Workspace

  • get_team_info - Get information about the Slack workspace/team

Related MCP server: Slack MCP Server

Installation

For use with Claude Desktop or Claude CLI, install globally:

pip install slack-mcp-server

From source

git clone <repository-url>
cd slack-mcp-server
pip install -e .

Configuration

The Slack MCP Server uses macOS Keychain for secure credential storage. This is much safer than storing tokens in files.

Quick Setup

# Run the interactive setup
slack-mcp-setup
# or
python -m slack_mcp.setup

The setup wizard will:

  1. Guide you through obtaining a Slack API token

  2. Securely store credentials in your macOS Keychain

  3. Validate your configuration

Manual Keychain Setup

from slack_mcp.credentials import CredentialManager

manager = CredentialManager()
manager.store_credential("api_token", "xoxb-your-slack-bot-token")
manager.store_credential("workspace_id", "T1234567890")  # Optional

Environment Variables (Fallback)

If you prefer environment variables or are not on macOS, create a .env file:

# Required
SLACK_API_TOKEN=xoxb-your-slack-bot-token

# Optional
SLACK_WORKSPACE_ID=your-workspace-id

⚠️ Security Warning: Environment variables and .env files are less secure than keychain storage.

Getting a Slack API Token

  1. Go to api.slack.com/apps

  2. Create a new app or select an existing one

  3. Navigate to "OAuth & Permissions"

  4. Add the required OAuth scopes (see below)

  5. Install the app to your workspace

  6. Copy the "Bot User OAuth Token" (starts with xoxb-)

Required OAuth Scopes

The following OAuth scopes are required for full functionality:

Core Scopes:

  • channels:read - View basic channel information

  • channels:manage - Create and manage public channels

  • groups:read - View private channel information

  • groups:write - Create and manage private channels

  • chat:write - Send messages

  • files:write - Upload files

  • im:read - View direct message channels

  • mpim:read - View group direct message channels

  • reactions:read - View reactions

  • reactions:write - Add and remove reactions

  • team:read - View team information

  • users:read - View user information

⚠️ Search Limitation: The search_messages tool uses Slack's search API which requires user tokens with the search:read scope. Since this server is designed for bot tokens (xoxb-), search functionality will not work. Consider removing this feature or switching to user token authentication if search is needed.

After installing globally, add the server using Claude CLI. First, find your slack-mcp-server installation path:

# Find your slack-mcp-server executable path
which slack-mcp-server

Then add it with Claude CLI:

claude mcp add slack /path/to/slack-mcp-server

For example:

claude mcp add slack /usr/local/bin/slack-mcp-server

This automatically configures the server in your Claude Desktop configuration.

Usage with Claude Desktop (Manual Configuration)

Alternatively, you can manually add this to your claude_desktop_config.json:

{
  "mcpServers": {
    "slack": {
      "command": "python",
      "args": ["-m", "slack_mcp"]
    }
  }
}

With Environment Variables

{
  "mcpServers": {
    "slack": {
      "command": "python",
      "args": ["-m", "slack_mcp"],
      "env": {
        "SLACK_API_TOKEN": "xoxb-your-slack-bot-token"
      }
    }
  }
}

Usage with MCP Client

from mcp import Client

# Initialize client
client = Client()

# Connect to the Slack MCP server
await client.connect("python", ["-m", "slack_mcp"])

# List available tools
tools = await client.list_tools()

# Use a tool
result = await client.call_tool("list_channels", {
    "types": "public_channel",
    "exclude_archived": True,
    "limit": 10
})

Development

Setting up the development environment

# Clone the repository
git clone <repository-url>
cd slack-mcp-server

# Create a virtual environment
python -m venv venv
source venv/bin/activate  # On Windows: venv\Scripts\activate

# Install in development mode with dev dependencies
pip install -e ".[dev]"

# Set up credentials securely
slack-mcp-setup

Running tests

pytest

Code formatting

# Format with black
black slack_mcp/

# Lint with ruff
ruff check slack_mcp/

Examples

List public channels

result = await client.call_tool("list_channels", {
    "types": "public_channel",
    "exclude_archived": True,
    "limit": 20
})

Send a message

result = await client.call_tool("send_message", {
    "channel": "C1234567890",  # Channel ID
    "text": "Hello from MCP!"
})

Search for messages

result = await client.call_tool("search_messages", {
    "query": "project deadline",
    "sort": "timestamp",
    "sort_dir": "desc",
    "count": 10
})

Upload a file

result = await client.call_tool("upload_file", {
    "channels": "C1234567890,C0987654321",  # Comma-separated channel IDs
    "content": "This is the file content",
    "filename": "report.txt",
    "title": "Weekly Report",
    "initial_comment": "Here's this week's report"
})

Send a formatted message with Block Kit

result = await client.call_tool("send_formatted_message", {
    "channel": "C1234567890",
    "title": "Project Update",
    "text": "Here's the latest update on our project progress",
    "fields": "Status: In Progress, Due Date: Next Friday, Assignee: @john",
    "context": "Last updated 2 hours ago"
})

Send a notification message

result = await client.call_tool("send_notification_message", {
    "channel": "C1234567890",
    "status": "success",
    "title": "Deployment Complete",
    "description": "The application has been successfully deployed to production",
    "details": "Build #123 deployed at 14:30 UTC"
})

Send a list message

result = await client.call_tool("send_list_message", {
    "channel": "C1234567890",
    "title": "Meeting Agenda",
    "description": "Items to discuss in today's standup",
    "items": "Sprint review\nBlocker discussion\nNext week planning\nDemo preparation"
})

Send message with custom Block Kit

result = await client.call_tool("send_message", {
    "channel": "C1234567890",
    "text": "Custom formatted message",
    "blocks": json.dumps([
        {
            "type": "section",
            "text": {
                "type": "mrkdwn",
                "text": "*Important Notice*\nThis is a custom Block Kit message"
            }
        },
        {"type": "divider"},
        {
            "type": "context",
            "elements": [
                {
                    "type": "mrkdwn",
                    "text": "Created with custom blocks"
                }
            ]
        }
    ])
})

Error Handling

The server returns JSON-formatted error messages when operations fail:

{
  "error": "Slack API error: channel_not_found"
}

Common error codes:

  • not_authed - Invalid or missing API token

  • channel_not_found - Channel doesn't exist

  • user_not_found - User doesn't exist

  • message_not_found - Message doesn't exist

  • no_permission - Bot lacks required permissions

  • rate_limited - API rate limit exceeded

Security Considerations

  • 🔐 Keychain Storage: Use macOS Keychain for secure credential storage (recommended)

  • API Token: Never commit your Slack API token to version control

  • Permissions: Only grant the minimum required OAuth scopes

  • Rate Limits: The server respects Slack's rate limits (see Slack Rate Limits)

  • Message Content: Be mindful of sensitive information in messages and files

Credential Management Commands

# Interactive setup wizard
slack-mcp-setup

# View stored credentials
python -c "from slack_mcp.credentials import CredentialManager; m = CredentialManager(); print(m.list_stored_credentials())"

# Delete specific credential
python -c "from slack_mcp.credentials import CredentialManager; CredentialManager().delete_credential('api_token')"

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

License

MIT License - see LICENSE file for details

Support

For issues and questions, please create an issue in the repository.

Available Tools

26 tools
add_reactionA

Add a reaction emoji to a message.

Args: channel: Channel ID where the message exists timestamp: Timestamp of the message emoji_name: Name of the emoji (without colons)

ParametersJSON Schema
NameRequiredDescriptionDefault
channelYes
timestampYes
emoji_nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior2/5

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 the tool adds a reaction (implying a write operation) but doesn't mention permission requirements, rate limits, whether reactions are reversible, or what happens if the emoji_name is invalid. The description lacks critical behavioral context for a mutation tool.

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 perfectly structured with a clear purpose statement followed by a well-organized parameter explanation. Every sentence adds value, and the formatting with 'Args:' makes it easy to parse. No wasted words or redundant information.

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 3-parameter mutation tool with no annotations, the description does well by explaining all parameters and the basic operation. The presence of an output schema means return values don't need explanation. However, it could be more complete by mentioning permission requirements or error conditions.

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 description provides clear semantic meaning for all three parameters beyond the schema's type information: channel identifies where the message exists, timestamp identifies the specific message, and emoji_name specifies the reaction (with the helpful note 'without colons'). With 0% schema description coverage, this fully compensates by explaining what each parameter represents.

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 clearly states the specific action ('Add a reaction emoji') and the target resource ('to a message'), distinguishing it from sibling tools like remove_reaction (which removes reactions) and send_message (which creates messages). The verb+resource combination is precise and unambiguous.

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 description implies usage context by specifying that it adds reactions to existing messages, but it doesn't explicitly state when to use this tool versus alternatives like send_message for new content or remove_reaction for undoing reactions. No guidance is provided on prerequisites or exclusions.

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

archive_channelB

Archive a Slack channel.

Args: channel: Channel ID to archive

ParametersJSON Schema
NameRequiredDescriptionDefault
channelYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden for behavioral disclosure. It states the action ('Archive') but doesn't describe what archiving entails (e.g., makes channel read-only, hides from lists), permission requirements, whether it's reversible (though 'unarchive_channel' sibling implies it is), or any rate limits/constraints. This leaves significant behavioral gaps for a destructive operation.

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 extremely concise with zero wasted words. It front-loads the core purpose in the first sentence and provides parameter clarification in a clean 'Args:' section. Every sentence earns its place.

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?

Given this is a destructive operation with no annotations, the description is minimally complete but has significant gaps. The presence of an output schema means return values don't need explanation, but the description should address behavioral aspects like permissions, consequences, and reversibility for a channel archiving tool.

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 description adds crucial semantic context for the single parameter: 'channel' is clarified as 'Channel ID to archive'. With 0% schema description coverage and only one parameter, this adequately compensates by specifying what the parameter represents, though it doesn't explain format requirements (e.g., Slack channel ID format like C123456).

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 clearly states the verb ('Archive') and resource ('a Slack channel'), making the purpose unambiguous. However, it doesn't explicitly differentiate from sibling tools like 'unarchive_channel' beyond the obvious semantic opposition.

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 is provided on when to use this tool versus alternatives. While 'unarchive_channel' is clearly the opposite operation, there's no mention of prerequisites (e.g., channel must be active), consequences (e.g., archived channels become read-only), or when archiving is appropriate versus deleting or other channel management options.

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

create_channelC

Create a new Slack channel.

Args: name: Name for the new channel is_private: Whether the channel should be private

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
is_privateNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries full burden. It states the tool creates a channel but doesn't disclose behavioral traits like what permissions are required, whether creation is reversible (e.g., via archive_channel), rate limits, or what happens on failure. The description is minimal and lacks critical context for a mutation operation.

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 appropriately sized and front-loaded, with the main purpose stated first followed by parameter details. The two-sentence structure is efficient, though the parameter explanations are brief and could be more integrated. There's minimal waste, but it borders on under-specification.

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?

Given the tool has an output schema (which handles return values), no annotations, and low schema coverage, the description is incomplete. It covers the basic purpose and parameters but misses important context like permissions, error handling, and relationships with sibling tools. For a mutation tool with no annotations, more behavioral disclosure is needed to be fully helpful.

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?

The description adds basic semantics for both parameters (name and is_private) beyond the schema, which has 0% description coverage. It explains that 'name' is for the new channel and 'is_private' determines privacy, providing essential context. However, it doesn't cover constraints (e.g., name length, allowed characters) or default behavior for is_private, leaving gaps.

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 clearly states the action ('Create') and resource ('new Slack channel'), making the purpose immediately understandable. It distinguishes this from other channel-related tools like archive_channel or list_channels by specifying it's for creation. However, it doesn't explicitly differentiate from all possible sibling tools beyond the obvious channel context.

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 provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (like needing appropriate permissions), when not to use it (e.g., if a channel already exists), or how it relates to sibling tools like invite_to_channel (which might be needed after creation). Usage is implied from the name but not explicitly stated.

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

delete_messageC

Delete a message from a Slack channel.

Args: channel: Channel ID where the message exists ts: Timestamp of the message to delete

ParametersJSON Schema
NameRequiredDescriptionDefault
channelYes
tsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

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 the action ('Delete') but doesn't mention critical details like whether this is irreversible, requires specific user permissions, affects channel history, or has rate limits. This leaves significant gaps in understanding the tool's behavior beyond basic functionality.

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 front-loaded with the core purpose in the first sentence, followed by parameter explanations in a clear 'Args:' section. It avoids unnecessary words, though the parameter explanations could be slightly more detailed without sacrificing brevity.

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?

Given that there's an output schema (which handles return values), no annotations, and low schema coverage, the description does an adequate job by stating the action and parameters. However, for a destructive tool like message deletion, it should ideally include more about permissions, irreversibility, or error cases to be fully 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 0%, but the description adds basic semantics by explaining that 'channel' is the 'Channel ID where the message exists' and 'ts' is the 'Timestamp of the message to delete'. This clarifies the purpose of each parameter beyond their types, though it doesn't provide format details or examples, keeping it at a baseline level.

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 clearly states the verb ('Delete') and resource ('a message from a Slack channel'), making the purpose immediately understandable. However, it doesn't explicitly distinguish this tool from sibling tools like 'update_message' or 'search_messages', which would require more specific differentiation to achieve a perfect score.

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 provides no guidance on when to use this tool versus alternatives like 'update_message' or 'archive_channel', nor does it mention prerequisites such as permissions or context. It simply states what the tool does without indicating appropriate scenarios or exclusions.

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

get_channel_historyB

Get message history for a Slack channel.

Args: channel: Channel ID limit: Maximum number of messages to return oldest: Only messages after this timestamp latest: Only messages before this timestamp

ParametersJSON Schema
NameRequiredDescriptionDefault
channelYes
limitNo
oldestNo
latestNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior2/5

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 the tool retrieves message history but doesn't cover critical aspects like authentication requirements, rate limits, pagination behavior, error handling, or whether it's read-only (implied by 'Get' but not explicit). For a tool with 4 parameters and no annotation coverage, this is a significant gap in transparency.

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 highly concise and well-structured. It starts with a clear purpose statement, followed by a bullet-point list of parameters with brief explanations. Every sentence earns its place, with no redundant or verbose language, making it easy for an agent to parse quickly.

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?

Given the tool's moderate complexity (4 parameters, no annotations, but with an output schema), the description is partially complete. It covers the purpose and parameters well, but lacks behavioral context (e.g., auth, limits) and usage guidelines. The presence of an output schema means return values don't need explanation, but other gaps keep this from being fully adequate.

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 description adds substantial value beyond the input schema, which has 0% schema description coverage. It explains each parameter's purpose: 'channel: Channel ID,' 'limit: Maximum number of messages to return,' 'oldest: Only messages after this timestamp,' and 'latest: Only messages before this timestamp.' This clarifies semantics that the schema alone doesn't provide, compensating well for the low 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 clearly states the tool's purpose: 'Get message history for a Slack channel.' It specifies the verb ('Get') and resource ('message history for a Slack channel'), making it easy to understand what the tool does. However, it doesn't explicitly differentiate from sibling tools like 'search_messages' or 'get_channel_info,' which prevents a perfect score.

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 provides no guidance on when to use this tool versus alternatives. It doesn't mention sibling tools like 'search_messages' (which might offer more flexible filtering) or 'get_channel_info' (which provides metadata rather than messages), leaving the agent without context for tool selection. This lack of comparative information results in a low score.

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

get_channel_infoC

Get detailed information about a specific Slack channel.

Args: channel_id: The ID of the channel

ParametersJSON Schema
NameRequiredDescriptionDefault
channel_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

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 the tool retrieves 'detailed information' but doesn't specify what that includes (e.g., channel name, members, purpose), whether it's read-only, requires permissions, or has rate limits. This is a significant gap for a tool with no annotation coverage.

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 appropriately sized and front-loaded, with the core purpose stated first in a clear sentence. The 'Args' section is structured but could be integrated more seamlessly. There's no wasted text, though it could be slightly more polished for optimal efficiency.

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?

Given the tool's low complexity (1 parameter) and the presence of an output schema (which handles return values), the description is minimally adequate. However, with no annotations and incomplete behavioral details, it doesn't fully compensate for the lack of structured data, leaving gaps in usage and transparency.

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?

The description adds minimal semantics beyond the input schema: it defines 'channel_id' as 'The ID of the channel', which is basic but helpful. With 0% schema description coverage and 1 parameter, this provides some value, but it doesn't explain where to find the ID or its format, keeping it at the baseline for partial compensation.

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 clearly states the tool's purpose with a specific verb ('Get') and resource ('detailed information about a specific Slack channel'), making it easy to understand what the tool does. However, it doesn't explicitly differentiate from sibling tools like 'list_channels' (which lists channels) or 'get_channel_history' (which retrieves message history), missing an opportunity for full sibling distinction.

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 provides no guidance on when to use this tool versus alternatives. It doesn't mention sibling tools like 'list_channels' for general channel listing or 'get_channel_history' for message history, nor does it specify prerequisites such as needing channel access. This leaves the agent without context for tool selection.

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

get_team_infoB

Get information about the Slack workspace/team.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior2/5

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 the action but lacks details on what information is returned (e.g., workspace name, settings, members), permissions required, rate limits, or any side effects. This leaves significant gaps in understanding the tool's behavior.

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, clear sentence with no wasted words. It is front-loaded with the core purpose and appropriately sized for a simple tool, making it highly concise and well-structured.

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?

Given that the tool has 0 parameters, 100% schema coverage, and an output schema exists, the description's job is reduced. However, as a read operation with no annotations, it should ideally clarify what information is retrieved (e.g., workspace details vs. metadata) to complement the output schema. The current description is minimal but not fully complete for context.

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 0 parameters, and the input schema coverage is 100%, so there is no need for parameter documentation in the description. The description appropriately avoids discussing parameters, which is efficient, but a baseline of 4 is applied since no parameters exist to explain.

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 clearly states the verb 'Get' and the resource 'information about the Slack workspace/team', making the purpose specific and understandable. However, it doesn't explicitly differentiate from sibling tools like 'get_channel_info' or 'get_user_info', which target more specific resources, so it falls short of a perfect score.

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 provides no guidance on when to use this tool versus alternatives. It doesn't mention any context, prerequisites, or exclusions, leaving the agent to infer usage based on the tool name alone, which is insufficient for optimal selection.

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

get_user_infoB

Get detailed information about a specific Slack user.

Args: user_id: The ID of the user

ParametersJSON Schema
NameRequiredDescriptionDefault
user_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior2/5

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

No annotations are provided, so the description carries full burden for behavioral disclosure. It mentions 'detailed information' but does not specify what details are included, whether authentication is required, rate limits, or error handling. This is a significant gap for a tool with no annotation coverage.

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 appropriately sized and front-loaded with the main purpose in the first sentence, followed by a brief parameter explanation. It avoids unnecessary details, though the structure could be slightly improved by integrating the parameter note more seamlessly.

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?

Given the tool's low complexity (single parameter), lack of annotations, and presence of an output schema (which handles return values), the description is reasonably complete. It covers the core purpose and parameter, though it could benefit from more behavioral context to achieve full completeness.

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?

The description adds meaning by specifying that 'user_id' is 'The ID of the user', which clarifies the parameter's purpose beyond the schema's type definition. However, with 0% schema description coverage and only one parameter, this provides basic but not comprehensive semantic value, aligning with the baseline expectation.

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 clearly states the verb ('Get') and resource ('detailed information about a specific Slack user'), making the purpose explicit. However, it does not differentiate from sibling tools like 'list_users' or 'get_team_info', which reduces it from a perfect score.

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 provides no guidance on when to use this tool versus alternatives such as 'list_users' for multiple users or 'get_team_info' for team-level data. It lacks explicit when/when-not instructions or named alternatives, leaving usage context implied at best.

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

invite_to_channelC

Invite users to a Slack channel.

Args: channel: Channel ID users: Comma-separated list of user IDs

ParametersJSON Schema
NameRequiredDescriptionDefault
channelYes
usersYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden but offers minimal behavioral insight. It mentions the action 'invite' but doesn't disclose permissions required, rate limits, whether it's idempotent, or what happens if users are already members. This leaves significant gaps for an agent to understand the tool's 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 front-loaded with the core purpose in the first sentence, followed by a clear Args section. It's efficient with no wasted words, though the Args formatting could be slightly more integrated with the main text for better flow.

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?

Given the tool has an output schema (which handles return values), 2 parameters with 0% schema coverage, and no annotations, the description is moderately complete. It covers the basics but lacks details on permissions, error cases, or integration with sibling tools, which would be helpful for a mutation tool in this context.

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 0%, so the description adds value by naming the two parameters and providing basic semantics: 'channel' as a Channel ID and 'users' as a comma-separated list of user IDs. However, it doesn't explain format details (e.g., Slack's ID conventions) or constraints, leaving room for improvement.

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 clearly states the action ('Invite users') and target resource ('to a Slack channel'), making the purpose immediately understandable. However, it doesn't differentiate this tool from potential sibling tools like 'add_reaction' or 'create_channel' beyond the obvious domain difference, which keeps it from a perfect score.

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 is provided on when to use this tool versus alternatives. For example, it doesn't mention prerequisites like needing channel admin permissions or clarify if it's for public/private channels. The description only states what it does, not when it's appropriate.

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

list_channelsB

List all channels in the Slack workspace.

Args: types: Comma-separated channel types (public_channel, private_channel, mpim, im) exclude_archived: Whether to exclude archived channels limit: Maximum number of channels to return (1-1000)

ParametersJSON Schema
NameRequiredDescriptionDefault
typesNo
exclude_archivedNo
limitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden for behavioral disclosure. It mentions the action ('List all channels') but doesn't cover critical aspects like authentication requirements, rate limits, pagination behavior, error conditions, or what the output contains. This leaves significant gaps for a tool with three parameters.

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 perfectly structured and concise. The first sentence states the core purpose, followed by a clean parameter breakdown with brief but informative explanations. Every sentence earns its place with no wasted words or 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?

Given the tool has an output schema (which handles return values), 3 parameters with good description coverage, and no complex annotations, the description is adequate but incomplete. It lacks behavioral context (auth, rate limits, errors) that would be important for a listing tool, though the output schema reduces some burden.

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 description provides clear semantic explanations for all three parameters beyond the schema's 0% coverage. It explains what 'types' accepts, what 'exclude_archived' does, and the range/meaning of 'limit'. This effectively compensates for the schema's lack of descriptions, though it doesn't cover default values or null handling.

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 clearly states the verb ('List') and resource ('all channels in the Slack workspace'), making the purpose immediately understandable. However, it doesn't explicitly differentiate from sibling tools like 'get_channel_info' or 'get_channel_history' that also retrieve channel-related data, which prevents a perfect score.

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 provides no guidance on when to use this tool versus alternatives. It doesn't mention sibling tools like 'list_users' for user listings or 'get_channel_info' for detailed single-channel information, leaving the agent without context for tool selection.

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

list_usersC

List all users in the Slack workspace.

Args: limit: Maximum number of users to return include_locale: Include locale information for each user

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
include_localeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

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. While 'List all users' implies a read operation, the description doesn't mention important behavioral aspects like pagination behavior, rate limits, authentication requirements, or what happens when the limit is reached. The Args section only documents parameters, not behavioral traits.

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 appropriately sized and front-loaded with the core purpose in the first sentence. The Args section is organized but could be more integrated. There's minimal waste, though the separation between description and Args could be smoother for optimal structure.

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?

Given that there's an output schema (which handles return values), no annotations, and only 2 parameters with good description coverage in the Args section, the description is moderately complete. However, for a list operation with no annotation coverage, it should ideally mention pagination behavior or result format hints to be fully complete for agent use.

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?

The description includes an Args section that explains what each parameter does ('Maximum number of users to return', 'Include locale information for each user'). However, with 0% schema description coverage, the schema provides no parameter documentation, so the description must compensate. The Args section adds meaningful semantics beyond the bare schema, but doesn't provide format details or constraints beyond what's stated.

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 clearly states the tool's purpose: 'List all users in the Slack workspace.' This is a specific verb+resource combination that tells what the tool does. However, it doesn't explicitly distinguish this tool from sibling tools like 'get_user_info' or 'invite_to_channel', which prevents a perfect score.

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 provides no guidance on when to use this tool versus alternatives. There's no mention of when this tool is appropriate versus 'get_user_info' (for single user details) or other user-related operations. The description only states what the tool does, not when to use it.

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

remove_reactionB

Remove a reaction emoji from a message.

Args: channel: Channel ID where the message exists timestamp: Timestamp of the message emoji_name: Name of the emoji (without colons)

ParametersJSON Schema
NameRequiredDescriptionDefault
channelYes
timestampYes
emoji_nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden. It states the action but lacks critical behavioral details: whether this requires specific permissions, if it's reversible, rate limits, or what happens on success/failure. For a mutation tool with zero annotation coverage, this is a significant gap.

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 front-loaded with the core purpose in the first sentence, followed by a structured 'Args' section. It's efficient with no wasted words, though the 'Args' formatting could be slightly more integrated into the flow.

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?

Given the tool has an output schema (which handles return values), the description covers the basic action and parameters adequately. However, as a mutation tool with no annotations, it lacks context on permissions, side effects, and error handling, leaving gaps for safe agent use.

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 description coverage is 0%, but the description compensates by clearly explaining all three parameters in the 'Args' section: 'channel' as Channel ID, 'timestamp' as Timestamp of the message, and 'emoji_name' with specific formatting ('without colons'). This adds essential meaning beyond the bare schema.

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 clearly states the specific action ('Remove a reaction emoji') and resource ('from a message'), distinguishing it from siblings like 'add_reaction' (which adds reactions) and 'delete_message' (which removes entire messages). The verb 'remove' is precise and unambiguous.

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 is provided on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., needing permission to remove reactions), exclusions (e.g., cannot remove others' reactions without admin rights), or related tools like 'update_message' for editing message content instead of reactions.

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

search_messagesC

Search for messages across the Slack workspace.

Args: query: Search query sort: Sort by 'score' or 'timestamp' sort_dir: Sort direction 'asc' or 'desc' count: Number of results to return

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes
sortNotimestamp
sort_dirNodesc
countNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

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 the tool searches messages but doesn't describe key behaviors: what the search covers (e.g., text, metadata, attachments), whether it's paginated, rate limits, authentication needs, or what the output looks like (though an output schema exists). For a search tool with zero annotation coverage, this is a significant gap in transparency.

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 appropriately sized and front-loaded: the first sentence states the purpose clearly, followed by a structured Args section. Every sentence earns its place, with no redundant information. It could be slightly more concise by integrating the Args into the main text, but the structure is efficient and readable.

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?

Given the tool's moderate complexity (search with 4 parameters), no annotations, and an output schema present, the description is partially complete. It covers the basic purpose and parameters but lacks behavioral context (e.g., search scope, limitations) and usage guidelines. The output schema mitigates the need to describe return values, but overall, the description is adequate with clear gaps for a search tool in this context.

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 0%, so the schema provides no parameter descriptions. The description adds basic semantics by listing parameters and brief explanations (e.g., 'Search query' for query, 'Sort by 'score' or 'timestamp'' for sort). However, it doesn't fully compensate for the coverage gap—missing details like query syntax, default behaviors beyond schema defaults, or result limits. With 4 parameters and low schema coverage, the description adds some value but remains incomplete.

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 clearly states the tool's purpose: 'Search for messages across the Slack workspace.' It specifies the verb ('search') and resource ('messages'), and the scope ('across the Slack workspace') helps distinguish it from channel-specific tools like get_channel_history. However, it doesn't explicitly differentiate from other search-related tools (none exist in siblings), so it's not a perfect 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?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., needing specific permissions), compare it to get_channel_history for channel-specific searches, or indicate when not to use it (e.g., for real-time vs. historical searches). The lack of usage context leaves the agent to infer based on tool names alone.

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

send_announcementC

Send a formatted announcement message.

Args: channel: Channel ID or name title: Announcement title message: Main announcement message author: Author name (optional) timestamp: Custom timestamp (optional) thread_ts: Thread timestamp for replies (optional)

ParametersJSON Schema
NameRequiredDescriptionDefault
channelYes
titleYes
messageYes
authorNo
timestampNo
thread_tsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

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. While 'send' implies a write/mutation operation, the description doesn't address important behavioral aspects: what permissions are required, whether the announcement is broadcast to all channel members, how formatting works, what happens if the channel doesn't exist, or what the response contains. For a mutation tool with zero annotation coverage, this is inadequate.

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 appropriately sized and front-loaded with the core purpose in the first sentence. The Args section is organized clearly with parameter names and brief explanations. While efficient, the tool name repetition in parameter descriptions ('Announcement title', 'Main announcement message') is slightly redundant but not excessive.

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?

Given that this is a mutation tool with 6 parameters, 0% schema description coverage, no annotations, but with an output schema, the description is minimally adequate. The presence of an output schema means the description doesn't need to explain return values, but it should do more to explain behavioral aspects, usage context, and parameter details for a tool with this complexity and mutation nature.

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?

The description provides parameter names and basic descriptions in the Args section, but with 0% schema description coverage, it doesn't fully compensate. It explains what each parameter represents (e.g., 'Channel ID or name', 'Announcement title'), which adds value beyond the bare schema. However, it doesn't clarify format requirements (e.g., what timestamp format, what constitutes a valid channel name) or provide examples, leaving significant gaps for 6 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?

The description clearly states the tool's purpose: 'Send a formatted announcement message.' This specifies the verb ('send') and resource ('formatted announcement message'), making it immediately understandable. However, it doesn't distinguish this from sibling tools like 'send_message' or 'send_formatted_message' - all of which involve sending messages with different formatting or purposes.

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 provides no guidance on when to use this tool versus alternatives. With multiple sibling tools for sending messages (send_message, send_formatted_message, send_notification_message, etc.), there's no indication of what makes an 'announcement' different or when this specific tool should be selected over other message-sending options.

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

send_code_snippetB

Send a formatted code snippet message.

Args: channel: Channel ID or name title: Code snippet title code: The code content language: Programming language for syntax highlighting (optional) description: Optional description thread_ts: Thread timestamp for replies (optional)

ParametersJSON Schema
NameRequiredDescriptionDefault
channelYes
titleYes
codeYes
languageNo
descriptionNo
thread_tsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3/5.0
Behavior2/5

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

No annotations are provided, so the description carries full burden. While 'send' implies a write operation, the description doesn't disclose important behavioral aspects: whether this requires specific permissions, if it's rate-limited, whether messages are editable/deletable after sending, or what happens if the channel doesn't exist. It mentions formatting but doesn't explain what 'formatted' entails beyond syntax highlighting.

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

Conciseness3/5

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

The description is appropriately sized with a clear purpose statement followed by parameter documentation. However, the structure could be more front-loaded with usage context, and the parameter explanations are somewhat terse without examples. Every sentence serves a purpose, but the overall presentation could be more polished.

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?

Given the tool has an output schema (which handles return values), 0% schema description coverage, and no annotations, the description does an adequate job explaining parameters and basic purpose. However, for a messaging tool with multiple similar siblings and no behavioral context, it should provide more guidance on when to use it and what distinguishes it from other message-sending tools.

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?

With 0% schema description coverage, the description compensates well by explaining all 6 parameters in the Args section. It clarifies what each parameter represents (e.g., 'channel: Channel ID or name', 'language: Programming language for syntax highlighting'), adds semantic meaning about optionality, and distinguishes between required and optional parameters. The only gap is not explaining parameter formats or constraints.

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 clearly states the tool's purpose with a specific verb ('send') and resource ('formatted code snippet message'), making it immediately understandable. However, it doesn't explicitly differentiate from sibling tools like 'send_message' or 'send_formatted_message', which likely have overlapping functionality in the same messaging context.

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 provides no guidance on when to use this tool versus alternatives. With multiple sibling tools for sending messages (send_message, send_formatted_message, send_announcement, etc.), there's no indication of when a code snippet is preferred over other message types or what distinguishes this from general formatted messages.

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

send_formatted_messageC

Send a formatted message using Block Kit with common elements.

Args: channel: Channel ID or name title: Header text (optional) text: Main message text (optional) fields: Comma-separated fields for side-by-side display (optional) context: Context text at bottom (optional) thread_ts: Thread timestamp for replies (optional)

ParametersJSON Schema
NameRequiredDescriptionDefault
channelYes
titleNo
textNo
fieldsNo
contextNo
thread_tsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries full burden. While 'Send a formatted message' implies a write operation, it doesn't disclose important behavioral traits: whether this requires specific permissions, rate limits, what happens on failure, or what the response contains. The mention of 'Block Kit' provides some technical context but doesn't explain practical implications.

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 appropriately sized and well-structured: a clear purpose statement followed by a parameter list. Every sentence serves a purpose. It could be slightly more front-loaded with usage context, but overall it's efficient without wasted words.

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?

Given 6 parameters with 0% schema coverage and no annotations, but with an output schema present, the description provides basic parameter semantics but lacks behavioral context. For a message-sending tool with many alternatives, it should explain more about when to use it, what makes it unique, and practical considerations. The output schema reduces the need to describe return values.

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 0%, so the description must compensate. The Args section lists all 6 parameters with brief explanations, adding meaning beyond the bare schema. However, explanations are minimal (e.g., 'Channel ID or name' for channel, 'Header text' for title) and don't provide format details, constraints, or examples. The description covers all parameters but with limited depth.

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 clearly states the tool's purpose: 'Send a formatted message using Block Kit with common elements.' This specifies the action (send), resource (formatted message), and technology (Block Kit). However, it doesn't explicitly differentiate from sibling tools like send_message, send_interactive_message, or send_list_message, which all appear to send different types of messages.

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 provides no guidance on when to use this tool versus alternatives. With multiple sibling tools for sending messages (send_message, send_announcement, send_interactive_message, send_list_message, send_notification_message, send_code_snippet, send_form_message), there's no indication of what makes this tool distinct or when it's the appropriate choice.

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

send_form_messageB

Send a form-like message with a select menu.

Args: channel: Channel ID or name title: Form title description: Form description select_options: JSON string of select options [{"text": "Option 1", "value": "opt1"}] select_placeholder: Placeholder text for select menu select_action_id: Action ID for the select menu thread_ts: Thread timestamp for replies (optional)

ParametersJSON Schema
NameRequiredDescriptionDefault
channelYes
titleYes
descriptionYes
select_optionsYes
select_placeholderNoChoose an option
select_action_idNoform_select
thread_tsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior2/5

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 the tool sends a message but does not clarify if this is a read-only or mutative operation, what permissions are required, how errors are handled, or the expected response format. The description adds minimal behavioral context beyond the basic action.

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 appropriately sized and front-loaded with the core purpose in the first sentence. The parameter explanations are structured in a list format, making it easy to scan. While efficient, it could be slightly more concise by integrating the parameter details more seamlessly.

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?

Given the complexity of a 7-parameter tool with no annotations and 0% schema description coverage, the description does well on parameters but lacks behavioral context. The presence of an output schema reduces the need to explain return values, but gaps remain in usage guidelines and transparency, making it adequate but incomplete.

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 description coverage is 0%, so the description must compensate. It provides clear semantics for all 7 parameters, explaining their purposes (e.g., 'Channel ID or name', 'Form title', 'JSON string of select options'), including defaults and optionality. 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.

Purpose5/5

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

The description clearly states the specific action ('Send a form-like message with a select menu'), identifies the resource (a message in a channel), and distinguishes it from sibling tools like send_message, send_interactive_message, or send_formatted_message by specifying the form-like structure with a select menu.

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 provides no guidance on when to use this tool versus alternatives like send_message or send_interactive_message. It lacks context about prerequisites, such as channel access or permissions, and does not mention any exclusions or specific use cases.

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

send_interactive_messageC

Send an interactive message with buttons.

Args: channel: Channel ID or name title: Message title description: Message description buttons: JSON string of button configurations [{"text": "Button Text", "action_id": "action_1", "style": "primary"}] thread_ts: Thread timestamp for replies (optional)

ParametersJSON Schema
NameRequiredDescriptionDefault
channelYes
titleYes
descriptionYes
buttonsYes
thread_tsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

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 mentions that the tool sends a message with buttons, implying a write operation, but fails to address critical aspects such as required permissions, rate limits, error handling, or the interactive nature of the message (e.g., how button actions are handled). This leaves significant gaps in understanding the tool's 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 appropriately sized and front-loaded, starting with a clear purpose statement followed by a structured 'Args' section. Each sentence serves a purpose, with no redundant information. However, the formatting could be slightly improved for readability, such as using bullet points instead of a block of text.

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?

Given the tool's complexity (5 parameters, no annotations, 0% schema coverage, but has an output schema), the description is moderately complete. It covers the basic purpose and parameters, but lacks usage guidelines, behavioral details, and output information. The presence of an output schema reduces the need to describe return values, but overall, the description is adequate with clear gaps for a tool of this nature.

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?

The description includes an 'Args' section that lists all parameters with brief explanations, adding meaning beyond the input schema, which has 0% description coverage. For example, it clarifies that 'buttons' is a 'JSON string of button configurations' with an example, and 'thread_ts' is for 'Thread timestamp for replies (optional)'. However, it lacks details on parameter formats (e.g., channel ID vs. name), constraints, or examples for other parameters, leaving some ambiguity.

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 clearly states the tool's purpose: 'Send an interactive message with buttons.' This specifies the verb ('Send') and resource ('interactive message with buttons'), making it distinct from sibling tools like send_message or send_formatted_message. However, it doesn't explicitly differentiate from send_form_message or send_list_message, which might also involve interactive elements.

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 provides no guidance on when to use this tool versus alternatives like send_message, send_formatted_message, send_form_message, or send_list_message. It lacks context about appropriate scenarios, prerequisites, or exclusions, leaving the agent to infer usage based on the tool name alone.

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

send_list_messageB

Send a formatted list message.

Args: channel: Channel ID or name title: List title items: Newline or comma-separated list items description: Optional description text thread_ts: Thread timestamp for replies (optional)

ParametersJSON Schema
NameRequiredDescriptionDefault
channelYes
itemsYes
descriptionNo
thread_tsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior2/5

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 mentions the action 'send' but doesn't clarify permissions required, rate limits, whether it's idempotent, or what happens on failure. The output schema exists, but the description doesn't hint at return values or error conditions, leaving significant gaps for a mutation tool.

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 appropriately sized with a clear opening statement followed by parameter explanations. The Args section is structured but slightly redundant with the schema. Every sentence adds value, though the formatting could be more integrated with the main description for better flow.

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?

Given 4 parameters with 0% schema coverage and an output schema, the description provides good parameter semantics but lacks behavioral context for a mutation tool. It's adequate for basic use but doesn't cover permissions, errors, or sibling differentiation, leaving room for improvement in completeness.

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 description adds meaningful context for all parameters beyond the 0% schema coverage. It explains that 'channel' can be an ID or name, 'items' can be newline or comma-separated, and 'thread_ts' is for replies. This compensates well for the lack of schema descriptions, though it doesn't detail format constraints like length limits.

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 clearly states the verb 'send' and the resource 'formatted list message', making the purpose specific and understandable. It distinguishes itself from generic 'send_message' by specifying the list format, though it doesn't explicitly differentiate from other formatted message siblings like 'send_formatted_message' or 'send_announcement'.

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 is provided on when to use this tool versus alternatives like 'send_message', 'send_formatted_message', or 'send_announcement'. The description lacks context about appropriate scenarios, prerequisites, or exclusions, leaving the agent to infer usage from the tool name alone.

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

send_messageB

Send a message to a Slack channel.

Args: channel: Channel ID or name text: Message text (fallback text for notifications) thread_ts: Thread timestamp for replies blocks: JSON string of Block Kit blocks for rich formatting

ParametersJSON Schema
NameRequiredDescriptionDefault
channelYes
textYes
thread_tsNo
blocksNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden but lacks critical behavioral details. It doesn't mention permissions needed, rate limits, whether messages are editable/deletable, or what happens on success/failure. The 'fallback text' hint is minimal context, insufficient for a mutation tool with zero annotation coverage.

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 appropriately sized and front-loaded with the core purpose in the first sentence. The Args section is structured but slightly verbose; every sentence earns its place by explaining parameters, though it could be more streamlined (e.g., combining text and blocks explanations).

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?

Given complexity (mutation tool with 4 params, no annotations) and an output schema (which reduces need to explain returns), the description is moderately complete. It covers parameters well but lacks behavioral context and usage guidelines, making it adequate but with clear gaps for safe invocation.

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 description coverage is 0%, so the description must compensate. It adds meaningful semantics for all 4 parameters: channel ID/name, text as fallback, thread_ts for replies, and blocks as JSON string for rich formatting. This clarifies usage beyond basic schema types, though it could detail format constraints (e.g., channel naming).

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 clearly states the tool's purpose with a specific verb ('Send') and resource ('message to a Slack channel'), distinguishing it from siblings like send_announcement or send_formatted_message by focusing on basic message sending. It's not a tautology and provides meaningful context beyond the name.

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 provides no guidance on when to use this tool versus alternatives like send_formatted_message, send_interactive_message, or send_announcement. It mentions 'fallback text for notifications' but doesn't explain when this applies or what the alternatives are, leaving usage context unclear.

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

send_notification_messageB

Send a structured notification message with status indicator.

Args: channel: Channel ID or name status: Status type (success, warning, error, info) title: Notification title description: Main description details: Additional details (optional) thread_ts: Thread timestamp for replies (optional)

ParametersJSON Schema
NameRequiredDescriptionDefault
channelYes
statusYes
titleYes
descriptionYes
detailsNo
thread_tsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior2/5

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 mentions sending a notification with a status indicator, which implies a write operation, but doesn't cover critical aspects like permissions required, rate limits, whether the message is ephemeral or persistent, or how errors are handled. For a tool with no annotations, this leaves significant gaps in understanding its behavior.

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 efficiently structured: a clear purpose statement followed by a bulleted list of parameters with concise explanations. Every sentence earns its place, and the information is front-loaded with the core functionality. No wasted words or 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?

Given the tool's moderate complexity (6 parameters, no annotations, but with an output schema), the description is partially complete. It covers parameters well but lacks behavioral context and usage guidelines. The presence of an output schema means the description doesn't need to explain return values, but it should address other gaps like when to use this tool versus siblings.

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 description includes an 'Args' section that lists all 6 parameters with brief explanations, adding meaningful context beyond the input schema (which has 0% description coverage). It clarifies optional parameters (details, thread_ts) and provides examples for status values (success, warning, error, info). This compensates well for the lack of schema descriptions, though it could be more detailed on parameter formats or constraints.

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 clearly states the tool's purpose: 'Send a structured notification message with status indicator.' It specifies the verb ('send') and resource ('structured notification message'), and the mention of 'status indicator' adds useful detail. However, it doesn't explicitly differentiate this tool from similar sibling tools like send_message, send_formatted_message, or send_announcement, which prevents a perfect score.

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 provides no guidance on when to use this tool versus alternatives. With multiple sibling tools for sending messages (e.g., send_message, send_formatted_message, send_announcement), there's no indication of what makes this tool unique or when it's preferred. The description only lists parameters without contextual usage advice.

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

set_channel_purposeC

Set the purpose for a Slack channel.

Args: channel: Channel ID purpose: New purpose text

ParametersJSON Schema
NameRequiredDescriptionDefault
channelYes
purposeYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden for behavioral disclosure. While 'Set' implies a mutation operation, it doesn't specify required permissions, rate limits, whether the change is reversible, or what happens if the purpose exceeds length limits. For a write operation with zero annotation coverage, this is insufficient.

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 appropriately sized with a clear main statement followed by parameter documentation. The two-sentence structure is efficient, though the Args section formatting could be more integrated with the main description text.

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?

Given that there's an output schema (which handles return values), no annotations, and only 2 parameters, the description is minimally adequate. However, for a mutation tool that changes channel properties, it should provide more context about permissions, constraints, and how this differs from similar tools like set_channel_topic.

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 0%, but the description explicitly documents both parameters ('channel' and 'purpose') with brief explanations. However, it doesn't provide format details (e.g., channel ID format, purpose text constraints) or examples that would help the agent use them correctly.

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 clearly states the verb 'Set' and the resource 'purpose for a Slack channel', making the tool's function immediately understandable. However, it doesn't differentiate from its sibling tool 'set_channel_topic', which performs a similar operation on a different channel attribute.

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 provides no guidance on when to use this tool versus alternatives like 'set_channel_topic' or when channel purpose updates are appropriate. It lacks context about permissions, prerequisites, or typical use cases for setting channel purposes.

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

set_channel_topicB

Set the topic for a Slack channel.

Args: channel: Channel ID topic: New topic text

ParametersJSON Schema
NameRequiredDescriptionDefault
channelYes
topicYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden for behavioral disclosure. While 'Set' implies a mutation operation, it doesn't specify whether this requires admin permissions, what happens if the channel is archived, whether the change is reversible, or any rate limits. The description provides minimal behavioral context beyond the basic action.

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 extremely efficient with zero wasted words. The main purpose is stated in the first sentence, followed by a clean parameter breakdown. Every sentence serves a clear purpose, making it easy to parse quickly.

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?

Given that this is a mutation tool with no annotations but with an output schema, the description provides the minimum viable information about what the tool does. However, for a tool that modifies channel state, it should ideally include more about permissions, constraints, or error conditions to be fully complete.

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?

With 0% schema description coverage, the description provides essential parameter information that compensates for the schema gap. It clearly identifies both required parameters ('channel' and 'topic') and provides basic semantic meaning ('Channel ID' and 'New topic text'), though it could elaborate on format constraints or examples.

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 clearly states the action ('Set the topic') and resource ('for a Slack channel'), making the purpose immediately understandable. However, it doesn't differentiate from sibling tools like 'set_channel_purpose' or explain how this differs from other channel modification tools.

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 is provided about when to use this tool versus alternatives like 'set_channel_purpose' or other channel management tools. The description lacks any context about prerequisites, permissions needed, or situations where this tool is appropriate versus other channel operations.

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

unarchive_channelC

Unarchive a Slack channel.

Args: channel: Channel ID to unarchive

ParametersJSON Schema
NameRequiredDescriptionDefault
channelYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden but only states the action without behavioral details. It doesn't disclose permissions needed, side effects (e.g., channel becoming active again), rate limits, or error conditions, which are critical for a mutation tool like this.

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 front-loaded with the main action and uses a clear two-sentence structure. It's efficient with minimal waste, though the parameter explanation could be integrated more smoothly rather than as a separate 'Args:' section.

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?

Given the tool's complexity (simple mutation), lack of annotations, and presence of an output schema, the description is minimally adequate but incomplete. It covers the basic action and parameter but misses behavioral context and usage guidelines, which are important for safe operation.

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 0%, but the description adds the parameter 'channel' with a brief explanation ('Channel ID to unarchive'), providing basic semantics beyond the schema. However, it doesn't specify format (e.g., ID format examples) or constraints, leaving gaps in parameter understanding.

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 clearly states the action ('Unarchive') and resource ('a Slack channel'), making the purpose immediately understandable. It distinguishes from sibling 'archive_channel' by specifying the opposite operation, though it doesn't explicitly mention other related tools like 'create_channel' or 'list_channels'.

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 is provided on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., channel must be archived first), constraints (e.g., permissions required), or related tools like 'archive_channel' for context, leaving usage unclear beyond the basic action.

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

update_messageC

Update an existing Slack message.

Args: channel: Channel ID where the message exists ts: Timestamp of the message to update text: New message text (fallback text for notifications) blocks: JSON string of Block Kit blocks for rich formatting

ParametersJSON Schema
NameRequiredDescriptionDefault
channelYes
tsYes
textYes
blocksNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

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 the tool updates a message but lacks details on permissions required (e.g., if the user must be the original poster), whether edits are reversible, rate limits, or what the output contains (though an output schema exists). The description is minimal and doesn't compensate for the missing annotations.

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 appropriately sized and front-loaded: the first sentence states the purpose clearly. The 'Args' section is structured but could be more integrated. There's minimal waste, though it could be slightly more concise by merging the purpose and parameter explanations into a smoother flow.

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?

Given the tool's moderate complexity (4 parameters, no annotations, but with an output schema), the description is somewhat complete but has gaps. It covers the basic action and parameter hints, but lacks behavioral context and usage guidelines. The output schema mitigates the need to explain return values, but overall, it's adequate with clear room for improvement.

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 0%, so the description must compensate. It adds some semantics by explaining 'text' as 'New message text (fallback text for notifications)' and 'blocks' as 'JSON string of Block Kit blocks for rich formatting,' which clarifies beyond the schema's basic types. However, it doesn't explain 'channel' or 'ts' (timestamp format), leaving two parameters with no semantic context, resulting in partial compensation.

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 clearly states the tool's purpose: 'Update an existing Slack message.' It specifies the verb ('update') and resource ('Slack message'), making the action unambiguous. However, it doesn't explicitly differentiate from sibling tools like 'edit_message' (if such existed) or explain how it differs from 'send_message' for modifications.

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 provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., needing message ownership or permissions), compare it to sibling tools like 'delete_message' or 'send_message' for corrections, or specify scenarios where updating is preferred over deleting and resending. Usage is implied but not articulated.

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

upload_fileC

Upload a file to one or more Slack channels.

Args: channels: Comma-separated list of channel IDs content: File content as text filename: Name for the file title: Title of the file initial_comment: Initial comment for the file

ParametersJSON Schema
NameRequiredDescriptionDefault
channelsYes
contentYes
filenameYes
titleNo
initial_commentNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries full burden. It mentions uploading to channels but doesn't disclose critical behavioral traits: required permissions (e.g., upload files in Slack), rate limits, file size restrictions, supported file types, whether it overwrites existing files, or what happens on failure. For a mutation tool with zero annotation coverage, this is a significant gap in transparency.

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 appropriately sized and front-loaded with the core purpose in the first sentence, followed by a structured parameter list. Every sentence earns its place by clarifying inputs, though it could be more concise by integrating parameter details into the main text or using bullet points for better readability.

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?

Given complexity (a mutation tool with 5 parameters, no annotations, but with an output schema), the description is moderately complete. It covers the basic purpose and parameters, but lacks behavioral context (e.g., permissions, limits) and usage guidance. The presence of an output schema means return values don't need explanation, but other gaps remain for effective tool selection and invocation.

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 0%, so the description must compensate. It lists all 5 parameters with brief explanations (e.g., 'channels: Comma-separated list of channel IDs'), which adds meaning beyond the bare schema. However, it doesn't provide format details (e.g., channel ID format, filename extensions), constraints (e.g., max length for content), or examples, leaving some ambiguity for practical use.

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 clearly states the action ('Upload a file') and target ('to one or more Slack channels'), which is specific and unambiguous. However, it doesn't differentiate from sibling tools like 'send_message' or 'send_formatted_message' that might also involve file sharing or content delivery, leaving some room for confusion about when to choose this specific file upload method.

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 is provided on when to use this tool versus alternatives. With siblings like 'send_message' (which might support attachments) and 'send_formatted_message', the description doesn't clarify if this is the primary method for file uploads, if it's for bulk uploads to multiple channels, or if it has specific use cases like sharing text files versus other content types.

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. Dates show when Glama detected each change.

  1. 26 tool updatesv1.0.0
    • Changedadd_reaction5 fields changed
      • removedInput schema / properties / channel / title
        Removed value: -"Channel"
      • removedInput schema / properties / emoji_name / title
        Removed value: -"Emoji Name"
      • removedInput schema / properties / timestamp / title
        Removed value: -"Timestamp"
      • removedOutput schema / properties / result / title
        Removed value: -"Result"
      • removedOutput schema / title
        Removed value: -"_WrappedResult"
    • Changedarchive_channel3 fields changed
      • removedInput schema / properties / channel / title
        Removed value: -"Channel"
      • removedOutput schema / properties / result / title
        Removed value: -"Result"
      • removedOutput schema / title
        Removed value: -"_WrappedResult"
    • Changedcreate_channel4 fields changed
      • removedInput schema / properties / is_private / title
        Removed value: -"Is Private"
      • removedInput schema / properties / name / title
        Removed value: -"Name"
      • removedOutput schema / properties / result / title
        Removed value: -"Result"
      • removedOutput schema / title
        Removed value: -"_WrappedResult"
    • Changeddelete_message4 fields changed
      • removedInput schema / properties / channel / title
        Removed value: -"Channel"
      • removedInput schema / properties / ts / title
        Removed value: -"Ts"
      • removedOutput schema / properties / result / title
        Removed value: -"Result"
      • removedOutput schema / title
        Removed value: -"_WrappedResult"
    • Changedget_channel_history6 fields changed
      • removedInput schema / properties / channel / title
        Removed value: -"Channel"
      • removedInput schema / properties / latest / title
        Removed value: -"Latest"
      • removedInput schema / properties / limit / title
        Removed value: -"Limit"
      • removedInput schema / properties / oldest / title
        Removed value: -"Oldest"
      • removedOutput schema / properties / result / title
        Removed value: -"Result"
      • removedOutput schema / title
        Removed value: -"_WrappedResult"
    • Changedget_channel_info3 fields changed
      • removedInput schema / properties / channel_id / title
        Removed value: -"Channel Id"
      • removedOutput schema / properties / result / title
        Removed value: -"Result"
      • removedOutput schema / title
        Removed value: -"_WrappedResult"
    • Changedget_team_info2 fields changed
      • removedOutput schema / properties / result / title
        Removed value: -"Result"
      • removedOutput schema / title
        Removed value: -"_WrappedResult"
    • Changedget_user_info3 fields changed
      • removedInput schema / properties / user_id / title
        Removed value: -"User Id"
      • removedOutput schema / properties / result / title
        Removed value: -"Result"
      • removedOutput schema / title
        Removed value: -"_WrappedResult"
    • Changedinvite_to_channel4 fields changed
      • removedInput schema / properties / channel / title
        Removed value: -"Channel"
      • removedInput schema / properties / users / title
        Removed value: -"Users"
      • removedOutput schema / properties / result / title
        Removed value: -"Result"
      • removedOutput schema / title
        Removed value: -"_WrappedResult"
    • Changedlist_channels5 fields changed
      • removedInput schema / properties / exclude_archived / title
        Removed value: -"Exclude Archived"
      • removedInput schema / properties / limit / title
        Removed value: -"Limit"
      • removedInput schema / properties / types / title
        Removed value: -"Types"
      • removedOutput schema / properties / result / title
        Removed value: -"Result"
      • removedOutput schema / title
        Removed value: -"_WrappedResult"
    • Changedlist_users4 fields changed
      • removedInput schema / properties / include_locale / title
        Removed value: -"Include Locale"
      • removedInput schema / properties / limit / title
        Removed value: -"Limit"
      • removedOutput schema / properties / result / title
        Removed value: -"Result"
      • removedOutput schema / title
        Removed value: -"_WrappedResult"
    • Changedremove_reaction5 fields changed
      • removedInput schema / properties / channel / title
        Removed value: -"Channel"
      • removedInput schema / properties / emoji_name / title
        Removed value: -"Emoji Name"
      • removedInput schema / properties / timestamp / title
        Removed value: -"Timestamp"
      • removedOutput schema / properties / result / title
        Removed value: -"Result"
      • removedOutput schema / title
        Removed value: -"_WrappedResult"
    • Changedsearch_messages6 fields changed
      • removedInput schema / properties / count / title
        Removed value: -"Count"
      • removedInput schema / properties / query / title
        Removed value: -"Query"
      • removedInput schema / properties / sort / title
        Removed value: -"Sort"
      • removedInput schema / properties / sort_dir / title
        Removed value: -"Sort Dir"
      • removedOutput schema / properties / result / title
        Removed value: -"Result"
      • removedOutput schema / title
        Removed value: -"_WrappedResult"
    • Changedsend_announcement8 fields changed
      • removedInput schema / properties / author / title
        Removed value: -"Author"
      • removedInput schema / properties / channel / title
        Removed value: -"Channel"
      • removedInput schema / properties / message / title
        Removed value: -"Message"
      • removedInput schema / properties / thread_ts / title
        Removed value: -"Thread Ts"
      • removedInput schema / properties / timestamp / title
        Removed value: -"Timestamp"
      • removedInput schema / properties / title / title
        Removed value: -"Title"
      • removedOutput schema / properties / result / title
        Removed value: -"Result"
      • removedOutput schema / title
        Removed value: -"_WrappedResult"
    • Changedsend_code_snippet8 fields changed
      • removedInput schema / properties / channel / title
        Removed value: -"Channel"
      • removedInput schema / properties / code / title
        Removed value: -"Code"
      • removedInput schema / properties / description / title
        Removed value: -"Description"
      • removedInput schema / properties / language / title
        Removed value: -"Language"
      • removedInput schema / properties / thread_ts / title
        Removed value: -"Thread Ts"
      • removedInput schema / properties / title / title
        Removed value: -"Title"
      • removedOutput schema / properties / result / title
        Removed value: -"Result"
      • removedOutput schema / title
        Removed value: -"_WrappedResult"
    • Changedsend_form_message9 fields changed
      • removedInput schema / properties / channel / title
        Removed value: -"Channel"
      • removedInput schema / properties / description / title
        Removed value: -"Description"
      • removedInput schema / properties / select_action_id / title
        Removed value: -"Select Action Id"
      • removedInput schema / properties / select_options / title
        Removed value: -"Select Options"
      • removedInput schema / properties / select_placeholder / title
        Removed value: -"Select Placeholder"
      • removedInput schema / properties / thread_ts / title
        Removed value: -"Thread Ts"
      • removedInput schema / properties / title / title
        Removed value: -"Title"
      • removedOutput schema / properties / result / title
        Removed value: -"Result"
      • removedOutput schema / title
        Removed value: -"_WrappedResult"
    • Changedsend_formatted_message8 fields changed
      • removedInput schema / properties / channel / title
        Removed value: -"Channel"
      • removedInput schema / properties / context / title
        Removed value: -"Context"
      • removedInput schema / properties / fields / title
        Removed value: -"Fields"
      • removedInput schema / properties / text / title
        Removed value: -"Text"
      • removedInput schema / properties / thread_ts / title
        Removed value: -"Thread Ts"
      • removedInput schema / properties / title / title
        Removed value: -"Title"
      • removedOutput schema / properties / result / title
        Removed value: -"Result"
      • removedOutput schema / title
        Removed value: -"_WrappedResult"
    • Changedsend_interactive_message7 fields changed
      • removedInput schema / properties / buttons / title
        Removed value: -"Buttons"
      • removedInput schema / properties / channel / title
        Removed value: -"Channel"
      • removedInput schema / properties / description / title
        Removed value: -"Description"
      • removedInput schema / properties / thread_ts / title
        Removed value: -"Thread Ts"
      • removedInput schema / properties / title / title
        Removed value: -"Title"
      • removedOutput schema / properties / result / title
        Removed value: -"Result"
      • removedOutput schema / title
        Removed value: -"_WrappedResult"
    • Changedsend_list_message7 fields changed
      • removedInput schema / properties / channel / title
        Removed value: -"Channel"
      • removedInput schema / properties / description / title
        Removed value: -"Description"
      • removedInput schema / properties / items / title
        Removed value: -"Items"
      • removedInput schema / properties / thread_ts / title
        Removed value: -"Thread Ts"
      • removedInput schema / properties / title
        Removed value: -{
        -  "title": "Title",
        -  "type": "string"
        -}
      • removedOutput schema / properties / result / title
        Removed value: -"Result"
      • removedOutput schema / title
        Removed value: -"_WrappedResult"
    • Changedsend_message6 fields changed
      • removedInput schema / properties / blocks / title
        Removed value: -"Blocks"
      • removedInput schema / properties / channel / title
        Removed value: -"Channel"
      • removedInput schema / properties / text / title
        Removed value: -"Text"
      • removedInput schema / properties / thread_ts / title
        Removed value: -"Thread Ts"
      • removedOutput schema / properties / result / title
        Removed value: -"Result"
      • removedOutput schema / title
        Removed value: -"_WrappedResult"
    • Changedsend_notification_message8 fields changed
      • removedInput schema / properties / channel / title
        Removed value: -"Channel"
      • removedInput schema / properties / description / title
        Removed value: -"Description"
      • removedInput schema / properties / details / title
        Removed value: -"Details"
      • removedInput schema / properties / status / title
        Removed value: -"Status"
      • removedInput schema / properties / thread_ts / title
        Removed value: -"Thread Ts"
      • removedInput schema / properties / title / title
        Removed value: -"Title"
      • removedOutput schema / properties / result / title
        Removed value: -"Result"
      • removedOutput schema / title
        Removed value: -"_WrappedResult"
    • Changedset_channel_purpose4 fields changed
      • removedInput schema / properties / channel / title
        Removed value: -"Channel"
      • removedInput schema / properties / purpose / title
        Removed value: -"Purpose"
      • removedOutput schema / properties / result / title
        Removed value: -"Result"
      • removedOutput schema / title
        Removed value: -"_WrappedResult"
    • Changedset_channel_topic4 fields changed
      • removedInput schema / properties / channel / title
        Removed value: -"Channel"
      • removedInput schema / properties / topic / title
        Removed value: -"Topic"
      • removedOutput schema / properties / result / title
        Removed value: -"Result"
      • removedOutput schema / title
        Removed value: -"_WrappedResult"
    • Changedunarchive_channel3 fields changed
      • removedInput schema / properties / channel / title
        Removed value: -"Channel"
      • removedOutput schema / properties / result / title
        Removed value: -"Result"
      • removedOutput schema / title
        Removed value: -"_WrappedResult"
    • Changedupdate_message6 fields changed
      • removedInput schema / properties / blocks / title
        Removed value: -"Blocks"
      • removedInput schema / properties / channel / title
        Removed value: -"Channel"
      • removedInput schema / properties / text / title
        Removed value: -"Text"
      • removedInput schema / properties / ts / title
        Removed value: -"Ts"
      • removedOutput schema / properties / result / title
        Removed value: -"Result"
      • removedOutput schema / title
        Removed value: -"_WrappedResult"
    • Changedupload_file7 fields changed
      • removedInput schema / properties / channels / title
        Removed value: -"Channels"
      • removedInput schema / properties / content / title
        Removed value: -"Content"
      • removedInput schema / properties / filename / title
        Removed value: -"Filename"
      • removedInput schema / properties / initial_comment / title
        Removed value: -"Initial Comment"
      • removedInput schema / properties / title / title
        Removed value: -"Title"
      • removedOutput schema / properties / result / title
        Removed value: -"Result"
      • removedOutput schema / title
        Removed value: -"_WrappedResult"
  2. 26 tool updates
    • First observedadd_reaction
    • First observedarchive_channel
    • First observedcreate_channel
    • First observeddelete_message
    • First observedget_channel_history
    • First observedget_channel_info
    • First observedget_team_info
    • First observedget_user_info
    • First observedinvite_to_channel
    • First observedlist_channels
    • First observedlist_users
    • First observedremove_reaction
    • First observedsearch_messages
    • First observedsend_announcement
    • First observedsend_code_snippet
    • First observedsend_form_message
    • First observedsend_formatted_message
    • First observedsend_interactive_message
    • First observedsend_list_message
    • First observedsend_message
    • First observedsend_notification_message
    • First observedset_channel_purpose
    • First observedset_channel_topic
    • First observedunarchive_channel
    • First observedupdate_message
    • First observedupload_file

TDQS

B3.4/5.0
Disambiguation4/5

Most tools have distinct purposes, but there is some overlap among message-sending tools (send_message, send_formatted_message, send_notification_message, etc.) that could cause confusion. However, their descriptions clarify specific use cases, preventing major misselection.

Naming Consistency5/5

Tool names follow a consistent snake_case verb_noun pattern throughout (e.g., add_reaction, archive_channel, create_channel). All tools adhere to this convention, making them predictable and readable.

Tool Count3/5

With 26 tools, the count is borderline high for a Slack server, as it includes many specialized message-sending variants. While comprehensive, it may feel heavy compared to typical MCP servers, which often have 3-15 tools for well-scoped purposes.

Completeness5/5

The tool set provides complete coverage for Slack interactions, including channel management (create, archive, unarchive, set purpose/topic), user and channel info retrieval, message handling (send, update, delete, search, history), reactions, file uploads, and invitations. No obvious gaps exist for core workflows.

Maintenance

ActivityInactive
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    Enables interaction with Slack workspaces as a user, supporting channel listing, message posting, threading, reactions, and user management via the Slack API.
    8
    11
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables comprehensive Slack workspace automation and management through the Slack API. Supports messaging, channel management, analytics, file uploads, polls, user management, and advanced features like scheduled messages and bulk operations.
    24,316
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables interaction with Slack workspaces through comprehensive integration capabilities. Supports channel management, messaging, thread replies, reactions, and message history retrieval through natural language commands.
    54
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/piekstra/slack-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server