DeepSeek Harness 插件

dsh-github-mcp

GitHub official MCP server bridge for DeepSeek Harness: registers mcp__github__* native tools via @deepseek-ai/dsh-mcp-client, plus a github_file_read tool that reads file contents over REST (fills(英文原文)

跳到安装方式

来源信息

GitHub 仓库
GitRuozhi/dsh-github-mcp
最近更新
2026年8月17日
分类
工具与能力
GitHub stars
1
载体类型
plugin
目录证据
上游声明已找到 dsh.bundle
证据路径
package.json#dsh.bundle
核对版本
0.1.0-rc.8
上游核对日期
2026-08-20

该证据由上游目录提供。本站没有安装、运行或安全审核这个插件。

安装

默认先复制一段 Prompt,让 Agent 读 GitHub 仓库和源码;需要自己装时再切到命令。

复制这段 Prompt,发给 DSH、Codex 或其他 Agent,让它先读 GitHub 仓库和源码。

请先不要安装或执行任何命令。阅读这个插件的 GitHub 仓库、README 和关键源码,然后用清楚、直接的方式回答以下问题,帮助我判断它是否适合我的需求:

1. 这个插件是什么,解决什么问题;
2. 适合哪些用户和典型使用场景;
3. 安装后如何使用,并给出一个最小使用示例;
4. 有哪些已知限制,以及隐私、安全、兼容性或维护风险;
5. 给出“推荐 / 有条件推荐 / 不推荐”的明确建议和理由。

请区分仓库明确说明、根据源码推断和未知信息。证据不足时请明确说明,不要猜测或照抄 README。

GitHub:https://github.com/GitRuozhi/dsh-github-mcp
插件名:dsh-github-mcp
作者:GitRuozhi

检查来源文件

安装前先看这个插件目录里的 README 和其他文件。

文件资源管理器3 个文件
README.md来源说明 · 只读预览

dsh-github-mcp

DSH-GitHub bridge: exposes the official GitHub MCP server as DSH-native tools, and fixes the issue where DSH's bridge discards file content.

After install, the agent can reach GitHub and read files directly through the mcp__github__* tool family and the github_file_read tool — no local Git or gh CLI in between.

Install

dsh plugin --profile web add github:GitRuozhi/dsh-github-mcp

Set GITHUB_TOKEN and restart dsh web. If gh is already logged in on this machine, you can just ask DSH to configure it for you.

Features

✅ Officialtalks to GitHub's official github-mcp-server
✅ Native MCPspeaks MCP directly — no gh wrapper, no hand-written REST
✅ Zero local depsuses GitHub's hosted endpoint https://api.githubcopilot.com/mcp/
✅ Reads file bodiesgithub_file_read fixes the official bridge's dropped-content problem

Tools

Two tool families are added on install:

github_file_read — read a file's contents (decoded to UTF-8 text) or list a directory; private repos work too (needs GITHUB_TOKEN).

**mcp__github__* (44 tools from GitHub's official MCP server)**

  • Search: search_repositories, search_code, search_issues, search_pull_requests, search_commits, search_users
  • Repos: create_repository, fork_repository, list_repository_collaborators, list_branches / create_branch, list_tags / get_tag, list_commits / get_commit
  • Files: get_file_contents, create_or_update_file, delete_file, push_files
  • Releases: list_releases, get_latest_release, get_release_by_tag
  • Issues: list_issues, issue_read, issue_write, sub_issue_write, add_issue_comment, get_label, list_issue_types / list_issue_fields, get_teams / get_team_members
  • Pull requests: list_pull_requests, pull_request_read, create_pull_request, update_pull_request, update_pull_request_branch, merge_pull_request, pull_request_review_write, add_comment_to_pending_review, add_reply_to_pull_request_comment, request_copilot_review
  • Other: get_me, run_secret_scanning

> Model-facing names all carry the mcp__github__ prefix.

Minimal presets

This plugin registers its tools globally, so every preset inherits the GitHub tools — including minimal presets. To opt a preset out, filter them from each system-prompt assembly. Note: DSH's built-in minimal preset cannot mask global plugins; create your own custom minimal preset instead.

> Filter at system-prompt/assemble rather than snapshotting ctx.tools.schemas() at apply time: the plugin registers its tools asynchronously (MCP discovery plus a ctx.effect registration), so a one-time snapshot is empty at apply time and no restriction gets installed. Assembly-time filtering is registration-time independent — whatever registered before the request is filtered out.

// 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 };
# in that preset's agent.cordis.yml
- id: restrict-github
  name: ./restrict-github.js