Problem
The Slack MCP plugin currently exposes read tools and message-send tools, but no way for an AI agent to update the user's profile status, set or clear DND, or configure an out-of-office state. Every "set me OOO from X to Y" workflow has to bounce back to the user halfway through to click through Slack's UI — which defeats the point of an agent integration for one of the most common asks.
The underlying Web API endpoints already exist; they just aren't surfaced as MCP tools.
Proposed solution
Add three (optionally four) tools that wrap existing Slack Web API methods:
-
slack_set_status — wraps users.profile.set
- Params:
status_text (string, ≤100 chars), status_emoji (e.g. :palm_tree:), status_expiration (Unix timestamp; 0 = no expiration)
- Required scope:
users.profile:write
-
slack_set_dnd — wraps dnd.setSnooze
- Param:
num_minutes (int)
- Required scope:
dnd:write
-
slack_end_dnd — wraps dnd.endSnooze
- No params
- Required scope:
dnd:write
-
slack_set_ooo (composite, optional but high-value) — single call that takes start_ts, end_ts, status_text, status_emoji and:
- Sets status with
status_expiration = end_ts (Slack auto-clears at the end)
- Sets DND for
(end_ts − start_ts) minutes
- Done in one tool call instead of an agent orchestrating four lower-level calls plus its own scheduler.
Adjacent quality-of-life:
- Extend
slack_read_user_profile concise output to include status_text, status_emoji, status_expiration (already in the upstream API response — just plumb through).
- Surface the new write scopes in the OAuth install screen so users re-consent once instead of hitting
missing_scope per tool.
- Optionally add
slack_set_presence (wraps users.setPresence, auto | away).
All four tools are user-scoped writes — they only affect the authenticated user's own profile and DND, no admin or workspace-wide impact.
Use case
A PM asks their agent: "Set up OOO on Slack from Jun 1 through Jun 4, I'll be checking periodically." The agent can already:
- Draft the OOO message
- Schedule a heads-up post in their team channel via
slack_schedule_message
- Read current DND state via
slack_read_user_profile
…but cannot actually set the status emoji + text, cannot pause notifications, and cannot schedule those changes for a future date. The user is forced to click through Slack → avatar → Update your status → Set custom status → Choose date and time → Pause notifications themselves — which is exactly the multi-step UI navigation the agent integration is supposed to eliminate.
This came up in a real session today. Drafting the message, scheduling the channel post, and reading DND were all handled by the MCP tools in seconds; the actual OOO toggle had to be punted back to the user.
Risk
Low. All four endpoints are user-scoped and well-trodden in Slack's API surface. Status text could leak unintended content if hallucinated — the same _draft pattern used by slack_send_message_draft would address this for slack_set_status if needed.
Problem
The Slack MCP plugin currently exposes read tools and message-send tools, but no way for an AI agent to update the user's profile status, set or clear DND, or configure an out-of-office state. Every "set me OOO from X to Y" workflow has to bounce back to the user halfway through to click through Slack's UI — which defeats the point of an agent integration for one of the most common asks.
The underlying Web API endpoints already exist; they just aren't surfaced as MCP tools.
Proposed solution
Add three (optionally four) tools that wrap existing Slack Web API methods:
slack_set_status— wrapsusers.profile.setstatus_text(string, ≤100 chars),status_emoji(e.g.:palm_tree:),status_expiration(Unix timestamp;0= no expiration)users.profile:writeslack_set_dnd— wrapsdnd.setSnoozenum_minutes(int)dnd:writeslack_end_dnd— wrapsdnd.endSnoozednd:writeslack_set_ooo(composite, optional but high-value) — single call that takesstart_ts,end_ts,status_text,status_emojiand:status_expiration = end_ts(Slack auto-clears at the end)(end_ts − start_ts)minutesAdjacent quality-of-life:
slack_read_user_profileconcise output to includestatus_text,status_emoji,status_expiration(already in the upstream API response — just plumb through).missing_scopeper tool.slack_set_presence(wrapsusers.setPresence,auto|away).All four tools are user-scoped writes — they only affect the authenticated user's own profile and DND, no admin or workspace-wide impact.
Use case
A PM asks their agent: "Set up OOO on Slack from Jun 1 through Jun 4, I'll be checking periodically." The agent can already:
slack_schedule_messageslack_read_user_profile…but cannot actually set the status emoji + text, cannot pause notifications, and cannot schedule those changes for a future date. The user is forced to click through
Slack → avatar → Update your status → Set custom status → Choose date and time → Pause notificationsthemselves — which is exactly the multi-step UI navigation the agent integration is supposed to eliminate.This came up in a real session today. Drafting the message, scheduling the channel post, and reading DND were all handled by the MCP tools in seconds; the actual OOO toggle had to be punted back to the user.
Risk
Low. All four endpoints are user-scoped and well-trodden in Slack's API surface. Status text could leak unintended content if hallucinated — the same
_draftpattern used byslack_send_message_draftwould address this forslack_set_statusif needed.