前言¶
在 DSH 裏讓智能體訪問 GitHub,常見做法是先在本地準備 Git 或 gh CLI,再讓模型調用這些命令行工具;另一類做法是通過 DSH 的 MCP bridge 連接 GitHub MCP server。後一種鏈路少了本地命令行中間層,但已有 bridge 會丟掉文件內容。
dsh-github-mcp 針對這個鏈路做橋接:把 GitHub 官方 MCP server 暴露爲 DSH 原生工具,並提供 github_file_read 工具讀取文件內容。
這是什麼¶
dsh-github-mcp 是 GitRuozhi 維護的 DSH 插件,許可證爲 MIT,package.json 中版本爲 1.1.0。
它把 GitHub 官方 MCP server 註冊爲 DSH 原生工具,安裝後主要通過兩個入口訪問 GitHub:
mcp__github__*工具族;github_file_read工具。
插件使用 GitHub hosted endpoint:
https://api.githubcopilot.com/mcp/
事實說明中寫明,它無需本地 Git 或 gh CLI 中間層。package.json 聲明瞭兩個 peer dependencies:
"@deepseek-ai/dsh-mcp-client": ">=0.1.0-rc.6",
"@deepseek-ai/dsh-tools": ">=0.1.0-rc.6"
核心功能¶
暴露 GitHub 官方 MCP 工具¶
安裝後,DSH 可以調用 mcp__github__* 工具族。資料寫明這些工具來自 GitHub 官方 MCP server,共 44 tools。
本文可覈實的示例包括:
search_repositories
get_file_contents
list_issues
create_pull_request
merge_pull_request
模型側看到的名字都帶 mcp__github__ 前綴。
讀取文件內容或目錄¶
github_file_read 用於讀取文件內容,或列出目錄。
已覈實說明寫明:文件內容會 decoded to UTF-8 text。私有倉庫支持需要 GITHUB_TOKEN。
使用 GitHub hosted MCP endpoint¶
插件使用:
https://api.githubcopilot.com/mcp/
因此接入方式不依賴本地 Git 倉庫,也不依賴本地 gh CLI 作爲中間層。
安裝與啓用¶
先執行插件安裝命令:
dsh plugin --profile web add github:GitRuozhi/dsh-github-mcp
這一步會把 dsh-github-mcp 添加到 web profile 下。
如果需要使用私有倉庫,設置 GITHUB_TOKEN 後重啓 dsh web:
Set GITHUB_TOKEN and restart dsh web
如果本機 gh 已經登錄,文檔給出的說法是:可以直接讓 DSH 幫你配置。
典型用法¶
下面給出幾個從已覈實資料中可覈對的使用路徑。
使用 mcp__github__* 工具¶
安裝後,可以在 DSH 中直接使用 mcp__github__* 工具族。示例工具名包括:
search_repositories
get_file_contents
list_issues
create_pull_request
merge_pull_request
這些工具名對應 GitHub 官方 MCP server 的工具,模型側統一帶 mcp__github__ 前綴。
使用 github_file_read 讀取文件或目錄¶
github_file_read 可用於讀取文件內容,也可以用於列出目錄。
適合的場景是:你希望 DSH 直接拿到某個倉庫裏的文件文本,而不是隻拿到路徑、元數據或被 bridge 丟棄後的空內容。
使用私有倉庫¶
私有倉庫需要設置 GITHUB_TOKEN,然後重啓 dsh web。
最小 preset 與工具過濾¶
dsh-github-mcp 會把工具註冊到全局,因此所有 preset 都會繼承 GitHub tools,包括 minimal presets。
如果你想在某個 preset 中排除這些工具,建議在 system-prompt/assemble 階段過濾,而不是在 apply 階段一次性快照 ctx.tools.schemas()。原因是插件註冊工具是異步的,包含 MCP discovery 和 ctx.effect registration;在 apply 時做一次性快照可能拿到空結果,導致過濾邏輯沒有生效。assembly-time filtering 不依賴具體註冊時機,請求組裝時再過濾即可。
已覈實的建議是:DSH 內置的 minimal preset 不能 mask global plugins;需要創建自定義 minimal preset 來實現隔離。
下面給出 README 中的過濾示例。
這個 JS 文件用於在 system prompt 組裝時移除 mcp__github__* 和 github_file_read:
// restrict-github.js
const name = 'restrict-github';
const inject = ['tools'];
function apply(ctx) {
ctx.on('system-prompt/assemble', async (_assembly, _context, next) => {
const assembled = await next();
try {
const tools = assembled && Array.isArray(assembled.tools) ? assembled.tools : [];
const filtered = tools.filter((tool) => {
const toolName = tool && typeof tool.name === 'string' ? tool.name : '';
return !(toolName.startsWith('mcp__github__') || toolName === 'github_file_read');
});
if (filtered.length === tools.length) return assembled;
return { ...assembled, tools: filtered };
} catch (error) {
// A filter bug must never brick a session: keep every tool.
return assembled;
}
});
}
export { apply, inject, name };
在對應 preset 的 agent.cordis.yml 中掛載該 filter:
# in that preset's agent.cordis.yml
- id: restrict-github
name: ./restrict-github.js
適用場景與注意¶
適合這類使用者:
- 希望 DSH 直接調用 GitHub 官方 MCP server 的
mcp__github__*工具; - 需要讀取 GitHub 倉庫中的文件內容,而不是隻依賴本地 Git 或
ghCLI; - 需要在私有倉庫場景下通過
GITHUB_TOKEN訪問 GitHub; - 需要控制某個 preset 是否繼承全局 GitHub 工具。
使用前需要確認:
- 插件許可證爲 MIT;
package.json要求@deepseek-ai/dsh-mcp-client >=0.1.0-rc.6和@deepseek-ai/dsh-tools >=0.1.0-rc.6;- 私有倉庫需要
GITHUB_TOKEN; - 插件工具默認全局註冊,所有 preset 都會繼承;
- 插件以當前
dsh進程權限運行,安裝前建議檢查源碼、依賴和許可證。
小結¶
dsh-github-mcp 的核心價值,是把 GitHub 官方 MCP server 暴露爲 DSH 原生工具,並用 github_file_read 補齊文件內容讀取這一環節。安裝後可以直接使用 mcp__github__* 工具族和 github_file_read,私有倉庫通過 GITHUB_TOKEN 啓用。
倉庫地址:
https://github.com/GitRuozhi/dsh-github-mcp
目錄頁(來自插件線索,未在本次抓取資料中進一步覈驗):
https://www.skillhub.cn/plugins/GitRuozhi/dsh-github-mcp