diff --git a/README.md b/README.md
index ef9ac03..996c887 100644
--- a/README.md
+++ b/README.md
@@ -9,7 +9,7 @@
-
+
@@ -17,6 +17,7 @@
+
---
@@ -56,14 +57,12 @@ I built this for myself. It worked. I've been running it daily for months, and n
### Prerequisites
-- macOS (Apple Silicon tested)
+- macOS (Apple Silicon tested) or Linux
- Python 3.11 or 3.12
- Node.js 18+
- [Claude Code](https://docs.claude.com/en/docs/claude-code/overview) as the MCP host
- ~500 MB free disk
-Windows and Linux not supported yet but I'm working on it.
-
### Install
```bash
@@ -72,7 +71,7 @@ cd iai-mcp
bash scripts/install.sh
```
-The installer creates a Python venv, installs dependencies (LanceDB, sentence-transformers, torch-hd, NetworkX, igraph), builds the TypeScript MCP wrapper, pre-downloads the default embedding model (~130 MB), symlinks the CLI to `~/.local/bin/iai-mcp`, and on macOS registers the daemon with launchd.
+The installer creates a Python venv at `~/.venv/iai-mcp`, installs dependencies (LanceDB, sentence-transformers, torch-hd, NetworkX, igraph), builds the TypeScript MCP wrapper, pre-downloads the default embedding model (~130 MB), symlinks the CLI to `~/.local/bin/iai-mcp`, and on macOS registers the daemon with launchd. On Linux, install the systemd unit from `deploy/systemd/iai-mcp-daemon.service`.
Make sure `~/.local/bin` is on your `PATH`:
@@ -149,6 +148,21 @@ tail ~/.iai-mcp/logs/capture-$(date -u +%Y-%m-%d).log
You should see a `rc=0` line. That's your first memory.
+### Linux (systemd)
+
+Install the systemd user unit:
+
+```bash
+mkdir -p ~/.config/systemd/user
+cp deploy/systemd/iai-mcp-daemon.service ~/.config/systemd/user/
+systemctl --user daemon-reload
+systemctl --user enable --now iai-mcp-daemon.service
+```
+
+For survival past logout (headless servers): `loginctl enable-linger $USER`
+
+Check status: `systemctl --user status iai-mcp-daemon.service`
+
---
## Usage
@@ -185,8 +199,14 @@ All records are encrypted at rest with AES-256-GCM. The key lives in `~/.iai-mcp
Everything lives at `~/.iai-mcp/`. Embeddings are computed locally with `bge-small-en-v1.5`. The only data that leaves the machine is your normal conversation with whatever LLM API your client uses.
+### Storage backends
+
+The default backend is **LanceDB** (embedded, zero-config, local). For larger deployments or multi-machine setups, an optional **Qdrant** backend is available. Set `QDRANT_URL` to enable it — the system auto-selects the backend via a factory function.
+
+Migrate from LanceDB to Qdrant: `iai-mcp migrate qdrant`
+
```
-Claude Code <--MCP-stdio--> TypeScript wrapper <--UNIX socket--> Python daemon <--> LanceDB
+Claude Code <--MCP-stdio--> TypeScript wrapper <--UNIX socket--> Python daemon <--> LanceDB / Qdrant
```
---
@@ -224,9 +244,19 @@ The LongMemEval-S run is blind on purpose. No dataset-specific tuning, no hyperp
|---|---|---|
| `IAI_MCP_STORE` | `~/.iai-mcp/` | Data directory |
| `IAI_MCP_EMBED_MODEL` | `bge-small-en-v1.5` | Embedding model. `bge-m3` for multilingual at ~3x size. |
+| `QDRANT_URL` | _(unset)_ | Qdrant server URL. When set, uses Qdrant backend instead of LanceDB. |
+| `QDRANT_API_KEY` | _(unset)_ | Qdrant API key |
Switching embedders requires re-embedding the store: `iai-mcp migrate reembed`.
+### Non-AVX CPUs
+
+If your CPU lacks AVX support, rebuild the venv with the CPU-only PyTorch wheel:
+
+```bash
+bash scripts/rebuild-venv.sh
+```
+
---
## Doctor
@@ -302,7 +332,7 @@ Claude Desktop should work (uses `claude_desktop_config.json` instead of `~/.cla
Other MCP-over-stdio hosts speak the same protocol and should work in principle. Not tested.
-If you get it running on something else, open an issue or PR.
+Linux support via systemd is available. macOS via launchd.
---
diff --git a/deploy/systemd/iai-mcp-daemon.service b/deploy/systemd/iai-mcp-daemon.service
index 31572ce..8aba311 100644
--- a/deploy/systemd/iai-mcp-daemon.service
+++ b/deploy/systemd/iai-mcp-daemon.service
@@ -16,7 +16,7 @@ After=default.target
[Service]
Type=simple
-ExecStart=/home/andreas/.venv/iai-mcp/bin/python -m iai_mcp.daemon
+ExecStart=%h/.venv/iai-mcp/bin/python -m iai_mcp.daemon
Restart=on-failure
RestartSec=30
StartLimitIntervalSec=60