Docker

August 5, 2026 · View on GitHub

Uteke ships as a lightweight multi-arch Docker image (~10MB). The embedding model (~188MB) downloads automatically on first run and is cached in the volume — subsequent updates are instant.

Quick Start

⚠️ Security: The default config listens on 127.0.0.1 (localhost only). For network access, set UTEKE_AUTH_TOKEN (see Authentication).

# Pull and run (GHCR)
docker run -d --name uteke \
  -p 127.0.0.1:8767:8767 \
  -v uteke-data:/data \
  ghcr.io/codecoradev/uteke:latest

# Or pull from Docker Hub
docker run -d --name uteke \
  -p 127.0.0.1:8767:8767 \
  -v uteke-data:/data \
  codecoradev/uteke:latest

# Verify it's running
curl http://localhost:8767/health

# Store a memory
curl -X POST http://localhost:8767/remember \
  -H "Content-Type: application/json" \
  -d '{"content": "Deployed v2.0 to production"}'

# Recall
curl -X POST http://localhost:8767/recall \
  -H "Content-Type: application/json" \
  -d '{"query": "deployment"}'

Docker Compose

# Clone and use the included docker-compose.yml
docker compose up -d

# Or create your own:
cat > docker-compose.yml << 'EOF'
services:
  uteke:
    image: ghcr.io/codecoradev/uteke:latest
    ports:
      - "127.0.0.1:8767:8767"
    volumes:
      - uteke-data:/data
    restart: unless-stopped

volumes:
  uteke-data:
EOF

docker compose up -d

Environment Variables

VariableDefaultDescription
UTEKE_HOME/dataData directory (set in Dockerfile)
UTEKE_AUTH_TOKENBearer token for API authentication
UTEKE_NAMESPACEdefaultDefault namespace

With authentication

# Read token securely (not stored in shell history)
read -s UTEKE_AUTH_TOKEN
export UTEKE_AUTH_TOKEN

docker run -d --name uteke \
  -p 127.0.0.1:8767:8767 \
  -v uteke-data:/data \
  -e UTEKE_AUTH_TOKEN \
  ghcr.io/codecoradev/uteke:latest

# Now all requests need Authorization header
curl -H "Authorization: Bearer $UTEKE_AUTH_TOKEN" \
  http://localhost:8767/health

Persistence

Data is stored in the /data volume. Mount it for persistence:

# Named volume (managed by Docker)
docker run -v uteke-data:/data ...

# Bind mount (explicit path)
docker run -v /path/to/uteke:/data ...

The volume contains:

  • uteke.db — SQLite database (memories, metadata, FTS5)
  • uteke_index.usearch — HNSW vector index
  • uteke_index.keys — Index key mapping
  • models/embeddinggemma-q4/ — ONNX embedding model (~188MB)

Multi-Architecture

Images are built for:

  • linux/amd64 — Intel/AMD servers
  • linux/arm64 — Apple Silicon, ARM servers (Ampere, Graviton)

Docker automatically pulls the correct architecture.

Image Registries

RegistryImage
GitHub Container Registryghcr.io/codecoradev/uteke:latest
Docker Hubcodecoradev/uteke:latest

Image Tags

TagDescription
latestLatest stable release
v0.12.0Specific version
0.12Minor version (latest patch)
slimSlim image (no embedded model — mount model volume separately, see below)

CLI in Docker

The container runs uteke-serve by default. To run CLI commands:

# Run a one-off CLI command
docker exec uteke uteke recall "deployment" --limit 5

# Or override the entrypoint
docker run --rm -v uteke-data:/data \
  --entrypoint uteke \
  ghcr.io/codecoradev/uteke:latest \
  stats

Health Check

curl http://localhost:8767/health
# → {"status":"healthy","memories":42,"index_size":1024}

Docker Compose includes a built-in health check (curl is pre-installed in the image):

healthcheck:
  test: ["CMD", "curl", "-f", "http://localhost:8767/health"]
  interval: 30s
  timeout: 5s
  retries: 3

Behind a Reverse Proxy

MCP (Model Context Protocol)

The Docker image includes the uteke-mcp binary for MCP-based AI agent integration.

HTTP Transport (via uteke-serve)

HTTP transport is available through uteke-serve at the /mcp endpoint. Start the container normally and point your MCP client at the server:

# Start uteke with MCP endpoint enabled (default)
docker run -d --name uteke \
  -p 127.0.0.1:8767:8767 \
  -v uteke-data:/data \
  ghcr.io/codecoradev/uteke:latest

# The MCP endpoint is available at:
# http://localhost:8767/mcp (Streamable HTTP transport)

Example client configurations:

// Claude Desktop — claude_desktop_config.json
{
  "mcpServers": {
    "uteke": {
      "url": "http://localhost:8767/mcp"
    }
  }
}
// Cursor — .cursor/mcp.json
{
  "mcpServers": {
    "uteke": {
      "url": "http://localhost:8767/mcp"
    }
  }
}

Note: When running uteke in Docker and the MCP client on the host, localhost works because of the port mapping. For remote setups, replace localhost with the server's hostname or IP and configure UTEKE_AUTH_TOKEN.

Stdio Transport (via uteke-mcp)

The uteke-mcp binary in the container provides stdio transport for clients that require subprocess-based MCP. Use --entrypoint to run it:

docker run --rm -v uteke-data:/data \
  --entrypoint uteke-mcp \
  -i ghcr.io/codecoradev/uteke:latest

For Claude Desktop or Cursor with stdio transport:

// Claude Desktop — claude_desktop_config.json
{
  "mcpServers": {
    "uteke": {
      "command": "docker",
      "args": [
        "run", "--rm", "-i",
        "-v", "uteke-data:/data",
        "--entrypoint", "uteke-mcp",
        "ghcr.io/codecoradev/uteke:latest"
      ]
    }
  }
}

Available MCP Tools

Both transports expose the same tools (MCP protocol version 2025-06-18):

ToolDescription
uteke_rememberStore a memory (supports type, room, author, tags)
uteke_recallSemantic search (supports tags filter, min_score)
uteke_searchText search with optional tag filter
uteke_listList memories (supports pagination via offset)
uteke_forgetDelete a memory
uteke_statsMemory store statistics
uteke_contextAI-optimized context output for prompts
uteke_dreamOne-command maintenance pipeline (lint → backlinks → dedup → orphans)
uteke_doc_createCreate a document (wiki/knowledge base entry)
uteke_doc_getRetrieve a document by ID
uteke_doc_listList all documents
uteke_doc_searchSearch documents
uteke_doc_deleteDelete a document
uteke_doc_updatePartial document update with chunk rebuild (#589)
uteke_doc_moveMove document to new parent (#438)
uteke_graphGet nodes + edges JSON for visualization
uteke_room_recallSemantic recall within a room
uteke_room_memoriesList memories in a room (#569)
uteke_room_createCreate a room
uteke_room_deleteDelete a room
uteke_room_statsRoom statistics
uteke_room_summaryRoom topic summary (tag clustering, no LLM)
uteke_room_summary_documentGenerate summary document from room (→ POST /room/summary-document)
uteke_tags_listList all tags with counts (#566)
uteke_tags_renameRename a tag across all memories (#566)
uteke_tags_deleteDelete a tag from all memories (#566)
uteke_pinPin a memory (prevent decay) (#566)
uteke_unpinUnpin a memory (#566)

See TLS & Reverse Proxy for Caddy, Nginx, and Cloudflare Tunnel setup.