github / github/copilot-cli

Windows: v1.0.66 fails to start stdio MCP servers when command is a .bat/.cmd with args (regression from 1.0.65)

Đang mở
#3,958 1 bình luận 0 reaction 0 người được giao Xem trên GitHub
area:mcp area:platform-windows
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

Mở 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

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.