Skip to main content
Glama

Seekstone

obsidian-mcp-server (다운로드 수 1위)

REST 프록시 서버

로컬 REST API 플러그인

불필요

필요

필요

Obsidian 앱 실행

불필요 — Obsidian을 닫아도 동작

필요

필요

검색 페이로드 @ 10k 노트

2.0 KB

47 KB

최대 95 MB

웜 검색 지연 시간 @ 10k 노트

6.2 ms

732 ms (~118× 느림)

최대 1,550 ms

구조화된 frontmatter 쿼리

내장 (query_notes) — 속성/날짜/크기 조건, 수백 바이트로 응답

REST를 통한 JSONLogic

서버마다 상이

동일한 쿼리, 동일한 커밋된 볼트, 각각 20회 실행, 단일 머신에서 위와 같이 연습 — 수집 결과는 2026년 6월–8월 스냅샷(각 커밋 리포트에 포함)이며, 아래의 8개 서버와 3가지 볼트 크기 비교 전체 결과harness에서 완전재 재현할 수 있습니다.



Seekstone이란 무엇인가요?

Seekstone은 Obsidian MCP 서버입니다. Claude(그리고 모든 Model Context Protocol 클라이언트)가 Obsidian 볼트에 직접 읽기/쓰기 접근할 수 있게 해줍니다. Obsidian 앱이 켜져 있을 필요도, 플러그인이 필요하지도 없습니다. 그리고 그 어떤 데이터도 여러분의 컴퓨터 밖으로 나가지 않습니다.

Obsidian Local REST API 플러그인을 경유하는 다른 아니라 볼트를 디스크에서 직접 읽고, 프로세스 내부에 웜(warm) 전체 텍스트 인덱스를 유지합니다. 실질적인 차이점은 두 가지입니다:

  • 속도. 웜 상태의 키워드 검색은 한 자릿수 밀리초(ms) 단위로, 시맨틱 검색은 ~14 ms 안에 반환됩니다. 하위 프로세스를 생성하거나 HTTP 요청을 쿼리 당 왕복할 필요가 없기 때문에, 우리가 벤치마킹한 다른 모든 Obsidian MCP 서버보다 ~440배 이상 빠릅니다.

  • 컨텍스트. REST 프록시 서버를 거치면 수십 MB와 수백만 토큰을 반환했을 광범위한 검색이, Seekstone에서는 ~2 KB만 반환합니다. 이는 최대 ~47,000배의 컨텍스트 절감이며, 볼트가 커짐에 따라 이 차이는 계속 더 넓어집니다.

검색은 세 가지 모드로 제공됩니다: 우선순위가 매겨진 전문 검색(퍼지 및 접두어 일치), 선택적인 로컬 시맨틱 검색(의미 기반으로, 소형 온디바이스 임베딩 모델을 사용 — 시작 시 선택 & 일회성 30 MB 모델 다운로드 후 런타임에서 오프라인으로 동작), 그리고 구조화된 메타데이터 쿼리가 있습니다. query_notes는 frontmatter 속성(status, due, type, ...), 태그, 폴더, 수정 시각, 크기로 필터링하여 "이번 주에 변경된 초안 노트는?" 같은 질문에 검색-읽기 루프 없이 수백 바이트 만으로 답합니다.

Claude는 컨텍스트 윈도우 대부분을 한 번의 도구 호출로 소모하지 않으면서, 전체 노트 라이브러리를 밀리초 단위로 검색하고 읽을 수 있습니다.

npm에 peedstone으로 배포되어 있습니다 — npx -y seekstone로 설치할 수 있습니다. (이전에는 obsidian-mcp-seekstone으로도 배포되었던 별칭은 deprecated이만 기존 설치본은 계속 작동합니다.)


Related MCP server: mcp-obsidian-ek

왜 Seekstone인가? 수치로 보세요.

대부분의 Obsidian MCP server는 검색 결과에 대해 노트 전체 내용을 반환합니다. 광범위한 쿼리 하나당 LLM이 처리해야할수 MB 규모의 텍스트 되어, 대부분은 관련없고 모두 컨텐스트 윈도를 태울 수 있습니다.

Seekstone는 그 대신 짧고 순위화된 발췌만 반환합니다(기본값 약 120자, 쿼리마다 조절 가능). Seekstone는 다른 7개의 Obsidian MCP 서버 — 총 8개 — 와 1,000 / 5,000 / 10,000 노트 의 세 가지 **서버 볼트 크기(각 20회 실행)**에서 비교했습니다. 아래의 모든 수치는 완전히 재현 가능합니다 — 이 저장소에 커먼된 볼트가 포함되어 있으므로(1910년 공공 도메인 1911 Encyclopædia Britannica 기반), 직접 클론하여 동일한 벤치마크를 실행할 수 있습니다.

