Lore MCP server
2026년 11월 1일 커밋소프트웨어 패턴과 컨벤션에 대한 로컬 시맨틱 검색 엔진을 제공하여 AI 코딩 에이전트에게 엔지니어링 컨텍스트를 전달합니다.
다른 이름 attila/lore
- 스타
- 8
- Tools
- 6
- 다운로드, 30일
- —
- 최신 버전
- —
- 마지막 커밋
- 2026년 11월 1일
- 라이선스
- Apache-2.0
Lore MCP란?
Lore은(는) MCP server입니다. 소프트웨어 패턴과 컨벤션에 대한 로컬 시맨틱 검색 엔진을 제공하여 AI 코딩 에이전트에게 엔지니어링 컨텍스트를 전달합니다. 6개 도구를 제공합니다. 예: search_patterns, add_pattern, update_pattern.
프로젝트 README에서 생성된 요약
Lore MCP server 정보
Lore는 소프트웨어 패턴과 컨벤션을 위한 로컬 시맨틱 검색 엔진 역할을 수행하여 AI 코딩 에이전트에게 엔지니어링 컨텍스트를 제공합니다. 개발자는 git repository 내의 markdown 파일에 엔지니어링 지식을 저장할 수 있으며, Model Context Protocol을 통해 Claude Code와 같은 도구에서 해당 지식에 접근할 수 있습니다. 이 시스템은 단일 Rust 바이너리와 로컬 SQLite 데이터베이스를 사용하여 전체 텍스트 검색과 벡터 유사성을 결합한 하이브리드 검색을 수행합니다.
서버가 작동하려면 Ollama 또는 llama-server와 같은 OpenAI 호환 서비스 등 임베딩 서버가 필요합니다. 초기화가 완료되면 헤딩 단위로 markdown 파일을 인덱싱하고, 더 나은 검색을 위해 YAML frontmatter 태그를 추출합니다. 사용자는 특정 MCP 도구를 통해 패턴 검색, 새 파일 추가 또는 기존 문서 업데이트를 수행하며 지식 베이스를 관리할 수 있습니다. 이러한 설정을 통해 코딩 에이전트는 코드를 생성하기 전에 팀의 확립된 패턴을 참조하므로 코드베이스 전반의 일관성을 유지할 수 있습니다.
활용 사례
- 1엔지니어링 패턴 검색AI 에이전트에게 로컬 문서에서 특정 코딩 컨벤션이나 에러 처리 전략을 찾아달라고 요청합니다.
- 2패턴 커버리지 감사새로 작성된 패턴이 기존 문서의 용어 및 요구 사항과 일치하는지 확인합니다.
프로젝트의 README를 바탕으로 작성되었습니다. 모든 활용 사례는 해당 내용의 인용문과 대조하여 확인합니다.
Lore MCP 도구 6
README에서 감지됨search_patternsadd_patternupdate_patternappend_to_patternlist_patternslore_status
| search_patterns | — | |
| add_pattern | — | |
| update_pattern | — | |
| append_to_pattern | — | |
| list_patterns | — | |
| lore_status | — |
자동 검사
2026년 11월 14일에 실행됨전체 보고서 →아직 인증되지 않았습니다. 서버는 80점 이상의 점수, 심각한 결함 없음, 그리고 검사에 충분한 데이터를 갖추어야 합니다. 검사 방식 · 점수를 높이기 위해 수정할 항목
- 소스 저장소 연결 및 접근 가능attila/lore is public and reachablegithub.com/attila/lore ↗통과
- 패키지가 이 저장소를 소스로 명시검사되지 않음
- 빌드 출처(Sigstore 증명)검사되지 않음
- 오픈 소스 라이선스 (OSI)Apache-2.0spdx.org/licenses/Apache-2.0.html ↗통과
- 최근 1년 내 커밋 또는 릴리스Last commit or release 2026-11-01github.com/attila/lore ↗통과
- OpenSSF Scorecard검사되지 않음
- 패키지 이름이 인기 패키지와 유사하지 않음검사되지 않음
- 패키지 및 해당 종속성에 중요한 보안 권고 없음검사되지 않음
- 모델에 대한 숨겨진 지침 없음6 tool descriptions and the README read; no override phrases, credential paths or hidden characters통과
- 파괴적인 도구에 라벨 표시됨No tool named like delete, drop or exec통과
- 원격 엔드포인트가 MCP 핸드셰이크에 응답검사되지 않음
README
GitHub에서 보기Lore
Your engineering wisdom, always in context.
Lore is a local semantic search engine for your software patterns and conventions, exposed as a Model Context Protocol (MCP) tool for Claude Code. Your knowledge lives as markdown files in a git repository. Lore indexes them with hybrid full-text and vector search, then serves results over MCP so your AI coding agent consults your patterns before writing code.
Single Rust binary. No external database. Only runtime dependency is an embedding server:
Ollama by default, or an OpenAI-compatible embedding server such as
llama-server.
How It Works
Markdown files (git repo, source of truth)
│
▼ ingest
┌───────────────┐ ┌──────────┐
│ lore │──────▶│ Ollama │ (embed chunks)
│ (Rust binary) │◀──────│ :11434 │
└───────┬───────┘ └──────────┘
│
▼
┌───────────────┐
│ SQLite │ FTS5 (lexical) + sqlite-vec (vector)
│ (single file) │ both compiled into the binary
└───────┬───────┘
│
▼ MCP over stdio
┌───────────────┐
│ Claude Code │
└───────────────┘
Install
Prerequisites
- Ollama:
brew install ollamaor see install options
To use llama-server, LM Studio or a hosted service instead, see
Embedding Servers.
lore init needs the embedding server running. After setup, if the server becomes unavailable,
search falls back to keyword matching and warns that it has.
Homebrew
On macOS (Apple Silicon or Intel) and Linux (x86_64 or Arm), install with Homebrew:
brew install attila/tap/lore
The formula installs the prebuilt release archive, verified against its published checksum, and is updated with every stable release. It does not install Ollama.
Prebuilt archive
Prebuilt binaries are published with every tagged release on the
releases page, accompanied by a SHA256SUMS file for
integrity verification. Pick VERSION from the releases page. Set TARGET to one of
x86_64-unknown-linux-gnu (most Linux), x86_64-unknown-linux-musl (Alpine and musl distros),
aarch64-unknown-linux-musl (Arm Linux), aarch64-apple-darwin (Apple Silicon), or
x86_64-apple-darwin (Intel Mac):
VERSION=0.6.0
TARGET=x86_64-unknown-linux-gnu
curl -LO https://github.com/attila/lore/releases/download/v${VERSION}/lore-${VERSION}-${TARGET}.tar.gz
curl -LO https://github.com/attila/lore/releases/download/v${VERSION}/SHA256SUMS
sha256sum -c SHA256SUMS --ignore-missing # macOS: shasum -a 256 -c SHA256SUMS --ignore-missing
tar xzf lore-${VERSION}-${TARGET}.tar.gz
sudo mv lore /usr/local/bin/
# (no sudo? mkdir -p ~/.local/bin && mv lore ~/.local/bin/, then ensure ~/.local/bin is on PATH)
Why does Gatekeeper block the binary? Tarballs downloaded via
curlrun without further intervention. If you download via a browser, macOS may attach thecom.apple.quarantineextended attribute and refuse to launch the binary. Clear it withxattr -d com.apple.quarantine ./loreafter extraction (or right-click → Open the first time). The binary is not Apple-notarized: that requires a paid Developer ID certificate, which the project does not currently hold.
Build from source
Building from source needs Rust (the version pinned in rust-toolchain.toml)
and just (cargo install just).
just install
This runs cargo install --path ., placing the lore binary in ~/.cargo/bin/ (which rustup adds
to PATH during Rust installation). To build without installing:
cargo build --release
# binary at ./target/release/lore
Quick Start
Initialise and Use
# Point lore at a directory of markdown files (git repository recommended)
lore init --repo ~/my-patterns
# Test a search
lore search "error handling"
# Check health
lore status
The init command verifies Ollama is running, pulls the embedding model (nomic-embed-text,
~270MB), creates lore.toml and the knowledge database, and runs the first ingestion.
For an OpenAI-compatible embedding server, add --provider openai-compatible, --url and
--model, as Embedding Servers shows.
Use with Claude Code
Install the lore plugin to get the MCP server, lifecycle hooks, and the /search and
/coverage-check skills:
claude --plugin-dir /path/to/lore/integrations/claude-code/
The plugin assumes lore is on PATH and uses the default configuration
(~/.config/lore/lore.toml). If you use a custom configuration path, either edit
integrations/claude-code/mcp.json to add your --config flag, or add the MCP server manually:
claude mcp add --scope user --transport stdio lore -- \
lore serve --config /path/to/lore.toml
The manual approach gives only the MCP server. The plugin also includes hooks that inject relevant
patterns before edits, a /search skill for on-demand queries, and a /coverage-check skill. The
/coverage-check skill audits a draft pattern's vocabulary coverage by simulating the PreToolUse
hook's own query extraction against synthetic tool calls.
Patterns whose tags: frontmatter list contains universal opt into an always-on tier. Lore emits
these in full at every SessionStart. It re-injects them on every relevant tool call, for
process-level conventions like push discipline that need continuous reinforcement. See the "When to
use the universal tag" section in the pattern authoring guide.
Commands
| Command | Purpose |
|---|---|
lore init --repo <path> |
First-time setup: provision Ollama, create configuration, ingest |
lore ingest |
Re-index the knowledge directory after editing markdown files |
lore ingest --file <path> |
Index a single file without requiring a git commit |
lore serve |
Start the MCP server (stdio transport for Claude Code) |
lore search <query> |
Search from the command line |
lore extract-queries |
Simulate the hook's FTS5 query extraction for a tool call |
lore list |
List every indexed pattern |
lore status |
Check health of all components |
lore trace why |
Explain lore's injection decisions from its trace files |
lore trace prune |
Compress and delete old trace files |
What if the knowledge directory is empty?
lore ingestandlore serveprint a warning to stderr ("Warning: knowledge directory is empty …") and continue. An empty directory is a legal state, not an error, so the exit status stays0. Add a.mdfile or relax.loreignoreto populate the index.lore statusreports the same state via itsScan set:line, and the MCPlore_statustool exposesempty_knowledge_dir: trueplusknowledge_dir_status: "empty"for monitoring callers.
MCP Tools
The server exposes six tools:
| Tool | Purpose |
|---|---|
search_patterns |
Semantic + keyword search across all patterns |
add_pattern |
Create a new pattern file, index it, and commit if the base is a git repository |
update_pattern |
Replace an existing pattern's content, re-index, and commit if git is in use |
append_to_pattern |
Add a section to an existing pattern, re-index, and commit if git is in use |
list_patterns |
List every indexed pattern with its tags and whether it is universal |
lore_status |
Report knowledge directory health: git status, indexed counts, last commit |
Knowledge Directory Format
Your knowledge directory is a directory of markdown files. Any structure works:
my-patterns/
├── error-handling.md
├── testing/
│ ├── unit-tests.md
│ └── integration-tests.md
├── api-design.md
└── code-style.md
Only files with a .md or .markdown extension are ingested. Other files (.txt, .mdx, .rst,
etc.) are skipped without a warning. They do not appear in search results.
Git is recommended but not required. Lore works against a plain directory, but delta ingest, the inbox branch workflow, and version history are all unavailable without a git repository. See Configuration Reference → Git Integration for the full picture.
Files are chunked by heading: each ## Section becomes a separate searchable unit. YAML frontmatter
tags are extracted and searchable.
To exclude non-pattern files such as README.md, CONTRIBUTING.md, or a drafts/ directory from
indexing, place a .loreignore file at the repository root. The syntax matches .gitignore and
supports negation patterns. See the Configuration Reference for
details.
---
tags: [error-handling, rust, result-types]
---
# Error Handling with Result Types
Always use Result<T, E> for fallible operations...
Search
- Hybrid (default): Combines FTS5 lexical search and sqlite-vec vector similarity using Reciprocal Rank Fusion. Title and tag matches are weighted above body text, so domain-scoped queries return the right patterns first.
- Full-Text Search (FTS) only: Set
hybrid = falseinlore.tomlto skip the embedding server at query time.
Documentation
| Guide | Description |
|---|---|
| Pattern Authoring Guide | How to write patterns that agents follow |
| Search Mechanics Reference | Full search pipeline internals for debugging discoverability |
| Hook Pipeline and Plugin Reference | Hook lifecycle, plugin setup, and injection tuning |
| Configuration Reference | lore.toml options, environment variables, CLI flags |
| Embedding Servers | Use an OpenAI-compatible embedding server instead of Ollama |
| Release Process | Maintainer runbook for cutting releases |
Development
Prerequisites
just: task runner- dprint: formatter
- cargo-deny: dependency auditor
- git-cliff: changelog generator
Commands
just setup # configure git hooks (run once after clone)
just ci # run the full quality gate pipeline
| Command | What it does |
|---|---|
just setup |
Configure git hooks (run once after clone) |
just fmt |
Check formatting |
just fmt-fix |
Fix formatting |
just clippy |
Run clippy lints |
just test |
Run tests (no Ollama needed) |
just deny |
Run dependency audits |
just doc |
Build documentation |
just changelog |
Regenerate CHANGELOG.md from git history |
just ci |
Run the full pipeline |
License
Dual-licensed under MIT and Apache 2.0.
Lore MCP 질문
Lore MCP는 어떤 도구를 제공하나요?
6개 도구를 제공합니다. 예: search_patterns, add_pattern, update_pattern, append_to_pattern, list_patterns.
Lore를 실행하기 위한 요구 사항은 무엇인가요?
Lore는 단일 Rust 바이너리로 실행되며, 기본적으로 Ollama 또는 llama-server와 같은 OpenAI 호환 서버 등 임베딩 서버가 필요합니다.
검색 기능은 어떻게 작동하나요?
FTS5 어휘 검색과 Reciprocal Rank Fusion을 사용하는 sqlite-vec 벡터 유사성을 결합한 하이브리드 검색을 사용합니다.
git repository 없이도 Lore를 사용할 수 있나요?
네, Lore는 일반 디렉터리에서도 작동합니다. 다만 delta ingest 및 버전 히스토리와 같은 기능은 git repository가 필요합니다.
임베딩 서버를 사용할 수 없게 되면 어떻게 되나요?
설정 후 임베딩 서버를 사용할 수 없게 되면 검색은 키워드 매칭 방식으로 전환되며 경고가 발생합니다.