feat: add lightrag-mcp MCP server + agent tooling
- Add AGENTS.md with repo guidelines - Add lightrag-mcp: FastMCP server exposing insert_documents() + query_documents() to LLM agents via stdio transport, talks to LightRAG REST API - Add scripts/patch-vllm-cpu.py for CPU inference patching - Add .env.vllm for vLLM configuration - Update flake.nix with expanded dev shell - Update .env.lightrag - Remove CLAUDE.md (replaced by AGENTS.md)
This commit is contained in:
@@ -3,11 +3,17 @@
|
||||
|
||||
inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
||||
|
||||
outputs = { self, nixpkgs }:
|
||||
outputs =
|
||||
{ self, nixpkgs }:
|
||||
let
|
||||
system = "x86_64-linux";
|
||||
pkgs = nixpkgs.legacyPackages.${system};
|
||||
|
||||
stdLibs = pkgs.lib.makeLibraryPath [
|
||||
pkgs.stdenv.cc.cc
|
||||
pkgs.zlib
|
||||
];
|
||||
|
||||
startNeo4j = pkgs.writeShellScript "start-neo4j" ''
|
||||
set -e
|
||||
: "''${RAGS_ROOT:=$PWD}"
|
||||
@@ -41,18 +47,77 @@
|
||||
${pkgs.neo4j}/bin/neo4j stop
|
||||
'';
|
||||
|
||||
in {
|
||||
startAll = pkgs.writeShellScript "start-all" ''
|
||||
set -e
|
||||
: "''${RAGS_ROOT:=$PWD}"
|
||||
|
||||
if [ -f "$RAGS_ROOT/.env.lightrag" ]; then
|
||||
set -a; source "$RAGS_ROOT/.env.lightrag"; set +a
|
||||
fi
|
||||
|
||||
LIGHTRAG_BIN="$RAGS_ROOT/lightrag/.venv/bin/lightrag-server"
|
||||
LOG_DIR="$RAGS_ROOT/logs"
|
||||
mkdir -p "$LOG_DIR"
|
||||
|
||||
LIGHTRAG_PID=""
|
||||
cleanup() {
|
||||
echo ""
|
||||
echo "Shutting down..."
|
||||
[ -n "$LIGHTRAG_PID" ] && kill "$LIGHTRAG_PID" 2>/dev/null || true
|
||||
wait 2>/dev/null || true
|
||||
}
|
||||
trap cleanup EXIT INT TERM
|
||||
|
||||
echo "Starting LightRAG server..."
|
||||
"$LIGHTRAG_BIN" >> "$LOG_DIR/lightrag.log" 2>&1 &
|
||||
LIGHTRAG_PID=$!
|
||||
|
||||
wait_for() {
|
||||
local label=$1 url=$2 tries=0
|
||||
printf " Waiting for %s" "$label"
|
||||
while ! ${pkgs.curl}/bin/curl -so /dev/null --max-time 2 "$url" 2>/dev/null; do
|
||||
tries=$((tries+1))
|
||||
[ $tries -ge 300 ] && { echo " TIMEOUT — check logs/$label.log"; exit 1; }
|
||||
printf "."
|
||||
sleep 1
|
||||
done
|
||||
echo " ready"
|
||||
}
|
||||
|
||||
wait_for "lightrag" "http://localhost:9621/docs"
|
||||
|
||||
echo ""
|
||||
echo "All services up:"
|
||||
echo " LightRAG webui: http://localhost:9621/webui"
|
||||
echo " LightRAG API: http://localhost:9621/docs"
|
||||
echo " Ollama LLM: http://localhost:11434 (external)"
|
||||
echo " Ollama embed: http://localhost:11434/api/embed (external)"
|
||||
echo " logs: $LOG_DIR/"
|
||||
echo ""
|
||||
echo "Ctrl+C to stop everything."
|
||||
echo ""
|
||||
|
||||
tail -f "$LOG_DIR/lightrag.log"
|
||||
'';
|
||||
|
||||
in
|
||||
{
|
||||
devShells.${system} = {
|
||||
|
||||
lightrag = pkgs.mkShell {
|
||||
packages = [ pkgs.uv pkgs.python312 pkgs.curl pkgs.bun ];
|
||||
packages = [
|
||||
pkgs.uv
|
||||
pkgs.python312
|
||||
pkgs.curl
|
||||
pkgs.bun
|
||||
];
|
||||
|
||||
shellHook = ''
|
||||
RAGS_ROOT="$PWD"
|
||||
export VIRTUAL_ENV="$RAGS_ROOT/lightrag/.venv"
|
||||
export UV_PROJECT_ENVIRONMENT="$VIRTUAL_ENV"
|
||||
export UV_PYTHON="${pkgs.python312}/bin/python3.12"
|
||||
export LD_LIBRARY_PATH="${pkgs.lib.makeLibraryPath [ pkgs.stdenv.cc.cc pkgs.zlib ]}:$LD_LIBRARY_PATH"
|
||||
export LD_LIBRARY_PATH="${stdLibs}:$LD_LIBRARY_PATH"
|
||||
|
||||
echo "Syncing lightrag venv..."
|
||||
(cd "$RAGS_ROOT/lightrag" && uv sync --extra api --extra offline-llm --quiet)
|
||||
@@ -69,22 +134,27 @@
|
||||
|
||||
echo ""
|
||||
echo "LightRAG shell ready."
|
||||
echo " start: lightrag-server"
|
||||
echo " config: $RAGS_ROOT/.env.lightrag"
|
||||
echo " needs: ollama with qwen3:0.6b + qwen3-embedding:0.6b"
|
||||
echo " start server: lightrag-server"
|
||||
echo " start all: nix run .#start"
|
||||
echo " config: $RAGS_ROOT/.env.lightrag"
|
||||
echo ""
|
||||
'';
|
||||
};
|
||||
|
||||
graphiti = pkgs.mkShell {
|
||||
packages = [ pkgs.uv pkgs.python312 pkgs.neo4j pkgs.curl ];
|
||||
packages = [
|
||||
pkgs.uv
|
||||
pkgs.python312
|
||||
pkgs.neo4j
|
||||
pkgs.curl
|
||||
];
|
||||
|
||||
shellHook = ''
|
||||
RAGS_ROOT="$PWD"
|
||||
export VIRTUAL_ENV="$RAGS_ROOT/graphiti/.venv"
|
||||
export UV_PROJECT_ENVIRONMENT="$VIRTUAL_ENV"
|
||||
export UV_PYTHON="${pkgs.python312}/bin/python3.12"
|
||||
export LD_LIBRARY_PATH="${pkgs.lib.makeLibraryPath [ pkgs.stdenv.cc.cc pkgs.zlib ]}:$LD_LIBRARY_PATH"
|
||||
export LD_LIBRARY_PATH="${stdLibs}:$LD_LIBRARY_PATH"
|
||||
cd "$RAGS_ROOT/graphiti"
|
||||
|
||||
echo "Syncing graphiti venv..."
|
||||
@@ -99,7 +169,6 @@
|
||||
echo "Graphiti shell ready."
|
||||
echo " neo4j: nix run .#neo4j-start (in another terminal, run first)"
|
||||
echo " config: $RAGS_ROOT/.env.graphiti"
|
||||
echo " needs: ollama with qwen3:0.6b + qwen3-embedding:0.6b"
|
||||
echo ""
|
||||
'';
|
||||
};
|
||||
@@ -107,8 +176,18 @@
|
||||
};
|
||||
|
||||
apps.${system} = {
|
||||
neo4j-start = { type = "app"; program = "${startNeo4j}"; };
|
||||
neo4j-stop = { type = "app"; program = "${stopNeo4j}"; };
|
||||
start = {
|
||||
type = "app";
|
||||
program = "${startAll}";
|
||||
};
|
||||
neo4j-start = {
|
||||
type = "app";
|
||||
program = "${startNeo4j}";
|
||||
};
|
||||
neo4j-stop = {
|
||||
type = "app";
|
||||
program = "${stopNeo4j}";
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user