Configurar Serena MCP para Codex en Ubuntu: uv, serena-agent y verificación MCP

Índice

Actualización 2026: configurar Serena como servidor MCP de Codex en Ubuntu

La versión antigua de este artículo se centraba en comandos del estilo uvx --from git... y trataba la integración con Claude Code o Gemini como el camino principal. El flujo confirmado en 2026 es distinto: instalar uv, instalar serena-agent como herramienta de uv y registrar Serena en OpenAI Codex con serena setup codex.

Primero, una corrección pequeña: si en tus notas aparece sudo apt updatete, es solo un error tipográfico. El comando correcto es sudo apt update.

Entorno confirmado

  • OS: Ubuntu
  • Usuario: mamu
  • uv: 0.11.14
  • serena-agent: 1.3.0
  • Codex: v0.130.0
  • Nombre del servidor MCP: serena
Codex iniciando el servidor MCP de Serena
Imagen de prueba 1: Codex v0.130.0 intenta iniciar el servidor MCP de Serena.
Serena registrado como servidor MCP de Codex
Imagen de prueba 2: Serena aparece registrado y verificado como servidor MCP de Codex.

1. Instalar los paquetes necesarios

sudo apt update
sudo apt install -y curl git ca-certificates build-essential

2. Instalar uv

Instala uv con el instalador oficial.

curl -LsSf https://astral.sh/uv/install.sh | sh

La ubicación normal de instalación es /home/mamu/.local/bin. En la ejecución confirmada se instalaron ahí tanto uv como uvx.

installing to /home/mamu/.local/bin
  uv
  uvx
everything's installed!

3. Añadir uv al PATH

Para usarlo en la sesión actual de la terminal, añade $HOME/.local/bin al PATH.

export PATH="$HOME/.local/bin:$PATH"

Después comprueba la versión de uv.

uv --version

El resultado confirmado fue:

uv 0.11.14 (x86_64-unknown-linux-gnu)

Para conservar el PATH en futuras sesiones, añádelo a ~/.bashrc.

grep -q '.local/bin' ~/.bashrc || echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc

Importante: en este punto Serena todavía no está instalado. Si command -v serena o serena --help fallan antes de instalar serena-agent, eso es normal.

4. Instalar Serena

Este es el paso que instala realmente Serena.

uv tool install -p 3.13 serena-agent@latest --prerelease=allow

En la ejecución confirmada se instaló serena-agent==1.3.0.

Resolved 75 packages
Installed 75 packages
+ serena-agent==1.3.0

Después de la instalación, comprueba que existe el comando serena.

command -v serena
serena --help

La ruta esperada es:

/home/mamu/.local/bin/serena

5. Registrar Serena en Codex

Para Codex, el comando básico de configuración es simple.

serena setup codex

En la ejecución confirmada, internamente se creó el siguiente registro MCP de Codex.

codex mcp add serena -- serena start-mcp-server --context=codex --project-from-cwd

Cuando funciona, Serena informa que se configuró correctamente para Codex.

Serena has been successfully set up for codex.

Si serena setup codex termina correctamente, normalmente no hace falta ejecutar codex mcp add manualmente. Si necesitas registrarlo a mano, usa el mismo comando anterior.

6. Verificar el registro MCP en Codex

Usa los comandos MCP de Codex para confirmar que el servidor está registrado y habilitado.

codex mcp list
codex mcp get serena

Un registro correcto se ve así.

Name    Command  Args                                                 Env  Cwd  Status   Auth
serena  serena   start-mcp-server --context=codex --project-from-cwd  -    -    enabled  Unsupported

La vista detallada debe mostrar enabled: true.

serena
  enabled: true
  transport: stdio
  command: serena
  args: start-mcp-server --context=codex --project-from-cwd
  cwd: -
  env: -
  remove: codex mcp remove serena

Auth: Unsupported no es un error. Es un servidor MCP local por stdio, por lo que no usa autenticación de tipo OAuth.

7. Confirmarlo desde Codex

Inicia Codex desde el directorio de un proyecto.

cd /path/to/project
codex

Si Codex muestra el siguiente mensaje al arrancar, está intentando iniciar el servidor MCP de Serena.

Starting MCP servers (1/2): serena

Dentro de Codex también puedes comprobar la conexión con:

/mcp

Nota: si también usas Claude Code

