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.