[bug] MCP start_article_summary_job 超时但 job 实际执行了 #1

Open
opened 2026-04-16 11:41:17 +08:00 by osiman · 0 comments
Owner

问题

连续多个 start_article_summary_job 调用报 MCP 超时(-32001 Request timed out),但 job 实际执行了(run_state.json 显示 generate_markdown 阶段失败,job 目录正常生成)。

根因

server.py 的 start_article_summary_job handler 用同步方式处理请求:

  1. 用 subprocess.Popen(start_new_session=True) 启动 job runner
  2. Popen 返回后,本应立即通过 stdio 发回响应
  3. 但 server 主进程在 Popen 返回到发送响应之间被阻塞
  4. OpenClaw MCP client 等不到响应,报超时

job 本身正常运行,只是响应没能通过 MCP 通道发回来。

修复方向

将 job 启动改造为真正的非阻塞模式:

  • 方案 A(推荐): 用后台线程/线程池(concurrent.futures.ThreadPoolExecutor)启动 job runner,主线程立即返回响应
  • 方案 B: 改用纯异步模式,job 状态完全通过 get_article_summary_job_status 查询

验证方法

在 get_article_summary_job_status 正常可用的情况下:

  1. 调用 start_article_summary_job
  2. 若超时,立即调用 get_article_summary_job_status(job_id)
  3. 若返回 status=running,说明 job 在跑,不能按失败处理

影响范围

所有通过 OpenClaw MCP 调用 start_article_summary_job 的场景


复现时间:2026-04-16

## 问题 连续多个 `start_article_summary_job` 调用报 MCP 超时(-32001 Request timed out),但 job 实际执行了(`run_state.json` 显示 `generate_markdown` 阶段失败,job 目录正常生成)。 ## 根因 `server.py` 的 `start_article_summary_job` handler 用同步方式处理请求: 1. 用 `subprocess.Popen(start_new_session=True)` 启动 job runner 2. Popen 返回后,本应立即通过 stdio 发回响应 3. 但 server 主进程在 Popen 返回到发送响应之间被阻塞 4. OpenClaw MCP client 等不到响应,报超时 job 本身正常运行,只是响应没能通过 MCP 通道发回来。 ## 修复方向 将 job 启动改造为真正的非阻塞模式: - **方案 A(推荐):** 用后台线程/线程池(`concurrent.futures.ThreadPoolExecutor`)启动 job runner,主线程立即返回响应 - **方案 B:** 改用纯异步模式,job 状态完全通过 `get_article_summary_job_status` 查询 ## 验证方法 在 `get_article_summary_job_status` 正常可用的情况下: 1. 调用 `start_article_summary_job` 2. 若超时,立即调用 `get_article_summary_job_status(job_id)` 3. 若返回 `status=running`,说明 job 在跑,不能按失败处理 ## 影响范围 所有通过 OpenClaw MCP 调用 `start_article_summary_job` 的场景 --- 复现时间:2026-04-16
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: osiman/reader#1