Claude Code no es el tema principal de esta actualización, pero dejo una nota breve para sus usuarios. Los pasos de instalación de Serena son los mismos hasta serena-agent.

curl -LsSf https://astral.sh/uv/install.sh | sh
export PATH="$HOME/.local/bin:$PATH"
uv tool install -p 3.13 serena-agent@latest --prerelease=allow

Después registra Serena para Claude Code con:

serena setup claude-code

Si necesitas añadirlo manualmente, usa:

claude mcp add --scope user serena -- serena start-mcp-server --context claude-code --project-from-cwd

Si quieres evitar problemas de PATH, especifica la ruta absoluta de serena.

claude mcp add --scope user serena -- "$HOME/.local/bin/serena" start-mcp-server --context claude-code --project-from-cwd

Puedes verificarlo con:

claude mcp list
claude mcp get serena
/mcp

Si ya existe una configuración antigua de Serena, elimínala y vuelve a registrarla.

claude mcp remove serena
serena setup claude-code

Qué cambió respecto al artículo antiguo

El método antiguo con uvx --from git... ya no debe ser el camino principal de este artículo. El flujo confirmado es:

  1. curl -LsSf https://astral.sh/uv/install.sh | sh para instalar uv
  2. export PATH="$HOME/.local/bin:$PATH" para exponer uv y uvx
  3. uv tool install -p 3.13 serena-agent@latest --prerelease=allow para instalar Serena
  4. serena setup codex para registrar Serena en Codex
  5. codex mcp list y codex mcp get serena para verificar la configuración

El punto esencial es no confundir la configuración del PATH con la instalación de Serena. Que uv y uvx estén disponibles no significa que exista el comando serena. Ese comando aparece solo después de instalar serena-agent.

Para entender cómo ha cambiado la situación con el paso del tiempo, dejo intencionalmente el artículo antiguo debajo.


Una vez que has configurado Serena, ¿asumes que Claude Code, Codex CLI y Gemini CLI están usando Serena? En otras palabras, los usuarios que no están conscientes de esto podrían pensar que una vez configurado, Serena está funcionando mientras usan Codex o Claude. Luego, después de que ha pasado suficiente tiempo, piensan: «Espera, ¿la IA no está usando Serena, verdad?» Este artículo presenta una solución para evitar esta situación.

La suposición de que «lo configuré una vez = debería funcionar para siempre» es bastante común, y los casos en que Serena se desconecta sin que te des cuenta ocurren frecuentemente. Esto es especialmente probable durante actualizaciones de Codex/Claude, cambios de configuración o cambio de proyectos.

Síntomas Comunes

  • La búsqueda cruzada de código y la resolución de referencias que funcionaban bien de repente se vuelven débiles/lentas
  • No se comporta según las «instrucciones iniciales» de Serena
  • Sin acceso al panel web de Serena (puerto predeterminado 24282) / Sin proceso en ejecución
  • Codex/Claude completa tareas usando solo herramientas simples integradas (no llama a MCP externos)

Serena MCP (= serena start-mcp-serverno se actualiza automáticamente cada vez que se inicia. Este es un diseño intencional. Organicemos las razones y mejores prácticas operativas a continuación 👇

🧠 ¿Por Qué No Hay Actualizaciones Automáticas?

1. Priorizando la «Estabilidad del Entorno de Desarrollo»

Serena es un backend del que IDEs y agentes como Claude Code y Codex CLI dependen directamente. Si cambia automáticamente al último commit, existe el riesgo de que la integración de prompts se rompa debido a cambios menores en la sintaxis o especificaciones de la API, por lo que adopta el enfoque de «usar explícitamente una versión fija».

🔄 Mejores Prácticas de Actualización

✅ Método 1: Actualizar Explícitamente Usando uvx

uvx te permite «volver a obtener explícitamente la última versión», lo que lo convierte en el enfoque más seguro y recomendado.

# Ejecutar desde el último commit (también actualiza)
uvx --from git+https://github.com/oraios/serena serena start-mcp-server

uvx verifica el caché cada vez y reinstala si hay diferencias. En otras palabras, realiza «verificaciones de actualización en tiempo de ejecución» pero no realiza actualizaciones automáticas (pull forzado).

✅ Método 2: Para Clon Local

Si has clonado el repositorio directamente:

cd ~/serena
git pull
uv run serena start-mcp-server

Si estás siguiendo la rama main de GitHub, esto completa la actualización.

✅ Método 3: Operación con Versión Fija

Si tu objetivo es una operación estable, fija la versión:

uvx --from git+https://github.com/oraios/serena@v0.1.14 serena start-mcp-server

Al especificar una etiqueta como @v0.1.14, puedes prevenir cambios disruptivos de las actualizaciones.

🧩 Consejos Operativos

Tipo de OperaciónMétodo de ActualizaciónNotas
Experimentación Localuvx --from git+https://github.com/...Obtención automática de la última versión (para verificación ligera)
Servidor Siempre ActivoEtiqueta fija + git pull manualPrioridad de estabilidad de versión
CI/Construcción Automáticauvx + --lockedMantener entorno reproducible como Pipfile.lock

🛠 Suplemento: Comando de Verificación de Actualización (Simple)

uvx --from git+https://github.com/oraios/serena serena version

Esto muestra la versión actual de Serena. La forma oficial es comparar manualmente mirando los releases en el repositorio de GitHub.

apt upgrade no se encarga de uv o Serena, por lo que tienden a quedar desactualizados antes de que te des cuenta (ambos se instalan «vía script o uv» = fuera de la gestión de APT).

Entonces, es más fácil configurar 2 sistemas de verificación + 1 integrado que «solo notifican» 👇 (Mientras se mantiene la política de actualizar en tu propio momento)

1) Verificar Última Versión de uv (Solo Notificación): uv-check.sh

