Slack Message Sender
by a-g-e-n-t-s
README.md
# MCP_Slack_Server
MCP Server that provides Slack message sending capabilities for Claude Desktop and KADI agents.
## Overview
This server is part of the KADI Slack bot architecture. It:
1. Provides stateless message sending tools
2. Resolves channel names to IDs automatically
3. Supports both direct messages and thread replies
4. Works with Claude Desktop and Agent_TypeScript via KADI broker
## Architecture
```
Claude Desktop / Agent_TypeScript
↓
KADI Broker (MCP Upstream)
↓
MCP_Slack_Server (this project)
↓
Slack Web API
↓
Slack Channel
```
## Installation
```bash
cd C:\p4\Personal\SD\MCP_Slack_Server
npm install
```
## Configuration
Create `.env` file:
```env
SLACK_BOT_TOKEN=xoxb-your-bot-token
MCP_LOG_LEVEL=info
```
### Required Slack Scopes
- `chat:write` - Send messages to channels
- `chat:write.public` - Send messages to public channels without joining
- `channels:read` - List and resolve channel names
- `groups:read` - Access private channels (if needed)
## Usage
### Development Mode
```bash
npm run dev
```
### Production Mode
```bash
npm run build
npm start
```
### As MCP Upstream (via KADI Broker)
Add to `kadi-broker/mcp-upstreams.json`:
```json
{
"id": "slack-server",
"name": "Slack Message Sender",
"type": "stdio",
"prefix": "slack",
"networks": ["global", "slack"],
"stdio": {
"command": "node",
"args": ["C:/p4/Personal/SD/MCP_Slack_Server/dist/index.js"],
"env": {
"SLACK_BOT_TOKEN": "xoxb-..."
}
}
}
```
## Tools
### `send_message`
Send a message to a Slack channel.
**Input:**
```json
{
"channel": "#general", // or "C09T6RU41HP"
"text": "Hello from Claude!",
"thread_ts": "1234567890.123456" // optional
}
```
**Output:**
```json
{
"success": true,
"message": "Message sent successfully",
"timestamp": "1234567890.123456",
"channel": "C09T6RU41HP"
}
```
### `send_reply`
Reply to a message in a thread.
**Input:**
```json
{
"channel": "C09T6RU41HP",
"thread_ts": "1234567890.123456",
"text": "This is a threaded reply"
}
```
**Output:**
```json
{
"success": true,
"message": "Reply sent successfully",
"timestamp": "1234567890.654321",
"channel": "C09T6RU41HP",
"thread_ts": "1234567890.123456"
}
```
## Integration Examples
### From Claude Desktop
```
Send a message to #general saying "Hello team!"
```
### From Agent_TypeScript
```typescript
await client.getBrokerProtocol().invokeTool({
targetAgent: 'slack-server',
toolName: 'slack_send_message',
toolInput: {
channel: '#general',
text: 'Hello from Agent_TypeScript!'
},
timeout: 10000
});
```
### Reply to Slack Mention
```typescript
// After getting mention from MCP_Slack_Client
const mention = mentions[0];
await client.getBrokerProtocol().invokeTool({
targetAgent: 'slack-server',
toolName: 'slack_send_reply',
toolInput: {
channel: mention.channel,
thread_ts: mention.thread_ts,
text: claudeResponse
},
timeout: 10000
});
```
## License
MIT
TDQS
A3.6/5.0
Scored across 2 tools
Disambiguation5/5
The two tools have clearly distinct purposes: one sends a new message or starts a thread, the other replies within a thread. No ambiguity.
Naming Consistency5/5
Both tools follow a consistent 'send_' prefix and verb_noun pattern ('send_message', 'send_reply'), making the naming predictable.
Tool Count3/5
With only 2 tools, the server is very focused. While this is appropriate for a minimal message sender, it feels slightly thin for general Slack interaction.
Completeness3/5
The tool set covers sending and replying, but lacks other common Slack operations (e.g., reading, editing, deleting messages), leaving notable gaps.
Maintenance
ActivityStale
ResponsivenessNo issues