Skip to main content
Glama
bcharleson

Slack MCP Server

by bcharleson

Slack Agent CLI

A CLI and Model Context Protocol (MCP) server for Slack API integration. Use slack from the terminal for scripting and agent workflows, or slack mcp for AI assistant integration via stdio MCP.

AI agents: See AGENTS.md for install, auth, all commands, MCP tool names, and workflow examples.

Features

Channel Management

  • List all accessible channels (public/private)

  • Get channel information and details

  • Create new channels

  • Archive channels

  • Join/leave channels

  • Set channel topics

  • Fetch channel message history

Messaging

  • Post messages to channels

  • Reply to message threads

  • Update and delete messages

  • Add and remove emoji reactions

  • Get message reactions

Direct Messages (DMs)

  • Send direct messages to users

  • List DM and group DM conversations

  • Fetch DM conversation history

  • Open new DM conversations

Search (requires User Token)

  • Search messages across the workspace

  • Search files

  • Combined search for messages and files

User Management

  • List workspace users

  • Get user profile information

  • Check user presence/online status

  • Look up users by email

  • Get bot and team information

Related MCP server: Slack MCP Server

Prerequisites

  • Python 3.10 or higher

  • A Slack workspace with admin access to create apps

  • Slack Bot Token (xoxb-...) for most operations

  • Slack User Token (xoxp-...) for search functionality

Installation

Requires Node.js 18+ and Python 3.10+.

npm install -g slack-agent-cli
slack --version

MCP via global install:

slack mcp

From source (Python)

1. Clone the Repository

git clone https://github.com/bcharleson/slack-agent-cli.git
cd slack-agent-cli

2. Create Virtual Environment

python3.12 -m venv venv
source venv/bin/activate  # On Windows: venv\Scripts\activate

3. Install Dependencies

pip install -e .

Or install from requirements:

pip install -r requirements.txt

Slack App Setup

1. Create a Slack App

  1. Go to Slack API Apps

  2. Click "Create New App" → "From scratch"

  3. Name your app and select your workspace

2. Configure Bot Token Scopes

Navigate to OAuth & Permissions and add these Bot Token Scopes:

Channels

  • channels:read - View basic channel info

  • channels:write - Manage public channels

  • channels:history - View messages in public channels

  • groups:read - View private channels

  • groups:write - Manage private channels

  • groups:history - View messages in private channels

Messaging

  • chat:write - Send messages

  • reactions:read - View reactions

  • reactions:write - Add reactions

Direct Messages

  • im:read - View DM info

  • im:write - Start DMs

  • im:history - View DM history

  • mpim:read - View group DM info

  • mpim:write - Start group DMs

  • mpim:history - View group DM history

Users

  • users:read - View users

  • users:read.email - View user emails

If you need search functionality, add these User Token Scopes:

  • search:read - Search messages and files

4. Install the App

  1. Click "Install to Workspace"

  2. Authorize the app

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

  4. If using search, also copy the User OAuth Token (starts with xoxp-)

Configuration

Environment Variables

Create a .env file in the project root:

# Required: Bot Token for most operations
SLACK_BOT_TOKEN=xoxb-your-bot-token-here

# Optional: User Token for search functionality
SLACK_USER_TOKEN=xoxp-your-user-token-here

You can copy the example file:

cp .env.example .env
# Then edit .env with your tokens

Usage

CLI

After installation, the slack command exposes grouped subcommands that mirror the MCP tools:

# Channels
slack channels list
slack channels info C01234567
slack channels history C01234567 --limit 10

# Messages
slack messages post C01234567 "Hello from the CLI"
slack messages reply C01234567 1710000000.000100 "Thread reply"

# DMs
slack dms send U01234567 "Quick note from CLI"
slack dms list

# Search (requires SLACK_USER_TOKEN)
slack search messages "project update in:#general"

# Users / workspace
slack users list
slack users lookup brandon@example.com
slack workspace team

# Output formatting
slack --pretty channels list
slack --output json --quiet channels list

Global options:

  • --bot-token / SLACK_BOT_TOKEN

  • --user-token / SLACK_USER_TOKEN

  • --output json|pretty (default: json)

  • --pretty shorthand

  • --quiet for exit-code-only automation

MCP server

Start the stdio MCP server:

slack mcp
# or
slack-agent-cli mcp

Running the Server (development)

source venv/bin/activate
python -m slack_agent_cli.cli mcp

Claude Desktop Configuration

Add to your Claude Desktop configuration file:

macOS: ~/Library/Application Support/Claude/claude_desktop_config.json Windows: %APPDATA%\Claude\claude_desktop_config.json

{
  "mcpServers": {
    "slack": {
      "command": "/path/to/slack-agent-cli/venv/bin/python",
      "args": ["-m", "slack_agent_cli"],
      "cwd": "/path/to/slack-agent-cli",
      "env": {
        "SLACK_BOT_TOKEN": "xoxb-your-bot-token",
        "SLACK_USER_TOKEN": "xoxp-your-user-token"
      }
    }
  }
}

Replace /path/to/slack-agent-cli with the actual path to your installation.

Cursor IDE Configuration

Add to your Cursor MCP settings (~/.cursor/mcp.json):

{
  "mcpServers": {
    "slack-agent-cli": {
      "command": "slack",
      "args": ["mcp"],
      "env": {
        "SLACK_BOT_TOKEN": "xoxb-your-bot-token",
        "SLACK_USER_TOKEN": "xoxp-your-user-token"
      }
    }
  }
}

Or with a global install:

{
  "mcpServers": {
    "slack-agent-cli": {
      "command": "slack",
      "args": ["mcp"],
      "env": {
        "SLACK_BOT_TOKEN": "xoxb-your-bot-token",
        "SLACK_USER_TOKEN": "xoxp-your-user-token"
      }
    }
  }
}

Available Tools

Channel Tools

Tool

Description

list_channels

List all accessible channels

get_channel_info

Get details about a specific channel

create_channel

Create a new channel

archive_channel

Archive a channel

get_channel_history

Fetch message history

join_channel

Join a channel

leave_channel

Leave a channel

set_channel_topic

Set channel topic

Message Tools

Tool

Description

post_message

Post a message to a channel

reply_to_thread

Reply in a thread

get_thread_replies

Get all replies in a thread

add_reaction

Add emoji reaction

remove_reaction

Remove emoji reaction

get_message_reactions

Get reactions on a message

update_message

Update an existing message

delete_message

Delete a message

DM Tools

Tool

Description

send_dm

Send a direct message

list_conversations

List DM conversations

get_dm_history

Fetch DM history

open_dm

Open a DM conversation

Search Tools (requires User Token)

Tool

Description

search_messages

Search messages

search_files

Search files

search_all

Search both messages and files

User Tools

Tool

Description

list_users

List workspace users

get_user_info

Get user details

get_user_presence

Check if user is online

lookup_user_by_email

Find user by email

get_user_profile

Get detailed profile

get_bot_info

Get bot identity

get_team_info

Get workspace info

Testing

Using MCP Inspector

npx @modelcontextprotocol/inspector python -m slack_agent_cli

This opens a web interface to test all available tools interactively.

Manual Testing

  1. Start the server

  2. Use Claude Desktop or another MCP client

  3. Try basic commands:

    • "List all channels in the workspace"

    • "Get the history of #general channel"

    • "Send a message to #test-channel saying Hello!"

Troubleshooting

"SLACK_BOT_TOKEN is not set"

Ensure your .env file exists and contains the token, or set it in your MCP client configuration.

"Search requires a User Token"

Search operations require a User Token (SLACK_USER_TOKEN). Add User Token scopes to your Slack app and include the token.

"channel_not_found"