#!/usr/bin/env bash
# Obtener la última versión de uv desde GitHub y comparar con la local (solo notificación)

set -e
REPO="astral-sh/uv"
TMP="/tmp/uv_latest.json"

have() { command -v "$1" >/dev/null 2>&1; }

if ! have uv; then
  echo "⚠️  uv no encontrado. Primero instala con el instalador oficial:"
  echo '    curl -LsSf https://astral.sh/uv/install.sh | sh'
  exit 0
fi

if ! have curl || ! have jq; then
  echo "❌ curl/jq requeridos: sudo apt update && sudo apt install -y curl jq"
  exit 1
fi

LOCAL="$(uv --version 2>/dev/null | awk '{print $2}')"
curl -sL "https://api.github.com/repos/${REPO}/releases/latest" -o "$TMP"
REMOTE="$(jq -r '.tag_name' "$TMP" | sed 's/^v//')"

echo "💻 uv local : ${LOCAL:-unknown}"
echo "🌐 uv latest: ${REMOTE:-unknown}"

if [[ -z "$REMOTE" || "$REMOTE" == "null" ]]; then
  echo "❌ Falló la consulta de última versión (verifica GitHub API o jq)"
  exit 1
fi

if [[ "$LOCAL" != "$REMOTE" ]]; then
  echo "🟡 ¡Actualización disponible!"
  echo "   Recomendado: uv self update"
  echo "   Si eso falla, reinstala:"
  echo "   curl -LsSf https://astral.sh/uv/install.sh | sh"
else
  echo "✅ uv está actualizado."
fi

Instalación

sudo apt install -y jq
mkdir -p ~/bin
nano ~/bin/uv-check.sh   # ← Pega lo anterior
chmod +x ~/bin/uv-check.sh
echo 'export PATH="$HOME/bin:$PATH"' >> ~/.bashrc && source ~/.bashrc

2) Verificar Última Versión de Serena (Solo Notificación): serena-auto.sh

(Puedes usar el que se proporcionó anteriormente tal cual. Solo recapitulando los puntos clave)

  • Compara la última etiqueta de GitHub con uvx … serena version
  • Si hay una diferencia, muestra solo el ejemplo de comando de actualización (sin actualización automática)
  • Requiere jq

Cuando quieras actualizar: uvx --from git+https://github.com/oraios/serena@vX.Y.Z serena start-mcp-server

3) Versión Integrada Que Verifica Todo Junto: check-ai-stack.sh

#!/usr/bin/env bash
# Verificar uv / Serena / Codex / Claude juntos con "solo notificación"

set -e
echo "==== uv ===="
~/bin/uv-check.sh || true
echo

echo "==== Serena ===="
~/bin/serena-auto.sh || true
echo

echo "==== Codex CLI ===="
if command -v codex >/dev/null 2>&1; then
  codex --version || true
  npm outdated -g @openai/codex || true
else
  echo "⚠️ codex no instalado (omitir)"
fi
echo

