The full upstream README, mirrored here for reference. Install config, tool schemas, adoption signals, and an original overview live on the Sunub Obsidian MCP Server listing page.
obsidian-mcp-server는 Obsidian Vault의 Markdown 문서를 AI 에이전트가 조회하고, 관련 근거를 선별하고, 컨텍스트로 압축해 활용할 수 있게 해주는 로컬 우선 MCP 서버입니다.
이 프로젝트에서 RAG는 특정 벡터 DB나 검색 엔진 선택을 뜻하지 않습니다. RAG는 Vault에서 후보 문서를 찾고, Agent 작업에 맞는 근거를 고르고, 컨텍스트 윈도우에 맞게 압축해 제공하는 Agent Context Pipeline입니다.
memory_packet 형태로 압축합니다.@huggingface/transformers, LanceDB, local reranker를 사용해 semantic retrieval을 로컬에서 수행합니다.Elasticsearch 같은 검색 엔진도 retrieval backend로 사용할 수 있는 대안입니다. 다만 이 프로젝트의 기본 목표는 외부 서비스나 별도 검색 엔진에 의존하지 않는 로컬 단독 작업이므로, embedded retrieval stack을 기본값으로 선택합니다.
vault
search: 키워드와 의미 기반 검색을 결합한 하이브리드 후보 탐색read: 특정 노트 본문과 메타데이터 조회list_all: Vault 문서 목록 조회stats: Vault 및 인덱스 상태 조회collect_context: 주제와 연관된 문서를 선별해 memory_packet 생성load_memory: 저장된 컨텍스트 메모리 스냅샷 로드generate_property: 문서 내용을 바탕으로 frontmatter 후보 생성write_property: frontmatter 쓰기create_document_with_properties: 문서 분석 후 속성 생성/쓰기 2단계 워크플로우organize_attachments: 문서 내 첨부파일 정리 및 링크 갱신현재 기본 retrieval backend는 다음 순서로 동작합니다.
Indexer로 정확한 단어 매칭 후보를 찾습니다.로컬 embedding/reranking 모델이 설치되지 않은 경우 서버는 키워드 검색으로 폴백합니다.
이 명령은 로컬 semantic search와 reranking에 필요한 모델을 캐시에 설치합니다.
이미 패키지를 설치한 환경에서는 다음처럼 실행할 수도 있습니다.
모델 설치가 없으면 기본 키워드 검색은 동작하지만, semantic search와 reranking 품질은 사용할 수 없습니다.
Claude Desktop, Cursor, Copilot 등 MCP 클라이언트에는 다음처럼 등록합니다.
VAULT_DIR_PATH는 반드시 본인의 Vault 절대 경로로 바꿔야 합니다.
| 환경변수 | 기본값 | 용도 | 필수 |
|---|---|---|---|
VAULT_DIR_PATH | 없음 | Obsidian Vault 절대 경로 | 예 |
LOGGING_LEVEL | info | debug, info, warn, error | 아니오 |
LLM_API_URL | http://127.0.0.1:8080 | CLI UI가 사용할 OpenAI 호환 로컬 LLM endpoint | CLI 사용 시 |
LLM_CHAT_MODEL | llama3 | CLI UI 답변 생성 모델명 | CLI 사용 시 |
MCP 서버의 Vault 검색/읽기 도구에는 VAULT_DIR_PATH가 핵심 설정입니다. LLM_API_URL과 LLM_CHAT_MODEL은 저장소에 포함된 개발용 CLI UI에서 대화형 스트리밍 답변을 받을 때 필요합니다.
이 저장소에는 터미널 기반 AI Agent UI가 포함되어 있습니다. 이 CLI는 npm 패키지의 공개 bin이 아니라 저장소 개발 환경에서 실행하는 진입점입니다.
이 CLI의 목적은 Obsidian Vault를 단순히 검색하는 수준을 넘어서, MCP 도구 호출, 조건부 RAG 기반 문맥 수집, OpenAI 호환 LLM endpoint 스트리밍 응답을 하나의 대화형 작업 흐름으로 묶는 데 있습니다. 즉, 단순한 "채팅 UI"만 구현하는 곳이 아니라, Vault와 도구, 모델 사이를 연결하는 오케스트레이션 레이어입니다.
프로젝트의 문서와 설계 방향을 기준으로 보면, 이 CLI는 다음 문제를 해결하거나 완화하기 위해 만들어졌습니다.
collect_context 기반 압축 요약과 대량 입력 오프로딩을 통해 긴 문서나 대형 paste를 그대로 모델에 밀어넣지 않습니다.사용자는 터미널에서 자연어로 질문을 입력하고, CLI는 LLM 서버와 통신해 답변을 스트리밍합니다.
pending 상태로 관리합니다.CLI는 MCP 서버에 연결된 도구를 터미널에서 직접 사용할 수 있게 합니다.
/search, /read, /stats, /context, /tools 같은 슬래시 커맨드를 제공합니다.이 CLI는 모든 일반 질문에 대해 자동으로 RAG를 수행하지는 않습니다. 현재 구현 기준으로는 입력 텍스트에서 vault 도구나 관련 서버/도구 이름이 트리거된 경우에만 Vault 문맥 수집을 시도하고, 이를 <context> 블록으로 정리해 프롬프트에 주입합니다.
collect_context 액션을 활용해 관련 문서를 배치 단위로 수집합니다.memory_packet과 고연관 문서 excerpt를 조합해 LLM 입력을 구성합니다.긴 코드, 로그, 문서가 붙여넣기되면 이를 그대로 모델에 보내는 대신 안전하게 축약/오프로딩합니다.
CLI UI는 응답이 끝난 뒤 한 번에 보여주는 구조가 아니라, 생성 중인 상태를 즉시 보여주는 흐름을 중심으로 설계되어 있습니다.
| 영역 | 역할 | 대표 파일 |
|---|---|---|
| 부팅 및 환경 확인 | LLM endpoint 확인, 초기 로더/에러 화면 제어 | AppContainer.tsx, ui/LLMHealthChecker.tsx, ui/LLMStatusLoader.tsx |
| MCP 연결 관리 | 설정 파일 기반 MCP 서버 연결, 도구 목록 수집, 멀티 서버 상태 관리 | hooks/useMcpManager.ts, services/McpClientService.ts, config/mcpServersConfig.ts |
| 입력 시스템 | Raw key 처리, paste 버퍼링, 멀티라인 편집, 히스토리 탐색 | context/KeypressContext.tsx, ui/InputPrompt.tsx, key/ |
| 명령 디스패치 | 슬래시 커맨드를 MCP 도구 호출로 변환 | hooks/useDispatcher.ts |
| RAG 컨텍스트 수집 | Vault 관련 도구가 트리거된 질문에서만 문맥을 수집해 프롬프트에 주입 | hooks/useRagContext.ts |
| LLM 스트리밍 루프 | 스트리밍 응답, tool call 실행, thinking 파싱 | hooks/useLlmStream/useLlmStream.ts |
| 렌더링 및 세션 관리 | 히스토리 출력, pending 응답 표시, transient UI 메시지 관리 | ui/MainContent.tsx, hooks/useHistoryManager.ts |
| 대량 입력 최적화 | 큰 붙여넣기 입력 오프로딩 및 임시 파일 정리 | services/InputOffloadService.ts |
이 CLI는 다음 원칙을 중심으로 설계됩니다.
현재 코드 기준으로 기본 제공되는 대표 슬래시 커맨드는 다음과 같습니다.
/search <keyword>: Vault 하이브리드 검색/read "filename": 특정 문서 열람/semantic <query>: 시맨틱 검색/stats: Vault 상태 확인/index: 벡터 인덱스 갱신/context <topic>: 토픽 기반 문맥 수집/organize <keyword>: 첨부 정리 도구 실행/genprop <filename>: frontmatter 생성 도구 호출/tools: 연결된 MCP 도구 목록 확인/help: 도움말 표시/clear: 화면/대화 상태 초기화/quit, /exit: CLI 종료현재 CLI 진입점은 저장소 개발 환경용 실행 방식입니다. 패키지의 bin 엔트리는 MCP 서버용이며, CLI UI는 루트에서 별도 스크립트로 실행됩니다.
저장소 루트에서 의존성을 설치하고 서버를 먼저 빌드합니다.
이 저장소 루트에는 기본 mcp-servers.json이 포함되어 있으며, node ./build/index.js로 서버를 실행합니다.
그 다음 OpenAI 호환 로컬 LLM 서버를 실행합니다. 예를 들어 llama.cpp의 llama-server를 8080 포트에 띄울 수 있습니다.
CLI는 다음처럼 환경 변수를 주입하여 실행합니다:
CLI는 실행 시 현재 작업 디렉터리에서 다음 파일을 순서대로 찾습니다.
mcp-servers.json.mcp-servers.json설정 파일이 없으면 환경 변수 기반 fallback을 시도하지만, 가장 안전한 실행 방식은 저장소 루트에서, build/index.js가 준비된 상태로 실행하는 것입니다.
npx @sunub/obsidian-mcp-server는 MCP 서버를 띄울 뿐 CLI UI를 실행하지 않습니다.mcp-servers.json 또는 .mcp-servers.json이 유효해야 합니다.VAULT_DIR_PATH가 없거나 잘못되면 Vault 관련 도구가 동작하지 않습니다.setup으로 로컬 모델을 설치해야 합니다.VAULT_DIR_PATH가 없거나 잘못되면 Vault 관련 도구가 동작하지 않습니다.setup으로 로컬 모델을 설치해야 합니다.vault 관련 명령, 서버명, 도구명이 입력에서 트리거될 때만 사전 문맥 수집을 시도합니다.collect_context는 긴 주제 정리와 메모리 패킷 생성에 적합하고, 단건 조회는 search나 read가 더 단순합니다.Apache-2.0