slack-mpm
Provides tools for Slack workspace integration, enabling management of channels, messages, users, files, reminders, bookmarks, scheduled messages, and more via the Slack API.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@slack-mpmlist all channels"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
slack-mpm
A Python MCP (Model Context Protocol) server and API library for Slack workspace integration. Exposes 40+ Slack operations as MCP tools for use with Claude Desktop, and provides a clean async Python API for building Slack integrations.
What It Is
Python API library:
from slack_mpm.api import messages; await messages.send_message(...)MCP server: wraps the API for Claude Desktop via
slack-mpm mcpAgent scripts: standalone automation scripts in
agents/
Related MCP server: Slack MCP Server
Prerequisites
Python 3.10+ and uv
A Slack App with a bot token
Creating a Slack App
Go to https://api.slack.com/apps and click "Create New App"
Choose "From scratch", give it a name and select your workspace
Go to "OAuth & Permissions" and add these Bot Token Scopes:
channels:read,channels:write,channels:managechat:write,chat:write.publicusers:readfiles:read,files:writereactions:writepins:writebookmarks:read,bookmarks:writeemoji:readgroups:read,groups:writeim:read,im:writempim:read,mpim:write
Install the app to your workspace
Copy the "Bot User OAuth Token" (starts with
xoxb-)
For search_messages and reminders, also create a User Token with search:read, reminders:read, reminders:write.
Quick Start
git clone <repo>
cd slack-mpm
cp .env.local.example .env.local
# Edit .env.local and add your SLACK_BOT_TOKEN=xoxb-...
uv sync
uv run slack-mpm setup # Verify your token works
uv run slack-mpm doctor # Health checkClaude Desktop Configuration
Add to ~/Library/Application Support/Claude/claude_desktop_config.json (macOS):
{
"mcpServers": {
"slack": {
"command": "uv",
"args": ["run", "--directory", "/absolute/path/to/slack-mpm", "slack-mpm", "mcp"]
}
}
}Restart Claude Desktop. You should see the Slack tools available.
Available Tools
Channel Tools (8)
Tool | Description |
| List all channels (public + private) |
| Get details about a channel |
| Create a new channel |
| Archive a channel |
| Invite users to a channel |
| Remove a user from a channel |
| Join a channel |
| Set channel topic |
Message Tools (13)
Tool | Description |
| Send a message (supports blocks + threading) |
| Send a message visible only to one user |
| Edit an existing message |
| Delete a message |
| Get a permanent link to a message |
| Search messages (requires user token) |
| Fetch channel message history |
| Add emoji reaction |
| Remove emoji reaction |
| Pin a message |
| Unpin a message |
| Reply in a thread |
| Fetch all thread replies |
User Tools (5)
Tool | Description |
| List all workspace users |
| Get user details |
| Look up a user by email |
| Open a DM channel with user(s) |
| List channels a user belongs to |
File Tools (5)
Tool | Description |
| Upload a file to channel(s) |
| List workspace files |
| Get file details |
| Delete a file |
| Share an existing file to channels |
Workspace Tools (4)
Tool | Description |
| Get workspace/team info |
| List custom emoji |
| Get bot details |
| Validate token |
Reminder Tools (4)
Tool | Description |
| Create a reminder |
| List reminders |
| Mark reminder complete |
| Delete a reminder |
Bookmark Tools (3)
Tool | Description |
| List channel bookmarks |
| Add a bookmark to a channel |
| Remove a bookmark |
Scheduled Message Tools (3)
Tool | Description |
| Schedule a future message |
| List pending scheduled messages |
| Cancel a scheduled message |
Using the Python API Directly
import asyncio
from slack_mpm.api import messages, channels, users
from slack_mpm.auth.token_manager import TokenManager
async def main():
token = TokenManager().get_token()
# Send a message
await messages.send_message(token, "#general", "Hello from Python!")
# List channels
data = await channels.list_channels(token)
for ch in data["channels"]:
print(ch["name"])
# Get user info
user = await users.get_user_by_email(token, "person@example.com")
print(user["user"]["real_name"])
asyncio.run(main())Agent Scripts
Standalone automation scripts in the agents/ directory.
slack_listener.py — Real-time channel monitor
Polls a channel and prints new messages as they arrive.
uv run agents/slack_listener.py --channel C1234567890
uv run agents/slack_listener.py --channel C1234567890 --interval 10
uv run agents/slack_listener.py --channel C1234567890 --no-historyslack_notifier.py — Send notifications
Sends messages or file uploads to Slack channels from the command line or stdin.
uv run agents/slack_notifier.py --channel C1234567890 --message "Deploy complete"
echo "alert!" | uv run agents/slack_notifier.py --channel C1234567890
cat report.txt | uv run agents/slack_notifier.py --channel C1234567890 --as-file --filename report.txtslack_responder.py — Auto-responder bot
Monitors for @mentions or DMs and auto-replies with a configured message.
uv run agents/slack_responder.py --response "Thanks, I'll get back to you!"
uv run agents/slack_responder.py --channel C1234567890 --response "Got it!" --interval 60
uv run agents/slack_responder.py --response "Out of office" --dry-runslack_digest.py — Activity digest
Generates a summary of recent channel activity: message counts, active users, top threads.
uv run agents/slack_digest.py --channel C1234567890
uv run agents/slack_digest.py --channel C1234567890 --hours 168 # 1 week
uv run agents/slack_digest.py --channel C1234567890 --hours 24 --top-users 10slack_archiver.py — Channel history export
Exports complete channel message history to JSON or Markdown files with thread support.
uv run agents/slack_archiver.py --channel C1234567890 --output ./archive/
uv run agents/slack_archiver.py --channel C1234567890 --output ./archive/ --format markdown
uv run agents/slack_archiver.py --channel C1234567890 --output ./archive/ --days 30Development
# Install dev dependencies
uv sync
# Run tests
uv run pytest
uv run pytest --cov=src --cov-report=html
# Type checking
uv run mypy --strict src/
# Linting
uv run ruff check src/ agents/
uv run ruff format src/ agents/Project Structure
src/slack_mpm/
├── api/
│ ├── _client.py # Shared httpx client + SlackAPIError
│ ├── channels.py # Channel operations
│ ├── messages.py # Message operations
│ ├── users.py # User operations
│ ├── files.py # File operations
│ ├── workspace.py # Workspace operations
│ ├── reminders.py # Reminder operations
│ ├── bookmarks.py # Bookmark operations
│ └── scheduled.py # Scheduled message operations
├── auth/
│ ├── models.py # SlackToken, TokenStatus, WorkspaceInfo
│ └── token_manager.py # TokenManager (loads from .env.local)
├── cli/
│ └── main.py # CLI: setup, doctor, mcp commands
└── server/
└── slack_mpm_server.py # SlackMCPServer (MCP adapter)
agents/
├── slack_listener.py # Channel message poller
├── slack_notifier.py # Send notifications
├── slack_responder.py # Auto-responder bot
├── slack_digest.py # Activity digest
└── slack_archiver.py # History exportAvailable Tools
64 toolsadd_bookmarkB
Add a bookmark to a Slack channel.
| Name | Required | Description | Default |
|---|---|---|---|
| link | Yes | URL for the bookmark | |
| emoji | No | Optional emoji name without colons (e.g., 'bookmark') | |
| title | Yes | Display title for the bookmark | |
| channel_id | Yes | Channel ID to add the bookmark to |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden, but it only restates the core mutation: adding a bookmark. It does not disclose whether duplicates are rejected, whether permissions are required, or what side effects occur. No contradiction exists, but no behavioral transparency beyond the action itself is added.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no wasted words. It efficiently communicates the tool's purpose without padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple create-like tool, the description plus the fully documented schema gives enough to attempt a correct invocation. However, with no annotations or output schema, it lacks guidance on duplicate behavior, errors, and response expectations, so completeness is only minimal.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents all four parameters (link, emoji, title, channel_id). The description adds no additional parameter semantics beyond identifying Slack as the target, which is the baseline case.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear action ('Add') and resource ('bookmark' to a Slack channel), which unambiguously conveys the operation. It does not explicitly contrast with sibling operations like list_bookmarks or remoe_bookmark, but the verb itself separates it from those tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to choose this tool vs list_bookmarks/remoe_bookmark or channel-management alternatives. No prerequisites such as channel membership or permissions are mentioned, and no alternative routing is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_reactionA
Add an emoji reaction to a Slack message.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Emoji name without colons (e.g., 'thumbsup') | |
| channel | Yes | Channel ID containing the message | |
| timestamp | Yes | Message timestamp | |
| use_user_token | No | React as the authenticated user (requires xoxp- user token) rather than the bot |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It only restates the basic action and does not mention required scopes/permissions, side effects, behavior when the emoji is invalid, or response/error characteristics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with no filler or redundancy. Every word contributes to understanding the tool's purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with a fully documented schema, this is minimally viable. However, with no annotations and no output schema, the description does not cover authentication context, error cases, or expected result, leaving some operational ambiguity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds no parameter-level meaning beyond the schema, but the schema already documents channel, timestamp, name, and use_user_token clearly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Add'), a clear object ('emoji reaction'), and a resource ('Slack message'). It is immediately distinguishable from related sibling tools like remove_reaction or send_message.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the action itself: use this when you want to add an emoji reaction. However, the description does not explicitly mention when not to use it or contrast it with alternatives such as remove_reaction, so guidance is only implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_reminderB
Create a reminder for the authenticated user.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Reminder message text | |
| time | Yes | When to remind — Unix timestamp or natural language (e.g., 'in 30 minutes', 'tomorrow at 9am') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It only states the action without mentioning persistence, side effects, authentication requirements, return value, or how the reminder will be delivered. This is minimal transparency for a creation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with no wasted words. It front-loads the verb and resource and includes the relevant scope ('for the authenticated user') without verbose elaboration.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter tool, the description is adequate but not complete. It lacks information about the return format or confirmation behavior, and there is no output schema to compensate. An agent can invoke it correctly but may not know what to expect in response.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the input schema fully documents both parameters ('text' and 'time'). The description adds no additional meaning about parameter usage, but this is acceptable given the schema already provides thorough descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Create'), the resource ('a reminder'), and the scope ('for the authenticated user'). This distinguishes it from sibling tools like list_reminders, complete_reminder, and delete_reminder, which handle other lifecycle stages.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus alternatives. It does not mention conditions, exclusions, or why an agent might prefer add_reminder over schedule_message or list_reminders. Usage must be inferred purely from the name and description.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| channel | Yes | Channel ID to archive |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. 'Archive' indicates a state-changing operation, but the description does not mention permissions, reversibility, effects on messages, or response behavior. For a mutation with zero annotation coverage, more transparency would be expected.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is an extremly concise single sentence that states the action and object in five words. No filler, no repetition of the schema, and no unnecessary background. It is front-loaded and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter tool with no output schema, the core invocation is clear: provide a channel ID and archive it. However, the absence of annotations means the description is the only source of behavioral context, and it omits side effects, permissions, and return value expectations. This is adequate for a low-complexity task but not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the one parameter `channel` is already documented as 'Channel ID to archive' in the schema. The tool description adds no extra parameter-level meaning, so the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource, 'Archive a Slack channel,' which unambiguously identifies the operation. There is no sibling tool that archives, so this clearly differs from the other channel-management and messaging tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage: use this tool when you want to archive a Slack channel. However, it provides no explicit when-to-use, when-not-to-use, prerequisite, or alternative routing guidance. The action is simple enough that the implication is mostly sufficient, but there is no explicit guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
auth_testB
Validate the Slack token and get workspace/user info.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It does not state what happens on an invalid token, confirm that the operation has no side effects, or describe the shape of the returned workspace/user info. It only restates the basic action without adding behavioral depth.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single efficient sentence with no filler, front-loading the core purpose. It is appropriately concise, though the slash-separated 'workspace/user info' is slightly compressed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter utility, this is minimally viable: an agent can infer that calling it validates the token and returns basic info. However, with no output schema and no annotations, the missing error semantics and vague return details leave a notable gap in contextual completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so parameter documentation is not a concern. The input schema already covers everything, which matches the baseline of 4 for zero-parameter tools.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Validate the Slack token'. This clearly identifies the tool's unique purpose and distinguishes it from all sibling tools, none of which are token validation operations. The additional 'get workspace/user info' clarifies the output without creating serious ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given about when to use this tool versus alternatives like get_workspace_info or get_user_info, nor does it mention exclusions or fallback scenarios. An agent is left to infer that auth_test is for token validation rather than for general workspace/user lookups.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
complete_reminderB
Mark a reminder as complete.
| Name | Required | Description | Default |
|---|---|---|---|
| reminder | Yes | Reminder ID to complete |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It only states the state transition and omits important details such as whether completion is irreversible, idempotent, requires permissions, or affects the reminder listing. There is no contradiction with annotations because none exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single five-word sentence with no filler or irrelevant detail. It front-loads the action and resource while remaining immediately scannable. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter mutation with no output schema and no annotations, the description provides the minimum viable action. The schema covers all parameters, so the invocation details are present. However, it lacks side-effect information and any relationship to sibling reminders operations, which would help an agent use it safely.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: the only parameter, 'reminder,' is already described as 'Reminder ID to complete.' The tool description adds no additional parameter semantics or usage details beyond what the schema provides, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the imperative 'Mark' with a specific resource 'a reminder' and target state 'complete,' which clearly identifies the operation. It distinguishes itself from sibling tools like add_reminder, list_reminders, and delete_reminder by the unique action of completing rather than creating, listing, or deleting.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool instead of related reminder tools. It does not mention prerequisites, such as the reminder needing to exist, or context such as completing a reminder after it has fired. An agent must infer usage solely from the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_canvasA
Create a workspace-level canvas with markdown content. Requires canvases:write scope.
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | Canvas title | |
| document_content | Yes | Markdown content for the canvas |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral burden. It discloses the required OAuth scope ('Requires canvases:write scope') and clearly states that the operation creates a new workspace-level canvas. It does not mention response behavior, but the core mutation and permission traits are transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no filler. The core action and resource are stated immediately, and the permission requirement is appended efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter creation tool, the description covers the essential aspects: what is created, at what scope, and what permission is required. It could be more complete by stating what the tool returns, especially since there is no output schema, but the current information is sufficient for basic correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters. The description only adds 'with markdown content', which restates what the document_content schema description already says. It provides no additional semantic value for either parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Create') and a clear resource ('workspace-level canvas'), and specifies that content is markdown. The phrase 'workspace-level' also distinguishes this tool from the sibling create_channel_canvas, making its purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a clear context signal: use this to create a workspace-level canvas rather than a channel-level one. It does not explicitly name alternatives or state when not to use it, but the 'workspace-level' qualifier provides enough differentiation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_channelC
Create a new Slack channel.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Channel name (lowercase, no spaces, use hyphens) | |
| is_private | No | Create as private channel |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral disclosure burden. It only states that the tool creates a channel, but does not mention workspace-wide visibility, required permissions, name uniqueness, or what happens on duplicate creation. This is minimal mutation context with no added behavioral transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single short sentence with no filler or redundancy that detracts from clarity. It is appropriately brief for a simple creation tool and front-loads the core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema and no annotations, and the description only states the action. An agent would benefit from knowing what the tool returns, whether permission is required, or how it behaves if the channel already exists. The schema covers parameters but not the broader behavioral context needed for confident invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters: name and is_private. The description adds no parameter-level detail, which is acceptable per baseline since the schema handles the semantics fully.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the verb and resource: create a Slack channel. It is easy to distinguish from sibling tools like create_canvas or create_channel_canvas. However, it does not add any scope or distinguishing detail beyond restating the resource in the tool name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance about when to use this tool versus alternatives like join_channel, archive_channel, or invite_to_channel. The intended usage is only implied by the name and description, with no mention of prerequisites, exclusions, or when a different tool should be selected.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_channel_canvasA
Create a canvas attached to a Slack channel. Requires canvases:write scope.
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | Canvas title | |
| channel | Yes | Channel ID to attach the canvas to | |
| document_content | Yes | Markdown content for the canvas |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description must carry the behavioral burden. It discloses an important authorization requirement (canvases:write scope) and clearly signals a mutating creation action. It does not describe return values or failure modes, but the auth context is a meaningful behavioral disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences with no filler. The first sentence states the core purpose, and the second adds the required scope. Information is front-loaded and every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple three-parameter creation tool, the description plus complete schema is sufficient for selection and invocation: it gives the action, the resource attachment point, required fields, and required scope. It could be slightly more complete by naming the standalone create_canvas alternative, but this does not create a significant gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and each parameter already has a clear description: channel, title, and document_content. The tool description adds no material parameter-level detail beyond what the schema provides, so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action and resource: "Create a canvas attached to a Slack channel." The qualifier "attached to a Slack channel" clearly distinguishes this from the sibling create_canvas, which is for standalone canvas creation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use this tool: it creates a canvas that is attached to a Slack channel, and it states the required authorization ("Requires canvases:write scope"). It does not explicitly name an alternative or exclusion, but the channel-attached qualifier gives an agent enough guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_listA
Create a new Slack List in a channel. Requires lists:write scope and a paid Slack plan.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | List name | |
| items | No | Optional initial list items (each is a dict with key-value pairs) | |
| channel | Yes | Channel ID to create the list in |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears the behavioral burden. It discloses auth requirements and plan restrictions, which is valuable, but says nothing about response format, side effects beyond creation, or error behavior. Adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the core action, followed by the most important requirement. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple 3-parameter create tool, the description covers purpose and prerequisites; the schema handles parameter details. It does not describe return output, and the absence of an output schema means that is a minor gap, but the tool can be invoked correctly with the given information.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so parameters are fully documented there. The description only adds 'in a channel,' which echoes the channel parameter and provides no new semantic value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Describes a specific action ('Create a new Slack List in a channel') with the resource and location. However, it does not explicitly contrast with sibling tools like update_list or create_list_item, relying on the verb 'create' and 'new' to differentiate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
States a clear prerequisite (lists:write scope, paid plan) but offers no explicit guidance on when to choose this tool over siblings such as update_list or create_list_item. The usage context is implied rather than spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_list_itemA
Add a new item to a Slack List. Requires lists:write scope.
| Name | Required | Description | Default |
|---|---|---|---|
| value | Yes | Item text/value | |
| status | No | Optional status (e.g., 'incomplete', 'complete') | |
| list_id | Yes | List ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden. It clearly states the required OAuth scope, which is useful, and the mutation intent. However, it does not mention error behavior, duplicate handling, or what happens on success, leaving some behavioral gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with no filler. The core action is front-loaded and the required scope follows immediately. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple create tool, the description plus fully-documented schema provides enough for correct invocation. The requirement scope is disclosed and the action is unambiguous. Minor missing context like return values is not critical here.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents value, status, and list_id. The description adds no parameter-level semantics beyond the schema, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States exactly what the tool does: 'Add a new item to a Slack List.' The verb is specific and the resource is clear, distinguishing it from sibling tools like update_list_item, delete_list_item, and list_list_items.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by saying 'Add a new item' and mentions the required lists:write scope, but it does not explicitly say when to choose this tool over related items such as update_list_item or delete_list_item. Usage guidance is adequate but not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_canvasA
Delete a canvas. Requires canvases:write scope.
| Name | Required | Description | Default |
|---|---|---|---|
| canvas_id | Yes | Canvas ID to delete |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It reveals the required scope but does not mention that deletion is likely permanent, what side effects occur (e.g., removing associated access or sections), or any error/idempotency behavior. 'Delete' implies destruction, but the description adds little beyond the tool's name.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no filler. The action is front-loaded and the auth requirement is stated succinctly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The essentials are present: action, resource, required scope, and the schema fully covers the one parameter. However, the description omits permanence and side-effect information, which is notable for a destructive operation with no annotations or output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents canvas_id as 'Canvas ID to delete' with 100% schema description coverage. The description adds no additional semantic meaning, so the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'Delete a canvas.' This clearly identifies the operation and distinguishes it from siblings like delete_message or delete_canvas_access by object type.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides the prerequisite auth scope ('canvases:write scope') but gives no explicit guidance about when to use this tool versus alternatives. Deletion is a standalone operation with no close sibling, so usage is largely implied by the name and resource.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_canvas_accessB
Revoke access to a canvas for a user or group.
| Name | Required | Description | Default |
|---|---|---|---|
| user_id | No | User ID to revoke access for | |
| group_id | No | Group ID to revoke access for | |
| canvas_id | Yes | Canvas ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. 'Revoke' implies a mutating/destructive operation, but the description does not disclose irreversibility, permission requirements, whether both user_id and group_id can be supplied or only one, or what happens if only canvas_id is given. The schema's optional user_id and group_id create ambiguity that the description does not resolve.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single clear sentence with no filler. It is front-loaded with the action and resource, making it easy to scan and remember.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite its simplicity, the description is incomplete for a mutating tool without annotations or output schema. It does not state the important precondition that access must already exist, nor clarify how user_id, group_id, and canvas_id combine. An agent could reasonably call this with only canvas_id since that is the only required parameter, and fail. The description does not adequately prepare the agent for that behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the structured fields already explain each parameter. The description adds that the operation targets 'a user or group', which maps to user_id and group_id, but it does not clarify the relationship between them or whether one must be provided. This is adequate but not additive beyond the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Revoke') and resource ('canvas access') and clearly distinguishes itself from deletion of the canvas itself or setting/updating access. It names the target ('a user or group'), making its purpose unambiguous relative to sibling tools like delete_canvas and set_canvas_access.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use or when-not-to-use guidance is given. It does not contrast with set_canvas_access or explain whether this tool is for full removal versus permission changes. An agent must infer usage solely from the name and one-line description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_fileB
Delete a file from Slack.
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | File ID to delete |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It identifies the tool as destructive, but does not state whether deletion is permanent, what happens to shared links or references, or whether permission is required. This is a significant gap for a delete operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, direct sentence with no filler or redundant information. It is appropriately front-loaded and easy to parse, fitting the tool's simplicity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The definition is minimally sufficient for a one-parameter delete tool, especially with full schema coverage. However, with no annotations and no usage guidance, it does not fully prepare an agent to understand the consequences or appropriate context of deleting a file.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers the single parameter 'file' with 100% description coverage, defining it as 'File ID to delete'. The description adds no extra parameter meaning, so the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'Delete' with the resource 'file from Slack', making the action unambiguous. It is clearly distinct from sibling file tools like upload_file, list_files, get_file_info, and share_file.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives, nor any mention of prerequisites, permissions, or when deletion would be inappropriate. The agent is left to infer usage solely from the tool name and action.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_list_accessA
Revoke access to a Slack List for a user or group.
| Name | Required | Description | Default |
|---|---|---|---|
| list_id | Yes | List ID | |
| user_id | No | User ID to revoke access for | |
| group_id | No | Group ID to revoke access for |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It communicates that this is a mutating removal operation, but it omits whether the revocation is reversible, whether special permissions are required, and whether user_id and group_id interact (e.g., mutually exclusive or one required). These are material details for a tool that deletes access.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single short sentence with no filler. It front-loads the action and packs the resource and target into a compact, understandable phrase.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a low-complexity tool, the core action is clear, but important invocation context is missing: the description never says that a user or group identifier is needed to actually revoke access, and it offers no behavioral or error context. With no annotations and no output schema, the description leaves an agent with an adequate but not fully complete picture.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3 and the schema already documents each parameter. The description adds little beyond paraphrasing the schema, and it does not clarify the real-world constraint that at least one of user_id or group_id should be provided when only list_id is marked required.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Revoke'), names the resource ('access to a Slack List'), and clarifies the target ('a user or group'). This makes the operation unambiguous and distinguishes it from siblings like set_list_access, which grants or changes access.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The correct usage is implied by the word 'Revoke' — use this tool when access should be removed. However, it does not explicitly mention alternatives, when not to use it, or that set_list_access is the complementary operation. An agent has to infer the decision context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_list_itemA
Delete a single item from a Slack List. Requires lists:write scope.
| Name | Required | Description | Default |
|---|---|---|---|
| item_id | Yes | Item ID to delete | |
| list_id | Yes | List ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It clearly identifies the operation as destructive and states the required OAuth scope (lists:write), which is useful for authorization decisions. It does not mention irreversibility or return behavior, but 'delete' makes the core behavior clear.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no filler. The primary action is front-loaded, and the scope requirement is appended as a separate, easily parsed sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter delete operation, the description is largely complete: it names the resource, indicates singular scope, and provides the required permission. It could be slightly richer by noting that deletion is permanent or that the item must exist in the list, but these are not critical gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the parameters are already fully documented by the schema. The description adds no additional meaning beyond the literal schema properties, making baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Delete a single item') on a specific resource ('Slack List'), which clearly distinguishes it from the sibling tool 'delete_list_items' that handles multiple items. The verb and object are unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for exactly one item and requires lists:write scope, but it does not explicitly direct the agent to use delete_list_items when deleting multiple items. The distinction from the sibling tool is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_list_itemsA
Delete multiple items from a Slack List in one call. Requires lists:write scope.
| Name | Required | Description | Default |
|---|---|---|---|
| list_id | Yes | List ID | |
| item_ids | Yes | List of item IDs to delete |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral burden. It does disclose an important auth requirement ('Requires lists:write scope'), which is valuable beyond the schema. However, it does not mention potential partial failure, irreversibility, or what happens if some item IDs are invalid.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence with no filler, action and resource front-loaded, and the scope requirement neatly appended. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter delete operation with a fully described schema, the description captures the resource, the batch behavior, and the required scope. The absence of an output schema is acceptable here because a successful delete response is generally predictable, though explicit mention of return value or partial-failure behavior would make it fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters are already documented in the input schema. The description adds no additional parameter-level meaning, so the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description states a specific verb ('Delete'), a specific resource ('items from a Slack List'), and a key distinguishing trait ('multiple items... in one call'). This clearly differentiates it from the sibling tool delete_list_item, which handles single-item deletion.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'multiple items... in one call' implies the batch-use case and suggests a contrast with the singular delete_list_item tool, but it never explicitly names the alternative or states when to prefer one over the other. Usage context is clear but left to inference.
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 Slack message.
| Name | Required | Description | Default |
|---|---|---|---|
| ts | Yes | Timestamp of the message to delete | |
| channel | Yes | Channel ID containing the message |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It only says 'Delete' and does not disclose whether deletion is permanent, whether special permissions are required, or what happens to associated content like replies and pins. This is a meaningful gap for a destructive operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single clear sentence with no wasted words or superfluous information. It is appropriately short for a simple operation, though it mostly restates what the tool name already conveys.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter delete operation with full schema coverage and no output schema, the core invocation details are present. However, because there are no annotations, the description should also cover operational context like irreversibility and authorization requirements. It is minimally adequate but leaves behavioral gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema fully documents both parameters: channel and ts. Schema description coverage is 100%, so the description does not need to add parameter details. The baseline of 3 applies because the description contributes no additional semantic nuance beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a direct imperative verb and names the exact resource ('Slack message'). It is clearly distinct from sibling tools like update_message, delete_file, and delete_scheduled_message. Even though brief, it unambiguously states what action is performed on what object.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when this tool should be used versus alternatives. The description does not mention exclusions, such as using delete_scheduled_message for scheduled messages, or any context about when deletion is appropriate. An agent must infer usage solely from the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_reminderC
Delete a reminder.
| Name | Required | Description | Default |
|---|---|---|---|
| reminder | Yes | Reminder ID to delete |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. 'Delete a reminder' only conveys that the action is destructive; it does not state whether deletion is permanent, whether there are side effects, what happens for a missing ID, or any authorization requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one short declarative sentence with no unnecessary filler, and the core operation is immediately clear. It is appropriately concise, though it could have used the brevity to add useful behavioral context without losing clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-parameter deletion tool, the schema provides the essential invocation detail. However, with no annotations, no output schema, and no mention of success/error behavior or the relationship to complete_reminder, the description leaves moderate gaps in context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already documents the sole parameter as 'Reminder ID to delete' with 100% coverage. The description adds no extra semantic detail beyond the parameter's purpose, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the exact action and object: 'Delete a reminder.' This is clear and unambiguous about what the tool does, but it does not explicitly differentiate from sibling tools such as complete_reminder or list_reminders, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives. It does not mention complete_reminder as the non-destructive option, nor does it state prerequisites such as the reminder existing or the user having permission to delete it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_scheduled_messageA
Cancel/delete a scheduled message before it is sent.
| Name | Required | Description | Default |
|---|---|---|---|
| channel | Yes | Channel ID the message was scheduled for | |
| scheduled_message_id | Yes | Scheduled message ID to cancel |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden of behavioral disclosure. It does disclose a key constraint: the scheduled message must be canceled 'before it is sent,' and the destructive nature is apparent from 'Cancel/delete.' However, it does not mention permissions, what happens if the message was already sent, or whether the operation is reversible.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single efficient sentence that front-loads the action and constraint. Every word earns its place and there is no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter tool with fully described schema and no output schema, the description plus schema provides enough information for an agent to invoke it correctly. The only minor gap is that it does not mention how to obtain the scheduled_message_id or the behavior if the message is already sent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already documents both required parameters with meaningful descriptions: 'Channel ID the message was scheduled for' and 'Scheduled message ID to cancel.' With 100% schema description coverage, the tool description adds no additional parameter semantics, so a baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses explicit action verbs 'Cancel/delete' and names the precise resource 'a scheduled message' with the temporal qualifier 'before it is sent.' This clearly distinguishes it from the sibling delete_message tool, which targets already-sent messages.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'before it is sent' provides a clear context for when the tool applies and sets the boundary that the message must not have been delivered. It does not explicitly name alternatives or state when not to use it, but the scheduled-message resource makes the intended use case clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
edit_canvasA
Edit (replace content of) an existing canvas. Requires canvases:write scope.
| Name | Required | Description | Default |
|---|---|---|---|
| canvas_id | Yes | Canvas ID to edit | |
| operation_id | No | Optional idempotency key for the edit | |
| document_content | Yes | New markdown content |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. It explicitly discloses that the operation replaces content, signaling destructive overwrite behavior, and it notes the authentication requirement. It does not describe return values or idempotency details, but the core behavioral trait is clearly communicated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that states the action, clarifies the destructive nature, and adds the required scope. There is no filler or redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is adequate for a simple mutation tool, covering purpose and auth. However, it does not mention the optional operation_id semantics, what the response will be, or when another canvas tool would be more appropriate. Given no output schema and no annotations, these gaps leave the agent with some uncertainty.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the parameters are already fully documented. The description adds no additional parameter-level meaning beyond what the schema provides. This meets the baseline for fully covered schemas.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'Edit (replace content of) an existing canvas.' The parenthetical clarifies that the tool overwrites content, which distinguishes it from sibling operations like create_canvas or set_canvas_access. The scope is immediately recognizable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use on an existing canvas and states a required OAuth scope, 'Requires canvases:write scope.' However, it does not explicitly mention when to prefer this tool over alternatives such as create_canvas or when not to use it. Usage context is present but mostly implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_bot_infoA
Get information about the bot associated with the current token.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must carry the burden of behavioral disclosure. It does implicitly communicate a read-only operation through 'Get' and adds the context that the bot is tied to the current token. However, it does not describe the expected response shape, error behavior, or any side effects, leaving some behavioral aspects undisclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, focused sentence with no waste. It front-loads the operation and the key scoping detail (the bot associated with the current token), making it immediately actionable for an agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only informational tool, this description is nearly complete. It clearly states the resource and the auth context. The lack of an output schema is not a major issue here because the tool's purpose is simple and the agent can generically handle the returned bot info, though explicitly naming example fields would make it fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the input schema is trivially complete at 100% coverage. The description correctly adds no parameter information because none is needed. Baseline for zero parameters is 4, and there is no gap for the description to compensate for.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'Get' with a clearly identified resource: 'the bot associated with the current token.' This distinguishes it from sibling tools like get_user_info and get_workspace_info by specifying the bot and the token-based association, leaving no ambiguity about what the tool returns.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus alternatives such as get_user_info or get_workspace_info. There are no explicit conditions, exclusions, or context hints beyond the tool's name and resource, so an agent must infer appropriate usage from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_channel_infoA
Get detailed information about a specific Slack channel.
| Name | Required | Description | Default |
|---|---|---|---|
| channel | Yes | Channel ID (e.g., C1234567890) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of disclosing behavior. The verb 'get' implies a read operation, but the description does not mention required permissions, error behavior, rate limits, or what fields of 'detailed information' will actually be returned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, direct sentence with no filler or redundancy. It front-loads the purpose clearly and is appropriately sized for a simple one-parameter getter tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple and has no nested parameters, so the input side is complete. However, there is no output schema, and the description only says 'detailed information' without specifying what that includes, leaving some ambiguity about the return value for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already fully documents the single parameter ('Channel ID (e.g., C1234567890)') with 100% coverage, so the description does not need to add much. It reinforces that the information is about a 'specific' channel, but adds no meaningful semantic detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('get'), the resource ('specific Slack channel'), and the nature of the result ('detailed information'). It is easily distinguished from siblings like list_channels, which return multiple channels, and get_user_info, which targets a different resource.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool should be used when detailed information about one specific channel is needed, but it does not explicitly state when to prefer this over alternatives or mention any exclusions. The context is understandable but relies on inference rather than direct guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_file_infoB
Get detailed information about a Slack file.
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | File ID (e.g., F1234567890) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It only says 'get detailed information' and provides no context about whether this is read-only, what metadata fields are returned, whether deleted files cause errors, or any permissions needed. The verb 'get' implies read behavior, but the description adds little transparency beyond common sense.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that directly conveys the core operation with no filler. It is appropriately concise for a simple one-parameter tool, though it could earn a 5 with more substantive detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no annotations, the description leaves the agent without a clear picture of what 'detailed information' actually includes. The tool name and parameter identify the target file, but the lack of return-value specifics and edge-case handling makes the description incomplete for an agent selecting and invoking the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already documents the sole parameter as 'File ID (e.g., F1234567890)' with 100% coverage. The description itself doesn't add parameter-specific detail, but the schema fully covers semantics, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb and resource: 'Get detailed information about a Slack file.' It unambiguously identifies the operation as retrieving metadata for a single file, distinct from sibling tools like list_files, delete_file, or upload_file.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is used when you need details about a specific file identified by its file ID, and the context signals show a single required 'file' parameter. However, it does not explicitly contrast with alternatives such as list_files or get_file_info vs. search, nor does it mention when a different tool would be more appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_list_itemA
Get details for a single Slack List item. Requires lists:read scope.
| Name | Required | Description | Default |
|---|---|---|---|
| item_id | Yes | Item ID | |
| list_id | Yes | List ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral disclosure burden. 'Get details' clearly signals a read-only, side-effect-free operation, and the required scope is stated. It does not mention error behavior or return format, but this is a simple getter where those omissions are minor.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler: the core action is stated first, followed by the essential auth prerequisite. Every word contributes to understanding what the tool does and how to call it.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read operation with two required IDs, the description and schema together are sufficient for correct invocation. The only notable gap is not explicitly pointing to list_list_items as the plural alternative, but this is a minor weakness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already describes both parameters with 100% coverage, albeit tersely as 'Item ID' and 'List ID'. The description adds no extra meaning about ID formats, relationships, or how the parameters are used, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Get details') and resource ('single Slack List item'), making the tool's purpose immediately clear. It also distinguishes this from sibling list-, create-, update-, and delete-item tools without ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly provides the required scope ('Requires lists:read scope') and the word 'single' implies use for one item rather than listing all items. However, it never explicitly names list_list_items as the alternative for bulk retrieval, so usage guidance is implied rather than direct.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_permalinkA
Get a permanent link to a Slack message.
| Name | Required | Description | Default |
|---|---|---|---|
| channel | Yes | Channel ID containing the message | |
| message_ts | Yes | Timestamp of the message |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It communicates the output is a permanent link and implicitly suggests a read-only operation, but it does not mention permissions, error behavior, or the exact return format beyond 'link'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loadedsentence with no wasted words. It states the core purpose immediately and requires no additional elaboration.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a low-complexity tool with full schema coverage, the description is mostly adequate. However, with no annotations and no output schema, it could usefully specify that the return value is a URL string or mention any prerequisites for finding the message.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already covers both parameters with descriptions, so schema_description_coverage is 100%. The description adds no parameter-specific semantics beyond the context that the link applies to a Slack message.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Get') and the specific result ('a permanent link to a Slack message'). This is distinct from all sibling tools, none of which involve generating permalinks.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool should be used when a permanent link to a Slack message is needed, but it does not explicitly mention when to prefer this over alternatives or provide exclusions. There is no obvious sibling alternative, so the lack of guidance is a mild gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_thread_repliesA
Fetch all replies in a Slack thread.
| Name | Required | Description | Default |
|---|---|---|---|
| channel | Yes | Channel ID containing the thread | |
| thread_ts | Yes | Timestamp of the parent message |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are absent, so the description carries the full behavioral burden. 'Fetch' indicates read-only and 'all' implies a collection, but the description does not disclose return shape, auth/permission requirements, pagination, ordering, or behavior when there are no replies. With no output schema, this gap matters.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single seven-word sentence that front-loads the action and content with no filler. It does not repeat schema field names or waste words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a low-complexity getter with two well-described parameters, the definition enables confident invocation. However, without an output schema or annotations, the agent is left to guess what the returned replies look like and whether 'all' may involve pagination, making the definition minimally complete but not richly contextual.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers both parameters fully with descriptions ('Channel ID containing the thread' and 'Timestamp of the parent message'), so the baseline is 3. The description adds only the 'Slack thread' context and provides no additional value constraints or format details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The verb 'Fetch' plus the resource 'all replies in a Slack thread' is specific and unambiguous. It also stands apart from sibling tools like send_message and get_channel_info because it is the only one describing thread-reply retrieval.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the intended use case, retrieving all replies for a thread, but provides no explicit when-to-use guidance and names no alternatives. For a simple getter this is adequate, though there is no exclusion or alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_user_by_emailA
Look up a Slack user by their email address.
| Name | Required | Description | Default |
|---|---|---|---|
| Yes | Email address to look up |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The verb 'look up' signals a read-only operation, but with no annotations the description carries the full burden. It does not disclose error behavior, required scopes, rate limits, or what the returned user object contains. It is adequate for a simple lookup but leaves notable gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single focused sentence with no filler, and the key qualifier 'by their email address' is placed immediately. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read-only lookup with no output schema, the description and schema together are nearly sufficient. Missing return-format and error details would be useful, but the agent has enough to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the parameter is self-explanatory ('Email address to look up'). The tool description adds no additional semantic meaning beyond what the input schema already provides, so the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('look up'), a specific resource ('Slack user'), and the lookup key ('email address'). This clearly distinguishes it from sibling user tools like list_users and get_user_info, which operate by different criteria.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool should be used when you have an email address and need the corresponding Slack user. However, it provides no explicit guidance about when not to use it or which alternative tool to choose, such as get_user_info for ID-based lookups.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_user_infoB
Get detailed information about a Slack user.
| Name | Required | Description | Default |
|---|---|---|---|
| user | Yes | User ID (e.g., U1234567890) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It mentions 'detailed information' but does not disclose what fields are returned, whether the operation is read-only, any rate limits, or what happens for invalid/unknown user IDs. This is a meaningful gap for an API call tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no wasted words. It is appropriately concise for a simple tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple with one parameter and no output schema, so the needed context is minimal. However, the lack of any behavioral disclosure (what 'detailed information' includes, error behavior) leaves minor gaps; the description is adequate but not rich.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents the single parameter. The description adds only 'detailed information', which does not meaningfully clarify the parameter beyond the schema's 'User ID' example. Baseline 3 is appropriate given full schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('get') and resource ('detailed information about a Slack user'), making the purpose clear. It does not explicitly differentiate from sibling tools like list_users or get_user_by_email, but the singular 'user' scope helps distinguish it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies this tool retrieves details for a single user by ID, which suggests usage when a specific Slack user ID is known. It does not state when to use alternatives like get_user_by_email or list_users, leaving some selection guidance to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_workspace_infoA
Get information about the current Slack workspace.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The verb 'Get' conveys a read-only, non-mutating operation, which is useful since no annotations are provided. However, the description does not disclose what data is returned, whether any special authorization is needed, or any other behavioral details. It is honest but minimal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one short sentence with no filler. The action and target resource are front-loaded, making the tool's purpose immediately understandable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter tool, correctness of invocation is trivially satisfied. However, with no output schema and no mention of what workspace fields are returned, an agent is left guessing about the result shape, which matters when using the output in later steps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters and the schema description coverage is 100%, so there are no parameters requiring semantic explanation. The baseline of 4 applies because the description does not need to compensate for any undocumented inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get' and the resource 'current Slack workspace', distinguishing it from sibling tools that operate on channels, messages, users, or files. Even though it does not enumerate the returned fields, the resource scope is unambiguous and none of the siblings cover workspace-level info.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives like get_bot_info or auth_test, which could also be relevant for workspace-level context. The description implies a general workspace information need but gives no conditions, exclusions, or alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
invite_to_channelC
Invite one or more users to a Slack channel.
| Name | Required | Description | Default |
|---|---|---|---|
| users | Yes | List of user IDs to invite | |
| channel | Yes | Channel ID to invite users to |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden of disclosing side effects. It only describes the basic action and does not mention permissions, whether the inviter must already be a member, failure modes for already-invited users, or what the response contains.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single clear sentence with no filler or duplication of parameter details. It is well-structured and readable, though it is arguably too thin for a tool with no annotations or output schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations, no output schema, and no usage guidance, the description leaves important context unstated, such as prerequisites and failure behavior. The two parameters are documented, but that is only a small part of invoking this operation successfully.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and both parameters ('users' and 'channel') have clear descriptions in the schema. The tool description adds little beyond 'one or more users' and 'Slack channel,' which the schema already conveys, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('invite') and resource ('one or more users to a Slack channel'), which clearly identifies the core action. It does not explicitly differentiate this from sibling membership tools like join_channel or kick_from_channel, though the unique 'invite' action mostly carries that distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to prefer this tool over alternatives (e.g., join_channel for self-joining, kick_from_channel for removal) and no exclusions or preconditions. The use case must be inferred entirely from the tool name and verb.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
join_channelC
Join a Slack channel.
| Name | Required | Description | Default |
|---|---|---|---|
| channel | Yes | Channel ID to join |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description bears the full burden of behavioral disclosure. It only states the action and does not mention idempotency, permission requirements, behavior for already-joined channels, or any side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence with no filler or unnecessary detail. It is efficient and immediately understandable, though it is minimal enough that more context could be valuable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations, no output schema, and a one-line description, the tool lacks meaningful context. Important aspects such as whether this joins as the current user, how it differs from inviting someone, and failure conditions are left unspecified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description covers the single parameter 100%, stating it is the 'Channel ID to join.' The tool description adds no extra semantic information beyond the schema, which aligns with the baseline for full schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Join') and a clear resource ('a Slack channel'). It is not a tautology and distinguishes at a basic level from sibling tools like invite_to_channel, though it does not explicitly state that it acts on the authenticated user.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when to use this tool versus alternatives such as invite_to_channel or create_channel. The context is not explicitly stated, and there are no exclusions or alternative-routing hints.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kick_from_channelB
Remove a user from a Slack channel.
| Name | Required | Description | Default |
|---|---|---|---|
| user | Yes | User ID to remove | |
| channel | Yes | Channel ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It states only the core effect ('Remove a user') and does not disclose permission requirements, irreversibility, failure behavior, or side effects like notifications.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, no filler, and the action and object are front-loaded. The entire description earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutating tool with no annotations and no output schema, this one-sentence description is thin. It omits preconditions, error semantics, and response behavior, so an agent is left with only the action and raw IDs.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both 'user' and 'channel' fields documented directly in the schema. The description adds no extra parameter meaning, which is acceptable at the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Remove') and names the exact resource ('a user' from 'a Slack channel'), making the operation unmistakable. It is clearly distinct from sibling tools like invite_to_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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to choose this tool over siblings or what preconditions apply (e.g., admin/owner permission). The intended use must be inferred from the tool name and action phrase.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_bookmarksA
List all bookmarks in a Slack channel.
| Name | Required | Description | Default |
|---|---|---|---|
| channel_id | Yes | Channel ID to list bookmarks for |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It correctly implies a read-only listing operation, but does not disclose response format, pagination behavior, or error conditions. It does not contradict any annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no filler words. It front-loads the action and resource, and every word contributes to understanding the tool's function.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter list operation, the description plus schema provide sufficient information to invoke the tool correctly. However, since there is no output schema, a brief note on the return shape (e.g., an array of bookmark objects) would improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides 100% coverage of the single parameter with the description 'Channel ID to list bookmarks for'. The tool description adds no additional semantic value beyond what the schema provides, so the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'List' with the resource 'bookmarks', and clearly scopes it to 'a Slack channel'. This unambiguously distinguishes it from sibling operations like add_bookmark and remove_bookmark.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes the tool's purpose clear: retrieve all bookmarks for a specified channel. While it does not explicitly name alternatives or exclusions, there are no close sibling alternatives for listing bookmarks, so an agent can infer the appropriate usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_channelsA
List all channels in the Slack workspace (public and private).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of channels to return | |
| types | No | Comma-separated channel types: public_channel, private_channel, mpim, im | public_channel,private_channel |
| name_filter | No | Optional substring to filter channel names (case-insensitive) | |
| exclude_archived | No | Exclude archived channels from results |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden. It clearly conveys the read-only listing behavior and explicitly includes private channels. It does not mention pagination, required OAuth scopes, or the fact that private channel visibility may be limited to channels the app has access to, but the core semantics are not misleading.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler. It states the resource, scope, and channel types in a compact way that an agent can parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has no required parameters and all optional parameters are fully described in the schema, so an agent can invoke it correctly from the description alone. It lacks an explicit output-format hint and pagination note, but for a simple read-only list operation this is a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All four parameters are fully documented in the input schema (100% coverage), so the description does not need to add parameter-level detail. The description adds no extra semantics beyond the schema, so the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List'), a clear resource ('channels'), and a well-defined scope ('in the Slack workspace (public and private)'). It clearly distinguishes itself from siblings like get_channel_info (single channel) and list_user_channels (user-specific channels), even without naming them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'all channels in the Slack workspace' implies workspace-wide enumeration, which indirectly contrasts with list_user_channels. However, it does not explicitly state when to prefer this tool over alternatives or mention exclusions such as archived channels.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_emojisA
List all custom emoji in the Slack workspace.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral burden. 'List' clearly signals a read-only enumeration, but the description does not disclose details such as pagination, output shape, permission requirements, or whether any filtering is available.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler or redundancy. Every word earns its place and the core action and scope are stated immediately.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only list tool, the description is adequate: it states the exact resource and scope with no input ambiguity. It does not describe the response format, but the low complexity and obvious return value make this a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the empty input schema already covers everything. The description aligns with the no-parameter interface and adds no conflicting or missing parameter information.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List') and a specific resource ('all custom emoji in the Slack workspace'), making the tool's purpose immediately clear. It also distinguishes itself from sibling list_* tools by naming a unique resource type.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool: whenever the full set of workspace custom emoji is needed. However, it provides no explicit comparison to alternatives, no exclusions, and no conditions under which a different tool should be preferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_filesB
List files in the Slack workspace or a specific channel.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | Maximum number of files to return | |
| channel | No | Optional channel ID to filter files by |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must bear the full burden of behavioral disclosure. It signals a read-only enumeration via 'List' and adds the optional channel scope, but it does not disclose pagination behavior, result ordering, file visibility/access rules, or whether metadata is returned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler. It conveys the action, resource, and optional scope in minimal words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter list operation, this is nearly usable and the schema covers parameter semantics. However, with no output schema, the description does not explain what the tool returns (metadata, pagination, format) or any access caveats, leaving some inference to the agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already describes both parameters with 100% coverage, so the baseline is 3. The description's mention of 'workspace or a specific channel' reinforces the channel parameter but adds no new semantic detail beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the action ('List'), the resource ('files'), and the scoping dimension ('workspace or a specific channel'). It is distinct from sibling file-related tools like upload_file, get_file_info, and delete_file, so an agent can tell it apart based on the stated verb and resource.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool but gives no explicit guidance about when to prefer it over alternatives like get_file_info or search_messages. It lacks any exclusions, prerequisites, or comparison with sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_historyC
Fetch message history from a Slack channel.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of messages to return | |
| latest | No | Only messages before this Unix timestamp | |
| oldest | No | Only messages after this Unix timestamp | |
| channel | Yes | Channel ID to fetch history from |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It only says 'fetch' which implies a read operation, but it does not reveal ordering, pagination behavior, whether replies are included, or any limits/constraints beyond the schema. This is a minimal description that leaves significant behavior unspecified.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single short sentence with no filler, and the main action and target are front-loaded. It earns its place in terms of brevity, though it sacrifices valuable detail for conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Without an output schema or annotations, the description is the only source of contextual information. It fails to explain what a successful response looks like, the ordering of returned messages, or any edge cases (e.g., time range behavior). For a tool with four parameters and no other structured context, this is incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters are already documented in the schema itself. The description adds no additional meaning about the parameters, which is acceptable given the schema coverage, but it also provides no context about how limit, latest, and oldest interact in practice.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Fetch message history from a Slack channel' clearly identifies the verb (fetch), resource (message history), and scope (from a Slack channel). It is unambiguous for basic understanding, though it does not explicitly differentiate from siblings like search_messages or get_thread_replies.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. It does not mention that this is for direct channel history retrieval, whereas search_messages is for searching, or get_thread_replies for thread-specific replies. The agent must infer usage from the name and schema alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_list_itemsA
Fetch all items in a Slack List (paginated). Requires lists:read scope.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max items per page (default 100) | |
| list_id | Yes | List ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the disclosure burden. It does disclose pagination behavior and a required scope, which is useful. However, it does not explain how pagination works (e.g., cursor-based, whether all pages are automatically fetched), what the response format is, or explicitly state that this is a non-mutating read operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that front-loads the core action and resource, then adds pagination and scope requirements. No filler or redundant phrasing is present.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list tool with two parameters and full schema coverage, the description provides the key operational facts: what is fetched, that pagination is involved, and what scope is needed. It does not describe response structure or pagination mechanics, but this is a relatively simple tool and the main invocation requirements are covered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: list_id is described as 'List ID' and limit as 'Max items per page (default 100)'. The description adds context about pagination and fetching all items but does not substantially enrich parameter semantics beyond the schema, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Fetch') and names the exact resource ('all items in a Slack List'), also noting pagination. This clearly distinguishes it from sibling tools like get_list_item (singular item) and create_list_item (creation), so an agent can tell them apart.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool: when you need all items in a Slack List, and it provides a prerequisite ('Requires lists:read scope'). However, it does not explicitly contrast it with alternatives or mention cases where get_list_item or other list-related tools would be more appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_remindersA
List all reminders for the authenticated user.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It communicates a read-style listing operation scoped to the authenticated user, so an agent can infer safety. However, it does not disclose output format, ordering, pagination, or whether all reminder states are included.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no redundant wording. The key information—action, resource, and scoping—is front-loaded and every word contributes value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple, zero-parameter list operation, the description is largely complete and gives an agent enough to select the tool correctly. The main gaps are the absence of an output shape description and no routing to sibling tools, but the low complexity of this tool makes those less critical.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters and the schema covers all of them, so the baseline is 4. The description adds meaningful context by clarifying that the operation uses the authenticated user's identity rather than requiring explicit parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List'), a clear resource ('reminders'), and a scope ('for the authenticated user'). This distinguishes it from sibling tools like get_reminder, create_reminder, and delete_reminder, and from other list-type tools such as list_channels and list_files.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states what the tool does but gives no guidance about when to use it versus alternatives, such as get_reminder for retrieving a single reminder or search-style tools. There are no explicit conditions, exclusions, or when-not-to-use indications.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_scheduled_messagesB
List all pending scheduled messages.
| Name | Required | Description | Default |
|---|---|---|---|
| channel | No | Optional channel ID to filter by |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. 'List all pending scheduled messages' conveys a read-only operation and the 'pending' status adds scope, but it does not disclose output format, ordering, or whether scheduling metadata is included. It is adequate but minimal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence with no filler, front-loads the action and resource. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one optional parameter and no output schema, the description plus schema is mostly sufficient. However, it leaves gaps such as what 'pending' means, whether the result set spans all users, and what the returned data looks like. It is minimally viable but not rich.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already describes the only parameter ('Optional channel ID to filter by') with 100% coverage. The description adds no additional semantic detail beyond the schema, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb ('List') and resource ('pending scheduled messages'), which is distinct from sibling tools like list_history or list_reminders. However, it does not explicitly contrast it with any sibling, so it stops short of full differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives such as list_history, list_reminders, or schedule_message. The context must be inferred entirely from the tool name and resource phrase.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_user_channelsA
List all channels a specific Slack user is a member of.
| Name | Required | Description | Default |
|---|---|---|---|
| user | Yes | User ID to list channels for |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It clearly communicates that the tool returns channels the user belongs to, but it does not mention safety profile, authorization needs, or whether it includes private channels. For a simple read-style tool this is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no redundant words. It states the action, the resource, and the scope efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter tool with a simple purpose, the description is nearly complete. It lacks explicit return-format details and sibling differentiation, but the low complexity and clear parameter schema make the description sufficient for an agent to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the single parameter 'user' is already described as 'User ID to list channels for'. The description adds no meaningful parameter detail beyond that, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List') and resource ('channels') and scopes it to a single Slack user, which clearly distinguishes it from the sibling tool list_channels. An agent can immediately understand the tool's purpose without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when channel membership for a specific user is needed, but it does not explicitly contrast with the sibling list_channels or explain when one should be chosen over the other. Usage context is inferable but not fully articulated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_usersC
List all users in the Slack workspace.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of users to return |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It only states a basic listing action and does not mention pagination, the effect of the limit parameter, or the tension between 'all users' and the default limit of 200.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single clear sentence with no filler. It is front-loaded with the action and resource, making it easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no annotations, the description should explain call behavior more fully. It omits limit-related behavior, pagination, and return expectations, leaving an important gap between 'list all users' and the actual limit parameter.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the single limit parameter already has a clear schema description. The tool description adds no extra parameter meaning, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List') and resource ('all users in the Slack workspace'), making the tool's purpose clear. It is implicitly distinguishable from single-user siblings like get_user_info, but it does not explicitly name an alternative or scope boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives such as get_user_info or get_user_by_email. The intended usage must be inferred from the tool name and sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lookup_canvas_sectionsA
Look up sections/blocks in a canvas. Requires canvases:read scope.
| Name | Required | Description | Default |
|---|---|---|---|
| canvas_id | Yes | Canvas ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden of behavioral disclosure. It states the required auth scope ('Requires canvases:read scope') and implies a non-mutating read operation via 'look up', but does not disclose return structure, pagination, or error behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One concise sentence communicates the action, resource, and required scope with no filler. All content is relevant and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter lookup tool, the description plus schema provide adequate context to invoke it correctly. It could be slightly more complete by stating what the return value contains, but the lack of output schema and simple signature make the current definition mostly sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema documents the only parameter canvas_id sufficiently for a baseline. The description adds no additional meaning about the parameter beyond what the schema already contains.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('look up') and resource ('sections/blocks in a canvas'), clearly distinguishing it from sibling tools like create_canvas, edit_canvas, and delete_canvas. The scope requirement reinforces the read-only nature.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The verb 'look up' implies use when the agent needs to retrieve canvas sections, but there is no explicit guidance about when not to use it or which alternative to choose. The canvases:read scope is a useful prerequisite but does not provide direct comparison to sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
markdown_to_canvasA
Validate and prepare markdown content for canvas creation. Accepts a markdown string or a file path, returns the validated content suitable for create_canvas() or create_channel_canvas().
| Name | Required | Description | Default |
|---|---|---|---|
| content | No | Markdown string (mutually exclusive with file_path) | |
| file_path | No | Path to a .md file to read (mutually exclusive with content) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral burden. It discloses that the tool accepts a markdown string or file path and returns validated content, which is helpful, but it does not explain what validation or preparation actually involves, what happens on invalid input, or whether the returned content is a string or a structured object.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. It front-loads the core purpose, then states inputs and outputs in a compact, scannable way. Every sentence contributes necessary information for selecting and calling the tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter helper tool with no output schema, the description is fairly complete: it names accepted inputs, the return value, and the downstream functions that consume the result. It leaves validation rules and error behavior implicit, but an agent can reasonably invoke the tool using the provided guidance.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents content and file_path with mutually exclusive semantics. The description adds the high-level purpose of both inputs but does not provide additional format, constraint, or usage details beyond the schema, keeping this at the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('validate and prepare') applied to a clear resource ('markdown content') with an explicit purpose ('for canvas creation'). It distinguishes itself from canvas-creation tools by clarifying it returns prepared content rather than creating anything, and the canvas-specific target separates it from the sibling markdown_to_list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly implies when to use the tool: before calling create_canvas() or create_channel_canvas(), by providing content that needs validation and preparation. It does not explicitly state when not to use it or name alternatives like markdown_to_list, so it stops just short of full exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
markdown_to_listA
Convert markdown to Slack List items. Parses checklists (- [ ] / - [x]), bullet lists (- item), and tables. Returns a list of dicts with 'value' and optional 'status'.
| Name | Required | Description | Default |
|---|---|---|---|
| content | No | Markdown string (mutually exclusive with file_path) | |
| file_path | No | Path to a .md file to read (mutually exclusive with content) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It discloses the accepted input styles, the parsing scope, and the return format ('list of dicts with 'value' and optional 'status''). It does not describe handling of unsupported markdown, but this is a modest gap for a conversion utility.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences with no fluff. The core action is front-loaded, supported inputs are enumerated in the second sentence, and the return shape is stated in the third. Every sentence contributes.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter converter, the description is nearly complete: it states inputs, supported markdown constructs, and the return shape. The main missing piece is usage guidance relative to markdown_to_canvas and behavior on unsupported input, but the essential calling contract is clear.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with content and file_path already described and marked mutually exclusive in the schema. The tool description adds no additional parameter-level meaning, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Convert') with a clear source ('markdown') and target ('Slack List items'), and names the exact constructs it parses (checklists, bullet lists, tables). This distinguishes it from the sibling markdown_to_canvas and other list tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The intended use is implied by the description: use this when you have markdown and need Slack List items. However, there is no explicit guidance about when not to use it or why it should be chosen over the closely related sibling markdown_to_canvas.
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 channel with one or more Slack users.
| Name | Required | Description | Default |
|---|---|---|---|
| users | Yes | List of user IDs to open a DM with |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the full burden of behavioral disclosure. It does not state whether opening a DM is idempotent, creates a new channel or retrieves an existing one, requires permissions, or returns a channel ID. This is a meaningful gap for a mutation-like operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no filler. Every word contributes meaning and there is no redundant repetition of the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple with one well-documented parameter, making the description minimally viable. However, with no output schema and no annotations, the description leaves out the return value and behavioral consequences, so it is adequate but not complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents the users parameter as a list of user IDs. The description adds the phrase 'one or more' but provides no additional semantic detail about format, validation, or behavior with invalid IDs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('open') and resource ('direct message channel') and specifies the target ('one or more Slack users'). It clearly distinguishes the tool from siblings like send_message or list_users.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when to use this tool versus alternatives, such as opening a DM before sending messages or how it differs from listing users. The agent must infer usage from the tool name and description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pin_messageB
Pin a message in a Slack channel.
| Name | Required | Description | Default |
|---|---|---|---|
| ts | Yes | Message timestamp to pin (e.g. '1234567890.123456') | |
| channel | Yes | Channel ID containing the message |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states the action but does not disclose side effects, permission requirements, idempotency, reversibility, or what happens if the message is already pinned. This is a mutating operation with no extra context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single efficient sentence with no wasted words. It is front-loaded with the action and resource, which is appropriate for a simple tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is minimally sufficient for a simple two-parameter tool with full schema coverage. However, with no annotations and no output schema, it leaves gaps around permissions, error behavior, and whether pinning is idempotent, so it is not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and both parameters (channel, ts) are already documented in the schema. The description adds no additional parameter meaning, so the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Pin') with a clear resource ('a message in a Slack channel'), making the tool's function immediately obvious. It also distinguishes itself from siblings like unpin_message and send_message by naming the exact action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus alternatives. It does not mention unpin_message as the counterpart, nor any conditions or prerequisites such as needing the message to exist in the channel or having permission to pin.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_bookmarkB
Remove a bookmark from a Slack channel.
| Name | Required | Description | Default |
|---|---|---|---|
| channel_id | Yes | Channel ID containing the bookmark | |
| bookmark_id | Yes | Bookmark ID to remove |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the full burden of behavioral disclosure, but it only states the mutation without noting permanence, required permissions, idempotency, or response behavior. For a destructive operation this is a meaningful gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence states the action, object, and location with no filler or repetition. It is appropriately sized for a simple two-parameter removal tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The operation is simple and the schema fully covers the required parameters, so an agent can invoke it with channel_id and bookmark_id. However, there is no output schema, no effect/permission detail, and no pointer to list_bookmarks for discovering valid IDs, leaving minor but real gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both channel_id and bookmark_id. The description adds no parameter-level detail beyond the schema, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('Remove'), a resource ('bookmark'), and a scope ('from a Slack channel'), so an agent can immediately distinguish it from sibling tools like add_bookmark and list_bookmarks. It is not a tautology because it adds the Slack-channel context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no explicit when-to-use guidance, prerequisites, or contrasts with alternatives such as add_bookmark or list_bookmarks. The intended use is only lightly implied by the verb 'Remove'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_reactionB
Remove an emoji reaction from a Slack message.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Emoji name without colons (e.g., 'thumbsup') | |
| channel | Yes | Channel ID containing the message | |
| timestamp | Yes | Message timestamp | |
| use_user_token | No | Remove reaction as the authenticated user (requires xoxp- user token) rather than the bot |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full behavioral burden. It only states the core action and does not disclose whether the bot removes its own reaction by default, whether use_user_token is needed for user-authored reactions, or what happens if the reaction does not exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no redundant words, and the core action is front-loaded. It is appropriately concise and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description plus full parameter schema is adequate for basic invocation of a straightforward reaction-removal tool. However, with no annotations, no output schema, and no mention of authentication or failure behavior, an agent is left with some gaps around token usage and edge cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All four parameters are already documented in the schema, which has 100% description coverage. The tool description adds no extra parameter meaning beyond what the schema already provides, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('Remove') and resource ('emoji reaction from a Slack message'), making the tool's function immediately clear. The verb 'Remove' also differentiates it from sibling tools like add_reaction without requiring schema details.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no explicit guidance about when to choose this tool over alternatives such as add_reaction, nor does it mention prerequisites or authentication behavior. The intended use is only implied by the action verb, so an agent receives no routing help.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reply_in_threadB
Reply to a message in a Slack thread.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Reply text | |
| channel | Yes | Channel ID containing the thread | |
| thread_ts | Yes | Timestamp of the parent message | |
| use_user_token | No | Send as the authenticated user (requires xoxp- user token) rather than the bot |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description alone must carry behavioral disclosure. It only states the basic action and does not mention auth behavior, bot vs. user token differences, rate limits, errors, or what happens when the reply is posted.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one short sentence with no filler. It front-loads the action and context efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a mutating tool with no annotations and no output schema, yet the description explains none of the operational context such as required permissions, token behavior, or expected response. The schema covers parameter names, but the description still leaves important behavioral gaps unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the parameters are already well documented in the schema. The description adds no extra parameter semantics beyond what the schema provides, making the baseline score of 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Reply') and a clear resource ('a message in a Slack thread'), which distinguishes it from sibling tools like send_message or get_thread_replies. It immediately tells the agent the exact action and scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The thread context implies when this tool should be used, but there is no explicit guidance about when to choose it over send_message or how to obtain the required thread_ts. No alternatives or exclusions are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
schedule_messageA
Schedule a message to be sent at a future time.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Message text | |
| channel | Yes | Channel ID to send the message to | |
| post_at | Yes | Unix timestamp (seconds since epoch) when to send the message |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral disclosure burden, but it only restates the basic scheduling action. It does not mention that the message is stored as a scheduled entry, that it can be later listed/deleted via sibling tools, that post_at must be in the future, or any permission/rate-limit considerations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no filler, front-loading the core verb and resource and immediately stating the distinguishing future-time behavior. Every word contributes meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple and all parameters are documented, but because there are no annotations and no output schema, the description leaves gaps about the response shape, cancellation/listing behavior, and scheduling constraints. It is minimally adequate but not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all three parameters are already documented in the schema. The description adds no additional parameter-level semantics, which matches the baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Schedule') and resource ('a message') with a clear temporal qualifier ('at a future time'), directly distinguishing it from the sibling send_message tool. An agent can immediately understand that this is the delayed-send counterpart.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly implies when to use it: when a message must be delivered later rather than immediately. It does not explicitly name alternatives or state when not to use it, but the contrast with send_message is evident from the future-time qualifier.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_messagesA
Search for messages across the workspace. Requires a user token (xoxp-) with search:read scope — bot tokens (xoxb-) are not supported by Slack's search API.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | Number of results to return | |
| query | Yes | Search query string |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full disclosure burden. It adds genuinely useful context by requiring a user token (xoxp-) with search:read scope and explicitly excluding bot tokens (xoxb-), a real-world constraint that prevents failed calls. However, it omits rate limits, pagination behavior, and result-return details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with zero filler; the purpose is front-loaded and the auth constraint earns the second sentence. Efficient and 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.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 2-param search tool with no output schema, the description covers the purpose and the critical auth constraint well. It leaves gaps around result shape and pagination, which an agent would need to handle multi-page Slack search results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents query and count, setting the baseline at 3. The description adds no param-level syntax, query operators, or count constraints beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Search'), resource ('messages'), and scope ('across the workspace'), which clearly distinguishes it from channel-scoped tools like list_history. However, it doesn't explicitly name or differentiate from siblings, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage as a workspace-wide message search but provides no explicit when-to-use guidance or named alternatives such as list_history for browsing a single channel. The token requirement reads as a prerequisite rather than usage direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_ephemeralA
Send an ephemeral message visible only to a specific user.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Message text | |
| user | Yes | User ID who will see the message | |
| channel | Yes | Channel ID where the ephemeral message appears |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral disclosure burden. It accurately conveys ephemerality and the visibility scope, both of which are meaningful behavioral traits. It does not elaborate on error conditions or whether the message appears in history, but the core ephemeral behavior is clearly stated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one sentence with no filler. The core behavior is stated first, and every word contributes meaning. It is appropriately sized for a simple tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a three-parameter tool with fully documented schema properties, the description plus schema is sufficient to understand how to invoke it. The main omission is usage guidance versus siblings, but that is already penalized under usage guidelines. No output schema exists, so return-value documentation is not required.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already explains text, user, and channel. The description adds the 'visible only to a specific user' nuance, which reinforces the user parameter but provides little beyond the schema. A baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a clear verb ('Send') with a specific resource ('an ephemeral message') and states the audience constraint ('visible only to a specific user'). This clearly differentiates it from regular message-sending sibling tools like send_message.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no explicit guidance on when to choose this tool over alternatives such as send_message or reply_in_thread. The context is evident from the name and description, but the tool does not state exclusions or conditions for its use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_messageC
Send a message to a Slack channel.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Message text | |
| blocks | No | Block Kit blocks array for rich formatting | |
| channel | Yes | Channel ID or name to send to | |
| thread_ts | No | Thread timestamp to reply in a thread | |
| unfurl_links | No | Whether to unfurl links | |
| use_user_token | No | Send as the authenticated user (requires xoxp- user token) rather than the bot |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. 'Send a message to a Slack channel' states the basic effect but does not mention whether it sends as the bot or user by default, required scopes like chat:write, message visibility, or other side effects such as surfacing in channel history. It is not misleading, but it is thin.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler or redundancy. Every word adds clarity to the core operation. It is concise in structure, even if it is thin on contextual detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given six parameters, no annotations, no output schema, and a large sibling set, this description is incomplete. It does not help the agent decide between send_message and reply_in_thread or send_ephemeral, nor does it describe expected response behavior or authorization requirements. The schema covers parameters, but the overall context for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all six parameters. The description adds no parameter-level meaning beyond identifying that the destination is a Slack channel, which is the baseline expectation for this tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description says 'Send a message to a Slack channel,' which clearly identifies the verb (send), resource (message), and destination (Slack channel). However, it does not distinguish this tool from closely related siblings such as reply_in_thread, send_ephemeral, or schedule_message.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance about when to use send_message versus alternatives. With many sibling tools like reply_in_thread, send_ephemeral, and update_message, the agent is left to guess which one fits the user's intent. No exclusions or contextual cues are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_canvas_accessB
Set access rules for a canvas (grant read/write/owner to users or groups).
| Name | Required | Description | Default |
|---|---|---|---|
| user_ids | No | List of user IDs to grant access to | |
| canvas_id | Yes | Canvas ID | |
| group_ids | No | List of group IDs to grant access to | |
| access_level | Yes | Access level: 'read', 'write', or 'owner' |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations at all, the description must disclose behavioral side effects itself. It only says 'set access rules' without explaining whether existing access rules are overwritten or merged, whether granting owner to one user removes other owners, or whether there are any destructive consequences. This leaves a mutation tool's most important behavior ambiguous.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one clear, front-loaded sentence that states the action, resource, and permission levels with no filler. Every word contributes to understanding the tool's core operation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a mutating tool with no annotations, no output schema, and four parameters, yet the description covers only the basic action. Important context is missing: whether the call adds or replaces access, any permission requirements, and how the optional user/group lists interact with the required access_level. For a permission-changing tool, this is insufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 100%, so all four parameters already have descriptions. The tool description adds no new semantic detail beyond restating the access levels and user/group targets that are alreedy in the schema. It does not clarify why user_ids and group_ids are optional or what happens if neither is provided.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('set') with a clear resource ('access rules for a canvas') and names the exact permission levels ('read/write/owner') and target types ('users or groups'). This makes the tool's purpose immediately distinguishable from siblings like delete_canvas_access and set_list_access.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives such as delete_canvas_access for revoking access or edit_canvas for changing canvas content. It also fails to mention prerequisites, such as whether the canvas must already exist or whether caller needs owner permissions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_channel_topicB
Set the topic for a Slack channel.
| Name | Required | Description | Default |
|---|---|---|---|
| topic | Yes | New topic text | |
| channel | Yes | Channel ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It only says 'Set the topic' and does not describe the visible effect on the channel, permission requirements, or what happens on failure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single declarative sentence with zero filler and the action is front-loaded. It is as concise as a description can be.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter setter with complete schema coverage, the description provides enough to understand the core operation. However, without annotations or an output schema, it leaves side effects, permissions, and failure behavior unmentioned, making it only partially complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both 'channel' and 'topic' already documented clearly. The description adds no additional meaning beyond naming the resource as a Slack channel, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the action ('Set') and the resource ('topic for a Slack channel') clearly, so an agent can tell what the tool does. It does not add meaningful detail beyond the tool name and does not explicitly differentiate from siblings, but the operation is unambiguous given the sibling list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given about when to use this tool versus alternatives, nor are any prerequisites or exclusions mentioned. The description is purely a statement of function with no usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_list_accessB
Set access rules for a Slack List (grant read/write/owner to users or groups).
| Name | Required | Description | Default |
|---|---|---|---|
| list_id | Yes | List ID | |
| user_ids | No | List of user IDs to grant access to | |
| group_ids | No | List of group IDs to grant access to | |
| access_level | Yes | Access level: 'read', 'write', or 'owner' |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of disclosing behavior. It only says 'grant read/write/owner', but does not clarify whether this replaces existing access rules or appends to them, whether it is idempotent, or what permissions the caller needs. For a mutation tool, this is a meaningful gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-formed sentence with no filler or redundant restatement. It front-loads the action and resource, then specifies the key parameters in a compact parenthetical.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description does not explain whether providing neither user_ids nor group_ids is valid, whether the operation overwrites existing access, or what the response indicates. Given the required access_level without required target lists, the agent could invoke the tool in a way that is undefined from the description alone.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema itself already documents list_id, user_ids, group_ids, and access_level. The description adds the conceptual mapping that access_level can be 'read', 'write', or 'owner' and that targets are users or groups, but it does not add significant detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb 'Set access rules' on a specific resource 'a Slack List', and specifies the effect: granting read/write/owner to users or groups. This distinguishes it from sibling tools like delete_list_access, which removes access, and create_list/update_list, which manage the list itself.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given for when to use this tool versus alternatives. It does not explicitly mention delete_list_access as the counterpart for removing access, nor does it describe when this should be chosen over similar access-management tools like set_canvas_access. The context must be inferred entirely from the description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unpin_messageB
Unpin a message from a Slack channel.
| Name | Required | Description | Default |
|---|---|---|---|
| ts | Yes | Message timestamp to unpin (e.g. '1234567890.123456') | |
| channel | Yes | Channel ID containing the message |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It only restates the basic action and does not explain side effects, permissions required, behavior when the message is not pinned, or the expected response. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, direct sentence with no filler. It is front-loaded with the core verb and resource, and every word contributes to the meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple with two well-documented parameters, so the description is minimally sufficient for invocation. However, it lacks usage context, alternative tool routing, and behavioral caveats, leaving clear gaps for an agent deciding between this and closely related tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides 100% description coverage for both parameters, so the schema already explains channel and ts. The description adds little beyond the phrase 'from a Slack channel,' which does not materially enrich the parameter semantics. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'Unpin' with a clear resource ('a message from a Slack channel'), so an agent can tell what action is performed. However, it does not explicitly differentiate itself from siblings like pin_message, though the inverse relationship is evident from the verb.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool instead of alternatives such as pin_message, delete_message, or update_message. There is no mention of prerequisites, exclusions, or the fact that the message must already be pinned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_listB
Update a Slack List's metadata (name, description). Requires lists:write scope.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | New list name (optional) | |
| list_id | Yes | List ID to update | |
| description | No | New list description (optional) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states that updates require lists:write scope, which is useful, but it does not explain what happens when only one optional field is provided, whether the operation replaces both fields, or what the response contains. For a mutation tool this is a meaningful transparency gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that front-loads the action and resource, then states the required scope. Every word earns its place and there is no redundant or filler content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple 3-parameter tool with fully documented schema, the description covers the core purpose and permission requirement. However, the lack of partial-update behavior and absence of any output explanation leaves an agent uncertain about the effect of omitting optional fields, so it is not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so each parameter is already documented in the input schema. The description only restates that name and description are updatable, adding little beyond the schema; the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action (Update) on a specific resource (a Slack List's metadata) and names the exact fields affected (name, description). This clearly distinguishes it from sibling tools like create_list, delete_list, and especially update_list_item, which handles items rather than metadata.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides the required OAuth scope but gives no guidance on when to use this tool versus alternatives such as update_list_item or set_list_access. There is no explicit when/when-not or alternative tool routing, so an 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.
update_list_itemA
Update an existing Slack List item. Requires lists:write scope.
| Name | Required | Description | Default |
|---|---|---|---|
| value | No | New item text (optional) | |
| status | No | New status (optional) | |
| item_id | Yes | Item ID to update | |
| list_id | Yes | List ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are absent, so the description carries the full burden. It does disclose the required lists:write scope, which is useful auth context. However, it does not state whether updates are partial (only provided fields) or full replacements, nor any side effects on the item.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence front-loads the verb and resource, followed by the scope requirement. Every word earns its place; no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The schema covers parameters well and the purpose is clear, but there is no output schema and no mention of whether omitted fields are left unchanged or what the return value looks like. These are notable gaps for an agent predicting the result of an update operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema descriptions cover 100% of parameters (list_id, item_id, value, status) with clear explanations, so the baseline is 3. The description adds no parameter-level details beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb 'Update' plus resource 'Slack List item' makes the operation unambiguous. The word 'existing' distinguishes it from create/delete siblings, allowing an agent to differentiate without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus create_list_item, update_list, or delete_list_item. 'Existing' implies a prerequisite but no alternatives or exclusions are mentioned; the scope requirement is auth context, not usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_messageC
Update/edit an existing Slack message.
| Name | Required | Description | Default |
|---|---|---|---|
| ts | Yes | Timestamp of the message to update | |
| text | Yes | New text for the message | |
| channel | Yes | Channel ID containing the message | |
| use_user_token | No | Send as the authenticated user (requires xoxp- user token) rather than the bot |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It only restates the mutation (updating/editing) and says nothing about authentication requirements, token behavior, message ownership constraints, or side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very short and front-loaded, with almost no filler. However, 'Update/edit' is slightly redundant, and the terseness leans toward under-specification rather than efficient completeness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-parameter mutation tool with no annotations and no output schema, the description is under-specified. It omits key operational context such as authentication expectations, use_user_token implications, constraints on editable messages, and any failure behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the parameters are already well documented in the schema. The description adds no parameter-level detail, so the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Update/edit') and a clear resource ('an existing Slack message'). It distinguishes this from sending or deleting a message by noting it operates on an existing message, but it does not explicitly contrast it with sibling tools like send_message or delete_message.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no explicit guidance on when to use this tool versus alternatives. The word 'existing' implies it is not for creating or sending new messages, but there are no stated conditions, prerequisites, or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upload_fileA
Upload a file to one or more Slack channels. Provide either 'content' (UTF-8 text only) or 'file_path' (disk path for binary or text files), not both.
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | Optional display title for the file | |
| content | No | File content as text (mutually exclusive with file_path) | |
| channels | Yes | List of channel IDs to share the file in (max 100) | |
| filename | Yes | Name for the uploaded file | |
| file_path | No | Path to file on disk (mutually exclusive with content) | |
| thread_ts | No | Optional thread timestamp to attach upload to a thread |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the full burden of behavioral disclosure. It mentions the action and the content/file_path constraint, but does not disclose required permissions, file size limits, side effects such as file visibility to channel members, or what happens on failure. This is a write operation with minimal safety or side-effect context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, tightly constructed sentence that front-loads the core action and then delivers the most important parameter constraint. There is no redundant wording or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a straightforward upload tool with a fully described schema, the description covers the critical usage decision (content vs file_path) and the destination. It could add auth requirements or output details, but the essential information needed to invoke the tool correctly is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds meaningful semantic detail beyond the schema: content must be UTF-8 text only, while file_path accepts binary or text files, and the two are mutually exclusive. This directly helps the agent choose the correct parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the operation ('Upload a file'), the resource ('file'), and the destination ('one or more Slack channels'). It is distinct from sibling tools like share_file or list_files because it explicitly says 'upload,' which signals creating/uploading a new file.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not mention when to use this tool versus alternatives, particularly the close sibling share_file. It provides no exclusion criteria such as 'use share_file for sharing an existing file,' leaving the agent to infer the distinction 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.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
64 tool updates
v0.1.8- First observed
add_bookmark - First observed
add_reaction - First observed
add_reminder - First observed
archive_channel - First observed
auth_test - First observed
complete_reminder - First observed
create_canvas - First observed
create_channel - First observed
create_channel_canvas - First observed
create_list - First observed
create_list_item - First observed
delete_canvas - First observed
delete_canvas_access - First observed
delete_file - First observed
delete_list_access - First observed
delete_list_item - First observed
delete_list_items - First observed
delete_message - First observed
delete_reminder - First observed
delete_scheduled_message - First observed
edit_canvas - First observed
get_bot_info - First observed
get_channel_info - First observed
get_file_info - First observed
get_list_item - First observed
get_permalink - First observed
get_thread_replies - First observed
get_user_by_email - First observed
get_user_info - First observed
get_workspace_info - First observed
invite_to_channel - First observed
join_channel - First observed
kick_from_channel - First observed
list_bookmarks - First observed
list_channels - First observed
list_emojis - First observed
list_files - First observed
list_history - First observed
list_list_items - First observed
list_reminders - First observed
list_scheduled_messages - First observed
list_user_channels - First observed
list_users - First observed
lookup_canvas_sections - First observed
markdown_to_canvas - First observed
markdown_to_list - First observed
open_dm - First observed
pin_message - First observed
remove_bookmark - First observed
remove_reaction - First observed
reply_in_thread - First observed
schedule_message - First observed
search_messages - First observed
send_ephemeral - First observed
send_message - First observed
set_canvas_access - First observed
set_channel_topic - First observed
set_list_access - First observed
share_file - First observed
unpin_message - First observed
update_list - First observed
update_list_item - First observed
update_message - First observed
upload_file
TDQS
Scored across 64 tools
Each tool pairs a distinct resource with a clear action, spanning channels, messages, users, files, reminders, canvases, and lists. Close pairs like list_channels/list_user_channels and create_canvas/create_channel_canvas are clearly differentiated by their descriptions and target nouns.
The vast majority of tools follow a consistent verb_noun snake_case pattern, such as list_channels, create_channel, send_message, and delete_file. Minor deviations like send_ephemeral, open_dm, auth_test, reply_in_thread, markdown_to_canvas, and markdown_to_list slightly break the pattern but remain readable and predictable.
With 64 tools, the server far exceeds the well-scoped 3-15 range and even crosses the 50+ extreme threshold. While Slack has a large API surface, exposing this many endpoints in one MCP server creates a heavy, overwhelming toolset for agents to navigate.
The tool surface covers most major Slack domains: channels, messages, threads, files, users, reminders, bookmarks, scheduled messages, canvases, and lists. Common missing operations like listing pinned messages, getting a single message, leaving a channel, or renaming a channel are notable gaps but can usually be worked around.
Maintenance
Related MCP Connectors
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
MCP server that lets AI assistants use all OneSchema features exposed via the public API.
MCP server connecting AI agents to 100+ apps (Gmail, Slack, Notion, GitHub) via one-click OAuth.
MCP server unifying ERPs, CRMs, APIs and knowledge base for Claude, ChatGPT and Gemini.
Related MCP Servers
- -licenseNot gradedqualityAmaintenanceMCP Server for the Slack API, enabling Claude to interact with Slack workspaces.70,82290,196MIT
- AlicenseNot gradedqualityDmaintenanceA Model Context Protocol (MCP) server for Slack workspace integration. This server allows AI assistants to interact directly with your Slack workspace, providing tools to manage channels, send messages, list users, and upload files.21,8541MIT
- AlicenseNot gradedqualityDmaintenanceA Model Context Protocol (MCP) server for Slack integration, allowing Claude to interact with your Slack workspace.21,854MIT
- AlicenseAqualityDmaintenanceMCP server that connects Claude Code to Slack, allowing two-way communication via Slack Socket Mode without tunnels.1MIT