echo "==== Claude Code ===="
if command -v claude >/dev/null 2>&1; then
  claude --version || true
  npm outdated -g @anthropic-ai/claude-code || true
else
  echo "⚠️ claude no instalado (omitir)"
fi

Instalación

nano ~/bin/check-ai-stack.sh  # ← Pega lo anterior
chmod +x ~/bin/check-ai-stack.sh

Uso (Manual)

check-ai-stack.sh

Notificación por Email/Log Solo Semanal (Opcional)

crontab -e

Ejemplo:

# Ejecutar cada lunes a las 09:00 (JST) y notificación por email
0 9 * * 1 ~/bin/check-ai-stack.sh | mail -s "[AI stack] weekly check" you@example.com

※ Si el email es innecesario, puedes agregar a >> ~/.local/share/ai-stack/check.log.

Recordar «Ocasionalmente» en Inicio de Sesión SSH (One-liner Ligero)

Como es molesto cada vez, aquí hay un ejemplo que lo muestra solo una vez cada 7 días en .bashrc:

# Agregar al final de ~/.bashrc (notificación una vez cada 7 días)
if command -v date >/dev/null; then
  STAMP="$HOME/.cache/ai-check.stamp"
  mkdir -p "$(dirname "$STAMP")"
  now=$(date +%s)
  if [ -f "$STAMP" ]; then last=$(cat "$STAMP"); else last=0; fi
  # 7 días = 604800 segundos
  if [ $((now - last)) -ge 604800 ]; then
    echo "[AI stack] Verificando después de un tiempo → check-ai-stack.sh"
    ~/bin/check-ai-stack.sh | sed 's/^/    /'
    echo "$now" > "$STAMP"
  fi
fi

¿Por Qué No Aparece en apt?

  • uv: Instalado vía instalador oficial (curl) o auto-actualización (uv self update). Separado de paquetes APT.
  • SerenaCapa de aplicación ejecutada desde el repositorio de GitHub vía uvx. No está bajo gestión de APT.
  • Codex/Claude: Gestionado globalmente con npm (npm -g). También fuera de APT.

Lo que se necesita para un entorno de desarrollo donde Codex / Claude usa Serena para «manejar trabajo pesado» es esencialmente este conjunto.

Esencial (Mínimo 3 Elementos + α para Hacerlo Funcionar)

  1. uv (Fundamento para ejecutar Serena)
    • Rol: Runtime de Python + gestión de paquetes + ejecutar Serena al vuelo con uvx
    • Instalación: curl -LsSf https://astral.sh/uv/install.sh | sh
  2. Serena MCP (Servidor MCP)
    • Rol: Maneja análisis, búsqueda y edición de repositorios enormes
    • Inicio: uvx --from git+https://github.com/oraios/serena serena start-mcp-server
  3. Cliente MCP
    • Cualquiera (o ambos)
      • Codex CLI (npm i -g @openai/codex)
      • Claude Code (npm i -g @anthropic-ai/claude-code etc.)

✅ Conclusión: «uv + Serena + (Codex o Claude)» es el núcleo. Como pretendía, Serena maneja tareas de análisis cruzado pesadas y es llamado vía MCP desde Codex/Claude. Así que uv está involucrado (esencial para ejecutar Serena).

Prácticamente «Casi Esencial» (La Experiencia de Serena Es Significativamente Diferente)

ripgrep / fd-find / universal-ctags (Búsqueda rápida e indexación de símbolos)

sudo apt update && sudo apt install -y ripgrep fd-find universal-ctags
echo 'alias fd=fdfind' >> ~/.bashrc && source ~/.bashrc
  • Git (por supuesto): sudo apt install -y git
  • Servidor de Lenguaje (LSP): Según el lenguaje del proyecto
    • Python: pipx/uvx pyright etc.
    • TS/JS: npm i -g typescript-language-server typescript
    • Go: sudo apt install -y golang → go install golang.org/x/tools/gopls@latest
    • Rust: rustup → rust-analyzer
    • Java: jdtls etc. ※ Sin LSP, la precisión y velocidad de «salto a definición/resolución de referencias» disminuyen.

Útil Tener (Dependiendo de la Escala y Caso de Uso)

  • jq/curl (para scripts de verificación): sudo apt install -y jq curl
  • build-essential pkg-config (para construir dependencias que requieren extensiones nativas)
  • Docker (cuando quieres aislar de forma segura / para CI)
  • watchman (para monitoreo de archivos a muy gran escala)

