MCP 문서 관리

메뉴

Obsidian Markdown Notes

Obsidian Markdown Notes

Obsidian Markdown Notes MCP 서버는 Obsidian 볼트 또는 Markdown 노트가 포함된 디렉토리를 읽고 검색할 수 있는 Model Context Protocol 서버입니다. 이 서버를 통해 AI 어시스턴트는 로컬 Markdown 노트 및 지식 베이스에 접근하여 정보를 검색하고 참조할 수 있습니다.

특징

  • Obsidian 볼트 또는 Markdown 디렉토리 접근
  • 노트 내용 읽기 및 검색
  • 노트 메타데이터 및 YAML 프론트매터 분석
  • 태그 기반 검색 및 필터링
  • 위키링크 및 Obsidian 스타일 링크 파싱
  • 텍스트 기반 검색 및 정규표현식 지원
  • 경로 기반 노트 필터링
  • 노트 내 제목 및 구조 분석
  • 이미지 및 첨부 파일 참조 관리
  • 최근 수정된 노트 찾기
  • 볼트 구조 및 폴더 탐색
  • 내장 Obsidian 플러그인 메타데이터 접근
  • 다중 볼트 지원
  • 파일 시스템 감시 및 변경 감지

API

리소스

obsidian://vault/{vault_id}

  • 특정 Obsidian 볼트의 정보와 구조를 제공합니다.

obsidian://vault/{vault_id}/note/{note_path}

  • 특정 노트의 내용과 메타데이터를 제공합니다.

obsidian://vault/{vault_id}/tags

  • 볼트 내의 모든 태그 목록을 제공합니다.

도구

볼트 관리

list_vaults

사용 가능한 모든 볼트를 나열합니다. - 입력: 없음 - 출력: 볼트 ID, 이름, 경로 등을 포함한 볼트 목록

get_vault_info

특정 볼트의 정보를 조회합니다. - 입력: - vault_id: 볼트 ID 또는 이름 - 출력: 볼트 상세 정보, 폴더 구조, 노트 수 등

list_folders

볼트 내의 폴더를 나열합니다. - 입력: - vault_id: 볼트 ID 또는 이름 - parent_path: (선택적) 상위 폴더 경로 - 출력: 폴더 경로, 이름, 하위 폴더 수 등을 포함한 폴더 목록

노트 관리

list_notes

볼트 내의 노트를 나열합니다. - 입력: - vault_id: 볼트 ID 또는 이름 - folder_path: (선택적) 특정 폴더 경로 - recursive: (선택적) 하위 폴더의 노트도 포함할지 여부 - sort_by: (선택적) 정렬 기준 (name, created, modified) - sort_order: (선택적) 정렬 순서 (asc, desc) - limit: (선택적) 최대 결과 수 - 출력: 노트 경로, 이름, 크기, 수정 시간 등을 포함한 노트 목록

get_note

특정 노트의 내용을 조회합니다. - 입력: - vault_id: 볼트 ID 또는 이름 - note_path: 노트 경로 - include_metadata: (선택적) 메타데이터 포함 여부 - render_markdown: (선택적) Markdown을 HTML로 렌더링할지 여부 - 출력: 노트 내용, 메타데이터, YAML 프론트매터 등

get_note_metadata

특정 노트의 메타데이터만 조회합니다. - 입력: - vault_id: 볼트 ID 또는 이름 - note_path: 노트 경로 - 출력: 노트 메타데이터, YAML 프론트매터, 생성 시간, 수정 시간 등

get_recently_modified_notes

최근에 수정된 노트를 조회합니다. - 입력: - vault_id: 볼트 ID 또는 이름 - days: (선택적) 최근 며칠 내의 노트를 조회할지 (기본값: 7) - limit: (선택적) 최대 결과 수 - 출력: 최근 수정된 노트 목록

검색 및 조회

search_notes

