Docker
Run MCP Server Mattermost in a Docker container.
Quick Start
docker pull legard/mcp-server-mattermost
Stdio Mode (Default)
Standard mode for MCP clients like Claude Desktop:
docker run -i --rm \
-e MATTERMOST_URL=https://your-mattermost.com \
-e MATTERMOST_TOKEN=your-token \
legard/mcp-server-mattermost
Claude Desktop Configuration
{
"mcpServers": {
"mattermost": {
"command": "docker",
"args": [
"run", "-i", "--rm",
"-e", "MATTERMOST_URL=https://your-mattermost.com",
"-e", "MATTERMOST_TOKEN=your-token",
"legard/mcp-server-mattermost"
]
}
}
}
HTTP Mode (Production)
For production deployments with health checks:
docker run -d -p 8000:8000 \
-e MCP_TRANSPORT=http \
-e MCP_HOST=0.0.0.0 \
-e MATTERMOST_URL=https://your-mattermost.com \
-e MATTERMOST_TOKEN=your-token \
legard/mcp-server-mattermost
Health check endpoint:
curl http://localhost:8000/health
HTTP Mode with Mattermost OAuth Proxy
For production deployments where each user signs in with their own Mattermost
identity, run with MATTERMOST_AUTH_MODE=oauth_proxy:
docker run -d -p 8000:8000 \
-e MCP_TRANSPORT=http \
-e MCP_HOST=0.0.0.0 \
-e MATTERMOST_AUTH_MODE=oauth_proxy \
-e MATTERMOST_URL=https://mattermost.internal \
-e MATTERMOST_OAUTH_MATTERMOST_PUBLIC_URL=https://mattermost.example.com \
-e MATTERMOST_OAUTH_MCP_PUBLIC_URL=https://mcp.example.com \
-e MATTERMOST_OAUTH_CLIENT_ID=your-mattermost-oauth-app-id \
-e MATTERMOST_OAUTH_CLIENT_TYPE=confidential \
-e MATTERMOST_OAUTH_CLIENT_SECRET=your-mattermost-oauth-app-secret \
legard/mcp-server-mattermost
See Authentication / oauth_proxy for Mattermost OAuth App registration, the public-client variant, and MCP client connection.
Environment Variables
For authentication-related variables (MATTERMOST_AUTH_MODE, MATTERMOST_TOKEN,
all MATTERMOST_OAUTH_*), see Authentication.
Mattermost Settings
| Variable | Required | Default | Description |
|---|---|---|---|
MATTERMOST_URL |
Yes | — | Mattermost server URL |
MATTERMOST_TIMEOUT |
No | 30 | Request timeout in seconds |
MATTERMOST_MAX_RETRIES |
No | 3 | Max retry attempts |
MATTERMOST_VERIFY_SSL |
No | true | Verify SSL certificates |
MATTERMOST_EXTRA_CA_CERTS |
No | — | Path to mounted PEM CAs appended to the default trust store |
MATTERMOST_LOG_LEVEL |
No | INFO | Logging level |
MATTERMOST_LOG_FORMAT |
No | json | Log format: json or text |
For private or corporate CAs, mount the PEM bundle and point
MATTERMOST_EXTRA_CA_CERTS at the in-container path:
docker run -i --rm \
-v /etc/ssl/certs/corporate-ca.pem:/certs/corporate-ca.pem:ro \
-e MATTERMOST_URL=https://your-mattermost.com \
-e MATTERMOST_TOKEN=your-token \
-e MATTERMOST_EXTRA_CA_CERTS=/certs/corporate-ca.pem \
legard/mcp-server-mattermost
Transport Settings
| Variable | Default | Description |
|---|---|---|
MCP_TRANSPORT |
stdio |
Transport mode: stdio or http |
MCP_HOST |
127.0.0.1 |
HTTP bind host (use 0.0.0.0 in Docker) |
MCP_PORT |
8000 |
HTTP port |
Healthcheck Behavior
The Dockerfile includes a healthcheck that probes /health endpoint. This only works
in HTTP mode (MCP_TRANSPORT=http).
In stdio mode:
- Healthcheck fails (no HTTP server running)
- Container status shows
unhealthy - This is harmless for normal
docker run— the container works fine
When this becomes a problem:
- Docker Compose with
restart: on-failureorrestart: always - Docker Swarm (restarts unhealthy containers automatically)
Solution: Add --no-healthcheck flag:
docker run -i --rm --no-healthcheck \
-e MATTERMOST_URL=https://your-mattermost.com \
-e MATTERMOST_TOKEN=your-token \
legard/mcp-server-mattermost
Or override in compose file:
services:
mattermost-mcp:
image: legard/mcp-server-mattermost
healthcheck:
disable: true
Build from Source
git clone https://github.com/cloud-ru-tech/mcp-server-mattermost
cd mcp-server-mattermost
docker build -t mcp-server-mattermost .