«Comando Completo» para Configuración Más Rápida

# 0) Base
sudo apt update && sudo apt install -y git ripgrep fd-find universal-ctags jq curl
echo 'alias fd=fdfind' >> ~/.bashrc && source ~/.bashrc

# 1) uv
curl -LsSf https://astral.sh/uv/install.sh | sh

# 2) Serena (ejecutar bajo demanda, no se necesita instalación fija)
uvx --from git+https://github.com/oraios/serena serena start-mcp-server \
  --context ide-assistant --project "$PWD" &

# 3) Cliente (cualquiera / ambos)
npm i -g @openai/codex
npm i -g @anthropic-ai/claude-code

Consejos Operativos (Prevenir Problemas de Desconexión)

  • Orden de inicio fijo: Serena → (Codex/Claude). Un wrapper (el dev-ide.sh anterior) que no inicia el IDE si Serena no está ejecutándose funciona bien.
  • Fijación de versión: Solo actualiza explícitamente cuando quieras (Serena con @vX.Y.Z, npm con especificación de versión).
  • Verificación «solo notificación» semanal: Cron uv-check.sh + serena-auto.sh + check-ai-stack.sh.

Procedimiento de Instalación en Windows (Básico)

1) Instalando uv

Para Windows, según la documentación oficial, hay los siguientes métodos: Astral Docs+2Astral Docs+2

Abre PowerShell en modo administrador:

powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"

O puedes instalar desde un gestor de paquetes de Windows (ej., WinGet):

winget install --id=astral-sh.uv -e

Después de la instalación, verifica con uv --version. Si PATH no está configurado, obtendrás un error tipo «uv: command not found», por lo que necesitas verificar las variables de entorno.

2) Configuración de Inicio de Serena MCP

En Windows, el flujo básico es el mismo: «iniciar Serena usando uv con start-mcp-server» → registrarlo como un servidor MCP en el cliente (Claude Desktop / Claude Code, etc.). Por ejemplo:

  • uvx --from git+https://github.com/oraios/serena serena start-mcp-server --context ide-assistant --project <ruta del proyecto> etc. Para rutas de Windows, ten cuidado de escapar \ como \\, o usa /.
  • Registra el comando de Serena como un servidor MCP en el archivo de configuración del cliente (ej., %APPDATA%\Claude\claude_desktop_config.json de Claude Desktop). Ten cuidado con el escape de rutas específico de Windows.

⚠️ «Trampas» Específicas de Windows y Notas

  • Problemas de PATH: Errores como comando uv o uvx no encontrado, o archivo no encontrado, se reportan relativamente comúnmente en Windows.
  • Permisos/Política de Ejecución: Al ejecutar scripts en PowerShell, la configuración de ExecutionPolicy puede ser una restricción. Necesitas especificar ByPass como sugiere el instalador.
  • Ruta de proyecto/separador de directorio: Windows usa \, pero en archivos de configuración es más seguro usar \\ o /. Por ejemplo, "your\\project\\folder\\path" en configuración JSON.
  • Servidor de lenguaje / Node.js / dependencias npm: También hay problemas donde el comando npm no se encuentra y falla al usar TypeScript Language Server etc. en Windows. → Necesitas verificar que Node.js + npm estén correctamente instalados/en PATH.
  • Operación de script de actualización/verificación: Los uv-check.sh / serena-auto.sh proporcionados para Ubuntu asumen un entorno Bash. En Windows, necesitas reescribirlos como versiones de script de PowerShell.

🔧 Propuesta de Script de Verificación/Notificación para Windows

Como usar los scripts de Ubuntu tal cual es difícil, es mejor preparar scripts de PowerShell para Windows. Por ejemplo:

  • uv-check.ps1
  • serena-auto.ps1

Ejemplo simple (uv-check.ps1):

# uv-check.ps1
$remoteJson = Invoke-WebRequest -Uri "https://api.github.com/repos/astral-sh/uv/releases/latest" | ConvertFrom-Json
$remote = $remoteJson.tag_name.TrimStart("v")
$local = (& uv --version).Split()[1]

Write-Host "uv local : $local"
Write-Host "uv latest: $remote"

if ($local -ne $remote) {
  Write-Host "⚠️ ¡Actualización disponible! Por favor ejecuta uv self update"
} else {
  Write-Host "✅ uv está actualizado."
}