세 가지 크기로 시험하는 요지는 아키텍처가 드러나는 지점이 바로 여기이기 때문입니다 — 실제 볼트는 계속 커집니다.

검색 페이로드 — 쿼리당 반환되는 바이트(컨텍스트 비용; 낮을수록 좋음)

서버

아키텍처

1k 노트

5k 노트

10k 노트

Seekstone

인프로스 인덱스

1.6 KB

1.8 KB

2.0 KB

mcpvault

파일시스템 직접 하위 프로세스

1.7 KB

1.9 KB

2.2 KB

obsidian-mcp-rs

파일시스템 직접, 쿼리별 스캔

5.4 KB

5.8 KB

6.2 KB

obsidian-tc

SQLite 플랫폼

4.6 KB

6.8 KB

7.2 KB

obsidian-mcp-server

REST API

55 KB

47 KB

47 KB

obsidian-mcp-pro

파일시스템 직접 하위 프로세스

25 KB

84 KB

114 KB

obsidian-mcp

파일시스템 직접 하위 프로세스

18 KB

105 KB

201 KB

mcp-obsidian

REST API

9.8 MB

45 MB

95 MB

Seekstone은 볼트 크기와 무관하게 ~2 KB로 평평하게 유지됩니다. 항상 순위 기반 발췌를 반환하기 때문에, 그리고 이제는 테스트된 모든 server 중 가장 작은 페이로드를 기록하며 세 크기 모두 mcpvault까지 제친다는 점이 됩니다. REST 프록시 서버들은 모든 일치 항목에 노트 전체를 반환하므로 볼트가 커질수록 페이로드가 커집니다 — mcp-obsidian은 10k 노트에서 95 MB까지 이릅니다. 그리고 광범위한 단일 쿼리(the capital of)는 20회 실행 동안 호출당 평균 370 MB / 97.8 million tokens을 반환했습니다. 10k 노트에서 이는 ~47,000배 의 컨텍스트 비용 차이입니다.

검색 지연 — 웜(캐시) 상태 평균, ms(낮을수록 좋음)

서버

1k notes

5k notes

10k notes

Seekstone @10k 대비

🥇 Seekstone

1.1

3.1

6.2

obsidian-mcp-rs

6.1

19

37

~6배 느림

obsidian-mcp-pro

46

213

430

~70배 느림

obsidian-mcp-server

82

356

732

~118배 느림

obsidian-mcp

82

405

811

~131배 느림

mcpvault

96

467

958

~155배 느림

mcp-obsidian

164

740

1,550

~250배 느림

obsidian-tc

264

1,302

2,714

~440배 느림

모든 경쟁 제품은 쿼리마다 서브프로세스를 생성하거나 HTTP 왕복을 수행하며, 대부분 볼트 크기에 비례해 증가하는 작업을 수행합니다. Seekstone은 이미 준비된 인메모리 인덱스를 유지하므로 — IPC도 네트워크도 없이 — 키워드 검색이 10,000개 노트에서도 수 밀리초(ms) 단위로 유지됩니다 (시맨틱 모드는 평균적으로 ~8ms의 임베딩 및 스캔을 추가합니다). 이 격차는 규모가 커질수록 더 벌어집니다: 1k → 10k 노트 사이에서 경쟁 제품들은 5–10배 느려지지만, Seekstone은 거의 움직임이 없습니다. 가장 빠른 대안조차도 — obsidian-mcp-rs (쿼리마다 볼트를 재스캔) — 10k 노트의 웜 상태에서 **~6배 느리고 페이로드가 3×**이며, REST 프록시 계열은 ~90–250배 느립니다.

Seekstone은 우리 벤치마크 세트에서 모든 볼트 크기에 대해 약 2KB 페이로드와 수 밀리초 단위의 키워드 지연시간을 동시에 제공하는 유일한 서버입니다 — 그리고, 우리가 아는 한, 공개적이고 재현 가능한 벤치마크를 제공하는 유일한 Obsidian MCP 서버입니다. 하네스, 합성 볼트, 전체 결과는 모두 오픈소스입니다: benchmark-scaling.mdharness를 참조하세요. 클론하고, 실행하고, 직접 확인하세요.


설치

자신에게 맞는 방법을 선택하세요.

AI 에이전트를 사용하시나요? 이 프롬프트를 붙여넣으세요

Claude Code, Cursor, 또는 다른 코딩 에이전트를 사용한다면, 직접 설치 절차를 따를 필요가 없습니다 — 이 프롬프트를 붙여넣으면 에이전트가 설치를 처리합니다:

