# Post Message — Slack

> Send a message to a channel, user, or group. Accepts a channel ID (e.g. C1234567890) or channel name (e.g. #general or general) — names are resolved automatically. To post a note to yourself (save a personal note or reminder), pass your…

- Key: `slack_v2-post-message`
- Type: Action (Write)
- Version: 0.1.0
- App: Slack (`slack_v2`) — https://pipedream.com/apps/slack-v2.md
- This page (HTML): https://pipedream.com/apps/slack-v2/actions/post-message
- Hints: open-world
- Source: https://github.com/PipedreamHQ/pipedream/blob/master/components/slack_v2/actions/post-message/post-message.mjs

## Description

Send a message to a channel, user, or group. Accepts a channel ID (e.g. `C1234567890`) or channel name (e.g. `#general` or `general`) — names are resolved automatically. To post a note to yourself (save a personal note or reminder), pass your own user ID (e.g. `U1234567890`) as the Channel — use **Get Current User** to find your user ID first. To reply to a thread, provide `threadTs` (Slack calls this `thread_ts`) from **Get Channel History**. Supports plain text with Slack mrkdwn formatting and Block Kit blocks. Posts as the authenticated user by default; set `sendAsBot` to `true` to post as the Slack app's bot user instead. [See the documentation](https://api.slack.com/methods/chat.postMessage)

## Props

| Prop | Type | Required | Description |
|---|---|---|---|
| `channel` | `string` | Yes | Channel ID (e.g. C1234567890), channel name (e.g. general or #general), user ID, or group ID. Channel names are resolved to IDs automatically. |
| `text` | `string` | Yes | The message text. Supports Slack mrkdwn formatting (e.g. *bold*, _italic_, <https://example.com\|link>). To mention a user, use <@U123> with their user ID. Do NOT append a display name after a pipe: Slack renders <@U123\|Name> as literal text, not a mention. |
| `blocks` | `string` | No | JSON array of Block Kit blocks for rich message layouts. Example: [{"type":"section","text":{"type":"mrkdwn","text":"Hello from Pipedream"}}]. |
| `threadTs` | `string` | No | The ts of a parent message to reply to. If provided, the message is posted as a threaded reply. |
| `replyBroadcast` | `boolean` | No | When replying to a thread, set to true to also post the reply to the channel. |
| `unfurlLinks` | `boolean` | No | Enable unfurling of text-based content (URLs). |
| `unfurlMedia` | `boolean` | No | Enable unfurling of media content. |
| `mrkdwn` | `boolean` | No | Set to false to disable Slack mrkdwn parsing. |
| `sendAsBot` | `boolean` | No | Set to true to post the message as the Slack app's bot user instead of the authenticated user. The app is added to the channel automatically if it is not already a member (not possible for DMs). The bot cannot DM a user who has not opened its Messages tab. Defaults to false (posts as the authenticated user). |

## Run it

**MCP**

```ts
import { Client } from "@modelcontextprotocol/sdk/client/index.js"
import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js"
import { PipedreamClient } from "@pipedream/sdk"

const pd = new PipedreamClient({
  projectId: process.env.PIPEDREAM_PROJECT_ID!,
  clientId: process.env.PIPEDREAM_CLIENT_ID!,
  clientSecret: process.env.PIPEDREAM_CLIENT_SECRET!,
  projectEnvironment: "production",
})

const accessToken = await pd.rawAccessToken

const transport = new StreamableHTTPClientTransport(
  new URL("https://remote.mcp.pipedream.net/v3"),
  {
    requestInit: {
      headers: {
        Authorization: `Bearer ${accessToken}`,
        "x-pd-project-id": process.env.PIPEDREAM_PROJECT_ID!,
        "x-pd-environment": "production",
        "x-pd-external-user-id": "{external_user_id}", // any stable ID for this user in your system
        "x-pd-app-slug": "slack_v2",
      },
    },
  },
)

const mcp = new Client({ name: "my-agent", version: "1.0.0" })
await mcp.connect(transport)

const { tools } = await mcp.listTools()

// listTools() hands your model this tool's input schema, so it can
// fill the arguments itself:
const result = await mcp.callTool({
  name: "slack_v2-post-message",
  arguments: {
    channel: "Channel",
    text: "Text",
  },
})
```

**TypeScript**

```ts
import { PipedreamClient } from "@pipedream/sdk"

const pd = new PipedreamClient({
  projectId: process.env.PIPEDREAM_PROJECT_ID!,
  clientId: process.env.PIPEDREAM_CLIENT_ID!,
  clientSecret: process.env.PIPEDREAM_CLIENT_SECRET!,
  projectEnvironment: "production",
})

const result = await pd.actions.run({
  id: "slack_v2-post-message",
  externalUserId: "{external_user_id}", // any stable ID for this user in your system
  configuredProps: {
    slack_v2: { authProvisionId: "apn_xxxxxxx" },
    channel: "Channel",
    text: "Text",
  },
})

console.log(result)
```

**cURL**

```bash
curl -X POST https://api.pipedream.com/v1/connect/{project_id}/actions/run \
  -H "Content-Type: application/json" \
  -H "X-PD-Environment: production" \
  -H "Authorization: Bearer {access_token}" \
  -d '{
    "external_user_id": "{external_user_id}",
    "id": "slack_v2-post-message",
    "configured_props": {
      "slack_v2": { "authProvisionId": "apn_xxxxxxx" },
      "channel": "Channel",
      "text": "Text"
    }
  }'
```

---

- App: https://pipedream.com/apps/slack-v2.md · All apps: https://pipedream.com/apps
