# Logseq MCP Server
NestJS 기반 Logseq MCP (Model Context Protocol) 서버입니다.
## 📚 문서 가이드
- **[빠른 시작 (QUICKSTART.md)](./QUICKSTART.md)** - 5분 안에 설정하고 실행하기
- **[사용 예시 (EXAMPLES.md)](./EXAMPLES.md)** - 실제 사용 시나리오별 예시 모음
- **[개발 진행 (PROGRESS.md)](./PROGRESS.md)** - 프로젝트 개발 현황 및 로드맵
- **README.md (이 문서)** - 상세한 기능 설명 및 개발자 가이드
**처음 사용하시나요?** → [QUICKSTART.md](./QUICKSTART.md) 부터 시작하세요!
---
## 개요
이 프로젝트는 Logseq HTTP API를 활용하여 AI 에이전트가 Logseq 그래프와 상호작용할 수 있도록 MCP 도구, 리소스, 프롬프트를 제공합니다.
## 주요 기능
### MCP Tools
- **Journal Tool**: 저널 페이지 생성 및 조회
- **Page Tool**: 페이지 CRUD 및 참조 관리
- **Block Tool**: 블록 CRUD 및 참조 관리
- **Search Tool**: 전문 검색 및 그래프 정보 조회
- **Dev Tool**: 프로젝트 개발 기록 관리 (진행 상황, ADR, TODO, 아이디어)
### MCP Resources
- **Concept Documents**: 프로젝트 개념 설계 문서 접근
- **Project Architecture**: 아키텍처 및 구조 정보
- **Tools Reference**: MCP 도구 참조 문서
### MCP Prompts
- **dev-implement-feature**: 새 기능 구현 가이드
- **dev-code-review**: 코드 리뷰 요청
- **dev-debug-issue**: 이슈 디버깅
- **dev-refactor-suggestion**: 리팩토링 제안
- **dev-project-status**: 프로젝트 상태 파악
## 요구사항
- Node.js 18+
- pnpm 10+
- Logseq (HTTP API 활성화 필요)
## 설치
```bash
pnpm install
```
## 환경 설정
`.env.example`을 `.env`로 복사하고 설정을 수정하세요:
```bash
cp .env.example .env
```
```env
# Logseq 연결 설정
LOGSEQ_HOST=127.0.0.1
LOGSEQ_PORT=12315
LOGSEQ_TOKEN=your-api-token
# 프로젝트 설정 (다른 프로젝트에 적용 시 수정)
PROJECT_NAME=my-project # 개발 기록이 연결될 Logseq 페이지 이름
DOCS_PATH=./docs # 개념 설계 문서 경로
```
## 다른 프로젝트에 적용
이 MCP 서버는 어떤 프로젝트에도 적용할 수 있습니다:
1. **환경변수 설정**
```env
PROJECT_NAME=your-project-name # Logseq에서 사용할 프로젝트 페이지
DOCS_PATH=./your-docs-folder # 설계 문서 경로
```
2. **문서 구조** (선택)
```
your-docs-folder/
├── integration/
│ └── concept-design.md
├── architecture/
│ └── overview.md
└── ...
```
3. **MCP 클라이언트 설정**
Claude Desktop 등 MCP 클라이언트에서 이 서버를 연결하면 됩니다.
## 실행
```bash
# 개발 모드
pnpm run start:dev
# 프로덕션 모드
pnpm run start:prod
# 빌드
pnpm run build
```
## 테스트
```bash
# 단위 테스트
pnpm run test
# E2E 테스트
pnpm run test:e2e
# 테스트 커버리지
pnpm run test:cov
```
## MCP 도구 목록
### Journal
- `logseq_add_journal_entry`: 저널에 항목 추가
- `logseq_get_today_journal`: 오늘의 저널 조회
- `logseq_get_journal_by_date`: 특정 날짜 저널 조회
### Page
- `logseq_get_page`: 페이지 조회
- `logseq_create_page`: 페이지 생성
- `logseq_get_page_blocks`: 페이지의 블록 목록 조회
- `logseq_get_page_references`: 페이지 참조 조회
### Block
- `logseq_get_block`: 블록 조회
- `logseq_create_block`: 블록 생성
- `logseq_update_block`: 블록 수정
- `logseq_delete_block`: 블록 삭제
- `logseq_get_block_references`: 블록 참조 조회
### Search
- `logseq_search`: 전문 검색
- `logseq_get_graph_info`: 그래프 정보 조회
- `logseq_get_all_pages`: 모든 페이지 목록 조회
### Dev (개발 기록)
- `dev-log-progress`: 개발 진행 상황 기록
- `dev-decision`: 기술적 결정 사항(ADR) 기록
- `dev-todo`: 개발 TODO 추가
- `dev-idea`: 개발 아이디어 기록
- `dev-get-project-logs`: 프로젝트 개발 로그 조회
## MCP 리소스
| URI | 설명 |
|-----|------|
| `mcp://concepts/logseq-mcp-concept-design` | 핵심 개념 설계 문서 |
| `mcp://concepts/logseq-mcp-user-flows` | 사용자 플로우 문서 |
| `mcp://project/architecture` | 프로젝트 아키텍처 |
| `mcp://project/tools-reference` | MCP 도구 참조 |
| `mcp://concepts/{category}/{document}` | 동적 개념 문서 조회 |
## 동작 원리
### 아키텍처 개요
```
┌─────────────────────────────────────────────────────────────────┐
│ MCP Client (Claude Desktop 등) │
│ - MCP Protocol 통신 │
└────────────────────────────┬────────────────────────────────────┘
│
│ MCP Protocol (stdio/HTTP)
│
┌────────────────────────────▼────────────────────────────────────┐
│ Logseq MCP Server (NestJS) │
│ │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────────┐ │
│ │ Tools │ │ Resources │ │ Prompts │ │
│ │ (Actions) │ │ (Documents) │ │ (Templates) │ │
│ └──────┬───────┘ └──────┬───────┘ └──────────────────┘ │
│ │ │ │
│ └─────────┬───────┘ │
│ │ │
│ ┌─────────▼────────┐ │
│ │ Logseq Client │ │
│ │ (HTTP Wrapper) │ │
│ └─────────┬────────┘ │
└───────────────────┼────────────────────────────────────────────┘
│
│ HTTP API (REST)
│
┌───────────────────▼────────────────────────────────────────────┐
│ Logseq Application │
│ - Graph Database │
│ - HTTP API Server (Port 12315) │
└─────────────────────────────────────────────────────────────────┘
```
### 주요 컴포넌트
1. **MCP Tools** (`src/tools/`)
- MCP Protocol의 Tool 제공
- 사용자 요청을 Logseq API 호출로 변환
- 입력 검증 (Zod 스키마)
2. **MCP Resources** (`src/resources/`)
- 정적 문서 및 컨텍스트 제공
- 프로젝트 개념 문서 노출
3. **MCP Prompts** (`src/prompts/`)
- 개발 워크플로우 템플릿
- AI 에이전트 가이드라인
4. **Logseq Client** (`src/logseq/`)
- Logseq HTTP API 래퍼
- 에러 처리 및 타입 안전성
---
## 따라하기 가이드
### 단계 1: Logseq 설정
1. **Logseq 설치**
- [Logseq 공식 사이트](https://logseq.com/) 에서 다운로드
2. **HTTP Server 활성화**
```
Logseq 실행 → Settings → Advanced → API Server
✅ Enable HTTP APIs server
Port: 12315 (기본값)
```
3. **API Token 생성**
```
Settings → Advanced → API Server → Generate Token
→ 토큰 복사 (예: abc123def456...)
```
### 단계 2: MCP 서버 설정
1. **프로젝트 클론 및 설치**
```bash
cd logseq-mcp
pnpm install
```
2. **환경 변수 설정**
```bash
# .env 파일 생성
cat > .env << 'EOF'
# Logseq 연결 설정
LOGSEQ_HOST=127.0.0.1
LOGSEQ_PORT=12315
LOGSEQ_TOKEN=your-api-token-here
# 프로젝트 설정
PROJECT_NAME=ego
DOCS_PATH=../concepts
EOF
# 실제 토큰으로 교체
# vi .env 로 LOGSEQ_TOKEN 수정
```
3. **서버 시작**
```bash
pnpm run start:dev
```
정상 실행 시 출력:
```
[Nest] 12345 - 12/02/2024, 10:00:00 AM LOG [NestFactory] Starting Nest application...
[Nest] 12345 - 12/02/2024, 10:00:00 AM LOG [InstanceLoader] AppModule dependencies initialized
[Nest] 12345 - 12/02/2024, 10:00:00 AM LOG [McpServer] MCP Server started
```
### 단계 3: VS Code GitHub Copilot 연동 (권장)
> VS Code 1.85+ 버전과 GitHub Copilot 확장이 필요합니다.
1. **mcp.json 파일 복사 및 수정**
```bash
# 워크스페이스 설정 (프로젝트별 설정)
mkdir -p .vscode
cp logseq-mcp/mcp.json.example .vscode/mcp.json
# mcp.json 수정
code .vscode/mcp.json
```
2. **mcp.json 설정 형식**
```jsonc
{
"$schema": "https://raw.githubusercontent.com/microsoft/vscode/main/extensions/chat/syntaxes/mcp.schema.json",
"servers": {
"logseq-mcp": {
"command": "node",
"args": [
"/path/to/logseq-mcp/dist/main.js"
],
"env": {
"LOGSEQ_HOST": "127.0.0.1",
"LOGSEQ_PORT": "12315",
"LOGSEQ_TOKEN": "your-logseq-api-token",
"PROJECT_NAME": "my-project",
"DOCS_PATH": "/path/to/docs"
}
}
}
}
```
3. **환경 변수 활용 (팀 공유 시 권장)**
```jsonc
{
"servers": {
"logseq-mcp": {
"command": "node",
"args": ["${workspaceFolder}/logseq-mcp/dist/main.js"],
"env": {
"LOGSEQ_HOST": "127.0.0.1",
"LOGSEQ_PORT": "12315",
"LOGSEQ_TOKEN": "${env:LOGSEQ_TOKEN}",
"PROJECT_NAME": "ego",
"DOCS_PATH": "${workspaceFolder}/concepts"
}
}
}
}
```
```bash
# 각 팀원이 환경 변수 설정
export LOGSEQ_TOKEN=your-personal-token
```
4. **VS Code 재시작** 후 GitHub Copilot Chat에서 사용
### 단계 4: Claude Desktop 연결 (대안)
1. **Claude Desktop 설정 파일 열기**
```bash
# macOS
open ~/Library/Application\ Support/Claude/claude_desktop_config.json
# 또는 직접 편집
code ~/Library/Application\ Support/Claude/claude_desktop_config.json
```
2. **MCP 서버 추가**
```json
{
"mcpServers": {
"logseq-mcp": {
"command": "node",
"args": [
"/path/to/logseq-mcp/dist/main.js"
],
"env": {
"LOGSEQ_HOST": "127.0.0.1",
"LOGSEQ_PORT": "12315",
"LOGSEQ_TOKEN": "your-api-token-here",
"PROJECT_NAME": "my-project",
"DOCS_PATH": "/path/to/docs"
}
}
}
}
```
3. **빌드 및 재시작**
```bash
# MCP 서버 빌드
cd logseq-mcp
pnpm run build
# Claude Desktop 재시작
```
### 단계 5: 실제 사용 예시
Claude Desktop에서 다음과 같이 테스트:
#### 예시 1: 오늘 할 일 기록
```
User: 오늘 journal에 "MCP 서버 설정 완료" 기록해줘
Claude: [logseq_add_journal_entry 호출]
✅ 오늘의 journal에 기록했습니다:
- MCP 서버 설정 완료
```
#### 예시 2: 페이지 생성
```
User: "MCP 학습 노트" 페이지 만들어줘
Claude: [logseq_create_page 호출]
✅ "MCP 학습 노트" 페이지를 생성했습니다.
```
#### 예시 3: 검색
```
User: "NestJS" 관련 내용 찾아줘
Claude: [logseq_search 호출]
📝 검색 결과 (3건):
1. logseq-mcp/README.md - "NestJS 기반 Logseq MCP..."
2. ...
```
#### 예시 4: 개발 기록 (Dev Tool)
```
User: 프로젝트 진행 상황 기록해줘
- MCP 서버 초기 설정 완료
- Claude Desktop 연동 성공
Claude: [dev-log-progress 호출]
✅ ego 프로젝트에 진행 상황을 기록했습니다.
```
### 단계 6: 고급 활용
#### 프로젝트 특화 설정
```bash
# 다른 프로젝트에 적용
cd ~/my-project
cp ~/software-park/ego/logseq-mcp/.env .env.myproject
# .env.myproject 수정
PROJECT_NAME=my-awesome-project
DOCS_PATH=./docs
# 전용 서버 실행
cd ~/software-park/ego/logseq-mcp
DOTENV_CONFIG_PATH=~/my-project/.env.myproject pnpm run start:dev
```
#### 개발 프롬프트 활용
Claude에서 다음 프롬프트 사용:
```
Use prompt: dev-implement-feature
기능: 사용자 인증 추가
```
```
Use prompt: dev-code-review
파일: src/auth/auth.service.ts
```
---
## 트러블슈팅
### 1. "Connection refused" 에러
```bash
# Logseq HTTP Server가 실행 중인지 확인
curl http://127.0.0.1:12315/api/health
# 실패 시: Logseq 설정 확인
# Settings → Advanced → Enable HTTP APIs server ✅
```
### 2. "Invalid token" 에러
```bash
# 토큰 재생성
# Logseq → Settings → Advanced → API Server → Generate Token
# .env 파일 업데이트
LOGSEQ_TOKEN=new-token-here
```
### 3. MCP 도구가 보이지 않음
```bash
# 빌드 확인
pnpm run build
# Claude Desktop 설정 확인
cat ~/Library/Application\ Support/Claude/claude_desktop_config.json
# Claude Desktop 완전 재시작 (강제 종료 후 재실행)
```
### 4. 개념 문서를 찾을 수 없음
```bash
# DOCS_PATH 확인
echo $DOCS_PATH
ls -la "$DOCS_PATH"
# 환경 변수 설정 권장 (절대 경로)
export DOCS_PATH="/path/to/your/docs"
```
---
## 개발자 가이드
### 새로운 Tool 추가하기
1. **Tool 파일 생성** (`src/tools/my-new.tool.ts`)
```typescript
import { Injectable } from '@nestjs/common';
import { McpTool, ToolResult } from '@rekog/mcp-nest';
import { z } from 'zod';
import { LogseqClient } from '../logseq/logseq.client';
@Injectable()
export class MyNewTool {
constructor(private readonly logseq: LogseqClient) {}
@McpTool({
name: 'my_new_tool',
description: '새로운 기능 설명',
schema: z.object({
param: z.string().describe('파라미터 설명'),
}),
})
async execute(args: { param: string }): Promise<ToolResult> {
const result = await this.logseq.someApiCall(args.param);
return {
content: [{ type: 'text', text: JSON.stringify(result) }],
};
}
}
```
2. **ToolsModule에 등록** (`src/tools/tools.module.ts`)
```typescript
@Module({
imports: [LogseqModule],
providers: [
// ... 기존 도구들
MyNewTool,
],
})
export class ToolsModule {}
```
3. **테스트 및 빌드**
```bash
pnpm run build
pnpm run start:dev
```
### 디버깅
```bash
# 디버그 모드 실행
pnpm run start:debug
# VS Code에서 디버깅
# .vscode/launch.json에 설정 추가 후 F5
```
---
## 🔒 보안 가이드
### 민감 정보 취급
**⚠️ 중요: 다음을 절대 저장소에 커밋하지 마세요**
- API 토큰 (LOGSEQ_TOKEN)
- 비밀번호
- 개인 정보 (이메일, 전화번호, 주소)
- 사용자 이름이 포함된 절대 경로
### 안전한 관리법
1. **환경 변수 사용**
```bash
# 로컬 개발
export LOGSEQ_TOKEN="your-token"
pnpm run start:dev
```
2. **.env 파일 관리**
- `.env` 파일은 `.gitignore`에 등록되어 있습니다
- `.env.example`만 저장소에 커밋하세요
3. **토큰 노출 시 대응**
- Logseq에서 즉시 토큰 폐기 및 새 토큰 발급
- 모든 클라이언트에서 새 토큰으로 업데이트
4. **코드 리뷰**
- 절대 경로나 토큰이 로그/에러 메시지에 노출되지 않는지 확인
- 민감한 데이터는 마스킹하여 로깅
---
## 라이선스
MIT