이 에디터에 seekstone MCP 서버를 설치해 줘. npx -y seekstone init --client code --write를 실행해 (다른 클라이언트는 desktop, cursor, 또는 vscode를 사용해). 내 Obsidian 볼트를 자동으로 감지해. 여러 개가 나열되면 어느 것인지 내게 물어봐 준비하고 --vault "<path>"와 함께 다시 실행해 줘. 발생하는 오류를 나에게 전달하고, seekstone 도구가 로드되도록 이 세션을 다시 시작하라는 것도 알려줘.

seekstone init은 완전히 비대화형입니다 — --write를 사용하면 볼트를 검증하고 클라이언트 설정을 한 번에 패치합니다 (Claude Code는 claude mcp add로, 그 외 클라이언트는 타임스탬프 백업과 함께 추가적인 JSON 패치를 적용합니다).

방법 1 — 원클릭 (Claude Desktop, 터미널 불필요)

  1. GitHub Releases에서 seekstone.mcpb를 다운로드합니다.

  2. Claude Desktop으로 열기 — Finder에서 더블 클릭하거나, 우클릭 → 연결 프로그램 → Claude Desktop을 선택합니다.

  3. 요청할 때 원하는 Obsidian 볼트 폴더를 선택합니다.

seekstone이 Claude의 도구 모음에 나타나면 설치가 성공한 것입니다. JSON 편집, 터미널, Node.js가 필요하지 않습니다.

방법 2 — 안내 설치 (CLI 사용자에게 권장)

터미널을 여세요 (macOS: Cmd+Space를 누르고 "터미널" 입력 후 Enter). 그리고 다음을 실행합니다:

npx -y seekstone init

Claude의 도구 모음에서 플러그 아이콘 아래에 Seekstone이 나타나면 설치가 완료된 것입니다.

Seekstone은 Obsidian의 볼트 레지스트리를 읽어 볼트를 감지하고, 볼트를 검증하고, 붙여넣을 설정 블록을 출력하거나 Claude Desktop을 직접 패치합니다:

# Auto-detect vault, print config to paste
npx -y seekstone init

# Auto-detect vault, patch Claude Desktop in place (with backup)
npx -y seekstone init --write

# Specify vault explicitly if you have multiple
npx -y seekstone init --vault "/path/to/vault"

# Auto-configure Claude Code in one step (auto-detects vault, runs claude mcp add)
npx -y seekstone init --client code --write

# Or just print the Claude Code command without running it
npx -y seekstone init --client code

방법 3 — 수동 설정 (Claude Desktop)

claude_desktop_config.json에 추가합니다 (Settings → Developer → Edit Config):

{
  "mcpServers": {
    "seekstone": {
      "command": "npx",
      "args": ["-y", "seekstone"],
      "env": { "SEEKSTONE_VAULT": "/absolute/path/to/your/vault" }
    }
  }
}

방법 4 — Claude Code

볼트를 자동으로 감지하고, 한 번에 Claude Code를 설정합니다:

npx -y seekstone init --client code --write

또는 직접 볼트 경로를 명시해서 수동으로 설정하려면:

claude mcp add seekstone --env SEEKSTONE_VAULT=/absolute/path/to/your/vault -- npx -y seekstone

방법 5 — Cursor

원클릭: — 그 다음 Cursor의 MCP 설정에서 SEEKSTONE_VAULT를 볼트의 절대 경로로 지정하세요 (링크가 기본 경로를 설치해 둡니다).

또는 CLI가 볼트를 자동 감지하고 ~/.cursor/mcp.json에 패치하게 할 수 있습니다 (백업 포함):

npx -y seekstone init --client cursor --write

또는 ~/.cursor/mcp.json (전역) 또는 <project>/.cursor/mcp.json (작업 단위)에 수동으로 블록을 추가하세요:

{
  "mcpServers": {
    "seekstone": {
      "command": "npx",
      "args": ["-y", "seekstone"],
      "env": { "SEEKSTONE_VAULT": "/absolute/path/to/your/vault" }
    }
  }
}

방법 6 — VS Code

원클릭: — VS Code가 서버 구성을 열면 SEEKSTONE_VAULT을 볼트의 절대 경로로 지정하세요 (링크가 placeholder 경로를 미리 --config에 넣어줍니다).

또는 CLI가 볼트를 자동으로 감지하고 워크스페이스 등록 (현재 디렉토리의 .vscode/mcp.json)을 생성하도록 만들 수 있습니다:

npx -y seekstone init --client vscode --write

또는 터미널에서 서버를 추가할 수 있습니다:

code --add-mcp '{"name":"seekstone","command":"npx","args":["-y","seekstone"],"env":{"SEEKSTONE_VAULT":"/absolute/path/to/your/vault"}}'

또는 .vscode/mcp.json (워크스페이커) 또는 Command Palette → MCP: Open User Configuration (사용자 전역)으로 블록을 추가할 수 있습니다. VS Code의 두 가지 규칙을 기억하세요: 최상위 키는 servers (즉 mcpServers가 아님)이고, "type": "stdio"가 필수입니다:

