Slack-MCP
A Message Control Protocol server that integrates with Slack to provide channel management, messaging capabilities, and log monitoring across multiple servers, enabling teams to share logs and receive automated alerts in Slack channels.
README Documentation
slack-mcp
MCP server for Slack with log monitoring capabilities
🚀 Features
Core Slack Integration
- Channel Management: Join channels and retrieve message history
- Messaging: Post messages and threaded replies
- Commands: Execute Slack slash commands
- Reactions: Add emoji reactions to messages
- Authentication: Verify identity and permissions
Log Monitoring & Team Collaboration
- Server Log Reading: Access logs from any MCP server or application
- Automated Alerts: Post log analysis to Slack channels
- Team Debugging: Share logs instantly with team members
- Multi-Server Monitoring: Monitor logs from multiple services
🏗️ Architecture
┌─────────────────────┐ ┌─────────────────────┐ ┌─────────────────────┐
│ User/Team │───▶│ Pipeline-Toolkit │───▶│ Slack-MCP-Logger │
│ (Natural Language) │ │ (AI Orchestrator) │ │ (Slack Specialist)│
└─────────────────────┘ └─────────────────────┘ └─────────────────────┘
▲ │
│ ▼
┌─────────────────────┐ ┌─────────────────────┐
│ Log Files │ │ Slack API │
│ • pipeline_bot.log │ │ • Channels │
│ • testing_farm.log │ │ • Messages │
│ • application.log │ │ • Reactions │
│ • error.log │ │ • Commands │
└─────────────────────┘ └─────────────────────┘
Workflow Example
- User: "Check recent pipeline logs and alert team if errors found"
- Pipeline-Toolkit AI: Understands intent, orchestrates actions
- Slack-MCP-Logger:
- Reads logs via
get_server_logs()
- Posts alerts via
post_message()
- Adds reactions via
add_reaction()
- Reads logs via
- Result: Team gets notified in Slack with actionable log data
🛠️ Built-in Tools
1. Channel Management
get_channel_history(channel_id: str) -> list[dict]
join_channel(channel_id: str, skip_log: bool = False) -> bool
2. Messaging
post_message(channel_id: str, message: str, thread_ts: str = "", skip_log: bool = False) -> bool
post_command(channel_id: str, command: str, text: str, skip_log: bool = False) -> bool
3. Reactions & Interactions
add_reaction(channel_id: str, message_ts: str, reaction: str) -> bool
4. Authentication
whoami() -> str
5. 🆕 Log Monitoring
get_server_logs(log_file_path: str, lines: int = 50) -> str
📋 Usage Examples
Log Monitoring & Team Alerts
# Read recent pipeline logs
logs = get_server_logs("logs/pipeline_bot.log", 100)
# Alert team with logs
post_message("C-DEV-TEAM", f"🚨 Pipeline Issues:\n{logs}")
# Mark for urgent attention
add_reaction("C-DEV-TEAM", message_ts, "rotating_light")
Automated Monitoring Workflow
# Check multiple log sources
pipeline_logs = get_server_logs("logs/pipeline_bot.log", 50)
error_logs = get_server_logs("/var/log/app/error.log", 30)
# Post to different channels based on content
if "ERROR" in pipeline_logs:
post_message("C-ALERTS", f"⚠️ Pipeline errors:\n{pipeline_logs}")
if "CRITICAL" in error_logs:
post_message("C-INCIDENTS", f"🚨 Critical app errors:\n{error_logs}")
Daily Team Updates
# Morning standup automation
daily_logs = get_server_logs("logs/pipeline_bot.log", 200)
post_message("C-STANDUP", f"☀️ Overnight activity summary:\n{daily_logs}")
🚀 Running with Podman or Docker
You can run the slack-mcp server in a container using Podman or Docker:
Example configuration for running with Podman:
{
"mcpServers": {
"slack": {
"command": "podman",
"args": [
"run",
"-i",
"--rm",
"-e", "SLACK_XOXC_TOKEN",
"-e", "SLACK_XOXD_TOKEN",
"-e", "MCP_TRANSPORT",
"-e", "LOGS_CHANNEL_ID",
"quay.io/redhat-ai-tools/slack-mcp"
],
"env": {
"SLACK_XOXC_TOKEN": "xoxc-...",
"SLACK_XOXD_TOKEN": "xoxd-...",
"MCP_TRANSPORT": "stdio",
"LOGS_CHANNEL_ID": "C7000000",
}
}
}
}
🌐 Running with non-stdio transport
To run the server with a non-stdio transport (such as SSE), set the MCP_TRANSPORT
environment variable to a value other than stdio
(e.g., sse
).
Example configuration to connect to a non-stdio MCP server:
{
"mcpServers": {
"slack": {
"url": "https://slack-mcp.example.com/sse",
"headers": {
"X-Slack-Web-Token": "xoxc-...",
"X-Slack-Cookie-Token": "xoxd-..."
}
}
}
}
🔐 Authentication
Extract your Slack XOXC and XOXD tokens easily using browser extensions or Selenium automation: https://github.com/maorfr/slack-token-extractor.
🔧 Environment Variables
SLACK_XOXC_TOKEN
: Slack web token (required)SLACK_XOXD_TOKEN
: Slack cookie token (required)MCP_TRANSPORT
: Transport mode (stdio
orsse
, default:stdio
)LOGS_CHANNEL_ID
: Channel ID for logging MCP operations (required)LOG_BASE_PATH
: Optional base path for log file access security
🤝 Integration with Pipeline-Toolkit
This MCP server works seamlessly with Pipeline-Toolkit to provide:
- Natural Language Processing: Ask questions in plain English
- Intelligent Tool Selection: AI chooses the right tools automatically
- Multi-Server Coordination: Monitor logs from multiple MCP servers
- Team Collaboration: Share insights and alerts through Slack
Example Integration
# In Pipeline-Toolkit
"Check recent logs and update the team if there are any errors"
# Results in:
# 1. get_server_logs("logs/pipeline_bot.log", 100)
# 2. AI analysis of log content
# 3. post_message("C-TEAM", error_summary) if issues found
# 4. add_reaction() for team attention
📊 Use Cases
- DevOps Monitoring: Automated log analysis and team alerts
- Incident Response: Quick log sharing and team coordination
- Daily Standups: Automated activity summaries
- Build Monitoring: Pipeline status updates and failure alerts
- Multi-Service Debugging: Centralized log access across services