在 DeepSeek Harness (DSH) 中接入 GitHub MCP Server
August 14, 2026 · View on GitHub
把 GitHub 官方 MCP Server 接入 DeepSeek Harness,让 agent 获得读写 GitHub 仓库的原生能力。 本教程基于 Windows 10 + DeepSeek Harness (dsh) + Clash 代理环境的实战记录。
背景
DeepSeek Harness (DSH) 自带 @deepseek-ai/dsh-mcp-client 插件,支持 stdio 和 streamable-http 两种 MCP 传输。接入后,MCP 服务器的工具会以 mcp__<serverName>__<toolName> 的形式注册为 agent 的原生工具。
本教程使用 本地 stdio 模式 运行 GitHub 官方 MCP Server 二进制,这是最稳定的方案——它不依赖 agent 主进程的网络栈,可独立配置代理,避免与模型 API 的网络路径冲突。
前置条件
| 依赖 | 说明 |
|---|---|
| DeepSeek Harness | 已安装并运行(Web 模式 dsh web) |
| GitHub 账号 | 用于创建 Personal Access Token |
| github-mcp-server 二进制 | 从 GitHub Releases 下载对应平台的版本 |
| (可选)Clash 等代理 | 国内网络访问 GitHub 需要 |
步骤 1:创建 GitHub Fine-grained PAT
-
填写:
- Token name:
dsh-github-mcp - Expiration:按需(建议 90 天)
- Repository access:
All repositories(或指定仓库)
- Token name:
-
Permissions(最小权限原则,按需勾选):
权限 等级 说明 Contents Read and write 读写代码、commit、push Issues Read and write 查看/创建 Issue Pull requests Read and write 查看/创建 PR Metadata Read-only 仓库基础信息(自动必选) Administration 不勾 防止删除/转让仓库 -
点击 Generate token,复制
github_pat_xxx...(只显示一次) -
设置环境变量(PowerShell):
[Environment]::SetEnvironmentVariable("GITHUB_PERSONAL_ACCESS_TOKEN", "github_pat_你的token", "User")
步骤 2:下载 github-mcp-server 二进制
从 https://github.com/github/github-mcp-server/releases 下载最新 release 对应平台的压缩包(如 github-mcp-server_Windows_x86_64.zip),解压后记录二进制绝对路径。
坑 1:国内网络直接下载 release 经常中断(文件 8MB+ 会被截断)。如果
github.com下载不稳定,可用curl -L跟随重定向链下载,或用代理下载。
验证二进制可用:
# Windows
github-mcp-server.exe --version
# 应输出 Version: x.y.z
步骤 3:修改 DSH profile 配置
编辑 profile 的 patch 文件:
# Windows 默认路径
C:\Users\Administrator\.dsh\profiles\web\cordis.patch.yml
写入:
# Your patch layer for this dsh profile, applied after every bundle layer
- insert:
- id: mcp-github
name: '@deepseek-ai/dsh-mcp-client'
config:
serverName: github
transport: stdio
command: C:\path\to\github-mcp-server.exe
args: ['stdio']
env:
GITHUB_PERSONAL_ACCESS_TOKEN: !!js process.env.GITHUB_PERSONAL_ACCESS_TOKEN
toolCallTimeoutMs: 60000
坑 2(关键):新插件条目必须写在
- insert:块里,不能直接写- id: xxx顶层条目。加载器只认insert列表和按 id 覆盖的条目,裸条目会被静默忽略。
坑 3(关键):patch 引用的插件必须出现在 profile 的依赖清单里。编辑 profile 的
package.json:
{
"name": "dsh-profile-web",
"private": true,
"dependencies": {
"@deepseek-ai/dsh-mcp-client": "0.1.0-rc.6"
},
"dsh": {
"profile": {
"bundles": [
"@deepseek-ai/dsh-base",
"@deepseek-ai/dsh-web-app"
]
}
}
}
步骤 4:重启 DSH
必须在新的终端窗口里启动,确保读到新设置的环境变量:
# 1. 先验证环境变量(必须看到 token 再继续)
echo %GITHUB_PERSONAL_ACCESS_TOKEN%
# 2. 杀掉旧 DSH 进程
taskkill /F /PID <旧PID>
# 3. 重启
dsh web
坑 4(关键):
setx写入的环境变量不会自动生效到已打开的窗口。必须关掉所有旧窗口,新开一个窗口再启动 DSH,否则进程读不到 token。
步骤 5:验证
-
检查 DSH 是否正确 spawn 了 MCP 二进制:
Get-Process -Name "github-mcp-server" # 应能看到进程,且父进程是 DSH 的 node 进程 -
验证 MCP 握手(可选,手动测试 stdio 协议):
# 向二进制发送 initialize + tools/list echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"test","version":"1.0"}}}' | github-mcp-server.exe stdio -
直接对话验证:让 agent"查看我的 GitHub 账户",如果返回账户信息,说明
mcp__github__*工具已生效。
常见坑汇总
| # | 现象 | 原因 | 解决 |
|---|---|---|---|
| 1 | release 下载不完整 | 网络对 github.com 不稳 | 用 curl -L 跟重定向或走代理 |
| 2 | MCP 工具没出现,配置"看起来对" | patch 裸条目被忽略 | 必须用 - insert: 块 |
| 3 | 插件无法解析 | 依赖未在 package.json 声明 | 在 profile package.json 添加依赖 |
| 4 | 重启后 token 读不到 | setx 不刷新已开窗口 | 新开窗口再启动 |
| 5 | 模型 API 报错(如 DeepSeek 请求失败) | 全局 HTTPS_PROXY 干扰了模型 API | 别用全局代理;stdio 模式可独立配置代理 |
| 6 | 远程 streamable-http 连不上 | agent 主进程的 fetch 不走系统代理 | 用本地 stdio 模式替代 |
本地 stdio vs 远程 streamable-http
| 维度 | 本地 stdio | 远程 streamable-http |
|---|---|---|
| 连接 | agent spawn 本地二进制 | agent 直连远程 URL |
| 代理 | 二进制独立环境变量,可单独配 | 依赖 agent 主进程网络栈 |
| 影响面 | 不影响 agent 其他网络请求 | 全局代理会干扰模型 API |
| 适用 | 国内网络、有代理需求 | 网络直连顺畅的环境 |
推荐优先用本地 stdio 模式,隔离性最好。
参考资料
- github/github-mcp-server — 官方 MCP Server
- Model Context Protocol — MCP 协议文档
- DeepSeek Harness — DSH 官方仓库
本教程来自实际配置记录,基于 DeepSeek Harness + Windows 环境。