Skip to main content
Version: 0.1.0

Webhook Server CLI Reference

The Slack Webhook Server provides a comprehensive command-line interface for starting and configuring both standalone and integrated server modes. This reference covers all available CLI options, usage patterns, and examples.

Basic Usage

The webhook server can be started using multiple execution methods:

# After installation via pip/uv/poetry
slack-webhook-server [OPTIONS]

Command Options

Server Mode Options

--integrated

Type: Flag
Default: False
Description: Enable integrated mode (webhook + MCP server combined).

# Standalone webhook server (default)
python -m slack_mcp.webhook

# Explicitly specify standalone mode
python -m slack_mcp.webhook --no-integrated

MCP Integration Options (Integrated Mode Only)

--mcp-transport

Type: Choice
Choices: sse, streamable-http
Default: sse
Description: MCP transport protocol (integrated mode only).

# Server-Sent Events (default for integrated mode)
python -m slack_mcp.webhook --integrated --mcp-transport sse

# Custom mount path for SSE
python -m slack_mcp.webhook \
--integrated \
--mcp-transport sse \
--mcp-mount-path /api/mcp

--mcp-mount-path

Type: String
Default: /mcp
Description: Mount path for MCP SSE endpoints (SSE transport only).

# Default mount path
python -m slack_mcp.webhook --integrated --mcp-mount-path /mcp

# Custom mount path
python -m slack_mcp.webhook --integrated --mcp-mount-path /api/v1/mcp

# Root mount path
python -m slack_mcp.webhook --integrated --mcp-mount-path /

Network Options

--host

Type: String
Default: 0.0.0.0
Description: Host interface to bind the server.

# Local development (localhost only)
python -m slack_mcp.webhook --host 127.0.0.1

# Specific IP address
python -m slack_mcp.webhook --host 192.168.1.100

--port

Type: Integer
Default: 3000
Range: 1-65535
Description: Port number for the webhook server.

# Default port
python -m slack_mcp.webhook --port 3000

# Custom port
python -m slack_mcp.webhook --port 8080

# Auto-assign available port
python -m slack_mcp.webhook --port 0

Authentication & Environment Options

Configuration Priority Order

When running the webhook server, configuration values are loaded in this priority order:

  1. .env file (HIGHEST PRIORITY) - Values in your .env file override everything
  2. CLI arguments (--slack-token) - Used as fallback if not set in .env file
  3. Environment variables - Already set environment variables (lowest priority)

This means your .env file values will always take precedence over CLI arguments.

--slack-token

Type: String
Default: None
Description: Slack bot token (fallback if not set in .env file or SLACK_BOT_TOKEN environment variable).

# CLI argument is used as fallback (if not in .env file)
python -m slack_mcp.webhook --slack-token "xoxb-your-token-here"

# Disable .env file loading to force CLI argument usage
python -m slack_mcp.webhook --slack-token "xoxb-your-token-here" --no-env-file

# Use .env file (recommended - highest priority)
# Create .env file with: SLACK_BOT_TOKEN=xoxb-your-token
python -m slack_mcp.webhook

--env-file

Type: String
Default: .env
Description: Path to environment file.

# Use default .env file
python -m slack_mcp.webhook

# Explicitly specify .env file
python -m slack_mcp.webhook --env-file .env

--no-env-file

Type: Flag
Default: False
Description: Disable automatic environment file loading.

# Disable .env file loading (use only system environment variables)
python -m slack_mcp.webhook --no-env-file

# Cloud deployment without .env files
python -m slack_mcp.webhook --no-env-file --host 0.0.0.0 --port ${PORT}

Logging & Debugging Options

--log-level

Type: String
Choices: DEBUG, INFO, WARNING, ERROR, CRITICAL (case-insensitive)
Default: INFO
Description: Sets the logging verbosity level. Accepts both uppercase and lowercase values (e.g., debug, DEBUG, Debug all work).

# Case-insensitive - all these work the same way
python -m slack_mcp.webhook --log-level debug
python -m slack_mcp.webhook --log-level DEBUG

# Development with integrated mode
python -m slack_mcp.webhook --integrated --log-level debug

Log Level Details:

  • DEBUG: Detailed diagnostic information. Use for development and troubleshooting.
  • INFO: General informational messages. Good for production monitoring.
  • WARNING: Warning messages for potentially problematic situations.
  • ERROR: Error messages for serious problems.
  • CRITICAL: Critical error messages for fatal problems.
Case-Insensitive Input

The --log-level option accepts any case variation (debug, DEBUG, Debug, etc.), making it more user-friendly and compatible with different scripting conventions.

--log-file

Type: String
Default: None (console only)
Description: Path to log file. When specified, logs are written to both console and file with automatic rotation.

slack-webhook-server --log-file /var/log/slack-webhook.log

--log-dir

Type: String
Default: logs
Description: Directory for log files when --log-file is a relative path.

slack-webhook-server --log-dir /var/log/slack-webhook

--log-format

Type: String
Default: %(asctime)s [%(levelname)8s] %(name)s: %(message)s
Description: Custom log message format using Python logging format syntax.

slack-webhook-server --log-format "%(asctime)s %(levelname)s: %(message)s"
Logging Configuration

For detailed logging configuration including file rotation, environment variables, and programmatic usage, see the Logging Configuration Guide.

--retry

Type: Integer
Default: 3
Range: 0-10
Description: Maximum number of retry attempts for failed requests.

# Default retry attempts
python -m slack_mcp.webhook --retry 3

# No retries (fail fast)
python -m slack_mcp.webhook --retry 0

# High retry for unstable networks
python -m slack_mcp.webhook --retry 5

Usage Examples

Standalone Mode Examples

# Simple standalone webhook server
python -m slack_mcp.webhook

# Explicit configuration
python -m slack_mcp.webhook \
--host 0.0.0.0 \
--port 3000 \
--log-level info

Integrated Mode Examples

# Simple integrated server (webhook + MCP)
python -m slack_mcp.webhook --integrated

# Explicit SSE transport
python -m slack_mcp.webhook \
--integrated \
--mcp-transport sse \
--mcp-mount-path /mcp

Container Deployment Examples

# Docker container configuration
python -m slack_mcp.webhook \
--host 0.0.0.0 \
--port 3000 \
--log-level info \
--no-env-file

# Integrated mode in container
python -m slack_mcp.webhook \
--integrated \
--mcp-transport sse \
--host 0.0.0.0 \
--port 3000 \
--no-env-file

Environment Variable Override

CLI options can be overridden by environment variables:

CLI OptionEnvironment VariableExample
--hostHOSTexport HOST=0.0.0.0
--portPORTexport PORT=8080
--log-levelLOG_LEVELexport LOG_LEVEL=DEBUG
--mcp-transportMCP_TRANSPORTexport MCP_TRANSPORT=sse
--mcp-mount-pathMCP_MOUNT_PATHexport MCP_MOUNT_PATH=/api
--retryRETRY_ATTEMPTSexport RETRY_ATTEMPTS=5

Precedence: CLI arguments override environment variables, which override defaults.

# Environment variable with CLI override
export PORT=8080
export LOG_LEVEL=WARNING

# This will use port 3000 and DEBUG level (CLI overrides)
python -m slack_mcp.webhook --port 3000 --log-level DEBUG

Configuration Scripts

Startup Script Examples

Development Script (start-webhook-dev.sh)

#!/bin/bash
# start-webhook-dev.sh

export SLACK_BOT_TOKEN="xoxb-your-dev-token"
export SLACK_SIGNING_SECRET="your-dev-signing-secret"

echo "Starting webhook server in development mode..."
python -m slack_mcp.webhook \
--host 127.0.0.1 \
--port 3000 \
--log-level debug \
--env-file .env.development

Production Script (start-webhook-prod.sh)

#!/bin/bash
# start-webhook-prod.sh

# Load environment variables
source .env.production

echo "Starting webhook server in production mode..."
python -m slack_mcp.webhook \
--host ${HOST:-0.0.0.0} \
--port ${PORT:-8080} \
--log-level ${LOG_LEVEL:-INFO} \
--retry ${RETRY_ATTEMPTS:-5}

Integrated Mode Script (start-integrated.sh)

#!/bin/bash
# start-integrated.sh

source .env.production

echo "Starting integrated server (webhook + MCP)..."
python -m slack_mcp.webhook \
--integrated \
--mcp-transport ${MCP_TRANSPORT:-sse} \
--mcp-mount-path ${MCP_MOUNT_PATH:-/mcp} \
--host ${HOST:-0.0.0.0} \
--port ${PORT:-8080} \
--log-level ${LOG_LEVEL:-INFO}

Process Management

Using systemd

Create a systemd service (/etc/systemd/system/webhook-server.service):

[Unit]
Description=Slack Webhook Server
After=network.target

[Service]
Type=simple
User=webhook
WorkingDirectory=/opt/slack-webhook-server
EnvironmentFile=/opt/slack-webhook-server/.env.production
ExecStart=/opt/slack-webhook-server/venv/bin/python -m slack_mcp.webhook \
--host 0.0.0.0 \
--port 8080 \
--log-level INFO
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target

Help and Version Information

Display Help

# Show all available options
slack-webhook-server --help

# Show version information
slack-webhook-server --version

Troubleshooting CLI Issues

Common Problems

1. Port Already in Use

# Error: Address already in use
python -m slack_mcp.webhook --port 3000

# Solution: Find and kill process or use different port
lsof -ti:3000 | xargs kill -9
# OR
python -m slack_mcp.webhook --port 3001

2. Permission Denied

# Error: Permission denied on port 80
python -m slack_mcp.webhook --port 80

# Solution: Use non-privileged port
python -m slack_mcp.webhook --port 8080

3. Missing Environment Variables

# Error: Missing SLACK_BOT_TOKEN
python -m slack_mcp.webhook

# Solution: Set required environment variables
export SLACK_BOT_TOKEN="xoxb-your-token"
export SLACK_SIGNING_SECRET="your-secret"
python -m slack_mcp.webhook

Debug Mode

Enable maximum verbosity for troubleshooting:

# Maximum debug output
python -m slack_mcp.webhook \
--log-level debug \
--retry 0

# Debug integrated mode
python -m slack_mcp.webhook \
--integrated \
--mcp-transport sse \
--log-level debug

For comprehensive webhook server setup: