/ Verzeichnis / Playground / Serena
● Community oraios ⚡ Sofort

Serena

von oraios · oraios/serena

Serena integriert die sprachservergestützte semantische Suche und symbolische Bearbeitungen in Ihren Agenten – so funktionieren Umbenennungen/Umgestaltungen/Suchreferenzen tatsächlich über große Codebasen hinweg.

Serena ist die „IDE für Ihren Agenten“. Anstatt nach Dateien zu suchen und zu beten, verwendet es echte LSP-Backends für über 40 Sprachen, um Fragen auf Symbolebene zu beantworten: „Wo heißt diese Funktion?“, „Wie lautet die Typhierarchie?“, „Benennen Sie dieses Symbol überall dort um, wo es verwendet wird“. Anschließend werden symbolische Bearbeitungstools bereitgestellt, sodass der Agent einen Funktionskörper ersetzen, ein Symbol sicher löschen oder Code relativ zu einem AST-Knoten einfügen kann. Das Gedächtnissystem behält den Kontext über Sitzungen hinweg bei – Claude macht dort weiter, wo es letzte Woche aufgehört hat.

Warum nutzen

Hauptfunktionen

Live-Demo

In der Praxis

serena.replay ▶ bereit
0/0

Installieren

Wählen Sie Ihren Client

~/Library/Application Support/Claude/claude_desktop_config.json  · Windows: %APPDATA%\Claude\claude_desktop_config.json
{
  "mcpServers": {
    "serena": {
      "command": "uvx",
      "args": [
        "--from",
        "serena-agent",
        "serena",
        "start-mcp-server",
        "--context=claude-desktop"
      ]
    }
  }
}

Öffne Claude Desktop → Settings → Developer → Edit Config. Nach dem Speichern neu starten.

~/.cursor/mcp.json · .cursor/mcp.json
{
  "mcpServers": {
    "serena": {
      "command": "uvx",
      "args": [
        "--from",
        "serena-agent",
        "serena",
        "start-mcp-server",
        "--context=claude-desktop"
      ]
    }
  }
}

Cursor nutzt das gleiche mcpServers-Schema wie Claude Desktop. Projektkonfiguration schlägt die globale.

VS Code → Cline → MCP Servers → Edit
{
  "mcpServers": {
    "serena": {
      "command": "uvx",
      "args": [
        "--from",
        "serena-agent",
        "serena",
        "start-mcp-server",
        "--context=claude-desktop"
      ]
    }
  }
}

Klicken Sie auf das MCP-Servers-Symbol in der Cline-Seitenleiste, dann "Edit Configuration".

~/.codeium/windsurf/mcp_config.json
{
  "mcpServers": {
    "serena": {
      "command": "uvx",
      "args": [
        "--from",
        "serena-agent",
        "serena",
        "start-mcp-server",
        "--context=claude-desktop"
      ]
    }
  }
}

Gleiche Struktur wie Claude Desktop. Windsurf neu starten zum Übernehmen.

~/.continue/config.json
{
  "mcpServers": [
    {
      "name": "serena",
      "command": "uvx",
      "args": [
        "--from",
        "serena-agent",
        "serena",
        "start-mcp-server",
        "--context=claude-desktop"
      ]
    }
  ]
}

Continue nutzt ein Array von Serverobjekten statt einer Map.

~/.config/zed/settings.json
{
  "context_servers": {
    "serena": {
      "command": {
        "path": "uvx",
        "args": [
          "--from",
          "serena-agent",
          "serena",
          "start-mcp-server",
          "--context=claude-desktop"
        ]
      }
    }
  }
}

In context_servers hinzufügen. Zed lädt beim Speichern neu.

claude mcp add serena -- uvx --from serena-agent serena start-mcp-server --context=claude-desktop

Einzeiler. Prüfen mit claude mcp list. Entfernen mit claude mcp remove.

Anwendungsfälle

Praxisnahe Nutzung: Serena

Finden Sie jeden Aufrufer einer Funktion in einer 1-Meilen-Codebasis

👤 Ingenieure, die in ausgereiften, großen Repos arbeiten ⏱ ~10 min intermediate

Wann einsetzen: Sie benötigen eine vollständige, korrekte Liste der Aufrufer – grep liefert falsch positive Ergebnisse (Kommentare, Zeichenfolgen, Funktionen mit ähnlichen Namen in anderen Bereichen) und übersieht Überladungen.

Voraussetzungen
  • UV installiert — curl -LsSf https://astral.sh/uv/install.sh | sh
  • Das Projekt wurde in einer Sprache geöffnet, die von Serenas LSP unterstützt wird — Die meisten gängigen Sprachen funktionieren sofort
Ablauf
  1. Öffnen Sie das Projekt
    Öffnen Sie /abs/path/to/repo mit Serena. Bestätigen Sie, dass der LSP-Index erstellt wurde.✓ Kopiert
    → Serena meldet den Projektstamm und den geladenen LSP
  2. Finden Sie Symbolverweise
    Finden Sie jede Aufrufseite von „PaymentService.chargeCustomer“. Überladungen und Überschreibungen einschließen, Tests ausschließen.✓ Kopiert
    → Exakte Datei:Zeilenliste, keine Fehlalarme aus Kommentaren/Strings
  3. Wirkung zusammenfassen
    Gruppieren Sie die Anrufstellen nach Modul. Sagen Sie mir für jede Gruppe, was der Aufrufer mit dem Rückgabewert macht.✓ Kopiert
    → Eine nach Modulen gruppierte Erzählung, keine flache Liste

Ergebnis: Sie wissen genau, was eine Änderung bedeuten würde – bevor Sie sie berühren.

Fallstricke
  • Einige polyglotte Repos benötigen mehrere LSPs — Starten Sie Serena pro Unterprojekt, wenn Sprachen keinen gemeinsamen Server haben
Kombinieren mit: filesystem · github

Benennen Sie ein öffentliches API-Symbol um, ohne abhängige Elemente zu unterbrechen

👤 Bibliotheks-/Framework-Betreuer ⏱ ~15 min intermediate

Wann einsetzen: Sie benennen eine Funktion oder Klasse um, die möglicherweise außerhalb der Datei verwendet wird. Sie benötigen eine LSP-genaue Umbenennung und keine Textersetzung.

Voraussetzungen
  • Bereinigen Sie den Git-Baum — git status clean, damit Sie den Unterschied vor dem Festschreiben überprüfen können
Ablauf
  1. Führen Sie die Umbenennung probeweise aus
    Benennen Sie „getUser“ in „fetchUserById“ in src/api/users.ts um. Verwenden Sie Serenas symbolische Umbenennung. Sehen Sie sich den Unterschied in der Vorschau an – bewerben Sie sich noch nicht.✓ Kopiert
    → Unterschiedliche Vorschau für jede betroffene Datei
  2. Überprüfen und bewerben
    Wenden Sie die Umbenennung an. Sagen Sie mir jede Datei, die Serena als mehrdeutig markiert hat.✓ Kopiert
    → Umbenennung angewendet, Mehrdeutigkeitsliste (falls vorhanden)
  3. Führen Sie die Suite aus
    Führen Sie die Tests durch und melden Sie Fehler. Konzentrieren Sie sich dabei auf alles, was auf den alten Namen verweist.✓ Kopiert
    → Tests grün oder eine genaue Fehlerliste

Ergebnis: Die Umbenennung ist im gesamten Repo sauber, einschließlich öffentlicher Reexporte, index.ts-Fässer und veralteter JSDoc-Referenzen.

Fallstricke
  • Der dynamische Zugriff (obj['getUser']) wird von der LSP-Umbenennung nicht abgefangen — Führen Sie nach der symbolischen Umbenennung einen grep-Vorgang für die alte Namenszeichenfolge durch. Serena bringt alles zum Vorschein, was sie nicht statisch auflösen konnte
Kombinieren mit: filesystem · git

Ersetzen Sie einen Funktionskörper, ohne den umgebenden Code zu stören

👤 Ingenieure führen chirurgische Bearbeitungen in großen Dateien durch ⏱ ~10 min intermediate

Wann einsetzen: Sie möchten, dass die Implementierung von „calculatePrice“ neu geschrieben wird, aber ihre Signatur und JSDoc genau beibehalten werden. Die Regeneration ganzer Dateien ist das falsche Werkzeug.

