Post to Slack
Let your AI post to Slack without ever seeing the bot token.
Deliver a message to a Slack channel through a signed FlurryPORT pipe. The bot token lives server-side; the agent posts a simple intent and gets a receipt.
The credential never enters the model context: it lives in the FlurryPORT secret store, deliveries are signed server-side, and every send returns a receipt your agent can quote.
What this is
Your AI posts to a Slack channel without ever seeing the bot token. It sends a simple intent (the text, optionally a channel override) through a signed FlurryPORT pipe; the platform holds the bot token server-side, adds it at delivery, and hands the AI a receipt with Slack's answer.Setup in two steps
- Slack side. Create a Slack app, add the
chat:writescope under OAuth and permissions, install it to your workspace, and copy the bot token. Invite the bot to the channel it should post to. - FlurryPORT side. Your AI requests secret setup and FlurryPORT emails you a secure page. You paste the token there, in your browser. The AI never sees it, and the pipe goes live.
Credential custody
The token is stored encrypted, resolved server-side at the moment of delivery, and scrubbed from stored responses if Slack ever echoes it back. Rotating it is a paste on the same page, no AI involved.What to expect
Delivery receipts carry Slack's real response. Slack answers 200 withok:false on channel problems, so the receipt body, not the status code, is the truth; your AI reads it and tells you what happened in plain words.Install with your agent
npx flurryport mcp
Point your agent at the FlurryPORT MCP server (npx flurryport mcp) and ask it for the flurryport:slack-post recipe. Works from AI clients that can run a local process: desktop apps and terminal agents. Web-only chat clients cannot reach a local MCP server; open a desktop client instead.
Tools your agent gains
flry_slack_post- Post a message to the configured Slack channel through the signed pipe. Input: text (required), channel (optional override).
Setup walkthrough
SLACK_BOT_TOKEN: Create a Slack app, add the chat:write scope under OAuth & Permissions, install to your workspace, copy the bot token (xoxb-). Paste it in the FlurryPORT secret page this setup links to; the agent never sees it.
Intent schema
{
"type": "object",
"required": [
"text"
],
"properties": {
"text": {
"type": "string",
"maxLength": 4000
},
"channel": {
"type": "string",
"description": "Channel ID or name; omit when the install fixed one."
}
}
}Install-time parameters
channel- install-time: Default channel for this install; runtime intent.channel overrides when present.
Transformation
{ "channel": $body.channel ? $body.channel : $install.channel, "text": $body.text }Delivery target
POST https://slack.com/api/chat.postMessage
Placeholders like $secrets.NAME resolve server-side at delivery, never in the agent.
Gotchas
- chat.postMessage returns 200 with ok:false on channel errors; the receipt body carries the Slack error string, so read the body, not the status.
- The bot must be invited to the channel it posts to; not_in_channel is the error that says so.
Where this fits
Related recipes
Let your AI post to Discord through a channel webhook the model never sees.
Send Telegram messages from your AI; the bot token stays on the server.
Let your AI add records to an Airtable table; the token stays server-side.
Create and update Azure DevOps work items in one batched pipe: priority, state, tags, and sprint included.
Query Azure DevOps work items with WIQL and read the matching ids back, without your AI ever holding the PAT.
Read fields for a batch of Azure DevOps work items by id: title, state, tags, priority, iteration.