Serena: MCP server cho coding agent đọc và sửa code theo symbol như IDE
Tóm tắt
Serena là MCP server cung cấp công cụ truy xuất và sửa code ở mức symbol qua LSP (hơn 40 ngôn ngữ) hoặc plugin JetBrains. Đáng dùng cho repo lớn và refactor; lưu ý giấy phép GPL và giới hạn của language server.
Coding agent thường tìm code theo kiểu "grep rồi đọc cả file": muốn sửa một hàm 20 dòng, agent đọc file 1.500 dòng; muốn biết ai gọi hàm đó, nó grep tên hàm và nhận về cả comment lẫn chuỗi trùng tên. Với repo lớn, cách này vừa tốn token vừa dễ sửa sót. Serena (repo oraios/serena, khoảng 30 nghìn star vào thời điểm viết) giải quyết bằng cách cho agent các công cụ hiểu code ở mức symbol, tương tự những gì IDE làm cho lập trình viên: tìm định nghĩa, tìm tham chiếu, thay đúng thân hàm. README tự giới thiệu là "The IDE for Your Coding Agent".
Serena là gì, hoạt động ra sao?
Serena là một MCP server. Nó không phải agent và không gọi LLM; nó chỉ cung cấp tool, còn model (Claude Code, Codex, Claude Desktop, IDE…) quyết định khi nào dùng tool nào. Bên dưới, Serena có hai backend:
| Backend | Đặc điểm |
|---|---|
| Language Server (LSP), mặc định | Mã nguồn mở, hỗ trợ hơn 40 ngôn ngữ (Python, Java, TypeScript, Go, Rust, C#, C/C++, PHP, Ruby, Kotlin, Swift…) |
| Serena JetBrains Plugin | Trả phí (có dùng thử), thêm refactor move/inline và debug (breakpoint, xem biến) |
Nhóm công cụ chính
| Nhóm | Tool tiêu biểu | Lợi ích |
|---|---|---|
| Truy xuất | find symbol, symbol overview, find referencing symbols, find declaration/implementations, diagnostics | Đọc đúng hàm/class cần, không đọc cả file |
| Sửa theo symbol | replace symbol body, insert before/after symbol, safe delete | Sửa chính xác, ít lỗi khớp chuỗi |
| Refactor | rename (cả hai backend); move, inline (chỉ JetBrains) | Đổi tên xuyên dự án an toàn |
| Cơ bản | search pattern, read file, list dir, shell… | Thường tắt khi chạy trong Claude Code/Codex vì trùng tool sẵn có |
Ví dụ luồng điển hình khi agent cần đổi chữ ký hàm calculate_fee(): lấy symbol overview của module → find symbol để đọc riêng thân hàm → find referencing symbols để có danh sách chỗ gọi → replace symbol body cho hàm và từng chỗ gọi. Không bước nào cần đọc nguyên file.
Cài đặt
Theo README hiện tại (cần uv):
uv tool install -p 3.13 serena-agent
serena init # thêm -b JetBrains nếu dùng plugin
Sau đó kết nối client bằng launch command hoặc chạy Serena ở chế độ HTTP rồi trỏ client tới URL. README cảnh báo không cài qua MCP/plugin marketplace vì lệnh ở đó đã lỗi thời. Hãy lấy lệnh kết nối cho Claude Code từ tài liệu của repo, đừng copy từ bài blog cũ.
Cấu hình bằng YAML theo nhiều tầng: global, tham số CLI, theo project (có override cục bộ), theo client (context) và các "mode" ghép được. Serena cũng có hệ thống memory để lưu kiến thức dự án giữa các phiên; có thể tắt nếu bạn đã dùng AGENTS.md/CLAUDE.md.
Khi nào đáng dùng?
- Đáng: repo lớn, nhiều module; ngôn ngữ có type rõ (Java, C#, TypeScript, Go); refactor đổi tên/chữ ký xuyên nhiều file; agent hay đọc cả file lớn làm cháy context.
- Không cần: repo nhỏ vài chục file; script đơn lẻ; dự án mà agent đã làm tốt bằng grep + read.
Hạn chế và rủi ro
- Phụ thuộc chất lượng language server: find implementations chỉ có ở một số ngôn ngữ; find declaration thường không hoạt động với code trong dependency bên ngoài.
- Tính năng refactor mạnh nằm ở bản trả phí: move/inline và debug chỉ có với plugin JetBrains; Rider và CLion chưa được hỗ trợ.
- Cài thêm dependency: một số ngôn ngữ cần cài language server riêng; lần đầu index repo lớn có thể chậm.
- Giấy phép: phần SolidLSP là MIT, còn ứng dụng Serena là GPL-3.0-or-later. Dùng như công cụ nội bộ thì ổn, nhưng nhúng vào sản phẩm phân phối thì cần hỏi pháp chế.
- Thêm tool = thêm token mô tả: mỗi MCP server nạp định nghĩa tool vào context. Tắt những tool trùng với tool sẵn có của harness.
Áp dụng thế nào?
- Dev: Thử trên một repo lớn, cùng một task, so số token và số file đọc giữa có và không có Serena. Nếu không thấy khác biệt, đừng giữ.
- Tech Lead: Cân nhắc cho monorepo hoặc codebase Java/C# lâu năm, nơi refactor xuyên module là chuyện thường ngày. Chốt cấu hình project chung để cả team dùng giống nhau.
- PM: Lợi ích đo được là ít token hơn mỗi task và ít lỗi "sửa sót chỗ gọi". Đưa hai chỉ số này vào đánh giá thử nghiệm.
Nguồn & tham khảo
- Serena — GitHub repository — Oraios AI