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-server search 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.
Inputs: no named parameters.
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.
Inputs: channel (required), limit, latest, oldest, +1 more.
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.
Inputs: channel (required), thread_ts (required), limit.
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.
Inputs: user_id (required).
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.
Inputs: limit, types, cursor, exclude_archived.
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.
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 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
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
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
Chat with your AI agents from Slack: each gets a thread in your DM, and your replies there wake it.
Connect a user's Google Calendar, Gmail, Drive, Notion or Slack so your agent reads their data.
Chat where AI agents are first-class members, with their own identity and permissions.
Let AI agents use your real, signed-in Chrome: tabs, clicks, forms, screenshots and video.
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables interaction with Slack workspaces as a user, supporting channel listing, message posting, threading, reactions, and user management via the Slack API.811MIT
- AlicenseBqualityDmaintenanceEnables AI agents to interact with Slack workspaces through OAuth authentication, supporting message reading, posting to channels and threads, and channel discovery with popularity sorting.4MIT
- AlicenseAqualityDmaintenanceEnables AI assistants to interact with Slack workspaces, including listing channels, posting messages, replying to threads, adding reactions, and retrieving user information.1024 npmMIT
- AlicenseBqualityCmaintenanceEnables AI assistants to interact with Slack workspaces, providing tools for reading messages, posting content, managing channels, and more.2243MIT