mcp-atlassian Docker & Self-Hosted Deployment

GitHub

MCP server for Atlassian tools (Confluence, Jira)

5,542 stars Python Python 1 file ยท ~1,509 tokens #atlassian#confluence#jira#mcp
RAW Compose
1. Pull Image (DOCKERHUB) docker pull library/postgres
2. Docker Run (1-Click Launch) docker run -d --name mcp-atlassian -p 8080:8080 --restart always postgres:15-alpine
3. Podman Run podman run -d --name mcp-atlassian -p 8080:8080 --restart always postgres:15-alpine
4. Skopeo Inspect (Zero-Pull Manifest) skopeo inspect docker://docker.io/library/postgres:15-alpine
5. ORAS Pull (OCI Artifact) oras pull postgres:15-alpine
6. Compose Deployment docker compose up -d
tests/e2e/docker/docker-compose.yml
Download .yml
services:
  jira-db:
    image: postgres:15-alpine
    environment:
      POSTGRES_DB: jira
      POSTGRES_USER: jira
      POSTGRES_PASSWORD: ${JIRA_DB_PASSWORD}
      POSTGRES_INITDB_ARGS: "--lc-collate=C --lc-ctype=C"
    volumes:
      - jira-db-data:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U jira"]
      interval: 10s
      timeout: 5s
      retries: 5

  confluence-db:
    image: postgres:15-alpine
    environment:
      POSTGRES_DB: confluence
      POSTGRES_USER: confluence
      POSTGRES_PASSWORD: ${CONFLUENCE_DB_PASSWORD}
    volumes:
      - confluence-db-data:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U confluence"]
      interval: 10s
      timeout: 5s
      retries: 5

  jira:
    image: atlassian/jira-software:${JIRA_VERSION}
    ports:
      - "8080:8080"
    environment:
      ATL_JDBC_URL: jdbc:postgresql://jira-db:5432/jira
      ATL_JDBC_USER: jira
      ATL_JDBC_PASSWORD: ${JIRA_DB_PASSWORD}
      ATL_DB_DRIVER: org.postgresql.Driver
      ATL_DB_TYPE: postgres72
      JVM_MINIMUM_MEMORY: 1024m
      JVM_MAXIMUM_MEMORY: 2048m
      CLUSTERED: "false"
    volumes:
      - jira-data:/var/atlassian/application-data/jira
    depends_on:
      jira-db:
        condition: service_healthy
    healthcheck:
      test: ["CMD-SHELL", "curl -f http://localhost:8080/status || exit 1"]
      interval: 30s
      timeout: 10s
      retries: 20
      start_period: 120s

  confluence:
    image: atlassian/confluence:${CONFLUENCE_VERSION}
    ports:
      - "8090:8090"
    environment:
      ATL_JDBC_URL: jdbc:postgresql://confluence-db:5432/confluence
      ATL_JDBC_USER: confluence
      ATL_JDBC_PASSWORD: ${CONFLUENCE_DB_PASSWORD}
      ATL_DB_DRIVER: org.postgresql.Driver
      ATL_DB_TYPE: postgresql
      # Confluence 7.9+ reads the license from ATL_LICENSE_KEY at first-time setup,
      # skipping the wizard's license step. Written to confluence.cfg.xml on FIRST
      # start only โ€” NOT re-read on restart (ATL_FORCE_CFG_UPDATE defaults false), so a
      # restart does not reset the 3h timebomb. Empty -> wizard prompts for a key.
      # Docs: https://atlassian.github.io/data-center-helm-charts/containers/CONFLUENCE/
      # (Verified 2026-06-18 on confluence:9.2.21: a fresh blank-DB start with this set
      #  skips the wizard license step. The no-restart-refresh detail above is per those docs.)
      ATL_LICENSE_KEY: ${CONFLUENCE_LICENSE_KEY:-}
      # After the 3h timebomb expires, re-apply the key by regenerating confluence.cfg.xml:
      #   ATL_FORCE_CFG_UPDATE=true docker compose up -d confluence
      ATL_FORCE_CFG_UPDATE: ${ATL_FORCE_CFG_UPDATE:-false}
      JVM_MINIMUM_MEMORY: 1024m
      JVM_MAXIMUM_MEMORY: 2048m
      CLUSTERED: "false"
    volumes:
      - confluence-data:/var/atlassian/application-data/confluence
    depends_on:
      confluence-db:
        condition: service_healthy
    healthcheck:
      test: ["CMD-SHELL", "curl -f http://localhost:8090/status || exit 1"]
      interval: 30s
      timeout: 10s
      retries: 20
      start_period: 120s

volumes:
  jira-db-data:
  confluence-db-data:
  jira-data:
  confluence-data: