Claude Memory MCP Server
README.md
# Claude Memory MCP Server
Claude의 제한된 메모리를 보완하는 영구 저장소 MCP 서버입니다.
## 주요 기능
### 🎯 핵심 기능
- **저장/로드**: 카테고리별로 메모리 저장 및 로드
- **검색**: 키워드, 카테고리, 태그로 최적화된 검색
- **버전 관리**: 수정 시 자동 버전 백업 (최근 5개 유지)
- **자동 백업**: 전체 메모리 백업 및 복원
### ✨ 개선된 기능
- **태그 정규화**: 자동으로 소문자 변환 및 중복 제거
- **인덱스 복구**: index.json 손상 시 자동 재구성
- **검색 최적화**: 2단계 검색으로 성능 향상
- **통계 기능**: 메모리 사용 현황 분석
- **Export/Import**: JSON 형식으로 백업 이동
- **메모리 병합**: 중복 메모리 통합
- **크기 제한**: 메모리당 최대 1MB 제한
- **에러 복구**: 강화된 에러 처리 및 로깅
## 설치
```bash
cd C:\Users\admin\Documents\ClaudeMCP
npm install
npm run build
```
## Claude Desktop 설정
`%APPDATA%\Claude\claude_desktop_config.json` 파일을 편집:
```json
{
"mcpServers": {
"memory": {
"command": "node",
"args": [
"C:\\Users\\admin\\Documents\\ClaudeMCP\\build\\index.js"
]
}
}
}
```
Claude Desktop을 재시작하면 MCP 서버가 활성화됩니다.
## 사용 가능한 도구
### 📝 기본 작업
#### 1. save_memory
새로운 메모리 저장
```typescript
{
category: string; // 예: "UE5_Rendering", "PCG", "ProjectGray"
title: string; // 짧은 제목
content: string; // 전체 내용 (최대 1MB)
tags?: string[]; // 선택적 태그 (자동 정규화)
}
```
**특징:**
- 태그는 자동으로 소문자 변환 및 중복 제거
- 내용 크기는 1MB로 제한
#### 2. get_memory
ID로 특정 메모리 로드
```typescript
{
id: string; // 메모리 ID
}
```
#### 3. update_memory
기존 메모리 수정
```typescript
{
id: string;
title?: string; // 선택적
content?: string; // 선택적 (최대 1MB)
tags?: string[]; // 선택적 (자동 정규화)
}
```
**특징:**
- 이전 버전 자동 백업 (v1, v2, ...)
- 최근 5개 버전만 유지 (오래된 버전 자동 삭제)
### 🔍 검색 및 조회
#### 4. search_memory
메모리 검색 (최적화된 2단계 검색)
```typescript
{
query?: string; // 텍스트 검색
category?: string; // 카테고리 필터
tags?: string[]; // 태그 필터 (대소문자 무시)
limit?: number; // 결과 개수 제한
}
```
**성능 최적화:**
- 1단계: 인덱스 기반 빠른 필터링
- 2단계: 필요한 메모리만 로드
#### 5. list_categories
모든 카테고리 목록 조회
#### 6. get_statistics
통계 정보 조회
**반환 정보:**
- 전체 메모리 수
- 카테고리별 개수
- 태그별 사용 빈도
- 가장 오래된/최신 메모리
- 총 저장 용량
### 🔧 유지보수 도구
#### 7. rebuild_index
인덱스 재구성
**사용 시기:**
- index.json 파일 손상 시
- 인덱스와 실제 파일 불일치 시
- 수동 파일 조작 후
#### 8. merge_memories
여러 메모리 병합
```typescript
{
ids: string[]; // 병합할 메모리 ID 배열 (최소 2개)
}
```
**동작:**
- 모든 내용을 구분자로 연결
- 태그 통합 및 정규화
- 원본 메모리 삭제
#### 9. delete_memory
메모리 삭제
```typescript
{
id: string;
}
```
**특징:**
- 메모리와 모든 버전 백업 함께 삭제
### 📦 백업 및 이동
#### 10. create_backup
전체 메모리 백업 생성
**백업 위치:**
```
C:\Users\admin\Documents\ClaudeMCP\memories\backups\backup_{timestamp}\
```
#### 11. list_backups
모든 백업 목록 조회
#### 12. restore_backup
백업에서 복원
```typescript
{
timestamp: string; // 백업 타임스탬프
}
```
**⚠️ 경고:** 현재 모든 메모리가 삭제됩니다!
#### 13. export_memories
JSON 파일로 내보내기
```typescript
{
category?: string; // 선택적 (특정 카테고리만)
output_path: string; // 저장 경로
}
```
**사용 예:**
```typescript
{
category: "UE5_Rendering",
output_path: "C:\\backup\\ue5_memories.json"
}
```
#### 14. import_memories
JSON 파일에서 가져오기
```typescript
{
input_path: string; // 파일 경로
overwrite?: boolean; // 기존 메모리 덮어쓰기 (기본: false)
}
```
## 사용 시나리오
### 시나리오 1: 학습 내용 저장
```
User: "RDG에서 FRDGBuilder 사용법 기억해줘.
FRDGBuilder로 리소스 생성하고, AddPass로 패스 추가하고..."
Claude: [save_memory 내부 호출]
{
category: "UE5_Rendering",
title: "RDG FRDGBuilder 사용법",
content: "...",
tags: ["rdg", "frdgbuilder", "rendering"] // 자동 정규화
}
→ "✅ Memory saved! ID: mem_xxx..."
```
### 시나리오 2: 작업 시작 시 기억 로드
```
User: "RDG + SceneViewExtension 작업 시작할건데, 관련 기억 불러와"
Claude: [search_memory 내부 호출]
{
query: "RDG SceneViewExtension",
category: "UE5_Rendering"
}
→ 검색 결과 3개:
1. RDG Best Practices
2. SceneViewExtension 구조
3. RDG Pass 추가 방법
```
### 시나리오 3: 자동 컨텍스트 인식
```
User: "ColorCorrectRegions처럼 PostProcess 구현하고 싶어"
Claude: [자동으로 search_memory 호출]
→ "ColorCorrectRegions 분석" 메모리 로드
→ 저장된 아키텍처 기반으로 구체적 답변
```
### 시나리오 4: 중복 메모리 정리
```
User: "RDG 관련 메모리가 여러 개인데 하나로 합쳐줘"
Claude: [search_memory로 찾고 merge_memories 호출]
{
ids: ["mem_123", "mem_456", "mem_789"]
}
→ 하나의 통합된 메모리 생성
```
### 시나리오 5: 백업 및 이동
```
User: "메모리 백업하고 다른 컴퓨터로 옮기고 싶어"
Claude:
1. [export_memories 호출]
→ ue5_memories.json 파일 생성
2. 파일을 USB나 클라우드로 복사
3. 다른 컴퓨터에서 [import_memories 호출]
```
### 시나리오 6: 인덱스 복구
```
User: "검색이 이상해, 메모리는 있는데 안 나와"
Claude: [rebuild_index 호출]
→ "✅ Index rebuilt! 50 memories indexed"
```
## 파일 구조
```
ClaudeMCP/
├── memories/
│ ├── index.json # 검색용 인덱스 (메타데이터)
│ │
│ ├── UE5_Rendering/ # 카테고리별 폴더
│ │ ├── mem_xxx.json # 메모리 본체
│ │ ├── mem_xxx_v1.json # 버전 1 백업
│ │ ├── mem_xxx_v2.json # 버전 2 백업
│ │ └── mem_yyy.json
│ │
│ ├── PCG/
│ │ ├── mem_zzz.json
│ │ └── mem_zzz_v1.json
│ │
│ └── backups/ # 전체 백업
│ ├── backup_2025-01-08T10-30-00-000Z/
│ │ ├── metadata.json
│ │ ├── index.json
│ │ ├── UE5_Rendering/
│ │ └── PCG/
│ └── backup_2025-01-09T15-20-00-000Z/
│
└── src/
├── index.ts # 메인 서버 (1200+ lines)
└── types.ts # TypeScript 타입 정의
```
## 설정
### CONFIG (src/index.ts)
```typescript
const CONFIG = {
DATA_DIR: path.join(__dirname, "..", "memories"),
MAX_VERSIONS: 5, // 버전 백업 최대 개수
MAX_CONTENT_SIZE: 1048576, // 1MB per memory
};
```
## 개발
```bash
# TypeScript 컴파일 (watch mode)
npm run watch
# 빌드
npm run build
# 로그 확인 (stderr로 출력)
# Claude Desktop의 로그 파일 확인
```
## 에러 처리
### 자동 복구
- **인덱스 손상**: `rebuild_index` 자동 제안
- **파일 없음**: 경고 로그 후 계속 진행
- **크기 초과**: 명확한 에러 메시지
### 로깅
모든 작업은 stderr로 로그 출력:
```
[2025-01-08T10:30:00.000Z] [INFO] Memory saved: mem_xxx (UE5_Rendering/RDG Best Practices)
[2025-01-08T10:35:00.000Z] [WARN] Failed to read memory file: corrupted.json
[2025-01-08T10:40:00.000Z] [ERROR] Failed to save memory
```
## 성능 최적화
### 검색 최적화
1. **인덱스 기반 필터링** (빠름)
- 카테고리, 태그 필터
- 제목/태그에서 키워드 검색
2. **전체 로드** (필요시만)
- 내용에서 키워드 검색
### 버전 관리
- 자동으로 오래된 버전 삭제 (5개 유지)
- 버전 파일: `{id}_v{version}.json`
### 태그 정규화
```typescript
["RDG", "rdg", " RDG "] → ["rdg"] // 자동 정규화
```
## 제한 사항
1. **메모리 크기**: 1MB per memory
2. **버전 백업**: 최근 5개만 유지
3. **동시성**: 단일 프로세스만 안전
4. **검색**: 정규식 미지원 (단순 문자열 검색)
## 문제 해결
### 검색이 안 됨
```
→ rebuild_index 실행
```
### 파일 손상
```
→ list_backups 확인
→ restore_backup 실행
```
### 태그 중복
```
자동으로 정규화되므로 문제 없음
["RDG", "rdg"] → ["rdg"]
```
### 버전 파일 너무 많음
```
자동으로 5개만 유지됨 (MAX_VERSIONS 설정)
```
## 보안 고려사항
1. **로컬 저장**: 모든 데이터는 로컬에만 저장
2. **암호화 없음**: 민감한 정보 저장 주의
3. **접근 제어**: 파일 시스템 권한에 의존
## 향후 개선 계획
- [ ] 암호화 옵션
- [ ] 자동 백업 스케줄러
- [ ] 전문 검색 (정규식, fuzzy)
- [ ] 메모리 압축
- [ ] 동시성 제어 (락)
- [ ] 웹 인터페이스
## 라이선스
MIT
## 기여
버그 리포트나 기능 제안은 환영합니다!
This server cannot be deployed
Maintenance
ActivityInactive
ResponsivenessNo issues