Files
obsidian/services/openmemory.md

8.3 KiB

title, updated, tags
title updated tags
OpenMemory (Mem0) 2026-03-28
service
ai
memory
mcp

개요

OpenMemory는 Mem0에서 개발한 오픈소스 AI 메모리 레이어. LLM 기반 앱들이 공유 가능한 영속적 메모리를 로컬에서 사용할 수 있게 해주는 시스템.

  • 로컬 우선: 모든 데이터가 사용자 머신에 저장, 클라우드 동기화 없음
  • 크로스 클라이언트: MCP 호환 도구 간 컨텍스트 공유
  • 프라이버시 우선: "Nothing goes to the cloud"
  • GitHub: https://github.com/mem0ai/mem0 (openmemory/ 디렉토리)
  • 공식 문서: https://docs.mem0.ai/openmemory

Obsidian vs OpenMemory

Obsidian OpenMemory (Mem0)
성격 마크다운 지식베이스 오픈소스 AI 메모리 레이어
용도 개인 지식 관리, 문서화 AI 앱의 영속적 메모리 저장/공유
소비자 사람 MCP 호환 클라이언트 (Claude Desktop, Cursor, Windsurf, Cline 등)
검색 키워드 검색, wiki links 벡터 임베딩 기반 시맨틱 검색
저장 마크다운 파일 SQLite + Qdrant 벡터 DB
연동 플러그인, git MCP 프로토콜 (SSE)
상태관리 없음 active / paused / archived / deleted
감사 git log 앱별 접근 로그
프라이버시 로컬 파일 로컬 우선 (클라우드 동기화 없음)

아키텍처

컴포넌트 기술 스택 포트 역할
mem0_store Qdrant (벡터 DB) 6333 메모리 벡터 저장소
openmemory-mcp FastAPI + Uvicorn 8765 API 서버 + MCP 서버
openmemory-ui Next.js (React) 3000 웹 대시보드

DB: SQLite(openmemory.db) + Qdrant 벡터 스토어 이중 구조. Alembic으로 마이그레이션 관리.

주요 기능

  • 시맨틱 메모리 검색: 벡터 임베딩 기반 의미적 유사 메모리 검색
  • 크로스 앱 메모리 공유: Claude, Cursor 등 여러 MCP 클라이언트 간 공유
  • 메모리 상태 관리: active, paused, archived, deleted 4단계
  • 접근 감사 로그: 어떤 앱이 언제 어떤 메모리에 접근했는지 기록
  • 카테고리 자동 분류: 메모리에 자동 카테고리 태깅
  • 관련 메모리 탐색: 같은 카테고리 관련 메모리 자동 추천
  • 앱별 권한 제어: 앱 단위 메모리 접근 일시정지
  • 웹 대시보드(UI): 메모리 관리, 통계, 설정 GUI
  • 백업/복원: 데이터 백업 내장
  • 다중 벡터 스토어: Qdrant, pgvector, Redis, Milvus 등 8개 백엔드

K3s 배포

K3s openmemory 네임스페이스에 배포. 매니페스트: gitea.inouter.com/kaffa/k3s-configopenmemory/resources.yaml

컴포넌트 이미지 상태
openmemory-mcp gitea.inouter.com/kaffa/openmemory-mcp:1.0.8 Deployment, imagePullPolicy: Always
openmemory-ui mem0/openmemory-ui:latest Deployment
qdrant qdrant/qdrant:latest Deployment
항목
MCP SSE https://mem0.inouter.com/mcp/claude-code/sse/kaffa
UI https://mem0.inouter.com (HTTPRoute 경유)
API 문서 https://mem0.inouter.com/docs
DB SQLite (openmemory.db, PVC openmemory-data) + Qdrant 벡터
Secret openmemory-secrets (OPENAI_API_KEY)
Registry gitea-registry (imagePullSecrets)

업데이트 절차

kaniko Job으로 GitHub 소스에서 빌드 → Gitea 레지스트리 push → Deployment 이미지 태그 변경:

# 1. kaniko 빌드 (K3s 내에서 실행)
cat <<'EOF' | kubectl apply -f -
apiVersion: batch/v1
kind: Job
metadata:
  name: build-openmemory
  namespace: openmemory
