Skip to content

rokpiy/PKM

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

6 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

PKM (Personal Knowledge Management) System

Obsidian β†’ Atomic Notes β†’ Knowledge Graph β†’ MCP Server

개인 지식을 Knowledge Graph둜 λ³€ν™˜ν•˜κ³  AI λ„κ΅¬μ—μ„œ ν™œμš©

Python Neo4j Gemini FastMCP Docker

🎯 μ£Όμš” κΈ°λŠ₯

  • βœ… Obsidian λ…ΈνŠΈ μžλ™ λΆ„ν•΄ - 단일 κ°œλ… λ‹¨μœ„λ‘œ Atomic Notes 생성 (Gemini AI)
  • βœ… Entity & Relationship μΆ”μΆœ - AI + Regex 기반 지식 κ·Έλž˜ν”„ ꡬ성
  • βœ… Neo4j Knowledge Graph - κ°•λ ₯ν•œ κ·Έλž˜ν”„ 쿼리 및 μ‹œκ°ν™”
  • βœ… MCP Server - Claude Desktop, Cursor λ“± AI 도ꡬ와 연동
  • βœ… Raw Data 제곡 - Reasoning은 Claude/Cursorκ°€ 직접 μˆ˜ν–‰

⚑ Quick Start

방법 1: uv μ‚¬μš© (ꢌμž₯ - 10-100λ°° 빠름)

# 1. uv μ„€μΉ˜
curl -LsSf https://astral.sh/uv/install.sh | sh

# 2. μ˜μ‘΄μ„± μ„€μΉ˜
cd PKM
uv sync

# 3. Neo4j μ‹œμž‘
docker-compose up -d

# 4. ν™˜κ²½ λ³€μˆ˜ μ„€μ •
cp .env.example .env
# .env νŒŒμΌμ— GEMINI_API_KEY μž…λ ₯

# 5. Knowledge Graph ꡬ좕 (Stage 1-3)
./quick_start.sh
# β†’ μ˜΅μ…˜ 4 선택 (전체 νŒŒμ΄ν”„λΌμΈ)

# 6. MCP Server μ„€μ •
# Claude Desktopμ—μ„œ μ‚¬μš© (docs/MCP_SERVER_SETUP.md μ°Έκ³ )

πŸ‘‰ uv λΉ λ₯Έ μ‹œμž‘ κ°€μ΄λ“œ - 5λΆ„ λ§Œμ— μ™„λ£Œ!

방법 2: Docker + pip

# 1. κ°€μƒν™˜κ²½ 및 μ˜μ‘΄μ„± μ„€μΉ˜
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt

# 2. Neo4j μ‹œμž‘
docker-compose up -d

# 3. ν™˜κ²½ λ³€μˆ˜ μ„€μ •
cp .env.example .env

# 4. Knowledge Graph ꡬ좕
./quick_start.sh

πŸ›οΈ μ‹œμŠ€ν…œ μ•„ν‚€ν…μ²˜

πŸ“ Obsidian Vault (Your Notes)
    β”‚
    β”œβ”€ Markdown files with frontmatter, links, tags
    β”‚
    β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  Stage 1: Atomic    β”‚  ← Gemini 2.5-flash
