← MCP servers · oraios

Serena

BLOCKgrade F · trust 51/100

A powerful MCP toolkit for coding, providing semantic retrieval and editing capabilities - the IDE for your agent

agentaiai codingclaudeclaude codecodexidejetbrains

Overview

From the repository's own README, as read at the audited commit.

<p align="center" style="text-align:center;">  <img src="resources/serena-logo.svg#gh-light-mode-only" style="width:500px">  <img src="resources/serena-logo-dark-mode.svg#gh-dark-mode-only" style="width:500px"></p><h3 align="center">    The IDE for Your Coding Agent</h3><div align="center">  <a href="https://discord.com/invite/cVUNQmnV4r"><img src="https://img.shields.io/badge/discord-join-5865F2?style=flat-square&labelColor=0a0e14&logo=discord&logoColor=5865F2" alt="discord"></a>  <a href="https://github.com/oraios/serena/blob/main/LICENSE"><img src="https://img.shields.io/badge/license-GPL--3.0--or--later-b0e8ff?style=flat-square&labelColor=0a0e14" alt="license: GPL-3.0-or-later"></a></div><br>* Serena provides essential **semantic code retrieval, editing, refactoring and debugging tools** that are akin to an IDE's capabilities,  operating at the symbol level and exploiting relational structure.* It integrates with any client/LLM via the model context protocol (**MCP**).  Serena's **agent-first tool design** involves robust high-level abstractions, distinguishing it fromapproaches that rely on low-level concepts like line numbers or primitive search patterns.Practically, this means that your agent operates **faster, more efficiently and more reliably**, especially in larger andmore complex codebases.> [!IMPORTANT]> Do not install Serena via an MCP or plugin marketplace! They contain outdated and suboptimal installation commands. > Instead, follow our [Quick Start](#quick-start) instructions.## Quick Demohttps://github.com/user-attachments/assets/8d11646e-b80e-4723-b9d7-32d6101b5f58:tv: Longer video: [Introduction to Serena in 5 Minutes (YouTube)](https://www.youtube.com/watch?v=5QN7gN1KYLA)## What Our "End Users" SayWhile it is humans who download and set up Serena, our end users are essentially AI agents.As the ones actually applying Serena's tools, they are in the best position to evaluate Serena.We crafted an unbiased evaluation prompt that leads the agent to p

Connect

Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control. Replace the environment placeholders with a token scoped to the least it needs.

claude-code (pypi)
claude mcp add serena-agent -- uvx serena-agent==1.5.3

Details

Source
oraios/serena
npm
vue-calculator-test-fixture@1.0.0
PyPI
test-project
Transports
stdio · streamable-http
Credentials it reads
GITHUB_TOKENINTELEPHENSE_LICENSE_KEY
Tools
Registered at runtime; the list could not be read from source.
License
NOASSERTION
Stars
29,543 · pushed 0d ago

Trust audit

Do not install this without reading the findings. The audit found something that could harm you or your machine.

LayerWhat it checksResult
L0Provenance & inventoryWARN
L1Static analysis of the codeFAIL
L2Instruction surface (what it tells the agent)PASS
L3Class-specific surfacePASS
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
declared (9 observation(s))
Network
declared (6 observation(s))
Shell
declared (14 observation(s))
Dependencies
not all pinned
Secrets in source
none-found

Findings (25)

HIGHCode injection · code.deserialize · CWE-78, CWE-94, CWE-95
src/serena/hooks.py:213
return pickle.load(f)
Why it matters. deserialises untrusted bytes into live objects
Fix. use json or yaml.safe_load
HIGHCode injection · code.deserialize · CWE-78, CWE-94, CWE-95
src/serena/project_server.py:276
return pickle.loads(response.content)
Why it matters. deserialises untrusted bytes into live objects
Fix. use json or yaml.safe_load
HIGHCode injection · code.deserialize · CWE-78, CWE-94, CWE-95
src/serena/util/yaml.py:76
commented_map: CommentedMap | None = yaml.load(f)
Why it matters. deserialises untrusted bytes into live objects
Fix. use json or yaml.safe_load
HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
src/serena/repl/repl.py:354
exec(compile(ast.Module(body=statements, type_ignores=[]), self.SOURCE_NAME, "exec"), namespace)
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
src/serena/repl/repl.py:356
return eval(compile(ast.Expression(body=trailing_expression), self.SOURCE_NAME, "eval"), namespace)
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
MEDIUMInventory / provenance · inv.binary · CWE-1104
resources/jetbrains-marketplace-button.cdr
jetbrains-marketplace-button.cdr
Why it matters. a compiled or binary member cannot be reviewed from source
Fix. ship source, or explain the binary in the README
MEDIUMInventory / provenance · inv.binary · CWE-1104
resources/serena-block-diagram.afdesign
serena-block-diagram.afdesign
Why it matters. a compiled or binary member cannot be reviewed from source
Fix. ship source, or explain the binary in the README
MEDIUMInventory / provenance · inv.binary · CWE-1104
resources/serena-icons.cdr
serena-icons.cdr
Why it matters. a compiled or binary member cannot be reviewed from source
Fix. ship source, or explain the binary in the README
MEDIUMInventory / provenance · inv.binary · CWE-1104
resources/serena-logo.cdr
serena-logo.cdr
Why it matters. a compiled or binary member cannot be reviewed from source
Fix. ship source, or explain the binary in the README
MEDIUMInventory / provenance · inv.binary · CWE-1104
resources/serena-mac-dock-icon.cdr
serena-mac-dock-icon.cdr
Why it matters. a compiled or binary member cannot be reviewed from source
Fix. ship source, or explain the binary in the README
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
src/serena/dashboard.py:1187
url = f"http://127.0.0.1:{port}/heartbeat"
LOWInventory / provenance · inv.hidden_file · CWE-1104
src/interprompt/.syncCommitId.remote
.syncCommitId.remote
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
src/interprompt/.syncCommitId.this
.syncCommitId.this
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
test/resources/repos/bsl/test_repo/.bsl-language-server.json
.bsl-language-server.json
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
test/resources/repos/luau/test_repo/.luaurc
.luaurc
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
test/resources/repos/r/test_repo/.Rbuildignore
.Rbuildignore
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWCode injection · code.deserialize · CWE-78, CWE-94, CWE-95
test/serena/test_hooks.py:972
return pickle.load(f)
Why it matters. deserialises untrusted bytes into live objects
Fix. use json or yaml.safe_load
LOWCode injection · code.deserialize · CWE-78, CWE-94, CWE-95
test/serena/test_hooks.py:1199
assert pickle.load(f).n_recent_grep_uses == 0
Why it matters. deserialises untrusted bytes into live objects
Fix. use json or yaml.safe_load
LOWInsecure crypto · crypto.weak_hash · CWE-327, CWE-338
src/serena/util/text_utils.py:540
return hashlib.sha1(matched_text.encode("utf-8")).hexdigest()[: cls._DIGEST_LEN]
LOWInsecure crypto · crypto.weak_hash · CWE-327, CWE-338
src/solidlsp/language_servers/clangd_language_server.py:101
return hashlib.md5(f.read()).hexdigest()
LOWInsecure crypto · crypto.weak_hash · CWE-327, CWE-338
src/solidlsp/language_servers/eclipse_jdtls.py:725
return hashlib.md5(ws_hash_input).hexdigest()
LOWInsecure crypto · crypto.weak_hash · CWE-327, CWE-338
src/solidlsp/ls.py:218
self._content_hash = hashlib.md5(self.contents.encode(self.encoding)).hexdigest()
LOWInsecure crypto · crypto.weak_hash · CWE-327, CWE-338
test/solidlsp/java/test_jdtls_path_resolution.py:552
expected = hashlib.md5(self.REPO.encode()).hexdigest()
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
test/serena/test_memories_manager.py:416
fs_manager.get_memory_file_path("../../etc/passwd")
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
test/solidlsp/pascal/test_pascal_auto_update.py:171
member = tarfile.TarInfo(name="subdir/../../etc/passwd")

Gates applied: no_behavioural_pass.

Audited 2026-09-18 · audit v0.4.0 · source sha e27094f193bc · full audit: observations/trust-audit/mcp-server/oraios__serena.json · Report an issue or request a re-scan

Audit history

DateSourceVerdictGradeScoreChange
2026-09-18e27094f193bcBLOCKF51first audit

Alternatives

Other servers in the same categories, safer ones first.

Questions

What is the Serena MCP server?

A powerful MCP toolkit for coding, providing semantic retrieval and editing capabilities - the IDE for your agent

Is Serena safe to connect to an agent?

No — not without reading the findings first. The audit graded it F (51/100) and found 5 critical or high issues in the source. Each one is listed on this page with the file and line it is on.

What credentials does Serena need?

It reads GITHUB_TOKEN and INTELEPHENSE_LICENSE_KEY from the environment. Give it a token scoped to the least it needs — an agent that can be talked into calling a tool can be talked into calling it with your credentials.

How does Serena run?

It speaks stdio and streamable-http, so it runs as a local process your client starts. It is published on npm as vue-calculator-test-fixture at 1.0.0.

How current is this page?

The grade is for one exact copy of the source (e27094f193bc), read on 2026-09-18. The repository is watched and re-audited when it changes.

Provenance: OBSERVED · read 2026-09-18 · job trust-audit-2026-09-18