spec:
  backoffLimit: 0
  ttlSecondsAfterFinished: 300
  template:
    spec:
      containers:
      - name: kaniko
        image: gcr.io/kaniko-project/executor:latest
        args:
        - "--context=git://github.com/mem0ai/mem0.git#refs/heads/main"
        - "--context-sub-path=openmemory/api"
        - "--destination=gitea.inouter.com/kaffa/openmemory-mcp:latest"
        - "--destination=gitea.inouter.com/kaffa/openmemory-mcp:NEW_VERSION"
        volumeMounts:
        - name: docker-config
          mountPath: /kaniko/.docker/
      volumes:
      - name: docker-config
        secret:
          secretName: gitea-registry
          items:
          - key: .dockerconfigjson
            path: config.json
      restartPolicy: Never
EOF

# 2. 빌드 완료 확인
kubectl logs -f job/build-openmemory -n openmemory

# 3. 이미지 전환
kubectl set image deploy/openmemory-mcp -n openmemory \
  openmemory-mcp=gitea.inouter.com/kaffa/openmemory-mcp:NEW_VERSION

# 4. MCP 재연결 (Claude Code에서 /mcp 실행)

설치 (최초, docker-compose 방식)

export OPENAI_API_KEY=sk-xxx
curl -sL https://raw.githubusercontent.com/mem0ai/mem0/main/openmemory/run.sh | bash

# 또는 수동
git clone https://github.com/mem0ai/mem0.git
cd mem0/openmemory
make env && make build && make up

지원 벡터 스토어: Qdrant(기본), Weaviate, Redis, pgvector, Chroma, Milvus, Elasticsearch, FAISS

Makefile 명령어

명령 설명
make build Docker 이미지 빌드
make up 서비스 시작
make down 서비스 중지 + 볼륨 삭제
make logs 로그 확인
make shell API 컨테이너 셸 접속
make migrate DB 마이그레이션 실행
make env .env 템플릿 복사
make ui-dev UI 개발 서버 실행

MCP 서버 통합

엔드포인트

GET  /mcp/{client_name}/sse/{user_id}            # SSE 연결
POST /mcp/{client_name}/sse/{user_id}/messages/   # 메시지 전송
POST /mcp/messages/                               # 범용 메시지

MCP 도구 (4개)

도구 설명
add_memories 텍스트를 메모리로 저장 (벡터 임베딩 + DB 기록)
search_memory 시맨틱 검색으로 관련 메모리 조회
list_memories 사용자의 모든 메모리 목록 조회
delete_all_memories 전체 메모리 삭제

클라이언트 등록

npx @openmemory/install local http://localhost:8765/mcp/<client-name>/sse/<user-id> --client <client-name>

지원 클라이언트: Claude Desktop, Cursor, Windsurf, Cline 등 MCP 호환 도구 전체

API 엔드포인트

API 문서: /docs (Swagger), /redoc (ReDoc)

메모리 API (/api/v1/memories/)

메서드 경로 설명
GET /api/v1/memories/ 메모리 목록 (페이지네이션, 필터, 검색)
POST /api/v1/memories/ 메모리 생성
GET /api/v1/memories/{id} 메모리 상세 조회
PUT /api/v1/memories/{id} 메모리 수정
DELETE /api/v1/memories/ 메모리 삭제 (배치)
POST /api/v1/memories/actions/archive 메모리 아카이브
POST /api/v1/memories/actions/pause 메모리 일시정지
GET /api/v1/memories/{id}/access-log 접근 로그 조회
POST /api/v1/memories/filter 고급 필터 검색
GET /api/v1/memories/{id}/related 관련 메모리 조회
GET /api/v1/memories/categories 카테고리 목록

설정 API (/api/v1/config/)

메서드 경로 설명
GET/PUT /api/v1/config/ 전체 설정 조회/수정
POST /api/v1/config/reset 설정 초기화
GET/PUT /api/v1/config/mem0/llm LLM 설정
GET/PUT /api/v1/config/mem0/embedder 임베딩 모델 설정
GET/PUT /api/v1/config/mem0/vector_store 벡터 스토어 설정

기타 API

경로 설명
/api/v1/stats/ 통계 (메모리 수, 앱 수)
/api/v1/apps/ 앱 관리
/api/v1/backup/ 백업 관리

설정

config.json (기본값)

{
  "mem0": {
    "llm": {
      "provider": "openai",
      "config": {
        "model": "gpt-4o-mini",
        "temperature": 0.1,
        "max_tokens": 2000,
        "api_key": "env:OPENAI_API_KEY"
      }
    },
    "embedder": {
      "provider": "openai",
      "config": {
        "model": "text-embedding-3-small",
        "api_key": "env:OPENAI_API_KEY"
      }
    }
  }
}

LLM/임베딩 모델은 API를 통해 런타임에 변경 가능. 벡터 스토어도 REST API로 동적 전환 가능.