代码语义分析服务器

高性能代码语义分析服务器,提供基于tree-sitter解析的符号提取、签名获取、定义查询和文件结构分析功能,适用于代码探索和审查场景。

  • by ericbrooks404
  • Rust
  • 本地部署
  • 更新于
在 GitHub 查看 ericbrooks404/code-search-mcp

使用说明

代码搜索MCP服务器

一种高性能的模型上下文协议(MCP)服务器,使用树保姆解析提供语义代码智能。此工具可以在不读取整个文件的情况下进行高效的代码探索和分析。

特性

服务器提供了四种强大的代码分析工具:

1. list_symbols

列出文件中的所有符号(函数、结构、枚举、特征等)及其行号和类型。

比读取整个文件更有效 -仅返回符号元数据。

参数:

  • file -从项目根目录开始的相对文件路径(例如,“server/src/lib.rs”)

输出示例:

[
  {
    "name": "compute_movement_speed",
    "kind": "function",
    "line": 42
  },
  {
    "name": "Player",
    "kind": "struct",
    "line": 15
  }
]

2. get_signature

获取不带正文的函数或声明的签名。返回函数签名、结构定义头等。

比读取文件少95%的令牌 -非常适合理解没有实现细节的API。

参数:

  • file -从项目根目录开始的相对文件路径
  • name -要搜索的符号名称(例如,“compute_movement_speed”)

输出示例:

pub fn compute_movement_speed(player: &Player, terrain: TerrainType) -> f32

3. get_definition

获取特定命名符号(函数、结构、枚举、trait、impl、const等)的完整源代码。

仅返回该符号的代码,不返回周围的文件 -非常适合集中精力进行代码审查。

参数:

  • file -从项目根目录开始的相对文件路径
  • name -要搜索的符号名称

输出示例:

pub fn compute_movement_speed(player: &Player, terrain: TerrainType) -> f32 {
    let base_speed = player.stats.speed;
    let terrain_modifier = terrain.speed_modifier();
    base_speed * terrain_modifier
}

4. get_file_structure

获取文件结构的层次结构概述,显示嵌套的模块、impl块、函数、结构等。

比读取文件少85%的令牌 -非常适合理解文件组织。

参数:

  • file -从项目根目录开始的相对文件路径

输出示例:

{
  "modules": [
    {
      "name": "combat",
      "items": [
        {"kind": "struct", "name": "Weapon"},
        {"kind": "function", "name": "calculate_damage"}
      ]
    }
  ]
}

安装

从源代码构建

cd tools/code-search-mcp
cargo build --release

编译后的二进制文件将位于 target/release/code-search-mcp.

用法

作为MCP服务器

在MCP客户端配置中配置服务器(例如。, .mcp.json):

{
  "mcpServers": {
    "code-search": {
      "type": "stdio",
      "command": "/path/to/code-search-mcp/target/release/code-search-mcp",
      "args": [
        "--project-root",
        "/path/to/your/project"
      ],
      "env": {}
    }
  }
}

命令行参数

  • --project-root <PATH> -用于解析相对文件路径的项目根目录(默认:“.”)

独立使用

# Use current directory as project root
./code-search-mcp

# Specify a project root
./code-search-mcp --project-root /path/to/project

支持的语言

目前支持:

  • 锈 (.rs文件)
  • Types/JavaScript (.ts、.tsx文件)
  • C (.cs文件)

该工具使用树型解析器来准确理解代码结构的语义。

性能优势

工具 代币缩减 用例
list_symbols ~99% 发现文件中的内容
get_signature ~95% 了解函数API
get_file_structure ~85% 掌握文件组织
get_definition 变化 提取特定符号

您无需读取整个文件(数千个令牌),只需使用最少的令牌即可获得所需的信息。

建筑

  • 解析器:基于树的解析,使用文件缓存提高性能
  • 服务器:使用MCP兼容的基于stdio的服务器 rmcp 图书馆
  • 查询:用于语义代码分析的树型查询
  • 缓存:自动解析树缓存,避免冗余解析

依赖项

  • rmcp -MCP服务器框架
  • tree-sitter -解析器生成器工具和增量解析库
  • tree-sitter-rust -树保姆的Rust语法
  • tree-sitter-typescript -Types/JavaScript语法
  • tree-sitter-c-sharp -C#语法树保姆
  • tokio -异步运行时
  • dashmap -用于缓存的并发哈希映射

发展

运行测试

cargo test

添加语言支持

要添加对新语言的支持,请执行以下操作:

  1. 将树保姆语法依赖项添加到 Cargo.toml
  2. 更新解析器以处理新的文件扩展名
  3. 为中的语言添加树型查询 src/queries.rs
  4. 更新工具实现以处理新的语言构造

许可证

有关许可证信息,请参阅项目根目录。