slackapi / slackapi/slack-skills-plugin
Feature: Add `slack_set_status`, `slack_set_dnd`, and OOO write tools
Nobody has claimed this yet.
- Dominant language
- Python
- Stars
- 132
- Forks
- 34
- Avg merge
- 1d 6h
- Merged PRs (30d)
- 16
Description
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.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
- Params:
-
slack_set_dnd— wrapsdnd.setSnooze- Param:
num_minutes(int) - Required scope:
dnd:write
- Param:
-
slack_end_dnd— wrapsdnd.endSnooze- No params
- Required scope:
dnd:write
-
slack_set_ooo(composite, optional but high-value) — single call that takesstart_ts,end_ts,status_text,status_emojiand:- 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.
- Sets status with
Adjacent quality-of-life:
- Extend
slack_read_user_profileconcise output to includestatus_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_scopeper tool. - Optionally add
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:
- 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.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by reading the existing Slack MCP implementations for slack_read_user_profile, slack_schedule_message, and slack_send_message_draft, then trace how OAuth scopes are shown in the install screen. Compare those entry points with the users.profile.set, dnd.setSnooze, and dnd.endSnooze methods. Done means the requested user-scoped tools and write scopes work without requiring UI intervention.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- python
- Domain
- api, backend
- Issue type
- Feature
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 45/100