npx skills add ...
npx skills add slackapi/slack-skills-plugin --skill slack-messaging
Use when writing, drafting, scheduling, or improving a Slack message, announcement, or reply sent via the Slack MCP tools (slack_send_message, slack_send_message_draft, slack_schedule_message). Covers Slack markdown formatting, message structure, thread etiquette, reactions, and scheduling, and points to the right dialect for canvases and Block Kit.
npx skills add slackapi/slack-skills-plugin --skill slack-messaging
This skill provides guidance for composing well-formatted, effective Slack messages.
Apply this skill whenever composing, drafting, or helping the user write a Slack message, including when using slack_send_message, slack_send_message_draft, or slack_schedule_message. The formatting rules below cover these message tools. slack_create_canvas uses a different, richer markdown dialect — see the Canvas note below.
The message tools (slack_send_message, slack_send_message_draft, slack_schedule_message) accept standard markdown and convert it to Slack formatting on send. Write normal markdown. Do not use Slack's legacy mrkdwn syntax (*bold*, ~strike~); those single-character forms mean something different in standard markdown. Each text element is limited to ~5000 characters.
| Format | Syntax |
|---|---|
| Bold | **text** |
| Italic | _text_ (or *text*) |
| Strikethrough | ~~text~~ |
| Code (inline) | `code` |
| Quote | > text |
| Link | [display text](url) |
| Bulleted list | - item |
| Numbered list | 1. item |
Block elements also work. Write them as literal markdown:
Code block with an optional language for syntax highlighting:
Table with | delimiters (escape a literal pipe inside a cell as \|):
Headers with # / ## / ###:
The one thing that does not embed in a message: inline images () typically render as a plain link rather than an inline image. For rich embedded layouts (buttons, images, structured cards) you need Block Kit; for a document-style surface where images do embed, use a canvas. See the Notes below.
**bold** for names, dates, deadlines, and action items so they stand out when scanning.reply_broadcast (also post to channel) only when the reply contains information everyone needs to see.#general is usually more formal than #random.slack_add_reaction instead of a reply message (use slack_get_reactions to read existing reactions).slack_schedule_message to post later. post_at is a Unix timestamp that must be at least 2 minutes in the future and at most 120 days out; the message body uses the same standard markdown as above.slack_create_canvas uses Canvas-flavored Markdown, a richer dialect than the message tools: headers, tables, checklists, and inline images () all embed, and it also supports user/channel reference cards, callouts, and columns. Do not assume the message rules above apply — follow the slack_create_canvas tool's own formatting guidance when composing a canvas.slack:block-kit skill, which composes and validates the block payload. For calling the Slack Web API directly (chat.postMessage and friends) rather than the MCP tools, use the slack:slack-api skill.