Context7
Up-to-date docs for AI agents
제작자가 쓴 설명(영어 원문)
MindQL queries, hybrid search, and a thought graph - read/write memory for AI agents.
이 세 가지는 절대 하나의 점수로 합치지 않아요. 의견, 측정, 인기는 서로 다른 것이니까요.
이 서버는 아직 쉬운 말로 된 요약을 쓰지 못했어요. 아래는 레지스트리에서 읽어 온 사실이에요.
쓰고 있는 AI 앱을 고른 다음 설정을 복사하세요.
ENGRAVA_DB_PATH, ENGRAVA_MCP_CONFIG, ENGRAVA_MCP_READ_ONLY필요한 것
어떤 앱을 쓰세요?
위에서 앱을 고르세요. 기억해 두었다가 다음부터는 버튼에 “…에 설치”라고 표시해요.
Claude Desktop → Settings → Developer → Edit Config를 열고 claude_desktop_config.json에 이 내용을 붙여 넣으세요
{
"mcpServers": {
"engrava": {
"command": "uvx",
"args": [
"engrava-mcp"
],
"env": {
"ENGRAVA_DB_PATH": "your-value",
"ENGRAVA_MCP_CONFIG": "your-value",
"ENGRAVA_MCP_READ_ONLY": "your-value"
}
}
}
}터미널에서 이 명령어를 실행하세요
claude mcp add engrava --env ENGRAVA_DB_PATH=your-value --env ENGRAVA_MCP_CONFIG=your-value --env ENGRAVA_MCP_READ_ONLY=your-value -- uvx engrava-mcp실행하기 전에 빈 값을 채워 주세요.
프로젝트의 .cursor/mcp.json 또는 ~/.cursor/mcp.json에 붙여 넣으세요
{
"mcpServers": {
"engrava": {
"command": "uvx",
"args": [
"engrava-mcp"
],
"env": {
"ENGRAVA_DB_PATH": "your-value",
"ENGRAVA_MCP_CONFIG": "your-value",
"ENGRAVA_MCP_READ_ONLY": "your-value"
}
}
}
}브라우저가 앱을 열지 물어본 다음, 앱이 설정을 보여 주고 확인을 요청해요. 키 값은 비워 두니 직접 입력하세요.
프로젝트의 .vscode/mcp.json에 붙여 넣으세요
{
"servers": {
"engrava": {
"type": "stdio",
"command": "uvx",
"args": [
"engrava-mcp"
],
"env": {
"ENGRAVA_DB_PATH": "your-value",
"ENGRAVA_MCP_CONFIG": "your-value",
"ENGRAVA_MCP_READ_ONLY": "your-value"
}
}
}
}브라우저가 앱을 열지 물어본 다음, 앱이 설정을 보여 주고 확인을 요청해요. 키 값은 비워 두니 직접 입력하세요.
이 서버는 내 컴퓨터에서 실행되는데, ChatGPT는 인터넷에 있는 서버에만 연결할 수 있어요. 다른 앱을 고르세요.
선택한 앱은 이 기기의 쿠키에만 저장돼요. 계정은 필요 없어요.
ENGRAVA_MCP_CONFIG envENGRAVA_MCP_READ_ONLY env이 설정은 제작자의 레지스트리 정보로 만들었어요. README와 다르면 README를 따르세요.
내 컴퓨터에서 실행돼요. 설치하면 AI 앱에 도구 목록이 나타나요.
누구나 볼 수 있는 정보를 점검했고, 코드는 읽지 않았어요. 해당하지 않는 항목은 개수에서 뺐어요. · 2026년 11월 6일 점검
레지스트리 이름이 도메인 sovantica.ai 기준으로 확인되었어요(레지스트리가 도메인 소유를 확인해요)
아직 GitHub에서 이 저장소를 읽어 오지 않았어요
아직 GitHub에서 이 저장소를 읽어 오지 않았어요
내 컴퓨터에서 실행되는 서버라 인터넷 엔드포인트가 없어요
내 컴퓨터에서 실행되며, 대신 로컬 설정을 사용해요
내 컴퓨터에서 실행돼요. 도구 목록은 인터넷 엔드포인트가 있는 서버에서만 읽을 수 있어요
레지스트리에서 이 카테고리의 활성 서버 전체와 비교했어요. 스타는 게시자가 저장소를 소유한 경우에만 세요.
해당하는 기본 점검 1개 중 1개를 통과했어요. 코드는 읽지 않았어요. 키나 토큰을 넣기 전에 서버가 어떤 권한을 요구하는지 확인하고, 꼭 필요한 권한만 있는 키를 쓰세요.
입력해야 할 값: ENGRAVA_DB_PATH
내 컴퓨터에서 실행돼요. AI 앱이 필요할 때 실행하고, 데이터는 제작자의 서버를 거치지 않아요(서버 자체가 온라인 서비스를 호출하는 경우는 제외).
GitHub 저장소는 마지막으로 – 변경됐고, 최신 버전(0.7.0)은 35일 전 레지스트리에 올라왔어요.
Claude Desktop, Claude Code, Cursor, VS Code처럼 MCP를 지원하는 앱에서 쓸 수 있어요. 내 컴퓨터에 Python (uv)도 있어야 해요.
같은 카테고리에는: Context7, Codebase Memory, Exa
같은 카테고리에서 다른 제작자가 만든 서버예요. 스타 순으로 정렬했어요.
카드 보는 법:★ GitHub 스타i세 기둥: 리뷰 · 점검 · 사용 정도i업데이트 = 최신 버전을 레지스트리에 공개한 날i
Up-to-date docs for AI agents
Codebase knowledge graph for AI agents — 162 languages, sub-ms queries, 99% fewer tokens.
Connect AI agents to Exa for web search, content fetching, and multi-step research.
제작자의 저장소에서 쓰인 그대로 가져왔어요. PopNx MCP가 검토하거나 보증한 내용이 아니에요. HTML, 이미지, 스크립트는 제거했어요. 링크를 누르면 이 사이트를 벗어나요.
The [Model Context Protocol](https://modelcontextprotocol.io) server for [Engrava](https://github.com/sovantica/engrava) — expose an agent memory database to any MCP client (Claude Desktop, Claude Code, Cursor, Windsurf, VS Code, …) over stdio.
engrava-mcp is a standalone, runnable package that consumes Engrava's public API. It is the one way to run Engrava as a memory server; the engrava library itself ships no MCP code.
uv tool install engrava-mcp # recommended for daily use: a persistent install
engrava-mcp # spawned by your MCP client over stdio
uvx engrava-mcp runs it without an install step, and pip install engrava-mcp works too. uvx keeps its environment in a cache. When that cache is cold, the first start waits for the download; see Optional providers for the [local] extra, where the download is largest.
Installing engrava-mcp pulls in engrava transitively, so you also get the import engrava library in the same environment.
engrava-mcp follows Engrava's version: `engrava-mcp X.Y.z` targets `engrava X.Y` and requires engrava >=X.Y, =0.5,<0.6 | | 0.6.x | >=0.6,<0.7 | | 0.7.x | >=0.7,<0.8 |
The dependency range is the source of truth. Normal installs resolve a compatible engrava automatically; if you pin engrava yourself, keep it within that range. If no matching engrava-mcp exists yet for an engrava newer than the table's last row, that pairing is not yet verified/supported — not broken; stay on a supported pair until a matching engrava-mcp ships.
| Goal | Install |
|---|---|
| Build on the Engrava Python API (memory DB in your own code) | pip install engrava |
| Run Engrava as a memory server for an MCP client | uvx engrava-mcp (or pip install engrava-mcp) |
There is no third option.
engrava[mcp]The server used to ship inside Engrava as the engrava[mcp] extra and an in-engrava engrava-mcp command. As of Engrava 0.5.0 it lives here instead.
| Before | After |
|---|---|
pip install "engrava[mcp]" | pip install engrava-mcp (or uvx engrava-mcp) |
engrava-mcp (installed by engrava) | engrava-mcp (installed by this package) |
client mcp.json: "command": "engrava-mcp" | client mcp.json: "command": "uvx", "args": ["engrava-mcp"] |
pip install "engrava[mcp]" against Engrava 0.5 does not fail — pip ignores the now-unknown extra and quietly installs bare engrava, so it can look like the server installed when it did not. Install engrava-mcp instead.engrava[mcp]>=...) to depend on engrava-mcp, not just reinstall.engrava.yaml / env vars work exactly as before (see Configuration).The server resolves its store from environment variables, in priority order:
| Variable | Meaning |
|---|---|
ENGRAVA_MCP_CONFIG | Path to an engrava.yaml. Built with the full configuration — embedding provider, vector backend, journal, TTL. The thought/edge journal is configured here: set journal: enabled: true to turn it on. Recommended. |
ENGRAVA_DB_PATH | Path to a bare SQLite database file. Use an absolute path: a relative one resolves against the server's working directory, which the client chooses. Zero-config quick-start; no embedding provider is configured, so semantic (vector) search is inert — full-text search, the graph, and MindQL still work. This route builds the store with no journal; use ENGRAVA_MCP_CONFIG for that. "Zero-config" means Engrava's default search policy, so search_memory's recency_now is honoured on this route too — recency is scored against the timestamp you supply, under Engrava's default search weights. |
ENGRAVA_MCP_READ_ONLY | When set to 1 / true / yes, the write tools are not registered and no read makes a write of its own — including a deferred access-count update a store with access tracking on would otherwise buffer and flush on close. Every tool's readOnlyHint annotation is therefore accurate under this mode, on every configuration route. Read-only mode governs the tools, not how the database is opened. At startup the server still opens the file read-write, creates it if it is missing, and upgrades its schema to the one its Engrava version uses, so a database file the server cannot write cannot be served in this mode either. |
Recommended: give the MCP server the same engrava.yaml your application uses. The yaml is the only place to declare an embedding provider (and its model / key), which the server needs to embed a *new query* at search time for semantic search. With only ENGRAVA_DB_PATH set, the server emits a startup warning that semantic search is inert and points you at ENGRAVA_MCP_CONFIG.
At search time, the server embeds the query with the provider this yaml declares. Whether this server's writes embed anything is decided by the same yaml's embeddings.auto_embed, which Engrava leaves off by default. With it off, a thought created through store_thought gets no embedding, so search_memory's vector ranking cannot match it — its keyword ranking still can — and an update_thought leaves whatever embedding the thought already had as it was, not refreshed. With it on, creating a thought, or changing its essence or content, also calls the provider.
Engrava extensions that hook the store — anything wired through an engrava.yaml's hooks: section — are attached only on the ENGRAVA_MCP_CONFIG launch. ENGRAVA_DB_PATH opens a bare database and carries no configuration, so it runs with Engrava's default hooks and cannot attach a store-hook extension. That is deliberate: it is an intentionally minimal read/write facade.
Installing such an extension and starting with ENGRAVA_DB_PATH therefore leaves its store hooks unattached in this server. When an installed package advertises any extension, the server emits a startup warning naming it — it reports what is advertised, not what each one does, since it never loads them itself — so you can tell the difference between "nothing advertised" and "advertised but nothing wired it here". If reading the installed-package metadata raises an ordinary error, the server attempts to log that instead and carries on starting. Both go through Python's logging, so whether and where they surface is up to your logging configuration. To wire a store hook, launch with ENGRAVA_MCP_CONFIG pointing at an engrava.yaml with a hooks: section:
hooks:
class: "my_package.hooks.MyHooks"
engrava.yamldatabase:
path: /absolute/path/to/memory.db embeddings: provider: openai-compatible # or: ollama, sentence-transformer, huggingface model: text-embedding-3-small api_key: ${OPENAI_API_KEY}
A relative database.path resolves against the server process's working directory, which the MCP client chooses, not against the yaml's folder.
Point your MCP client at the server over stdio. For example, a typical mcp.json entry:
{
"mcpServers": { "engrava": { "command": "engrava-mcp", "env": { "ENGRAVA_MCP_CONFIG": "/absolute/path/to/engrava.yaml" } } } }
A ${VAR} value in the engrava.yaml, such as ${OPENAI_API_KEY}, is read from the server's own environment, so add that variable to the same env block, unless the client is known to pass its own environment through.
This assumes uv tool install engrava-mcp. If your client cannot find the command, give its absolute path; uv tool dir --bin prints the directory. Without an install, use "command": "uvx", "args": ["engrava-mcp"].
Use ENGRAVA_DB_PATH instead of ENGRAVA_MCP_CONFIG for the zero-config quick-start, and add "ENGRAVA_MCP_READ_ONLY": "1" for an app-writes / agent-reads deployment.
engrava-mcp # console script
python -m engrava_mcp # module run python -m engrava_mcp.server # module run (server module directly)
For an MCP deployment, prefer an embedding provider that runs outside the server process: Ollama (provider: ollama) or an OpenAI-compatible endpoint (provider: openai-compatible). The default install already covers both, and the server then loads no embedding model itself.
The default install supports the vector backend and HTTP-based embedding providers (OpenAI / Ollama) once configured in the yaml. Heavier providers are opt-in extras that mirror Engrava's own extras:
uvx --from "engrava-mcp[local]" engrava-mcp # sentence-transformers (local model)
uvx --from "engrava-mcp[hf]" engrava-mcp # HuggingFace Inference API uvx --from "engrava-mcp[openai]" engrava-mcp # OpenAI-compatible embeddings deps uvx --from "engrava-mcp[ollama]" engrava-mcp # Ollama embeddings deps
[local] runs the model inside the server process and installs PyTorch, which can add several gigabytes. A first start on a cold uvx cache waits for that download; later starts reuse the cache. uv tool install "engrava-mcp[local]" pays the download once, at install time. A model that is not already in the local model cache is downloaded when it is first loaded.
get_thought, search_memory, search_keywords, list_memory, query_memory, memory_stats, get_edges, list_edges (read); store_thought, update_thought, link_thoughts, delete_thought, delete_edge (write, gated by ENGRAVA_MCP_READ_ONLY).engrava://thought/{thought_id}, engrava://stats, engrava://recent.summarize_recent_memory, find_related, reflect_on_topic.query_memory accepts only MindQL FIND queries; raw SQL and every other command are rejected. It returns at most 5000 rows. A limit argument replaces the query's own LIMIT; without one, a LIMIT outside 1–5000 is refused.
get_edges traverses a thought's edges by direction (IN / OUT / BOTH); with limit, at most that many edges, the highest-weight ones first, and without it, every edge. list_edges browses edges filtered by type, source, or metadata.
link_thoughts accepts optional edge metadata (JSON fields that list_edges can filter on). search_memory accepts an optional recency_now (ISO-8601 timestamp) giving the moment to measure age against (transaction time); recency takes part in the ranking only when you pass it.
pip install -e ".[dev]"
ruff check src/ tests/ ruff format --check src/ tests/ mypy --strict src/ pytest --cov --cov-fail-under=90
MIT