Ablauf
  1. Zielen Sie auf das Symbol
    Suchen Sie in src/billing/pricing.ts nach „calculatePrice“. Zeigen Sie mir nur den aktuellen Text (nicht die Signatur oder das Dokument).✓ Kopiert
    → Nur-Text-Snippet
  2. Ersetzen Sie den Körper
    Ersetzen Sie nur den Textkörper durch eine Version, die den Steuerbefreiungsfall behandelt. Halten Sie die Signatur und das JSDoc intakt.✓ Kopiert
    → Es wird Serenas Werkzeug zum Ersetzen des Gehäuses verwendet. Signatur im Diff unverändert

Ergebnis: Minimaler, überprüfbarer Unterschied – keine zufälligen Leerzeichen/Formatierungsänderungen.

Fallstricke
  • Der Agent greift auf das vollständige Schreiben der Datei zurück — Weisen Sie explizit an, „Serenas symbolische Ersetzung zu verwenden, nicht write_file“.
Kombinieren mit: filesystem

Einstieg in eine unbekannte Codebasis in einer Stunde

👤 Neue Mitarbeiter, Auftragnehmer oder OSS-Mitarbeiter ⏱ ~60 min beginner

Wann einsetzen: Sie haben gerade ein Repo mit 500 Dateien geklont und benötigen eine mentale Karte, bevor Sie einen Beitrag leisten können.

Ablauf
  1. Holen Sie sich die Architektur
    Öffnen Sie dieses Repo mit Serena. Erstellen Sie eine Karte: Module der obersten Ebene, ihre öffentlichen Exporte und den Haupteinstiegspunkt. Speichern Sie es im Serena-Speicher als „arch_overview“.✓ Kopiert
    → Strukturierter Überblick; Erinnerungsnotiz erstellt
  2. Folgen Sie einer Benutzeranfrage
    Verfolgen Sie, was passiert, wenn ein Benutzer auf POST/Bestellungen klickt. Gehen Sie mit mir jede Datei der Reihe nach durch.✓ Kopiert
    → Anfrage → Handler → Service → Repo-Trail, mit Serenas Referenzsuche
  3. Beachten Sie die Fallstricke
    Speichern Sie alle Muster, die ungewöhnlich aussehen (benutzerdefinierte Dekoratoren, magische Konstanten), als „Fallstricke“.✓ Kopiert
    → Erinnerungsnotiz für die nächste Sitzung gespeichert

Ergebnis: In der nächsten Sitzung kennt Claude die Karte bereits – es fallen keine Kosten für die erneute Einbindung an.

Kombinieren mit: filesystem · github

Kombinationen

Mit anderen MCPs für 10-fache Wirkung

serena + filesystem

Serena für symbolbewusste Navigation + Dateisystem für beliebige I/O

Verwenden Sie Serena, um das Authentifizierungsmodul zu finden, und dann das Dateisystem, um eine neue README-Datei für diesen Ordner zu schreiben.✓ Kopiert
serena + github

Lokales Refactoring mit Serena; Pushen Sie einen Zweig und öffnen Sie eine PR über GitHub MCP

Benennen Sie ApiClient → HttpClient mit Serena um und öffnen Sie dann eine PR mit dem Titel „Refactor(API): ApiClient umbenennen“.✓ Kopiert
serena + git

Überprüfen Sie den Diff, den Serena erstellt hat, bevor Sie einen Commit durchführen

Zeig mir Git Diff nach Serenas Umbenennung. Wenn Sie verdächtig sind, markieren Sie es, bevor wir etwas unternehmen.✓ Kopiert
serena + context7

Bibliotheksfähiger Refactor – Serena für lokale Verschiebungen, Context7 für passende V-Next-APIs

Migrieren Sie diese Datei zu Next.js 15-Mustern. Verwenden Sie Context7 für die neuen APIs und Serena, um Änderungen symbolisch anzuwenden.✓ Kopiert

Werkzeuge

Was dieses MCP bereitstellt

