slack-user-mcp-server
Provides tools for searching messages, reading channel history, posting messages, looking up users, and reading threads using a user token (xoxp-), allowing full access to the Slack workspace.
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-user-mcp-serversearch my recent messages"
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
A personal MCP (Model Context Protocol) server that connects to Slack using your user token (xoxp-...), giving AI agents full access to your workspace — including message search, channel history, DMs, and posting as yourself.
Unlike bot-token-based Slack integrations, this server acts as you, so it can access any channel you're a member of (including private channels and DMs) and use the Slack search API.
Features
Search messages — Full Slack search syntax (
from:me,in:#channel,has:link, date filters, etc.)Channel history — Read messages from any channel, DM, or group message you're in
Post messages — Send messages as yourself (not as a bot)
User lookup — Find users by name or email
Thread reading — Fetch all replies in a thread
Auth verification — Confirm your connection and identity
Related MCP server: Slack MCP Server
Tools
Tool | Description |
| Search messages with Slack query syntax |
| List channels (public, private, DMs) |
| Read recent messages from a channel |
| Send a message as yourself |
| Find users by name or email |
| Get detailed user profile by ID |
| Read all replies in a thread |
| Verify your connection |
Setup
1. Create a Slack App and Get a User Token
Go to api.slack.com/apps and create a new app From scratch
Under OAuth & Permissions, add these User Token Scopes:
search:readchannels:read,channels:historygroups:read,groups:historyim:read,im:historympim:read,mpim:historyusers:read,users:read.emailchat:write
Install the app to your workspace
Copy the User OAuth Token (starts with
xoxp-)
2. Install Dependencies and Build
cd slack-user-mcp-server
npm install
npm run build3. Connect to Claude Desktop
Add this to your Claude Desktop config:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"slack-personal": {
"command": "node",
"args": ["/path/to/slack-user-mcp-server/dist/index.js"],
"env": {
"SLACK_USER_TOKEN": "xoxp-your-token-here"
}
}
}
}Note: If you use a Node version manager like
fnmornvm, use the full path tonodeinstead of just"node". Find it withfnm exec --using=default -- which nodeornvm which default.
4. Restart Claude Desktop
Quit and reopen Claude Desktop. The server will appear in your MCP connections.
Example Queries
Once connected, you can ask your AI assistant things like:
"Search for my recent Slack messages" — uses
from:me"What's the latest in #general?" — channel history
"Find messages about the Q1 budget" — full-text search
"Who is on the marketing team?" — user lookup
"Send a message to #general saying the build is green" — post as yourself
Search Syntax
The search tool supports all Slack search modifiers:
Modifier | Example | Description |
|
| Messages from a user |
|
| Messages in a channel |
|
| Filter by attributes |
|
| Date range |
|
| Threaded messages only |
Tech Stack
TypeScript
Slack Web API (via fetch)
Zod for input validation
stdio transport
Available Tools
8 toolsslack_auth_testGet My Slack IdentityARead-onlyIdempotent
Check which Slack user this token belongs to and verify the connection is working.
Takes no arguments. Returns your user ID, username, team name, and team ID.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is well-covered. The description adds value by explicitly stating it returns user ID, username, team name, and team ID, and that it verifies the connection—useful context beyond the 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 extremely concise: two short sentences, front-loaded with the primary purpose, and no fluff. 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 no-parameter auth test tool, the description fully covers the behavior, return values, and use case. Annotations provide safety context, and the description fills in return details that would otherwise be absent. No output schema exists, but the description covers that need.
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?
With zero parameters and 100% schema coverage, the schema already tells the agent nothing is required. The description reinforces this with 'Takes no arguments', so the agent can confidently infer no inputs are needed. This meets the baseline 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 uses specific verbs ('check', 'verify') and clearly identifies the resource (the Slack identity associated with the token). It distinguishes this tool from siblings like slack_lookup_user and slack_get_user_info by focusing on the authenticated user's own identity, not arbitrary 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?
The description clearly implies the primary use case: verifying connection and retrieving self-identity. It notes that it takes no arguments and lists return values, giving enough context. However, it does not explicitly mention alternatives or when not to use it, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
slack_get_channel_historyGet Slack Channel HistoryARead-onlyIdempotent
Fetch recent messages from a Slack channel, DM, or group message. Uses your user token so you can access any channel you're a member of.
Args:
channel (string): Channel ID (e.g. C012AB3CD) or name (e.g. #general)
limit (number): Number of messages to return, 1-200 (default: 50)
oldest (string): Start of time range as Unix timestamp (optional)
latest (string): End of time range as Unix timestamp (optional)
inclusive (boolean): Include messages with oldest/latest timestamps (default: true)
Returns: List of messages with text, author, timestamp, reactions, and thread info.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of messages to return | |
| latest | No | End of time range (Unix timestamp) | |
| oldest | No | Start of time range (Unix timestamp) | |
| channel | Yes | Channel ID or name (e.g. C012AB3CD or #general) | |
| inclusive | No | Include boundary messages |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, so the description adds the detail about using the user token and limiting access to channels the user is a member of. This is valuable behavioral context beyond what annotations provide.
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 opens with a clear purpose sentence, then lists parameters in a structured format, and closes with a return value line. It is concise, front-loaded, and contains no fluff.
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 tool's simplicity, strong annotations, and complete schema, the description covers purpose, parameters, and return value. It lacks details on pagination or edge cases but is adequate for typical 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 coverage is 100% and includes descriptions, defaults, and ranges for all parameters. The description repeats many of these (e.g., channel examples, limit range) but adds no significant new meaning, so 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 clearly states 'Fetch recent messages from a Slack channel, DM, or group message' with a specific verb and resource. It distinguishes this tool from siblings like slack_post_message (send) and slack_search_messages (search) by focusing on retrieving history.
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 useful context: it uses the user token and works for any channel the user is a member of, which helps decide when to use it. It does not explicitly name alternatives or exclusions, but the usage context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
slack_get_threadGet Slack Thread RepliesBRead-onlyIdempotent
Fetch all replies in a Slack thread.
Args:
channel (string): Channel ID where the thread exists
thread_ts (string): Timestamp of the parent message
Returns: List of all messages in the thread.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max replies to return | |
| channel | Yes | Channel ID | |
| thread_ts | Yes | Parent message timestamp |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only and idempotent behavior, but the description claims 'all replies' while the schema includes a limit parameter with default 100 and maximum 200. This is misleading and no disclosure is made about truncation or pagination behavior, so the description adds value that conflicts with actual 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?
The description is compact and front-loaded with the main purpose, followed by a simple Args list. It is efficient but slightly incomplete because it lists only two parameters while the schema defines three, and the return description is minimal.
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 tool's moderate complexity and the presence of strong annotations and a complete schema, the description provides adequate basic information. However, it lacks mention of the limit parameter's effect, returns a vague 'list of messages' without field details, and fails to provide usage context. These gaps make it only minimally 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% for all three parameters, and the description merely repeats channel and thread_ts without adding syntax or format details. The optional limit parameter is omitted from the description, so no additional semantic benefit is provided 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 states 'Fetch all replies in a Slack thread' with a clear verb and resource, and it is unambiguous among sibling tools like channel history or search. The inclusion of required parameters channel and thread_ts reinforces the specific purpose.
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 slack_get_channel_history or slack_search_messages. The thread-specific context is implied but not explicitly contrasted, so an agent may not know which tool is best for a given scenario.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
slack_get_user_infoGet Slack User InfoARead-onlyIdempotent
Get detailed profile information for a specific Slack user by their user ID.
Args:
user_id (string): Slack user ID (e.g. U012AB3CD)
Returns: User profile with id, name, email, title, timezone, and status.
| Name | Required | Description | Default |
|---|---|---|---|
| user_id | Yes | Slack user ID (e.g. U012AB3CD) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the tool safe (readOnlyHint=true, destructiveHint=false, idempotentHint=true). The description adds that it returns a user profile with id, name, email, title, timezone, and status, which is useful but not extensive beyond what annotations already imply.
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 succinct and well-structured: a one-sentence purpose, followed by a labeled Args section and a Returns section. Every sentence contributes value without 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 one-parameter read tool, the description covers purpose, parameter, and return shape. It lacks an explicit comparison to slack_lookup_user, but overall it provides sufficient context given the simple nature and strong annotations.
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 description merely repeats the same parameter info ('user_id (string): Slack user ID (e.g. U012AB3CD)'). No additional semantic meaning is provided 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 verb and resource: 'Get detailed profile information for a specific Slack user by their user ID.' It is specific enough to differentiate from searching messages or channels, though it does not explicitly distinguish itself from the sibling 'slack_lookup_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?
Usage context is implied: the tool should be used when you have a Slack user ID and need detailed profile info. However, no explicit guidance is given on when to prefer this over alternatives like slack_lookup_user, and no exclusions are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
slack_list_channelsList Slack ChannelsARead-onlyIdempotent
List Slack channels you have access to. Can filter to only channels you've joined.
Args:
types (string): Comma-separated channel types: public_channel, private_channel, mpim, im (default: public_channel,private_channel)
exclude_archived (boolean): Exclude archived channels (default: true)
limit (number): Max channels to return, 1-200 (default: 100)
cursor (string): Pagination cursor from a previous response
Returns: List of channels with id, name, topic, purpose, and member count.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max channels to return | |
| types | No | Comma-separated channel types | public_channel,private_channel |
| cursor | No | Pagination cursor | |
| exclude_archived | No | Exclude archived channels |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, covering safety. The description adds valuable context: the return format (list of channels with id, name, topic, purpose, member count) and pagination behavior via cursor. It also clarifies the filtering capability. This exceeds the baseline given the strong 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 well-structured: a clear opening sentence, a formatted Args section, and a Returns line. While the Args section duplicates some schema information, it doesn't feel bloated. It front-loads the purpose and keeps parameter details in a readable list. Minor redundancy with the schema prevents a top score.
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 list tool with no output schema, the description is nearly complete. It explains what is returned, covers all parameters, and notes the 'access' scope. It doesn't mention edge cases like partial results (though openWorldHint may cover this), but the core behavior is well explained. Slightly more context on pagination would elevate it.
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. The description enhances the schema by enumerating valid values for 'types' (public_channel, private_channel, mpim, im) and clarifying the 'cursor' param as 'from a previous response'. These details add meaningful semantics beyond the schema 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 uses a specific verb ('List') and resource ('Slack channels') with a clear scope ('you have access to'). It distinguishes itself from sibling tools like slack_search_messages and slack_get_channel_history by focusing on channel enumeration, and it mentions a filtering option (channels you've joined). This is unambiguous and differentiates from 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 provides clear context for when to use this tool (listing accessible channels) and notes a specific filter (only joined channels). However, it does not explicitly mention when not to use it or name alternative tools, so it stops short of a 5. The usage is clear enough from the description and sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
slack_lookup_userLookup Slack UserARead-onlyIdempotent
Search for Slack users by name or email address.
Args:
query (string): Name or email to search for
Returns: List of matching users with id, name, email, title, and status.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Name or email to search for |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint, openWorldHint, and idempotentHint. The description adds the return format (list of users with id, name, email, title, status), which is valuable since there is no output schema. However, it does not disclose behavior like rate limits, pagination, or match semantics, so it doesn't fully exceed the annotation baseline.
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 compact and well-structured, with a lead sentence followed by Args and Returns sections. No redundancy or fluff, though the Args section mirrors 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?
For a simple search tool with one parameter and no output schema, this description adequately covers purpose, parameter, and return fields. It is self-contained and sufficient for an agent to invoke 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 schema_description_coverage is 100% and the description's Args section repeats the schema exactly. No additional parameter meaning or usage details are provided, so 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 clearly states 'Search for Slack users by name or email address', providing a specific verb and resource. This distinguishes it from sibling tools like slack_get_user_info, which likely retrieves a single user by ID rather than searching.
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 conveys the intended use case (finding users by name/email) but does not explicitly mention alternatives or exclusions. It lacks a direct comparison to slack_get_user_info for known user IDs, so it earns a 4 rather than 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
slack_post_messagePost Slack MessageA
Post a message to a Slack channel or DM as YOU (your user account).
Args:
channel (string): Channel ID or name (e.g. C012AB3CD or #general)
text (string): Message text (supports Slack mrkdwn formatting)
thread_ts (string): If provided, post as a reply in this thread
Returns: Confirmation with message timestamp and channel.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Message text (supports Slack mrkdwn) | |
| channel | Yes | Channel ID or name | |
| thread_ts | No | Thread timestamp to reply to |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds behavioral context beyond annotations: it specifies that messages are sent as the user (not a bot), supports Slack mrkdwn formatting, can post as a thread reply, and returns a confirmation with timestamp and channel. This complements the annotations (readOnly=false, idempotent=false) without contradicting them.
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 concise and well-structured with Args and Returns sections. Every sentence contributes useful information: purpose, parameters, and return value, with no redundancy or 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 3-parameter tool with full schema coverage and informative annotations, the description covers purpose, parameter semantics, and return value. It provides sufficient context for an AI agent to select and invoke the tool correctly without missing critical 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?
The input schema already has complete descriptions for all three parameters (100% coverage). The description adds minor examples (e.g., channel ID format) and clarifies the thread behavior, but it largely mirrors the schema, providing only marginal added value beyond the structured data.
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 ('Post') and resource ('Slack channel or DM'), and explicitly states it posts as the user account. This clearly distinguishes it from sibling tools that are all read/search oriented.
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, and given that all sibling tools are read-only, it is obvious this is the tool for sending messages. However, it does not explicitly mention alternatives or provide when-not-to-use guidance, so it doesn't fully meet the 'explicit alternatives' bar.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
slack_search_messagesSearch Slack MessagesARead-onlyIdempotent
Search for messages across your entire Slack workspace using the Slack search API. This uses YOUR user token, so it searches everything you have access to — channels, DMs, group messages.
Supports Slack search modifiers:
from:@username — messages from a specific user
in:#channel — messages in a specific channel
has:link / has:reaction / has:star — filter by attributes
before:YYYY-MM-DD / after:YYYY-MM-DD — date filters
is:thread — only threaded messages , Args:
query (string): Slack search query (supports search modifiers)
sort (string): Sort by "timestamp" or "score" (default: timestamp)
sort_dir (string): Sort direction "asc" or "desc" (default: desc)
count (number): Number of results to return, 1-100 (default: 20)
page (number): Page number for pagination (default: 1)
Returns: List of matching messages with text, author, channel, timestamp, and permalink.
Examples:
"from:me" — your own recent messages
"from:@scott.jensen after:2026-03-01" — your messages this month
"in:#general budget" — messages about "budget" in #general
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number | |
| sort | No | Sort by timestamp or relevance score | timestamp |
| count | No | Number of results per page | |
| query | Yes | Slack search query | |
| sort_dir | No | Sort direction | desc |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint. The description adds valuable context: it uses your user token, includes channels/DMs/group messages, and supports rich search modifiers. This goes beyond the annotations without contradicting them.
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 well-structured with sections for modifiers, args, returns, and examples. It is slightly lengthy but every section earns its place given the complexity of Slack search syntax and pagination.
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 includes the return format (text, author, channel, timestamp, permalink), pagination via the page parameter, and multiple practical examples. Since there is no output schema, this fully bridges the gap and gives the agent complete expectations.
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 covers 100% of parameters, so baseline is 3. The description adds extra meaning by explaining Slack search modifiers, providing example queries, and confirming defaults for sort, count, and page. This helps the agent construct effective queries beyond the raw 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 it 'searches messages across your entire Slack workspace' using the Slack search API, with specific verb, resource, and scope. This distinguishes it from sibling tools like slack_get_channel_history or slack_get_thread, which operate on a single channel or thread.
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 on when to use this tool: when you need to search across channels, DMs, and group messages using your user token. It notes that it searches 'everything you have access to,' which implies the broad use case, but it does not explicitly name alternatives or state when not to use it.
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.
8 tool updates
v1.0.0- First observed
slack_auth_test - First observed
slack_get_channel_history - First observed
slack_get_thread - First observed
slack_get_user_info - First observed
slack_list_channels - First observed
slack_lookup_user - First observed
slack_post_message - First observed
slack_search_messages
TDQS
Scored across 8 tools
Each tool targets a distinct Slack operation: searching messages, listing channels, fetching channel history, posting messages, looking up users, getting user details, testing auth, and fetching thread replies. There is no overlap that would confuse an agent.
All tool names follow the consistent pattern 'slack_<verb>_<noun>', with clear verbs like search, list, get, post, lookup, and auth_test. This provides a predictable and readable naming convention.
With 8 tools, the server is well-scoped for its purpose. It covers the essential Slack operations without unnecessary bloat or missing critical functions.
The tool set covers core workflows: searching, reading history, posting messages, handling threads, and user operations. Minor gaps exist, such as message editing/deleting or adding reactions, but these are not critical for typical Slack automation and can be worked around.
Maintenance
Related MCP Connectors
Enable interaction with Slack workspaces. Supports subscribing to Slack events through Resources.
- UproarOAuthchat.uproar
Chat where AI agents are first-class members, with their own identity and permissions.
Connect AI agents to 1000+ apps with managed authentication and tool-calling.
- SkilderOAuthai.skilder
One place to build, share, and govern the skills and tools your AI agents use at work.
Related MCP Servers
- AlicenseAqualityCmaintenanceEnables interaction with Slack workspaces as a user, supporting channel listing, message posting, threading, reactions, and user management via the Slack API.811MIT
- FlicenseBqualityDmaintenanceEnables AI agents to interact with Slack workspaces through OAuth authentication, supporting message reading, posting to channels and threads, and channel discovery with popularity sorting.4-
- AlicenseAqualityDmaintenanceEnables AI assistants to interact with Slack workspaces through comprehensive channel management, messaging, direct messages, search functionality, and user management capabilities.307 npm2MIT
- AlicenseAqualityAmaintenanceGives AI agents full Slack access via session tokens, requiring no app registration, admin approval, or OAuth.19262 npm30MIT