Skip to content

Docker

Terminal window
docker run --rm -p 4000:4000 -e OPENAI_API_KEY ghcr.io/mokahq/moka

The 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.

Use a moka.json from the current folder
docker run --rm -p 4000:4000 \
-v "$PWD:/workspace" \
-e ANTHROPIC_API_KEY \
ghcr.io/mokahq/moka
Persistent config and chat history
docker run -d --name moka -p 4000:4000 \
-v moka-data:/data \
-e MOKA_TOKEN=change-me \
-e OPENAI_API_KEY \
ghcr.io/mokahq/moka
docker-compose.yml
services:
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:/data
volumes:
moka-data:
SettingValue
Working directory/workspace — a moka.json here is used automatically
MOKA_HOME/data — default config and chat sessions
MOKA_HOST0.0.0.0
PORT4000
Usernode (non-root)
Health checkGET /api/health

The container generates a random token on each start and prints the URL in docker logs. Set MOKA_TOKEN for a stable one.

Tag
latestMost recent release
X.Y.ZExact release
X.YLatest patch of a minor version