/ Annuaire / Playground / Serena
● Communauté oraios ⚡ Instantané

Serena

par oraios · oraios/serena

Serena intègre la recherche sémantique et les modifications symboliques alimentées par le serveur de langage sur votre agent — ainsi renommer/refactoriser/trouver des références fonctionne réellement sur d'énormes bases de code.

Serena est « l'IDE pour votre agent ». Au lieu de récupérer des fichiers et de prier, il utilise de véritables backends LSP pour plus de 40 langues pour répondre aux questions au niveau des symboles : « où s'appelle cette fonction ? », « quelle est la hiérarchie des types ? », « renommer ce symbole partout où il est utilisé ». Il est ensuite livré avec des outils d'édition symbolique permettant à l'agent de remplacer le corps d'une fonction, de supprimer un symbole en toute sécurité ou d'insérer du code relatif à un nœud AST. Le système de mémoire conserve le contexte au fil des sessions – Claude reprend là où il s'était arrêté la semaine dernière.

Pourquoi l'utiliser

Fonctionnalités clés

Démo en direct

Aperçu en pratique

serena.replay ▶ prêt
0/0

Installer

Choisissez votre 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"
      ]
    }
  }
}

Ouvrez Claude Desktop → Settings → Developer → Edit Config. Redémarrez après avoir enregistré.

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

Cursor utilise le même schéma mcpServers que Claude Desktop. La config projet l'emporte sur la globale.

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

Cliquez sur l'icône MCP Servers dans la barre latérale Cline, puis "Edit Configuration".

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

Même format que Claude Desktop. Redémarrez Windsurf pour appliquer.

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

Continue utilise un tableau d'objets serveur plutôt qu'une map.

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

Ajoutez dans context_servers. Zed recharge à chaud à la sauvegarde.

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

Une seule ligne. Vérifiez avec claude mcp list. Supprimez avec claude mcp remove.

Cas d'usage

Usages concrets : Serena

Trouvez chaque appelant d'une fonction sur une base de code de 1 million de lignes

👤 Ingénieurs travaillant dans des pensions matures et importantes ⏱ ~10 min intermediate

