模块化、可扩展的本地优先代码索引器,旨在增强Claude Code和其他LLMs的深度代码理解能力。基于Model Context Protocol (MCP)构建,实现与AI助手的无缝集成。
当前完成度:100%(生产就绪,已完成全面验证)
系统复杂度:5/5(高 - 136k行代码,语义搜索,分布式架构)
生产就绪:是 - 所有系统已验证,查询性能低于100毫秒,文档齐全
.indexes/(相对于MCP服务器)Code-Index-MCP遵循模块化、插件式架构,旨在实现可扩展性和性能:
🌐 系统上下文(第1层)
📦 容器架构(第2层)
┌─────────────────┐ ┌──────────────┐ ┌─────────────┐
│ API网关 │────▶│ 调度器 │────▶│ 插件 │
│ (FastAPI) │ │ │ │ (语言) │
└─────────────────┘ └──────────────┘ └─────────────┘
│ │ │
▼ ▼ ▼
┌─────────────────┐ ┌──────────────┐ ┌─────────────┐
│ 本地索引 │ │ 文件监视器 │ │ 嵌入服务 │
│ (SQLite+FTS5) │ │ (Watchdog) │ │ │
└─────────────────┘ └──────────────┘ └─────────────┘
🔧 组件细节(第3层)
项目遵循清晰、组织良好的结构。参见docs/PROJECT_STRUCTURE.md以获取详细布局。
关键目录:
mcp_server/ - 核心MCP服务器实现scripts/ - 开发和实用脚本tests/ - 包含测试用例的综合测试套件docs/ - 文档和指南architecture/ - 系统设计和图表docker/ - Docker配置和组合文件data/ - 数据库文件和索引logs/ - 应用程序和测试日志reports/ - 生成的性能报告和分析analysis_archive/ - 历史分析和存档研究生产就绪功能:
语言类别:
| 类别 | 语言 | 功能 |
|---|---|---|
| 专用插件 | Python, JavaScript, TypeScript, C, C++, Dart, HTML/CSS | 增强分析,框架支持 |
| 系统语言 | Go, Rust, C, C++, Zig, Nim, D, V | 内存安全,性能分析 |
| JVM语言 | Java, Kotlin, Scala, Clojure | 包分析,构建工具集成 |
| Web技术 | JavaScript, TypeScript, HTML, CSS, SCSS, PHP | 框架检测,捆绑器支持 |
| 脚本语言 | Python, Ruby, Perl, Lua, R, Julia | 动态类型,REPL集成 |
| 函数式语言 | Haskell, Elixir, Erlang, F#, OCaml | 模式匹配,类型推断 |
| 移动开发 | Swift, Kotlin, Dart, Objective-C | 平台特定API |
| 基础设施 | Dockerfile, Bash, PowerShell, Makefile, CMake | 构建自动化,CI/CD |
| 数据格式 | JSON, YAML, TOML, XML, GraphQL, SQL | 模式验证,查询优化 |
| 文档 | Markdown, LaTeX, reStructuredText | 交叉引用,格式化 |
实现状态:生产就绪 - 所有语言通过增强调度器支持:
# 自动配置MCP环境
./scripts/setup-mcp-json.sh
# 或交互模式
./scripts/setup-mcp-json.sh --interactive
这会自动检测您的环境并创建适当的.mcp.json配置。
# 使用Docker安装MCP索引
curl -sSL https://raw.githubusercontent.com/Code-Index-MCP/main/scripts/install-mcp-docker.sh | bash
# 索引当前目录
docker run -it -v $(pwd):/workspace ghcr.io/code-index-mcp/mcp-index:minimal
# 设置您的API密钥(在https://voyageai.com 获取)
export VOYAGE_AI_API_KEY=your-key
# 运行带语义搜索
docker run -it -v $(pwd):/workspace -e VOYAGE_AI_API_KEY ghcr.io/code-index-mcp/mcp-index:standard
# PowerShell
.\scripts\setup-mcp-json.ps1
# 或手动使用Docker Desktop
docker run -it -v ${PWD}:/workspace ghcr.io/code-index-mcp/mcp-index:minimal
# 安装Docker Desktop或使用Homebrew
brew install --cask docker
# 运行设置
./scripts/setup-mcp-json.sh
# 安装Docker(无需Desktop)
curl -fsSL https://get.docker.com | sh
# 运行设置
./scripts/setup-mcp-json.sh
# 配合Docker Desktop集成
./scripts/setup-mcp-json.sh # 自动检测WSL+Docker
# 不使用Docker Desktop
cp .mcp.json.templates/native.json .mcp.json
pip install -e .
# 对于VS Code/Cursor开发容器
# 选项1:使用容器内的原生Python
cp .mcp.json.templates/native.json .mcp.json
# 选项2:使用Docker侧车(避免依赖冲突)
docker-compose -f docker/compose/development/docker-compose.mcp-sidecar.yml up -d
cp .mcp.json.templates/docker-sidecar.json .mcp.json
设置脚本会为您创建适当的.mcp.json。手动示例如下:
{
"mcpServers": {
"code-index-native": {
"command": "python",
"args": ["scripts/cli/mcp_server_cli.py"],
"cwd": "${workspace}"
}
}
}
{
"mcpServers": {
"code-index-docker": {
"command": "docker",
"args": [
"run", "-i", "--rm",
"-v", "${workspace}:/workspace",
"ghcr.io/code-index-mcp/mcp-index:minimal"
]
}
}
}
| 功能 | 最小 | 标准 | 全部 | 成本 |
|---|---|---|---|---|
| 代码搜索 | ✅ | ✅ | ✅ | 免费 |
| 48种语言 | ✅ | ✅ | ✅ | 免费 |
| 语义搜索 | ❌ | ✅ | ✅ | ~$0.05/1M令牌 |
| GitHub同步 | ❌ | ✅ | ✅ | 免费 |
| 监控 | ❌ | ❌ | ✅ | 免费 |
下载我们的发布中的预构建索引来立即开始:
# 下载最新发布
python scripts/download-release.py --latest
# 或下载特定版本
python scripts/download-release.py --tag v2024.01.15
克隆仓库
git clone https://github.com/yourusername/Code-Index-MCP.git
cd Code-Index-MCP
安装依赖项
# 创建虚拟环境
python -m venv venv
source venv/bin/activate # 在Windows上:venv\Scripts\activate
# 安装需求
pip install -r requirements.txt
构建索引(或下载预构建)
# 为当前目录构建索引,支持完整(SQL + 语义)
python scripts/index_repositories.py --mode full
# 或使用特定模式:
# SQL-only(快速,不需要API密钥):
python scripts/index_repositories.py --mode sql
# 语义-only(需要VOYAGE_AI_API_KEY):
python scripts/index_repositories.py --mode semantic
# 或从GitHub工件下载(如果可用)
python scripts/index-artifact-download-v2.py --latest
启动服务器
# 启动MCP服务器
uvicorn mcp_server.gateway:app --reload --host 0.0.0.0 --port
测试API
# 检查服务器状态
curl http://localhost:8000/status
# 搜索代码
curl -X POST http://localhost:8000/search \
-H "Content-Type: application/json" \
-d '{"query": "def parse"}'
创建一个.env文件进行配置:
# 可选:Voyage AI用于语义搜索
VOYAGE_AI_API_KEY=your_api_key_here
# 服务器设置
MCP_SERVER_HOST=0.0.0.0
MCP_SERVER_PORT=8000
MCP_LOG_LEVEL=INFO
# 工作区设置
MCP_WORKSPACE_ROOT=.
MCP_MAX_FILE_SIZE=10485760 # 10MB
# GitHub工件同步(隐私设置)
MCP_ARTIFACT_SYNC=false # 设置为true启用
AUTO_UPLOAD=false # 手动上传
AUTO_DOWNLOAD=true # 克隆时自动下载
控制您的代码索引如何共享:
// .mcp-index.json
{
"github_artifacts": {
"enabled": false, // 完全禁用同步
"auto_upload": false, // 手动上传
"auto_download": true, // 仍然获取团队索引
"exclude_patterns": [ // 额外排除模式
"internal/*",
"proprietary/*"
]
}
}
隐私功能:
系统包括多种重新排序策略以提高搜索相关性:
# 在搜索中配置重新排序
from mcp_server.indexer.reranker import RerankConfig, TFIDFReranker
config = RerankConfig(
enabled=True,
reranker=TFIDFReranker(), # 或CohereReranker(), CrossEncoderReranker()
top_k=20
)
# 使用重新排序搜索
results = await search_engine.search(query, rerank_config=config)
可用的重新排序器:
防止意外共享敏感文件:
# 分析当前索引的安全问题
python scripts/utilities/analyze_gitignore_security.py
# 创建安全索引导出(过滤.gitignored文件)
python scripts/utilities/secure_index_export.py
# 安全导出将:
# - 排除所有.gitignored文件
# - 移除敏感模式(*.env, *.key等)
# - 创建被排除文件的审计日志
结合传统的全文搜索和语义搜索:
# 系统在可用时自动使用混合搜索
# 在设置中配置权重:
HYBRID_SEARCH_BM25_WEIGHT=0.3
HYBRID_SEARCH_SEMANTIC_WEIGHT=0.5
HYBRID_SEARCH_FUZZY_WEIGHT=0.2
增强调度器包括超时保护和自动回退:
from mcp_server.dispatcher.dispatcher_enhanced import EnhancedDispatcher
from mcp_server.storage.sqlite_store import SQLiteStore
store = SQLiteStore(".indexes/YOUR_REPO_ID/current.db")
dispatcher = EnhancedDispatcher(
sqlite_store=store,
semantic_search_enabled=True, # 如果Qdrant可用则启用
lazy_load=True, # 按需加载插件
use_plugin_factory=True # 使用动态插件加载
)
# 使用自动优化搜索
results = list(dispatcher.search("your query", limit=10))
对于仅使用BM25搜索的最大性能:
from mcp_server.dispatcher.simple_dispatcher import create_simple_dispatcher
# 超快BM25搜索,无插件开销
dispatcher = create_simple_dispatcher(".indexes/YOUR_REPO_ID/current.db")
results = list(dispatcher.search("your query", limit=10))
通过环境变量配置调度器行为:
# 调度器设置
MCP_DISPATCHER_TIMEOUT=5 # 插件加载超时(秒)
MCP_USE_SIMPLE_DISPATCHER=false # 使用简单调度器
MCP_PLUGIN_LAZY_LOAD=true # 按需加载插件
# 性能调整
MCP_BM25_BYPASS_ENABLED=true # 启用直接BM25绕过
MCP_MAX_PLUGIN_MEMORY=1024 # 插件最大内存(MB)