
Serena
LSP-powered coding agent toolkit: semantic symbol search, references and structural edits.
Add to your client
Copy the config for your MCP client and paste it into its config file.
uvx --from git+https://github.com/oraios/serena serena start-mcp-serverPaste into ~/Library/Application Support/Claude/claude_desktop_config.json
{
"mcpServers": {
"serena": {
"command": "uvx",
"args": [
"--from",
"git+https://github.com/oraios/serena",
"serena",
"start-mcp-server"
]
}
}
}Requires `uv` (the Python package runner). Install it from https://docs.astral.sh/uv/ if `uvx` is not found.
Before you start
- uv (the Python package/tool manager) installed — it bootstraps and runs Serena
- Python 3.11+ (the project targets recent Python; 3.13 recommended)
- Language servers for the languages you use are auto-downloaded on first use; some ecosystems (e.g. Java, C#) may need their toolchain installed
- No API key or account required — Serena runs locally against your repo
About Serena
Serena is a free, open-source MCP toolkit that turns LLM coding agents into IDE-grade engineers by giving them semantic, symbol-level access to a codebase instead of plain text. It runs language servers (LSP) under the hood, so the agent can find a symbol's definition, list every reference to it, read a file's symbol outline, and perform structural edits (replace a function body, insert before/after a symbol, rename) without re-reading whole files.
This matters for large repos: rather than dumping files into context, the agent retrieves only the relevant symbols and edits them precisely, which cuts token usage and reduces broken edits. Serena supports 40+ languages via their respective language servers (Python, TypeScript/JavaScript, Java, Go, Rust, C/C++, C#, PHP, Ruby, and more).
Serena is model- and client-agnostic. It plugs into Claude Code, Claude Desktop, Codex, Cursor, VS Code, and any MCP-compatible client over stdio. It also ships a persistent project-memory system so an agent can record and recall facts about a codebase across sessions. There is no API key or account — it runs entirely locally against your code.
Tools & capabilities (11)
find_symbolLocate a class/function/symbol by name path across the project
get_symbols_overviewReturn the symbol outline (top-level definitions) of a file
find_referencing_symbolsFind all symbols that reference a given symbol (call sites, usages)
replace_symbol_bodyReplace the full body of a function/class/method symbol
insert_after_symbolInsert new code immediately after a given symbol
insert_before_symbolInsert new code immediately before a given symbol (e.g. imports)
search_for_patternRegex/text search across the project for non-symbol matches
read_file / list_dir / find_fileNavigate the project tree and read file contents
replace_contentTargeted text/line replacement when symbolic editing doesn't apply
execute_shell_commandRun shell commands (tests, builds, linters) from the agent
write_memory / read_memory / list_memoriesPersist and recall project knowledge across sessions
When to use it
- Use it when an agent needs to refactor or rename a symbol safely across a large codebase without re-reading every file
- Use it when you want precise, structural edits (replace a function body, add a method) instead of fragile whole-file rewrites
- Use it when token budget matters — retrieve only relevant symbols rather than dumping files into context
- Use it when you want to add IDE-like 'find references' / 'go to definition' powers to Claude Code, Cursor, or VS Code
- Use it when working in a polyglot repo (40+ languages via LSP) and need consistent semantic navigation
- Use it when an agent should remember facts about a project across sessions via persistent memories
Quick setup
- 1Install uv (e.g. via the official installer or your package manager)
- 2Register Serena with your MCP client, typically by running it via uvx/uv tool from the oraios/serena repo over stdio
- 3Point it at your project (run `serena` in the repo or pass the project path) so it can index and start the right language server
- 4Restart your MCP client (Claude Code/Desktop, Cursor, VS Code) so it picks up the new server
- 5Verify by asking the agent to outline a file or find references to a symbol; the language server downloads on first use
Security notes
Serena reads and edits files in the project you point it at and launches language servers locally, so only run it on trusted codebases. Installing from a git ref pulls executable code, so pin to a tag or commit you trust.
Serena FAQ
Does Serena require an API key or account?
No. Serena runs entirely locally against your code via uv/uvx and language servers. There is no authentication, account, or hosted service.
Which languages does it support?
40+ languages through their language servers, including Python, TypeScript/JavaScript, Java, Go, Rust, C/C++, C#, PHP, and Ruby. Language servers are downloaded automatically on first use.
Which MCP clients work with Serena?
Any stdio MCP client — including Claude Code, Claude Desktop, Codex, Cursor, and VS Code. There's also a JetBrains plugin path with additional refactoring tools.
How is it different from just letting the agent read files?
Serena uses LSP to operate at the symbol level: it can find references, navigate definitions, and edit specific symbols. This is more precise and uses far fewer tokens than reading whole files.
Is it free?
Yes, it's open source under the MIT license and free to run locally.
Alternatives to Serena
Microsoft's official browser-automation MCP using Playwright's accessibility tree (no vision model).
Up-to-date, version-specific library documentation injected into your coding agent.
Connect MCP clients to a running JetBrains IDE (IntelliJ, PyCharm, WebStorm, Android Studio).
Compare Serena with: