Skip to content

Install without internet access

The offline packages hold the images as files, so the host needs no registry access. Download them from the releases of mcp-platform-offline.

Package Content Size
mcp-platform-2.0.1-offline.zip Gateway, broker, portal, Keycloak, OpenBao, PostgreSQL, Redis, nginx, Eclipse Temurin, the Compose bundle about 1.0 GB
mcp-servers-2.0.0-offline.zip Servers for GitLab, Jira, Confluence, OpenSearch and the service desk, the adapter server, their deploy/ directories about 1.1 GB

The images are linux/amd64. Supported hosts: Docker Engine on Linux x86_64, and Docker Desktop on Windows with the WSL 2 backend. On an ARM machine the images run under emulation only. The release lists the checksums of the zips in SHA256SUMS.

Each zip has this layout:

Path Content
images/ The images saved with docker save
SHA256SUMS Checksums of the files in images/
load-images.sh, load-images.ps1 Check the checksums and load the images (Linux, Windows)
mcp-platform/ (platform zip) The Compose bundle and compose.offline.yaml
servers/mcp-server-<system>/ (servers zip) The deploy/ directory of each server
  1. Extract the platform zip on the host.

  2. Load the images. On Linux:

    Terminal window
    ./load-images.sh

    On Windows, with Docker Desktop running, in PowerShell:

    Terminal window
    powershell -ExecutionPolicy Bypass -File .\load-images.ps1

    Both scripts stop on a checksum mismatch. The last line on Linux is ok all images loaded.

  3. Follow Install the platform in the mcp-platform/ directory up to the start (certificates in certs/, .env from platform.env), and add two lines to .env before you run docker compose up -d:

    Terminal window
    COMPOSE_FILE=compose.yaml:compose.offline.yaml
    PULL_POLICY=never

    On Windows the separator in COMPOSE_FILE is a semicolon:

    Terminal window
    COMPOSE_FILE=compose.yaml;compose.offline.yaml

compose.offline.yaml is required. compose.yaml names the third-party images by digest, and Docker Engine with the classic image store does not keep the registry digest of an image loaded with docker load, so it would try to pull them. The file names the same images by tag. PULL_POLICY=never stops any pull attempt.

  1. Extract the servers zip and load its images the same way (load-images.sh or load-images.ps1).

  2. Enter the directory of the server, for example servers/mcp-server-gitlab/.

  3. Fill in its environment file as described in Install an MCP server.

  4. Put PULL_POLICY=never in a .env file next to compose.yaml:

    Terminal window
    echo PULL_POLICY=never > .env
  5. Start the server:

    Terminal window
    docker compose up -d

The image of version 2.0.0 is already loaded, so nothing is pulled or built.

The steps of Install locally apply. Load the images first and use the two offline lines in .env.

  • Extract the zip with the Windows extractor or 7-Zip and keep the line endings. The shell scripts run inside Linux containers and stop working when an editor rewrites them with CRLF.
  • Windows must trust a certificate from your own CA, for the browser and for Claude Code: certutil -addstore -f Root ca.crt as administrator, and NODE_EXTRA_CA_CERTS for Claude Code.
  • host.docker.internal exists on Docker Desktop, so the local setup works as described.

If the host reaches an internal registry, copy the images there and set MCP_REGISTRY and MCP_THIRD_PARTY_REGISTRY in .env (see Configure). No offline package is needed then.

The platform images are under the Apache License 2.0. The third-party images keep their own licenses: Keycloak (Apache 2.0), OpenBao (MPL 2.0), PostgreSQL (PostgreSQL License), Redis 8 (RSALv2, SSPLv1 or AGPLv3, at your choice), nginx (BSD 2-clause), Eclipse Temurin (GPLv2 with the Classpath Exception). They are the unmodified upstream images.