← Slack MCP Server

Slack MCP Server 5.0.0

npm · @jtalk22/slack-mcp · current release

19
Tools
2
Resources
0
Templates
3
Prompts

Observation

Observed 2026-08-25T04:34:56.397Z using mcpSecurity-inventory. Status: partial. Negotiated protocol: 2025-06-18.

Server capabilities
{
  "tools": {},
  "prompts": {},
  "resources": {}
}

Tools 19

ToolCategoryAnnotationsRisk
slack_add_reactionAdd an emoji reaction to a message
Input schema
{
  "type": "object",
  "properties": {
    "channel_id": {
      "type": "string",
      "description": "Channel or DM ID containing the message"
    },
    "timestamp": {
      "type": "string",
      "description": "Message timestamp to react to"
    },
    "reaction": {
      "type": "string",
      "description": "Emoji name without colons (e.g., 'thumbsup', 'eyes', 'white_check_mark')"
    }
  },
  "required": [
    "channel_id",
    "timestamp",
    "reaction"
  ]
}
Annotations
{
  "title": "Add Reaction",
  "readOnlyHint": false,
  "destructiveHint": true,
  "idempotentHint": true,
  "openWorldHint": true
}
Writes · Destructive
slack_catch_me_upCatch up on a saved workflow profile. Reads the profile's channels (or everything currently unread if the profile names none), pulls messages since the cadence window or an explicit `since`, expands active threads, and returns structured evidence: which threads are unanswered and for how long, what the profile's priority people said or were pinned on, and which conversations moved most. Runs locally against your own session — no hosted account, no server-side model. The response carries an `output_contract` naming the keys to compose for this workflow_kind; write the summary from the returned `signals` and `conversations`, citing conversation names and timestamps.
Input schema
{
  "type": "object",
  "properties": {
    "profile_name": {
      "type": "string",
      "description": "Name of a workflow profile saved via slack_workflow_save (list them with slack_workflows)"
    },
    "since": {
      "type": "string",
      "description": "Optional ISO 8601 timestamp — only consider messages newer than this. Defaults to the profile's cadence window: 24 hours for on_demand and daily_8am, 7 days for weekly_monday."
    }
  },
  "required": [
    "profile_name"
  ]
}
Annotations
{
  "title": "Catch Me Up",
  "readOnlyHint": true,
  "idempotentHint": false,
  "openWorldHint": false
}
Read only · —
slack_conversations_historyGet messages from a channel or DM with user names resolved
Input schema
{
  "type": "object",
  "properties": {
    "channel_id": {
      "type": "string",
      "description": "Channel or DM ID (e.g., D063M4403MW)"
    },
    "limit": {
      "type": "number",
      "description": "Messages to fetch (max 100, default 50)"
    },
    "oldest": {
      "type": "string",
      "description": "Unix timestamp - get messages after this time (boundary timestamp included)"
    },
    "latest": {
      "type": "string",
      "description": "Unix timestamp - get messages before this time (boundary timestamp included)"
    },
    "resolve_users": {
      "type": "boolean",
      "description": "Convert user IDs to names (default true)"
    },
    "include_rich_message_fields": {
      "type": "boolean",
      "description": "Include Slack message attachments, blocks, metadata, files, and reactions when present"
    },
    "include_all_metadata": {
      "type": "boolean",
      "description": "Pass Slack's include_all_metadata option to conversations.history"
    }
  },
  "required": [
    "channel_id"
  ]
}
Annotations
{
  "title": "Conversation History",
  "readOnlyHint": true,
  "idempotentHint": true,
  "openWorldHint": true
}
Read only · —
slack_conversations_markMark a conversation as read up to a specific message timestamp
Input schema
{
  "type": "object",
  "properties": {
    "channel_id": {
      "type": "string",
      "description": "Channel or DM ID to mark as read"
    },
    "timestamp": {
      "type": "string",
      "description": "Message timestamp to mark as read up to (all messages at or before this are marked read)"
    }
  },
  "required": [
    "channel_id",
    "timestamp"
  ]
}
Annotations
{
  "title": "Mark as Read",
  "readOnlyHint": false,
  "destructiveHint": true,
  "idempotentHint": true,
  "openWorldHint": true
}
Writes · Destructive
slack_conversations_unreadsGet channels and DMs with unread messages, sorted by unread count (highest first)
Input schema
{
  "type": "object",
  "properties": {
    "types": {
      "type": "string",
      "description": "Comma-separated types: im, mpim, public_channel, private_channel (default all)",
      "default": "im,mpim,public_channel,private_channel"
    },
    "limit": {
      "type": "number",
      "description": "Maximum conversations to return (default 50)"
    }
  }
}
Annotations
{
  "title": "Unread Conversations",
  "readOnlyHint": true,
  "idempotentHint": true,
  "openWorldHint": true
}
Read only · —
slack_get_full_conversationExport FULL conversation history with all messages, threads, and user names. Can save to file.
Input schema
{
  "type": "object",
  "properties": {
    "channel_id": {
      "type": "string",
      "description": "Channel or DM ID"
    },
    "oldest": {
      "type": "string",
      "description": "Unix timestamp start (e.g., 1733011200 = Dec 1, 2025; boundary timestamp included)"
    },
    "latest": {
      "type": "string",
      "description": "Unix timestamp end (boundary timestamp included)"
    },
    "max_messages": {
      "type": "number",
      "description": "Maximum messages to retrieve (default 2000, max 10000)"
    },
    "include_threads": {
      "type": "boolean",
      "description": "Fetch thread replies (default true)"
    },
    "include_rich_message_fields": {
      "type": "boolean",
      "description": "Include Slack message attachments, blocks, metadata, files, and reactions when present"
    },
    "include_all_metadata": {
      "type": "boolean",
      "description": "Pass Slack's include_all_metadata option to conversations.history and conversations.replies"
    },
    "output_file": {
      "type": "string",
      "description": "Filename to save export (saved to ~/.slack-mcp-exports/)"
    }
  },
  "required": [
    "channel_id"
  ]
}
Annotations
{
  "title": "Full Conversation Export",
  "readOnlyHint": true,
  "idempotentHint": true,
  "openWorldHint": true
}
Read only · —
slack_get_threadGet all replies in a message thread
Input schema
{
  "type": "object",
  "properties": {
    "channel_id": {
      "type": "string",
      "description": "Channel or DM ID"
    },
    "thread_ts": {
      "type": "string",
      "description": "Thread parent message timestamp"
    },
    "include_rich_message_fields": {
      "type": "boolean",
      "description": "Include Slack message attachments, blocks, metadata, files, and reactions when present"
    },
    "include_all_metadata": {
      "type": "boolean",
      "description": "Pass Slack's include_all_metadata option to conversations.replies"
    }
  },
  "required": [
    "channel_id",
    "thread_ts"
  ]
}
Annotations
{
  "title": "Get Thread",
  "readOnlyHint": true,
  "idempotentHint": true,
  "openWorldHint": true
}
Read only · —
slack_health_checkCheck if Slack tokens are valid and show authentication status
Input schema
{
  "type": "object",
  "properties": {}
}
Annotations
{
  "title": "Health Check",
  "readOnlyHint": true,
  "idempotentHint": true,
  "openWorldHint": true
}
Read only · —
slack_list_conversationsList all DMs and channels with user names resolved. Uses cached DMs by default for speed.
Input schema
{
  "type": "object",
  "properties": {
    "types": {
      "type": "string",
      "description": "Comma-separated types: im, mpim, public_channel, private_channel",
      "default": "im,mpim"
    },
    "limit": {
      "type": "number",
      "description": "Maximum results (default 100)"
    },
    "discover_dms": {
      "type": "boolean",
      "description": "If true, actively discover all DMs (slower, may hit rate limits on large workspaces). Default false uses cached DMs."
    }
  }
}
Annotations
{
  "title": "List Conversations",
  "readOnlyHint": true,
  "idempotentHint": true,
  "openWorldHint": true
}
Read only · —
slack_list_usersList all users in the workspace
Input schema
{
  "type": "object",
  "properties": {
    "limit": {
      "type": "number",
      "description": "Maximum users to return (default 500, supports pagination)"
    }
  }
}
Annotations
{
  "title": "List Users",
  "readOnlyHint": true,
  "idempotentHint": true,
  "openWorldHint": true
}
Read only · —
slack_refresh_tokensForce refresh tokens by extracting from Chrome (requires Slack tab open in Chrome)
Input schema
{
  "type": "object",
  "properties": {}
}
Annotations
{
  "title": "Refresh Tokens",
  "readOnlyHint": false,
  "destructiveHint": false,
  "idempotentHint": true,
  "openWorldHint": false
}
Writes · Non-destructive
slack_remove_reactionRemove an emoji reaction from a message
Input schema
{
  "type": "object",
  "properties": {
    "channel_id": {
      "type": "string",
      "description": "Channel or DM ID containing the message"
    },
    "timestamp": {
      "type": "string",
      "description": "Message timestamp to remove reaction from"
    },
    "reaction": {
      "type": "string",
      "description": "Emoji name without colons (e.g., 'thumbsup', 'eyes')"
    }
  },
  "required": [
    "channel_id",
    "timestamp",
    "reaction"
  ]
}
Annotations
{
  "title": "Remove Reaction",
  "readOnlyHint": false,
  "destructiveHint": true,
  "idempotentHint": true,
  "openWorldHint": true
}
Writes · Destructive
slack_search_messagesSearch messages across the Slack workspace
Input schema
{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "description": "Search query (supports Slack syntax like from:@user, in:#channel)"
    },
    "count": {
      "type": "number",
      "description": "Number of results (max 100, default 20)"
    },
    "include_rich_message_fields": {
      "type": "boolean",
      "description": "Include Slack message attachments, blocks, metadata, files, and reactions when present"
    }
  },
  "required": [
    "query"
  ]
}
Annotations
{
  "title": "Search Messages",
  "readOnlyHint": true,
  "idempotentHint": true,
  "openWorldHint": true
}
Read only · —
slack_send_messageSend a message to a channel or DM
Input schema
{
  "type": "object",
  "properties": {
    "channel_id": {
      "type": "string",
      "description": "Channel or DM ID to send to"
    },
    "text": {
      "type": "string",
      "description": "Message text (supports Slack markdown)"
    },
    "thread_ts": {
      "type": "string",
      "description": "Thread timestamp to reply to (optional)"
    }
  },
  "required": [
    "channel_id",
    "text"
  ]
}
Annotations
{
  "title": "Send Message",
  "readOnlyHint": false,
  "destructiveHint": true,
  "idempotentHint": false,
  "openWorldHint": true
}
Writes · Destructive
slack_token_statusCheck token health, age, auto-refresh status, and cache stats
Input schema
{
  "type": "object",
  "properties": {}
}
Annotations
{
  "title": "Token Status",
  "readOnlyHint": true,
  "idempotentHint": true,
  "openWorldHint": false
}
Read only · —
slack_users_infoGet detailed information about a Slack user
Input schema
{
  "type": "object",
  "properties": {
    "user_id": {
      "type": "string",
      "description": "Slack user ID"
    }
  },
  "required": [
    "user_id"
  ]
}
Annotations
{
  "title": "User Info",
  "readOnlyHint": true,
  "idempotentHint": true,
  "openWorldHint": true
}
Read only · —
slack_users_searchSearch workspace users by name, display name, or email. Case-insensitive partial match.
Input schema
{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "description": "Search term to match against name, display name, real name, or email"
    },
    "limit": {
      "type": "number",
      "description": "Maximum results to return (default 20)"
    }
  },
  "required": [
    "query"
  ]
}
Annotations
{
  "title": "Search Users",
  "readOnlyHint": true,
  "idempotentHint": true,
  "openWorldHint": true
}
Read only · —
slack_workflow_saveSave or update a workflow profile that binds a workflow_kind (support_inbox | incident_room | exec_brief | product_launch_watch | custom) to channels, priority people, retention mode, and summary cadence. Stored locally at ~/.slack-mcp-workflows.json. slack_catch_me_up reads the profile by name and returns evidence shaped by its workflow_kind.
Input schema
{
  "type": "object",
  "properties": {
    "profile_name": {
      "type": "string",
      "description": "Unique name for this workflow profile (e.g. 'morning-exec-brief', 'on-call-rotation')"
    },
    "workflow_kind": {
      "type": "string",
      "enum": [
        "support_inbox",
        "incident_room",
        "exec_brief",
        "product_launch_watch",
        "custom"
      ],
      "description": "Workflow kind. Determines the output_contract keys slack_catch_me_up returns for this profile."
    },
    "channels": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Slack channel IDs to read (e.g. ['C012345', 'C067890'])"
    },
    "priority_people": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Slack user IDs whose messages get extra weight in summaries"
    },
    "retention_mode": {
      "type": "string",
      "enum": [
        "ephemeral",
        "persistent"
      ],
      "description": "Retention preference recorded on the profile. Default ephemeral."
    },
    "summary_cadence": {
      "type": "string",
      "enum": [
        "on_demand",
        "daily_8am",
        "weekly_monday"
      ],
      "description": "How often this profile expects to be caught up on. Sets slack_catch_me_up's default window: 24 hours for on_demand and daily_8am, 7 days for weekly_monday."
    }
  },
  "required": [
    "profile_name",
    "workflow_kind"
  ]
}
Annotations
{
  "title": "Save Workflow Profile",
  "readOnlyHint": false,
  "destructiveHint": false,
  "idempotentHint": true,
  "openWorldHint": false
}
Writes · Non-destructive
slack_workflowsList all saved workflow profiles from ~/.slack-mcp-workflows.json. Optionally filter by workflow_kind. Returns profile_name, channels, priority_people, retention_mode, summary_cadence, structured_keys, created_at, updated_at.
Input schema
{
  "type": "object",
  "properties": {
    "workflow_kind": {
      "type": "string",
      "enum": [
        "support_inbox",
        "incident_room",
        "exec_brief",
        "product_launch_watch",
        "custom"
      ],
      "description": "Optional filter — return only profiles of this workflow_kind"
    }
  }
}
Annotations
{
  "title": "List Workflow Profiles",
  "readOnlyHint": true,
  "idempotentHint": true,
  "openWorldHint": false
}
Read only · —

Resources 2

Resource templates 0

Prompts 3

Let’s talk about MCP security.

Share your details and our security team will contact you.