코드베이스의 마크다운 문서를 사전 인덱싱하여,
Claude Code가 문서를 찾을 때마다 소모되는 토큰을 극적으로 절감하는 로컬 검색 엔진.
Claude Code는 코드베이스에서 정보를 찾을 때 glob → grep → read 3단계 과정을 반복한다. 파일 목록을 훑고, 키워드로 검색하고, 실제 파일을 읽는다. 매번 이 사이클이 돌 때마다 수천~수만 토큰이 소모되고, 컨텍스트 윈도우는 빠르게 소진된다.
프로젝트 규모가 커질수록 이 문제는 심각해진다. 레포가 10개, 20개로 늘어나면 동일한 질문에 대해서도 매번 탐색 비용을 지불하게 되는 것이다.
QMD는 마크다운 문서를 세 가지 검색 엔진으로 동시에 인덱싱한다. 쿼리가 들어오면 각 엔진이 독립적으로 결과를 반환하고, 최종적으로 LLM 재순위화(reranking)를 통해 가장 관련성 높은 문서를 선별한다.
모든 처리는 로컬에서 실행된다. 임베딩 모델은 최초 인덱싱 시 다운로드되며, 이후 추가 네트워크 통신 없이 동작한다. Claude Code와는 MCP(Model Context Protocol) 서버로 연결되어, Claude가 자연어 질문을 던지면 QMD가 관련 스니펫을 직접 반환한다.
검색 의도에 따라 최적의 모드를 선택하거나, 여러 모드를 조합한 하이브리드 검색으로 정확도를 극대화할 수 있다.
여러 모드를 조합하면 정확도가 크게 향상된다.
예: [{type:'lex', query:'deploy'}, {type:'vec', query:'배포 자동화 설정'}]
처럼 키워드와 의미 검색을 동시에 실행할 수 있다.
glob→grep→read 반복 없이 한 번의 쿼리로 관련 문서를 직접 반환. 문서 탐색에 드는 토큰을 최대 80% 이상 줄일 수 있다.
키워드 매칭을 넘어 의미 기반 검색으로 관련 문서를 놓치지 않는다. LLM 재순위화가 최종 결과의 품질을 보장한다.
외부 API를 호출하지 않는다. 모든 인덱싱과 검색이 로컬에서 처리되어 민감한 코드가 외부로 유출될 위험이 없다.
Claude Code의 MCP 서버로 등록하면 별도 설정 없이 자연어 검색을 바로 활용할 수 있다.
실제 프로젝트에 QMD를 적용하는 전체 과정을 단계별로 살펴보자. 아래 예시는 여러 레포를 관리하는 모노레포 또는 멀티레포 환경을 가정한다.
npm으로 전역 설치한다.
npm install -g @tobilu/qmd
qmd --version # 2.1.0+
QMD를 MCP 서버로 등록하면 Claude Code가 직접 검색을 요청할 수 있다.
claude mcp add qmd -- qmd mcp
claude mcp list # qmd: qmd mcp - ✓ Connected
관련 레포를 카테고리별로 정리하면 컬렉션 관리가 용이해진다.
워크스페이스를 컬렉션으로 등록하고 임베딩을 실행한다.
# 컬렉션 등록
qmd collection add ./workspace --name my-repos
qmd collection add ./docs --name my-docs
# 인덱싱 (첫 실행 시 모델 다운로드)
qmd embed
세 가지 검색 모드로 인덱싱 결과를 확인한다.
# 키워드 검색 (BM25)
qmd search "redis connection"
# 의미론적 검색 (Vector)
qmd vsearch "에러를 우아하게 처리하는 방법"
# 하이브리드 검색 (BM25 + Vector + Reranking)
qmd query "배포 설정"
프로젝트의 CLAUDE.md에 QMD 우선 사용 지침을 명시하면,
Claude Code가 파일을 읽기 전에 항상 QMD를 먼저 참조하게 된다.
# CLAUDE.md
## QMD
파일을 읽기 전에 항상 QMD MCP 도구로 먼저 검색.
glob/grep 대신 QMD 우선 사용.
워크스페이스 레포를 최신 상태로 유지하려면 주기적으로 git pull 후
qmd embed를 재실행한다.
변경된 파일만 증분 인덱싱되므로 이후 실행은 빠르게 완료된다.
QMD가 MCP 서버로 연결되면, Claude Code 대화 중에 다음과 같은 방식으로 자동 활용된다.
# 사용자 질문
"Redis 연결 설정은 어떻게 되어있어?"
# Claude Code의 내부 동작
→ QMD query: [{type:'lex', query:'redis connection'},
{type:'vec', query:'Redis 연결 설정 방법'}]
# QMD 결과
→ 3개 관련 문서 반환 (스니펫 포함, ~800 tokens)
1. projects/web-app/docs/infra.md — Redis 클러스터 설정
2. libraries/shared-utils/README.md — 캐시 유틸리티
3. projects/mobile-api/docs/env.md — 환경변수 목록
# glob→grep→read 없이 즉시 답변 생성
QMD는 Claude Code의 도구 체인에 검색 단축키를 추가하는 것이다. 기존 glob/grep/read가 사라지는 것이 아니라, 대부분의 문서 탐색을 QMD가 먼저 처리하여 불필요한 토큰 소모를 방지한다. 필요한 경우 Claude는 여전히 파일을 직접 읽을 수 있다.