mcp-init.sh•1.91 kB
#!/usr/bin/env bash
set -euo pipefail
ROOT="${HOME}/dev/mcp"
PY="${ROOT}/venv"
BIN="${ROOT}/bin"
mkdir -p "${ROOT}/"{bin,hooks,scripts,config,qdrant/storage,neo4j/data}
# 1) Python venv + deps
if [ ! -d "${PY}" ]; then
python3 -m venv "${PY}"
fi
# shellcheck disable=SC1090
source "${PY}/bin/activate"
pip install --upgrade pip
pip install "qdrant-client==1.10.1" "sentence-transformers==3.0.1" "spacy==3.7.5" "neo4j==5.22.0" "uvicorn==0.30.6" "fastapi==0.112.0" "scipy==1.13.1" "FlagEmbedding==1.2.10"
python -m spacy download en_core_web_sm || true
# 2) Config seed (idempotent)
CFG="${ROOT}/config/memory.config.json"
if [ ! -f "${CFG}" ]; then
cat > "${CFG}" << 'JSON'
{
"qdrant": {
"url": "http://127.0.0.1:6333",
"collection": "fieldnote_memory",
"dense_model": "sentence-transformers/all-MiniLM-L6-v2",
"top_k": 8
},
"kg": {
"backend": "neo4j",
"uri": "bolt://127.0.0.1:7687",
"user": "neo4j",
"pass": "password"
},
"injection": {
"max_tokens": 2000,
"score_threshold": 0.30,
"include_kg_symmetry": true
},
"sparse": {
"enabled": true,
"model": "bge-m3",
"hash_dim": 32768
}
}
JSON
fi
# 3) Symlink shared commands
ln -sf "${ROOT}/scripts/memory_store.py" "${BIN}/memory-store"
ln -sf "${ROOT}/scripts/memory_search.py" "${BIN}/memory-search"
ln -sf "${ROOT}/scripts/context_injector.py" "${BIN}/context-inject"
ln -sf "${ROOT}/scripts/mcp_health.py" "${BIN}/mcp-health"
ln -sf "${ROOT}/scripts/qdrant-run.sh" "${BIN}/qdrant-run"
# 4) PATH hook (idempotent)
PROFILE_HOOK='export PATH="$HOME/dev/mcp/bin:$PATH"'
if ! grep -qs 'dev/mcp/bin' "$HOME/.bashrc"; then
echo "${PROFILE_HOOK}" >> "$HOME/.bashrc"
fi
if [ -f "$HOME/.zshrc" ] && ! grep -qs 'dev/mcp/bin' "$HOME/.zshrc"; then
echo "${PROFILE_HOOK}" >> "$HOME/.zshrc"
fi
echo "mcp-init v3: done. Try: docker compose up -d && make health && make demo"