问题:Agent 改代码全靠"猜"
你用 Claude Code 或 Codex 改过大型项目吗?
最常见的场景:你想重命名一个函数。Agent 的做法是——全文搜索这个函数名,然后逐个文件替换。听起来没问题?但实际操作中:
- 它不知道这个函数在哪些地方被调用
- 它不知道有没有同名的变量或参数
- 它不知道这个函数的类型签名在接口层有没有约束
- 它改完之后,编译报错了,因为它漏了一个 import
这就是问题所在:Agent 在用"文本编辑"的方式改"代码"。
人类用 IDE 改代码的时候,IDE 知道每个符号的定义、引用、类型、作用域。Agent 没有这个能力——它只能看到文本。
Serena 是什么
Serena 是一个 MCP Server,它把 IDE 的核心能力——符号级检索、语义编辑、安全重构——通过 MCP 协议暴露给任何支持 MCP 的 AI 客户端。
一句话:给你的 Agent 装一个 IDE 大脑。
它解决了什么问题
| 场景 | 没有 Serena | 有 Serena |
|---|---|---|
| 重命名函数 | 全文搜索替换,可能漏掉或多改 | 一个原子操作,所有引用自动更新 |
| 查找调用链 | 读一堆文件,靠猜 | 直接查"谁调用了这个符号" |
| 移动函数到新文件 | 复制-粘贴-删旧-修 import,经常出错 | 一个 move 操作搞定 |
| 理解代码结构 | 读整个文件,token 爆炸 | 只查符号大纲,精准定位 |
| 跨文件重构 | 8-12 步操作,每步都可能出错 | 一个原子调用 |
怎么做到的
Serena 的核心思路很简单:接一个语言服务器(LSP),然后把 LSP 的能力包装成 MCP 工具。
LSP(Language Server Protocol)就是 VS Code 背后那个让代码高亮、自动补全、跳转定义、查找引用的协议。Serena 把这些能力"翻译"成了 Agent 能调用的工具。
支持 40+ 种语言
Python、TypeScript、Go、Rust、Java、C++、C#、Kotlin、Swift、Ruby、PHP……基本上主流语言都覆盖了。语言支持是通过开源的 LSP Server 实现的,不需要额外配置。
两套后端
| 特性 | LSP 后端(免费) | JetBrains 插件(付费) |
|---|---|---|
| 符号查找 | ✅ | ✅ |
| 引用查找 | ✅ | ✅ |
| 符号重命名 | ✅ | ✅ |
| 文件/目录移动 | ❌ | ✅ |
| 类型层次结构 | ❌ | ✅ |
| 依赖搜索 | ❌ | ✅ |
| 交互式调试 | ❌ | ✅ |
| 内联重构 | ❌ | ✅ |
免费的 LSP 后端已经够用了。JetBrains 插件适合重度用户,特别是需要跨文件移动、调试这些高级操作的场景。
实际效果
Serena 团队做了一个很酷的测试:让 Opus 4.6 在 Claude Code 里用 Serena 做 20 个常规编码任务,然后问 Agent 自己的感受。
"Serena 的语义工具是我用过的最有价值的扩展——跨文件重命名、移动、引用查找,原来需要 8-12 个容易出错的步骤,现在一个原子调用就搞定了。我会让每个跟我合作的开发者都装上它。"
—— Opus 4.6 (high) in Claude Code
GPT 5.4 在 Codex CLI 里的评价也类似:
"作为一个编程 AI Agent,我会让我的主人装 Serena,因为它给了我 IDE 级别的符号、引用、重构理解能力,让脆弱的文本手术变成了更冷静、更快、更自信的代码变更。"
—— GPT 5.4 (high) in Codex CLI
怎么用
安装
# 前提:装好 uv(Python 包管理器)
uv tool install -p 3.13 serena-agent
# 初始化
serena init
接入 Claude Code
# 在 Claude Code 的 MCP 配置里加:
claude mcp add serena -- serena mcp
接入其他客户端
Serena 支持所有 MCP 客户端:Claude Desktop、Codex CLI、OpenCode、Gemini CLI、Cursor、VS Code + Copilot、JetBrains IDEs。
配置方式两种:
- 启动命令模式:告诉客户端用什么命令启动 Serena MCP Server
- HTTP 模式:自己启动 Serena,给客户端一个 URL
跟同类工具比
| 工具 | 定位 | Star | 核心差异 |
|---|---|---|---|
| Serena | IDE 级 MCP 工具包 | 26K | 基于 LSP,符号级操作,40+ 语言 |
| Context+ | 代码知识图谱 | 2K | RAG + AST,侧重"理解"而非"编辑" |
| Axon | 代码知识图谱 | 714 | 图数据库,侧重依赖分析 |
| Aider | 终端编程助手 | 30K+ | 完整的 Agent,不暴露 MCP 工具 |
Serena 的独特之处:它不是一个 Agent,而是一个"Agent 的工具"。你把它接给任何 MCP 客户端,那个客户端就自动获得了 IDE 级别的代码操作能力。它跟你的 Agent 是互补关系,不是竞争关系。
坑和注意事项
- 不要从 MCP 市场安装:README 明确说了,市场里的版本过时且命令不对,要按官方文档来
- LSP 后端有些语言支持不完整:比如"查找实现"只在部分语言可用,"查找声明"对外部依赖可能不工作
- 需要 Python 3.13:如果你的系统没有,uv 会自动帮你装,但要注意版本
- 首次使用要 init:`serena init` 会配置语言后端,这一步不能跳过
- 配置层级多:全局配置、项目配置、客户端配置、模式配置……建议先用默认的,有需要再调
什么时候该用 Serena
如果你:
- 在大型代码库上用 Agent 改代码,经常遇到"改错了"或"漏改了"
- 需要 Agent 做跨文件重构(重命名、移动、内联)
- 想让 Agent 更高效地理解代码结构,少读点文件
- 用的是 Claude Code、Codex、Cursor 等支持 MCP 的客户端
那 Serena 值得一试。它不改变你的工作流,只是让你的 Agent 多了一个"IDE 大脑"。
快速上手
# 安装
uv tool install -p 3.13 serena-agent
# 初始化
serena init
# 接入 Claude Code
claude mcp add serena -- serena mcp
# 开始用!Agent 现在可以:
# - find_symbol:查找符号定义
# - find_referencing_symbols:查找所有引用
# - rename_symbol:安全重命名
# - replace_symbol_body:替换函数体
# - symbol_overview:查看文件大纲
项目:oraios/serena
Star:26,113 ⭐
语言:Python
协议:MIT
文档:oraios.github.io/serena