Servers that take a channel as a parameter let a model post an outage alert into the general channel by fumbling one string; naming a separate tool per destination makes that a different call rather than a bad argument. The scope is one direction only — this posts, it does not read Slack — and because it runs on webhooks there is no OAuth app to install, just a URL per channel that you can revoke individually.
A Node.js MCP server that posts to Slack through incoming webhooks. It builds its tool list from your config: every channel you list becomes its own tool, so the model picks the destination by choosing the tool rather than by passing a channel name it might get wrong.
- One tool per configured channel, named after the key you used — configure channels called general, notifications and alerts and you get `slack_notify_general`, `slack_notify_notifications` and `slack_notify_alerts`
- A required `message` carrying the body of the notification
- An optional `title`, rendered in bold above the message
- An optional `color` for the message sidebar, choosing between good for green, warning for yellow and danger for red — so a failure looks different from a completion at a glance
A Slack workspace where you can create incoming webhooks, and one webhook URL per channel you want to reach — created under Apps → Manage → Custom Integrations → Incoming Webhooks. Those URLs go in a `config.json` in the project directory, copied from the bundled example, each with a display name. Node.js and npm. There is no package to install: clone, `npm install`, and register `index.js` with `node` in your client config.
