Mcp Local Rag

io.github.damoqiongqiu由 GitHub 帳號 damoqiongqiu 發布v0.21.0更新於 Oct 24, 2026

Semantic code & doc search with keyword boost. AST code nav, auto HF mirror, local, privacy-first.

已驗證STDIO僅桌面知識與記憶開發者工具

概覽

AI 產生的概覽

本機 RAG 伺服器,在使用者電腦上索引程式碼與文件,讓 AI 助理進行語意搜尋、程式碼符號導覽並管理索引。

可以做什麼
匯入單一檔案、記憶體中的文字或整個目錄,程式碼依 AST 切塊、文件依語意切塊,PDF 圖形可選擇產生視覺描述,開啟監看後檔案變動會自動重新匯入。以語意加關鍵字的混合方式搜尋索引,可依路徑範圍或時間範圍篩選,並展開命中位置前後的內容。程式碼導覽,尋找符號定義及其所有引用。索引管理,列出檔案與匯入狀態、刪除項目、檢視統計資訊。維護操作,即時更新設定、偵測重複檔案、匯出索引,以及全部或僅針對變更檔案重建索引。
適用情境
適合讓助理回答關於本機程式碼庫或文件集的問題、定位函式及其呼叫端,或在不把私有資料上傳雲端的前提下搜尋。特別適合經常變動且可在本機建立索引的專案。
執行需求
透過 npx 以本機程序執行,需要 Node.js。以 BASE_DIR 或 BASE_DIRS 指定要索引的資料夾,DB_PATH 與 CACHE_DIR 指定向量資料庫與模型存放位置。首次執行需從 HuggingFace 下載嵌入模型,可透過 HTTPS_PROXY、HTTP_PROXY、HF_ENDPOINT 或自動鏡像鏈完成。不需要 API 金鑰或帳號。
安裝前請注意
匯入、刪除、重建索引與設定工具會變更本機索引,開啟檔案監看後還會隨檔案變動自動匯入或刪除項目。只有設定的根目錄下的路徑可被存取。程式碼與文件在本機嵌入,但首次下載模型會連線 HuggingFace 或鏡像,設定代理後相關流量會經過代理。更換模型、dtype 或裝置會使索引失效,需要完整重建。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Mcp Local Rag,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

[MCP Local RAG — Search below the surface.]

MCP Local RAG

[GitHub stars] [npm version] [License: MIT] [TypeScript] [MCP Registry]

🍴 Forked from shinpr/mcp-local-rag — original work by Shinsuke Kagawa

Local code intelligence engine for AI coding assistants. AST-level semantic chunking + keyword boost for pinpointing functions, classes, and APIs — fully private, zero setup.

📖 中文文档


Table of Contents

  1. Features
  2. Quick Start
  3. Core Concepts
  4. MCP Tool Reference
  5. CLI
  6. Network & Models
  7. Search Tuning
  8. Performance Tuning
  9. Configuration Reference
  10. Troubleshooting
  11. Development

1. Features

  • Smart dual-strategy chunking — AST-level code chunking via tree-sitter (splits at function/class/method boundaries, injects scope chain + imports). Semantic chunking for documents (splits by meaning, not character count).
  • Semantic search + keyword boost — Vector search first, then keyword matching boosts exact terms. useEffect, error codes, class names rank higher — not just semantically guessed.
  • 15 MCP tools — Ingest, search, manage, code intelligence, and system ops in one server.
  • AST code intelligence — find_definition and find_references for IDE-level code navigation, powered by tree-sitter metadata captured at ingest time.
  • Three-tier mirror auto-fallback — huggingface.co → hf-mirror.com → modelscope.cn, zero config for users in mainland China.
  • Runs entirely locally — No API keys, no cloud, no data leaving your machine. Works offline after the first model download.
  • Zero-friction setup — One npx command. No Docker, Python, or servers to manage.

2. Quick Start

Set BASE_DIR to the folder you want to search (BASE_DIRS for multiple roots — see Configuration).

2.1 Configure Your AI Coding Tool

Cursor — ~/.cursor/mcp.json:

json
{  "mcpServers": {    "local-rag": {      "command": "npx",      "args": ["-y", "@damoqiongqiu/mcp-local-rag"],      "env": { "BASE_DIR": "/path/to/your/project" }    }  }}

Claude Code:

bash
claude mcp add local-rag --scope user --env BASE_DIR=/path/to/your/project -- npx -y @damoqiongqiu/mcp-local-rag

Codex — ~/.codex/config.toml:

toml
[mcp_servers.local-rag]command = "npx"args = ["-y", "@damoqiongqiu/mcp-local-rag"]
[mcp_servers.local-rag.env]BASE_DIR = "/path/to/your/project"

WorkBuddy — Settings → Custom Connectors → Add:

json
{  "mcpServers": {    "local-rag": {      "command": "npx",      "args": ["-y", "@damoqiongqiu/mcp-local-rag"],      "env": { "BASE_DIR": "/path/to/your/project" }    }  }}

⚠️ WorkBuddy: you MUST click "Trust" in the Custom Connectors list after adding, otherwise the server is silently blocked.

2.2 CLI Quick Start

No MCP needed — run directly from the terminal:

bash
npx @damoqiongqiu/mcp-local-rag ingest ./src/npx @damoqiongqiu/mcp-local-rag query "auth middleware"npx @damoqiongqiu/mcp-local-rag status

That's it. No Docker, Python, or server setup.

2.3 First-Time Project Indexing

You: "Index the src directory of this project"Assistant: Successfully ingested 156 files (2,847 chunks created)
You: "Where's the middleware that handles API rate limiting?"Assistant: src/middleware/rateLimiter.ts — useRateLimiter(), lines 42–89
You: "How is the database connection pool configured?"Assistant: src/config/database.ts — createPool() default max: 20, idle: 5

3. Core Concepts

3.1 Dual-Strategy Chunking

Chunking strategy is chosen per file type:

  • Code files (50+ languages) — CodeChunker parses source via tree-sitter AST, splits at structural boundaries (functions, classes, methods). Each chunk's contextualizedText includes its scope chain and import context for precise semantic search.
  • Documents (PDF/DOCX/TXT/MD/HTML) — SemanticChunker splits into sentences, groups by embedding similarity to find natural topic boundaries. Markdown code blocks remain intact — never split mid-block.

3.2 Hybrid Search

Search = semantic similarity + keyword boost (RAG_HYBRID_WEIGHT, default 0.6):

  1. Query vectorization → semantic search finds most relevant chunks
  2. Quality filters apply (distance threshold, grouping)
  3. Keyword matching boosts exact-term rankings

Exact identifiers like useEffect are never buried by semantic approximations.

3.3 Security Boundary

Only files under BASE_DIR / BASE_DIRS are accessible for ingest, list, delete, or read-neighbor operations. Symlinks resolved outside roots are rejected. Sibling-prefix paths (e.g., /foo/barista when root is /foo/bar) are also blocked — prevents path traversal attacks.


4. MCP Tool Reference

15 tools organized into 5 categories.

4.1 Ingest Tools

#ToolPurposeExample
1ingest_fileSingle file (PDF/DOCX/TXT/MD/code)"Ingest ./docs/api-spec.pdf"
2ingest_dataIn-memory text/HTML"Fetch this page and ingest the HTML"
3ingest_directoryBulk directory ingest"Ingest everything under ./src"

ingest_file supports 50+ code languages. PDFs support an optional visual mode — a local VLM generates captions for figure pages, making visual content searchable. Two profiles available:

ProfileModelCacheSuited for
fast (default)SmolVLM-256M~250 MBLight visual indexing
qualityQwen2.5-VL-3B-ONNX~2.9 GBFigures with in-image text
bash
# CLInpx @damoqiongqiu/mcp-local-rag ingest ./spec.pdf --visual --visual-quality quality# MCP"Ingest ./spec.pdf with visual: true, visualQuality: 'quality'"

ingest_data runs Readability → Markdown → index. Perfect for web content fetched by your AI assistant. Re-ingesting replaces old versions automatically.

ingest_directory scans recursively, respects .gitignore, shows real-time progress via MCP notifications.

4.2 Search Tools

#ToolPurposeKey Parameters
4query_documentsHybrid search (semantic + keyword)query, limit, scope, highlightContext, fromTimestamp
5read_chunk_neighborsExpand context around resultsfilePath, chunkIndex, before, after

query_documents — scope accepts a single path prefix or list, restricting results to that subtree. highlightContext returns snippets around matched terms. fromTimestamp / untilTimestamp enable time-range filtering.

read_chunk_neighbors — defaults to 2 chunks before and after (like grep -C 2), max 50 each. Response includes the target chunk marked isTarget: true.

4.3 Management Tools

