项目简介

Serena是一个创新的AI辅助编程后端,旨在通过Model Context Protocol (MCP) 与大型语言模型 (LLM) 客户端无缝集成。它提供了丰富的代码分析和编辑功能,包括语义检索、代码导航、重构工具以及自动化任务执行能力,支持多种主流编程语言。Serena的核心价值在于将复杂的代码操作抽象为LLM可理解和调用的工具,从而实现更智能、更高效的编程体验。

主要功能点

  • 多语言代码理解: 通过集成多种语言服务器(如Python、Java、TypeScript、Go、Rust、C#、PHP、Elixir、Erlang、Lua、Dart、Zig、Clojure、R、AL、Nix、Bash、Terraform),实现对不同编程语言代码的深度语义分析,包括符号查找、定义跳转、引用查询等。
  • 智能代码编辑: 提供基于语义理解的代码编辑工具,支持符号的删除、插入和替换,使LLM能够精准地修改代码结构和内容。
  • 代码仓库管理: 能够管理和检索项目中的文件、目录及代码模式,支持通过灵活的Glob模式进行文件过滤和内容搜索。
  • 工具化编程接口: 将上述复杂的代码操作封装为标准化的工具接口,供LLM客户端通过JSON-RPC协议调用,实现LLM驱动的代码自动化和开发流程增强。
  • Prompt模板支持: 支持定义和渲染Prompt模板,为LLM与代码库的交互提供可定制的指令模式。

安装步骤

  1. 克隆仓库: 您需要从GitHub克隆Serena仓库:
    git clone https://github.com/pioneersx-ai/serena.git
  2. 进入目录: 进入克隆下来的Serena项目目录:
    cd serena
  3. 安装Python依赖: 建议使用Python虚拟环境,并安装项目所需的Python依赖:
    python -m venv venv
    # 激活虚拟环境 (Linux/macOS)
    source venv/bin/activate
    # 激活虚拟环境 (Windows PowerShell)
    .\venv\Scripts\Activate.ps1
    # 安装项目依赖
    pip install -e .
  4. 安装语言服务器依赖 (可选): Serena依赖外部语言服务器来提供代码理解能力。根据您需要支持的编程语言,您可能需要手动安装相应的语言环境和其对应的LSP服务器(例如,对于Elixir,需要安装Elixir和Next LS;对于Erlang,需要安装Erlang/OTP和rebar3)。具体的安装指南请参考各个语言LSP的官方文档。

服务器配置

MCP客户端需要配置Serena MCP服务器的启动命令和参数。以下是推荐的JSON格式配置信息,以便MCP客户端与Serena服务器建立连接:

{
  "server_name": "Serena Code Assistant",
  "command": "python",
  "args": [
    "./scripts/mcp_server.py"
  ],
  "description": "启动Serena AI辅助编程MCP服务器,提供代码语义分析、编辑和自动化工具。该服务器通过JSON-RPC与LLM客户端通信,支持多种编程语言的代码理解和操作。",
  "language": "python",
  "mcp_version": "1.0",
  "capabilities": {
    "resources": true,
    "tools": true,
    "prompts": true
  }
}
  • 'server_name': 服务器的显示名称,方便您在MCP客户端中识别。
  • 'command': 启动Serena服务器的可执行程序,这里是Python解释器。
  • 'args': 传递给'command'的参数列表,这里是Serena MCP服务器启动脚本的相对路径。
  • 'description': 对Serena服务器功能的详细描述。
  • 'language': 服务器主要开发的语言或默认支持的语言,此处为Python。
  • 'mcp_version': MCP协议的版本,通常为"1.0"。
  • 'capabilities': 服务器支持的MCP功能列表,指示其提供资源管理、工具调用和Prompt模板的能力。

基本使用方法

在MCP客户端中,配置好上述服务器信息后,您即可通过客户端界面或API与Serena MCP服务器进行交互。

  1. 启动服务器: MCP客户端会自动执行您配置的'command'和'args'来启动Serena服务器。
  2. 声明能力: 服务器启动后会向客户端声明其提供的所有工具、资源和Prompt模板。
  3. 调用工具: LLM客户端可以根据需求调用Serena服务器提供的工具,例如:
    • 查找符号: 查询代码库中特定名称的函数、类或变量。
    • 查找引用: 找出代码库中所有引用某个符号的位置。
    • 编辑代码: 例如替换函数体、删除类或插入新代码片段。
    • 搜索模式: 在代码文件中查找符合特定正则或Glob模式的文本。
  4. 获取资源: 客户端可以请求Serena服务器提供特定代码文件的内容、目录结构概览等资源信息。
  5. LLM交互: LLM利用这些工具和资源来深度理解代码结构、分析代码逻辑、生成修改建议,并自动化执行代码重构、错误修复、新功能开发等复杂的编程任务。

信息

分类

开发者工具