Quand l'utiliser : Vous avez besoin d'une liste complète et correcte des appelants - grep donne des faux positifs (commentaires, chaînes, fonctions portant le même nom dans d'autres étendues) et manque les surcharges.

Prérequis
  • UV installé — curl -LsSf https://astral.sh/uv/install.sh | merde
  • Projet ouvert dans une langue prise en charge par le LSP de Serena — La plupart des langages traditionnels fonctionnent immédiatement
Déroulement
  1. Ouvrir le projet
    Ouvrez /abs/path/to/repo avec Serena. Confirmez l'index LSP construit.✓ Copié
    → Serena signale la racine du projet et le LSP chargé
  2. Rechercher des références de symboles
    Trouvez tous les sites d'appel de « PaymentService.chargeCustomer ». Incluez les surcharges et les remplacements, excluez les tests.✓ Copié
    → Fichier exact : liste de lignes, pas de faux positifs provenant des commentaires/chaînes
  3. Résumer l’impact
    Regroupez les sites d'appel par module. Pour chaque groupe, dites-moi ce que l'appelant fait avec la valeur de retour.✓ Copié
    → Récit regroupé en modules, pas une liste plate

Résultat : Vous savez exactement ce qu’un changement toucherait – avant d’y toucher.

Pièges
  • Certains dépôts polyglottes nécessitent plusieurs LSP — Démarrez Serena par sous-projet si les langues ne partagent pas de serveur
Combiner avec : filesystem · github

Renommer un symbole d'API publique sans rompre les dépendances

👤 Mainteneurs de bibliothèque/framework ⏱ ~15 min intermediate

Quand l'utiliser : Vous renommez une fonction ou une classe qui pourrait être utilisée en dehors du fichier. Vous avez besoin d'un renommage précis selon le LSP, et non d'un remplacement de texte.

Prérequis
  • Nettoyer l'arbre git — git status clean afin que vous puissiez revoir la différence avant de vous engager
Déroulement
  1. Exécutez le changement de nom à sec
    Renommez « getUser » en « fetchUserById » dans src/api/users.ts. Utilisez le changement de nom symbolique de Serena. Prévisualisez la différence – ne postulez pas encore.✓ Copié
    → Aperçu différent sur chaque fichier affecté
  2. Réviser et postuler
    Appliquez le changement de nom. Dites-moi tout fichier que Serena a signalé comme ambigu.✓ Copié
    → Renommer appliqué, liste d'ambiguïté (le cas échéant)
  3. Exécutez la suite
    Exécutez les tests et signalez les échecs, en vous concentrant sur tout ce qui fait référence à l'ancien nom.✓ Copié
    → Tests verts, ou une liste d'échecs précise

Résultat : Le renommage est propre dans tout le dépôt, y compris les réexportations publiques, les barils index.ts et les références JSDoc obsolètes.

Pièges
  • L'accès dynamique (obj['getUser']) n'est pas intercepté par le renommage LSP — Après le changement de nom symbolique, effectuez un grep pour l'ancienne chaîne de nom ; Serena fait surface sur tout ce qu'elle ne pouvait pas résoudre statiquement
Combiner avec : filesystem · git

Remplacer un corps de fonction sans perturber le code environnant

👤 Ingénieurs effectuant des modifications chirurgicales dans des fichiers volumineux ⏱ ~10 min intermediate

Quand l'utiliser : Vous souhaitez que l'implémentation de calculatePrice soit réécrite mais que sa signature et JSDoc soient conservés exactement. La régénération de fichiers entiers n'est pas le bon outil.

Déroulement
  1. Cibler le symbole
    Dans src/billing/pricing.ts, recherchez « calculatePrice ». Montrez-moi uniquement le corps actuel (pas la signature ou le document).✓ Copié
    → Extrait de corps uniquement
  2. Remplacer le corps
    Remplacez uniquement le corps par une version qui gère le cas d'exonération fiscale. Gardez la signature et le JSDoc intacts.✓ Copié
    → L'outil de remplacement du corps de Serena est utilisé ; signature inchangée dans le différentiel

Résultat : Diff minimale et révisable – pas de désabonnement accidentel d’espaces/de formatage.

Pièges
  • L'agent revient à l'écriture de fichiers complets — Instruire explicitement « d'utiliser le remplacement symbolique de Serena, pas write_file »
Combiner avec : filesystem

Intégration à une base de code inconnue en une heure

👤 Nouvelles recrues, sous-traitants ou contributeurs OSS ⏱ ~60 min beginner

Quand l'utiliser : Vous venez de cloner un dépôt de 500 fichiers et vous avez besoin d'une carte mentale avant de pouvoir contribuer.

Déroulement
  1. Obtenez l'architecture
    Ouvrez ce dépôt avec Serena. Créez une carte : les modules de niveau supérieur, leurs exportations publiques et le point d'entrée principal. Enregistrez dans la mémoire de Serena sous le nom « arch_overview ».✓ Copié
    → Aperçu structuré ; note mémoire créée
  2. Suivre une demande d'utilisateur
    Suivez ce qui se passe lorsqu'un utilisateur clique sur POST /orders. Expliquez-moi chaque dossier dans l'ordre.✓ Copié
    → Requête → gestionnaire → service → piste de dépôt, avec les recherches de références de Serena
  3. Notez les pièges
    Enregistrez tous les motifs qui semblent inhabituels (décorateurs personnalisés, constantes magiques) en mémoire en tant que « pièges ».✓ Copié
    → Note mémoire enregistrée pour la prochaine session

Résultat : Lors de la prochaine session, Claude connaît déjà la carte — pas de frais de réintégration.

Combiner avec : filesystem · github

Combinaisons

Associez-le à d'autres MCPs pour un effet X10

serena + filesystem

Serena pour une navigation sensible aux symboles + système de fichiers pour les E/S arbitraires

Utilisez Serena pour trouver le module d'authentification, puis le système de fichiers pour écrire un nouveau README pour ce dossier.✓ Copié
serena + github

Refactoriser localement avec Serena ; pousser une branche et ouvrir un PR via GitHub MCP

Renommez ApiClient → HttpClient avec Serena, puis ouvrez un PR intitulé « refactor(api) : rename ApiClient ».✓ Copié
serena + git

Examinez les différences produites par Serena avant de vous engager

Montre-moi git diff après le changement de nom de Serena. Tout ce qui est suspect, signalez-le avant de nous engager.✓ Copié
serena + context7

Refactor compatible avec les bibliothèques – Serena pour les déplacements locaux, Context7 pour faire correspondre les API v-next

Migrez ce fichier vers les modèles Next.js 15. Utilisez Context7 pour les nouvelles API et Serena pour appliquer les modifications de manière symbolique.✓ Copié

Outils

Ce que ce MCP expose

OutilEntréesQuand appelerCoût
find_symbol name: str, scope?: str Localisez une classe/fonction/var par nom avec une précision LSP free (local)
find_references symbol: ref Tous les appelants/usages d'un symbole ; bien mieux que grep free
get_symbols_overview path: str Aperçu du fichier/module avant de décider quoi lire free
rename_symbol symbol: ref, new_name: str, dryRun?: bool Renommer en toute sécurité sur l'ensemble du projet free
replace_symbol_body symbol: ref, new_body: str Échanger un corps de fonction/méthode en place sans toucher à la signature free
insert_before_symbol / insert_after_symbol symbol: ref, code: str Ajouter des décorateurs, des importations ou des déclarations frères et sœurs ancrées à un nœud AST free
move_file / move_dir src: str, dst: str Déplacez le code et laissez le LSP réparer chaque importateur free
write_memory / read_memory key: str, value?: str Conserver le contexte du projet (carte d'architecture, pièges) à travers les sessions free
search_pattern regex: str, path: str Solution de repli lorsque la cible n'est pas un symbole nommé (chaînes littérales, modèles) free

Coût et limites

Coût d'exécution

Quota d'API
Aucun – LSP local
Tokens par appel
Petit — Serena renvoie des extraits de code, pas des fichiers entiers
Monétaire
Gratuite
Astuce
Préférez get_symbols_overview + find_symbol à read_text_file sur les fichiers volumineux : vous dépensez 10 fois moins de jetons et obtenez un meilleur signal

Sécurité

Permissions, secrets, portée

Stockage des identifiants : Aucun — tout fonctionne localement
Sortie de données : Aucun par défaut. Serena peut exécuter des commandes shell (désactivable) ; examinez la liste des outils avant d’accorder l’accès en écriture dans Claude.
Ne jamais accorder : Access to directories outside your project

Dépannage

Erreurs courantes et correctifs

LSP n'a pas pu démarrer/aucun symbole trouvé

Vérifiez que le serveur de langue est installé pour la langue du projet (par exemple, pyright pour Python, typescript-langage-server pour TS). Les journaux Serena répertorient le LSP qu'il utilise.

Vérifier : Run Serena in verbose mode; confirm LSP handshake succeeded
Renommer a ignoré certains fichiers

Cela signifie généralement que les fichiers ne se trouvent pas dans l'espace de travail du LSP. Confirmez que la racine du projet est la racine monorepo, et non un sous-package.

Vérifier : Ask Serena to list its workspace roots
L'agent revient aux écritures de fichiers bruts au lieu des outils Serena

Mettez une règle explicite dans CLAUDE.md : 'Pour les opérations symboliques, utilisez toujours les outils de Serena ; ne jamais écrire de fichier sur les fichiers .py/.ts existants'

Vérifier : Re-run the task; inspect tool_use calls in the trace
uvx : commande introuvable

Installez d'abord uv : curl -LsSf https://astral.sh/uv/install.sh | ch; puis rouvrez votre terminal

Vérifier : uvx --version

Alternatives

Serena vs autres

AlternativeQuand l'utiliserCompromis
JetBrains MCPVous vivez déjà dans un IDE JetBrains et souhaitez que l'agent pilote ses outils de refactorisationNécessite un processus IDE ouvert ; plus lourd
filesystemVous n'avez pas besoin de connaître les symboles : il suffit de lire/écrire des fichiersPas de recherche sémantique ni de renommage sécurisé
mcp-language-serverVous voulez un wrapper LSP plus petit uniquement, pas la couche mémoire + shell de SerenaMoins d'outils de haut niveau ; vous composez vous-même le flux de travail

Plus

Ressources

📖 Lire le README officiel sur GitHub

🐙 Voir les issues ouvertes

🔍 Parcourir les 400+ serveurs MCP et Skills