Desktop app: sessions die minutes after spawn — "GitHub credential registration is no longer available for this session" makes the github-mcp-server catalog stale and fatal
まだ誰も着手していません。
評価
- 難易度
- 5/5
- 見積もり時間
- 1週間以上
- 初心者へのやさしさ
- 35/100
- issue の種類
- バグ
- 明瞭さ
- おおむね明確
- 活発さ
- 活発
- 技術スタック
- github, rust
- 領域
- api, authentication, cli
調査の方向性
Reproduce the failure in a desktop-app worktree session using web_search, then compare it with the standalone CLI. Start with ~/.copilot/logs/process--.log and the github-mcp-server credential-registration and tool-catalog paths described in the report. Done means credentials remain usable or refresh on demand, auth loss is isolated to a tool error, and the session does not terminate.
索引モデルが issue の本文から書いたものです。
説明
Environment
- GitHub Copilot desktop app 1.1.22 (commit
c3daa01), macOS arm64, bundled CLI 1.0.84-5 (server mode, stdio, Rust JSON-RPC engine) - Single github.com account signed in to the app;
gh auth status(bundledgh2.98.0, using the app-exportedGH_TOKEN) reports a valid token andgh issue list/gh repo viewsucceed with it - Standalone CLI 1.0.86 (
/opt/homebrew/bin/copilot) on the same machine/account is not affected
Summary
In desktop-app sessions the per-session GitHub credential registration that the CLI server's built-in github-mcp-server uses (dynamic header provider) disappears ~3–5 minutes after the CLI process spawns. github-mcp-server initialises fine at warm-up, but the first call to any of its tools (web_search, github-mcp-server-*) then fails with a header-provider error, the MCP tool catalog is marked stale, and every subsequent model turn fails until the session ends with session.end reason: error. Background sub-agents in the same process die with it. The app UI reports "you are no longer logged in to github-mcp-server" and links to the MCP list, but the built-in server is not listed there, so there is nothing the user can re-authenticate. Three full app restarts did not help.
Steps to reproduce
- Create a new worktree session in the desktop app and wait ~3 minutes.
- Ask the agent to call
web_search(or anygithub-mcp-server-*tool). - Observe the tool error, then repeated session errors on the following turns, then the session terminates.
Actual behaviour
Tool result:
MCP tool catalog changed before tool "github-mcp-server-web_search" could be invoked: Failed to verify cached MCP tools: MCP request failed: Transport send error: unexpected server response: dynamic header provider failed: GitHub credential registration is no longer available for this session
Followed by 5 × session.error:
Execution failed: Failed to refresh MCP tools for server github-mcp-server; the last catalog is stale
then session.end with reason: error — the CLI process exits and the worktree session is unusable.
CLI process log (~/.copilot/logs/process-<spawn>-<pid>.log, trimmed):
18:58:12.987Z [INFO] Starting CLI in server mode (stdio)
18:58:14.824Z [INFO] [rust:rmcp::service] Service initialized as client <- github-mcp-server OK at warm-up
18:58:44.524Z [INFO] Created session: db372b5f-…
19:01:02.593Z [WARNING] [rust:copilot_runtime::session::mcp::tool_catalog] Failed to list MCP tools for github-mcp-server; continuing with the previously listed tools: MCP request failed: Transport send error: Transport [mcp::client::ToolListRevisionTransport<…StreamableHttpClientWorker<…>>] error: unexpected server response: dynamic header provider failed: GitHub credential registration is no longer available for this session
… (30+ repeats until the session terminates)
Processes that never call github-mcp tools show the same root symptom non-fatally, from ~2 s after spawn, in the remote exporter:
[WARNING] [rust:remote::api_session_exporter] remote session batch flush failed {"error":"GitHub credential authority error: GitHub token provider registration \"<per-process uuid>\" is unavailable", …}
Expected behaviour
- The credential registration should remain valid for the lifetime of the CLI process, or be re-established on demand when the header provider needs it.
- A failed header refresh /
tools/listshould surface as a tool error only — it should not invalidate the catalog for unrelated model turns, and it must not terminate the session. - If the built-in server's auth is lost, the UI should offer a way to re-authenticate it (the current "no longer logged in" message points to an MCP list that does not contain the built-in server).
Timeline (UTC, 2026-09-18) — four sessions lost
| CLI process spawn | First failure | Δ |
|---|---|---|
| 18:07:08 | 18:10:06 | ~3 min |
| 18:11:56 | 18:15:36 | ~3.5 min |
| 18:38:57 | 18:43:46 | ~5 min |
| 18:58:12 | 19:01:02 | ~3 min |
The app's accounts.token_updated_at was rewritten at 18:11:42 — inside the failure window — yet the failures continued in processes spawned after that and after each of three app restarts (18:37:51, 18:38:19, 18:55:46).
Also observed 2026-09-16 08:12 (app 1.1.21).
Possible regression: on 2026-09-08 (app 1.1.15) the identical dynamic header provider failed: GitHub credential registration is no longer available for this session error occurred in a sub-agent, but it was a tool-level failure only — the session carried on. Since 1.1.21 the stale catalog is fatal. This looks like two issues: (a) registration loss (older), and (b) fatal stale-catalog handling (newer).
Ruled out
- Prompts/skills: reproduces with a bare
web_searchcall. - Token validity: the app-exported token works for
ghAPI calls; a standalonecopilot -p "…call web_search…" --allow-tool web_searchsucceeds in ~27 s from the same machine/account. - Project ↔ account link: the projects are Azure DevOps repos (
projects.github_account_idis NULL by design); this only affectscreate_issue, and the failures reproduce regardless. - App state: three app restarts, no change. App logs (
github-app.<pid>.log) contain no credential/token-provider entries at the failure times. - Other MCP servers (Azure DevOps stdio, Context7/Microsoft Learn HTTP) keep working in the same sessions.
Impact: any agent workflow that touches web_search or github-mcp-server-* in a desktop-app session is currently unusable; the standalone CLI is the only workaround.
Logs
Full CLI process logs for all four failed sessions plus the non-fatal exporter variant, and the app logs, are available — happy to share them privately on request.
- 主要言語
- Shell
- スター
- 11.2k
- フォーク
- 1.9k
- 平均マージ
- 14時間 16分
- マージ済み PR(30日)
- 6
コントリビューションガイド
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
github/copilot-cli のほかの issue
-
triage
難易度 2/5 1〜3時間 初心者へのやさしさ 75/100
github/copilot-cli#4932 ·
-
triage
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
github/copilot-cli#4909 ·
-
triage
難易度 2/5 1〜3時間 初心者へのやさしさ 76/100
github/copilot-cli#4906 ·
-
triage
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
github/copilot-cli#4848 ·
-
area:agents area:mcp
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
github/copilot-cli#4729 ·
github/copilot-cli の issue をすべて見る
似ている issue
-
Issue-Enhancement Needs-Triage
難易度 1/5 1時間未満 初心者へのやさしさ 86/100
PowerShell/PowerShell#28061 · リアクション 2 件 ·
-
Feature Request: Add ability to load custom environment variables in linux-exec-server-installer.sh オープン
難易度 2/5 1〜3時間 初心者へのやさしさ 84/100
microsoft/vscode-remote-release#11867 ·
-
AuTest Bug Tests
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
apache/trafficserver#13714 ·
-
Update to NCCL 2.32 オープン
難易度 2/5 1〜3時間 初心者へのやさしさ 70/100
conda-forge/nccl-feedstock#166 ·
-
bug
難易度 2/5 1〜3時間 初心者へのやさしさ 86/100
vllm-project/agentic-api#358 · コメント 1 件 ·