Serena
by oraios
Serena gives a coding agent IDE-grade semantic tools — symbol search, rename, safe delete — across 40-plus languages via language servers, for free.
Add to Claude Code
claude mcp add serena -- uvx --from git+https://github.com/oraios/serena serena start-mcp-server --context ide-assistant --project $(pwd)
Source: https://github.com/oraios/serena
About
Instead of grepping text and hoping for the best, Serena works at the symbol level: find_symbol and find_referencing_symbols locate a function or class and everywhere it's used, get_symbols_overview maps a file's structure before the agent reads it in full, and replace_symbol_body / insert_after_symbol edit precisely at the symbol boundary rather than patching raw text. Refactors like rename and safe delete propagate across the codebase the way an IDE's refactor tools would, because Serena is backed by real language servers, not pattern matching.
It covers 40-plus languages this way — Python, TypeScript/JavaScript, Go, Rust, Java, C/C++, C#, Ruby, PHP, Kotlin, Swift among them — and adds a memory system so an agent can persist project-specific notes across sessions instead of re-deriving context every time. There's also a JetBrains plugin variant for interactive debugging support on top of the MCP server.
Key features
- find_symbol and find_referencing_symbols navigate code by symbol and usage, not raw text search
- get_symbols_overview maps a file's structure before the agent decides what to read in full
- replace_symbol_body and insert_after_symbol/insert_before_symbol edit precisely at the symbol boundary
- rename and safe-delete refactors propagate correctly because they run through a real language server
- Backed by language servers for 40+ languages, plus a JetBrains plugin for interactive debugging
- Built-in memory system lets the agent retain project-specific context across sessions
Use cases
- Refactoring or renaming symbols across a large codebase without breaking references elsewhere
- Letting an agent orient itself in an unfamiliar repo via symbol overviews instead of reading every file
- Making precise, symbol-scoped edits instead of large diffs that risk touching unrelated code
- Giving a coding agent IDE-level navigation in editors that don't have that built in
Available tools
find_symbol
Locates a symbol (function, class, method) by name or path across the project.
get_symbols_overview
Returns the top-level symbol structure of a file before it's read in full.
find_referencing_symbols
Finds every place in the codebase that references a given symbol.
replace_symbol_body
Replaces the body of a function, method, or class in place.
insert_after_symbol
Inserts new code immediately after a specified symbol's definition.
Frequently asked questions
Which languages does it actually support?
40-plus via bundled language servers, covering Python, TypeScript/JavaScript, Go, Rust, Java, C/C++, C#, Ruby, PHP, Kotlin, and Swift among others; the JetBrains plugin variant extends that to any language the IDE supports.
Does it replace basic file-reading tools?
No — it adds symbol-level navigation and editing on top of the usual read/write/search tools, for cases where text-pattern matching isn't precise enough.