The bot may not have access to the channel. Ensure:

  1. The channel exists

  2. The bot is a member of private channels

  3. The channel ID is correct (use list_channels to find IDs)

"missing_scope"

Your Slack app is missing required permissions. Check the OAuth scopes section above and add the missing scopes in your Slack app settings.

Development

Project Structure

slack-agent-cli/
├── src/
│   └── slack_agent_cli/
│       ├── cli/
│       │   └── main.py            # Click CLI + `slack mcp`
│       ├── core/
│       │   └── output.py          # JSON/pretty output helpers
│       ├── operations/            # Shared handlers for CLI + MCP
│       │   ├── channels.py
│       │   ├── messages.py
│       │   ├── search.py
│       │   └── users.py
│       ├── tools/                   # MCP tool registration
│       ├── utils/
│       │   └── slack_client.py
│       └── server.py              # FastMCP stdio server
├── pyproject.toml
├── package.json
├── AGENTS.md                      # AI agent guide (commands, MCP, workflows)
├── requirements.txt
├── .env.example
└── README.md

Adding New Tools

  1. Create or edit a file in src/slack_agent_cli/tools/

  2. Define tools using the @mcp.tool() decorator

  3. Register the tools in the server by calling the registration function

License

MIT License

Contributing

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

Available Tools

30 tools
add_reactionA
    Add an emoji reaction to a message.

    Args:
        channel_id: The ID of the channel containing the message (e.g., "C01234567")
        timestamp: The timestamp of the message to react to
        emoji: The emoji name without colons (e.g., "thumbsup", "heart", "rocket")

    Returns:
        Dictionary indicating success or error
    
ParametersJSON Schema
NameRequiredDescriptionDefault
channel_idYes
timestampYes
emojiYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/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 ('Add an emoji reaction') but doesn't disclose behavioral traits like whether this requires specific permissions, if there are rate limits, what happens if the reaction already exists, or what the success/error dictionary contains. 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.

Conciseness5/5

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

The description is well-structured and front-loaded with the core purpose in the first sentence. The Args and Returns sections are clearly labeled, with each parameter explanation being concise and relevant. Every sentence earns its place with no wasted words.

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 moderate complexity (3 parameters, mutation operation) and the presence of an output schema (which covers return values), the description is reasonably complete. It explains all parameters well and states the return type. However, for a mutation tool with no annotations, it could benefit from more behavioral context about permissions 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?

Schema description coverage is 0%, so the description must compensate. It provides clear semantic explanations for all three parameters: 'channel_id' (ID of channel containing message), 'timestamp' (timestamp of message to react to), and 'emoji' (emoji name without colons with examples). This adds substantial value beyond the bare schema, though it doesn't cover all possible edge cases.

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 an emoji reaction') and target resource ('to a message'), distinguishing it from sibling tools like 'remove_reaction' (which removes reactions) and 'post_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 through the parameter explanations (e.g., reacting to a specific message in a channel), but doesn't explicitly state when to use this tool versus alternatives like 'remove_reaction' or when not to use it (e.g., if the message doesn't exist). No explicit guidance on prerequisites or alternatives is provided.

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

archive_channelA
    Archive a Slack channel.

    Args:
        channel_id: The ID of the channel to archive (e.g., "C01234567")

    Returns:
        Dictionary indicating success or error
    
ParametersJSON Schema
NameRequiredDescriptionDefault
channel_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/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 it states the action ('Archive'), it doesn't describe what archiving entails (e.g., channel becomes read-only, disappears from lists), permission requirements, whether it's reversible, or rate limits. The description mentions a return dictionary but gives no details about its structure or error conditions.

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

Conciseness5/5

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

The description is perfectly structured with a clear purpose statement followed by Args and Returns sections. Every sentence earns its place, and the information is front-loaded with the core functionality stated first. 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 this is a destructive mutation tool with no annotations, the description is minimally adequate but incomplete. While it states the purpose and documents the parameter, it lacks crucial behavioral context about permissions, consequences, and error handling. The existence of an output schema helps, but the description should do more to explain what archiving entails in this system.

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 a clear explanation of the single parameter ('channel_id') with an example format ('C01234567'), adding meaningful context beyond the schema's 0% description coverage. Since there's only one parameter, the description effectively documents it, though it could mention where to find channel IDs or validation rules.

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 ('Archive') and target resource ('a Slack channel'), distinguishing it from siblings like 'create_channel' or 'list_channels'. It provides a complete verb+resource statement that leaves no ambiguity about what the tool does.

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

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 admin permissions), consequences of archiving, or when to choose archiving over other channel management options. The agent must 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.