{
  "servers": {
    "seekstone": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "seekstone"],
      "env": { "SEEKSTONE_VAULT": "/absolute/path/to/your/vault" }
    }
  }
}

VS Code 1.102+ 이상이 필요합니다. seekstone은 Copilot Chat의 Agent 모드 도구 선택기에 나타납니다.

기타 MCP 클라이언트 (Windsurf, Cline, …)

Seekstone은 표준 MCP stdio 서버입니다 — 어떤 MCP 클라이언트든 실행할 수 있습니다. 자신의 MCP 클라이언트 설정에 위와 동일한 JSON 블록을 사용하세요: command: npx, args: ["-y", "seekstone"], env SEEKSTONE_VAULT.


설치가 끝난 후 클라이언트를 재시작하세요. 시작되면 Seekstone은 볼트를 스캔해서 인메모리 전체 텍스트 인덱스(수천 개의 노트에는 몇 초 소요)를 만들고, 편집하는 동안에 지속 유지합니다. 이를 통해 아래의 19가지 고객 도구가 Claude에서 사용 가능해집니다.

CLI 옵션을 사용하기 위해 Node.js ≥ 22가 필요합니다. 원클릭 .mcpb 번들에는 외부 요구 사항이 없습니다.

Seekstone가 읽기 안전과 문맥을 아껴준다면, ⭐ 저장소에 스타를 별모양을 부탁드립니다 — 다른 사람이 발견하는 데 도움이 됩니다.


볼트를 이용해 Claude에게 시킬 수 있는 일

Seekstone이 연결되면, Claude에게 다음과 같은 것을 요청할 수 있습니다:

  • "내 노트에서 [주제]에 대한 모든 것을 검색한 다음 알려줘"search를 사용하며, 전체 파일이 아닌 관련도에 따른 발췌 결과를 반환합니다.

  • "#project 태그가 달린 모든 이미지를 찾고 이미지 제목을 나열하라" — 태그 필터를 사용하여 list_notes를 호출합니다.

  • "내 [project] 노트의 'Decisions' 섹션만 읽어라"read_note를 섹션 선택기와 함께 사용하여 해당 조각만 context에 들어갑니다.

  • "내 [topic] 노트로 링크를 보내는 것은 무엇이고, 그 노트는 어떤 링크를 밖으로 내보내나요?"get_backlinksget_links를 이용해 그래프를 탐색합니다.

  • "오늘의 스탠드업 메모리 일일 메모리에 추가하라"append_periodic_note를 사용하며, 골 설정에서 daily-note 경로를 매핑합니다 (Obsidian을 열 필요가 없습니다).

  • "이 노트에서 기존 프로젝트 이름을 모두 수정하세요"replace_in_note에 미리보기 생성 전에 dry-run preview를 제공합니다.

  • "[note]의 아래한정된 요약 섹션을 추가해 주세요."append_note를 사용하며, 앞 머리에는 전혀 여기지 않습니다.

  • "/inbox의 모든 노트를 /archive/[year]로 이동시켜 주세요."move_note 사용합니다.

  • "이 노트의 frontmatter의 status 필드를 'done'로 변경해 주세요."patch_frontmatter를 사용하며, 매핑된 상태에서 키 순서와 인용 부호 스타일을 유지합니다.

  • "오늘자의 회의 노트를 표준 템플릿으로 새로 만들어 주세요."create_note을 사용합니다.

Claude는 전체 볼트를 한 번에 보지 않습니다 — 탐색과 묻지를 선택적으로 수행하므로, 볼트 크기가 크더라도 (10k 개 이상의 노트) 컨텍스트 예산 안에 유지될 수 있습니다.


도구

읽기

Tool

설명

search

전체 텍스트 검색. 결과는 노트 본문보다는 순위 기반 발췌(기본 ~120자, excerptLength 로 결정 가능)을 반환합니다. 퍼지 및 접두사 일치를 지원하며, SEEKSTONE_SEMANTIC=1인 경우 mode: "semantic"/"hybrid"을 로컬 임베딩을 통해 의미적 검색을 수행합니다 (정보가 기기를 떠나지 않음).

query_notes

구조화된 메타데이터 쿼리. front matter여러 key/value 프레디케이트(eq, ne, contains, exists, missing, gt/gte/lt/lte), 태그, 폴더, 수정 시각, 모양 세 등을 이용해 필터링하고 필요에 따라 정렬과 선택을 합니다. 일행 경로 + 이름(기본값)만 포함한 요약 행을 반환합니다.

context_pack