WerkzeugEingabenWann aufrufenKosten
find_symbol name: str, scope?: str Suchen Sie eine Klasse/Funktion/Variable anhand des Namens mit LSP-Präzision free (local)
find_references symbol: ref Alle Aufrufer/Verwendungen eines Symbols; wesentlich besser als grep free
get_symbols_overview path: str Datei-/Modulübersicht, bevor Sie entscheiden, was Sie lesen möchten free
rename_symbol symbol: ref, new_name: str, dryRun?: bool Sicheres Umbenennen im gesamten Projekt free
replace_symbol_body symbol: ref, new_body: str Tauschen Sie einen Funktions-/Methodenkörper aus, ohne die Signatur zu berühren free
insert_before_symbol / insert_after_symbol symbol: ref, code: str Fügen Sie Dekoratoren, Importe oder Geschwisterdeklarationen hinzu, die an einem AST-Knoten verankert sind free
move_file / move_dir src: str, dst: str Verschieben Sie den Code und lassen Sie den LSP jeden Importer reparieren free
write_memory / read_memory key: str, value?: str Behalten Sie den Projektkontext (Architekturkarte, Fallstricke) sitzungsübergreifend bei free
search_pattern regex: str, path: str Fallback, wenn das Ziel kein benanntes Symbol ist (String-Literale, Muster) free

Kosten & Limits

Was der Betrieb kostet

API-Kontingent
Keine – lokaler LSP
Tokens pro Aufruf
Klein – Serena gibt symbolbezogene Snippets zurück, keine ganzen Dateien
Kosten in €
Frei
Tipp
Bevorzugen Sie get_symbols_overview + find_symbol gegenüber read_text_file bei großen Dateien – Sie geben 10x weniger Token aus und erhalten ein besseres Signal

Sicherheit

Rechte, Secrets, Reichweite

Credential-Speicherung: Keine – alles läuft lokal
Datenabfluss: Standardmäßig keine. Serena kann Shell-Befehle ausführen (deaktiviert); Überprüfen Sie die Werkzeugliste, bevor Sie in Claude Schreibzugriff gewähren.
Niemals gewähren: Access to directories outside your project

Fehlerbehebung

Häufige Fehler und Lösungen

LSP konnte nicht gestartet werden/keine Symbole gefunden

Überprüfen Sie, ob der Sprachserver für die Sprache des Projekts installiert ist (z. B. pyright für Python, Typescript-Language-Server für TS). In den Serena-Protokollen wird aufgeführt, welcher LSP verwendet wird.

Prüfen: Run Serena in verbose mode; confirm LSP handshake succeeded
Beim Umbenennen wurden einige Dateien übersprungen

Dies bedeutet normalerweise, dass sich die Dateien nicht im Arbeitsbereich des LSP befinden. Bestätigen Sie, dass es sich beim Projektstamm um den Monorepo-Stamm und nicht um ein Unterpaket handelt.

Prüfen: Ask Serena to list its workspace roots
Der Agent greift auf das Schreiben von Rohdateien statt auf Serena-Tools zurück

Fügen Sie eine explizite Regel in CLAUDE.md ein: „Verwenden Sie für symbolische Operationen immer die Tools von Serena; write_file niemals auf vorhandene .py/.ts-Dateien'

Prüfen: Re-run the task; inspect tool_use calls in the trace
uvx: Befehl nicht gefunden

Installieren Sie zuerst uv: curl -LsSf https://astral.sh/uv/install.sh | sch; Öffnen Sie dann Ihr Terminal erneut

Prüfen: uvx --version

Alternativen

Serena vs. andere

AlternativeWann stattdessenKompromiss
JetBrains MCPSie leben bereits in einer JetBrains-IDE und möchten, dass der Agent seine Refactoring-Tools steuertErfordert einen offenen IDE-Prozess; schwerer
filesystemSie benötigen kein Symbolbewusstsein – lesen/schreiben Sie einfach DateienKeine semantische Suche oder sichere Umbenennung
mcp-language-serverSie möchten einen kleineren Nur-LSP-Wrapper, nicht Serenas Speicher- und Shell-SchichtWeniger High-Level-Tools; Sie stellen den Workflow selbst zusammen

Mehr

Ressourcen

📖 Offizielle README auf GitHub lesen

🐙 Offene Issues ansehen

🔍 Alle 400+ MCP-Server und Skills durchsuchen