Skip to main content
Glama
TyrelCB

rag-mcp

by TyrelCB

rag-mcp

Hybrid RAG over Claude Code and Hermes session history on this box, plus an SFT export + LoRA fine-tuning pipeline for distilling frontier-model sessions into small local models.

One persistent service (port 8004, systemd user unit rag-mcp) provides:

  • MCP (streamable HTTP, https://rag.mcp.tyrel.cloud/mcp): rag_search, rag_ingest_text, rag_status — registered in both Claude Code (~/.claude.json) and Hermes (~/.hermes/config.yamlrag-mcp).

  • REST for hooks:

    • POST /api/ingest — enqueue a session transcript (202, background worker)

    • POST /api/context — hybrid search, returns a provenance-tagged context block

    • GET /health — store stats + queue depth

How data flows

Claude Code SessionEnd  ─┐
Hermes on_session_end   ─┼─► POST /api/ingest ─► queue ─► parse ─► junk filter
                         │      (pending_jobs table survives restarts)
                         │   ─► distill (llama.cpp :9090, Qwen3.6-35b-1M) ─► chunk
                         │   ─► scrub secrets ─► embed (llama.cpp :9090, qwen3-embedding-0.6b)
                         │   ─► SQLite: chunks + FTS5 + sqlite-vec
Claude Code UserPromptSubmit ─► POST /api/context ─► vec KNN + BM25 → RRF → boosts
                                 → dedupe (per-session `injected` cache) → inject

Store: ~/.local/share/rag-mcp/rag.db (WAL). Chunk kinds: summary, fact, error_fix, user_prompt, assistant_answer, code, manual.

Hooks (all fail-open — service down means silence, never a blocked prompt):

  • ~/.claude/hooks/claude-rag-context.sh (UserPromptSubmit), claude-rag-ingest.sh (SessionEnd) — wired in ~/.claude/settings.json.

  • ~/.hermes/agent-hooks/hermes-rag-ingest.sh — wired in ~/.hermes/config.yaml hooks: block, allowlisted in ~/.hermes/shell-hooks-allowlist.json.

Related MCP server: knowledge-rag

CLI

rag-mcp serve                     # what systemd runs
rag-mcp status
rag-mcp backfill --source all     # seed from existing history (--no-distill for speed)
rag-mcp ingest <path> --source claude
rag-mcp export --out data/sft-$(date +%Y%m%d) --min-turns 3
rag-mcp reembed --model <router-model-id> --dim <n>   # switch embedding models

Fine-tuning (training/)

  1. rag-mcp export --out data/sft-YYYYMMDDtrain_tools.jsonl (full tool trajectories), train_chat.jsonl (text-only), val splits, stats.json. Quality gates: frontier (claude*) model, ≥N user turns, <30% tool errors, no failure endings, dedup; secrets redacted.

  2. training/run_container.sh python train_lora.py --base Qwen/Qwen3.5-9B \ --data /ws/data/sft-YYYYMMDD/train_tools.jsonl --run-name my-run — bf16 LoRA via TRL/PEFT inside the NGC pytorch container (aarch64; no bitsandbytes). Smoke: --base Qwen/Qwen3-0.6B --max-steps 2.

  3. training/merge_and_export.sh runs/my-run Qwen/Qwen3.5-9B tyrel-tuned-qwen — merge → GGUF (~/llama.cpp) → Q4_K_M → preset in ~/models/presets.ini, served by the llama.cpp router on :9090.

Config (env)

PORT (8004) · RAG_DB · RAG_EMBED_URL/RAG_EMBED_MODEL (llama.cpp router /v1/embeddings, qwen3-embedding-0.6b via ~/models/presets.ini, dim recorded in meta; mismatch refuses startup) · RAG_DISTILL_URL/RAG_DISTILL_MODEL (llama.cpp :9090, Qwen3.6-35b-1M-P1-MTP-NGRAM) · RAG_CONTEXT_TOKENS (1500) · RAG_MIN_SESSION_CHARS (700).

Dev

uv sync && .venv/bin/python -m pytest tests/ -q

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    B
    maintenance
    Persistent memory for Claude Code. Automatically indexes every conversation and provides production-grade hybrid search (BM25 + vectors + reranker) via MCP tools. 100% local, zero config, zero API keys, zero invoice.
    16
    34 npm
    7
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Local RAG system for Claude Code with hybrid search (semantic + BM25), cross-encoder reranking, markdown-aware chunking, and 12 MCP tools. Zero external servers, pure ONNX in-process.
    13
    264 PyPI
    279
    MIT
  • A
    license
    B
    quality
    A
    maintenance
    Persistent memory MCP server that captures coding session context and automatically injects relevant memories into prompts using hybrid search for OpenCode and Claude Code.
    14
    71
    MIT
  • F
    license
    Not graded
    quality
    B
    maintenance
    Local semantic search over Claude Code sessions and shell command history, exposed to Claude Code as an MCP tool. Everything is indexed into one vector space and runs entirely on your machine.
    2
    -