skip to content
BlogZzz
Table of Contents

背景

  1. opencode CLI
  2. VSCode Marketplace 的 opencode 擴充套件

基本上安裝 GitHub MCP,PAT 也設定好了,但出現了一些問題

VSCode CLI 內執行 opencode mcp list GitHub MCP 顯示 connected

但是由擴充套件打開的 opencode 指令下的 /mcps ,GitHub MCP 一直是 failed

不是 MCP 本身壞掉,而是 VSCode 擴充套件讀不到在 shell 裡 export 的環境變數

先說結論

其實這問題根本沒什麼,單純只是我想搞清楚而已…

不要用 Marketplace 的擴充套件問題就眼不見為淨 or 直接寫死 PAT 到 ~/.config/opencode/opencode.json

但我只是想釐清問題隨手記錄一下

從頭開始來,安裝與設定(一步一步)

1) 安裝 opencode CLI

用習慣的方式安裝 opencode(官方文件為準) 安裝後先確認 CLI 可以執行:

Terminal window
opencode --version

2) 安裝 VSCode 擴充套件

在 VSCode Marketplace 安裝 opencode 擴充套件,重啟 VSCode

3) 準備 GitHub PAT

在 GitHub 產生 PAT(classic 或 fine-grained 皆可),並保留 token

4) 建立 opencode 設定檔

opencode 的設定檔位置是:

~/.config/opencode/opencode.json

如果資料夾或檔案不存在,先建立:

Terminal window
mkdir -p ~/.config/opencode

內容範例:

{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"github": {
"type": "remote",
"url": "https://api.githubcopilot.com/mcp/",
"enabled": true,
"oauth": false,
"headers": {
"Authorization": "Bearer {env:GITHUB_MCP_PAT}"
}
}
}
}

這代表 opencode 會從環境變數 GITHUB_MCP_PAT 讀取 token VSCode 擴充套件也會讀同一份設定檔

5) 先用 CLI 確認 github mcp 是否成功

Terminal window
export GITHUB_MCP_PAT="你的 token"
opencode mcp list

如果顯示結果 github connected

只要這一步成功,CLI 就是 OK 的

6) 在 VSCode 內用 opencode 擴充套件 確認 github mcp 是否成功

開啟 VSCode 後,開啟 opencode 執行 /mcps

如果顯示結果 github connected

只要這一步成功,擴充套件就是 OK 的

問題描述

  • CLI 端 opencode mcp list 顯示正常 connected,
  • 擴充套件打開的 opencode /mcps 顯示 github failed
  • 常見錯誤:SSE error: Non-200 status code (400)

如果重啟 VSCode 後連 CLI 也失敗,通常就是 token 變成空值了

解法

  • 解法是「同一個終端啟動 VSCode」
  • 長期解法是「專案內用 direnv 自動載入」

為什麼 CLI 正常,擴充套件的卻失敗

opencode mcp list 在 CLI 會吃到當前 shell 的環境變數, 而 VSCode 的 GUI 是另一個程序,如果是從 Dock/Launcher 啟動, 通常不會載入 ~/.zshrc

因此你在 Terminal 執行過:

Terminal window
export GITHUB_MCP_PAT="..."

CLI 能用,但 VSCode 內的 /mcps 會看到空值,最後就回 400

最短修法:同一個終端啟動 VSCode

Terminal window
export GITHUB_MCP_PAT="你的 token"
code .

這樣 VSCode 會繼承你的環境,擴充套件就能讀到 GITHUB_MCP_PAT

長期方案:direnv 專案化配置

「只在某個專案生效」,而且未來要方便換 token,direnv 很適合

1) 安裝 direnv

Terminal window
brew install direnv

2) 在 zsh 啟用 hook

把這行加到 ~/.zshrc

Terminal window
eval "$(direnv hook zsh)"

3) 在專案內新增 .envrc

Terminal window
export GITHUB_MCP_PAT="你的 token"

建議把 .envrc 放進 .gitignore,避免 token 被提交

4) 允許這個專案

Terminal window
direnv allow

5) 從同一個終端啟動 VSCode

Terminal window
code .

這樣 token 只在專案內生效,想換就改 .envrc

排查清單

  • echo "$GITHUB_MCP_PAT" 是否有值
  • export GITHUB_MCP_PAT= 是否不小心把變數清空
  • VSCode 是不是從 Dock 啟動
  • /mcps 的錯誤是否為 400

只要把環境變數來源釐清,通常就能一次解掉