Install @jtalk22/slack-mcp from npm
Install exact version 5.0.0. No verified executable entrypoint is available, so use the package documentation to launch it.
npm install --save-exact @jtalk22/slack-mcp@5.0.0Gives AI agents full Slack access via session tokens, requiring no app registration, admin approval, or OAuth
Detailed security scan evidence is not public for this MCP yet. Public identity, registry metadata, and independently observed protocol inventory remain available.
Installation and connection instructions are shown only when supported by retained package, repository, or endpoint evidence.
Install exact version 5.0.0. No verified executable entrypoint is available, so use the package documentation to launch it.
npm install --save-exact @jtalk22/slack-mcp@5.0.0| Canonical slug | slack-mcp-server-da1d5f2d | Deployment | Local Only |
|---|---|---|---|
| Canonical package | npm:@jtalk22/slack-mcp | Repository | jtalk22/slack-mcp-server |
| First published | Aug 7, 2026 | Latest release | Aug 7, 2026 |
| Last security verification | — | Classification confidence | 90% |
| Publication | Draft | Official distribution | Not verified |
| Channel | Identifier | Current version | Versions | Source |
|---|---|---|---|---|
| npm | @jtalk22/slack-mcp | 5.0.0 | 47 | Repository |
| Package | Version | Published / observed | Inventory | Security scan |
|---|---|---|---|---|
| npm@jtalk22/slack-mcp | 5.0.0Current | Sep 5, 2026 | 19 toolsPartial · 2 resources · 3 prompts | Evidence restricted |
Independently scan the exact version your agents use, receive alerts when its risk changes, and investigate every finding with retained version evidence.
No public current-version evidence is available yet.
| 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
} | — | WritesDestructiveIdempotentOpen world | — |
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 onlyNon-idempotentClosed world | — |
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 onlyIdempotentOpen world | — |
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
} | — | WritesDestructiveIdempotentOpen world | — |
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 onlyIdempotentOpen world | — |
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 onlyIdempotentOpen world | — |
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 onlyIdempotentOpen world | — |
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 onlyIdempotentOpen world | — |
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 onlyIdempotentOpen world | — |
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 onlyIdempotentOpen world | — |
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
} | — | WritesNon-destructiveIdempotentClosed world | — |
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
} | — | WritesDestructiveIdempotentOpen world | — |
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 onlyIdempotentOpen world | — |
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
} | — | WritesDestructiveNon-idempotentOpen world | — |
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 onlyIdempotentClosed world | — |
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 onlyIdempotentOpen world | — |
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 onlyIdempotentOpen world | — |
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
} | — | WritesNon-destructiveIdempotentClosed world | — |
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 onlyIdempotentClosed world | — |
slack://conversations/listList of available channels and DMs
slack://workspace/infoCurrent workspace name, team, and authenticated user
find-messages-fromFind all messages from a specific user
search-recentSearch workspace for messages from the past week
summarize-channelGet recent activity from a channel for summarization
| Endpoint | Transport | Authentication | Health | Observed |
|---|---|---|---|---|
| No verified remote endpoint is linked. | ||||
Install the selected package version with: npm install --save-exact @jtalk22/slack-mcp@5.0.0
Slack MCP Server exposed 19 tools during independent protocol observation, including slack_add_reaction, slack_catch_me_up, slack_conversations_history, slack_conversations_mark, slack_conversations_unreads, slack_get_full_conversation, slack_get_thread, slack_health_check, and others.
The selected current version does not yet have completed public verification. Unknown does not mean clean or vulnerable.
These internal links are derived from strong identity fields such as the implementation name, package, repository, vendor, and listing name—not generic description prose.
Association is based on retained identity fields; it does not by itself prove first-party publication.
Curated product and capability guides containing this catalog record.