slackapi / slackapi/slack-skills-plugin

Feature: Add `slack_set_status`, `slack_set_dnd`, and OOO write tools

Open
#40 0 comments 1 reaction 0 assignees View on GitHub

Nobody has claimed this yet.

area:mcp discussion enhancement
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:

  1. 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
  2. slack_set_dnd — wraps dnd.setSnooze

    • Param: num_minutes (int)
    • Required scope: dnd:write
  3. slack_end_dnd — wraps dnd.endSnooze

    • No params
    • Required scope: dnd:write
  4. 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.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.