5.0.0npm · @jtalk22/slack-mcp · current release
Observed 2026-08-25T04:34:56.397Z using mcpSecurity-inventory. Status: partial. Negotiated protocol: 2025-06-18.
{
"tools": {},
"prompts": {},
"resources": {}
}| Tool | Category | Annotations | Risk |
|---|---|---|---|
slack_add_reactionAdd an emoji reaction to a messageInput 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 resolvedInput 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 timestampInput 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 threadInput 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 statusInput 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 workspaceInput 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 messageInput 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 workspaceInput 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 DMInput 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 statsInput schema{
"type": "object",
"properties": {}
}Annotations{
"title": "Token Status",
"readOnlyHint": true,
"idempotentHint": true,
"openWorldHint": false
} | — | Read only · — | — |
slack_users_infoGet detailed information about a Slack userInput 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 · — | — |
List of available channels and DMs
{
"resource_key": "slack://conversations/list",
"uri": "slack://conversations/list",
"name": "Conversations",
"description": "List of available channels and DMs",
"mime_type": "application/json",
"annotations": null,
"metadata_hash": "9b313d743d05c79531a033f65239400ca7813a60601af7ab00c1b8e940a1adaa"
}Current workspace name, team, and authenticated user
{
"resource_key": "slack://workspace/info",
"uri": "slack://workspace/info",
"name": "Workspace Info",
"description": "Current workspace name, team, and authenticated user",
"mime_type": "application/json",
"annotations": null,
"metadata_hash": "830a9b5f5312e06830ad4b16eb2de7f92f228589634de81c45ef332633cac71d"
}Find all messages from a specific user
{
"prompt_key": "find-messages-from",
"name": "find-messages-from",
"description": "Find all messages from a specific user",
"arguments": [
{
"name": "username",
"description": "Username or display name to search for",
"required": true
}
],
"metadata_hash": "4187c5737b3321d3e755ad9b1ac29a1aad91b24235e63ad1395661f52f4ed69d"
}Search workspace for messages from the past week
{
"prompt_key": "search-recent",
"name": "search-recent",
"description": "Search workspace for messages from the past week",
"arguments": [
{
"name": "query",
"description": "Search terms to look for",
"required": true
}
],
"metadata_hash": "9312c7c716f166c65edc2e2b6eaf5c47a02fe065399253faac54fe8cc7710412"
}Get recent activity from a channel for summarization
{
"prompt_key": "summarize-channel",
"name": "summarize-channel",
"description": "Get recent activity from a channel for summarization",
"arguments": [
{
"name": "channel_id",
"description": "Channel ID to summarize",
"required": true
},
{
"name": "days",
"description": "Number of days to look back (default 7)",
"required": false
}
],
"metadata_hash": "29646ceb82cb516dff2e49c5da6e59f6d2cf26ab768dc966a453914cb0c372b5"
}