/ Directorio / Playground / Serena
● Comunidad oraios ⚡ Instantáneo

Serena

por oraios · oraios/serena

Serena integra la búsqueda semántica y las ediciones simbólicas impulsadas por el servidor de idiomas en su agente, por lo que cambiar nombre/refactorizar/buscar referencias realmente funciona en bases de código enormes.

Serena es el 'IDE para su agente'. En lugar de buscar archivos y rezar, utiliza backends LSP reales para más de 40 idiomas para responder preguntas a nivel de símbolo: "¿dónde se llama esta función?", "¿cuál es la jerarquía de tipos?", "cambiar el nombre de este símbolo en todos los lugares donde se usa". Luego incluye herramientas de edición simbólica para que el agente pueda reemplazar el cuerpo de una función, eliminar un símbolo de forma segura o insertar código relativo a un nodo AST. El sistema de memoria persiste en el contexto a lo largo de las sesiones: Claude continúa donde lo dejó la semana pasada.

Por qué usarlo

Características clave

Demo en vivo

Cómo se ve en la práctica

serena.replay ▶ listo
0/0

Instalar

Elige tu cliente

~/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"
      ]
    }
  }
}

Abre Claude Desktop → Settings → Developer → Edit Config. Reinicia después de guardar.

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

Cursor usa el mismo esquema mcpServers que Claude Desktop. La configuración del proyecto prevalece sobre la global.

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

Haz clic en el icono MCP Servers de la barra lateral de Cline y luego en "Edit Configuration".

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

Mismo formato que Claude Desktop. Reinicia Windsurf para aplicar.

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

Continue usa un array de objetos de servidor en lugar de un mapa.

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

Añádelo a context_servers. Zed recarga en caliente al guardar.

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

Un solo comando. Verifica con claude mcp list. Quita con claude mcp remove.

Casos de uso

Usos del mundo real: Serena

Encuentre a cada persona que llama a una función en una base de código de 1 millón de líneas

👤 Ingenieros que trabajan en repositorios grandes y maduros ⏱ ~10 min intermediate

Cuándo usarlo: Necesita una lista completa y correcta de personas que llaman: grep da falsos positivos (comentarios, cadenas, funciones con nombres similares en otros ámbitos) y omite sobrecargas.

Requisitos previos
  • ultravioleta instalado — rizo -LsSf https://astral.sh/uv/install.sh | sh
  • Proyecto abierto en un idioma compatible con el LSP de Serena — La mayoría de los lenguajes convencionales funcionan de manera inmediata
Flujo
  1. abrir el proyecto
    Abra /abs/path/to/repo con Serena. Confirme el índice LSP creado.✓ Copiado
    → Serena informa la raíz del proyecto y el LSP que se cargó
  2. Buscar referencias de símbolos
    Encuentre todos los sitios de llamadas de PaymentService.chargeCustomer. Incluya sobrecargas y anulaciones, excluya pruebas.✓ Copiado
    → Archivo exacto: lista de líneas, sin falsos positivos de comentarios/cadenas
  3. Resumir el impacto
    Agrupe los sitios de llamadas por módulo. Para cada grupo, dígame qué hace la persona que llama con el valor de retorno.✓ Copiado
    → Narrativa agrupada por módulos, no una lista plana

Resultado: Usted sabe exactamente qué afectaría un cambio, antes de tocarlo.

Errores comunes
  • Algunos repositorios políglotas necesitan múltiples LSP — Inicie Serena por subproyecto si los idiomas no comparten un servidor
Combinar con: filesystem · github

Cambiar el nombre de un símbolo de API pública sin romper los dependientes

👤 Mantenedores de biblioteca/marco ⏱ ~15 min intermediate

Cuándo usarlo: Está cambiando el nombre de una función o clase que podría usarse fuera del archivo; necesita un cambio de nombre preciso según LSP, no un reemplazo de texto.

Requisitos previos
  • Limpiar el árbol de git — git status clean para que puedas revisar la diferencia antes de comprometerte