create_channelA
    Create a new Slack channel.

    Args:
        name: Name for the new channel (max 80 chars, lowercase,
              no spaces, use hyphens instead)
        is_private: Whether to create a private channel. Default: False

    Returns:
        Dictionary containing the created channel's details
    
ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
is_privateNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/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 ('Create a new Slack channel') and return type ('Dictionary containing the created channel's details'), but lacks details on permissions needed, rate limits, error conditions, or whether the operation is idempotent. This is a significant gap 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 appropriately sized and front-loaded: the first sentence states the purpose clearly, followed by structured 'Args' and 'Returns' sections. Every sentence adds value without redundancy, making it efficient and easy to parse.

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 moderate complexity (2 parameters, mutation operation) and the presence of an output schema (which handles return values), the description is fairly complete. It covers parameter semantics well but lacks behavioral context like permissions or error handling, which is partially mitigated by the output schema.

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 semantics beyond the input schema, which has 0% coverage. It explains that 'name' has constraints (max 80 chars, lowercase, no spaces, use hyphens) and clarifies 'is_private' as 'Whether to create a private channel' with a default value. This compensates well for the schema's lack of descriptions.

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 verb ('Create') and resource ('new Slack channel'), making the purpose specific and unambiguous. It distinguishes this tool from siblings like 'archive_channel', 'join_channel', or 'set_channel_topic' by focusing on creation rather than modification or querying.

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 whether to use this for public vs. private channels in relation to other tools like 'list_channels' or 'open_dm', nor does it specify prerequisites (e.g., required permissions or workspace context).

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

delete_messageB
    Delete a message from a channel.

    Args:
        channel_id: The ID of the channel containing the message (e.g., "C01234567")
        timestamp: The timestamp of the message to delete

    Returns:
        Dictionary indicating success or error
    
ParametersJSON Schema
NameRequiredDescriptionDefault
channel_idYes
timestampYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the tool performs a deletion (implying a destructive, irreversible mutation) but doesn't mention critical behavioral traits like required permissions, rate limits, whether it works only for the bot's own messages or any message, or what specific error conditions might occur. The return value description is vague ('Dictionary indicating success or error'), lacking detail on structure or common outcomes.

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 and Returns sections are structured for clarity, though the return description could be more specific. There's minimal wasted text, but the formatting with quotes and indentation slightly reduces 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 the tool's complexity (destructive operation with 2 parameters), lack of annotations, and presence of an output schema (though unspecified in detail), the description is moderately complete. It covers the basic purpose and parameters but lacks behavioral context like permissions or error handling. The output schema existence means return values don't need full explanation in the description, but more guidance on usage and risks would improve 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 semantics beyond the input schema, which has 0% description coverage. It explains that 'channel_id' identifies the channel containing the message and provides an example format ('C01234567'), and clarifies that 'timestamp' specifies which message to delete. This compensates well for the schema's lack of descriptions, though it doesn't detail the timestamp format (e.g., Unix time or Slack timestamp).

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 ('Delete') and resource ('a message from a channel'), making the purpose immediately understandable. It distinguishes from siblings like 'update_message' or 'remove_reaction' by specifying deletion rather than modification or reaction removal. However, it doesn't explicitly differentiate from other destructive operations like 'archive_channel' beyond the resource scope.

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 appropriate permissions), when not to use it (e.g., for messages that shouldn't be deleted), or suggest alternatives like 'update_message' for editing instead of deleting. The agent must infer usage from the purpose alone.

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

get_bot_infoB
    Get information about the authenticated bot user.

    Returns:
        Dictionary containing bot identity information
    
ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the tool returns a dictionary with bot identity information, which is helpful, but lacks details on authentication requirements, error handling, or rate limits. For a tool with no annotation coverage, 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.

Conciseness4/5

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

The description is brief and front-loaded, with the main purpose stated first and a note on the return value. It avoids unnecessary details, but the 'Returns:' section could be integrated more smoothly, and there's minor formatting with extra quotes and indentation that slightly affects 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 are no parameters, annotations are absent, and an output schema exists, the description is adequate but minimal. It covers the basic purpose and output type, but for a tool in a server with many siblings, it could benefit from more context on how it fits into the broader system, such as distinguishing it from user-focused 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?

The input schema has 0 parameters with 100% coverage, so the schema fully documents the lack of inputs. The description doesn't need to add parameter details, and it appropriately focuses on the tool's purpose and output. A baseline of 4 is given since no parameters are present, and the description doesn't contradict the schema.

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 information about the authenticated bot user.' It specifies the verb ('Get') and resource ('bot user'), making it easy to understand. However, it doesn't explicitly differentiate from sibling tools like 'get_user_info' or 'get_team_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 any prerequisites, exclusions, or comparisons to similar tools like 'get_user_info' for non-bot users, leaving the agent to infer usage from context alone.

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

get_channel_historyA
    Fetch message history from a Slack channel.

    Args:
        channel_id: The ID of the channel (e.g., "C01234567")
        limit: Maximum number of messages to return (1-1000). Default: 20
        oldest: Unix timestamp of oldest message to include (optional)
        latest: Unix timestamp of latest message to include (optional)

    Returns:
        Dictionary containing list of messages with sender, text,
        timestamp, and thread info
    
ParametersJSON Schema
NameRequiredDescriptionDefault
channel_idYes
limitNo
oldestNo
latestNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior3/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 specifies the return format (dictionary with message details) and parameter defaults/limits (e.g., limit range 1-1000, default 20), which adds useful context. However, it lacks details on permissions, rate limits, pagination, or error handling, leaving gaps for a tool with mutation-free but potentially sensitive data access.

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 well-structured with a purpose statement followed by Args and Returns sections. Each sentence earns its place by clarifying parameters and output without redundancy. It is front-loaded with the core function and remains appropriately sized for the tool's complexity.

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 moderate complexity (4 parameters, no annotations, but with an output schema), the description is largely complete. It covers purpose, parameters, and return format, and the output schema likely details the dictionary structure, reducing the need for return value explanation. However, it lacks behavioral details like permissions or rate limits, which could be important for safe usage in a Slack context.

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

Parameters5/5

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

The schema description coverage is 0%, so the description must fully compensate. It provides clear semantics for all four parameters: channel_id (ID format example), limit (range and default), oldest (Unix timestamp, optional), and latest (Unix timestamp, optional). This adds significant value beyond the bare schema, making parameter usage understandable without relying on schema descriptions.

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 verb ('fetch') and resource ('message history from a Slack channel'), making the purpose specific and unambiguous. It distinguishes itself from sibling tools like get_dm_history (for direct messages) and get_thread_replies (for threads), establishing a clear scope for channel-based message retrieval.

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 for retrieving channel message history but does not explicitly state when to use this tool versus alternatives like get_dm_history for direct messages or search_messages for broader searches. No exclusions or prerequisites are mentioned, leaving the agent to infer context from the tool name and description alone.

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

get_channel_infoA
    Get detailed information about a specific Slack channel.

    Args:
        channel_id: The ID of the channel (e.g., "C01234567")

    Returns:
        Dictionary containing channel details including name, topic,
        purpose, member count, and creation date
    
ParametersJSON Schema
NameRequiredDescriptionDefault
channel_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden. It indicates this is a read operation ('Get') and specifies the return format, which is helpful. However, it doesn't mention authentication requirements, rate limits, error conditions, or whether the channel must be visible to the user.

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 well-structured with clear sections for purpose, args, and returns. Every sentence adds value: the first states the purpose, the second documents the parameter, and the third describes the return. No wasted words.

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 1 parameter with no schema descriptions and an output schema exists, the description does a good job covering basics. It explains the parameter and return format, though more behavioral context (like auth or errors) would help. The output schema means return values don't need full explanation in the description.

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 schema has 0% description coverage, so the description must compensate. It provides the parameter name 'channel_id' with an example value ('C01234567'), adding meaningful context beyond the bare schema. However, it doesn't explain where to find channel IDs or validate format rules.

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 channel', making the purpose unambiguous. It doesn't explicitly differentiate from siblings like 'list_channels' or 'get_channel_history', but the focus on a single channel's details is reasonably distinct.

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 when detailed info about a specific channel is needed, but doesn't explicitly state when to use this versus alternatives like 'list_channels' for basic info or 'get_channel_history' for message content. No exclusions or prerequisites are mentioned.

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

get_dm_historyA
    Fetch message history from a DM or group DM conversation.

    Args:
        channel_id: The ID of the DM conversation (e.g., "D01234567")
        limit: Maximum number of messages to return (1-1000). Default: 20
        oldest: Unix timestamp of oldest message to include (optional)
        latest: Unix timestamp of latest message to include (optional)

    Returns:
        Dictionary containing list of messages
    
ParametersJSON Schema
NameRequiredDescriptionDefault
channel_idYes
limitNo
oldestNo
latestNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.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 full burden for behavioral disclosure. It mentions the tool fetches message history but doesn't cover important aspects like rate limits, authentication requirements, pagination behavior, error conditions, or whether this is a read-only operation (though 'fetch' implies reading). Significant behavioral details are missing.

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 well-structured and efficiently organized with clear sections for purpose, arguments, and returns. Every sentence serves a specific purpose with no wasted words. The information is front-loaded with the core purpose stated first.

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 moderate complexity (4 parameters, 1 required), no annotations, but with an output schema (returns dictionary with message list), the description is mostly complete. It thoroughly documents parameters and purpose, though could benefit from more behavioral context about limitations, permissions, or error handling to be fully comprehensive.

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

Parameters5/5

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

With 0% schema description coverage, the description fully compensates by providing detailed parameter documentation. It explains each parameter's purpose, provides examples (e.g., 'D01234567'), specifies valid ranges (1-1000 for limit), indicates optionality, and documents default values. This adds substantial 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 tool's purpose with specific verbs ('fetch message history') and resources ('DM or group DM conversation'), distinguishing it from siblings like get_channel_history (for channels) and get_thread_replies (for threads). It precisely identifies the scope of the operation.

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

Usage Guidelines4/5

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

The description implicitly suggests usage for retrieving DM conversation history, but lacks explicit guidance on when to use this tool versus alternatives like get_channel_history or get_thread_replies. It provides context (DM conversations) but no explicit exclusions or comparisons with sibling tools.

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

get_message_reactionsA
    Get all reactions on a specific message.

    Args:
        channel_id: The ID of the channel containing the message (e.g., "C01234567")
        timestamp: The timestamp of the message

    Returns:
        Dictionary containing the message and its reactions
    
ParametersJSON Schema
NameRequiredDescriptionDefault
channel_idYes
timestampYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/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 it's a read operation ('Get'), but doesn't disclose behavioral traits like permissions required, rate limits, pagination, error conditions, or what specific data the 'Dictionary' contains. The description is minimal beyond the basic purpose.

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 appropriately sized and front-loaded: the first sentence states the purpose clearly, followed by structured Args and Returns sections. Every sentence earns its place without redundancy or fluff.

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 moderate complexity (2 required parameters, read-only operation) and the presence of an output schema (which handles return values), the description is reasonably complete. It covers purpose and parameters, but lacks behavioral context like error handling or permissions, which would be beneficial since annotations are absent.

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 meaning by explaining that 'channel_id' identifies the channel containing the message and 'timestamp' identifies the message itself, including an example for channel_id. This clarifies the semantics beyond the bare schema, though it doesn't specify the timestamp format.

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 ('Get all reactions') on a specific resource ('on a specific message'). It distinguishes itself from siblings like 'get_channel_history' or 'get_thread_replies' by focusing exclusively on reactions rather than message content or thread context.

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 when reactions on a specific message are needed, but provides no explicit guidance on when to use this tool versus alternatives like 'get_channel_history' (which might include reactions) or 'remove_reaction' (for deletion). No exclusions or prerequisites are mentioned.

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.

    Returns:
        Dictionary containing workspace information
    
ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It states it 'returns a dictionary containing workspace information,' which hints at read-only behavior but doesn't explicitly confirm safety (e.g., no side effects). It omits critical details like authentication requirements, rate limits, error conditions, or what specific information is included (e.g., team name, ID, settings). For a tool 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 brief and front-loaded, with the core purpose in the first sentence and return value in the second. There's no wasted text, and it's structured for quick comprehension. However, the second sentence could be integrated more smoothly (e.g., 'Returns a dictionary with workspace information'), slightly affecting 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 no parameters, an output schema exists (which should document the return structure), and no annotations, the description is minimally adequate. It states the purpose and return type, but lacks behavioral context (e.g., safety, auth) and doesn't leverage the output schema to clarify what 'workspace information' entails. For a simple read operation, it's passable but leaves gaps.

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 schema description coverage is 100% (though trivial since there are no parameters). The description doesn't need to explain parameters, so it appropriately avoids redundancy. A baseline of 4 is applied as it efficiently handles the parameter-less case without unnecessary elaboration.

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 ('information about the Slack workspace/team'), making the purpose immediately understandable. It distinguishes from siblings like get_user_info or get_channel_info by specifying workspace-level information. However, it doesn't explicitly contrast with other workspace-related tools (none exist in the sibling list), so it falls short of 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., authentication needs), typical use cases, or how it differs from other info-fetching tools like get_bot_info or get_user_info. 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_thread_repliesB
    Get all replies in a message thread.

    Args:
        channel_id: The ID of the channel containing the thread (e.g., "C01234567")
        thread_ts: The timestamp of the parent message
        limit: Maximum number of replies to return (1-1000). Default: 20

    Returns:
        Dictionary containing the thread messages
    
ParametersJSON Schema
NameRequiredDescriptionDefault
channel_idYes
thread_tsYes
limitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

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 return format ('Dictionary containing the thread messages') but lacks details on permissions needed, rate limits, pagination behavior, or error conditions. For a read operation with zero annotation coverage, this leaves significant gaps in understanding how the tool behaves.

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 with a clear purpose statement followed by well-organized parameter and return sections. Every sentence adds value without redundancy, and the information is front-loaded appropriately for quick comprehension.

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 (3 parameters, read operation) and the presence of an output schema (though not detailed in the context), the description covers the basics adequately. However, it lacks important contextual details like authentication requirements, rate limits, or how to handle large result sets, which would be helpful for a robust implementation.

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 meaning beyond the input schema, which has 0% description coverage. It explains what 'channel_id' and 'thread_ts' represent with examples, clarifies the 'limit' parameter's range and default value, and documents the return value. This compensates well for the schema's lack of descriptions.

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 the verb 'Get' and resource 'all replies in a message thread', making it easy to understand what the tool does. However, it doesn't explicitly differentiate from sibling tools like 'get_channel_history' or 'reply_to_thread', which could handle similar message-related queries.

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 'get_channel_history' for broader message retrieval or 'reply_to_thread' for adding replies, 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.

get_user_infoC
    Get detailed information about a specific user.

    Args:
        user_id: The ID of the user (e.g., "U01234567")

    Returns:
        Dictionary containing detailed user profile information
    
ParametersJSON Schema
NameRequiredDescriptionDefault
user_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions returning 'detailed user profile information' but doesn't cover critical aspects like authentication requirements, rate limits, error conditions, or whether this is a read-only operation (though implied by 'get').

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/Returns sections are structured but slightly redundant since an output schema exists. Overall, it's efficient with minimal waste.

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 (single parameter, read operation) and the presence of an output schema, the description is adequate but incomplete. It lacks usage guidelines and behavioral details that would help an agent use it correctly alongside sibling tools.

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

Parameters3/5

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

The schema description coverage is 0%, but the description adds meaningful context by explaining that 'user_id' is 'The ID of the user (e.g., "U01234567")', providing an example format. However, it doesn't fully compensate for the lack of schema documentation, as it only covers one parameter superficially.

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 user'), making the purpose unambiguous. However, it doesn't differentiate from sibling tools like 'get_user_profile' or 'lookup_user_by_email', which appear to serve similar user-related functions.

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 'get_user_profile', 'lookup_user_by_email', or 'list_users'. The description only states what it does without context about appropriate use cases or exclusions.

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

get_user_presenceC
    Get the presence/online status of a user.

    Args:
        user_id: The ID of the user (e.g., "U01234567")

    Returns:
        Dictionary containing user presence information
    
ParametersJSON Schema
NameRequiredDescriptionDefault
user_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the tool retrieves presence information but doesn't describe traits like rate limits, authentication needs, error handling, or whether it's a read-only operation. While 'Get' implies a read, it lacks details on permissions or potential side effects, leaving gaps 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. The Args and Returns sections are structured clearly, though they could be more concise. Every sentence adds value, but the formatting with separate sections is slightly verbose for such a simple tool.

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

Completeness3/5

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

Given the tool's low complexity (1 parameter, no nested objects) and the presence of an output schema, the description is somewhat complete. It covers the basic purpose and parameter, but with no annotations and minimal behavioral details, it falls short of being fully informative. The output schema handles return values, but the description lacks context on usage or limitations.

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 explains 'user_id' as 'The ID of the user (e.g., "U01234567")', providing an example that clarifies the expected format, which is useful since schema description coverage is 0%. However, with only one parameter, the baseline is 4, but the description doesn't fully compensate for the lack of schema details, such as constraints or validation rules.

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 the presence/online status of a user.' It specifies the verb ('Get') and resource ('presence/online status of a user'), making the function unambiguous. However, it doesn't explicitly differentiate from sibling tools like 'get_user_info' or 'get_user_profile', which might also provide user-related data.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention sibling tools such as 'get_user_info' or 'get_user_profile', nor does it specify prerequisites or contexts for usage. The only implied usage is to retrieve presence status, but no explicit when/when-not instructions are given.

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

get_user_profileB
    Get the profile information for a user.

    Args:
        user_id: The ID of the user (e.g., "U01234567")

    Returns:
        Dictionary containing detailed profile fields
    
ParametersJSON Schema
NameRequiredDescriptionDefault
user_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

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 tool retrieves profile information but lacks details on permissions required, rate limits, error handling, or whether it's a read-only operation. For a tool with no annotation coverage, 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 with a clear purpose statement followed by well-organized 'Args' and 'Returns' sections. Every sentence serves a purpose without redundancy, making it easy to parse and understand 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 an output schema exists (as indicated by context signals), the description doesn't need to detail return values, which is appropriate. However, with no annotations and incomplete parameter coverage, the description provides only basic operational context, leaving aspects like error cases or performance characteristics unaddressed.

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 the single parameter 'user_id' by providing an example format ('e.g., "U01234567"'), which is valuable since schema description coverage is 0%. This compensates well for the lack of schema details, though it doesn't fully explain constraints or validation rules.

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 ('profile information for a user'), making it immediately understandable. However, it doesn't differentiate this tool from sibling tools like 'get_user_info' or 'lookup_user_by_email', which appear to serve similar user-related functions, preventing 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 sibling tools such as 'get_user_info', 'lookup_user_by_email', and 'get_user_presence' available, there's no indication of what distinguishes this tool's functionality or in what contexts it should be preferred, leaving usage ambiguous.

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

join_channelB
    Join a Slack channel.

    Args:
        channel_id: The ID of the channel to join (e.g., "C01234567")

    Returns:
        Dictionary indicating success or error with channel info
    
ParametersJSON Schema
NameRequiredDescriptionDefault
channel_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

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 it mentions the action ('Join') and return format ('Dictionary indicating success or error'), it lacks critical behavioral details: what permissions are required, whether there are rate limits, what happens if already a member, or what specific error conditions might occur. The description is 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.

Conciseness5/5

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

The description is perfectly concise and well-structured: a clear purpose statement followed by Args and Returns sections. Every sentence earns its place, with no redundant information. The formatting with clear sections makes it easy to parse.

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 (which handles return values), the description is minimally adequate. It covers the basic action and parameter example but lacks important contextual details about permissions, error conditions, and behavioral constraints that would be needed for safe and effective 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?

The description adds meaningful context for the single parameter 'channel_id' by providing an example format ('C01234567'), which is valuable since schema description coverage is 0%. However, it doesn't explain where to find channel IDs or clarify that this is different from channel names. With only one parameter and some added semantics, this earns a 4.

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 ('Join') and resource ('a Slack channel'), making the purpose immediately understandable. However, it doesn't distinguish this tool from its sibling 'leave_channel' or explain how it differs from other channel-related tools like 'create_channel' or 'archive_channel'.

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 to be a member of the workspace), when joining might fail, or when to use 'open_dm' for direct messages instead. There's no explicit when/when-not usage context.

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

