跳转到主要内容

故障排查

当客户端无法连接、工具缺失或命令行为与普通 shell 不一致时,从这里开始。

客户端无法连接

先确认传输方式。 HTTP 模式下检查服务是否在预期入口监听:
curl http://127.0.0.1:8000/mcp
直接 CLI 默认是 127.0.0.1:8000。部分辅助脚本或 tunnel 文档可能使用 8765,因此要同时确认实际 --portCODING_TOOLS_MCP_PORT、包装脚本和客户端 URL。 stdio 模式下,确认客户端命令包含 --stdio,并且没有把额外日志写到 stdout。JSON-RPC 响应必须保持在 stdout,诊断信息应写 stderr。

HTTP 返回 unauthorized

如果配置了 --auth-tokenCODING_TOOLS_MCP_AUTH_TOKEN,客户端必须发送:
Authorization: Bearer <token>
OAuth 模式下,如果服务位于代理或 tunnel 后面,确认 CODING_TOOLS_MCP_SERVER_URL 与外部可见 URL 一致。

非 loopback HTTP 启动失败

当前实现拒绝无鉴权的非 loopback 绑定。添加 Bearer token 或 OAuth:
coding-tools-mcp --host 0.0.0.0 --auth-token "$CODING_TOOLS_MCP_AUTH_TOKEN"
CODING_TOOLS_MCP_AUTH_MODE=noauth 只应在外层已有可信鉴权和网络隔离时使用。

tools/list 里缺少工具

检查当前 profile:
coding-tools-mcp --tool-profile full
read-only 会隐藏 apply_patchexec_commandwrite_stdinkill_sessionset_default_cwdrequest_permissions 等工具。设置 CODING_TOOLS_MCP_ENABLE_VIEW_IMAGE=0 会禁用 view_image

命令被阻止

safe 模式会阻止常见风险命令模式。常见诊断包括网络、shell 展开、内联脚本、敏感环境、破坏性命令、超长超时、特权可执行文件或写入 generated/ignored 文件。 本地开发命令需要包管理器或 shell 特性时,可重启为:
coding-tools-mcp --permission-mode trusted
如果只是网络特征检测导致阻止,可考虑 --allow-network

找不到可执行文件

exec_command 继承受控环境。先检查服务看到的执行环境,再调整 --shell-env-inherit 或显式传入环境变量。不要在 safetrusted 中传入看起来像 secret 的值,因为它们会被过滤。

路径被拒绝或找不到文件

直接文件工具都会基于配置的工作区解析路径。确认服务启动时使用了正确工作区:
coding-tools-mcp --workspace /path/to/workspace
当相对命令目录不符合预期时,使用 get_default_cwdset_default_cwd 检查或修改默认目录。

read_file 编码或二进制失败

read_file 只支持 UTF-8 文本,并会拒绝看起来像二进制的文件。图片文件使用 view_image;其他二进制检查可在合适权限模式下通过命令行工具处理。

补丁失败

先用 apply_patchdry_run: true 验证。常见原因包括上下文过期、路径不在工作区、generated/ignored 写入策略,或 patch 文本格式不符合预期。

长时间运行的 session 问题

保存 exec_command 返回的 session_id,用 write_stdin 轮询或写入输入,用 kill_session 终止。输出可能受 max_output_bytes 和 session buffer 限制,长输出命令应定期轮询。

Landlock 警告

Linux 上服务会在可用时使用 Landlock 文件系统隔离。如果宿主不支持,命令执行会回退到策略检查并报告警告。运行不可信命令时应使用外层沙箱。