노트 내용을 검색합니다. - 입력: - vault_id: 볼트 ID 또는 이름 - query: 검색 쿼리 - case_sensitive: (선택적) 대소문자 구분 여부 - regex: (선택적) 정규표현식 사용 여부 - include_metadata: (선택적) 메타데이터 검색 포함 여부 - folder_path: (선택적) 검색할 폴더 경로 - limit: (선택적) 최대 결과 수 - 출력: 검색 결과 목록 (노트 경로, 매칭 내용, 컨텍스트 등)

search_by_tag

태그로 노트를 검색합니다. - 입력: - vault_id: 볼트 ID 또는 이름 - tag: 검색할 태그 (# 제외) - exact_match: (선택적) 정확한 태그 일치 여부 - include_subtags: (선택적) 하위 태그 포함 여부 - limit: (선택적) 최대 결과 수 - 출력: 해당 태그가 있는 노트 목록

list_all_tags

볼트의 모든 태그를 나열합니다. - 입력: - vault_id: 볼트 ID 또는 이름 - include_count: (선택적) 태그별 노트 수 포함 여부 - 출력: 태그 목록 및 사용 빈도

find_linked_notes

특정 노트와 연결된 노트를 찾습니다. - 입력: - vault_id: 볼트 ID 또는 이름 - note_path: 노트 경로 - direction: (선택적) 링크 방향 (inbound, outbound, both) - 출력: 연결된 노트 목록

분석 및 구조 조회

analyze_note_structure

노트의 구조를 분석합니다. - 입력: - vault_id: 볼트 ID 또는 이름 - note_path: 노트 경로 - 출력: 제목, 섹션, 목록, 코드 블록 등의 구조 정보

get_vault_graph

볼트의 노트 간 연결 그래프를 생성합니다. - 입력: - vault_id: 볼트 ID 또는 이름 - depth: (선택적) 그래프 깊이 - include_tags: (선택적) 태그를 노드로 포함할지 여부 - 출력: 노트 간 연결 정보를 포함한 그래프 데이터

extract_wiki_links

노트에서 위키링크를 추출합니다. - 입력: - vault_id: 볼트 ID 또는 이름 - note_path: 노트 경로 - resolve_links: (선택적) 링크 경로를 해결할지 여부 - 출력: 위키링크 목록 및 대상 노트 정보

extract_attachments

노트에서 첨부 파일 참조를 추출합니다. - 입력: - vault_id: 볼트 ID 또는 이름 - note_path: 노트 경로 - 출력: 첨부 파일 경로 및 유형 목록

사용 방법

설치 및 구성

  1. 사전 요구 사항:
  2. 로컬 Obsidian 볼트 또는 Markdown 노트 디렉토리
  3. Python 3.8 이상

  4. MCP 서버 설치:

    pip install obsidian-markdown-mcp

  5. Claude Desktop 구성:

    {
      "mcpServers": {
        "obsidian-markdown": {
          "command": "python",
          "args": ["-m", "obsidian_markdown_mcp"],
          "env": {
            "OBSIDIAN_VAULT_PATHS": "/path/to/vault1,/path/to/vault2",
            "OBSIDIAN_DEFAULT_VAULT": "vault1",
            "OBSIDIAN_WATCH_CHANGES": "true"
          }
        }
      }
    }

  6. 구성 옵션:

  7. OBSIDIAN_VAULT_PATHS: 콤마로 구분된 볼트 경로 목록
  8. OBSIDIAN_DEFAULT_VAULT: 기본 볼트 이름 또는 ID
  9. OBSIDIAN_WATCH_CHANGES: 파일 시스템 변경 감지 활성화 여부 (기본값: true)
  10. OBSIDIAN_CACHE_TTL: 캐시 수명(초) (기본값: 60)
  11. OBSIDIAN_LOG_LEVEL: 로그 수준 (기본값: INFO)
  12. OBSIDIAN_MAX_SEARCH_RESULTS: 검색 결과 최대 수 (기본값: 100)
  13. OBSIDIAN_INCLUDE_HIDDEN_FILES: 숨겨진 파일 포함 여부 (기본값: false)

기본 사용 예시

  1. 사용 가능한 볼트 목록 확인:

    list_vaults()

  2. 볼트 구조 탐색:

    get_vault_info({
      vault_id: "my_vault"
    })

  3. 폴더 내 노트 나열:

    list_notes({
      vault_id: "my_vault",
      folder_path: "Projects",
      recursive: true,
      sort_by: "modified",
      sort_order: "desc"
    })

  4. 특정 노트 내용 조회:

    get_note({
      vault_id: "my_vault",
      note_path: "Projects/ProjectA/Meeting Notes.md",
      include_metadata: true
    })

  5. 노트 내용 검색:

    search_notes({
      vault_id: "my_vault",
      query: "machine learning algorithms",
      case_sensitive: false,
      include_metadata: true
    })

  6. 태그로 노트 검색:

    search_by_tag({
      vault_id: "my_vault",
      tag: "project/active",
      include_subtags: true
    })

  7. 볼트의 모든 태그 나열:

    list_all_tags({
      vault_id: "my_vault",
      include_count: true
    })

  8. 최근 수정된 노트 조회:

    get_recently_modified_notes({
      vault_id: "my_vault",
      days: 3,
      limit: 10
    })

  9. 노트 구조 분석:

    analyze_note_structure({
      vault_id: "my_vault",
      note_path: "Research/Literature Review.md"
    })

  10. 연결된 노트 찾기:

    find_linked_notes({
      vault_id: "my_vault",
      note_path: "Projects/ProjectA/Overview.md",
      direction: "both"
    })

고급 사용 사례

지식 베이스 쿼리

// 지식 베이스에서 특정 주제에 관한 정보 검색
const results = search_notes({
  vault_id: "my_knowledge_base",
  query: "quantum computing applications",
  limit: 5
});

// 검색 결과에서 관련 내용 추출
const relevantInfo = results.map(result => {
  return {
    notePath: result.note_path,
    title: result.title,
    excerpt: result.context.substring(0, 200) + "..."
  };
});

// 검색 결과 기반 요약 제공
console.log("검색 결과 기반 '양자 컴퓨팅 응용 프로그램'에 대한 요약:");
for (const info of relevantInfo) {
  console.log(`\n${info.title} (${info.notePath}):`);
  console.log(info.excerpt);
}

태그 기반 프로젝트 관리

// 활성 프로젝트 노트 검색
const activeProjects = search_by_tag({
  vault_id: "my_vault",
  tag: "status/active"
});

// 마감일이 있는 프로젝트 필터링
const upcomingDeadlines = activeProjects.filter(project => {
  const metadata = get_note_metadata({
    vault_id: "my_vault",
    note_path: project.note_path
  });

  return metadata.frontmatter && metadata.frontmatter.due_date;
}).map(project => {
  const metadata = get_note_metadata({
    vault_id: "my_vault",
    note_path: project.note_path
  });

  return {
    project: project.title,
    path: project.note_path,
    due_date: metadata.frontmatter.due_date
  };
});

// 마감일 기준 정렬
upcomingDeadlines.sort((a, b) => new Date(a.due_date) - new Date(b.due_date));

console.log("다가오는 프로젝트 마감일:");
for (const project of upcomingDeadlines) {
  console.log(`${project.project}: ${project.due_date}`);
}

보안 고려사항

  • 볼트 경로는 로컬 파일 시스템에 대한 접근을 제공하므로 신중하게 관리해야 합니다.
  • 민감한 정보가 포함된 볼트에 대한 접근은 제한해야 합니다.
  • 필요한 경우 읽기 전용 모드로 서버를 구성하세요.
  • 공유 환경에서는 접근 제어 설정을 강화하세요.
  • 볼트 경로가 유출되지 않도록 주의하세요.

연결된 구성 요소

  • obsidian-mcp - 메모 검색, 읽기, 쓰기 및 구성을 위한 도구가 있는 Obsidian.md용 MCP 서버
  • Anki - Anki 덱과 카드와 상호작용하는 MCP 서버
  • Notion - Notion API와 상호작용
  • OneNote - Microsoft Graph API를 사용하여 Microsoft OneNote에 연결하는 MCP 서버