github / github/copilot-cli

Remote/HTTP MCP servers (e.g. atlassian) are stranded 'failed' after every /clear or session relaunch

未关闭
#4,818 0 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

还没有人认领这个 Issue。

triage
主要语言
Shell
星标
11.2k
派生
1.9k
平均合并
14 小时 16 分钟
30 天内合并 PR
6

描述

Summary

Remote (HTTP) MCP server connections are reliably stranded in a failed state whenever the CLI performs a foreground-session handoff — which happens on every /clear, and apparently on session resume/relaunch too. The MCP connection graph is torn down and rebuilt during the handoff, and slower remote/OAuth-backed servers lose the reconnect race and never recover automatically.

Environment

  • CLI version: 1.0.83 (macOS, confirmed already latest via in-app update check)
  • MCP server affected: atlassian (https://mcp.atlassian.com/v2/mcp, HTTP transport with Authorization header)
  • Other MCP servers configured (github-mcp-server, codegraph, local-rag — local/stdio) are not visibly affected, likely because their reconnect is fast enough to win the race.

Steps to reproduce

  1. Start a Copilot CLI session with the atlassian MCP server configured (~/.copilot/mcp-config.json, HTTP transport).
  2. Confirm it connects fine (/mcp show atlassian → connected, tools listed).
  3. Run /clear (or relaunch/resume a session).
  4. Run /mcp show atlassian again.

Expected

atlassian reconnects cleanly like the other MCP servers.

Actual

atlassian is left in:

{
  "name": "atlassian",
  "status": "failed",
  "error": "MCP server \"atlassian\" connection was cancelled"
}

It does not self-heal — it requires a manual reconnect action or a full CLI restart, and even a full restart reproduces the same failure deterministically (confirmed across two separate relaunches, ~20 minutes apart).

Root cause (from ~/.copilot/logs/process-*.log)

Every /clear/relaunch briefly registers a throwaway foreground session, then immediately unregisters it in favor of the real one, within milliseconds:

17:27:22.425Z [INFO] Registering foreground session: 6266dbfb-39da-4797-9265-c37d9655a3fd
17:27:28.717Z [INFO] Unregistering foreground session: 6266dbfb-39da-4797-9265-c37d9655a3fd
17:27:28.720Z [INFO] Registering foreground session: d89d1d9a-99c4-4247-86fe-a75b4da5daad
17:27:28.783Z [INFO] Closing session 6266dbfb-39da-4797-9265-c37d9655a3fd

This handoff triggers a full MCP graph reload while a reload lock is still held from the previous teardown:

17:05:05.167Z [WARNING] [rust:copilot_runtime::session::mcp::session_host] MCP reload lock still held at disposal; draining the graph without it

Every MCP server — including atlassian — gets re-initialized and then almost immediately cancelled mid-handshake:

17:27:26.104Z [INFO] [rust:rmcp::service] Service initialized as client {... "name": "atlassian-mcp-server" ...}
17:27:28.809Z [INFO] [rust:rmcp::service] task cancelled
17:27:28.809Z [INFO] [rust:rmcp::service] serve finished {"quit_reason":"Cancelled"}

Local/stdio servers appear to reconnect fast enough afterward to recover; atlassian's remote HTTP+OAuth handshake is slower and consistently loses the race, leaving it permanently failed with no automatic retry.

Confirmed not a network/auth issue independently:

  • DNS resolves fine for mcp.atlassian.com.
  • curl https://mcp.atlassian.com/v2/mcp returns 401 (server reachable, no valid header supplied in the manual test — expected).
  • ATLASSIAN_MCP_AUTH_HEADER env var is set.

Impact

Every /clear (a very common action) breaks the Atlassian MCP integration and requires a manual reconnect or CLI restart to restore it — significant daily friction for anyone using an HTTP-based MCP server.

Suggested fix

  • Don't tear down/reinitialize already-connected MCP servers on a foreground-session handoff that isn't actually changing MCP config.
  • If a reload is unavoidable, retry a server that was cancelled mid-handshake instead of leaving it permanently in failed state.
  • Respect the "MCP reload lock still held at disposal" case by waiting for the lock instead of draining the graph without it.

贡献指南

打开贡献指南

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

调研方向

使用配置在 ~/.copilot/mcp-config.json 中的 HTTP server 重现故障,然后检查 MCP reload lock 附近的前台会话交接和 copilot_runtime::session::mcp::session_host 日志。将 /clear 和重新启动的行为与文档中记录的取消序列进行比较。完成标准是:远程服务器在任一交接后仍保持连接,或自动恢复连接,而无需手动重新连接。

由索引模型根据 Issue 内容生成。

评估

技术栈
rust
领域
api, cli, networking
Issue 类型
缺陷
难度
4/5
预计耗时
3-5 天
活跃度
活跃
描述清晰度
基本清楚
新手友好度
45/100

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。