Flujo
  1. Ejecutar en seco el cambio de nombre
    Cambie el nombre de getUser a fetchUserById en src/api/users.ts. Utilice el cambio de nombre simbólico de Serena. Obtenga una vista previa de la diferencia; no la aplique todavía.✓ Copiado
    → Vista previa de diferencias en cada archivo afectado
  2. Revisar y aplicar
    Aplicar el cambio de nombre. Dime cualquier archivo que Serena haya marcado como ambiguo.✓ Copiado
    → Cambio de nombre aplicado, lista de ambigüedades (si corresponde)
  3. ejecutar la suite
    Ejecute las pruebas e informe las fallas, centrándose en todo lo que haga referencia al nombre anterior.✓ Copiado
    → Pruebas verdes o una lista de fallos precisa

Resultado: El cambio de nombre es claro en todo el repositorio, incluidas las reexportaciones públicas, los barriles index.ts y las referencias JSDoc obsoletas.

Errores comunes
  • El cambio de nombre de LSP no detecta el acceso dinámico (obj['getUser']) — Después del cambio de nombre simbólico, haga un grep para la cadena de nombre anterior; Serena muestra cualquier cosa que no haya podido resolver estáticamente.
Combinar con: filesystem · git

Reemplazar el cuerpo de una función sin alterar el código circundante

👤 Ingenieros realizando ediciones quirúrgicas dentro de archivos grandes ⏱ ~10 min intermediate

Cuándo usarlo: Quiere reescribir la implementación de calculatePrice pero su firma y JSDoc se mantienen exactamente. La regeneración de archivos completos es la herramienta equivocada.

Flujo
  1. Apunta al símbolo
    En src/billing/pricing.ts, busque "calcularPrecio". Muéstrame solo el cuerpo actual (no la firma ni el documento).✓ Copiado
    → Fragmento solo del cuerpo
  2. Reemplazar el cuerpo
    Reemplace solo el cuerpo con una versión que maneje el caso exento de impuestos. Mantenga la firma y el JSDoc intactos.✓ Copiado
    → Se utiliza la herramienta de reemplazo de carrocería de Serena; firma sin cambios en el diff

Resultado: Diferencia mínima y revisable: sin espacios en blanco ni cambios de formato incidentales.

Errores comunes
  • La agente vuelve a escribir en archivo completo — Instruir explícitamente 'use el reemplazo simbólico de Serena, no write_file'
Combinar con: filesystem

Incorporación a una base de código desconocida en una hora

👤 Nuevas contrataciones, contratistas o contribuyentes de OSS ⏱ ~60 min beginner

Cuándo usarlo: Acabas de clonar un repositorio de 500 archivos y necesitas un mapa mental antes de poder contribuir.

Flujo
  1. Obtener la arquitectura
    Abra este repositorio con Serena. Cree un mapa: módulos de nivel superior, sus exportaciones públicas y el punto de entrada principal. Guárdelo en la memoria de Serena como 'arch_overview'.✓ Copiado
    → Descripción general estructurada; nota de memoria creada
  2. Seguir una solicitud de usuario
    Rastree lo que sucede cuando un usuario presiona POST /pedidos. Guíame a través de cada archivo en orden.✓ Copiado
    → Solicitud → controlador → servicio → ruta de repositorio, con las búsquedas de referencia de Serena
  3. Tenga en cuenta las trampas
    Guarde cualquier patrón que parezca inusual (decoradores personalizados, constantes mágicas) en la memoria como "errores".✓ Copiado
    → Nota de memoria guardada para la próxima sesión

Resultado: En la próxima sesión, Claude ya conoce el mapa, sin coste de reincorporación.

Combinar con: filesystem · github

Combinaciones

Combínalo con otros MCPs para multiplicar por 10

serena + filesystem

Serena para navegación con reconocimiento de símbolos + sistema de archivos para E/S arbitrarias

Use Serena para encontrar el módulo de autenticación, luego el sistema de archivos para escribir un nuevo archivo README para esa carpeta.✓ Copiado
serena + github

Refactorizar localmente con Serena; empujar una rama y abrir un PR a través de GitHub MCP

Cambie el nombre de ApiClient → HttpClient con Serena, luego abra un PR titulado 'refactor(api): cambie el nombre de ApiClient'.✓ Copiado
serena + git

Revise la diferencia que Serena produjo antes de comprometerse.

