Skip to main content
Version: Next

MCP Server CLI Reference

The Slack MCP Server provides a comprehensive command-line interface for starting and configuring the server. This reference covers all available CLI options, usage patterns, and examples.

Basic Usage​

The MCP server can be started using multiple execution methods:

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

Command Options​

Transport Options​

--transport​

Type: Choice
Choices: stdio, sse, streamable-http
Default: stdio
Description: Specifies the transport protocol for MCP communication.

slack-mcp-server --transport stdio
slack-mcp-server --transport sse
slack-mcp-server --transport streamable-http

Transport Details:

  • stdio: Communicates via standard input/output streams. Best for desktop applications and CLI integrations.
  • sse: Server-Sent Events over HTTP. Ideal for web applications and real-time streaming.
  • streamable-http: HTTP-based streaming protocol. Suitable for REST API integrations and microservices.

Network Options​

--host​

Type: String
Default: 127.0.0.1
Description: Host interface to bind the server (HTTP transports only).

slack-mcp-server --transport sse --host 127.0.0.1
slack-mcp-server --transport sse --host 0.0.0.0
slack-mcp-server --transport sse --host 192.168.1.100

Security Note: Use 0.0.0.0 only in containerized environments or when you need external access. For local development, prefer 127.0.0.1.

--port​

Type: Integer
Default: 3001
Range: 1-65535
Description: Port number for HTTP transports.

slack-mcp-server --transport sse --port 3001
slack-mcp-server --transport sse --port 8080
slack-mcp-server --transport sse --port 0 # Auto-assign available port

--mount-path​

Type: String
Default: /mcp
Description: Mount path for SSE transport endpoints.

slack-mcp-server --transport sse --mount-path /mcp
slack-mcp-server --transport sse --mount-path /api/v1/mcp
slack-mcp-server --transport sse --mount-path /

Logging 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
slack-mcp-server --log-level debug
slack-mcp-server --log-level DEBUG
slack-mcp-server --log-level info
slack-mcp-server --log-level ERROR

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-mcp-server --log-file /var/log/slack-mcp.log

--log-dir​

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

slack-mcp-server --log-dir /var/log/slack-mcp

--log-format​

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

slack-mcp-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.

Authentication & Environment Options​

Configuration Priority Order

When running the MCP 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)
slack-mcp-server --slack-token "xoxb-your-token-here"

# Disable .env file loading to force CLI argument usage
slack-mcp-server --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
slack-mcp-server

--env-file​

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

# Use default .env file
slack-mcp-server

# Specify custom environment file
slack-mcp-server --env-file .env.production
slack-mcp-server --env-file /path/to/.env.staging

--no-env-file​

Type: Flag
Default: False
Description: Disable automatic loading from .env file. Useful when relying only on system environment variables or CLI arguments.

# Disable .env file loading
slack-mcp-server --no-env-file --slack-token "xoxb-your-token"

# Use only system environment variables
export SLACK_BOT_TOKEN="xoxb-your-token"
slack-mcp-server --no-env-file

Connection Options​

--timeout​

Type: Integer
Default: 30
Unit: Seconds
Description: Request timeout for Slack API calls.

slack-mcp-server --timeout 30
slack-mcp-server --timeout 15
slack-mcp-server --timeout 60

--max-retries​

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

slack-mcp-server --max-retries 3
slack-mcp-server --max-retries 0
slack-mcp-server --max-retries 5

Usage Examples​

Development Environment​

# Recommended for development
slack-mcp-server \
--transport stdio \
--log-level DEBUG

slack-mcp-server \
--transport sse \
--host 127.0.0.1 \
--port 3001 \
--log-level DEBUG

Production Environment​

# Recommended for production deployments
slack-mcp-server \
--transport sse \
--host 0.0.0.0 \
--port 3001 \
--log-level INFO

slack-mcp-server \
--transport streamable-http \
--host 0.0.0.0 \
--port 8080 \
--log-level WARNING

Testing Configurations​

# Quick testing configurations
slack-mcp-server --log-level DEBUG

slack-mcp-server \
--transport sse \
--port 0 \
--log-level DEBUG

slack-mcp-server \
--transport sse \
--mount-path /test/mcp \
--log-level DEBUG

Container Deployments​

# Docker container configuration
slack-mcp-server \
--transport sse \
--host 0.0.0.0 \
--port 3001 \
--log-level INFO

# Kubernetes pod configuration
slack-mcp-server \
--transport streamable-http \
--host 0.0.0.0 \
--port ${PORT:-3001} \
--log-level ${LOG_LEVEL:-INFO}

