Slack User MCP Server
The Slack User MCP Server enables interaction with Slack workspaces as a user, providing tools for communication and information retrieval:
List public channels in a workspace with pagination support
Post messages to channels
Reply to specific message threads
Add emoji reactions to messages
Retrieve channel history (recent messages)
Get thread replies
List workspace users with basic profile information
Get detailed profile information for specific users by ID
Allows Claude to interact with Slack workspaces as a user, including listing channels, posting messages, replying to threads, adding reactions, getting channel history, getting thread replies, retrieving user lists, and viewing user profiles
Click on "Install 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 User MCP Serverpost 'Meeting starts in 5 minutes' to the general channel"
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 User MCP Server
MCP Server for the Slack API, enabling Claude to interact with Slack workspaces as a user.
Tools
slack_list_channelsList public channels in the workspace
Optional inputs:
limit(number, default: 100, max: 200): Maximum number of channels to returncursor(string): Pagination cursor for next page
Returns: List of channels with their IDs and information
slack_post_messagePost a new message to a Slack channel
Required inputs:
channel_id(string): The ID of the channel to post totext(string): The message text to post
Returns: Message posting confirmation and timestamp
slack_reply_to_threadReply to a specific message thread
Required inputs:
channel_id(string): The channel containing the threadthread_ts(string): Timestamp of the parent messagetext(string): The reply text
Returns: Reply confirmation and timestamp
slack_add_reactionAdd an emoji reaction to a message
Required inputs:
channel_id(string): The channel containing the messagetimestamp(string): Message timestamp to react toreaction(string): Emoji name without colons
Returns: Reaction confirmation
slack_get_channel_historyGet recent messages from a channel
Required inputs:
channel_id(string): The channel ID
Optional inputs:
limit(number, default: 10): Number of messages to retrieve
Returns: List of messages with their content and metadata
slack_get_thread_repliesGet all replies in a message thread
Required inputs:
channel_id(string): The channel containing the threadthread_ts(string): Timestamp of the parent message
Returns: List of replies with their content and metadata
slack_get_usersGet list of workspace users with basic profile information
Optional inputs:
cursor(string): Pagination cursor for next pagelimit(number, default: 100, max: 200): Maximum users to return
Returns: List of users with their basic profiles
slack_get_user_profileGet detailed profile information for a specific user
Required inputs:
user_id(string): The user's ID
Returns: Detailed user profile information
Related MCP server: Slack MCP Server
Setup
Create a Slack App:
Visit the Slack Apps page
Click "Create New App"
Choose "From scratch"
Name your app and select your workspace
Configure User Token Scopes: Navigate to "OAuth & Permissions" and add these scopes:
channels:history- View messages and other content in public channelschannels:read- View basic channel informationchat:write- Send messages as yourselfreactions:write- Add emoji reactions to messagesusers:read- View users and their basic information
Install App to Workspace:
Click "Install to Workspace" and authorize the app
Save the "User OAuth Token" that starts with
xoxp-.
For organization-level tokens, get your Team ID (starts with a
T) by following this guidance. It is optional for ordinary workspace tokens.
Treat OAuth tokens as secrets. Do not commit them, put them in issues or pull requests, or paste them into shared configuration. Rotate a token immediately if it is exposed.
Usage with Claude Desktop
Add the following to your claude_desktop_config.json:
Local Installation
First install and build the server:
git clone https://github.com/lars-hagen/slack-user-mcp.git
cd slack-user-mcp
npm install
npm run buildThen configure Claude Desktop:
{
"mcpServers": {
"slack": {
"command": "npm",
"args": [
"run",
"--prefix",
"/path/to/slack-user-mcp",
"start"
],
"env": {
"SLACK_TOKEN": "xoxp-your-user-token"
}
}
}
}NPX
This project is not published to npm. Do not use an npx package name for it. Clone and build it locally as shown above, then use the local configuration.
Docker
{
"mcpServers": {
"slack": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"SLACK_TOKEN",
"slack-user-mcp"
],
"env": {
"SLACK_TOKEN": "xoxp-your-user-token"
}
}
}
}Build the image first with docker build -t slack-user-mcp .. Add -e SLACK_TEAM_ID and SLACK_TEAM_ID to env only when using an organization-level token.
Installing via Smithery
To install Slack User Server for Claude Desktop automatically via Smithery:
npx -y @smithery/cli install @lars-hagen/slack-user-mcp --client claudeTroubleshooting
If you encounter permission errors, verify that:
All required scopes are added to your Slack app
The app is properly installed to your workspace
The token and, when needed, workspace ID are correctly copied to your configuration
The app has been added to the channels it needs to access
You're using a User OAuth Token (starts with
xoxp-) rather than a Bot Token
Build
Docker build:
docker build -t slack-user-mcp .Maintenance status
This project receives focused, best-effort maintenance. It has no support SLA. Please report security concerns privately as described in SECURITY.md.
License
This MCP server is licensed under the MIT License. This means you are free to use, modify, and distribute the software, subject to the terms and conditions of the MIT License. For more details, please see the LICENSE file in the project repository.
Available Tools
8 toolsslack_add_reactionC
Add a reaction emoji to a message
| Name | Required | Description | Default |
|---|---|---|---|
| channel_id | Yes | The ID of the channel containing the message | |
| timestamp | Yes | The timestamp of the message to react to | |
| reaction | Yes | The name of the emoji reaction (without ::) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden but only states the basic action without disclosing behavioral traits. It doesn't mention permissions required, rate limits, whether reactions are reversible, or what happens on success/failure (e.g., no output schema). For a mutation tool with zero annotation coverage, this is inadequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that directly states the tool's purpose with zero wasted words. It's appropriately sized and front-loaded, making it easy to 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?
Given this is a mutation tool with no annotations and no output schema, the description is incomplete. It lacks context on permissions, error handling, or behavioral details needed for safe invocation. While the schema covers parameters well, the overall tool context remains underspecified for practical use.
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 three parameters thoroughly. The description adds no additional meaning beyond what's in the schema (e.g., no examples of reaction names or timestamp formats), meeting the baseline for high coverage but not enhancing parameter understanding.
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 ('Add') and resource ('reaction emoji to a message'), making the purpose immediately understandable. However, it doesn't differentiate from sibling tools like 'slack_post_message' or 'slack_reply_to_thread' which also interact with messages, missing the opportunity to clarify this is specifically for reactions rather than message content.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., needing channel access), exclusions (e.g., not for threads without specifying), or how it differs from sibling tools like 'slack_reply_to_thread' for message interactions, leaving usage context unclear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
slack_get_channel_historyC
Get recent messages from a channel
| Name | Required | Description | Default |
|---|---|---|---|
| channel_id | Yes | The ID of the channel | |
| limit | No | Number of messages to retrieve (default 10) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the action ('Get recent messages') but doesn't mention critical details like whether this requires specific permissions, rate limits, pagination behavior, or what 'recent' means (e.g., time-based or count-based). This leaves significant gaps for a tool that likely interacts with an external API.
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 directly states the tool's purpose without any wasted words. It's appropriately sized and front-loaded, making it easy to 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?
Given the complexity of a Slack API tool with no annotations and no output schema, the description is incomplete. It doesn't address behavioral aspects like authentication needs, error handling, or return format (e.g., message objects with timestamps). For a tool that retrieves data from an external service, more context is needed to ensure proper usage.
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 has 100% description coverage, with clear documentation for 'channel_id' and 'limit' (including a default value). The description adds no additional meaning beyond the schema, such as explaining channel ID formats or limit constraints. With high schema coverage, 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 clearly states the verb ('Get') and resource ('recent messages from a channel'), making the purpose understandable. However, it doesn't distinguish this tool from sibling tools like 'slack_get_thread_replies' or 'slack_list_channels', which also retrieve Slack data, so it misses 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?
The description provides no guidance on when to use this tool versus alternatives. For example, it doesn't clarify if this is for general channel history versus thread-specific replies (handled by 'slack_get_thread_replies') or user-focused data (handled by 'slack_get_user_profile'). No exclusions or prerequisites are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
slack_get_thread_repliesC
Get all replies in a message thread
| Name | Required | Description | Default |
|---|---|---|---|
| channel_id | Yes | The ID of the channel containing the thread | |
| thread_ts | Yes | The timestamp of the parent message in the format '1234567890.123456'. Timestamps in the format without the period can be converted by adding the period such that 6 numbers come after it. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It states 'Get all replies' but does not specify if this is a read-only operation, requires authentication, has rate limits, or describes the return format (e.g., list of messages). For a tool with zero annotation coverage, this is a significant gap in transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that directly states the tool's purpose without any unnecessary words. It is front-loaded and wastes no space, making it highly concise and well-structured for quick understanding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of a Slack API tool with no annotations and no output schema, the description is incomplete. It lacks details on behavioral traits (e.g., read-only status, authentication needs), return values, and usage context. For a tool that retrieves data, more information is needed to be fully helpful to an AI 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?
Schema description coverage is 100%, with clear descriptions for both parameters (channel_id and thread_ts). The description does not add any meaning beyond what the schema provides, such as explaining how to obtain these IDs or the thread_ts format in practice. Baseline 3 is appropriate when the schema handles parameter documentation adequately.
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 'all replies in a message thread', making the purpose specific and understandable. However, it does not explicitly differentiate from sibling tools like 'slack_reply_to_thread' or 'slack_get_channel_history', which might also involve thread interactions or message retrieval, so it lacks sibling differentiation for a perfect score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It does not mention prerequisites, such as needing a valid channel ID and thread timestamp, or compare it to siblings like 'slack_get_channel_history' for broader message retrieval, leaving usage context implied at best.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
slack_get_user_profileC
Get detailed profile information for a specific user
| Name | Required | Description | Default |
|---|---|---|---|
| user_id | Yes | The ID of the user |
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 this is a 'Get' operation, implying read-only behavior, but doesn't specify authentication requirements, rate limits, error conditions, or what 'detailed profile information' includes (e.g., fields like email, status, timezone). This leaves significant gaps for a tool with no annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence with zero wasted words. It front-loads the core purpose ('Get detailed profile information') efficiently, making it easy to parse and understand quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of annotations and output schema, the description is incomplete. It doesn't explain what 'detailed profile information' entails (e.g., response structure), authentication needs, or error handling. For a tool with no structured data beyond the input schema, this leaves the agent under-informed about behavioral aspects.
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 the single parameter 'user_id' documented as 'The ID of the user'. The description adds no additional parameter semantics beyond what the schema provides, such as format examples or where to find user IDs. This meets the baseline for high 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 clearly states the verb ('Get') and resource ('detailed profile information for a specific user'), making the purpose immediately understandable. However, it doesn't explicitly differentiate from sibling tools like 'slack_get_users', which might retrieve multiple users versus this single-user focus.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention when to choose this over 'slack_get_users' for single-user details or other sibling tools, leaving the agent to infer usage from context alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
slack_get_usersB
Get a list of all users in the workspace with their basic profile information
| Name | Required | Description | Default |
|---|---|---|---|
| cursor | No | Pagination cursor for next page of results | |
| limit | No | Maximum number of users to return (default 100, max 200) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden but only states the basic operation. It doesn't disclose behavioral traits like pagination behavior (implied by cursor parameter but not explained), rate limits, authentication requirements, whether it returns deactivated users, or what 'basic profile information' includes. Significant gaps exist for a list 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?
Single sentence, zero waste, front-loaded with the core purpose. Every word earns its place without redundancy or unnecessary 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 list tool with 2 parameters, 100% schema coverage, but no annotations or output schema, the description is minimally adequate. It states what the tool does but lacks behavioral context (pagination, rate limits, response format) that would help an agent use it effectively. Completeness is borderline viable.
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 parameters well-documented in the schema. The description adds no parameter-specific information beyond what the schema provides (e.g., doesn't explain how cursor works with limit). Baseline 3 is appropriate when schema does the heavy lifting.
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 resource ('list of all users in the workspace') with specific scope ('basic profile information'). It distinguishes from sibling tools like slack_get_user_profile (single user) and slack_get_channel_history (different resource), though it doesn't explicitly name alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for retrieving workspace users, but provides no explicit guidance on when to use this vs. alternatives like slack_get_user_profile for a single user's details, or prerequisites for accessing user lists. Usage context 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.
slack_list_channelsB
List public channels in the workspace with pagination
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of channels to return (default 100, max 200) | |
| cursor | No | Pagination cursor for next page of results |
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 helpfully mentions pagination behavior, which is valuable context not in the schema. However, it doesn't disclose important traits like rate limits, authentication requirements, whether this requires specific permissions, or what the response format looks like (especially critical with no output schema).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is perfectly concise - a single sentence that communicates the core functionality and key behavioral trait (pagination) with zero wasted words. It's front-loaded with the essential information and earns its place 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 read-only listing tool with 2 well-documented parameters, the description is minimally adequate. However, with no annotations and no output schema, it should ideally provide more context about response format, error conditions, or typical use cases. The pagination mention helps, but doesn't fully compensate for the missing structured 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 the input schema already fully documents both parameters (limit and cursor). The description adds no additional parameter semantics beyond what's in the schema - it mentions pagination generally but doesn't explain parameter interactions or usage patterns. This meets the baseline for high 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 clearly states the verb ('List') and resource ('public channels in the workspace'), making the purpose immediately understandable. However, it doesn't explicitly differentiate from sibling tools like 'slack_get_users' or 'slack_get_channel_history' which also retrieve Slack data, leaving some ambiguity about when this specific listing tool is preferred.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention whether this is for initial discovery, filtering criteria, or how it relates to sibling tools like 'slack_get_channel_history' or 'slack_get_users'. The agent must infer usage context from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
slack_post_messageC
Post a new message to a Slack channel
| Name | Required | Description | Default |
|---|---|---|---|
| channel_id | Yes | The ID of the channel to post to | |
| text | Yes | The message text to post |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It states the action ('Post a new message') but doesn't cover critical aspects like required permissions, rate limits, error handling, or whether the operation is idempotent. This leaves significant gaps for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with zero wasted words. It's appropriately sized and front-loaded, directly stating the core functionality without unnecessary 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 mutation tool with no annotations and no output schema, the description is incomplete. It doesn't address behavioral traits like side effects, response format, or error conditions, which are crucial for an agent to use this tool effectively in context with its siblings.
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 fully documents both parameters. The description doesn't add any meaning beyond what's in the schema (e.g., it doesn't explain channel ID formats or text limitations), meeting the baseline for high 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 clearly states the action ('Post') and target ('a new message to a Slack channel'), providing a specific verb+resource combination. However, it doesn't differentiate from siblings like 'slack_reply_to_thread' which also posts messages, so it lacks explicit 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?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention when to choose this over 'slack_reply_to_thread' for threaded replies or other posting-related tools, nor does it specify prerequisites like channel access or permissions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
slack_reply_to_threadC
Reply to a specific message thread in Slack
| Name | Required | Description | Default |
|---|---|---|---|
| channel_id | Yes | The ID of the channel containing the thread | |
| thread_ts | Yes | The timestamp of the parent message in the format '1234567890.123456'. Timestamps in the format without the period can be converted by adding the period such that 6 numbers come after it. | |
| text | Yes | The reply text |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden but only states the basic action without disclosing behavioral traits like permissions needed, rate limits, error handling, or whether it's idempotent. It lacks details on what happens if the thread doesn't exist or if the reply fails.
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 zero waste, efficiently conveying the core purpose without unnecessary details. It's 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?
Given no annotations and no output schema, the description is incomplete for a mutation tool. It doesn't explain return values, error cases, or behavioral nuances, leaving significant gaps in understanding how the tool behaves in practice.
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 parameters thoroughly. The description adds no additional meaning beyond implying the parameters are used for replying to threads, which is redundant. Baseline 3 is appropriate as the schema does the heavy lifting.
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 ('Reply to') and target ('a specific message thread in Slack'), making the purpose immediately understandable. However, it doesn't explicitly differentiate from sibling tools like 'slack_post_message' (which might post to channels rather than threads), leaving room for 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 provided on when to use this tool versus alternatives, such as 'slack_post_message' for non-threaded messages or 'slack_add_reaction' for reactions. The description assumes context but offers no explicit usage rules or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Each tool has a clearly distinct purpose targeting specific Slack operations: adding reactions, retrieving channel history, fetching thread replies, getting user profiles, listing users, listing channels, posting messages, and replying to threads. There is no overlap or ambiguity between these functions.
All tool names follow a consistent 'slack_verb_noun' pattern using snake_case, such as slack_post_message and slack_get_user_profile. This uniformity makes the tool set predictable and easy to navigate.
With 8 tools, the server is well-scoped for a Slack integration, covering essential messaging, user management, and channel operations. Each tool serves a clear purpose without redundancy, making the count appropriate for the domain.
The tool set provides strong coverage for core Slack workflows, including message posting, reactions, threading, and user/channel listing. Minor gaps exist, such as updating or deleting messages, but agents can likely work around these with the available tools.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Enable interaction with Slack workspaces. Supports subscribing to Slack events through Resources.
Catch up on Slack without reading it. Unreads, threads, search. Browser-session or hosted OAuth.
Collaboration layer for AI agents. Publish assets, send messages, manage threads and contacts.
Control your Discord community: send/read messages, manage channels and forums, and handle webhook…
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables interaction with Slack workspaces through comprehensive integration capabilities. Supports channel management, messaging, thread replies, reactions, and message history retrieval through natural language commands.54MIT
- AlicenseAqualityDmaintenanceEnables AI assistants to interact with Slack workspaces through comprehensive channel management, messaging, direct messages, search functionality, and user management capabilities.30112MIT
- FlicenseNot gradedqualityDmaintenanceEnables AI assistants to interact with Slack workspaces through natural language, supporting channel management, message operations, user profiles, reactions, and threaded conversations.
- AlicenseAqualityDmaintenanceEnables Slack workspace integration including channel creation, user invites, message posting, and thread management through natural language.61MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/lars-hagen/slack-user-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server