# 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.

- Skill: `slackapi/slack-messaging` (Agent Skill)
- Install (CLI): `npx skillmds@latest add slackapi/slack-messaging`
- Raw SKILL.md: https://api.skillmd.com/api/skills/slackapi/slack-messaging/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: AI & ML
- Author: slackapi (https://skillmd.com/u/slackapi)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/slackapi/slack-messaging

---


# Slack Messaging Best Practices

This skill provides guidance for composing well-formatted, effective Slack messages.

## When to Use

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.

## Formatting

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:

  ````text
  ```python
  print("hello")
  ```
  ````

- **Table** with `|` delimiters (escape a literal pipe inside a cell as `\|`):

  ```text
  | Feature | Status |
  |---------|--------|
  | Tables  | works  |
  ```

- **Headers** with `#` / `##` / `###`:

  ```text
  ## Section title
  ```

The one thing that does **not** embed in a message: inline images (`![alt](url)`) 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.

## Message Structure Guidelines

- **Lead with the point.** Put the most important information in the first line. Many people read Slack on mobile or in notifications where only the first line shows.
- **Keep it short.** Aim for 1-3 short paragraphs (the ~5000-character limit is a ceiling, not a target). If the message is long or structured, consider a Canvas instead.
- **Use line breaks generously.** Walls of text are hard to read. Separate distinct thoughts with blank lines.
- **Use bullet points for lists.** Anything with 3+ items should be a list, not a run-on sentence.
- **Bold key information.** Use `**bold**` for names, dates, deadlines, and action items so they stand out when scanning.

## Thread vs. Channel Etiquette

- **Reply in threads** when responding to a specific message to keep the main channel clean.
- **Use `reply_broadcast`** (also post to channel) only when the reply contains information everyone needs to see.
- **Post in the channel** (not a thread) when starting a new topic, making an announcement, or asking a question to the whole group.
- **Don't start a new thread** to continue an existing conversation; find and reply to the original message.

## Tone and Audience

- Match the tone to the channel: `#general` is usually more formal than `#random`.
- For simple acknowledgments, add an emoji reaction with `slack_add_reaction` instead of a reply message (use `slack_get_reactions` to read existing reactions).
- When writing announcements, use a clear structure: context, key info, call to action.

## Scheduling

- Use `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.
- Scheduled messages can't be edited via the API once set — the user manages them from **Drafts & sent** in Slack.

## Notes

- **Canvas formatting is different.** `slack_create_canvas` uses Canvas-flavored Markdown, a richer dialect than the message tools: headers, tables, checklists, and inline images (`![alt](url)`) 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.
- **Scope:** this skill owns composing and formatting the _text_ of messages sent through the Slack MCP message tools. For interactive layouts (buttons, menus, modals, Home tabs, or any Block Kit JSON), use the `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.

