Docker
docker run --rm -p 4000:4000 -e OPENAI_API_KEY ghcr.io/mokahq/mokaThe image (linux/amd64 and linux/arm64) includes Node.js (npx), uv (uvx) and git, so both Node and Python MCP servers work out of the box.
Common setups
Section titled “Common setups”docker run --rm -p 4000:4000 \ -v "$PWD:/workspace" \ -e ANTHROPIC_API_KEY \ ghcr.io/mokahq/mokadocker run -d --name moka -p 4000:4000 \ -v moka-data:/data \ -e MOKA_TOKEN=change-me \ -e OPENAI_API_KEY \ ghcr.io/mokahq/mokaservices: moka: image: ghcr.io/mokahq/moka:latest ports: ["4000:4000"] environment: MOKA_TOKEN: ${MOKA_TOKEN} OPENAI_API_KEY: ${OPENAI_API_KEY} GATEWAY_KEY: ${GATEWAY_KEY} volumes: - ./demo:/workspace # contains moka.json and skills/ - moka-data:/datavolumes: moka-data:Defaults inside the image
Section titled “Defaults inside the image”| Setting | Value |
|---|---|
| Working directory | /workspace — a moka.json here is used automatically |
MOKA_HOME | /data — default config and chat sessions |
MOKA_HOST | 0.0.0.0 |
PORT | 4000 |
| User | node (non-root) |
| Health check | GET /api/health |
Access token
Section titled “Access token”The container generates a random token on each start and prints the URL in docker logs. Set MOKA_TOKEN for a stable one.
| Tag | |
|---|---|
latest | Most recent release |
X.Y.Z | Exact release |
X.Y | Latest patch of a minor version |