Environment Variable Override​

CLI options can be overridden by environment variables:

CLI OptionEnvironment VariableExample
--transportMCP_TRANSPORTexport MCP_TRANSPORT=sse
--hostMCP_HOSTexport MCP_HOST=0.0.0.0
--portMCP_PORTexport MCP_PORT=8080
--mount-pathMCP_MOUNT_PATHexport MCP_MOUNT_PATH=/api
--log-levelLOG_LEVELexport LOG_LEVEL=DEBUG
--timeoutMCP_TIMEOUTexport MCP_TIMEOUT=60
--max-retriesMCP_MAX_RETRIESexport MCP_MAX_RETRIES=5

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

# Environment variable with CLI override
export MCP_TRANSPORT=sse
export MCP_PORT=8080

# This will use stdio transport and port 3001 (CLI overrides)
slack-mcp-server --transport stdio --port 3001

Configuration Scripts​

Startup Script Examples​

Create reusable startup scripts for different environments:

Development Script (start-dev.sh)​

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

export SLACK_BOT_TOKEN="xoxb-your-dev-token"
export MCP_TRANSPORT="stdio"
export LOG_LEVEL="DEBUG"

echo "Starting MCP server in development mode..."
slack-mcp-server \
--log-level DEBUG \
--timeout 15 \
--max-retries 1

Production Script (start-prod.sh)​

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

# Load environment variables
source .env.production

echo "Starting MCP server in production mode..."
slack-mcp-server \
--transport ${MCP_TRANSPORT:-sse} \
--host ${MCP_HOST:-0.0.0.0} \
--port ${MCP_PORT:-3001} \
--log-level ${LOG_LEVEL:-INFO} \
--timeout ${MCP_TIMEOUT:-60} \
--max-retries ${MCP_MAX_RETRIES:-5}

Testing Script (start-test.sh)​

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

export SLACK_BOT_TOKEN="xoxb-test-token"

echo "Starting MCP server in test mode..."
slack-mcp-server \
--transport sse \
--port 0 \
--log-level DEBUG \
--timeout 10 \
--max-retries 0

Process Management​

Using systemd​

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

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

[Service]
Type=simple
User=mcp
WorkingDirectory=/opt/slack-mcp-server
EnvironmentFile=/opt/slack-mcp-server/.env.production
ExecStart=/opt/slack-mcp-server/venv/bin/slack-mcp-server \
--transport sse \
--host 0.0.0.0 \
--port 3001 \
--log-level INFO
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target

Using supervisor​

Create supervisor configuration (/etc/supervisor/conf.d/mcp-server.conf):

[program:mcp-server]
command=/opt/slack-mcp-server/venv/bin/slack-mcp-server --transport sse --host 0.0.0.0 --port 3001
directory=/opt/slack-mcp-server
environment=SLACK_BOT_TOKEN="xoxb-token",MCP_TRANSPORT="sse",LOG_LEVEL="INFO"
user=mcp
autostart=true
autorestart=true
redirect_stderr=true
stdout_logfile=/var/log/mcp-server.log

Help and Version Information​

Display Help​

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

# Show version information
slack-mcp-server --version

Built-in Validation​

The CLI performs automatic validation:

# Invalid transport (will show error)
slack-mcp-server --transport invalid

# Invalid port range (will show error)
slack-mcp-server --transport sse --port 70000

# Invalid log level (will show error)
slack-mcp-server --log-level INVALID

Troubleshooting CLI Issues​

Common Problems​

1. Permission Denied​

# Error: Permission denied on port 80
slack-mcp-server --transport sse --port 80

# Solution: Use non-privileged port or run with sudo
slack-mcp-server --transport sse --port 8080

2. Port Already in Use​

# Error: Address already in use
slack-mcp-server --transport sse --port 3001

# Solution: Find and kill process or use different port
lsof -ti:3001 | xargs kill -9
# OR
slack-mcp-server --transport sse --port 3002

3. Invalid Configuration​

# Error: Invalid transport specified
slack-mcp-server --transport http

# Solution: Use valid transport option
slack-mcp-server --transport sse

Debug Mode​

Enable maximum verbosity for troubleshooting:

# Maximum debug output
slack-mcp-server \
--log-level DEBUG \
--timeout 5 \
--max-retries 0

Configuration Verification​

# Test configuration without starting server
slack-mcp-server --help > /dev/null 2>&1 && echo '✅ CLI configuration is valid' || echo '❌ CLI configuration error'

For more detailed configuration options, see Environment Configuration. For deployment examples using these CLI options, see Deployment Guide.