leave_channelA
    Leave a Slack channel.

    Args:
        channel_id: The ID of the channel to leave (e.g., "C01234567")

    Returns:
        Dictionary indicating success or error
    
ParametersJSON Schema
NameRequiredDescriptionDefault
channel_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.7/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 ('Leave a Slack channel') and mentions a return type ('Dictionary indicating success or error'), but lacks details on permissions needed, whether the action is reversible, rate limits, or what specific success/error responses entail. This is a significant gap 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 front-loaded with the core purpose in the first sentence, followed by structured Args and Returns sections. Each sentence earns its place by providing essential information without redundancy, making it highly efficient and well-organized.

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 (a mutation with one parameter) and the presence of an output schema (which covers return values), the description is adequate but incomplete. It lacks behavioral details like permissions or reversibility, which are crucial for safe usage, though the output schema reduces the need to explain return values.

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 the single parameter 'channel_id' by explaining it's 'The ID of the channel to leave' and providing an example ('e.g., "C01234567"'), which compensates for the 0% schema description coverage. Since there are no other parameters, this is sufficient for clarity.

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 ('Leave a Slack channel') with the resource ('channel'), distinguishing it from siblings like 'join_channel' or 'archive_channel'. It uses a precise verb that directly matches the tool's name without being tautological.

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 by specifying the action and resource, but does not explicitly state when to use this tool versus alternatives (e.g., 'archive_channel' for closing channels or 'join_channel' for the opposite action). It provides basic context but lacks guidance 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.

list_channelsB
    List all accessible Slack channels in the workspace.

    Args:
        types: Comma-separated channel types to include.
               Options: public_channel, private_channel, mpim, im
               Default: "public_channel,private_channel"
        exclude_archived: Whether to exclude archived channels. Default: True
        limit: Maximum number of channels to return (1-1000). Default: 100

    Returns:
        Dictionary containing list of channels with their details
    
ParametersJSON Schema
NameRequiredDescriptionDefault
typesNopublic_channel,private_channel
exclude_archivedNo
limitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

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 only minimally addresses behavior. It mentions returning a dictionary with channel details but doesn't disclose pagination, rate limits, authentication needs, or error handling. This is inadequate for a tool with potential complexity.

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 well-structured with a clear purpose statement followed by detailed parameter explanations in a formatted Args/Returns section. Every sentence adds essential information without redundancy, making it efficient and easy to parse.

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 (3 parameters, no annotations) and the presence of an output schema (implied by 'Returns'), the description is partially complete. It covers parameters well but lacks behavioral context like permissions or error cases, leaving gaps despite the output schema.

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

Parameters5/5

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

The description adds significant value beyond the input schema, which has 0% coverage. It explains each parameter's purpose, options for 'types', defaults, and constraints like 'limit' range (1-1000), compensating fully for the schema's lack of descriptions.

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 accessible Slack channels in the workspace'), providing a specific purpose. It distinguishes from siblings like 'list_conversations' by specifying 'channels' rather than generic conversations, though it doesn't explicitly contrast them.

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 'list_conversations' or 'search_all'. The description lacks context about prerequisites, such as required permissions or workspace access, leaving usage unclear.

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

list_conversationsA
    List direct message and group DM conversations.

    Args:
        types: Comma-separated conversation types. Default: "im,mpim"
               Options: im (1:1 DMs), mpim (group DMs)
        limit: Maximum number of conversations to return. Default: 50

    Returns:
        Dictionary containing list of DM conversations
    
ParametersJSON Schema
NameRequiredDescriptionDefault
typesNoim,mpim
limitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/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 tool lists conversations and returns a dictionary, but fails to describe critical behaviors: whether this requires authentication, any rate limits, pagination details (beyond the limit parameter), or what specific fields the dictionary contains. For a tool with zero annotation coverage, this leaves significant gaps in understanding how it operates.

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 well-structured and appropriately sized: a brief purpose statement followed by dedicated sections for Args and Returns. Each sentence adds value, with no redundant information. Minor improvement could be made by integrating the purpose more seamlessly, but overall it's efficient and front-loaded.

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 (2 simple parameters) and the presence of an output schema (which handles return value documentation), the description is largely complete. It covers purpose, parameters, and return type adequately. The main gap is the lack of behavioral details (e.g., authentication needs), but this is partially mitigated by the output schema reducing the need to explain returns.

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

Parameters5/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% description coverage. It clearly explains both parameters: 'types' as comma-separated conversation types with options ('im' for 1:1 DMs, 'mpim' for group DMs) and default, and 'limit' as maximum number to return with default. This fully compensates for the schema's lack of documentation, making parameter usage clear.

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 ('direct message and group DM conversations'), making the purpose immediately understandable. It distinguishes this tool from siblings like list_channels (which handles public/private channels) and list_users (which handles user listings). However, it doesn't explicitly contrast with get_dm_history (which retrieves message history within DMs), leaving some sibling differentiation incomplete.

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 through the mention of 'direct message and group DM conversations,' suggesting this is for listing conversation metadata rather than message content (unlike get_dm_history). However, it lacks explicit guidance on when to use this versus alternatives like open_dm (for initiating DMs) or send_dm (for messaging), and provides no exclusion criteria or prerequisites.

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

list_usersB
    List all users in the Slack workspace.

    Args:
        limit: Maximum number of users to return (1-1000). Default: 100
        include_locale: Include locale information for users. Default: False

    Returns:
        Dictionary containing list of users with their profiles
    
ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
include_localeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

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 the return format ('Dictionary containing list of users with their profiles'), which is helpful, but lacks critical details: it doesn't specify whether this is a read-only operation, if there are rate limits, authentication requirements, pagination behavior (beyond the 'limit' parameter), or how it handles large workspaces. For a tool with no annotation coverage, 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 well-structured and front-loaded with the core purpose in the first sentence. The Args and Returns sections are clearly formatted, making it easy to parse. Every sentence adds value: the purpose statement, parameter explanations, and return format description are all necessary and efficiently presented.

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 (2 parameters, no annotations, but with an output schema), the description is partially complete. It covers the purpose and parameters adequately, and the output schema likely details the return structure, so explaining return values isn't needed. However, it lacks behavioral context (e.g., permissions, rate limits) and usage guidelines, which are important for a tool that lists all users in a workspace.

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 beyond the input schema, which has 0% description coverage. It explains that 'limit' is the 'Maximum number of users to return (1-1000)' with a default, and 'include_locale' controls whether to 'Include locale information for users' with a default. This clarifies the purpose and constraints of each parameter, compensating well for the schema's lack of descriptions.

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 users in the Slack workspace'), making the purpose immediately understandable. However, it doesn't explicitly differentiate this tool from sibling tools like 'get_user_info', 'lookup_user_by_email', or 'get_user_profile', which also retrieve user information but with different scopes or filters.

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 scenarios where this bulk listing is preferred over targeted lookups (e.g., 'get_user_info' for a specific user) or how it relates to other user-related tools like 'get_user_profile'. There's no context about prerequisites, such as required permissions or workspace access.

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

lookup_user_by_emailB
    Find a user by their email address.

    Args:
        email: The email address to look up

    Returns:
        Dictionary containing the user's profile if found
    
ParametersJSON Schema
NameRequiredDescriptionDefault
emailYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

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 what the tool does and the return value, but lacks details on permissions, error handling (e.g., if user not found), rate limits, or other behavioral traits. The description is minimal and does not adequately cover behavioral aspects 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.

Conciseness5/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 structured 'Args' and 'Returns' sections. Every sentence adds value without waste, making it efficient and well-organized.

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 (one parameter) and the presence of an output schema (which handles return values), the description is complete enough for basic use. It covers purpose, parameters, and returns, but could be improved with more behavioral context. The output schema reduces the need for detailed return explanations, making this reasonably 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?

The description adds meaning by specifying that the 'email' parameter is 'The email address to look up,' which clarifies its purpose beyond the schema's title 'Email.' However, schema description coverage is 0%, and the description does not compensate with additional details like format requirements or examples. With one parameter and some added semantics, it meets the baseline but lacks 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: 'Find a user by their email address.' It specifies the verb ('Find') and resource ('user'), but does not distinguish it from sibling tools like 'get_user_info' or 'get_user_profile', which might serve similar purposes. The purpose is clear but lacks sibling differentiation.

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 does not mention sibling tools like 'get_user_info' or 'get_user_profile', nor does it specify contexts or exclusions for usage. There is implied usage based on the purpose, but no explicit guidelines are provided.

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

open_dmB
    Open a direct message or group DM conversation.

    Args:
        user_ids: Comma-separated user IDs to open a conversation with
                  (e.g., "U01234567" for DM, "U01234567,U07654321" for group DM)

    Returns:
        Dictionary containing the conversation channel details
    
ParametersJSON Schema
NameRequiredDescriptionDefault
user_idsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden for behavioral disclosure. It states the tool opens a conversation and returns channel details, but lacks critical information: whether this creates a new DM or accesses an existing one, permission requirements, rate limits, or error conditions. For a mutation tool (implied by 'open'), 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 well-structured with a clear purpose statement followed by Args and Returns sections. It's appropriately sized with no redundant information, though the formatting could be slightly more compact.

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 (covering return values) and only one parameter (well-explained in the description), the description is reasonably complete for basic use. However, as a mutation tool with no annotations, it should address more behavioral aspects like side effects or error handling to be 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 significant value beyond the input schema, which has 0% description coverage. It explains the 'user_ids' parameter format (comma-separated IDs), provides examples for both DM and group DM cases, and clarifies the semantic meaning. This compensates well for the schema's lack of documentation.

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 ('open') and resource ('direct message or group DM conversation'), making the purpose immediately understandable. However, it doesn't explicitly differentiate from sibling tools like 'send_dm' or 'get_dm_history', which would require a 5.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives like 'send_dm' or 'get_dm_history'. It mentions the tool's function but offers no context about prerequisites, typical use cases, or exclusions.

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

post_messageA
    Post a message to a Slack channel.

    Args:
        channel_id: The ID of the channel to post to (e.g., "C01234567")
        text: The message text to post (supports Slack markdown)
        thread_ts: Optional thread timestamp to reply in a thread
        unfurl_links: Whether to unfurl text-based URLs. Default: True
        unfurl_media: Whether to unfurl media URLs. Default: True

    Returns:
        Dictionary containing the posted message details including timestamp
    
ParametersJSON Schema
NameRequiredDescriptionDefault
channel_idYes
textYes
thread_tsNo
unfurl_linksNo
unfurl_mediaNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior3/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 describes the core action (posting) and mentions Slack markdown support, but doesn't cover important behavioral aspects like rate limits, authentication requirements, error conditions, or whether this is a synchronous operation. It provides basic context but lacks comprehensive behavioral details.

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 well-structured with clear sections (purpose, args, returns) and uses bullet-like formatting. Every sentence adds value, though the parameter explanations could be slightly more concise. It's appropriately sized for a 5-parameter tool with no annotations.

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

Completeness4/5

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

Given the tool's moderate complexity (5 parameters, 2 required), no annotations, but with an output schema (which handles return value documentation), the description provides good coverage. It explains all parameters thoroughly and states the core purpose clearly. The main gap is lack of behavioral context like rate limits or error handling.

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

Parameters5/5

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

The description adds significant value beyond the input schema, which has 0% description coverage. It explains each parameter's purpose, provides examples (e.g., 'C01234567' for channel_id), documents default values for unfurl parameters, and clarifies that text supports Slack markdown. This fully compensates for the schema's lack of descriptions.

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 ('Post a message') and target resource ('to a Slack channel'), distinguishing it from sibling tools like send_dm (direct message) or update_message (editing existing 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 through parameter explanations (e.g., thread_ts for replying in threads) but doesn't explicitly state when to use this tool versus alternatives like send_dm or reply_to_thread. No explicit guidance on prerequisites or exclusions is provided.

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

remove_reactionA
    Remove an emoji reaction from a message.

    Args:
        channel_id: The ID of the channel containing the message (e.g., "C01234567")
        timestamp: The timestamp of the message
        emoji: The emoji name without colons (e.g., "thumbsup", "heart", "rocket")

    Returns:
        Dictionary indicating success or error
    
ParametersJSON Schema
NameRequiredDescriptionDefault
channel_idYes
timestampYes
emojiYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/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 ('Remove') which implies mutation, but doesn't mention permission requirements, rate limits, whether the operation is reversible, or what specific success/error responses look like. The return value description is vague ('Dictionary indicating success or error').

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 well-structured with a clear purpose statement followed by Args and Returns sections. Each sentence earns its place by providing essential information. However, the 'Returns' section could be more specific about the dictionary structure rather than just stating 'success or error'.

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?

For a mutation tool with 3 parameters and no annotations, the description covers the basic operation and parameters adequately. However, it lacks important contextual information about permissions, error conditions, and behavioral constraints. The presence of an output schema helps, but the description's return value explanation is too vague to fully compensate for the missing annotation coverage.

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

Parameters5/5

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

With 0% schema description coverage (titles only provide parameter names), the description adds crucial semantic information for all 3 parameters. It explains what each parameter represents with concrete examples: channel_id identifies the channel, timestamp identifies the message, and emoji specifies which reaction to remove (with format examples like 'thumbsup' without colons).

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 an emoji reaction from a message') with the exact resource involved. It distinguishes itself from sibling tools like 'add_reaction' by specifying removal rather than addition, and from other message-related tools like 'delete_message' by focusing specifically on reactions.

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 to have added the reaction first), when not to use it, or how it differs from similar operations like 'delete_message' or 'add_reaction'. The agent must infer usage context 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.