De manera similar, prepara serena-auto.ps1 para comparar «etiqueta de release de GitHub vs versión local» y notificar. Además, si configuras estos para ejecutarse «semanalmente» en el Programador de Tareas, puedes habilitar «verificaciones para no olvidar» en Windows también.

Error Al Ejecutar uv self update

uv self update error: Self-update is only available for uv binaries installed via the standalone installation scripts. The current executable is at C:\Users\minok\AppData\Local\Microsoft\WinGet\Packages\astral-sh.uv_Microsoft.Winget.Source_8wekyb3d8bbwe\uv.exe but the standalone installer was used to install uv to C:\Users\minok\.local\bin. Are multiple copies of uv installed?

Conclusión: uv tiene una instalación dual (versión WinGet + versión standalone), y uv self update está fallando porque está «mirando una ubicación diferente a la que instalaste tú mismo».

¿Qué Está Pasando?

  • uv self update solo puede actualizar ejecutables instalados con la versión standalone.
  • El uv.exe actualmente en ejecución está bajo WinGetC:\Users\minok\AppData\Local\Microsoft\WinGet\Packages\astral-sh.uv_...\uv.exe
  • Pero la versión standalone también existe al mismo tiempo: C:\Users\minok\.local\bin\uv.exe (uvx.exe también está aquí)

En este estado de «existen dos copias», dependiendo de la prioridad de PATH, uv self update intenta tocar la versión WinGet y es rechazado.

Estrategia de Resolución (Unificar a Uno)

✅ Estrategia A (Recomendada): Unificar a Versión Standalone

Razón: Puede usar uv self update / uvx está incluido de manera confiable.

  1. Desinstalar versión WinGet
winget list astral-sh.uv
winget uninstall --id astral-sh.uv -e
  1. Verificar prioridad de PATH (%USERPROFILE%\.local\bin debería estar cerca del principio)
where uv
$Env:Path -split ';'

Idealmente, C:\Users\minok\.local\bin está antes de la ubicación de WinGet. Si es necesario, temporalmente:

$bin = "$Env:USERPROFILE\.local\bin"
$Env:Path = "$bin;" + ($Env:Path -replace [regex]::Escape("$bin;"), '')

(Para persistencia, editar vía GUI de «Variables de Entorno del Sistema» es recomendado. setx puede acortar PATH existente, así que ten cuidado)

  1. Verificar
where uv
uv --version
uvx --version
uv self update       # ← Esto ahora debería funcionar

Estrategia B: Unificar a Versión WinGet (Dejar actualizaciones automáticas a WinGet)

  1. Eliminar versión standalone
  • Elimina C:\Users\minok\.local\bin\uv.exeuvx.exeuvw.exe
  • Remueve C:\Users\minok\.local\bin de PATH (si no se usa en otro lugar)
  1. Actualizar con WinGet
winget upgrade --id astral-sh.uv -e

Nota: uv self update no puede ser usado. Si uvx está incluido en la versión de paquete de WinGet depende del paquete, así que verifica con where uvx. Si no, espera actualización de WinGet o ve a Estrategia A.

One-liner para Verificar Rápidamente la Situación

Write-Host "== which =="
where uv; where uvx
Write-Host "== actual =="
(Get-Command uv).Source
(Get-Command uvx -ErrorAction SilentlyContinue).Source

→ Queda inmediatamente claro qué ejecutable está siendo llamado.

Recomendado para Operación Real

Ve con Estrategia A (standalone) + prioridad de PATH, para que puedas usar uv self update / uvx … serena … de la manera más fluida.

Para scripts relacionados con Serena, puedes fijar el ejecutable al principio para prevención de errores:

$UVX = (Get-Command uvx).Source  # ej., C:\Users\minok\.local\bin\uvx.exe
& $UVX --from git+https://github.com/oraios/serena serena start-mcp-server ...

Procedimiento de Recuperación Más Rápido para Este Caso (Estrategia A)

# 1) Remover versión WinGet
winget uninstall --id astral-sh.uv -e

# 2) Reinstalar standalone (omitir si ya está hecho)
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"

# 3) Priorizar .local\bin en PATH
#  → Editar variables de entorno vía GUI o sobrescribir temporalmente (snippet anterior)

# 4) Verificar
where uv; where uvx
uv --version
uv self update   # ← Si esto funciona, unificación completa

Con esto, incluso en Windows, uv self update funciona correctamente, y puedes operar Serena de manera estable vía uvx.

