---
ref: tool:slack/post-message
name: Post a message
company: company:slack
workflows: [workflow:high-intent-visitors, workflow:product-qualified-expansion, workflow:at-risk-customer-rescue]
access: [mcp, cli, api]
tags: [capability:route-alerts, category:messaging, has:api, has:cli, has:mcp]
docs: https://docs.slack.dev/reference/methods/chat.postMessage
updated: 2026-09-27
---

# Post a message

Posts a message to a channel, DM or thread and returns the channel ID and the message timestamp.

Needs the `chat:write` scope. Pass `thread_ts` to reply in a thread. Over MCP, `slack_send_message` posts as the signed-in user; the API and CLI post as the app's bot.

## Set up

Use the first option your agent supports.

### MCP (official, remote)

Add this server to your agent's MCP settings, then sign in when asked.

```json
{ "mcpServers": { "slack": { "url": "https://mcp.slack.com/mcp" } } }
```

Call the MCP tool `slack_send_message`.

Server URL: https://mcp.slack.com/mcp

### CLI (official)

Install the command, then confirm it runs.

```sh
curl -fsSL https://downloads.slack-edge.com/slack-cli/install.sh | bash
slack --version
```

Run `slack api chat.postMessage`.

Set `$SLACK_BOT_TOKEN` in your environment first (get a key: https://api.slack.com/apps).

### API (official)

- Base URL: https://slack.com/api
- Endpoint: `POST /chat.postMessage`
- Auth: send the header `Authorization: Bearer $SLACK_BOT_TOKEN`
- Get a key: https://api.slack.com/apps
- Docs: https://docs.slack.dev/apis/web-api/

Before doing anything else, make one read-only call to confirm access.

## Rules

- Ask the user before anything that sends messages, costs money, or changes data.
- Never print API keys.