reply_to_threadA
    Reply to a message thread in Slack.

    Args:
        channel_id: The ID of the channel containing the thread (e.g., "C01234567")
        thread_ts: The timestamp of the parent message to reply to
        text: The reply message text (supports Slack markdown)
        broadcast: Whether to also post the reply to the channel. Default: False

    Returns:
        Dictionary containing the posted reply details
    
ParametersJSON Schema
NameRequiredDescriptionDefault
channel_idYes
thread_tsYes
textYes
broadcastNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

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 full burden for behavioral disclosure. It mentions the action ('Reply') and a parameter effect ('broadcast'), but doesn't disclose important behavioral traits like required permissions, rate limits, error conditions, or what happens when replying to archived threads. The description provides basic operational context but misses critical behavioral details.

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 with a clear purpose statement followed by well-organized parameter explanations and return value indication. Every sentence serves a purpose with zero wasted words, and information is appropriately front-loaded.

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 moderate complexity (4 parameters, mutation operation) with no annotations but an output schema, the description provides good coverage. It explains all parameters thoroughly and indicates the return format. However, for a mutation tool with no annotations, it should ideally include more behavioral context about permissions and error handling.

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 fully compensates by explaining all 4 parameters with clear semantics: channel_id identifies the channel, thread_ts identifies the parent message, text is the reply content with format information, and broadcast controls visibility. The description 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 ('Reply to a message thread in Slack') with the resource identified ('message thread'). It distinguishes itself from siblings like 'post_message' (general posting) and 'send_dm' (direct messages) by focusing specifically on threaded replies.

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 (replying to threads in Slack) but doesn't explicitly state when to use this versus alternatives like 'post_message' for non-threaded messages or 'send_dm' for direct messages. No guidance is provided about prerequisites or when not to use this tool.

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

search_allA
    Search both messages and files across the Slack workspace.

    Note: Requires a User Token (SLACK_USER_TOKEN) as search is not
    available with bot tokens.

    Args:
        query: Search query string. Supports Slack search modifiers.
        sort: Sort order - "timestamp" or "score". Default: "timestamp"
        sort_dir: Sort direction - "asc" or "desc". Default: "desc"
        count: Number of results per type (1-100). Default: 10

    Returns:
        Dictionary containing both message and file search results
    
ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes
sortNotimestamp
sort_dirNodesc
countNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior4/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 effectively describes key traits: the tool performs a search operation (implying read-only, non-destructive behavior), requires a specific token type (User Token), and supports Slack search modifiers. However, it lacks details on rate limits, error handling, or pagination, which are common for search tools.

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 appropriately sized and front-loaded, starting with the core purpose, followed by important notes and parameter details in a structured format. Every sentence adds value, with no redundant or wasted information, making it easy for an AI agent to parse and understand quickly.

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

Completeness5/5

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

Given the tool's complexity (search across multiple resource types), no annotations, and an output schema present (which handles return values), the description is complete enough. It covers purpose, usage guidelines, token requirements, and parameter semantics, providing all necessary context for an AI agent to select and invoke the tool correctly without over-explaining.

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 schema description coverage is 0%, so the description must compensate. It adds significant meaning beyond the schema by explaining each parameter's purpose, default values, and constraints (e.g., 'count: Number of results per type (1-100)'). The only gap is that 'sort' and 'sort_dir' enums are implied but not explicitly listed as such, slightly reducing clarity.

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 searches both messages and files across the Slack workspace, using specific verbs ('Search') and resources ('messages and files'). It distinguishes itself from sibling tools like 'search_files' and 'search_messages' by explicitly covering both types of content in a single operation.

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

Usage Guidelines5/5

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

The description provides explicit guidance on when to use this tool versus alternatives by noting it searches 'both messages and files,' implying that for single-type searches, the sibling tools 'search_files' or 'search_messages' should be used. It also specifies the required token type (User Token vs. bot tokens), which is crucial for correct invocation.

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

search_filesA
    Search files across the Slack workspace.

    Note: Requires a User Token (SLACK_USER_TOKEN) as search is not
    available with bot tokens.

    Args:
        query: Search query string. Supports Slack search modifiers:
               - "in:#channel" to search in specific channel
               - "from:@user" to search files from a user
               - "type:pdf" to filter by file type
               Example: "quarterly report type:pdf in:#finance"
        sort: Sort order - "timestamp" or "score". Default: "timestamp"
        sort_dir: Sort direction - "asc" or "desc". Default: "desc"
        count: Number of results to return (1-100). Default: 20
        types: Comma-separated file types to filter (optional)
               Options: images, videos, pdfs, docs, snippets, etc.

    Returns:
        Dictionary containing search results with files and metadata
    
ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes
sortNotimestamp
sort_dirNodesc
countNo
typesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior4/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 successfully explains authentication requirements (User Token vs bot tokens), which is crucial behavioral context. However, it doesn't mention rate limits, pagination behavior, or error conditions that would be helpful for an agent.

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 well-structured with clear sections (purpose, note, args, returns) and every sentence adds value. It could be slightly more concise in the query explanation, but overall it's efficiently organized with no wasted text.

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

Completeness5/5

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

Given the tool's complexity (5 parameters, authentication requirements, search functionality) and the presence of an output schema (so return values don't need explanation), the description is complete. It covers purpose, authentication, all parameters with semantics, and references the return structure appropriately.

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

Parameters5/5

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

Despite 0% schema description coverage, the description provides comprehensive parameter documentation. It explains the query parameter with examples and Slack-specific modifiers, clarifies sort/sort_dir options and defaults, specifies count range constraints, and lists types options. This fully compensates for the schema coverage gap.

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 ('Search files') and resource ('across the Slack workspace'), distinguishing it from sibling tools like search_messages and search_all. It provides a complete verb+resource+scope statement that leaves no ambiguity about what this tool does.

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

Usage Guidelines5/5

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

The description explicitly states when to use this tool ('Search files across the Slack workspace') and provides critical context about token requirements ('Requires a User Token... not available with bot tokens'). It distinguishes this from other search tools by specifying it's for files specifically, not messages or general content.

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

search_messagesA
    Search messages across the Slack workspace.

    Note: Requires a User Token (SLACK_USER_TOKEN) as search is not
    available with bot tokens.

    Args:
        query: Search query string. Supports Slack search modifiers:
               - "in:#channel" to search in specific channel
               - "from:@user" to search messages from a user
               - "has:reaction" to find messages with reactions
               - "before:YYYY-MM-DD" or "after:YYYY-MM-DD" for date filters
               Example: "project update in:#general from:@john"
        sort: Sort order - "timestamp" or "score". Default: "timestamp"
        sort_dir: Sort direction - "asc" or "desc". Default: "desc"
        count: Number of results to return (1-100). Default: 20

    Returns:
        Dictionary containing search results with messages and metadata
    
ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes
sortNotimestamp
sort_dirNodesc
countNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior4/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 successfully describes authentication requirements (User Token needed), search scope (workspace-wide), and return format (dictionary with messages and metadata). However, it doesn't mention rate limits, pagination behavior, or error conditions that would be helpful for complete transparency.

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

Conciseness5/5

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

The description is efficiently structured with clear sections: purpose statement, authentication requirement, parameter documentation, and return value. Every sentence adds value with no wasted words, and the information is front-loaded with the most critical details (what it does and token requirement) first.

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

Completeness5/5

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

