项目简介
Semcode是一个强大的语义代码搜索工具,专门用于C/C++和Rust代码库。它通过索引代码库,允许用户使用精确匹配和语义相似性来搜索函数、类型和代码模式。Semcode不仅提供一个交互式查询工具,还包含一个MCP服务器,旨在与AI代码工具(如Claude)集成,为AI提供快速、准确的代码上下文信息,从而提高AI在代码理解和分析方面的效率。
主要功能点
- 快速代码索引: 使用Tree-sitter高效索引C/C++和Rust代码库。
- 交互式查询界面: 提供全面的命令集进行代码查询。
- 调用图分析: 支持函数的正向和反向调用链分析。
- 类型与宏发现: 详细展示结构信息。
- 代码差异分析: 理解代码变更及其影响。
- 模式匹配与语义搜索: 支持使用正则表达式和向量进行语义搜索。
- Git集成: 支持对Git提交历史进行增量扫描和搜索。
- 邮件列表归档索引: 索引lore.kernel.org等邮件列表的归档,支持搜索邮件内容和相关代码符号。
- AI集成 (MCP服务器): 通过MCP服务器向AI工具提供上下文和功能,例如查找函数/类型、进行调用图分析、代码体搜索。
安装步骤
- 安装依赖: 根据您的操作系统安装必要的依赖。
- Ubuntu/Debian: 'sudo apt-get install build-essential libclang-dev protobuf-compiler libprotobuf-dev'
- Fedora: 'sudo dnf install gcc-c++ clang-devel protobuf-compiler protobuf-devel'
- Rust: 从rustup.rs安装Rustup。
- 构建项目:
编译后的二进制文件位于 'target/release/' 目录下,例如 'semcode' 和 'semcode-mcp'。git clone https://github.com/facebookexperimental/semcode.git cd semcode cargo build --release
服务器配置
Semcode MCP服务器是为MCP客户端(如Claude)提供上下文和功能的后端服务。MCP客户端需要一个JSON格式的配置文件来连接Semcode MCP服务器。以下是一个示例配置,您需要将 'command' 字段中的路径替换为实际的 'semcode-mcp' 可执行文件的绝对路径。
{ "mcpServers": { "semcode": { "command": "/your/absolute/path/to/semcode/target/release/semcode-mcp", "args": [ "--database", "/path/to/your/indexed/.semcode.db", // "--git", "/path/to/your/git/repo" // 可选: 指定Git仓库路径,用于在特定Git仓库的上下文中操作。 ] } } }
配置说明:
- 'mcpServers': 根对象,包含所有MCP服务器的配置。
- 'semcode': 您为这个Semcode服务器实例定义的名称(可以自定义)。
- 'command': 必填,'semcode-mcp' 可执行文件的绝对路径。
- 'args': 可选,传递给 'semcode-mcp' 的命令行参数列表。
- '--database': 推荐,指定Semcode数据库文件的路径。这是服务器进行代码查询的基础。
- '--git': 可选,指定用于上下文查询的Git仓库路径。
基本使用方法
- 索引代码库: 在您的代码库目录(例如Linux内核源代码)中运行索引命令。
这将在代码库目录下创建 '.semcode.db' 数据库文件。cd /path/to/your/linux/repo /path/to/semcode/target/release/semcode-index -s . - 启动MCP服务器 (通过MCP客户端): 配置好 'mcp-config.json' 文件后,使用您的MCP客户端(例如Claude客户端)启动并连接Semcode MCP服务器。
claude --mcp-config mcp-config.json - 通过AI工具查询: 一旦连接成功,AI工具即可使用Semcode提供的工具进行代码查询。
- 例如,让AI查找 'btrfs_search_slot' 函数:
User: "Find function btrfs_search_slot" - AI可能会调用 'semcode.find_function' 工具并返回结果。
- 例如,让AI查找 'btrfs_search_slot' 函数:
信息
分类
开发者工具