故障排除代码质量工作流
本页介绍在使用 E2B 沙盒和 MCP 服务器构建代码质量工作流时可能遇到的常见问题及其解决方案。
如果您遇到此处未涵盖的问题,请查阅 E2B 文档。
MCP 工具不可用
问题:Claude 报告 I don't have any MCP tools available(我没有可用的 MCP 工具)。
解决方案:
-
确认您正在使用授权标头:
--header "Authorization: Bearer ${mcpToken}" -
检查您是否在等待 MCP 初始化。
// typescript await new Promise((resolve) => setTimeout(resolve, 1000));# python await asyncio.sleep(1) -
确保证书同时存在于
envs和mcp配置中:// 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", }, }, ) -
验证您的 API 令牌有效且具有正确的权限范围。
GitHub 工具正常但 SonarQube 不行
问题:GitHub MCP 工具加载,但 SonarQube 工具未显示。
解决方案:SonarQube MCP 服务器需要同时配置 GitHub。即使您只测试其中一个,也请始终在沙盒配置中包含这两个服务器。
// 即使只使用一个,也要包含两个服务器
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",
},
},
});# 即使只使用一个,也要包含两个服务器
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 无法访问私有仓库
问题:"I don't have access to that repository"(我无权访问该仓库)。
解决方案:
-
验证您的 GitHub 令牌具有
repo权限范围(不仅仅是public_repo)。 -
先使用公共仓库进行测试。
-
确保
.env中的仓库所有者和名称正确:GITHUB_OWNER=your_github_username GITHUB_REPO=your_repository_nameGITHUB_OWNER=your_github_username GITHUB_REPO=your_repository_name
工作流超时或运行时间过长
问题:工作流未完成或 Claude 额度耗尽。
解决方案:
-
对于复杂的工作流,使用
timeoutMs: 0(TypeScript)或timeout_ms=0(Python)以允许无限制时间:await sbx.commands.run( `echo '${prompt}' | claude -p --dangerously-skip-permissions`, { timeoutMs: 0, // 无超时 onStdout: console.log, onStderr: console.log, }, );await sbx.commands.run( f"echo '{prompt}' | claude -p --dangerously-skip-permissions", timeout_ms=0, # 无超时 on_stdout=print, on_stderr=print, ) -
将复杂的工作流分解为更小、更专注的任务。
-
监控您的 Anthropic API 额度使用情况。
-
在提示中添加检查点:“完成每一步后,在继续之前显示进度”。
沙盒清理错误
问题:沙盒未被正确清理,导致资源耗尽。
解决方案:始终在 finally 块中使用适当的错误处理进行清理:
async function robustWorkflow() {
let sbx: Sandbox | undefined;
try {
sbx = await Sandbox.betaCreate({
// ... 配置
});
// ... 工作流逻辑
} 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(
# ... 配置
)
# ... 工作流逻辑
except Exception as error:
print(f"Workflow failed: {error}")
sys.exit(1)
finally:
if sbx:
print("Cleaning up sandbox...")
await sbx.kill()环境变量未加载
问题:脚本因环境变量为 "undefined" 或 "None" 而失败。
解决方案:
-
确保在文件顶部加载了
dotenv:import "dotenv/config"; -
验证
.env文件与您的脚本位于同一目录中。 -
检查变量名称是否完全匹配(区分大小写):
// .env 文件 GITHUB_TOKEN = ghp_xxxxx; // 在代码中 process.env.GITHUB_TOKEN; // 正确 process.env.github_token; // 错误 - 大小写不匹配
-
确保在文件顶部加载了
dotenv:from dotenv import load_dotenv load_dotenv() -
验证
.env文件与您的脚本位于同一目录中。 -
检查变量名称是否完全匹配(区分大小写):
# .env 文件 GITHUB_TOKEN=ghp_xxxxx # 在代码中 os.getenv("GITHUB_TOKEN") # 正确 os.getenv("github_token") # 错误 - 大小写不匹配
SonarQube 返回空结果
问题:SonarQube 分析未返回任何项目或问题。
解决方案:
- 验证您的 SonarCloud 组织密钥是否正确。
- 确保您在 SonarCloud 中至少配置了一个项目。
- 检查您的 SonarQube 令牌是否具有必要的权限。
- 确认您的项目已在 SonarCloud 中至少分析过一次。