Skip to content

config.toml Reference

Memoh uses a TOML configuration file. By default it looks for config.toml in the current directory. With Docker, you can mount a custom config via MEMOH_CONFIG (see Docker installation).

Full Example

toml
[log]
level = "info"
format = "text"

[server]
addr = ":8080"

[admin]
username = "admin"
password = "change-your-password"
email = "admin@example.com"

[auth]
jwt_secret = "your-secret-from-openssl-rand-base64-32"
jwt_expires_in = "168h"

[containerd]
socket_path = "/run/containerd/containerd.sock"
namespace = "default"

[mcp]
image = "docker.io/library/memoh-mcp:latest"
snapshotter = "overlayfs"
data_root = "data"
data_mount = "/data"

[postgres]
host = "127.0.0.1"
port = 5432
user = "postgres"
password = "your-password"
database = "memoh"
sslmode = "disable"

[qdrant]
base_url = "http://127.0.0.1:6334"
api_key = ""
collection = "memory"
timeout_seconds = 10

[agent_gateway]
host = "127.0.0.1"
port = 8081

[web]
host = "127.0.0.1"
port = 8082

[brave]
api_key = ""
base_url = "https://api.search.brave.com/res/v1/"

Section Reference

[log]

FieldTypeDefaultDescription
levelstring"info"Log level: debug, info, warn, error
formatstring"text"Log format: text or json

[server]

FieldTypeDefaultDescription
addrstring":8080"HTTP listen address. Use :8080 for all interfaces, or host:port (e.g. server:8080 in Docker).

[admin]

FieldTypeDefaultDescription
usernamestring"admin"Admin login username
passwordstringAdmin login password. Change in production.
emailstringAdmin email (for display)

[auth]

FieldTypeDefaultDescription
jwt_secretstringSecret for signing JWT tokens. Required. Generate with openssl rand -base64 32.
jwt_expires_instring"24h"JWT expiration, e.g. "24h", "168h" (7 days)

[containerd]

FieldTypeDefaultDescription
socket_pathstring"/run/containerd/containerd.sock"Path to containerd socket
namespacestring"default"Containerd namespace for bot containers

[mcp]

MCP (Model Context Protocol) container configuration. Each bot runs in a container built from this image.

FieldTypeDefaultDescription
imagestring"docker.io/library/memoh-mcp:latest"MCP container image
snapshotterstring"overlayfs"Containerd snapshotter
data_rootstring"data"Host path for bot data (Docker: /opt/memoh/data)
data_mountstring"/data"Path inside container where data is mounted

[postgres]

FieldTypeDefaultDescription
hoststring"127.0.0.1"PostgreSQL host
portint5432PostgreSQL port
userstring"postgres"Database user
passwordstringDatabase password
databasestring"memoh"Database name
sslmodestring"disable"SSL mode: disable, require, verify-ca, verify-full

[qdrant]

FieldTypeDefaultDescription
base_urlstring"http://127.0.0.1:6334"Qdrant HTTP API URL
api_keystring""Optional API key for Qdrant Cloud
collectionstring"memory"Vector collection name for memories
timeout_secondsint10Request timeout in seconds

[agent_gateway]

FieldTypeDefaultDescription
hoststring"127.0.0.1"Agent gateway bind host
portint8081Agent gateway port

In Docker Compose, host is typically "agent" (service name). The agent reads [server].addr to call the main API.

[web]

FieldTypeDefaultDescription
hoststring"127.0.0.1"Web UI bind host
portint8082Web UI port

[brave]

Brave Search API for the web search tool. Leave api_key empty to disable web search.

FieldTypeDefaultDescription
api_keystring""Brave Search API key. Get one at brave.com/search/api.
base_urlstring"https://api.search.brave.com/res/v1/"Brave Search API base URL

Published under AGPLv3