Sin embargo, el método anterior puede no funcionar en algunos casos.

PS C:\Users\minok> winget list astral-sh.uv No se encontraron paquetes instalados que coincidan con los criterios de entrada. PS C:\Users\minok> winget uninstall --id astral-sh.uv -e No se encontraron paquetes instalados que coincidan con los criterios de entrada.

De hecho, esto es típico de una versión portable huérfana donde la versión WinGet «parece existir» pero no es visible en winget list. En otras palabras, solo quedan el «enlace (shim)» o remanentes de paquete creados por WinGet, y uv self update lo recoge.

Vamos a limpiar manualmente los remanentes de WinGet → unificar a versión standalone con el procedimiento a continuación.

Recuperación Rápida (PowerShell)

  1. Primero, verifica qué uv está siendo llamado
where uv
Get-Command uv | Select-Object Source
where uvx
Get-Command uvx | Select-Object Source

Si la salida es ...AppData\Local\Microsoft\WinGet\Packages\astral-sh.uv_...\uv.exe, el lado WinGet está priorizado. Si where uv no muestra nada, puedes mostrarlo en Símbolo del sistema.

Resultado de ejecución del comando where uv en PowerShell - Múltiples rutas de uv.exe mostradas
  1. Eliminar el «enlace portable» de WinGet (Si esto permanece, tiende a ser priorizado)
# Ubicación de enlace de WinGet (ejecutable de acceso directo)
$links = "$env:LOCALAPPDATA\Microsoft\WinGet\Links"
Remove-Item "$links\uv.exe"  -ErrorAction SilentlyContinue
Remove-Item "$links\uvx.exe" -ErrorAction SilentlyContinue
Remove-Item "$links\uvw.exe" -ErrorAction SilentlyContinue

Si Links está vacío (o no existe en absoluto), el lado WinGet probablemente está «poniendo el ejecutable directamente bajo Packages, no vía shim de Links» en PATH. La solución para ese caso se describe más adelante.

  1. Eliminar remanentes de paquete WinGet (si los hay)
