项目简介

Semcode是一个强大的语义代码搜索工具,专门用于C/C++和Rust代码库。它通过索引代码库,允许用户使用精确匹配和语义相似性来搜索函数、类型和代码模式。Semcode不仅提供一个交互式查询工具,还包含一个MCP服务器,旨在与AI代码工具(如Claude)集成,为AI提供快速、准确的代码上下文信息,从而提高AI在代码理解和分析方面的效率。

主要功能点

  • 快速代码索引: 使用Tree-sitter高效索引C/C++和Rust代码库。
  • 交互式查询界面: 提供全面的命令集进行代码查询。
  • 调用图分析: 支持函数的正向和反向调用链分析。
  • 类型与宏发现: 详细展示结构信息。
  • 代码差异分析: 理解代码变更及其影响。
  • 模式匹配与语义搜索: 支持使用正则表达式和向量进行语义搜索。
  • Git集成: 支持对Git提交历史进行增量扫描和搜索。
  • 邮件列表归档索引: 索引lore.kernel.org等邮件列表的归档,支持搜索邮件内容和相关代码符号。
  • AI集成 (MCP服务器): 通过MCP服务器向AI工具提供上下文和功能,例如查找函数/类型、进行调用图分析、代码体搜索。

安装步骤

  1. 安装依赖: 根据您的操作系统安装必要的依赖。
    • 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。
  2. 构建项目:
    git clone https://github.com/facebookexperimental/semcode.git
    cd semcode
    cargo build --release
    编译后的二进制文件位于 'target/release/' 目录下,例如 'semcode' 和 'semcode-mcp'。

服务器配置

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仓库路径。

基本使用方法

  1. 索引代码库: 在您的代码库目录(例如Linux内核源代码)中运行索引命令。
    cd /path/to/your/linux/repo
    /path/to/semcode/target/release/semcode-index -s .
    这将在代码库目录下创建 '.semcode.db' 数据库文件。
  2. 启动MCP服务器 (通过MCP客户端): 配置好 'mcp-config.json' 文件后,使用您的MCP客户端(例如Claude客户端)启动并连接Semcode MCP服务器。
    claude --mcp-config mcp-config.json
  3. 通过AI工具查询: 一旦连接成功,AI工具即可使用Semcode提供的工具进行代码查询。
    • 例如,让AI查找 'btrfs_search_slot' 函数:
      User: "Find function btrfs_search_slot"
    • AI可能会调用 'semcode.find_function' 工具并返回结果。

信息

分类

开发者工具