mcp-office-tools/docker-compose.yml
Ryan Malloy 322ed78427
Some checks failed
Test Dashboard / test-and-dashboard (push) Has been cancelled
Add Docker deployment with streamable-http transport for hosted MCP
- Add Dockerfile with multi-stage build using uv
- Add docker-compose.yml with caddy-docker-proxy labels for /mcp endpoint
- Add .env.example for deployment configuration
- Update Makefile with docker-* targets
- Update server.py to support MCP_TRANSPORT env var:
  - 'stdio' (default): Local CLI usage with Claude Code
  - 'streamable-http': Hosted HTTP mode behind reverse proxy

Hosted server will be available at:
  https://mcwaddams.supported.systems/mcp
2026-01-11 14:27:50 -07:00

50 lines
1.5 KiB
YAML

# mcwaddams MCP Server - Docker Compose
# "I could set the building on fire..."
services:
mcwaddams:
build:
context: .
dockerfile: Dockerfile
target: production
container_name: mcwaddams-mcp
restart: unless-stopped
environment:
- MCP_TRANSPORT=streamable-http
- MCP_HOST=0.0.0.0
- MCP_PORT=8000
- DEBUG=${DEBUG:-false}
- OFFICE_TEMP_DIR=/tmp/mcwaddams
volumes:
# Temp directory for document processing
- mcwaddams-temp:/tmp/mcwaddams
networks:
- caddy
labels:
# Caddy-docker-proxy labels for /mcp endpoint
caddy: ${MCWADDAMS_HOST:-mcwaddams.supported.systems}
caddy.@mcp.path: /mcp/*
caddy.@mcp.path_strip: /mcp
caddy.handle: "@mcp"
caddy.handle.reverse_proxy: "{{upstreams 8000}}"
caddy.handle.reverse_proxy.flush_interval: "-1"
caddy.handle.reverse_proxy.transport: "http"
caddy.handle.reverse_proxy.transport.read_timeout: "0"
caddy.handle.reverse_proxy.transport.write_timeout: "0"
caddy.handle.reverse_proxy.stream_timeout: "24h"
caddy.handle.reverse_proxy.header_up.Connection: "{http.request.header.Connection}"
caddy.handle.reverse_proxy.header_up.Upgrade: "{http.request.header.Upgrade}"
healthcheck:
test: ["CMD", "python", "-c", "import urllib.request; urllib.request.urlopen('http://127.0.0.1:8000/health')"]
interval: 30s
timeout: 10s
retries: 3
start_period: 10s
volumes:
mcwaddams-temp:
networks:
caddy:
external: true