Skip to main content
Glama
farsght

slack-user-mcp-server

by farsght

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

slack_search_messages

Search messages with Slack query syntax

slack_list_channels

List channels (public, private, DMs)

slack_get_channel_history

Read recent messages from a channel

slack_post_message

Send a message as yourself

slack_lookup_user

Find users by name or email

slack_get_user_info

Get detailed user profile by ID

slack_get_thread

Read all replies in a thread

slack_auth_test

Verify your connection

Setup

1. Create a Slack App and Get a User Token

  1. Go to api.slack.com/apps and create a new app From scratch

  2. Under OAuth & Permissions, add these User Token Scopes:

    • search:read

    • channels:read, channels:history

    • groups:read, groups:history

    • im:read, im:history

    • mpim:read, mpim:history

    • users:read, users:read.email

    • chat:write

  3. Install the app to your workspace

  4. Copy the User OAuth Token (starts with xoxp-)

2. Install Dependencies and Build

cd slack-user-mcp-server
npm install
npm run build

3. 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 fnm or nvm, use the full path to node instead of just "node". Find it with fnm exec --using=default -- which node or nvm 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

from:

from:me or from:@username

Messages from a user

in:

in:#channel

Messages in a channel

has:

has:link, has:reaction

Filter by attributes

before: / after:

after:2024-01-01

Date range

is:

is:thread

Threaded messages only

Tech Stack

  • TypeScript

  • MCP TypeScript SDK

  • Slack Web API (via fetch)

  • Zod for input validation

  • stdio transport

Available Tools

8 tools
slack_auth_testGet My Slack IdentityA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 HistoryA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of messages to return
latestNoEnd of time range (Unix timestamp)
oldestNoStart of time range (Unix timestamp)
channelYesChannel ID or name (e.g. C012AB3CD or #general)
inclusiveNoInclude boundary messages

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 RepliesB
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax replies to return
channelYesChannel ID
thread_tsYesParent message timestamp

TDQS

B3.2/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness3/5

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

Given the tool's moderate complexity 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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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

No guidance is provided about when to use this tool versus alternatives 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 InfoA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_idYesSlack user ID (e.g. U012AB3CD)

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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 ChannelsA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax channels to return
typesNoComma-separated channel typespublic_channel,private_channel
cursorNoPagination cursor
exclude_archivedNoExclude archived channels

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 UserA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesName or email to search for

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesMessage text (supports Slack mrkdwn)
channelYesChannel ID or name
thread_tsNoThread timestamp to reply to

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 MessagesA
Read-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

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number
sortNoSort by timestamp or relevance scoretimestamp
countNoNumber of results per page
queryYesSlack search query
sort_dirNoSort directiondesc

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

  1. 8 tool updatesv1.0.0
    • First observedslack_auth_test
    • First observedslack_get_channel_history
    • First observedslack_get_thread
    • First observedslack_get_user_info
    • First observedslack_list_channels
    • First observedslack_lookup_user
    • First observedslack_post_message
    • First observedslack_search_messages

TDQS

A4/5.0

Scored across 8 tools

Disambiguation5/5

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.

Naming Consistency5/5

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.

Tool Count5/5

With 8 tools, the server is well-scoped for its purpose. It covers the essential Slack operations without unnecessary bloat or missing critical functions.

Completeness4/5

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

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    Enables interaction with Slack workspaces as a user, supporting channel listing, message posting, threading, reactions, and user management via the Slack API.
    8
    11
    MIT
  • F
    license
    B
    quality
    D
    maintenance
    Enables 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
    -
  • A
    license
    A
    quality
    D
    maintenance
    Enables AI assistants to interact with Slack workspaces through comprehensive channel management, messaging, direct messages, search functionality, and user management capabilities.
    30
    7 npm
    2
    MIT