
Contextweaver
io.github.wchiway由 GitHub 账号 wchiway 发布v1.5.4更新于 Oct 24, 2026
Semantic code retrieval engine with hybrid search, context expansion, and 40+ language support.
概览
一个本地 MCP 服务器,让 AI 助手对已建立索引的代码库进行语义检索,并提供文件列表、符号查找和索引统计。
- 可以做什么
- 以向量与关键词混合检索方式对代码库做语义搜索,返回带上下文扩展和导入解析的代码片段,可按 glob、语言和输出大小过滤。按 glob、语言或数量浏览已索引的文件。按符号名查找可能的定义位置和文本引用。读取项目的索引、搜索与健康统计。首次查询会自动建立索引,也可用监视模式保持更新。
- 适用场景
- 适合助手在较大的多语言代码库中定位相关代码而不必通读整个文件,或查找某个符号的定义与引用位置。对小型项目,或需要穷尽式精确文本匹配的场景(README 建议改用 grep)帮助不大。
- 运行要求
- 以本地进程运行,通过 npm 包 @chiway/contextweaver 安装,需要 Node.js 20 或更高版本。需要嵌入 API 的密钥、地址和模型(EMBEDDINGS_API_KEY、EMBEDDINGS_BASE_URL、EMBEDDINGS_MODEL)以及重排 API 的密钥、地址和模型(RERANK_API_KEY、RERANK_BASE_URL、RERANK_MODEL),在本地环境文件中配置。建立索引和语义搜索需要访问这些 API 端点的网络连接。
安装
在 SourceWeft 中
- 打开 控制台中的 Contextweaver,将其添加到工作区。
- 为需要使用其工具的对话启用该服务。
Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。
其他 MCP 客户端
参照 仓库 中的启动说明。
README
ContextWeaver
🧵 A codebase context engine woven for AI agents
Semantic Code Retrieval for AI Agents — Hybrid Search • Graph Expansion • Token-Aware Packing
[npm version] [npm downloads] [GitHub stars] [MCP Bridge] [Install in VS Code] [Install in VS Code Insiders]
English · 简体中文
ContextWeaver is a semantic retrieval engine purpose-built for AI coding assistants. It combines hybrid search (vector + lexical), intelligent context expansion, and token-aware packing to deliver precise, relevant, and context-complete code snippets to LLMs.
[ContextWeaver architecture overview]
✨ Core Features
🔍 Hybrid Retrieval Engine
- Vector Retrieval: deep semantic understanding via similarity
- Lexical Retrieval (FTS): exact matching for function names, class names, and other technical terms
- RRF Fusion (Reciprocal Rank Fusion): intelligently merges multiple recall channels
🧠 AST Semantic Chunking
- Tree-sitter parsing: supports TypeScript, JavaScript, Python, Go, Java, Rust, C, C++, C#, and more
- Dual-Text strategy:
displayCodefor presentation,vectorTextfor embedding - Gap-Aware merging: handles code gaps intelligently while preserving semantic integrity
- Breadcrumb injection: vector text carries hierarchical paths to boost recall
- UTF-16 character-domain normalization: offsets are unified via
SourceAdapter.toCharOffsetbefore writing metadata, preventing multi-byte character slicing errors (v1.4.0+)
📊 Three-Stage Context Expansion
- E1 Neighbor expansion: adjacent chunks within the same file, preserving block completeness
- E2 Breadcrumb completion: sibling methods under the same class/function for structural understanding
- E3 Import resolution: cross-file dependency tracking (configurable toggle)
🎯 Smart TopK Cutoff
- Anchor & Floor: dynamic threshold plus an absolute floor as dual safeguards
- Delta Guard: prevents misjudgment in Top1-outlier scenarios
- Safe Harbor: the first N results only check the floor, guaranteeing baseline recall
🔌 Native MCP Support
- MCP Server mode: launch a Model Context Protocol server with one command
- Multi-tool granularity (v1.5.0+): beyond core semantic retrieval, adds dedicated tools for structure browsing, symbol references, symbol definitions, and statistics
- Intent/term separation: an LLM-friendly API design
- Auto-indexing: the first query triggers indexing automatically; incremental updates are transparent
⚡ Query Cache & File Watching (v1.5.0+)
- Query cache (QueryCache): in-process per-project LRU cache (50 entries by default); a hit skips the entire vector recall / rerank / expansion pipeline
- Automatic cache invalidation: the cache key is composed of
normalized query + projectId + index version + search-config fingerprint, so it invalidates automatically after an index update or config change — stale results are never returned - Watch mode:
contextweaver watchwatches the filesystem and triggers incremental indexing automatically, with debouncing (500ms by default) and scan de-duplication (no concurrent scans)
📈 Statistics & Observability (v1.5.0+)
- Three metric groups: indexing process, search quality/behavior, health/consistency
- Dual exits:
contextweaver statsCLI (with--json) plus the MCPstatstool - Consistency diagnostics: automatically detects abnormal migration state,
pending_marksbacklog, missing vector rows, and more — with suggested fixes
🛡️ Crash-Safe Data Architecture (v1.4.0+)
- Single source of truth for content: LanceDB stores only vectors and locating metadata; content is read back from
files.content, reducing index size by 30–50% - Cross-store transactional compensation: three-stage write LanceDB → FTS+outbox → SQLite mark, with automatic rollback or replay on any failure
- Migration state machine:
pending/done/abortedpersisted, auto-rebuilt on crash recovery - Cross-process mutual exclusion: an advisory lock prevents the MCP server and CLI from triggering LanceDB migration concurrently
- chunk_id de-duplication: pre-delete before write to avoid duplicate rows on retry
📦 Quick Start
Requirements
- Node.js >= 20
- pnpm (recommended) or npm
Installation
Initialize Configuration
Edit ~/.contextweaver/.env and fill in your API keys:
Index a Codebase
Watch Mode (v1.5.0+)
watch runs one full incremental scan on startup, then listens to filesystem events; changes trigger a de-duplicated scan within the debounce window, and paths excluded by ignore rules never trigger a scan.
Local Search
Structure Browsing & Symbol Lookup (v1.5.0+)
The following commands are CLI mirrors of MCP tools, with zero Embedding API cost:
Statistics (v1.5.0+)
Start the MCP Server
Index Management (v1.4.0+)
🔧 MCP Integration
Claude Desktop Configuration
Add the following to your Claude Desktop config file:
MCP Tools Overview (v1.5.0+)
ContextWeaver exposes 5 MCP tools, following a layered design of "semantic retrieval first, structure browsing second":
codebase-retrieval Parameters
list-files Parameters
find-references Parameters
get-symbol-definition Parameters
Note:
find-referencesandget-symbol-definitionare heuristic text lookups over indexed chunks, not compiler-accurate navigation. For exhaustive raw text matching, usegrepoutside MCP.
Design Philosophy
- Intent/term separation:
information_requestdescribes "what to do",technical_termsfilters "what it's called" - Same-file context first: same-file context is provided by default; cross-file exploration is initiated by the agent
- Return to agent instincts: the tool only locates; cross-file exploration is triggered by the agent on demand
🏗️ Architecture
Core Modules
Data Architecture (v1.4.0+)
Key invariants:
- The single source of truth for content is
files.content;ChunkContentLoaderslices viastart_index/end_index(same source asdisplayCode) - All LanceDB offset fields live in the UTF-16 character domain; multi-byte files are never sliced incorrectly
- Cross-store write order: LanceDB → (FTS + outbox single transaction) → SQLite mark + clear outbox
- LanceDB migration state
pending/done/abortedis persisted, with cross-process mutual exclusion via an advisory lock - The query cache key is bound to the index version and search-config fingerprint; it invalidates on any index or config change
📁 Project Structure
⚙️ Configuration Reference
Environment Variables
Search Parameter Env Overrides (v1.5.0+)
The following environment variables override built-in defaults; out-of-range values are automatically clamped to the valid interval. When only one of wVec/wLex is set, the other is automatically set to 1 - x.
Search Config Parameters (built-in defaults)
🌍 Multi-Language Support
ContextWeaver natively supports AST parsing for the following languages via Tree-sitter:
Other languages fall back to line-based chunking and can still be indexed and searched normally.
🔄 Workflows
Indexing Flow
Search Flow
📊 Performance Characteristics
- Query cache: repeated queries hit the LRU cache, skipping the entire recall/rerank/expansion pipeline (v1.5.0+)
- Incremental indexing: only changed files are processed; re-indexing is 10x+ faster
- Batch embedding: adaptive batch size with concurrency control
- Rate-limit recovery: automatic backoff on 429 errors, gradual recovery
- Connection pool reuse: pooled Tree-sitter parsers
- File index caching: lazy-loaded file-path index in GraphExpander
- Zero-cost metadata tools:
list-files/find-references/get-symbol-definitiondo not call the Embedding API (v1.5.0+)
📈 Statistics & Observability (v1.5.0+)
contextweaver stats outputs three sections:
- Indexing process: cumulative index run count, last index time, last-run snapshot (added/modified/deleted/unchanged/skipped/errors + vector index details)
- Search quality/behavior: cumulative queries, cache hit rate, actual compute runs, plus average per-stage latency (retrieve / rerank / expand / pack) and average recalled seed count
- Health/consistency: file count and total content size, LanceDB vector row count, embedding dimensions, index version, migration state,
pending_marks, language breakdown
When an abnormal migration state, pending_marks backlog, or missing vector rows are detected, the report appends diagnostic warnings with the corresponding fix commands. The --json output maps to StatsReport for scripts and monitoring systems.
🐛 Logging & Debugging
Log file location: ~/.contextweaver/logs/app.YYYY-MM-DD.log
Set the log level:
🚨 Troubleshooting (v1.4.0+)
LanceDB Migration Stuck (aborted state)
Symptom: contextweaver index errors with "LanceDB is in the aborted state, refusing to write to prevent schema pollution."
Cause: during the v1.4.0 upgrade, the old LanceDB index's display_code differs from the current files.content by >1% on sampling (typically on legacy indexes whose chunk offsets used the UTF-8 byte domain).
Fix:
You can also run contextweaver stats first to view diagnostic warnings and confirm the current migration state and pending_marks backlog.
Cross-Process Migration Race
If the MCP server is long-running and another terminal runs contextweaver index, the two processes contend for migration. v1.4.0 introduces an advisory lock with a 10-minute zombie threshold, automatically letting one process skip migration while the other completes it.
If the lock gets stuck (after kill -9), clear it manually:
Wasted Duplicate Embeddings
v1.4.0 solves this via the pending_marks outbox: when an FTS write succeeds but the vector_index_hash mark fails, it is replayed automatically on the next launch, avoiding duplicate embeddings.
Search Results Don't Reflect Recent Changes
Confirm incremental indexing has run (or enable contextweaver watch for automatic increments). The query cache key is bound to the index version, so old cache entries invalidate automatically after an index update — no manual clearing needed.
📄 License
This project is licensed under the MIT License.
🙏 Acknowledgements
- Tree-sitter - high-performance syntax parsing
- LanceDB - embedded vector database
- MCP - Model Context Protocol
- Source - Source repository
Made with ❤️ for AI-assisted coding
来源:README.md,提交 f1c4fc3
工具
0版本历史
1- v1.5.4最新Sep 16, 2026
评分
已满足适用检查项的 50%
该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。
- 近 30 天内可连通25 分
请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。
- 已声明认证方式10 分
请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。
- 已列出工具15 分
请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。
- 描述必需15 分
- 图标10 分
- 文档15 分
- 许可证10 分