mcp-slack
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| SLACK_MCP_ALLOW_WRITE | No | Set to 1 to enable the slack_post_message tool. Off by default. | 0 |
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| slack_searchA | Search Slack messages using native Slack search syntax. Supports operators like Args: query: Slack search query, e.g. 'from:@alice in:#project-x deadline'. count: Maximum matches to return (default 50). sort: 'timestamp' for newest-first, or 'score' for relevance. include_broadcasts: When False, drop @here/@channel/@everyone messages. |
| slack_channel_historyA | Read messages from one channel over a time window. Accepts a channel name ('project-x' or '#project-x') or a channel ID. Name lookups are cached. Returns top-level messages only — use slack_thread to expand any message whose reply_count is non-zero. Args: channel: Channel name or ID. oldest: Start bound as 'YYYY-MM-DD', 'YYYY-MM-DD HH:MM:SS', an epoch, or a relative offset like '-7d'. latest: End bound, same formats. A bare date means end-of-day. limit: Maximum messages (default 100). resolve_names: Resolve user IDs to display names (costs one call per user). include_broadcasts: When False, drop @here/@channel/@everyone messages. |
| slack_threadA | Fetch every reply in a thread, including the parent message. Args:
channel: Channel name or ID containing the thread.
thread_ts: Timestamp of the thread parent (the |
| slack_dm_historyA | Read direct-message history with one person. Args: user: Username, @username, or user ID. limit: Maximum messages (default 50). oldest: Optional start bound as 'YYYY-MM-DD' or epoch. resolve_names: Resolve user IDs to display names. |
| slack_list_channelsA | Discover channels by glob pattern and minimum member count. EXPENSIVE: this enumerates conversations.list, which Enterprise Grid throttles hard, so it may return a rate_limited error on large workspaces. If you already know the channel name, skip this and pass the name straight to slack_channel_history — that resolves via one fast search call. For a glob over channels you have joined, slack_channels_history is far cheaper. Args: pattern: fnmatch glob against the channel name, e.g. 'team-*'. min_members: Only return channels with at least this many members. include_private: Include private channels you have joined. limit: Maximum channels to return (default 200). |
| slack_userA | Resolve a username or user ID to a profile. Use this to turn a raw user ID from another result (e.g. 'U01234ABCDE') into a name, or to look up someone's title, timezone, and custom fields. Args: name_or_id: Username, @username, display name, or user ID. include_custom_fields: Resolve workspace custom profile fields to labels (costs one extra API call). |
| slack_user_activityA | Everything one person said or received in a time range, grouped by channel. Searches messages from and to the user, optionally pulls surrounding channel
history so replies have antecedents, and optionally expands every thread
touched. Returns messages grouped by channel with replies nested under their
parents, plus a Prefer this over assembling the same result from slack_search plus slack_channel_history plus slack_thread: it deduplicates across all three passes, which a sequence of separate calls cannot do without replaying every message. Cost scales with the number of channels the user was active in. Args:
user: Slack handle or user ID. Defaults to the authenticated user.
oldest: Window start — 'YYYY-MM-DD', an epoch, or a relative offset such
as '-7d'. Defaults to one day before |
| slack_channels_historyA | History for several channels over one time range, threads nested inline. Give either an explicit Discovery by Args:
channels: Channel names or IDs. Mutually exclusive with |
| slack_profilesA | Look up full profiles for several people at once. Richer than slack_user: resolves workspace custom fields to their labels and
rewrites user-typed fields (for example Manager or Direct Reports) from raw
IDs to display names. Returns Args: handles: Usernames, @usernames, or user IDs. Unresolvable entries come back as {'handle': ..., 'error': ...} rather than failing the batch. |
| slack_post_messageA | Post a message to Slack as yourself. DISABLED by default. Requires SLACK_MCP_ALLOW_WRITE=1 in the server environment. Without it this tool refuses and returns an error, so no agent action can post by accident. Args: channel: Channel name or ID to post into. text: Message body (Slack mrkdwn). thread_ts: Optional thread parent timestamp, to reply in-thread. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
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/gregbuehler/mcp-slack'
If you have feedback or need assistance with the MCP directory API, please join our Discord server