#ToolPurpose
6list_filesList files with ingestion status (ingested: true/false)
7delete_fileDelete by file path or source URL
8statusIndex stats: docs, chunks, memory, search mode

list_files supports scope filtering with the same prefix-match semantics as search. In large directories, scope accelerates the scan by skipping out-of-scope subtrees.

4.4 Code Intelligence

#ToolPurposeInput
9find_definitionLocate symbol definition (file, line range, scope)Exact symbol name
10find_referencesFind all references (import + text mention)Symbol name

Both tools depend on AST metadata (imports, entities, scope chains) extracted by tree-sitter at ingest time. Only works for code files ingested with CodeChunker — files ingested before v0.18.7 lack this metadata and require reindex_all to rebuild.

find_references uses a two-phase strategy: (1) exact match in codeMeta.imports → (2) FTS full-text search for the symbol name. Results are deduplicated by (filePath, chunkIndex), with import references listed first.

4.5 System Tools

#ToolPurpose
11configRuntime hot read/write config — no restart needed
12dedup_checkSHA256 + Jaccard similarity to detect duplicate files
13export_indexExport entire index as JSON (backup or migration)
14reindex_allFull re-chunk + re-embed (after model change)
15reindex_staleRe-ingest only files modified on disk (incremental sync)

config hot-swaps hybridWeight, modelName, cacheDir, baseDir/baseDirs, etc. Switching models auto-disposes the old Embedder and initializes the new one — note: changing models alters the embedding space and requires reindex_all.

dedup_check is especially useful in monorepos — spot ↔ futures mirror code is typically flagged with similarity 1.0.


5. CLI

5.1 Basic Commands

bash
# Ingestnpx @damoqiongqiu/mcp-local-rag ingest ./src/
# Search (with scope)npx @damoqiongqiu/mcp-local-rag query "auth middleware"npx @damoqiongqiu/mcp-local-rag query "auth" --scope /docs/api
# Context expansionnpx @damoqiongqiu/mcp-local-rag read-neighbors --file-path /abs/path.md --chunk-index 5
# Managementnpx @damoqiongqiu/mcp-local-rag list --scope /docs/apinpx @damoqiongqiu/mcp-local-rag statusnpx @damoqiongqiu/mcp-local-rag delete ./docs/old.pdfnpx @damoqiongqiu/mcp-local-rag delete --source "https://..."

query, read-neighbors, list, status, delete emit JSON to stdout (pipe to jq). ingest emits progress to stderr.

Global options (--db-path, --cache-dir, --model-name) go before the subcommand:

bash
npx @damoqiongqiu/mcp-local-rag --help

⚠️ The CLI does NOT read your MCP client config (mcp.json, etc.). Configure via flags or environment variables.

5.2 CLI Configuration

Flags — global options before, subcommand options after:

bash
npx @damoqiongqiu/mcp-local-rag --db-path ./my-db query "auth" --base-dir ./docs

--base-dir is repeatable on ingest and list:

bash
npx @damoqiongqiu/mcp-local-rag ingest --base-dir ./docs --base-dir ./specs ./docs/readme.md

Environment variables:

bash
export DB_PATH=./my-dbexport BASE_DIR=./docsnpx @damoqiongqiu/mcp-local-rag query "auth"

For multiple roots, use BASE_DIRS (JSON array):

bash
export BASE_DIRS='["/Users/me/work","/Users/me/specs"]'

Precedence: CLI flags > environment variables > defaults.


6. Network & Models

6.1 Mirror Auto-Detection

huggingface.co is inaccessible from mainland China. Built-in three-tier mirror chain with automatic fallback:

huggingface.co → hf-mirror.com → modelscope.cn

At startup, each mirror is HEAD-probed (3s timeout). The first reachable mirror with a complete API is selected:

  • With proxy (HTTPS_PROXY) → direct to huggingface.co
  • No proxy → auto-switch to hf-mirror.com
  • hf-mirror API unavailable → fallback to modelscope.cn

No manual HF_ENDPOINT required. For manual control:

Env VarEffect
HF_AUTO_MIRROR=falseDisable auto-detection, use huggingface.co only
HF_ENDPOINT=<url>Force a specific mirror, skip auto-detection

v0.18.5+ uses setGlobalDispatcher(ProxyAgent) — all Node.js 22 network requests go through the proxy.

6.2 Model Selection

6 embedding models with alias resolution via model-registry:

ModelAliasSizeDims
Xenova/all-MiniLM-L6-v2 (default)mini~90 MB384
Xenova/all-MiniLM-L12-v2—~120 MB384
Xenova/bge-small-en-v1.5bge-small~130 MB384
Xenova/all-mpnet-base-v2mpnet~420 MB768
Xenova/bge-base-en-v1.5—~420 MB768
Xenova/multi-qa-mpnet-base-dot-v1multi-qa~420 MB768

Guidance: code repos → default model + high keyword boost; multilingual → consider embeddinggemma-300m; scientific papers → consider allenai-specter.

RAG_DTYPE controls ONNX precision (fp32 / fp16 / q8). Default fp32; use q8 when memory-constrained. ⚠️ Changing models or dtype requires deleting DB_PATH and re-indexing.

6.3 File Watching

Set RAG_WATCH=true — the server starts recursive fs.watch on baseDirs (500ms debounce):

  • File creation/modification → auto ingest_file
  • File deletion → auto delete_file

Ideal for actively changing projects.


7. Search Tuning

VariableDefaultDescription
RAG_HYBRID_WEIGHT0.6Keyword boost: 0 = semantic only, 1 = keyword only
RAG_GROUPINGunsetsimilar = top group only, related = top 2 groups
RAG_MAX_DISTANCEunsetFilter low-relevance results (e.g., 0.5)
RAG_MAX_FILESunsetLimit results to top N files

Code-focused tuning (recommended default):

json
{ "RAG_HYBRID_WEIGHT": "0.7", "RAG_GROUPING": "similar" }

Document-focused tuning:

json
{ "RAG_HYBRID_WEIGHT": "0.4", "RAG_GROUPING": "related" }

Keyword boost is applied after semantic filtering — improves precision without introducing noise.


8. Performance Tuning

Beyond search accuracy, inference performance is also configurable. All optimizations are environment variables — no code changes required.

8.1 Quantization Precision (RAG_DTYPE)

Controls ONNX model inference precision. For all-MiniLM-L6-v2, three levels are available:

ValueModel SizeSpeedMemoryPrecision LossBest For
fp32 (default)~90 MBbaseline~80 MBnoneFirst use, maximum accuracy
fp16~45 MB20-30% faster~45 MBnegligibleRecommended for daily use
q8~45 MB30-50% faster~45 MBminorLow memory, large projects
json
"env": { "RAG_DTYPE": "fp16", "BASE_DIR": "..." }

⚠️ Changing dtype requires index rebuild — embedding spaces are incompatible.

Verify it works: After restart, call status via MCP and check the dtype field. Should match your setting (e.g., "fp16").

If it fails: Startup throws EmbeddingError with a list of supported dtypes. Common cause: the model doesn't provide the q8 variant — switch to fp16.

8.2 Execution Device (RAG_DEVICE)

Controls which ONNX Runtime backend to use:

ValueBackendNotes
cpu (default)CPUMost stable, no extra dependencies
webgpuGPU (WebGPU)⚠️ Experimental: M1/M2 Mac uses Metal, NVIDIA uses Vulkan
json
"env": { "RAG_DEVICE": "webgpu", "RAG_DTYPE": "fp16", "BASE_DIR": "..." }

⚠️ Changing device changes the embedding space — requires index rebuild. Stacks with RAG_DTYPE — fp16 + webgpu gives both model-size reduction and GPU speedup.

Verify it works: MCP startup log should show Loading model on device "webgpu". status should show device: "webgpu".

If it fails:

  • Unsupported device at startup → WebGPU unavailable in your environment, revert to "cpu"
  • Starts successfully but inference crashes → likely an ONNX WebGPU backend bug, revert to "cpu"
  • Just delete the RAG_DEVICE line to fall back — other config is untouched

8.3 Minimum Chunk Length (CHUNK_MIN_LENGTH)

Filters out chunks shorter than this value during ingest. Default 50 keeps nearly everything; 200 drops 30-40% of noise fragments.

json
"env": { "CHUNK_MIN_LENGTH": "200", "BASE_DIR": "..." }

⚠️ Blunt instrument — short but important code (e.g., config constants) may also be discarded. Requires index rebuild. Sweet spot: 100-200.

8.4 Recommended Configurations

ScenarioConfig
Daily developmentRAG_DTYPE=fp16
Large project + M1/M2 MacRAG_DTYPE=fp16, RAG_DEVICE=webgpu
Memory-constrainedRAG_DTYPE=q8

All changes require reindex_all (MCP) or re-running ingest (CLI). If something breaks, delete the failing env line to revert to defaults.


9. Configuration Reference

MCP server: environment variables only (via your MCP client's env block). CLI: environment variables + equivalent flags (flags take precedence).

Env VarCLI FlagDefaultDescription
BASE_DIR--base-dir (repeatable)cwdDocument root (security boundary)
BASE_DIRS—unsetJSON array of roots, overrides BASE_DIR
DB_PATH--db-path./lancedb/Vector database path
CACHE_DIR--cache-dir./models/Model cache — recommend absolute path
MODEL_NAME--model-nameall-MiniLM-L6-v2HuggingFace model ID
MAX_FILE_SIZE--max-file-size100 MBMax file size in bytes
CHUNK_MIN_LENGTH--chunk-min-length50Min chunk length (1–10000 chars)
RAG_DEVICE—cpuONNX execution device
RAG_DTYPE—fp32Quantization (fp32/fp16/q8)
HTTPS_PROXY—unsetModel download proxy. v0.18.5+ globally effective
HF_ENDPOINT—huggingface.coManual mirror override
HF_AUTO_MIRROR—trueAuto-detection toggle
RAG_WATCH—unsetFile watching (true/1)

Root resolution order: CLI --base-dir > BASE_DIRS > BASE_DIR > cwd. BASE_DIRS and BASE_DIR are never merged. Only JSON array syntax supported for BASE_DIRS — delimiter syntax is intentionally rejected.


10. Troubleshooting

Model download failed

Symptoms: fetch failed, status shows searchMode: fts instead of hybrid.

Solutions:

  1. Network restriction (mainland China, etc.) — use proxy:

    json
    "env": { "HTTPS_PROXY": "http://127.0.0.1:7890" }

    Set in your MCP client config, not the terminal. v0.18.5+ globally effective via setGlobalDispatcher.

  2. Auto-mirror fallback (v0.18.2+, default) — three-tier probe. Usually works without any config.

  3. Manual override — HF_ENDPOINT=https://modelscope.cn or download models manually into CACHE_DIR.

  4. npx cached old version — clear and restart:

    bash
    rm -rf ~/.npm/_npx/
MCP client doesn't see tools
  1. Verify config file syntax
  2. WorkBuddy users: confirm "Trust" button clicked
  3. Restart client completely (Cmd+Q on macOS)
  4. Test directly: npx @damoqiongqiu/mcp-local-rag should run without errors
Rebuilding the index

After switching models or when the database is corrupted:

  1. Stop the MCP service
  2. Delete DB_PATH directory (default ./lancedb/) — safe, doesn't affect source files
  3. Restart MCP → fresh database auto-created
  4. Bulk re-ingest:
    bash
    npx @damoqiongqiu/mcp-local-rag ingest ./src/
FAQ
  • Private? Yes. After model download, nothing leaves your machine.
  • Offline? Yes, once models are cached.
  • Supported formats? 50+ code languages + PDF/DOCX/TXT/MD/HTML. No Excel, PPT, or images.
  • GPU acceleration? Opt-in via RAG_DEVICE. Support depends on your system, Node.js version, and the ONNX backend.
  • Backup? Copy the DB_PATH directory.

11. Development

bash
git clone https://github.com/damoqiongqiu/mcp-local-rag.gitcd mcp-local-ragpnpm install
bash
pnpm test              # All testspnpm run type-check    # TypeScript checkpnpm run check:fix     # Lint + formatpnpm run check:all     # Full CI pipeline
text
src/  index.ts      # Entry point  server/       # MCP tool handlers  cli/          # CLI subcommands  parser/       # PDF/DOCX/TXT/MD/code parsing  chunker/      # SemanticChunker + CodeChunker  embedder/     # Transformers.js embeddings  vectordb/     # LanceDB operations  utils/        # Shared utilities (security, scan, scope)  __tests__/    # Test suites

License

MIT License. Free for personal and commercial use.

Acknowledgments

Built with Model Context Protocol (Anthropic), LanceDB, and Transformers.js.

來源:README.md,提交 3e94e45

工具

0
SourceWeft 尚未在沙箱中啟動過該軟體包,因此其工具未知。

版本歷史

1
  1. v0.21.0最新Sep 16, 2026

評分

已滿足適用檢查項的 50%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分

    請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。

  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具15 分

    請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。

  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分