Context7
ส่งคู่มือการใช้ไลบรารีและเฟรมเวิร์กรุ่นล่าสุดให้ AI อ่านก่อนตอบ ช่วยให้โค้ดที่ AI เขียนไม่ใช้คำสั่งเก่าที่เลิกใช้แล้ว
คำอธิบายจากผู้ทำ (ภาษาอังกฤษตามต้นฉบับ)
SQLite-backed hybrid (vector + FTS) code search index for Claude Code over MCP.
สามเรื่องนี้ไม่รวมเป็นคะแนนเดียว เพราะความเห็น การวัด และความนิยม เป็นคนละเรื่องกัน
ตัวนี้ยังไม่ได้เรียบเรียงเป็นภาษาไทย ด้านล่างคือข้อเท็จจริงที่เราอ่านจาก registry
เลือกโปรแกรม AI ที่คุณใช้ แล้วคัดลอกค่าตั้งไปวาง
CODE_INDEX_EMBEDDER, CODE_INDEX_EMBED_MODEL, CODE_INDEX_EMBED_DIM, CODE_INDEX_DB, CODE_INDEX_EMBED_BATCH, CODE_INDEX_EMBED_DEVICEต้องเตรียมก่อน
คุณใช้แอปไหน
เลือกแอปด้านบน เราจำไว้ให้ ครั้งหน้าปุ่มจะขึ้นว่า “ติดตั้งลง …”
เปิด Claude Desktop → Settings → Developer → Edit Config แล้ววางค่านี้ในไฟล์ claude_desktop_config.json
{
"mcpServers": {
"code-index": {
"command": "uvx",
"args": [
"mcp-code-index"
],
"env": {
"CODE_INDEX_EMBEDDER": "ใส่ค่าของคุณ",
"CODE_INDEX_EMBED_MODEL": "ใส่ค่าของคุณ",
"CODE_INDEX_EMBED_DIM": "ใส่ค่าของคุณ",
"CODE_INDEX_DB": "ใส่ค่าของคุณ",
"CODE_INDEX_EMBED_BATCH": "ใส่ค่าของคุณ",
"CODE_INDEX_EMBED_DEVICE": "ใส่ค่าของคุณ"
}
}
}
}พิมพ์คำสั่งนี้ใน Terminal
claude mcp add code-index --env CODE_INDEX_EMBEDDER='ใส่ค่าของคุณ' --env CODE_INDEX_EMBED_MODEL='ใส่ค่าของคุณ' --env CODE_INDEX_EMBED_DIM='ใส่ค่าของคุณ' --env CODE_INDEX_DB='ใส่ค่าของคุณ' --env CODE_INDEX_EMBED_BATCH='ใส่ค่าของคุณ' --env CODE_INDEX_EMBED_DEVICE='ใส่ค่าของคุณ' -- uvx mcp-code-indexเติมค่าที่เว้นว่างไว้ก่อนรัน
วางในไฟล์ .cursor/mcp.json ของโปรเจกต์ หรือ ~/.cursor/mcp.json
{
"mcpServers": {
"code-index": {
"command": "uvx",
"args": [
"mcp-code-index"
],
"env": {
"CODE_INDEX_EMBEDDER": "ใส่ค่าของคุณ",
"CODE_INDEX_EMBED_MODEL": "ใส่ค่าของคุณ",
"CODE_INDEX_EMBED_DIM": "ใส่ค่าของคุณ",
"CODE_INDEX_DB": "ใส่ค่าของคุณ",
"CODE_INDEX_EMBED_BATCH": "ใส่ค่าของคุณ",
"CODE_INDEX_EMBED_DEVICE": "ใส่ค่าของคุณ"
}
}
}
}เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง
วางในไฟล์ .vscode/mcp.json ของโปรเจกต์
{
"servers": {
"code-index": {
"type": "stdio",
"command": "uvx",
"args": [
"mcp-code-index"
],
"env": {
"CODE_INDEX_EMBEDDER": "ใส่ค่าของคุณ",
"CODE_INDEX_EMBED_MODEL": "ใส่ค่าของคุณ",
"CODE_INDEX_EMBED_DIM": "ใส่ค่าของคุณ",
"CODE_INDEX_DB": "ใส่ค่าของคุณ",
"CODE_INDEX_EMBED_BATCH": "ใส่ค่าของคุณ",
"CODE_INDEX_EMBED_DEVICE": "ใส่ค่าของคุณ"
}
}
}
}เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง
ตัวนี้รันในเครื่องคุณ แต่ ChatGPT ต่อได้เฉพาะ server บนอินเทอร์เน็ต ลองเลือกแอปอื่น
ตัวเลือกเก็บในคุกกี้บนเครื่องนี้ ไม่ต้องมีบัญชี
CODE_INDEX_EMBEDDER envCODE_INDEX_EMBED_MODEL envCODE_INDEX_EMBED_DIM envCODE_INDEX_DB envCODE_INDEX_EMBED_BATCH envCODE_INDEX_EMBED_DEVICE envค่าตั้งนี้สร้างจากข้อมูลใน registry ของผู้ทำ ถ้าไม่ตรงกับ README ให้เชื่อ README
รันในเครื่องคุณ รายการเครื่องมือจะขึ้นในแอป AI หลังติดตั้ง
เราตรวจจากข้อมูลที่ใครก็เปิดดูได้ ยังไม่ได้อ่านโค้ด ข้อที่ไม่เกี่ยวกับตัวนี้ไม่นับในตัวหาร · ตรวจเมื่อ 6 พ.ย. 2569
ชื่อใน registry ยืนยันด้วยบัญชี GitHub achreftlili ซึ่งเป็นเจ้าของ repo
ยังไม่ได้อ่านข้อมูล repo จาก GitHub
ยังไม่ได้อ่านข้อมูล repo จาก GitHub
ตัวนี้รันบนเครื่องคุณ ไม่มี endpoint บนอินเทอร์เน็ต
ตัวนี้รันบนเครื่อง ใช้ค่าที่ตั้งในเครื่องแทน
รันในเครื่องคุณ เราอ่านรายการเครื่องมือได้เฉพาะตัวที่มี endpoint บนอินเทอร์เน็ต
เทียบกับทุก server ที่ยังใช้งานในหมวดนี้ทั้งทะเบียน ดาวนับเฉพาะเมื่อผู้ลงทะเบียนเป็นเจ้าของ repo
จากการตรวจเบื้องต้นของเรา ผ่าน 1 จาก 1 ข้อที่ตรวจได้ เรายังไม่ได้อ่านโค้ด ก่อนใส่กุญแจหรือ token ให้ดูว่า server ขอสิทธิ์อะไร และเลือกกุญแจที่ทำได้เท่าที่จำเป็น
registry ไม่ได้ระบุว่าต้องใช้กุญแจ แต่บางตัวจะขอให้ล็อกอินตอนใช้ครั้งแรก
รันบนเครื่องของคุณ โปรแกรม AI จะเปิด server ขึ้นมาเองเมื่อใช้ ข้อมูลไม่ต้องผ่านเซิร์ฟเวอร์ของผู้ทำ (ยกเว้นตัวที่ไปเรียกบริการออนไลน์ต่อ)
repo บน GitHub มีการแก้โค้ดล่าสุด – และส่งรุ่นล่าสุด (1.0.6) เข้า registry 6 เดือนที่ผ่านมา
โปรแกรมที่รองรับ MCP เช่น Claude Desktop, Claude Code, Cursor และ VS Code ตัวนี้ต้องมี Python (uv) ในเครื่องด้วย
ในหมวดเดียวกันมี Context7, Codebase Memory, Exa
server หมวดเดียวกันจากผู้ทำคนอื่น เรียงตามดาว
อ่านการ์ด:★ ดาว GitHubiสามเสา: รีวิว · ผลตรวจ · การใช้งานiอัปเดต = วันที่ส่งรุ่นล่าสุดเข้า registryi
ส่งคู่มือการใช้ไลบรารีและเฟรมเวิร์กรุ่นล่าสุดให้ AI อ่านก่อนตอบ ช่วยให้โค้ดที่ AI เขียนไม่ใช้คำสั่งเก่าที่เลิกใช้แล้ว
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.
ส่วนนี้คัดจาก repo ของผู้ทำตามต้นฉบับ PopNx MCP ไม่ได้ตรวจหรือรับรองเนื้อหา ตัด HTML รูปภาพ และสคริปต์ออกแล้ว ลิงก์จะพาออกนอกเว็บ
A local, SQLite-backed code index for Claude Code, exposed over MCP. It replaces blind Read / Grep / Glob exploration with targeted retrieval — "where is parseAuthToken defined", "what calls Indexer.reindex_all", "find the rate-limiting code" — answered in milliseconds against an offline index.
No API keys. No external services. The embedder runs locally on your machine.
getUserAuthToken → get user auth token) so search matches both styles.jina-embeddings-v2-base-code (768-dim) via sentence-transformers..claude/index.db (SQLite + sqlite-vec + FTS5).PostToolUse hook that incrementally re-indexes touched files.| Tool | Purpose |
|---|---|
code_search | Hybrid (vector + FTS) search for conceptual queries (e.g., "auth flow", "where do we parse JSON"). |
symbol_lookup | Exact-name lookup of functions / classes / methods / types. Prefer over code_search for identifiers. |
file_outline | Symbols (with signatures) in a file, in source order. Use instead of Read when you only need shape. |
module_outline | Symbols across a directory subtree in one call. Use instead of looping file_outline. |
where_am_i | Given path + line, returns the innermost symbol and the full enclosing chain. |
get_symbol_body | Full chunk for a symbol_id from symbol_lookup / code_search / file_outline. |
get_symbol_bodies | Batch version of get_symbol_body (up to 20 ids per call). |
callers | Symbols that CALL the given symbol. depth (1-5) expands transitively. |
callees | Symbols that the given symbol CALLS. depth (1-5) expands transitively. |
references | Non-call uses (subclasses, free identifier references). Companion to callers / callees. |
trace | Build a call-graph tree from an entry symbol; flat=true returns nodes/edges for cheap LLM scans. |
file_imports | Files this file imports (direction=imports) or that import it (direction=imported_by). |
recent_changes | Files touched in the last N git commits. |
propose_rename | v1: same-file rename. Returns an edit list the agent applies via its own Edit tool; refuses on clash. |
| Tool / op | Purpose |
|---|---|
admin op=init | Build or refresh the index. Incremental by default; force=true rebuilds from scratch. |
admin op=setup_check | Diagnose hook wiring + embedder + host. Round-trip-tests the hook end-to-end. |
admin op=install_hook | Wire the auto-reindex PostToolUse hook into .claude/settings.json. Idempotent. |
admin op=stats | Read-only: file counts by language, symbol totals, embed model fingerprint, last-index time. |
admin op=verify | Integrity sweep: orphan rows, parse-failure files, dangling edges. |
embed_query_debug is a dev-only ranking diagnostic, hidden from list_tools unless CODE_INDEX_DEBUG=1 is set.
All tools return bounded JSON; large bodies use get_symbol_body rather than inlining whole files.
sqlite-vec).PYTHON_CONFIGURE_OPTS=--enable-loadable-sqlite-extensions pyenv install 3.12.x.pip if you prefer a permanent install.One command, no API keys:
claude mcp add-json -s user code-index "$(cat <<'JSON'
{ "type": "stdio", "command": "uvx", "args": ["--refresh", "--from", "mcp-code-index", "code-index-mcp"] } JSON )"
Then open Claude Code in any repo and ask:
_"Build the code index for this repo."_
Claude calls the init MCP tool, which writes .claude/index.db. From then on, ask things like _"where is parseAuthToken defined?"_ or _"what calls Indexer.reindex_all?"_ — Claude routes them through symbol_lookup / callers / code_search instead of grepping.
What `--refresh` does — fetches the latest PyPI release on every Claude
Code launch. Convenient during preview; drop it once you want to pin a
version (saves ~1s of startup).
Project-only install — drop
-s userto register the server in the
current project's
.claude/settings.jsoninstead of the global~/.claude.json.
First-run model download — the first
initpulls
jina-embeddings-v2-base-code(~600 MB) into~/.cache/huggingfaceand
caches it forever. Subsequent runs are fully offline. If your network
blocks Hugging Face, pre-warm the cache from a machine that has access.
Already installed without `--refresh`? Run
claude mcp remove code-index
first, then re-run the command above.
pip install mcp-code-index
claude mcp add -s user code-index -- code-index-mcp
Without a hook, the index drifts when files change outside the agent (mv, git checkout, IDE saves) until you call init again. With one, every Edit / Write / MultiEdit Claude performs triggers an incremental reindex of the touched file.
Easiest path: ask Claude. On first use in a new project, ask _"set up the code-index"_ — Claude calls setup_check → install_hook → init. The hook command is derived from how the MCP server was launched (uvx-aware), so it uses the same Python toolchain. Hook output goes to .claude/code-index-hook.log so failures are debuggable.
Manual install — add this block to the project's .claude/settings.json under hooks.PostToolUse (the version you want depends on how you launch the server — install_hook derives the right one for you):
{
"matcher": "Edit|Write|MultiEdit", "hooks": [ { "type": "command", "command": "uvx --with 'sentence-transformers<5' --with 'numpy<2' --from mcp-code-index code-index-hook" } ] }
The server speaks standard MCP over stdio, so any client that supports MCP servers works (Cursor, Continue, Cody, Zed, etc.). Configure the client to launch uvx --refresh --from mcp-code-index code-index-mcp (or code-index-mcp after pip install mcp-code-index). Once connected, call the init tool from inside the client to bootstrap the index. Drop --refresh when you want to pin to a stable version instead of always pulling latest.
git clone https://github.com/achreftlili/code-index
cd code-index pip install -e . code-index init # CLI alternative to the init MCP tool code-index-mcp # starts the MCP server on stdio (for manual wiring)
All settings are optional — the defaults work out of the box. Override them via environment variables. Inside Claude Code, set them in the env block of your code-index server entry in ~/.claude.json (then reconnect the MCP server).
Common knobs (most users only ever touch these):
| Var | Default | When to set it |
|---|---|---|
CODE_INDEX_EMBED_DEVICE | _auto_ | Force the torch device: cpu, mps, or cuda. Set cpu on Apple Silicon if init fails with MPS out-of-memory. |
CODE_INDEX_EMBED_BATCH | 32 | Encode batch size. Lower (e.g. 8 or 4) to cut peak GPU memory while staying on mps/cuda. |
CODE_INDEX_DB | .claude/index.db | Override the SQLite index path (e.g. to share an index across sibling worktrees). |
Advanced (rarely needed):
| Var | Default | Notes |
|---|---|---|
CODE_INDEX_EMBEDDER | jina | Only jina (local sentence-transformers) is supported today; the variable exists for future expansion. |
CODE_INDEX_EMBED_MODEL | jinaai/jina-embeddings-v2-base-code | HuggingFace model id. Only override if you know the model is dim-compatible (768d). |
CODE_INDEX_EMBED_DIM | 768 | Must match the embedding model's output dimension. |
`init` fails with `MPS backend out of memory` on Apple Silicon. A large file produced a chunk batch bigger than your GPU's free VRAM. Quickest fix — re-run on CPU (slower but bulletproof):
"env": {
"CODE_INDEX_EMBED_DEVICE": "cpu" }
To stay on the GPU, shrink the batch instead: "CODE_INDEX_EMBED_BATCH": "8". Reconnect the MCP server (/mcp → reconnect, or restart Claude Code) so the new env takes effect. init is incremental — already-embedded files are skipped on the retry.
`init` fails with a Hugging Face network error on first run. Your network is blocking model downloads. Pre-warm the cache on a machine that has access:
huggingface-cli download jinaai/jina-embeddings-v2-base-code
`sqlite3.OperationalError: not authorized` or `sqlite-vec` fails to load. Your Python build doesn't have loadable SQLite extensions. See Requirements — install via python.org or a pyenv build with PYTHON_CONFIGURE_OPTS=--enable-loadable-sqlite-extensions.
`code_search` / `symbol_lookup` returns stale paths after a refactor or branch checkout. The auto-reindex hook only fires on Claude's Edit / Write / MultiEdit. After bulk file moves outside the agent (mv, git checkout, IDE rename), re-run init (it's incremental). Or wire up the hook so the index keeps up with agent edits automatically.
src/code_index/
db.py SQLite schema, connection, sqlite-vec loading parser.py Tree-sitter wrapper, symbol + edge extraction imports.py Per-language import target → file path resolution chunker.py Per-symbol chunks, identifier expansion embedder.py Local Jina (sentence-transformers) backend indexer.py Pipeline: walk → parse → chunk → embed → write reindexer.py Per-root engine cache; one entry point for "reindex one file" retriever.py Hybrid search (vector + FTS5) with RRF watcher.py File watcher (watchdog) admin.py setup_check / install_hook / init logic (pure, no MCP state) mcp_server.py MCP wiring, shared helpers, schema fragments tool_registry.py Shared @_tool decorator + _TOOLS registry tools/ Per-domain MCP handlers (graph, paths, refactor, …) hook.py code-index-hook console script — the PostToolUse entry point cli.py init / r
ตัดมาแค่ช่วงต้น อ่านต่อใน repo