From 0dc30659799fdad8e6671a97ffa2acbeec4219b7 Mon Sep 17 00:00:00 2001 From: Steve Cliff Date: Thu, 2 Apr 2026 21:45:31 +0100 Subject: [PATCH] =?UTF-8?q?Update=20README=20for=20v3.0.0=20=E2=80=94=20ad?= =?UTF-8?q?d=20MCP=20server=20docs,=20updatenote,=20fix=20version=20refs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.6 (1M context) --- README.md | 70 ++++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 67 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index d3ef97e..dc2307f 100644 --- a/README.md +++ b/README.md @@ -2,16 +2,19 @@ Personal knowledge base with hybrid search (full-text + semantic vector search). -v2 uses a client-server architecture: a **FastAPI engine** running in Docker (with optional GPU acceleration) and a lightweight **Go CLI client** that talks to it over HTTP. +Client-server architecture: a **FastAPI engine** running in Docker (with optional GPU acceleration), a lightweight **Go CLI client**, and an **MCP server** for native agent integration. ## Architecture ``` Go CLI (kb) ──HTTP──▶ FastAPI Engine (Docker) ──▶ SQLite + GPU + ▲ +MCP Agents ──MCP/HTTP──▶ MCP Server (Docker) ──┘ ``` -- **Engine**: Keeps the embedding model warm in memory. Handles search, ingestion, and document management via REST API. Runs in Docker with NVIDIA GPU, AMD GPU (ROCm), or CPU-only support. +- **Engine**: Keeps the embedding model warm in memory. Handles search, ingestion, document management, and note mutation via REST API. Runs in Docker with NVIDIA GPU, AMD GPU (ROCm), or CPU-only support. - **Client**: Single static Go binary. No Python, no ML dependencies, instant startup. Talks to the engine over HTTP. +- **MCP Server**: Exposes kb operations as native MCP tools over Streamable HTTP. Runs as a separate Docker container alongside the engine. Supports collections for scoping agent memory vs user documents. - **Storage**: Single SQLite database with FTS5 (keyword search) and sqlite-vec (vector search). Portable via bind mount — just copy the data directory between hosts. ## Quick start @@ -84,7 +87,7 @@ Check [releases](https://gitea.dcglab.co.uk/steve/kb/releases) for the latest cl ```bash # Set the version tag -TAG=client-v2.1.0 +TAG=client-v3.0.0 # Linux (amd64) curl -L -o kb https://gitea.dcglab.co.uk/steve/kb/releases/download/${TAG}/kb-linux-amd64 @@ -135,6 +138,9 @@ kb jobs kb search "how to install git" kb search "deploy process" --tags ops --type pdf +# Update a note in place +kb updatenote 42 "revised note content" + # Manage kb list kb info 1 @@ -182,6 +188,64 @@ KB_DATA_PATH=~/kb-data docker compose -f compose.nvidia.yaml up -d Data is device-agnostic — you can ingest on NVIDIA and serve from AMD or CPU (or any combination) with the same data directory. +## MCP server (agent integration) + +The MCP server exposes kb operations as native MCP tools, so agents can search, add notes, upload files, and manage documents without shelling out to the CLI. + +### Start the MCP server + +The compose files include a `kb-mcp` service alongside the engine. Set `KB_MCP_API_KEY` to require Bearer token auth from connecting agents: + +```bash +KB_API_KEY=your-engine-key KB_MCP_API_KEY=your-agent-key \ + docker compose -f engine/compose.nvidia.yaml up -d +``` + +Or run the MCP server standalone: + +```bash +docker run -d --name kb-mcp \ + -p 3000:3000 \ + -e KB_ENGINE_URL=http://your-engine-host:8000 \ + -e KB_API_KEY=your-engine-key \ + -e KB_MCP_API_KEY=your-agent-key \ + --restart unless-stopped \ + docker.dcglab.co.uk/dcg/kb/mcp:latest +``` + +### MCP tools + +| Tool | Description | +|---|---| +| `kb_search` | Hybrid search with optional collection/tag/type filters | +| `kb_addnote` | Add a text note (queued for async ingestion) | +| `kb_update_note` | Update an existing note in place | +| `kb_get` | Get document details by ID or source path | +| `kb_status` | Engine health and statistics | +| `kb_jobs` | Ingestion queue status | +| `kb_upload_start` | Start a chunked file upload | +| `kb_upload_chunk` | Upload a base64-encoded file chunk | +| `kb_upload_finish` | Finish upload and submit for ingestion | + +### Collections + +The MCP server supports **collections** — scoped document namespaces implemented via tag conventions. Use these to separate agent memory from user documents: + +- `documents` (default) — user-facing documents +- `memory` — agent memory and preferences +- `workspace` — working context + +Tools accept a `collection` parameter. The MCP server translates this to `collection:` tags on the engine, and strips them from responses so agents see a clean `"collection": "memory"` field. + +### MCP server configuration + +| Variable | Default | Description | +|---|---|---| +| `KB_ENGINE_URL` | `http://localhost:8000` | Engine API URL | +| `KB_API_KEY` | (none) | Engine API key | +| `KB_MCP_API_KEY` | (none) | Bearer token required from agents (disabled if unset) | +| `KB_MCP_PORT` | `3000` | Port to listen on | + ## Claude Code skill This tool is designed to be wrapped as a Claude Code skill. See `SKILL.md` for the skill definition.