자연어 질문에 대해 응답 가능한 컨텍스트를 한 요청으로 받아옵니. 바이트 예산 기본 2KB에 캡(하드) 있습니다: 순위 발췌, 한 줄 요약을 가진 인접 노트, 후속 소스 경로를 포함하며, searchread_noteget_backlinks 왕복 루프를 대체합니다.

read_note

볼트 유형 경로(노트의 전체 내용)로 해당 노트의 전체 내용을 읽습니다. 단일 섹션, 블록, 혹은 줄 범위를 반환할 수 있습니다.

list_notes

선택적으로 폴더 접두사 또는 태그로 필터링된 노드 목록을 반환합니다.

list_tags

볼트의 모든 태그를 사용 횟수(기본) 또는 알파벳 순으로 정렬하여 반환합니다.

outline_note

노트 전체 내용 없이 가점과 블록 구조를 반환합니다 — 쾌속으로 정확한 독서 전에 네비게이션할 수 있습니다.

get_backlinks

주어진 노트를 가리키는 모든 노드를 찾습니다.

get_links

노트에서 나가는 합니다. 모든 정보와 위키링크와 마크다운 링크를 나열합니다.

get_periodic_note

오늘 날짜 또는 어떤 날짜의 일간/주간/월간/분기/연간 노트를 읽는다. 볼트 설정에서 경로를 해석하므로 , Obsidian이 필요하지 않습니다.

쓰기

도구

설명

create_note

노트를 생성합니다(선택적 frontmatter + 본문). 상위 디렉터리는 자동으로 만들어집니다.

delete_note

노트를 볼트의 .trash/ 폴더로 이동합니다(Obsidian 호환, 복원 가능). permanent: true를 전달하면 복구할 수 없는 삭제가 수행됩니다.

move_note

노트를 이동하거나 이름을 바꿉니다. 해당 노트를 가리키는 다른 노트의 wikilink와 마크다운 링크도 모두 다시 써져서 끊기지 않습니다(rewriteLinks: false로 거부 가능). 대상 디렉터리는 자동으로 만들어집니다.

rename_heading

