Windows: v1.0.66 fails to start stdio MCP servers when command is a .bat/.cmd with args (regression from 1.0.65)
- Ngôn ngữ chính
- Shell
- Star
- 11.2k
- Fork
- 1.9k
- Merge trung bình
- 14 giờ 16 phút
- Pull request đã merge (30 ngày)
- 6
Mô tả
## Summary
On Windows, **v1.0.66 fails to start any stdio MCP server whose `command` is a `.bat`/`.cmd` file and is registered with one or more `args`.** The child process dies immediately with cmd.exe's `The syntax of the command is incorrect.` and the client reports `connection closed: initialize response`. The exact same servers worked in **v1.0.65**.
This looks like a regression in how the Windows `.bat`/`.cmd` spawn path builds/quotes the command line (consistent with the post‑CVE‑2024‑27980 Node hardening for batch files).
## Environment
- Copilot CLI: **1.0.66-1** (broken) — worked on **1.0.65**
- OS: Windows 11 (`10.0.26200`), x64
- Install: WinGet (`GitHub.Copilot`)
- Bundled Node: `v24.16.0`
## What fails vs. what works
Given these MCP registrations:
| `command` | `args` | Result on 1.0.66 |
|---|---|---|
| `foo.bat` | `["serve"]` | ❌ fails: `The syntax of the command is incorrect.` |
| `foo.bat` | `[]` (no args) | ✅ works |
| `python.exe` (a real `.exe`) | `["-m","foo","serve"]` | ✅ works |
| http server | n/a | ✅ works |
So the failure is specific to **`.bat`/`.cmd` command + non-empty `args`**. Removing the argument (or pointing `command` at a real `.exe`) avoids it.
## Logs
```
[ERROR] Starting MCP client for dashpilot with command: d:\LRPBot\dashpilot.bat and args: serve
[ERROR] [mcp server dashpilot stderr] The syntax of the command is incorrect.
[ERROR] Failed to start MCP client for dashpilot: Error: failed to initialize MCP client: connection closed: initialize response
```
In the same session, every `.bat … serve` server failed identically (5 of them), while one `.bat` registered with empty args and all `http` servers started fine. On 1.0.65, all of the same `.bat … serve` servers started normally.
## Minimal reproduction
1. Create `C:\tmp\echo.bat`:
```bat
@echo off
echo got arg: %~1 1>&2
```
2. Register it with an argument:
```
copilot mcp add repro -- "C:\tmp\echo.bat" serve
```
3. Launch `copilot` → the `repro` server fails to start with `The syntax of the command is incorrect.`
4. Re-register **without** the argument and the spawn no longer errors:
```
copilot mcp remove repro
copilot mcp add repro -- "C:\tmp\echo.bat"
```
(For a server that actually completes MCP initialization, wrap any stdio MCP server in a `.bat` and register it `-- "wrapper.bat" serve` vs `-- "wrapper.bat"`.)
## Expected
A `.bat`/`.cmd` MCP `command` with `args` should be spawned with a correctly quoted command line (as it was in 1.0.65), so the server initializes normally.
## Workaround
Register the `.bat` with **no args** (have the batch file default to its serve subcommand), or point `command` directly at the underlying `.exe` (e.g. the venv `python.exe`) with the args.
Hướng dẫn đóng góp
Hướng nghiên cứu
Bắt đầu bằng cách tái hiện lỗi thông qua đường dẫn khởi chạy máy chủ MCP stdio bằng các lệnh echo.bat được cung cấp, sau đó so sánh hành vi giữa các phiên bản 1.0.65 và 1.0.66. Công việc được hoàn tất khi các lệnh .bat và .cmd có đối số không rỗng bắt đầu và hoàn tất quá trình khởi tạo MCP trên Windows, trong khi các trường hợp hiện có không có đối số và có tệp thực thi vẫn tiếp tục hoạt động.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Đánh giá
- Công nghệ
- node.js, shell
- Lĩnh vực
- cli
- Loại issue
- Lỗi
- Độ khó
- 3/5
- Thời gian dự kiến
- 1-2 ngày
- Mức độ hoạt động
- Ít trao đổi
- Độ rõ ràng
- Đặc tả rõ ràng
- Mức phù hợp với người mới
- 65/100