Integrate GBrain with Hermes in Docker via MCP HTTP

This guide shows how to run GBrain as a personal knowledge brain in Docker and connect it to Hermes AI Agent over MCP HTTP. Once connected, Hermes can access more than 70 knowledge, search, graph, and code-intelligence tools exposed by GBrain.

The latest updates are available in the current repository: https://github.com/magicstone1412/docker-gbrain. You can use this repository to set up GBrain with Docker quickly.

This article is the first workflow you can use to understand how the GBrain MCP setup works with Docker.

Overview

Telegram / Web
     |
     v
Hermes (Docker) ---- MCP HTTP ----> GBrain (Docker)
                                       |
                                       v
                                 PostgreSQL + pgvector
                                 (brain database)

Stack

Service Image Port
hermes nousresearch/hermes-agent:latest 8642
gbrain skywirex/gbrain:latest 7333
gbrain-postgres pgvector/pgvector:pg16 5432 (internal)

1. Build the GBrain Docker image

Create a Dockerfile like this:

FROM oven/bun:latest
WORKDIR /app

RUN apt-get update && apt-get install -y git netcat-openbsd && rm -rf /var/lib/apt/lists/*
RUN git clone https://github.com/garrytan/gbrain .
RUN bun install --registry https://registry.npmjs.org
RUN bun link

RUN mkdir -p /data/brain

COPY entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh

VOLUME ["/data/brain"]
EXPOSE 7333

ENTRYPOINT ["/entrypoint.sh"]

Then create entrypoint.sh:

#!/bin/sh
set -e

echo "Waiting for Postgres..."
until nc -z gbrain-postgres 5432 2>/dev/null; do
  echo "Postgres not ready, retrying..."
  sleep 2
done
echo "Postgres ready!"

echo "Initializing brain..."
printf '1\n' | gbrain init --supabase --url "$DATABASE_URL" --no-embedding || true

echo "Starting background sync..."
gbrain sync --watch --repo /data/brain &

echo "Starting MCP server..."
exec gbrain serve --http --port 7333 --bind 0.0.0.0

Build and push the image:

docker build -t skywirex/gbrain .
docker push skywirex/gbrain

2. Deploy GBrain with Docker Compose

Create ~/docker/gbrain/docker-compose.yml:

services:
  postgres:
    image: pgvector/pgvector:pg16
    container_name: gbrain-postgres
    restart: unless-stopped
    environment:
      POSTGRES_DB: gbrain
      POSTGRES_USER: gbrain
      POSTGRES_PASSWORD: gbrain123
    volumes:
      - postgres-data:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U gbrain -d gbrain"]
      interval: 5s
      timeout: 5s
      retries: 10
    networks:
      - gbrain-net
      - hermes_ai_network

  gbrain:
    image: skywirex/gbrain:latest
    container_name: gbrain
    restart: unless-stopped
    environment:
      DATABASE_URL: postgresql://gbrain:gbrain123@gbrain-postgres:5432/gbrain
    ports:
      - "7333:7333"
    volumes:
      - ./data/brain:/data/brain
    depends_on:
      postgres:
        condition: service_healthy
    networks:
      - gbrain-net
      - hermes_ai_network

networks:
  gbrain-net:
    driver: bridge
  hermes_ai_network:
    external: true

volumes:
  postgres-data:

Important: hermes_ai_network must match the external Docker network used by your Hermes container. If your Hermes stack uses a different network name, replace it here so both containers can talk to each other.

Start GBrain:

cd ~/docker/gbrain
docker compose up -d

3. Create a GBrain access token

After GBrain starts successfully and reports the postgres engine, create a token for Hermes:

docker exec gbrain gbrain auth create "hermes"

Example output:

gbrain_ad20104459dd16e691b0de9b55a19f0d5065d480fa48b6e4230ac48b97135542

Save this token. Hermes will use it as a Bearer token when calling the GBrain MCP endpoint.

4. Configure Hermes

Add GBRAIN_TOKEN to your Hermes docker-compose.yml:

services:
  hermes:
    image: nousresearch/hermes-agent:latest
    container_name: hermes
    restart: unless-stopped
    command: gateway run
    ports:
      - "8642:8642"
    volumes:
      - ./hermes-data:/opt/data
    networks:
      - hermes_ai_network
    environment:
      - TELEGRAM_BOT_TOKEN=...
      - TELEGRAM_ALLOWED_USERS=...
      - GBRAIN_TOKEN=<YOUR_GBRAIN_TOKEN>

Then append this block to ~/docker/hermes/hermes-data/config.yaml:

mcp_servers:
  gbrain:
    url: http://gbrain:7333/mcp
    headers:
      Authorization: "Bearer ${GBRAIN_TOKEN}"

Important: Hermes uses the ${ENV_VAR} pattern here, so do not hardcode the token directly inside config.yaml.

Restart Hermes:

cd ~/docker/hermes
docker compose up -d

5. Verify the integration

Check the GBrain health endpoint:

curl -s http://localhost:7333/health

Expected output:

{"status":"ok","version":"0.42.26.0","engine":"postgres"}

Test the MCP endpoint manually:

curl -s -X POST http://localhost:7333/mcp \
  -H "Authorization: Bearer $GBRAIN_TOKEN" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{"jsonrpc":"2.0","method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"test","version":"1.0"}},"id":1}'

Check Hermes logs for MCP or GBrain activity:

docker logs hermes 2>&1 | grep -i "mcp\|gbrain" | tail -10

You can also message Hermes through Telegram and ask:

List your available MCP tools

Available GBrain tool groups

GBrain exposes more than 70 tools, including:

Category Tools
Pages get_page, put_page, delete_page, list_pages, get_chunks
Search query, search, think, recall, get_recent_salience
Graph add_link, get_links, get_backlinks, traverse_graph
Tags and Timeline add_tag, get_tags, add_timeline_entry, get_timeline
Facts and Takes extract_facts, forget_fact, takes_list, takes_scorecard
Code Intelligence code_def, code_refs, code_callers, code_callees
Jobs submit_job, list_jobs, get_job, cancel_job
Health get_health, get_stats, run_doctor
Skills list_skills, get_skill

Example prompts for Hermes

Ingest an article:

Ingest this article: https://example.com/article. Write the brain page to ~/brain/

Query the knowledge base:

What do I know about machine learning?

Capture an idea:

Capture this thought: [your note here]

Maintenance notes

  • GBrain tokens do not expire automatically. Create a new one only if you revoke the current token.
  • To update GBrain, run docker compose pull && docker compose up -d.
  • Brain data is stored in the PostgreSQL volume, so it survives container restarts.
  • To back up the database:
docker exec gbrain-postgres pg_dump -U gbrain gbrain > backup.sql

See also