mcp: local server not restarted after transport error
Maintainer thường phản hồi trong vòng 1 ngày
@nexxeln đang làm issue này rồi.
Từ ngày 4/10/2026.
Đánh giá
Issue này chưa được đánh giá.
Mô tả
Summary
When a local (stdio) MCP server process exits unexpectedly while a session is already connected, OpenCode logs a single mcp transport error warning and never restarts it. The server's tools silently disappear from the agent's tool list for the remainder of the session. Only an unrelated event — a write to the OpenCode config file, or starting a new session — causes the server to be spawned again.
Environment
- opencode version: v2.0.22 (channel
latest) - OS: Windows_NT 10.0.26200.9550 (win32 x64)
- Terminal: Windows Terminal (
WT_SESSIONset),TERM=xterm-256color - Shell:
C:\WINDOWS\system32\cmd.exe - Install/channel: latest (npm
@opencode/cli) - Active plugins: none configured in
opencode.json
Reproduction
- Configure a local stdio MCP server that stays alive after
initialize, for example:{ "mcp": { "servers": { "playwright": { "type": "local", "command": ["C:\\Program Files\\nodejs\\node.exe", "C:\\path\\to\\mcp\\cli.js"] } } } } - Have OpenCode sessions open in two or more directories, so several connections to the same server are spawned (one per directory).
- Kill the MCP server process from outside OpenCode. A realistic trigger is another OpenCode session running a broad process cleanup such as:
AnyGet-Process node,msedge -ErrorAction SilentlyContinue | Where-Object { $_.StartTime -gt (Get-Date).AddMinutes(-25) } | ForEach-Object { try { $_.Kill() } catch {} }taskkill, service restart of a parent process, or OOM kill should behave the same way. - Observe that the MCP tools are no longer offered to the agent, and that nothing brings them back.
Expected Behavior
A local MCP server whose process exits unexpectedly should be restarted automatically (ideally with backoff and a cap on retries), so its tools remain available. At minimum, a crash while connected should be retried the same way an initial connect failure is.
Actual Behavior
One warning is logged per connection and then nothing:
timestamp=2026-10-04T20:48:21.035Z level=WARN message="mcp transport error" server=playwright error="MCP server process exited with code 255" role=server directory="<project-a>" connectionID=<id>
timestamp=2026-10-04T20:48:21.051Z level=WARN message="mcp transport error" server=playwright error="MCP server process exited with code 255" role=server directory="<project-b>" connectionID=<id>
timestamp=2026-10-04T20:48:21.067Z level=WARN message="mcp transport error" server=playwright error="MCP server process exited with code 255" role=server directory="<project-c>" connectionID=<id>
timestamp=2026-10-04T20:48:21.082Z level=WARN message="mcp transport error" server=playwright error="MCP server process exited with code 255" role=server directory="<project-d>" connectionID=<id>
timestamp=2026-10-04T20:48:21.099Z level=WARN message="mcp transport error" server=playwright error="MCP server process exited with code 255" role=server directory="<home>" connectionID=<id>
No mcp connected line follows, and no retry is attempted. The agent's tool list loses every tool from that server and does not recover on its own.
Notes on scope and contrast:
- The shared background service was not restarted during this occurrence (same PID and start time before and after), so this is specific to MCP child processes rather than a service restart.
- Retry-on-startup does appear to exist: an earlier
mcp connect failedwas followed by a successfulmcp connectedroughly 35 seconds later. What is missing is retry-on-crash for a server that was already connected. - Writing to the global config file causes all connections to be torn down and respawned immediately (
mcp connected ... tools=25for every directory within ~2s), which currently works as an accidental recovery trigger.
Additional Context
- Frequency: 4 occurrences within roughly 40 minutes in one session. Always reproducible when the child process is killed.
- Exit code was
255in every occurrence, consistent with an external kill rather than a crash inside the server. The MCP server itself worked correctly when spawned manually:initializesucceeded,tools/listreturned 25 tools, andtools/call browser_navigatesucceeded. - An earlier, separate failure mode was also observed and is believed to be a different issue: when the command was
npx -y <package>, several connections spawned at once raced on the package manager's shared install cache and died withENOTEMPTY ... InstallFailed extracting tarball. Working around it by pre-installing the package and using an absolute path made startup reliable. Mentioned here only for context. - Workarounds currently used: write to the global
opencode.jsonto force a respawn, oropencode service restart. Both are indirect — the first mutates configuration as a side effect. - Suggested direction (if this is a bug rather than intended behavior): treat
mcp transport errorlike a failed connect and re-enter the spawn/retry path, ideally with exponential backoff and a cap so a permanently broken server does not spin.
- Ngôn ngữ chính
- TypeScript
- Star
- 212k
- Fork
- 28.1k
- Merge trung bình
- 9 giờ 17 phút
- Pull request đã merge (30 ngày)
- 396
Chuẩn bị môi trường
- Không có Dockerfile hay tệp Docker Compose
- Có mẫu pull request
- Đọc hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của anomalyco/opencode
-
Windows: global-project session path depends on server process drive, hides API-created sessions from desktop pickerCó thể đã có người làm @1624318455 đã nhận 14 ngày trước. Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
Maintainer thường phản hồi trong vòng 1 ngày
-
[FEATURE]: Test that PermissionV2 declines pending requests when its scope closesCó thể đã có người làm @saeedahmed96 đã nhận 11 ngày trước. Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 88/100
Maintainer thường phản hồi trong vòng 1 ngày
-
EffectFlock heartbeat never refreshes, so locks held over 60 s can be brokenCó thể đã có người làm @iceteaSA đã nhận 14 ngày trước. Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 82/100
anomalyco/opencode#51159 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
Maintainer thường phản hồi trong vòng 1 ngày
Tất cả issue của anomalyco/opencode
Issue tương tự
-
Add: YRF Music NepalĐang mởstreams:add
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 62/100
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
walletbeat/walletbeat#1558 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 82/100
hawk-digital-environments/HAWKI#438 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Bug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 72/100
GiganticMinecraft/seichi-portal-frontend#1165 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 1/5 1-3 giờ Mức phù hợp với người mới 84/100
Maintainer thường phản hồi trong vòng 1 ngày