β”‚  Note Agent         β”‚  
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
    β”‚
    β”œβ”€ atomic_notes/*.json
    β”‚
    β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  Stage 2: Entity &  β”‚  ← Regex + Gemini
β”‚  Relationship       β”‚     Enhancement
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
    β”‚
    β”œβ”€ *_enhanced.json
    β”‚
    β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  Stage 3: Neo4j     β”‚  ← Neo4j 5.14.0
β”‚  Graph DB Import    β”‚     (Docker)
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
    β”‚
    β”‚  Cypher Queries (Raw Data)
    β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚     Neo4j Knowledge Graph            β”‚
β”‚                                      β”‚
β”‚  Nodes: AtomicNote, Entity           β”‚
β”‚  Relationships: MENTIONS, SUPPORTS   β”‚
β”‚                 USES, CAUSES, etc.   β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
    β”‚
    β”‚  Raw Data (JSON)
    β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚   MCP Server (FastMCP)              β”‚
β”‚                                     β”‚
β”‚   6 Tools:                          β”‚
β”‚   β€’ search_entities                 β”‚
β”‚   β€’ get_entity_graph                β”‚
β”‚   β€’ find_related_notes              β”‚
β”‚   β€’ find_entity_path                β”‚
β”‚   β€’ get_graph_stats                 β”‚
β”‚   β€’ run_cypher_query                β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
    β”‚
    β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
    β”‚             β”‚              β”‚
    β–Ό             β–Ό              β–Ό
Claude       Cursor        VS Code
Desktop                  + Continue
    β”‚             β”‚              β”‚
    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
           Reasoning은 LLM이 직접!

πŸ“Š κ΅¬ν˜„ 단계

Stage κΈ°λŠ₯ μƒνƒœ μ„€λͺ…
1 Atomic Notes 생성 βœ… μ™„λ£Œ Obsidian λ…ΈνŠΈλ₯Ό 단일 κ°œλ…μœΌλ‘œ λΆ„ν•΄
2 Entity & Relationship μΆ”μΆœ βœ… μ™„λ£Œ AI 기반 μ—”ν‹°ν‹° 및 관계 μΆ”μΆœ
3 Neo4j Graph DB ꡬ좕 βœ… μ™„λ£Œ Knowledge Graph둜 λ³€ν™˜
MCP MCP Server βœ… μ™„λ£Œ Raw Data 제곡, Reasoning은 LLM

πŸ”‘ 핡심 μ² ν•™

MCP = Raw Data Provider

κΈ°μ‘΄ (잘λͺ»λœ μ ‘κ·Ό):

User β†’ Claude β†’ MCP β†’ Gemini API (Reasoning) β†’ Raw Data β†’ Claude
                         ❌ 이쀑 LLM λΉ„μš©, 투λͺ…μ„± λΆ€μ‘±

ν˜„μž¬ (μ˜¬λ°”λ₯Έ μ ‘κ·Ό):

User β†’ Claude β†’ MCP β†’ Raw Data from Neo4j β†’ Claude (Reasoning)
                βœ… λΉ„μš© 절감, 투λͺ…μ„±, Claude λŠ₯λ ₯ μ΅œλŒ€ ν™œμš©

μž₯점:

  • πŸ’° λΉ„μš© 절감: Gemini API λΆˆν•„μš”, Claude만 μ‚¬μš©
  • πŸ” 투λͺ…μ„±: Claudeκ°€ μ–΄λ–€ 데이터λ₯Ό μ‚¬μš©ν–ˆλŠ”μ§€ λͺ…ν™•
  • 🧠 더 λ‚˜μ€ Reasoning: Claudeκ°€ raw data둜 더 κΉŠμ€ 뢄석
  • πŸ“Š μœ μ—°μ„±: μ‚¬μš©μžκ°€ μ›ν•˜λŠ” 도ꡬ μ‘°ν•© κ°€λŠ₯

πŸ› οΈ 기술 μŠ€νƒ

계측 기술 μš©λ„
Input Obsidian, Markdown λ…ΈνŠΈ μž‘μ„± 및 관리
LLM Google Gemini 2.5-flash Atomic λΆ„ν•΄, Entity μΆ”μΆœλ§Œ
Database Neo4j 5.14.0 (Docker) Knowledge Graph μ €μž₯
Backend Python 3.10+ 데이터 처리
Graph Query Cypher Graph 탐색 및 쿼리
MCP Framework FastMCP MCP μ„œλ²„ κ΅¬ν˜„
Reasoning Claude / Cursor / etc. LLM이 직접 Reasoning
Container Docker Compose Neo4j 격리 및 배포
Package Manager uv (ꢌμž₯) / pip Python μ˜μ‘΄μ„± 관리

🎯 Atomic Note 원칙

PKM μ‹œμŠ€ν…œμ€ Zettelkasten 방법둠을 λ”°λ¦…λ‹ˆλ‹€:

  1. 단일 μ±…μž„ (Single Responsibility) - ν•˜λ‚˜μ˜ κ°œλ…/μ•„μ΄λ””μ–΄λ§Œ 포함
  2. 독립성 (Independence) - λ…λ¦½μ μœΌλ‘œ 이해 κ°€λŠ₯
  3. μ—°κ²°μ„± (Connectivity) - λ‹€λ₯Έ λ…ΈνŠΈμ™€ 링크 κ°€λŠ₯
  4. ꡬ쑰화 (Structure) - λͺ…ν™•ν•œ 메타데이터 포함

πŸ”§ ν”„λ‘œμ νŠΈ ꡬ쑰

PKM/
β”œβ”€β”€ src/                           # 핡심 μ†ŒμŠ€ μ½”λ“œ
β”‚   β”œβ”€β”€ obsidian_loader.py              # Obsidian Vault λ‘œλ”
β”‚   β”œβ”€β”€ atomic_note_agent.py            # Stage 1: Atomic Notes
β”‚   β”œβ”€β”€ entity_extraction_simple.py     # Stage 2: Entity Extraction
β”‚   └── graph_db.py                     # Stage 3: Neo4j Manager
β”‚
β”œβ”€β”€ tests/                         # ν…ŒμŠ€νŠΈ 슀크립트
β”‚   β”œβ”€β”€ test_atomic_agent.py            # Stage 1 ν…ŒμŠ€νŠΈ
β”‚   β”œβ”€β”€ test_entity_extraction.py       # Stage 2 ν…ŒμŠ€νŠΈ
β”‚   β”œβ”€β”€ test_graph_import.py            # Stage 3 ν…ŒμŠ€νŠΈ
β”‚   └── regenerate_markdown.py          # Markdown μž¬μƒμ„±
β”‚
β”œβ”€β”€ docs/                          # λ¬Έμ„œ
β”‚   β”œβ”€β”€ INSTALLATION.md                 # μ„€μΉ˜ κ°€μ΄λ“œ
β”‚   β”œβ”€β”€ USAGE_GUIDE.md                  # μ‚¬μš© κ°€μ΄λ“œ
β”‚   β”œβ”€β”€ QUICKSTART_UV.md                # uv λΉ λ₯Έ μ‹œμž‘
β”‚   β”œβ”€β”€ QUICKSTART_DOCKER.md            # Docker λΉ λ₯Έ μ‹œμž‘
β”‚   β”œβ”€β”€ MCP_SERVER_SETUP.md             # MCP μ„œλ²„ μ„€μ •
β”‚   β”œβ”€β”€ DOCKER_SETUP.md                 # Docker 상세 κ°€μ΄λ“œ
β”‚   β”œβ”€β”€ UV_SETUP.md                     # uv 상세 κ°€μ΄λ“œ
β”‚   └── Obsidian-to-GraphDB-Implementation.md  # κ΅¬ν˜„ κ°€μ΄λ“œ
β”‚
β”œβ”€β”€ scripts/                       # μœ ν‹Έλ¦¬ν‹° 슀크립트
β”‚   β”œβ”€β”€ start_neo4j.sh                  # Neo4j μ‹œμž‘
β”‚   └── stop_neo4j.sh                   # Neo4j 쀑지
β”‚
β”œβ”€β”€ mcp_server.py                  # MCP Server (FastMCP)
β”œβ”€β”€ quick_start.sh                 # Quick Start 슀크립트
β”œβ”€β”€ docker-compose.yml             # Neo4j Docker μ„€μ •
β”œβ”€β”€ pyproject.toml                 # uv ν”„λ‘œμ νŠΈ μ„€μ •
β”œβ”€β”€ requirements.txt               # pip μ˜μ‘΄μ„±
β”œβ”€β”€ .env.example                   # ν™˜κ²½ λ³€μˆ˜ μ˜ˆμ‹œ
└── README.md                      # 이 파일

πŸ“š λ¬Έμ„œ

λΉ λ₯Έ μ‹œμž‘

κ³ κΈ‰ κ°€μ΄λ“œ

ν”„λ‘œμ νŠΈ λ¬Έμ„œ

πŸ’° λΉ„μš© μ•ˆλ‚΄

Google Gemini 2.5-flash (Stage 1-2μ—μ„œλ§Œ μ‚¬μš©)

무료 ν‹°μ–΄:

  • 15 RPM (λΆ„λ‹Ή μš”μ²­)
  • 1,500 RPD (일일 μš”μ²­)
  • 1 Million TPM (λΆ„λ‹Ή 토큰)

μ˜ˆμƒ λΉ„μš© (무료 ν‹°μ–΄ 초과 μ‹œ):

  • 짧은 λ…ΈνŠΈ (1000자): ~$0.001-0.002
  • κΈ΄ λ…ΈνŠΈ (5000자): ~$0.005-0.01
  • 전체 Vault (10개 λ…ΈνŠΈ): ~$0.05-0.10

Claude Desktop (Reasoning에 μ‚¬μš©)

무료 ν‹°μ–΄:

  • μΆ©λΆ„ν•œ μ‚¬μš©λŸ‰ 제곡

μž₯점:

  • βœ… MCP μ„œλ²„λŠ” Gemini API λΆˆν•„μš” (Graph DBμ—μ„œ raw data만 제곡)
  • βœ… Reasoning은 Claudeκ°€ 무료둜 처리
  • βœ… 전체 λΉ„μš© = Stage 1-2 처리 λΉ„μš©λ§Œ

Neo4j (Docker)

  • πŸ’Ύ 무료: Community Edition μ‚¬μš©
  • πŸ“¦ 둜컬 μ‹€ν–‰: ν΄λΌμš°λ“œ λΉ„μš© μ—†μŒ
  • πŸ”’ 데이터 μ†Œμœ κΆŒ: λͺ¨λ“  데이터가 λ‘œμ»¬μ— μ €μž₯

πŸ”Œ MCP Server둜 AI 도ꡬ와 연동

PKM μ‹œμŠ€ν…œμ„ Claude Desktop, Cursor λ“±μ—μ„œ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€!

MCP Serverκ°€ μ œκ³΅ν•˜λŠ” 도ꡬ (6개)

  1. search_entities - κ°œλ…(Entity) 검색
  2. get_entity_graph - νŠΉμ • κ°œλ… μ£Όλ³€ κ·Έλž˜ν”„
  3. find_related_notes - κ΄€λ ¨ Atomic Notes μ°ΎκΈ°
  4. find_entity_path - 두 κ°œλ… κ°„ μ—°κ²° 경둜
  5. get_graph_stats - Knowledge Graph 톡계
  6. run_cypher_query - μ‚¬μš©μž μ •μ˜ Cypher 쿼리

λΉ λ₯Έ μ„€μ •

# 1. Knowledge Graph ꡬ좕 (Stage 1-3)
./quick_start.sh

# 2. MCP Server ν…ŒμŠ€νŠΈ
uv run python mcp_server.py

# 3. Gemini CLI μ „μ—­ μ„€μ • 확인
# μ „μ—­ μ„€μ • νŒŒμΌμ— PKM MCP μ„œλ²„κ°€ 이미 μΆ”κ°€λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€
cat ~/.gemini/settings.json

μ „μ—­ μ„€μ • 파일 μœ„μΉ˜:

  • ~/.gemini/settings.json (ν™ˆ 디렉토리)

μ„€μ • μ˜ˆμ‹œ:

{
  "mcpServers": {
    "pkm-knowledge-graph": {
      "command": "/opt/homebrew/bin/uv",
      "args": ["run", "python", "mcp_server.py"],
      "cwd": "/Users/inyoungpark/Desktop/Projects/personal/PKM",
      "env": {
        "GEMINI_API_KEY": "your-key",
        "GEMINI_MODEL": "gemini-2.5-flash",
        "NEO4J_URI": "neo4j://127.0.0.1:7687",
        "NEO4J_USER": "neo4j",
        "NEO4J_PASSWORD": "password"
      }
    }
  }
}

πŸ‘‰ MCP Server μ„€μ • κ°€μ΄λ“œ - μžμ„Έν•œ μ„€μ • 방법

Gemini CLI μ‚¬μš© μ˜ˆμ‹œ

πŸ‘€ User: AI와 λ¨Έμ‹ λŸ¬λ‹μ΄ μ–΄λ–»κ²Œ μ—°κ²°λ˜μ–΄ μžˆλŠ”μ§€ μ•Œλ €μ€˜

πŸ€– Gemini: 
[search_entities 도ꡬ μ‚¬μš©]
[find_entity_path 도ꡬ μ‚¬μš©]
[find_related_notes 도ꡬ μ‚¬μš©]

AI와 λ¨Έμ‹ λŸ¬λ‹μ€ λ‹€μŒκ³Ό 같이 μ—°κ²°λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€:

경둜 1: AI β†’ is_parent_of β†’ λ¨Έμ‹ λŸ¬λ‹
경둜 2: AI β†’ includes β†’ λ”₯λŸ¬λ‹ β†’ is_part_of β†’ λ¨Έμ‹ λŸ¬λ‹

λ‹Ήμ‹ μ˜ λ…ΈνŠΈμ— λ”°λ₯΄λ©΄...
[raw dataλ₯Ό 기반으둜 Claudeκ°€ 직접 reasoning]

πŸ› 문제 ν•΄κ²°

자주 λ¬»λŠ” 질문

Q: Neo4j μ—°κ²° μ‹€νŒ¨

# Docker μƒνƒœ 확인
docker-compose ps

# Neo4j μž¬μ‹œμž‘
docker-compose restart neo4j

# 둜그 확인
docker-compose logs neo4j

Q: uv: command not found

# PATH μΆ”κ°€
echo 'export PATH="$HOME/.cargo/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc

Q: MCP Serverκ°€ Claudeμ—μ„œ 보이지 μ•ŠμŒ

# 1. Neo4j μ‹€ν–‰ 확인
docker-compose ps

# 2. MCP μ„œλ²„ μˆ˜λ™ ν…ŒμŠ€νŠΈ
uv run python mcp_server.py

# 3. Claude Desktop 둜그 확인 (Cmd+Option+I)

더 λ§Žμ€ 문제 ν•΄κ²° 방법은 **μ„€μΉ˜ κ°€μ΄λ“œ**λ₯Ό μ°Έκ³ ν•˜μ„Έμš”.

πŸ” κ°œμΈμ •λ³΄ 보호

.gitignore에 λ‹€μŒμ΄ μžλ™μœΌλ‘œ μ œμ™Έλ©λ‹ˆλ‹€:

  • .env - API ν‚€
  • atomic_notes/ - μƒμ„±λœ Atomic Notes
  • atomic_notes_md/ - μƒμ„±λœ Markdown
  • .venv/, venv/ - Python κ°€μƒν™˜κ²½
  • neo4j/data/ - Neo4j λ°μ΄ν„°λ² μ΄μŠ€
  • mcp_config.json - 둜컬 MCP μ„€μ •

πŸš€ λ‹€μŒ 단계

ν˜„μž¬ μ™„λ£Œ:

  • βœ… Stage 1-3: Knowledge Graph ꡬ좕
  • βœ… MCP Server: Raw Data 제곡
  • βœ… Claude/Cursor 연동

ν–₯ν›„ κ³„νš:

  • πŸ”œ Vector Search 톡합 - Semantic Search κ°•ν™”
  • πŸ”œ Web Interface - μ‹œκ°μ  Graph 탐색
  • πŸ”œ Real-time Sync - Obsidian ↔ Neo4j μ–‘λ°©ν–₯ 동기화
  • πŸ”œ Multi-Vault 지원 - μ—¬λŸ¬ Obsidian Vault 톡합

πŸ“ λΌμ΄μ„ΌμŠ€

MIT License

πŸ™ κ°μ‚¬μ˜ 말

  • Obsidian - κ°•λ ₯ν•œ λ…ΈνŠΈ μž‘μ„± 도ꡬ
  • Neo4j - λ›°μ–΄λ‚œ Graph Database
  • Google Gemini - κ³ ν’ˆμ§ˆ LLM API
  • FastMCP - κ°„νŽΈν•œ MCP μ„œλ²„ ν”„λ ˆμž„μ›Œν¬
  • uv - μ΄ˆκ³ μ† Python νŒ¨ν‚€μ§€ κ΄€λ¦¬μž
  • Anthropic Claude - MCP와 ν•¨κ»˜ν•˜λŠ” 졜고의 AI Assistant

Made with ❀️ for Personal Knowledge Management

MCP μ² ν•™: Raw Data Provider, Reasoning은 LLMμ—κ²Œ

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published