dsh-onedev:让 DSH 通过 MCP 直连 OneDev 管理 REST API

前言

在 DeepSeek Harness(DSH)里做 DevOps 相关智能体时,常见做法是让人去 OneDev Web 界面点选,或自己写脚本调 /~api/*。OneDev 本身提供完整的 Git / CI / CD 与管理 REST API,但模型侧缺少一套带鉴权、可枚举、参数有 Schema 的工具面。

下面介绍的 dsh-onedev(仓库 Altermoe/dsh-onedev,维护者 Altermoe)是 DSH 社区插件,分类为模型推理。它内置独立 MCP 服务 dsh-onedev-mcp,经 DSH 自带的 @deepseek-ai/dsh-mcp-client 桥接后,OneDev 管理操作会以 mcp__onedev__… 形式出现在 harness 工具列表里,模型可直接调用,而不必绕 Web UI。

这是什么

dsh-onedev(npm 包名 dsh-onedev,当前版本 0.1.0,MIT 许可证)做两件事:

  1. 提供 MCP Server,用 OneDev 访问令牌或账号密码访问 OneDev REST API(/~api/*)。
  2. 作为 DSH bundle 时,在 dsh Web Settings 增加一级 OneDev 配置区,用卡片管理多环境连接,运行时从凭据存储读取,一般无需再配 ONEDEV_* 环境变量。

简介与 GitHub 仓库标题一致:DeepSeek Harness Plugin for OneDev。

核心功能

以下能力均来自项目 README 与 docs/dsh-integration.md。

MCP 工具面

  • 61 个工具:约 57 个面向管理(用户、组、角色、组成员与管理员授权、项目、授权、构建 Agent、Agent Token、构建与日志、全局设置、访问令牌等);另有 3 个 OneDev 官方文档查询工具,以及 环境发现 onedev_list_environments。
  • 通用直连 onedev_api_request:对 ONEDEV_URL/~api/* 发起任意已鉴权请求,覆盖未单独封装的 REST 面。
  • 文档工具独立可用:onedev_docs_search / onedev_docs_read / onedev_docs_list 对接 docs.onedev.io,无需 OneDev 连接或凭据即可使用。
  • 工具由 Zod 生成 JSON Schema,便于模型理解参数。

多环境与传输

  • 可配置 多个 OneDev 环境(各自 URL、凭据、备注 slug);除 onedev_list_environments 外,各工具可选 environment 参数,默认指向 primary 环境。
  • 两种传输:stdio(推荐给 DSH 本地挂载)与 streamable-http(远程,路径 /mcp)。

鉴权与安全

  • Bearer 访问令牌(ONEDEV_TOKEN)或 账号密码(ONEDEV_AUTH_TYPE=password + ONEDEV_USERNAME / ONEDEV_PASSWORD,HTTP Basic)。
  • 可选 只读模式 ONEDEV_MCP_READONLY=true 拒绝所有 mutating 请求;可配置 API 超时(如 ONEDEV_API_TIMEOUT_MS)。

DSH Web 与本地 Setup

  • 安装 bundle 后:Settings → OneDev 以卡片展示环境,可新增、编辑、探测连接、设 primary、删除;Host 提供 loopback /api/onedev/config 与 /api/onedev/probe。
  • Setup 控制台:npm run setup(或 node bin/dsh-onedev-mcp.mjs --setup)在 http://127.0.0.1:8770/ 录入 URL 与凭据并持久化(端口可用 ONEDEV_MCP_PORT 修改),缓解「必须先登录 Web UI 造 Token」的问题。凭据默认写入 ~/.config/dsh-onedev/config.json(权限 0600,可用 ONEDEV_CONFIG_FILE 覆盖)。

桥接后工具命名规则:serverName 设为 onedev 时,例如 mcp__onedev__users_list。

环境与依赖

  • Node.js:^22.19.0 || >=24.0.0(项目在 Node 26 上开发测试)。
  • DSH:作为 bundle 使用时需 DeepSeek Harness 0.2.x(engines.dsh: ^0.2.0-rc.2);独立运行 MCP 不依赖 DSH。
  • 可访问的 OneDev 服务器(示例:http://localhost:6610);管理类接口通常需要具备相应权限的 Token 或管理员账号。

安装与启用

从源码构建 MCP

在克隆或解压后的仓库目录执行(README 原文):

npm install        # install dependencies
npm run build      # compile TypeScript → dist/
npm test           # build + unit tests + stdio smoke + HTTP smoke

日常启动 MCP:

npm start
# 等价于 node bin/dsh-onedev-mcp.mjs

开发模式:

npm run dev

首次配置凭据(可选,与 Web Settings 共用存储):

npm run setup

作为 DSH profile bundle(推荐)

docs/dsh-integration.md 说明:v0.1.0 起插件附带 dsh bundle。将包加入 profile 的 dsh.profile.bundles 并完成安装后,cordis.patch.yml 会插入 dsh-onedev Host 插件与 dsh-onedev-mcp 的 @deepseek-ai/dsh-mcp-client 行(env: {})。连接信息在 Settings → OneDev 配置;MCP 每次工具调用从凭据存储读取,保存后通常 无需重启 dsh。

升级 bundle 后需执行 npm run build,并按项目脚本说明重启 dsh(如 scripts/restart-dsh.sh)。

手动挂载 stdio(YAML 示例)

若未走 bundle,可在 dsh 配置中增加 @deepseek-ai/dsh-mcp-client 条目(路径需改为你机器上的 绝对路径):

plugins:
  - id: dsh-onedev
    name: '@deepseek-ai/dsh-mcp-client'
    config:
      serverName: onedev
      transport: stdio
      command: node
      args: ['/absolute/path/to/dsh-onedev/bin/dsh-onedev-mcp.mjs']
      env:
        ONEDEV_URL: !!js process.env.ONEDEV_URL
        ONEDEV_TOKEN: !!js process.env.ONEDEV_TOKEN
      toolCallTimeoutMs: 60000
      failOnStartupError: false

若已通过 npm run setup 或 Web Settings 写入凭据,env 整段可省略;环境变量与存储同时存在时,环境变量优先。

HTTP 模式(远程共享)

在可访问 OneDev 的主机启动:

ONEDEV_URL=https://onedev.internal:6610 \
ONEDEV_TOKEN="$ONEDEV_TOKEN" \
ONEDEV_MCP_TRANSPORT=streamable-http \
ONEDEV_MCP_HOST=0.0.0.0 \
ONEDEV_MCP_PORT=8765 \
node /absolute/path/to/dsh-onedev/bin/dsh-onedev-mcp.mjs

DSH 侧使用 transport: streamable-http 与 url: http://onedev-mcp-host:8765/mcp(详见集成文档 Option B)。

典型用法

  1. 发现环境:调用 mcp__onedev__onedev_list_environments,必要时带 {"query":"prod"};后续工具传入 "environment":"<slug>"。
  2. 列用户(主环境):mcp__onedev__users_list → {"term":"alice","count":50}。
  3. 列用户(指定环境):{"environment":"staging","term":"alice"}。
  4. 授予管理员:先 mcp__onedev__group_get_id → {"name":"Administrators"},再 group_members_add 传入 userId 与 groupId。
  5. 建项目:mcp__onedev__project_create → {"name":"team/app","codeManagement":true}。
  6. 只读防护:设置 ONEDEV_MCP_READONLY=true。
  7. 未封装接口:mcp__onedev__onedev_api_request → {"method":"GET","path":"/issues?project=app"}。

完整工具表见仓库 docs/tools.md(由 npm run docs 生成)。

适用场景与注意

适合:已在用 OneDev 做 Git/CI/CD,希望在 DSH 对话或自动化里用自然语言或 Agent 流程操作用户、项目、Agent、构建与设置;或需要同时管理多套 OneDev 实例的团队。

务必注意:

  • MCP 与 Host 插件在 当前 dsh 进程权限 下运行;Token 或管理员密码具备的能力即模型可触达的能力。安装前请阅读源码与 MIT 许可证,并评估是否开启只读模式。
  • 管理类 Token 需具备文档所述管理员权限;401/403 多为 Token 权限或过期问题。
  • 社区目录 skillhub.cn 插件页 与 GitHub 由社区维护,与 DeepSeek / 幻方无官方从属关系;DSH 生态遵循「一切皆插件」,本文事实以仓库文档为准。

结尾

dsh-onedev 把 OneDev 管理 REST API 收成 MCP 工具集,并可选 Web / Setup 管理多环境凭据,适合把 OneDev 运维纳入 DSH 智能体工作流。进一步了解可访问 目录页 与 GitHub 仓库(含 docs/dsh-integration.md 与 docs/onedev-api.md)。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye