Claude代码上下文搜索工具的本地版本,借助EmbeddingGemma模型实现100%本地运行的语义代码搜索。无需API密钥,零成本使用,您的代码不会离开本地设备。
claude mcp add code-search --scope user -- uv run --directory ~/.local/share/claude-context-local python mcp_server/server.py
然后打开Claude Code,服务器将在uv环境中以标准输入输出模式运行。
打开Claude Code并输入:index this codebase,无需手动输入命令。
在Claude Code的聊天界面中进行交互,无需调用函数或输入命令。
curl -fsSL https://raw.githubusercontent.com/FarhanAliRaza/claude-context-local/main/scripts/install.sh | bash
如果您的系统没有安装curl,可以使用wget:
wget -qO- https://raw.githubusercontent.com/FarhanAliRaza/claude-context-local/main/scripts/install.sh | bash
运行相同的安装命令进行更新:
curl -fsSL https://raw.githubusercontent.com/FarhanAliRaza/claude-context-local/main/scripts/install.sh | bash
安装程序将执行以下操作:
~/.claude_code_search中的嵌入向量和已索引的项目。uv,则安装uv并创建项目虚拟环境。~/.local/share/claude-context-local中克隆/更新claude-context-local。uv sync安装Python依赖项。faiss-gpu(仅在交互模式下)。本项目主要通过命令行和Claude Code进行交互,以下是注册MCP服务器的基础命令:
claude mcp add code-search --scope user -- uv run --directory ~/.local/share/claude-context-local python mcp_server/server.py
在Claude Code中进行代码搜索时,您可以使用自然语言进行查询,例如:“查找所有处理用户登录的代码”。
Claude的代码上下文功能很强大,但将代码发送到云端会消耗令牌并引发隐私问题。本项目将语义代码搜索完全放在本地设备上进行。它通过MCP与Claude Code集成,让您保持相同的工作流程,同时更快、更便宜且更安全。
claude-context-local/
├── chunking/ # 多语言分块(15种文件扩展名)
│ ├── multi_language_chunker.py # 统一编排器(Python AST + tree-sitter)
│ ├── python_ast_chunker.py # 特定于Python的分块(丰富的元数据)
│ └── tree_sitter.py # Tree-sitter:JS/TS/JSX/TSX/Svelte/Go/Java/Rust/C/C++/C#
├── embeddings/
│ └── embedder.py # EmbeddingGemma;设备自动选择(CUDA→MPS→CPU);离线缓存
├── search/
│ ├── indexer.py # FAISS索引(默认CPU;可用时GPU)
│ ├── searcher.py # 智能排序和过滤
│ └── incremental_indexer.py # 基于Merkle的增量索引
├── merkle/
│ ├── merkle_dag.py # 工作区的内容哈希有向无环图
│ ├── change_detector.py # 比较快照以查找更改的文件
│ └── snapshot_manager.py # 快照持久化和统计信息
├── mcp_server/
│ └── server.py # 用于Claude Code的MCP工具(标准输入输出/HTTP)
└── scripts/
├── install.sh # 单行远程安装程序(uv + 模型 + faiss)
├── download_model_standalone.py # 预下载嵌入模型
└── index_codebase.py # 独立的索引工具
graph TD
A["Claude Code (MCP客户端)"] -->|index_directory| B["MCP服务器"]
B --> C{增量索引器}
C --> D["更改检测器
(Merkle DAG)"]
C --> E["多语言分块器"]
E --> F["代码块"]
C --> G["代码嵌入器
(EmbeddingGemma)"]
G --> H["嵌入向量"]
C --> I["代码索引管理器
(FAISS CPU/GPU)"]
H --> I
D --> J["快照管理器"]
C --> J
B -->|search_code| K["搜索器"]
K --> I
系统使用高级解析技术,为所有支持的语言创建语义上有意义的代码块:
CODE_SEARCH_STORAGE:自定义存储目录(默认:~/.claude_code_search)系统默认使用google/embeddinggemma - 300m。
注意事项:
faiss - gpu - cu12(或faiss - gpu - cu11),并且索引将在运行时自动在GPU上运行,同时保存为CPU版本以确保可移植性。google/embeddinggemma - 300m模型托管在Hugging Face上,下载可能需要接受条款和/或进行认证。
uv run huggingface - cli login
# 粘贴您从https://huggingface.co/settings/tokens获取的令牌
export HUGGING_FACE_HUB_TOKEN = hf_XXXXXXXXXXXXXXXXXXXXXXXX
首次成功下载后,我们将模型缓存在~/.claude_code_search/models下,并优先进行离线加载以提高速度和可靠性。
完全支持(15种文件扩展名,9种以上编程语言):
| 语言 | 文件扩展名 |
|---|---|
| Python | .py |
| JavaScript | .js, .jsx |
| TypeScript | .ts, .tsx |
| Java | .java |
| Go | .go |
| Rust | .rs |
| C | .c |
| C++ | .cpp, .cc, .cxx, .c++ |
| C# | .cs |
| Svelte | .svelte |
总计:15种文件扩展名,涵盖9种以上编程语言
数据存储在配置的存储目录中:
~/.claude_code_search/
├── models/ # 下载的模型
├── index/ # FAISS索引和元数据
│ ├── code.index # 向量索引
│ ├── metadata.db # 代码块元数据(SQLite)
│ └── stats.json # 索引统计信息
提示:
uv sync安装了所有依赖项。nvidia - smi可用且CUDA驱动已安装;重新运行安装程序以选择faiss - gpu - cu12/cu11。HF_HUB_OFFLINE = 1。node_modules, .venv, venv, env, .env, .direnv, __pycache__, .pytest_cache, .mypy_cache, .ruff_cache, .pytype, .ipynb_checkpoints, build, dist, out, public, .next, .nuxt, .svelte - kit, .angular, .astro, .vite, .cache, .parcel - cache, .turbo, coverage, .coverage, .nyc_output, .gradle, .idea, .vscode, .docusaurus, .vercel, .serverless, .terraform, .mvn, .tox, target, bin, obj
这是一个专注于智能代码分块和搜索的研究项目。欢迎您尝试以下方面:
本系统使用Google的EmbeddingGemma模型和先进的多语言分块技术,通过MCP(模型上下文协议)与Claude Code集成,为15种文件扩展名和9种以上编程语言提供语义搜索功能。在分块过程中,针对不同的编程语言采用了不同的解析策略,如Python使用AST解析,其他语言使用Tree - sitter解析,以提取更有语义信息的代码块。在搜索过程中,使用FAISS进行高效的相似度搜索,同时支持增量索引,提高了索引和搜索的效率。
本项目采用GNU通用公共许可证v3.0(GPL - 3.0)。详情请参阅LICENSE文件。
本项目受到[zilliztech/claude - context](https://github.com/zilliztech/claude - context)的启发。我将相关概念改编为Python实现,并将所有嵌入操作放在本地进行。