Given the tool's complexity (search with multiple parameters) and the presence of an output schema (which handles return values), the description provides complete context. It covers purpose, authentication, detailed parameter semantics, and mentions the return structure, leaving no significant gaps for agent understanding.

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

Parameters5/5

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

With 0% schema description coverage, the description fully compensates by providing detailed semantic information for all 4 parameters. It explains the query syntax with examples and modifiers, documents default values for sort, sort_dir, and count, and clarifies valid values and ranges (e.g., '1-100' for count, 'asc/desc' for sort_dir).

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 ('Search messages') and resource ('across the Slack workspace'), distinguishing it from sibling tools like search_files or search_all. It provides a complete verb+resource+scope combination that leaves no ambiguity about what the tool does.

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

Usage Guidelines5/5

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

The description explicitly states when to use this tool ('Search messages across the Slack workspace') and includes a critical prerequisite ('Requires a User Token (SLACK_USER_TOKEN) as search is not available with bot tokens'). This provides clear context for when this tool is appropriate versus alternatives that might use bot tokens.

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

send_dmB
    Send a direct message to a user.

    Args:
        user_id: The ID of the user to message (e.g., "U01234567")
        text: The message text to send (supports Slack markdown)

    Returns:
        Dictionary containing the sent message details
    
ParametersJSON Schema
NameRequiredDescriptionDefault
user_idYes
textYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

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 but only states basic functionality. It doesn't disclose behavioral traits like rate limits, authentication requirements, whether messages can be edited/deleted later, character limits for text, or error conditions. The mention of 'Slack markdown' is helpful but insufficient for comprehensive behavioral understanding.

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 with a clear purpose statement followed by well-organized Args and Returns sections. Every sentence adds value without redundancy, and the information is appropriately front-loaded with the core functionality stated first.

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 (2 parameters, mutation operation) with no annotations but an output schema, the description covers basic functionality and parameters adequately. However, it lacks important context about when to use this versus sibling tools, behavioral constraints, and prerequisites that would be needed for reliable agent operation.

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 both parameters beyond the schema's 0% coverage. It explains that 'user_id' identifies the recipient with an example format, and 'text' is the message content with support for Slack markdown. This compensates well for the lack of schema descriptions.

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 resource ('direct message to a user'), making the purpose immediately understandable. However, it doesn't differentiate from sibling tools like 'post_message' or 'reply_to_thread' which could also send messages in different contexts.

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 'post_message' for channels or 'reply_to_thread' for threaded conversations. It mentions sending to a user but doesn't clarify if this is for initiating new conversations versus existing ones, or when to use 'open_dm' first.

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

set_channel_topicC
    Set the topic for a Slack channel.

    Args:
        channel_id: The ID of the channel (e.g., "C01234567")
        topic: The new topic text for the channel

    Returns:
        Dictionary indicating success with the new topic
    
ParametersJSON Schema
NameRequiredDescriptionDefault
channel_idYes
topicYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden but only states the basic action. It doesn't disclose behavioral traits like required permissions, rate limits, whether the change is reversible, or how it handles errors. The mention of a return dictionary adds minimal value beyond the output schema.

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 well-structured with a clear purpose statement followed by Args and Returns sections, making it easy to parse. It's concise with no wasted sentences, though the formatting could be slightly more front-loaded for immediate clarity.

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 (a mutation with 2 parameters), no annotations, and an output schema present, the description is minimally adequate. It covers the basic action and parameters but lacks context on permissions, error handling, or integration with sibling tools, which would enhance completeness for safe 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 adds some meaning by explaining 'channel_id' as an ID with an example format and 'topic' as new text, which compensates for the 0% schema description coverage. However, it doesn't detail constraints (e.g., topic length limits or channel ID validation), 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 verb ('Set') and resource ('topic for a Slack channel'), making the purpose immediately understandable. However, it doesn't explicitly differentiate from siblings like 'update_message' or 'create_channel' that might also modify channel properties, though the specificity of 'topic' provides some implicit 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?

No guidance is provided on when to use this tool versus alternatives. For example, it doesn't mention prerequisites (e.g., needing channel access or admin permissions) or compare to other channel-modification tools in the sibling list, leaving the agent to infer usage context.

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

update_messageB
    Update an existing message.

    Args:
        channel_id: The ID of the channel containing the message (e.g., "C01234567")
        timestamp: The timestamp of the message to update
        text: The new message text

    Returns:
        Dictionary indicating success with updated message details
    
ParametersJSON Schema
NameRequiredDescriptionDefault
channel_idYes
timestampYes
textYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden but offers minimal behavioral disclosure. It states this is an update operation (implying mutation) and mentions a success dictionary return, but doesn't cover critical aspects like authentication requirements, rate limits, edit time windows, permission constraints, or what happens to attachments/threads. For a mutation tool with zero annotation coverage, this leaves significant gaps.

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 with clear sections (purpose, args, returns). Every sentence earns its place by providing essential information. The front-loaded purpose statement is followed by organized parameter explanations. Minor improvement could be merging the purpose and returns into a more cohesive 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 a mutation tool with 3 parameters, 0% schema coverage, no annotations, but with an output schema (implied by 'Returns' statement), the description is moderately complete. It covers parameters well and mentions return format, but lacks behavioral context about permissions, constraints, and error conditions. The output schema existence reduces but doesn't eliminate the need for more operational 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?

Schema description coverage is 0%, so the description must compensate - which it does effectively by explaining all three parameters. It clarifies that 'channel_id' identifies the containing channel with an example format, 'timestamp' identifies the specific message, and 'text' is the new content. This adds meaningful context beyond the bare schema, though it doesn't specify timestamp format or text 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 ('Update') and resource ('an existing message'), making the purpose immediately understandable. It distinguishes from siblings like 'delete_message' and 'post_message' by focusing on modification rather than creation or removal. However, it doesn't explicitly differentiate from 'reply_to_thread' which might also update conversations.

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. The description doesn't mention prerequisites (e.g., needing edit permissions), constraints (e.g., time limits for editing), or when to choose 'update_message' over 'delete_message + post_message' or other sibling tools. Usage context is implied but not stated.

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

TDQS

A3.7/5.0
Disambiguation5/5

Each tool has a distinct purpose with clear boundaries, such as add_reaction vs. remove_reaction, or get_channel_history vs. get_thread_replies. The descriptions specify unique actions and resources, preventing confusion or overlap in functionality.

Naming Consistency5/5

All tools follow a consistent verb_noun naming pattern (e.g., add_reaction, archive_channel, create_channel). The naming is uniform throughout, using snake_case and clear action words, making the tool set predictable and easy to navigate.

Tool Count3/5

With 30 tools, the count is on the higher side for a Slack server, potentially feeling heavy. While it covers many aspects of Slack's API, it might be borderline for typical agent use, as some tools could be consolidated or omitted without losing core functionality.

Completeness5/5

The tool set provides comprehensive coverage for Slack interactions, including channel management, messaging, user info, reactions, threads, and search. It supports full CRUD operations for messages and channels, with no obvious gaps that would hinder agent workflows in this domain.

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
    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
  • F
    license
    A
    quality
    D
    maintenance
    Enables comprehensive Slack workspace integration through AI assistants, allowing users to manage channels, send messages, upload files, search conversations, and interact with users through natural language commands.
    17
  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables AI assistants to interact with Slack workspaces through natural language, supporting channel management, message operations, user profiles, reactions, and threaded conversations.
  • A
    license
    A
    quality
    D
    maintenance
    Integrates AI assistants with Slack workspaces using OAuth 2.0 authenticated user tokens for secure, multi-functional interaction. It enables comprehensive operations including channel management, message searching, file handling, and reaction management through natural language.
    20
    169
    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/bcharleson/slack-agent-cli'

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