About slack
The slack skill provides operating guidance for Slack messaging, file sharing, and formatting for workspaces using Hyper MCP and its Slack integration. It also covers when not to respond and how to choose message-sending methods.
Key features
- 01Guidance for messages and thread replies
- 02File upload and sharing rules
- 03Markdown and Block Kit formatting
- 04Channel and member tool reference
- 05User profiles, status, and reminders
- 06Rules for when not to respond
Use cases
- 01Compose or reply to Slack messages
- 02Upload files to channels and threads
- 03Format tables or interactive content
- 04Find channel, member, or user details
MCP support
The skill requires Hyper MCP to be installed and connected, with the Slack integration enabled. It explains how to find, describe, and call Slack tools through an MCP client or Hyper CLI.
Install
Copy the command and run it in a terminal.
npx skills add https:/ / github.com/ hyperfx-ai/ marketing-skills --skill slackAfter installing, type/slackin Claude Code to confirm it loaded.
Details
From the project READMESlack Messaging
This skill provides comprehensive guidance for Slack messaging, file sharing, and formatting.
Requirements
- Hyper MCP installed and connected. https://app.hyperfx.ai/mcp
- Slack integration enabled at https://app.hyperfx.ai/apps.
How to run the tools in this skill
Every tool in this skill is named by its canonical tool name. Run it with the call your surface gives you:
| Surface | Find a tool | Run it |
|---|---|---|
| MCP client (Claude, Cursor, Codex, ChatGPT) | search("<what you want to do>"), then describe("<name>") | call("<name>", {...}) |
| Hyper CLI | hyperai search "<what you want to do>", then hyperai describe <name> | hyperai call <name> --json '{...}' |
If a tool is not found, its integration is not connected or not enabled for the workspace: stop and tell the user which integration to connect.
When NOT to Respond
Return ONLY the text [NO_RESPONSE] (nothing else) in these situations:
- Message mentions another user, not you: If the user mentions another person (e.g.,
@Johnor@SomeOtherBot) and the message is directed at that person, not you. - User explicitly asks to be ignored: If the user says something like "ignore this", "don't respond", or similar.
- Message is clearly not for you: If the conversation is between other users and doesn't require your input.
- Simple acknowledgments between users: Messages like "thanks", "ok", "got it" directed at another person.
IMPORTANT:
- When you decide not to respond, return ONLY the exact text
[NO_RESPONSE]with nothing before or after it. - When in doubt, respond. It's better to be helpful than to stay silent when someone needs you.
- If someone mentions you by name or asks you a direct question, always respond.
- In DMs (direct messages), always respond unless explicitly asked not to.
File Sharing - Critical Rules
CRITICAL: Files can ONLY be shared in Slack via upload. URLs and file paths do NOT render as viewable content in Slack.
- Use
slack_files_uploadto share any file in Slack - Always upload to both the channel AND thread you are responding in, unless requested otherwise
- The
slack_files_uploadtool accepts afile_idparameter for files already stored in the system
Sharing Generated Images
When you generate an image (e.g., via images_generate), the result includes a file_id. This image is NOT automatically displayed in Slack. You MUST explicitly upload it:
- Generate the image using the image generation tool
- Note the
file_idfrom the result - Call
slack_files_uploadwith thatfile_id, the currentchannel_id, andthread_ts
Example workflow:
- User asks: "Generate an image of a sunset"
- You call the image generation tool, which returns
file_id: "abc123" - You then call
slack_files_upload(channel_id="C...", file_id="abc123", thread_ts="...") - Now the image appears in Slack
Do NOT just say "Here's your image" without uploading it. The user will see nothing.
Sharing Other Files
For any file you want to share (documents, CSVs, etc.), use slack_files_upload with either:
file_id: For files already in the systemfile_path: For local filescontent: For text content to upload as a file
Message Formatting
Replies inside a Slack conversation
When a Slack direct message or thread runs you, your reply reaches that thread by itself. Hyper streams it while you write, or posts it as one message when you finish.
- Write the reply in standard Markdown. Slack cannot stream Block Kit, and the reply cannot hold it.
- Never send the reply again with a Slack tool.
- Show a list of entities (ads, campaigns, channels, tasks) as a Markdown table in the reply: the name, the id, and the numbers asked for, at most 20 rows. Say how many rows you left out.
- When the user explicitly asks for interactive elements such as buttons, post them with
slack_messages_send_block_kitin the same thread, with a one-linetext. Then say in one line that you posted them. Do not repeat their content in the reply.
The rest of this section applies to messages that you send with Slack tools.
When to Use Plain Text vs Block Kit
- Simple messages: Use plain markdown text via
slack_messages_sendorslack_threads_replies_send - Tables, lists, structured data: Use Block Kit
rich_textblocks viaslack_messages_send_block_kit - Messages over 3000 characters: Use
slack_messages_send_large
Slack Markdown
Slack uses a simplified markdown:
*bold*(single asterisks, not double)_italic_~strikethrough~`code`for inline code```code block```for code blocks<url|display text>for links (NOT[text](url))
Block Kit Rich Text
Block Kit's rich_text block provides flexible formatting:
Available Elements:
rich_text_section: Single line of text with inline formattingrich_text_list: Bulleted or ordered lists (style: "bullet"orstyle: "ordered")rich_text_quote: Quote blocks with vertical bar styling
Element Types Within Sections:
text: Plain or styled text (supportsbold,italic,strike,code)link: Hyperlinks with optional display textemoji: Emoji by nameuser: User mentionschannel: Channel mentions
Bulleted List Example:
{
"type": "rich_text",
"elements": [
{
"type": "rich_text_list",
"style": "bullet",
"elements": [
{
"type": "rich_text_section",
"elements": [{"type": "text", "text": "First item"}]
},
{
"type": "rich_text_section",
"elements": [{"type": "text", "text": "Second item"}]
}
]
}
]
}
Ordered List: Use "style": "ordered" instead of "bullet".
Nested Lists: Use the indent property:
{
"type": "rich_text_list",
"style": "ordered",
"indent": 1,
"elements": [...]
}
Inline Styling:
{
"type": "text",
"text": "Bold text",
"style": {"bold": true}
}
Available styles: bold, italic, strike, code
Links in Text:
{
"type": "rich_text_section",
"elements": [
{"type": "text", "text": "Click "},
{"type": "link", "text": "here", "url": "https://example.com"},
{"type": "text", "text": " to continue"}
]
}
Messaging Tools Quick Reference
| Action | Tool |
|---|---|
| Send a message | slack_messages_send |
| Reply in a thread | slack_threads_replies_send |
| Upload/share a file | slack_files_upload |
| Send Block Kit message | slack_messages_send_block_kit |
| Send long message (>3000 chars) | slack_messages_send_large |
| Update a message | slack_messages_update |
| Delete a message | slack_messages_delete |
| Add a reaction | slack_reactions_add |
| Pin a message | slack_messages_pin |
| Search messages | slack_messages_search |
Channel Management Quick Reference
| Action | Tool |
|---|---|
| List channels | slack_channels_list |
| Get channel info | slack_channels_get |
| Create a channel | slack_channels_create |
| Set channel topic | slack_channels_topic_update |
| Set channel purpose | slack_channels_purpose_update |
| Invite users | slack_channels_users_invite |
| Get channel members | slack_channels_members_list |
User Operations Quick Reference
| Action | Tool |
|---|---|
| List workspace users | slack_users_list |
| Get user profile | slack_users_profile_get |
| Find user by email | slack_users_search_by_email |
| Get user presence | slack_users_presence_get |
| Set your status | slack_users_status_update |
| Create a reminder | slack_reminders_create |