Skip to main content
Glama
slack-user-mcp-server

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.

Inputs: no named parameters.

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.

Inputs: channel (required), limit, latest, oldest, +1 more.

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.

Inputs: channel (required), thread_ts (required), limit.

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.

Inputs: user_id (required).

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.

Inputs: limit, types, cursor, exclude_archived.

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.

Inputs: query (required).

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.

Inputs: text (required), channel (required), thread_ts.

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

Inputs: query (required), page, sort, count, +1 more.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    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 recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      A
      quality
      D
      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
    • A
      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
      MIT
    • A
      license
      A
      quality
      D
      maintenance
      Enables AI assistants to interact with Slack workspaces, including listing channels, posting messages, replying to threads, adding reactions, and retrieving user information.
      10
      24 npm
      MIT