Muéstrame git diff después del cambio de nombre de Serena. Cualquier cosa sospechosa, márquelo antes de que cometamos.✓ Copiado
serena + context7

Refactorización basada en bibliotecas: Serena para movimientos locales, Context7 para hacer coincidir las API v-next

Migre este archivo a los patrones Next.js 15. Utilice Context7 para las nuevas API y Serena para aplicar los cambios simbólicamente.✓ Copiado

Herramientas

Lo que expone este MCP

HerramientaEntradasCuándo llamarCoste
find_symbol name: str, scope?: str Localice una clase/función/var por nombre con precisión LSP free (local)
find_references symbol: ref Todas las personas que llaman/usos de un símbolo; mucho mejor que grep free
get_symbols_overview path: str Esquema del archivo/módulo antes de decidir qué leer free
rename_symbol symbol: ref, new_name: str, dryRun?: bool Cambio de nombre seguro en todo el proyecto free
replace_symbol_body symbol: ref, new_body: str Intercambiar un cuerpo de función/método en su lugar sin tocar la firma free
insert_before_symbol / insert_after_symbol symbol: ref, code: str Agregar decoradores, importaciones o declaraciones de hermanos ancladas a un nodo AST free
move_file / move_dir src: str, dst: str Reubique el código y deje que el LSP arregle a cada importador free
write_memory / read_memory key: str, value?: str Persistir en el contexto del proyecto (mapa arquitectónico, trampas) en todas las sesiones free
search_pattern regex: str, path: str Respaldo cuando el objetivo no es un símbolo con nombre (literales de cadena, patrones) free

Coste y límites

Lo que cuesta ejecutarlo

Cuota de API
Ninguna - LSP local
Tokens por llamada
Pequeña - Serena devuelve fragmentos con ámbito de símbolos, no archivos completos
Monetario
Gratis
Consejo
Prefiere get_symbols_overview + find_symbol sobre read_text_file en archivos grandes: gastas 10 veces menos tokens y obtienes una mejor señal

Seguridad

Permisos, secretos, alcance

Almacenamiento de credenciales: Ninguno: todo se ejecuta localmente
Salida de datos: Ninguno por defecto. Serena puede ejecutar comandos de shell (deshabilitado); revise la lista de herramientas antes de otorgar acceso de escritura en Claude.
No conceder nunca: Access to directories outside your project

Resolución de problemas

Errores comunes y soluciones

LSP no pudo iniciarse/no se encontraron símbolos

Verifique que el servidor de idiomas esté instalado para el idioma del proyecto (por ejemplo, pyright para Python, typescript-language-server para TS). Los registros de Serena enumeran qué LSP está utilizando.

Verificar: Run Serena in verbose mode; confirm LSP handshake succeeded
Cambiar el nombre omitió algunos archivos

Generalmente significa que los archivos no están en el espacio de trabajo del LSP. Confirme que la raíz del proyecto sea la raíz de monorepo, no un subpaquete.

Verificar: Ask Serena to list its workspace roots
La agente vuelve a las escrituras de archivos en bruto en lugar de las herramientas de Serena

Ponga una regla explícita en CLAUDE.md: 'Para operaciones simbólicas, utilice siempre las herramientas de Serena; nunca escriba_archivo en archivos .py/.ts existentes

Verificar: Re-run the task; inspect tool_use calls in the trace
uvx: comando no encontrado

Instale uv primero: curl -LsSf https://astral.sh/uv/install.sh | sh; luego vuelve a abrir tu terminal

Verificar: uvx --version

Alternativas

Serena vs otros

AlternativaCuándo usarlaContrapartida
JetBrains MCPYa vive en un IDE de JetBrains y desea que el agente impulse sus herramientas de refactorización.Requiere un proceso IDE abierto; más pesado
filesystemNo necesita conocimiento de símbolos: solo lea/escriba archivosSin búsqueda semántica ni cambio de nombre seguro
mcp-language-serverQuieres un contenedor solo LSP más pequeño, no la capa de memoria + shell de SerenaMenos herramientas de alto nivel; usted mismo compone el flujo de trabajo

Más

Recursos

📖 Lee el README oficial en GitHub

🐙 Ver issues abiertas

🔍 Ver todos los 400+ servidores MCP y Skills