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)。

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

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

小夜