$pkg = Get-ChildItem "$env:LOCALAPPDATA\Microsoft\WinGet\Packages" -Directory `
       | Where-Object { $_.Name -like 'astral-sh.uv_*' }
if ($pkg) { Remove-Item $pkg.FullName -Recurse -Force }
  1. Priorizar la versión standalone ya instalada (Para que C:\Users\minok\.local\bin esté cerca del principio de PATH)
$bin = "$env:USERPROFILE\.local\bin"
# Temporalmente poner al principio (solo sesión)
$env:Path = "$bin;" + ($env:Path -replace [regex]::Escape("$bin;"), '')

# Para persistencia, mover al principio de PATH de usuario en GUI de "Variables de Entorno del Sistema" es seguro
  1. Verificar operación
where uv
Get-Command uv | Select-Object Source
uv --version
uv self update   # ← Si esto funciona, OK

Último Recurso Si No Funciona

Reinstala el lado .local\bin (sobrescribir OK)

powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"

Si where uv todavía apunta al lado WinGet, el orden de Path todavía está invertido. También verifica nuevamente si uv.exe en Links ha sido recreado.

Puntos Clave

  • Las aplicaciones portables de WinGet tienen shim en carpeta «Links» como el ejecutable. A veces no aparecen en winget list, y para eliminación, limpiar manualmente tanto Links como Packages es confiable.
  • En adelante, mantener solo la versión standalone te permite usar uv self update y estabiliza la operación de Serena.
  • El lado de Serena puede ser usado tal cual:
uvx --from git+https://github.com/oraios/serena serena start-mcp-server

Actualmente siendo recogido está:

C:\Users\minok\AppData\Local\Microsoft\WinGet\Packages\astral-sh.uv_...\uv.exe

Entonces, vamos a expulsar qué uv.exe está priorizado y orden de PATH de una vez, remover el lado WinGet, y priorizar .local\bin.

1) Mostrar Todo «Qué uv Está Siendo Usado»

# ¿En qué orden se encuentran? (aparecerán múltiples)
where uv
where uvx

# Ejecutable real que PowerShell resuelve (-All para todos)
Get-Command uv  -All | Select-Object Source
Get-Command uvx -All | Select-Object Source
Salida del comando Get-Command uv - .local\bin\uv.exe siendo priorizado

Si WinGet\Packages…\uv.exe aparece arriba de .local\bin\uv.exe, ese está priorizado.

2) Verificar Si la Ruta de Packages de WinGet Está Mezclada en PATH

$Env:Path -split ';' | ForEach-Object {
  if ($_ -match 'WinGet\\Packages' -or $_ -match 'WindowsApps') { "→ $_" } else { $_ }
}
Resultado de verificación de variable de entorno PATH - Rutas de versión WinGet y standalone mostradas
  • …\Microsoft\WinGet\Packages\astral-sh.uv_… aparece ⇒ Este es el objetivo a remover
  • …\Microsoft\WindowsApps es para Microsoft Store/alias. Usualmente OK dejarlo tal cual (a menudo no relacionado con uv)
# Eliminar carpeta de remanente de WinGet de uv si existe
Get-ChildItem "$env:LOCALAPPDATA\Microsoft\WinGet\Packages" -Directory `
| Where-Object { $_.Name -like 'astral-sh.uv_*' } `
| ForEach-Object {
    Write-Host "Removing $($_.FullName)"
    Remove-Item $_.FullName -Recurse -Force
}

# Por si acaso, Links una vez más (ignorar si no existe)
Remove-Item "$env:LOCALAPPDATA\Microsoft\WinGet\Links\uv*.exe" -ErrorAction SilentlyContinue
Pantalla de ejecución de eliminación de paquete WinGet

Nota: Si lo anterior falla, puedes eliminar manualmente abriendo la carpeta en el Explorador (si no está bloqueado, la eliminación es posible).

4) Priorizar .local\bin para Prueba (Solo Sesión)

$bin = "$env:USERPROFILE\.local\bin"
$env:Path = "$bin;" + ($env:Path -replace [regex]::Escape("$bin;"), '')

# Verificar
where uv
Get-Command uv | Select-Object Source
uv --version
uv self update   # ← Si esto tiene éxito, cambio a prioridad standalone está completo

PS C:\Users\minok> Get-Command uv | Select-Object Source

Source —— C:\Users\minok\.local\bin\uv.exe

PS C:\Users\minok> uv –version uv 0.9.5 (d5f39331a 2025-10-21) PS C:\Users\minok> uv self update info: Checking for updates… success: You’re on the latest version of uv (v0.9.5)

PS C:\Users\minok> Get-Command uv | Select-Object Source

Source
——
C:\Users\minok\.local\bin\uv.exe

PS C:\Users\minok> uv –version
uv 0.9.5 (d5f39331a 2025-10-21)
PS C:\Users\minok> uv self update
info: Checking for updates…
success: You’re on the latest version of uv (v0.9.5)

Pantalla de éxito del comando uv self update - Última versión mostrada

5) Persistencia (Reordenar PATH de Usuario)

GUI (recomendado): Configuración → Sistema → Acerca de → «Configuración relacionada» → Configuración avanzada del sistema → Variables de entorno → Editar PATH de «Variables de entorno de usuario» → Mover %USERPROFILE%\.local\bin al principio → Guardar con OK → Reabrir un nuevo PowerShell y verificar.

Pantalla de configuración de variables de entorno de Windows - .local\bin colocado al principio de PATH

Si realmente quieres hacerlo vía comando (mayor riesgo, así que GUI recomendado):

$bin  = "$env:USERPROFILE\.local\bin"
$curr = [Environment]::GetEnvironmentVariable('Path', 'User')
if ($curr -notmatch [regex]::Escape($bin)) {
  [Environment]::SetEnvironmentVariable('Path', "$bin;$curr", 'User')
} else {
  # Mover al principio
  $parts = ($curr -split ';') | Where-Object { $_ -ne $bin -and $_ -ne '' }
  $new = "$bin;" + ($parts -join ';')
  [Environment]::SetEnvironmentVariable('Path', $new, 'User')
}

6) Verificación Final

where uv; where uvx
Get-Command uv,uvx | Select-Object Name,Source
uv --version
uv self update

Con esto, el ejecutable del lado WinGet es removido, y uv/uvx de .local\bin es confiablemente priorizado. En adelante:

  • Actualizaciónuv self update
  • Inicio de Serenauvx --from git+https://github.com/oraios/serena serena start-mcp-server --context ide-assistant --project "C:/path/to/your/project"

この記事が気に入ったら
フォローしてね!

¡Comparte esta publicación!
  • URLをコピーしました!
  • URLをコピーしました!
Índice