项目简介
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与代码库的交互提供可定制的指令模式。
安装步骤
- 克隆仓库: 您需要从GitHub克隆Serena仓库:
git clone https://github.com/pioneersx-ai/serena.git - 进入目录: 进入克隆下来的Serena项目目录:
cd serena - 安装Python依赖: 建议使用Python虚拟环境,并安装项目所需的Python依赖:
python -m venv venv # 激活虚拟环境 (Linux/macOS) source venv/bin/activate # 激活虚拟环境 (Windows PowerShell) .\venv\Scripts\Activate.ps1 # 安装项目依赖 pip install -e . - 安装语言服务器依赖 (可选): 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服务器进行交互。
- 启动服务器: MCP客户端会自动执行您配置的'command'和'args'来启动Serena服务器。
- 声明能力: 服务器启动后会向客户端声明其提供的所有工具、资源和Prompt模板。
- 调用工具: LLM客户端可以根据需求调用Serena服务器提供的工具,例如:
- 查找符号: 查询代码库中特定名称的函数、类或变量。
- 查找引用: 找出代码库中所有引用某个符号的位置。
- 编辑代码: 例如替换函数体、删除类或插入新代码片段。
- 搜索模式: 在代码文件中查找符合特定正则或Glob模式的文本。
- 获取资源: 客户端可以请求Serena服务器提供特定代码文件的内容、目录结构概览等资源信息。
- LLM交互: LLM利用这些工具和资源来深度理解代码结构、分析代码逻辑、生成修改建议,并自动化执行代码重构、错误修复、新功能开发等复杂的编程任务。
信息
分类
开发者工具