Context7
Up-to-date docs for AI agents
作者による説明(英語の原文)
Local hybrid keyword + vector search (SQLite FTS5 + sqlite-vec) over markdown vaults and code.
この3つを1つのスコアにまとめることはしません。意見、測定、人気はそれぞれ別のものだからです。
このサーバーのやさしい解説はまだ書いていません。以下はレジストリから読み取った事実です。
使っているAIアプリを選んで、設定をコピーしてください。
VAULT_INDEX_DB, VAULT_RERANK, VAULT_MODEL_CACHE必要なもの
どのアプリを使っていますか?
上でアプリを選んでください。選んだアプリを覚えておくので、次からはボタンに「…にインストール」と表示されます。
Claude Desktop → Settings → Developer → Edit Config を開き、claude_desktop_config.json にこれを貼り付けます
{
"mcpServers": {
"vault-index": {
"command": "uvx",
"args": [
"vault-index"
],
"env": {
"VAULT_INDEX_DB": "your-value",
"VAULT_RERANK": "your-value",
"VAULT_MODEL_CACHE": "your-value"
}
}
}
}ターミナルでこれを実行します
claude mcp add vault-index --env VAULT_INDEX_DB=your-value --env VAULT_RERANK=your-value --env VAULT_MODEL_CACHE=your-value -- uvx vault-index動かす前に、空欄の値を入力してください。
プロジェクトの .cursor/mcp.json、または ~/.cursor/mcp.json に貼り付けます
{
"mcpServers": {
"vault-index": {
"command": "uvx",
"args": [
"vault-index"
],
"env": {
"VAULT_INDEX_DB": "your-value",
"VAULT_RERANK": "your-value",
"VAULT_MODEL_CACHE": "your-value"
}
}
}
}ブラウザがアプリを開いてよいか確認し、そのあとアプリが設定を表示して確認を求めます。キーの値は空欄のままなので、自分で入力してください。
プロジェクトの .vscode/mcp.json に貼り付けます
{
"servers": {
"vault-index": {
"type": "stdio",
"command": "uvx",
"args": [
"vault-index"
],
"env": {
"VAULT_INDEX_DB": "your-value",
"VAULT_RERANK": "your-value",
"VAULT_MODEL_CACHE": "your-value"
}
}
}
}ブラウザがアプリを開いてよいか確認し、そのあとアプリが設定を表示して確認を求めます。キーの値は空欄のままなので、自分で入力してください。
これはパソコンで動くサーバーですが、ChatGPTがつなげるのはインターネット上のサーバーだけです。ほかのアプリを選んでください。
選んだアプリは、この端末のCookieに保存されます。アカウントは不要です。
VAULT_INDEX_DB envVAULT_RERANK envVAULT_MODEL_CACHE envこの設定は、作者のレジストリ登録情報から作成しています。READMEと違う場合は、READMEに従ってください。
パソコンで動くサーバーです。インストールすると、ツール一覧がAIアプリに表示されます。
誰でも見られる情報をチェックしており、コードは読んでいません。当てはまらない項目は数に入れていません。 · 2026年11月6日にチェック
レジストリ名は、リポジトリを所有するGitHubアカウント GitGudatCodeing で確認済みです
このリポジトリはまだGitHubから読み取っていません
このリポジトリはまだGitHubから読み取っていません
これはパソコンで動くため、インターネット上のエンドポイントはありません
パソコンで動き、代わりにローカルの設定を使います
パソコンで動くサーバーです。ツール一覧を読み取れるのは、インターネット上のエンドポイントがある場合だけです
レジストリでこのカテゴリにある有効なすべてのサーバーと比較しています。スターは、公開者がリポジトリの所有者である場合だけ数えます。
当てはまる基本チェック1項目のうち1項目に合格しました。コードは読んでいません。キーやトークンを追加する前に、サーバーがどんなアクセスを求めているかを確認し、必要な権限だけを持つキーを使ってください。
レジストリには必須のキーは載っていません。ただし、最初に使うときにサインインを求めるサーバーもあります。
あなたのパソコンで動きます。必要なときにAIアプリが起動し、データは作者のサーバーを通りません(サーバー自体がオンラインサービスを呼び出す場合を除きます)。
GitHubリポジトリの最終更新は–、最新バージョン(0.4.2)がレジストリに届いたのは9 日前です。
Claude Desktop、Claude Code、Cursor、VS CodeなどのMCP対応アプリで使えます。パソコンにPython (uv)も必要です。
同じカテゴリには:Context7, Codebase Memory, Exa
同じカテゴリで、ほかの作者が作ったサーバー。スターの多い順。
カードの見方:★ GitHubスターi3つの柱:レビュー · チェック · 利用状況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、画像、スクリプトは取り除いています。リンクはこのサイトの外へ移動します。
A local, private long-term memory for Claude Code. Your markdown notes stay the record. Claude searches them through a hybrid keyword + vector index, writes decisions and lessons back as plain files, and hooks keep the index, the knowledge graph and long sessions in check.
Everything runs on your machine: one SQLite file, two small CPU models, no cloud services.
Terminal replay of real output from a fresh clone of v0.1.0 with the sample vault (eval then had 32 questions); only the typing animation is added.
Claude Code forgets everything between sessions. The usual fixes are a huge CLAUDE.md (expensive on every turn) or a vector store nobody can read or fix. This project takes a different line:
flowchart LR
subgraph files["Markdown files: the record"] notes["notes/"] adr["docs/adr/"] lessons["docs/lessons.md"] handoffs["docs/handoffs/"] end
cc["Claude Code"] vi["vault-index MCP server mcp/server.py"] db[("vault-index.db FTS5 + sqlite-vec")] mem["memory MCP server"] kg[("memory.jsonl entities and relations")]
cc -- "Write / Edit" --> files cc -- "PostToolUse hook reindex_hook.py" --> db cc -- "search_notes, get_note" --> vi vi --> db files -- "index_paths" --> db cc -- "search_nodes" --> mem mem --> kg kg -. "each fact names its source file" .-> files
| Hook | Script | What it does |
|---|---|---|
| SessionStart | scripts/invariants.py --hook | 10 checks: MCP servers launchable, graph sources exist, index fresh, hooks wired, golden labels valid, lessons well-formed, context budget. |
| PostToolUse (Write, Edit) | mcp/reindex_hook.py | Re-indexes the edited file if it sits under a registered source. Never blocks. |
| UserPromptSubmit, PostToolUse (async) | scripts/context_guard.py | Reads the real context size from the transcript. Silent until 250k tokens (.claude/handoff.json), then requires /handoff: a note plus a card to start the fresh session. On every prompt, and once per session mid-turn. |
| PreCompact | scripts/precompact_snapshot.py | Saves recent requests and touched files to docs/handoffs/auto/ as a fallback before compaction. |
flowchart LR
q["query"] --> sw["drop stopwords"] --> fts["FTS5 bm25 top 4 x limit"] q --> emb["embed with bge-small-en-v1.5"] --> vec["sqlite-vec kNN top 4 x limit"] fts --> rrf["reciprocal rank fusion k = 60, keyword weight 0.1"] vec --> rrf rrf --> rr["cross-encoder rerank top 10, MiniLM-L6"] rr --> out["top chunks with file path and heading path"]
Recipe box data model > Units.ms-marco-MiniLM-L-6-v2, 80 MB) then reorders the top 10 by reading query and chunk together. It adds about 200 ms per search on CPU; VAULT_RERANK=0 turns it off..indexignore keeps tooling code out of results.MCP tools: index_paths, search_notes, get_note, list_sources, remove_source.
| Command | What it does |
|---|---|
/recall | Searches notes, lessons and the graph together and answers with clickable sources. Read-only. |
/adr | Writes a decision record to docs/adr/ and links it in the graph. |
/learn | Records a lesson as a testable directive (scripts/learn.py): lesson, cause, how to detect it. Supersede or retire, never delete. |
/ingest | Indexes a file or folder and adds its durable entities to the graph. |
/handoff [topic] | Writes a handoff note and starts a fresh session from it. |
Installed as a plugin, the commands carry its name: /second-brain:recall, /second-brain:adr and so on.
Needs uv (it fetches Python 3.10 to 3.13), Node.js for the memory server, and Claude Code.
In the folder that holds your notes:
claude plugin marketplace add GitGudatCodeing/claude-second-brain
claude plugin install second-brain@second-brain --scope project
Start claude there, then ask it to index the folder ("index_paths .") and try /second-brain:recall . The plugin brings the five commands, the hooks (re-index on edit, context guard, pre-compact snapshot) and both MCP servers. Decision records go to docs/adr/, lessons to docs/lessons.md, handoffs to docs/handoffs/, and the knowledge graph to memory.jsonl, all inside that folder. The search index is shared at ~/.mcp-memory/vault-index.db.
--scope project keeps the plugin to that folder: the context guard would otherwise run in every project. The plugin leaves out the session-start invariants, which check this repo's layout. Change the handoff limit with a .claude/handoff.json like this repo's (default 250k tokens).
Use the plugin or the clone below in a folder, not both: each starts its own vault-index server.
The full repo adds the sample vault, the eval and the invariants.
git clone https://github.com/GitGudatCodeing/claude-second-brain.git
cd claude-second-brain uv run --project mcp python scripts/setup.py
setup.py writes .mcp.json (memory graph at ~/.mcp-memory/memory.jsonl unless you pass --memory-file), indexes the folder and runs the invariants. Then start claude in the folder, approve the project MCP servers and hooks, and try /recall garden sensor battery life. Check the wiring any time with python scripts/invariants.py.
Your own notes go in notes/. Delete example-vault/ when you no longer need the eval, and update eval/golden.jsonl with questions about your own notes.
On Windows, Claude Code runs hooks through Git Bash; the hook commands already use forward slashes.
vault-index is on PyPI and in the MCP registry. To use the hybrid search on any folder of notes without the rest of this repo:
claude mcp add vault-index -- uvx --python 3.12 vault-index
Then ask Claude to index a folder (for example "index_paths ~/notes") and search it with search_notes.
It also works from a terminal. Indexing a large vault there first shows progress and keeps Claude's first tool call short:
uvx --python 3.12 vault-index index ~/notes # no paths re-syncs every source
uvx --python 3.12 vault-index search "your question" -n 5 uvx --python 3.12 vault-index sources uvx --python 3.12 vault-index --help
With no command it serves MCP over stdio. The index lives in ~/.mcp-memory/vault-index.db. To move it, set VAULT_INDEX_DB in your shell environment rather than only in the MCP config, so the server, the re-index hook and the invariants all use the same file. --python 3.12 keeps uvx off newer Pythons that the embedding runtime does not support yet.
example-vault/ is a fictional person's notes, decisions and lessons. eval/golden.jsonl has 44 questions about it and about this repo's own docs, worded differently from the notes on purpose, so keyword overlap alone does not find most answers. The last 12 are hard paraphrases that share almost no words with their answer. (Keep golden questions out of indexed files like this README, or they compete with the real answers.)
VAULT_INDEX_DB=/tmp/csb-eval.db uv run --project mcp python eval/run_eval.py --modes all -v
| Mode | NDCG@5 | MRR | Recall@5 |
|---|---|---|---|
hybrid + rerank (what search_notes serves) | 0.747 | 0.797 | 0.780 |
| hybrid, fusion only (no rerank) | 0.686 | 0.724 | 0.758 |
| keyword only (FTS5) | 0.491 | 0.544 | 0.576 |
| vector only | 0.697 | 0.729 | 0.758 |
| naive grep, no index (baseline) | 0.305 | 0.341 | 0.375 |
The grep row ranks chunks by how many query words they contain, roughly what searching with rg per word gives you.
Without the reranker, vector-only edged out fusion on the sample vault (the hard paraphrases give keywords nothing to match); the reranker puts hybrid back on top. On the author's private vault (41 questions) the order is the same: hybrid + rerank 0.550, fusion only 0.487, vector 0.473, keyword 0.433, grep 0.327.
basic-memory is a popular markdown memory MCP server with its own hybrid search. eval/compare_basic_memory.py runs it (v0.24.1, same bge-small model) on a copy of the same markdown files and scores both on the same 44 questions. basic-memory returns whole notes, so both are scored per file here (vault-index chunks collapsed to their file):
| System (file level) | NDCG@5 | MRR | Recall@5 |
|---|---|---|---|
| vault-index hybrid + rerank | 0.829 | 0.858 | 0.886 |
| basic-memory, default search | 0.619 | 0.611 | 0.750 |
| basic-memory, vector only | 0.708 | 0.736 | 0.814 |
basic-memory does much more than search (it writes notes, builds a graph from them, offers cloud sync); this compares retrieval only. Its default search varied by about 0.005 between runs. It is not run in CI.
CI fails if any hybrid metric drops more than 0.03 below eval/baseline.json. Scores are identical on Ubuntu and Windows.
Each change tested alone against a saved baseline, mostly on the author's private vault:
| Change | Effect on NDCG@5 | Kept |
|---|---|---|
| Cross-encoder rerank of the top 10 (MiniLM-L6, 80 MB) | sample +0.061, private +0.063 | yes: about 200 ms per search |
| Larger rerankers (MiniLM-L12, Jina v1 tiny/turbo, bge-reranker-base) | mixed: some lost on the sample set | no |
| Keyword weight 0.1 in the fusion (was 1.0) | private +0.037, sample +0.066 | yes |
Exclude tooling code (.indexignore) | +0.063 | yes |
| Drop stopwords from the FTS query | +0.018 | yes |
| all-MiniLM-L6-v2 instead of bge-small | -0.024 | no |
| Weight headings higher in bm25 (x2 to x10) | -0.015 to -0.036 | no |
| bge-base + query prefix (768 dims) | +0.030, about one question | no: 3x the model for noise-level gain |
With equal weights, vector-only beat hybrid on the sample vault while hybrid won on the private one (jargon needs keywords). A sweep of keyword weight by RRF k on both sets found one setting that wins on both; vector-only is still worse on the private vault, so keywords stay in at a low weight. Details in [`docs/adr
冒頭だけを表示しています。続きはリポジトリで読めます