노트에서 제목을 바니다. 볼트 전체의 모든 [[note#heading]] wikilink 및 임베드가 다시 작성되어 참조가 계속 작동합니다(별칭은 유지되고, 펜스 코드 블럭은 그대로 둡).

append_note

frontmatter는 건드리지 않center note 본문에 텍스트를 추가합니다.

patch_frontmatter

기존 키 순서를 바꾸거나 따옴표 스타일을 변경하지 않고 frontmatter 키를 설정·업데이트·삭제합니다.

patch_note

헤딩 또는 블록 참조 위치에 텍스트를 추가, 앞에 삽입, 또는 교체합니다(createIfMissing으로 섹션 추가). frontmatter는 건드리지 않습니다.

replace_in_note

노트 본문에서 텍스트를 찾기 및 바꾸기: 리ß터럴 또는 정규Ç식, 대·소문자 구분, 단어 단위 일치, 선택적 limit(기본적으로 모든 出現을 교체), 및 건식 실행 미리보기.

append_periodic_note

오늘의 periód 노트에 추가하며, 아직 없으면 템플릿르 외어 생생합니다.

모든 쓰기 도구(append_note, get_note, patch_frontmatter, replace_in_note, rename_heading, move_note, delete_note, append_periodic_note, overwrite: true가 포함된 get_note)는 선택적 compare-and-swap을 지원합니다. read_note에서 얻은 contentHash(를)을 prevHash로 넘기면, 호출이 순간에 노트가 변되어 있을 깨끗하게 실패합니다 — 동시에 편집이 실반 없이 사라지거나, 보지 못한 내용을 이동/삭제하지 않습니다. 모들은 변형 결과에서 새 contentHash를 반환하므로 연속 편집에 재읽기 없이 사용할 수 습니다.

*빠르고 완전합니다.* Seekstone은 우리 벤치마크 세트에서 list_tags, outline_note, get_backlinks, get_links를 일급 도구로 제공하는 유일한 Obsidian MCP 서버입니다. 네 가지 추가 기능이 더 뛰어납니다:

  • 메모리 내 로컬 의미 검색. SEEKSTONE_SEMANTIC=1로 설정하면 searchmode: "semantic""hybrid"를 지원합니다. 즉, 작은.avalo.on-device 임베딩 모델을 통한 의미 기반 검색(일회성 npx -y seekstone fetch-model 다운로드만; 실행 중인 서버는 네트워크를 전혀 닿지 않습니다). 커밋된 10,000노트 벤치마크 보트에서는, 설명형 쿼리가 상위 5개 안에 올바른 노트를 넣을 확률이 **키워드 검색의 30% vs 70%**입니다 (커밋된 검증). 우리가 벤치마크한 다른 서버는 library의존성이 없고 오프라인 임베딩을 제공하지 않으며 — 같은 골든 세트에서 대안들과 정면 비교했습니다(커밋된 비교). obsidian-tc의 자체 임베딩 의미 검색은 실제로 더 정확합니다(우리의 hit¹@10 72% vs obsidian-tc의 93% — 해당 137M 파раметр 모델 vs 우리의 8M 모델). 그리고 그 대가로 쿼리가 12배 느락 (165 ms vs 14 ms p50), 인덱싱이 71배 느락 (콜드 스타트 26.5분 vs 22초), ~7배 큰 응답량 (쿼리당 15.4 KB vs ~2 KB) 및 반드시 설치/실행해야 하는 추가 서버가 필요합니다. obsidian-mcp-pro는 10,000노트 보트를 전혀 인덱싱하지 못했습니다(대략 15분 동안 임베딩 후 JSON 벡터 store가 JavaScript의 string 크기 한계를 초과). 선택은 엄지상의 결정입니다 — 그 숫자들은 전부 커밋되어 있습니다.

  • 주기적 노트를 파일시스템에서 직접. get_periodic_noteappend_periodic_note는 볼트 자체 설정(.obsidian/daily-notes.json 및 Periodic Notes 플러그인)을 읽어 일간, 주간, 월간, 분기, 연간 노트 경로를 결정합니다 — Obsidian이 닫힌 상태에서도. 모든 REST 기반 서버는 앱이 실행 중일 때만 이 작업을 할 수 있습니다.

  • 바이트 단위 동일 frontmatter 보장. patch_frontmatter는 YAML을 제자리에서 편집하여 키 순서, 따옴표 스타일, 주석을 유지하며, 쓰기 안전성은 바이트 단위로 테스트 하네스에 의해 증명됩니다. 우리가 조사한 다른 서버는 이 보장을 제공하지 않습니다.

  • 완전한 분리 (zero coupling). Obsidian 앱, Local REST API 플러그인, 플러그인 버전 드리프트 없음. 단지 디스크의 파일만 있습니다.


설정

변수

필수

설명

SEEKSTONE_VAULT

Yes

Obsidian 볼트의 절대 경로.

SEEKSTONE_LOG_LEVEL

아니요

error | warn | info(기본값) | debug.

SEEKSTONE_LOG_FILE

아니요

절대 경로; 설정 시 JSON 라인 로그가 여기에 추가(크기 회전).

SEEKSTONE_LOG_MAX_SIZE

아니요

SEEKSTONE_LOG_FILE의 로그 회전 크기 (예: 10mb; 기본 5MB).

SEEKSTONE_WATCH_POLL

아니요

1로 설정하면 네이티브 OS 이벤트 대신 stat-poll로 변경 감지 — 네트워크 드라이브, WSL, 일부 컨테넉에서 안정적이지만 느점.

SEEKSTONE_READ_ONLY

아니요

1로 설정하면 읽기 전용 실행: 8개 쓰기 도구가 목록에서 완전히 제거(호출해도 거부)되므로, 세션이 볼트를 바꿀 수 없습니다.

SEEKSTONE_WRITE_PATHS

아니요

쉼표로 구분된 볼트 상대 glob (예: journal/**,inbox/*.md). 해당 경로을만 쓰기 허용, 나머지 볼트는 읽기 전용.

SEEKSTONE_SEMANTIC

아니요

1로 설정하면 의미 기반 검색(searchmode: "semantic""hybrid" 추가)을 활성화. 로컬 임베딩 모델 필요 — npx -y seekstone fetch-model로 한 번 다운로드; 실행 중인 서버는 네트워크를 사용하지 않습니다.

SEEKSTONE_MODEL_PATH

아니요

Model2Vec 임베딩 모델이 있는 디렉터리(기본은 캐시 디렉터리의 fetch-mode가 저장하는 위치).

SEEKSTONE_CACHE_DIR

아니요

다운로드한 모델 및 볼트별 임베딩 캐시의 루트 (기본: ~/.cache/seekstone).


작동 방식

Seekstone은 fast-glob으로 볼트를 스캔하고, 각 노트의 frontmatter를 바이트 인코딩으로 파싱한 후(따라서 쓰기 전후 프론트매터 영역이 바이트 확실히 동일함), 메모리 안에 MiniSearch 전문 검색 인덱스를 구축합니다. 검색은 내러티브가 아닌 짧은 순위가 매겨진 발췌를 반환하고 — 발췌-아니라-문서라는 설계가 컨텍스트 오버헤드 감저의 원천입니다. 파일 시스템 모니터 chokidar가 Obsidian에서 편집하는 동안 인덱스를 최신으로 유지합니다.

쓰기는 보수적으로 설계되었습니다: append_note은 frontmatter에 닿지 않으며, patch_frontmatter는 YAML을 재직렬화하지 않고 해당 지점을 직접 편집하여 키 순서, 따옴표 스타일, 주석을 보존합니다.

때문에 항상 작동하게 설계되어 있습니다. Seekstone은 모든 커밋이 macOS, Linux, Windows CI에서 테스트되고, 쓰기 도구는 병리적(ReDoS) 입력에 대비해 강화되었으며, 원하지 않는 unhandled rejection은 비정상 종료가 아닌 로그로 처리됩니다 — 그래서 오래 실행되는 MCP 세션이 대화 중 끊기지 않고 웜 인덱스를 유지할 수 있습니다.

코드베이스의 계층별 안내 — 패키지 구조, 서버 내부, 종단간 요청 흐름, 측정용 테스트 하네스 — 는 docs/ARCHITECTURE.md를 보세요.


보안 및 개인정보

Seekstone은 로컬 디스크에서 SEEKSTONE_VAULT 아래의 파일을 읽고(쓰기 도구를 통해 수정) 작동합니다. 실행 중인 서버는 네트워크 요청을 보내지 않으며 텔레메트리를 보내지 않습니다(패키지의 네트워크 접근은 명시적인 npx -y seekstone fetch-model 서브커맨드뿐입니다 — 선택적 의미 검색 모델의 SHA256 검증된 일회성 다운로드이며, 서빙이 시작되기 전에 종료됩니다). 로그는 기본적으로 메타데이터만 포함합니다(노트 내용은 debug 수준에서만 나타남). 볼트 외부에 기록되는 것은 선택적으로 설정한 로그 파일과, SEEKSTONE_SEMANTIC=1일 때 ~/.cache/seekstone에 기록되는 볼트별 임베딩 캐시(파생 노트 벡터 — 외부에 전송되지 않음)뿐입니다.

쓰기 안전 계약

AI에게 노트에 쓰기 권한을 주는 건 단순히 "신뢰하세요"보다 더 많은 것이 필요합니다. Seekstone에는 이름이 붙은 테스트된 계약인 docs/WRITE-SAFETY.md가 포함되어 있습니다. 여덟 가지 보증은 각각 이를 강제하는 코드와 이를 증명하는 테스트와 연결되어 있으며, 퍼블리시 및 릴리스마다 CI 하니스 안전 스위트가 바이트 단위 검증합니다: 네트워크 없음, 볼트 샌트박스, 본문 변경 시 frontmatter 바이트 고정, 원자적 쓰기(부분 파일 없음), 생성 중 기존 파일 덮어쓰지 않음, 삭제 취소 가능(.trash/), 모든 쓰기 도구에서 선택적 compare-and-swap, 그리고 구성 가능한 쓰기 범위/읽기 전용 모드. 같은 스위트가 다른 FS-direct 서버에 대해서도 headless로 실행됩니다 — 비교표는 계약서에 있습니다.


자주 묻는 질문

Obsidian 앱이 한 동안 열려 있어야 하나요? 아니요. Seekstone은 볼트 폴더를 디스크에서 직접 읽으므로 Obsidian이 켜져 있거나 닫혀 있든 상관없습니다.

Local REST API 플러그인이 필요한가요? 아니요. Seekstone은 이것을 완전히 우회하는데, 이 것이 최대 47,000배의 페이로드 감소의 원인입니다. 플러그인은 필요 없습니다.

어떤 AI 클라이언트를 지원하나요? stdio 위에서 Model Context Protocol(MCP)을 지원하는 모든 클라이언트 — Claude Desktop, Claude Code, Cursor, Windsurf, Continue 등.

내 볼트(vault)에 사용해도 안전한가요? Seekstone는 위 표의 9가지 쓰기 도구(create_note, append_note, patch_note, patch_frontmatter, replace_in_note, move_note, rename_heading, delete_note, append_periodic_note)를 명시적으로 호출하는 경우를 제외하고는 파일을 절대 수정하지 않습니다. 실행 중인 서버는 네트워크 요청을 보내지 않습니다(시맨틱 검색의 모델은 명시적인 fetch-model 하위 명령으로 한 번만 대역 외(out-of-band)로 가져옵니다). 볼트 경로는 샌드박스 처리되어 있습니다. 즉 어떤 도구도 그 밖을 읽거나 쓸 수 없습니다. 그리고 더 강화할 수도 있습니다: SEEKSTONE_READ_ONLY=1로 설정하면 쓰기 도구가 세션에서 완전히 제거되고, SEEKSTONE_WRITE_PATHS로 허용한 디렉터리(예: journal/**만)에만 쓰기를 제한할 수 있습니다. 둘 다 도구별 검사가 아니라 디스패치 계층에서 적용되므로, 어떤 도구도 검사 로직을 누락할 수 없습니다.

Windows에서도 작동하나요? 네. Seekstone는 모든 커밋마다 macOS, Linux, Windows에서 테스트를 통과합니다.

어느 정도 규모의 Obsidian 볼트를 처리할 수 있나요? Seekstone는 수천 개의 노트가 있는 볼트를 대상으로 프로파일링되었습니다. 등록되어 있는 10,000개의 노트 벤치마크 볼트에서 콜드 인덱스 구축은 수십 초가 걸리고 프로세스 RSS는 약 100MB 미만으로 유지됩니다. 일반적인 개인 볼트는 몇 초 안에 인덱싱됩니다. 시맨틱 모드는 부팅 후 백그라운드에서 임베딩됩니다(10,000개 노트 기준 약 20초, 이후 볼트별로 캐시되어 재시작 시 2초 이내로 다시 로드됩니다).

seekstone init는 내 볼트를 어떻게 자동으로 찾나요? Obsidian 자체 볼트 레지스트리(obsidian.json)를 읽습니다. 이는 Obsidian이 사용자의 알려진 볼트를 기록하는 데 사용하는 동일한 파일입니다. 볼트가 하나만 있으면 자동으로 선택되고, 여러 개면 목록을 보여주며 --vault로 선택하라는 요청을 받습니다.

.mcp 파일은 무엇인가요? MCP 번들(Bundle)입니다. 서버와 목록이 포함된 자체 포함(거함) zip 파일입니다. 설치하려면 Finder에서 더블클릭(또는 오른쪽 클릭 → 연결 프로그램 → Claude Desktop)한 다음 볼트를 선택하면 됩니다. 터미널이나 Node.js는 필요 없습니다.


기여와 개발

기여는 환영합니다. 자세한 내용은 CONTRIBUTING.md를 참고하거나 바로 시작하세요:

npm install                                          # install all workspace deps
npm test                                             # run all tests
npm run lint                                         # biome check
npm run build -w seekstone                           # tsup → dist/
npm run build:mcpb                                   # build seekstone.mcpb bundle

npx vitest run packages/server/src/tools/search.test.ts  # single test file
npx vitest run -t 'parses a typical frontmatter'         # single test by name
npx tsc -p packages/server/tsconfig.json --noEmit        # typecheck

저장소 구조

패키지

적의 사항

packages/server

배포된 seekstone MCP 서버(19가지 도구, stdio, MiniSearch 인덱스, chokidar 감시자).

packages/core

공통 볼트 기본 요소 — 볼트 탐색(walk), frontmatter 파서, 링크/태그 추출기, 개요(outline), 백분위(퍽센타일), pmap, 그리고 Model2Vec 임베더. 서버 빌드에 포함됩니다.

packages/harness

프로파일러 + 벤치마크 + 쓰기 안정성 하네스(REST vs 파일시스템)로, 위에서 제시된 페이로드 수치를 만든 것입니다. 개발 중에만 사용하며 공개하지 않습니다.

서버는 실제 빌드(tsup → dist/)가 있으며 npm에 공개되어 있습니다. 하네스는 소스에서 tsx로 실행됩니다. 릴리실은 자동화되어 있습니다 — docs/RELEASING.md를 참조하세요.

측정 하네스

하네스는 파일시스템 직접 설계의 동기가 된 벤치마크 수치를 재현하기 위한 것입니다. 기본 재현 경로(fs/seekstone 백엔드와 등록된 합성 볼트 사용)는 추가 설정 없이 실행됩니다. REST 기반 백엔드(rest, mcp-obsidian, obsidian-mcp-server)만 Obsidian과 로컬 REST API 플러그인이 실행 중이어야 합니다.

export SEEKSTONE_VAULT="/absolute/path/to/your/vault"

npx tsx packages/harness/src/cli.ts profile --vault "$SEEKSTONE_VAULT"
npx tsx packages/harness/src/cli.ts bench \
  --queries packages/harness/queries/default.json \
  --stats reports/vault-stats.json
npx tsx packages/harness/src/cli.ts safety --vault "$SEEKSTONE_VAULT"

하네스 환경 변수: SEEKSTONE_REST_API_KEY(로컬 REST API 플러그인에서 제공)와 SEEKSTONE_REST_URL(기본값 https://127.0.0.1:27124).


지원

Seekstone는 무료 오픈소스입니다. 툴가 기능(context)를 절약해 주고 비용도 줄여준다면 커피를 않을 수 있습니다를 할 수 있습니다.


라이선스

MIT © Shaq Mughal

Install Server
A
license - permissive license
A
quality
A
maintenance

Maintenance

Maintainers
4dResponse time
2dRelease cycle
36Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

View all related MCP servers

Related MCP Connectors

View all MCP Connectors

Appeared in Searches

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/shaqmughal/seekstone'

If you have feedback or need assistance with the MCP directory API, please join our Discord server