Solucionar problemas en flujos de trabajo de calidad de código
Esta página cubre los problemas comunes que podrías encontrar al construir flujos de trabajo de calidad de código con sandboxes de E2B y servidores MCP, junto con sus soluciones.
Si experimentas problemas que no se cubren aquí, consulta la documentación de E2B.
Herramientas MCP no disponibles
Problema: Claude informa I don't have any MCP tools available (No tengo ninguna herramienta MCP disponible).
Solución:
Verifica que estés utilizando la cabecera de autorización:
--header "Authorization: Bearer ${mcpToken}"Comprueba que estés esperando la inicialización de MCP.
// typescript await new Promise((resolve) => setTimeout(resolve, 1000));# python await asyncio.sleep(1)Asegúrate de que las credenciales estén tanto en la configuración de
envscomo en la demcp:// typescript const sbx = await Sandbox.betaCreate({ envs: { ANTHROPIC_API_KEY: process.env.ANTHROPIC_API_KEY!, GITHUB_TOKEN: process.env.GITHUB_TOKEN!, SONARQUBE_TOKEN: process.env.SONARQUBE_TOKEN!, }, mcp: { githubOfficial: { githubPersonalAccessToken: process.env.GITHUB_TOKEN!, }, sonarqube: { org: process.env.SONARQUBE_ORG!, token: process.env.SONARQUBE_TOKEN!, url: "https://sonarcloud.io", }, }, });# python sbx = await AsyncSandbox.beta_create( envs={ "ANTHROPIC_API_KEY": os.getenv("ANTHROPIC_API_KEY"), "GITHUB_TOKEN": os.getenv("GITHUB_TOKEN"), "SONARQUBE_TOKEN": os.getenv("SONARQUBE_TOKEN"), }, mcp={ "githubOfficial": { "githubPersonalAccessToken": os.getenv("GITHUB_TOKEN"), }, "sonarqube": { "org": os.getenv("SONARQUBE_ORG"), "token": os.getenv("SONARQUBE_TOKEN"), "url": "https://sonarcloud.io", }, }, )Verifica que tus tokens de API sean válidos y tengan los alcances (scopes) adecuados.
Las herramientas de GitHub funcionan pero las de SonarQube no
Problema: las herramientas MCP de GitHub se cargan pero las de SonarQube no aparecen.
Solución: el servidor MCP de SonarQube requiere que GitHub esté configurado simultáneamente. Incluye siempre ambos servidores en la configuración de tu sandbox, incluso si solo estás probando uno.
// Incluye ambos servidores incluso si solo usas uno
const sbx = await Sandbox.betaCreate({
envs: {
ANTHROPIC_API_KEY: process.env.ANTHROPIC_API_KEY!,
GITHUB_TOKEN: process.env.GITHUB_TOKEN!,
SONARQUBE_TOKEN: process.env.SONARQUBE_TOKEN!,
},
mcp: {
githubOfficial: {
githubPersonalAccessToken: process.env.GITHUB_TOKEN!,
},
sonarqube: {
org: process.env.SONARQUBE_ORG!,
token: process.env.SONARQUBE_TOKEN!,
url: "https://sonarcloud.io",
},
},
});# Incluye ambos servidores incluso si solo usas uno
sbx = await AsyncSandbox.beta_create(
envs={
"ANTHROPIC_API_KEY": os.getenv("ANTHROPIC_API_KEY"),
"GITHUB_TOKEN": os.getenv("GITHUB_TOKEN"),
"SONARQUBE_TOKEN": os.getenv("SONARQUBE_TOKEN"),
},
mcp={
"githubOfficial": {
"githubPersonalAccessToken": os.getenv("GITHUB_TOKEN"),
},
"sonarqube": {
"org": os.getenv("SONARQUBE_ORG"),
"token": os.getenv("SONARQUBE_TOKEN"),
"url": "https://sonarcloud.io",
},
},
)Claude no puede acceder a repositorios privados
Problema: "I don't have access to that repository" (No tengo acceso a ese repositorio).
Solución:
Verifica que tu token de GitHub tenga el alcance
repo(no solopublic_repo).Realiza primero una prueba con un repositorio público.
Asegúrate de que el propietario y el nombre del repositorio sean correctos en tu archivo
.env:GITHUB_OWNER=your_github_username GITHUB_REPO=your_repository_nameGITHUB_OWNER=your_github_username GITHUB_REPO=your_repository_name
El flujo de trabajo agota el tiempo de espera o se ejecuta durante demasiado tiempo
Problema: el flujo de trabajo no se completa o se agotan los créditos de Claude.
Soluciones:
Utiliza
timeoutMs: 0(TypeScript) otimeout_ms=0(Python) para flujos de trabajo complejos para permitir tiempo ilimitado:await sbx.commands.run( `echo '${prompt}' | claude -p --dangerously-skip-permissions`, { timeoutMs: 0, // Sin límite de tiempo onStdout: console.log, onStderr: console.log, }, );await sbx.commands.run( f"echo '{prompt}' | claude -p --dangerously-skip-permissions", timeout_ms=0, # Sin límite de tiempo on_stdout=print, on_stderr=print, )Divide los flujos de trabajo complejos en tareas más pequeñas y enfocadas.
Monitorea tu uso de créditos de la API de Anthropic.
Agrega puntos de control en los prompts: "Después de cada paso, muestra el progreso antes de continuar".
Errores de limpieza del sandbox
Problema: los sandboxes no se están limpiando correctamente, lo que provoca el agotamiento de los recursos.
Solución: utiliza siempre un manejo de errores adecuado con limpieza en el bloque finally:
async function robustWorkflow() {
let sbx: Sandbox | undefined;
try {
sbx = await Sandbox.betaCreate({
// ... configuración
});
// ... lógica del flujo de trabajo
} catch (error) {
console.error("Workflow failed:", error);
process.exit(1);
} finally {
if (sbx) {
console.log("Cleaning up sandbox...");
await sbx.kill();
}
}
}async def robust_workflow():
sbx = None
try:
sbx = await AsyncSandbox.beta_create(
# ... configuración
)
# ... lógica del flujo de trabajo
except Exception as error:
print(f"Workflow failed: {error}")
sys.exit(1)
finally:
if sbx:
print("Cleaning up sandbox...")
await sbx.kill()La variable de entorno no se carga
Problema: el script falla con "undefined" o "None" para las variables de entorno.
Solución:
Asegúrate de que
dotenvse cargue en la parte superior de tu archivo:import "dotenv/config";Verifica que el archivo
.envesté en el mismo directorio que tu script.Comprueba que los nombres de las variables coincidan exactamente (sensible a mayúsculas y minúsculas):
// archivo .env GITHUB_TOKEN = ghp_xxxxx; // En el código process.env.GITHUB_TOKEN; // Correcto process.env.github_token; // Incorrecto - las mayúsculas/minúsculas no coinciden
Asegúrate de que
dotenvse cargue en la parte superior de tu archivo:from dotenv import load_dotenv load_dotenv()Verifica que el archivo
.envesté en el mismo directorio que tu script.Comprueba que los nombres de las variables coincidan exactamente (sensible a mayúsculas y minúsculas):
# archivo .env GITHUB_TOKEN=ghp_xxxxx # En el código os.getenv("GITHUB_TOKEN") # Correcto os.getenv("github_token") # Incorrecto - las mayúsculas/minúsculas no coinciden
SonarQube devuelve resultados vacíos
Problema: el análisis de SonarQube no devuelve proyectos ni problemas.
Solución:
- Verifica que la clave de organización de SonarCloud sea correcta.
- Asegúrate de tener al menos un proyecto configurado en SonarCloud.
- Comprueba que tu token de SonarQube tenga los permisos necesarios.
- Confirma que tu proyecto haya sido analizado al menos una vez en SonarCloud.