Harness
官方存取並與 Harness 平台資料互動,包括管道、儲存庫、日誌及成品註冊表。
你可以用 Harness MCP 做什麼?
- 列出 Harness 資源 — 請您的 AI 使用
harness_list列出組織、專案、管線或其他資源。 - 擷取資源詳細資料 — 透過
harness_get取得任何 Harness 資源(如管線或服務)的完整詳細資料。 - 建立新資源 — 指示您的 AI 使用
harness_create建立管線、服務或其他實體。 - 跨專案探索 — 查詢所有專案中的失敗執行或資源;代理程式會動態瀏覽帳戶階層。
- 多使用者驗證 — 在共用部署中,每個工作階段可透過
x-harness-api-key標頭使用自己的 Harness API 金鑰進行驗證。
文件
Harness MCP Server 2.0
一個 MCP(Model Context Protocol)伺服器,讓 AI 代理程式透過 11 個整合工具和 255 種資源類型,完整存取 Harness.io 平台。
為什麼使用這個 MCP 伺服器
大多數 MCP 伺服器將每個 API 端點對應到一個工具。對於像 Harness 這樣廣泛的平台,這意味著 240+ 個工具——而隨著工具數量增加,LLM 在工具選擇上的表現會變差。上下文視窗會被 schema 填滿,而且每個新端點都意味著新程式碼。
這個伺服器的建構方式不同:
- 11 個工具、255 種資源類型。 一個基於註冊表的派發系統將
harness_list、harness_get、harness_create等路由到任何 Harness 資源——管線、服務、環境、組織、專案、功能旗標、成本資料等。LLM 只需從 11 個工具中選擇,而不是數百個。 - 完整的平台涵蓋範圍。 41 個預設工具集,涵蓋 CI/CD、GitOps、功能旗標、雲端成本管理、安全測試、混沌工程、資料庫 DevOps、內部開發者入口網站、軟體供應鏈、基礎架構即程式碼管理、發布管理、治理、服務覆寫、知識圖譜等。需要時可選用 Ansible 和可觀測性評估涵蓋範圍。
- 開箱即用的多專案工作流程。 代理程式會動態探索組織和專案——無需硬編碼環境變數。詢問「顯示所有專案中失敗的執行」,代理程式就能導覽完整的帳戶階層。
- 35 個提示詞模板。 為常見工作流程預先建置的提示詞:端到端建置與部署應用程式、除錯失敗的管線、檢視 DORA 指標、分類漏洞、最佳化雲端成本、稽核存取控制、規劃功能旗標發布、檢視拉取請求、核准待處理的管線等。
- 隨處可用。 支援 Stdio 傳輸(適用於本機用戶端,如 Claude Desktop、Cursor、Devin Desktop)、HTTP 傳輸(適用於遠端/共享部署)、Docker 和 Kubernetes。
- 零設定啟動。 只需提供 Harness API 金鑰。帳戶 ID 會從 PAT 和 SAT 權杖自動擷取,組織/專案預設值為選用,工具集篩選可讓您只暴露需要的部分。
- 設計上可擴充。 新增 Harness 資源只需新增一個宣告式資料檔案——無需註冊新工具、無需變更 schema、無需更新提示詞。
先決條件
在安裝或執行伺服器之前,您需要一個 Harness API 金鑰:
- 登入您的 Harness 帳戶
- 前往 我的個人資料 → API 金鑰 → + 新增 API 金鑰
- 在 API 金鑰下建立一個新的 權杖——這會產生格式為
<prefix>.<accountId>.<tokenId>.<secret>的 PAT 或 SAT - 將權杖儲存在安全的地方——下一步會用到
如需詳細說明,請參閱 Harness API 快速入門。
快速開始
選項 0:託管式 Harness MCP
如果您的 Harness 帳戶已啟用託管式 MCP 服務,支援遠端 MCP 伺服器的用戶端可以直接連線到受管理的端點,而無需在本機執行伺服器。
重要: 託管式 MCP 服務使用 Harness 平台 OAuth,而非
HARNESS_API_KEY。此外,必須由 Harness 支援團隊 為每個帳戶啟用/設定後,端點才能使用。
請參閱 託管式 Harness MCP 取得設定範例。
選項 1:npx(建議)
無需安裝——直接執行:
HARNESS_API_KEY=pat.xxx.xxx.xxx npx harness-mcp-v2@latest
或在您的 AI 用戶端中設定 API 金鑰(請參閱下方的 用戶端設定)。
# Stdio transport (default — for Claude Desktop, Cursor, Devin Desktop, etc.)
HARNESS_API_KEY=pat.xxx npx harness-mcp-v2
# HTTP transport (for remote/shared deployments)
HARNESS_API_KEY=pat.xxx npx harness-mcp-v2 http --port 8080
注意: 帳戶 ID 會從 PAT 和 SAT 權杖(
pat.<accountId>...或sat.<accountId>...)自動擷取,因此HARNESS_ACCOUNT_ID僅在 API 金鑰未內嵌帳戶區段時才需要。
選項 2:全域安裝
npm install -g harness-mcp-v2
# Then run directly
harness-mcp-v2
選項 3:從原始碼建置
適用於開發或自訂:
git clone https://github.com/harness/mcp-server.git
cd mcp-server
pnpm install
pnpm build
# Run
pnpm start # Stdio transport
pnpm start:http # HTTP transport
pnpm inspect # Test with MCP Inspector
Anthropic MCP 目錄套件
MCPB 套件清單位於 [mcp-directory/](mcp-directory/),512×512 套件圖示則追蹤於儲存庫根目錄的 [icon.png](icon.png)。打包的封存檔包含根層級的 manifest.json、icon.png、server/、package.json、npm-shrinkwrap.json 和生產環境的 node_modules/。
為保持封存檔小巧,請從暫存目錄建置 MCPB 套件:
pnpm prepare:mcpb
暫存目錄會寫入 dist/mcpb/,並使用 npm 的扁平佈局從 npm-shrinkwrap.json 安裝生產依賴項。固定版本的官方 MCPB CLI 會驗證它並建立 dist/harness-mcp-server-<version>.mcpb。
符合 v*.*.* 的版本標籤會自動將該套件發布到對應的 GitHub Release。若要為現有版本補建套件而不重新發布 npm,請手動執行 Release 工作流程,並提供其 release_tag 輸入(例如 v3.2.20)。該工作流程會先檢出並建置該確切標籤,然後僅取代其版本化的 MCPB 資產。
CLI 使用方式
harness-mcp-v2 [stdio|http] [--port <number>]
Options:
--port <number> Port for HTTP transport (default: 3000, or PORT env var)
--help Show help message and exit
--version Print version and exit
若未指定,傳輸預設為 stdio。遠端/共享部署請使用 http。
HTTP 傳輸
在 HTTP 模式下執行時,伺服器會暴露:
| 端點 | 方法 | 說明 |
|---|---|---|
/mcp | POST | MCP JSON-RPC 端點(initialize + session 請求) |
/mcp | GET | 伺服器主動訊息(進度、誘發)的 SSE 串流 |
/mcp | DELETE | 終止作用中的 MCP session |
/mcp | OPTIONS | CORS 預檢 |
/health | GET | 健康檢查——回傳 { "status": "ok", "sessions": <count> } |
/.well-known/oauth-protected-resource | GET | 當 HARNESS_MCP_MODE=oauth 時的 RFC 9728 中繼資料 |
/.well-known/oauth-protected-resource/mcp | GET | 預設 /mcp 資源的路徑感知 RFC 9728 中繼資料 |
HTTP 傳輸以基於 session 的模式執行。新的 MCP session 會在 initialize 時建立,伺服器會回傳 mcp-session-id 標頭,該 session 的後續請求必須包含相同的標頭。
HTTP 模式下的操作限制:
- 為共享或可遠端存取的單一使用者及多使用者部署設定
HARNESS_MCP_AUTH_TOKEN。設定後,每個對/mcp的POST、GET和DELETE請求都必須包含Authorization: Bearer <token>。 - OAuth 模式接受 HarnessID 存取權杖而非
HARNESS_MCP_AUTH_TOKEN,且可在沒有未驗證退出選項的情況下綁定到非 loopback 位址。 - 非 loopback 的單一使用者及多使用者綁定預設需要
HARNESS_MCP_AUTH_TOKEN。若仍要在非 loopback 介面上以未驗證方式執行,請明確設定HARNESS_MCP_ALLOW_UNAUTHENTICATED_HTTP=true。 - 沒有
mcp-session-id的POST /mcp必須是initialize請求。 - 對現有 session 的
POST /mcp、GET /mcp和DELETE /mcp需要mcp-session-id標頭。 GET /mcp用於 SSE 通知(進度更新和誘發提示)。- 閒置 session 在沒有請求或 SSE 串流作用中
MCP_SESSION_TTL_MS毫秒後會被回收(預設1800000,即 30 分鐘)。 GET /health是唯一的非 MCP 端點。- 請求主體大小由
HARNESS_MAX_BODY_SIZE_MB限制(預設10MB)。 - 在
initialize請求上設定x-harness-pipeline-version: 0或1,可為該 HTTP session 選擇 V0 或 V1 管線資源。 - 在
initialize請求上設定x-harness-auto-approve-risk: none|low_write|medium_write|high_write|all,可選擇更嚴格的每 session 自動核准閾值。伺服器會將此值上限設為部署層級的HARNESS_AUTO_APPROVE_RISK,因此 session 可以降低但不能擴大設定的核准上限。
HarnessID OAuth 模式
設定 HARNESS_MCP_MODE=oauth 以讓遠端 MCP 用戶端探索 HarnessID 並完成 OAuth 2.1 Authorization Code with PKCE。OAuth 模式僅在 HTTP 傳輸下可用。生產環境的 HarnessID、MCP 資源和 API 路由預設值已內建:
HARNESS_MCP_MODE=oauth
這預設為 issuer https://id.harness.io/idp/realms/HarnessIDP、resource https://mcp.harness.io/mcp、OAuth client mcp-client 和 Harness API base https://mcp.harness.io/cli。僅在 QA、本機開發或其他 Harness 環境中覆寫這些值。
此模式下不得設定 HARNESS_API_KEY。HARNESS_MCP_OAUTH_JWKS_URI 預設為 <issuer>/protocol/openid-connect/certs,且 HARNESS_ACCOUNT_ID 非必要,因為帳戶來自權杖。
伺服器會發布 RFC 9728 受保護資源中繼資料,並在用戶端尚未驗證時回傳此 challenge:
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Bearer resource_metadata="https://mcp.harness.io/.well-known/oauth-protected-resource/mcp"
它會使用設定的 JWKS 端點驗證 HarnessID 存取權杖的 RS256 簽章、iss、到期時間和 sub,並透過 azp claim 檢查權杖是否簽發給 HARNESS_MCP_OAUTH_CLIENT_ID。HARNESS_MCP_OAUTH_RESOURCE 是用於探索和 challenge 的 RFC 9728 受保護資源識別碼。目前的 HarnessID 存取權杖使用 aud: account 而非 MCP URL,因此不會將資源與 aud 比較。
帳戶 ID 來自權杖的 HARNESS_MCP_OAUTH_ACCOUNT_CLAIM claim(預設為 account_id),由 HarnessID 的 organization scope 填入。每個 session 會儲存呼叫者的存取權杖,並以 Authorization: Bearer 轉發到 Harness API,因此 Harness RBAC 和稽核記錄反映的是登入使用者,而非共享的 PAT。session 綁定到建立時的 sub 和帳戶:後續請求可能攜帶重新整理的權杖,但屬於不同使用者或帳戶的權杖會被拒絕。
用戶端通常只需要 MCP 資源 URL:
{
"mcpServers": {
"harness": {
"url": "https://mcp.harness.io/mcp"
}
}
}
用戶端會讀取受保護資源中繼資料、探索 HARNESS_MCP_OAUTH_ISSUER,然後使用該授權伺服器的 RFC 8414 中繼資料。如果用戶端不支援動態用戶端註冊,請使用預先註冊的 mcp-client 用戶端 ID。
請參閱 自架 MCP 伺服器的 HarnessID OAuth 取得 QA Keycloak 檢查清單和驗證指令。
多使用者模式
為共享 HTTP 部署設定 HARNESS_MCP_MODE=multi-user,讓每個用戶端以不同的 Harness 使用者身分驗證。在此模式下:
- 伺服器設定中不得設定
HARNESS_API_KEY——伺服器不持有任何 Harness 憑證。 - 每個 session 必須在
initialize請求上提供x-harness-api-key。僅當 API 金鑰未內嵌帳戶區段時才需要x-harness-account-id。 - Session 也可以提供
x-harness-org和x-harness-project標頭,為該 session 設定預設範圍。 - Harness API 金鑰會流向該 session 的每個 Harness API 呼叫,因此 Harness 中的稽核軌跡反映真實使用者。
HARNESS_MCP_AUTH_TOKEN是獨立的,仍可作為額外的傳輸層閘道使用。
# Health check
curl http://localhost:3000/health
# MCP initialize request (capture mcp-session-id response header)
# In multi-user mode, x-harness-api-key is required on initialize.
# x-harness-account-id is needed only for API keys without an embedded account segment.
curl -i -X POST http://localhost:3000/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-H "Authorization: Bearer $HARNESS_MCP_AUTH_TOKEN" \
-H "x-harness-api-key: $HARNESS_API_KEY" \
-H "x-harness-account-id: $HARNESS_ACCOUNT_ID" \
-d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"test","version":"1.0"}}}'
# Subsequent MCP request (use returned session ID)
curl -X POST http://localhost:3000/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-H "Authorization: Bearer $HARNESS_MCP_AUTH_TOKEN" \
-H "mcp-session-id: <session-id>" \
-d '{"jsonrpc":"2.0","id":2,"method":"tools/list","params":{}}'
# Terminate session
curl -X DELETE http://localhost:3000/mcp \
-H "Authorization: Bearer $HARNESS_MCP_AUTH_TOKEN" \
-H "mcp-session-id: <session-id>"
HARNESS_MCP_ALLOWED_HOSTS 控制 Host 標頭驗證以進行 DNS 重新綁定防護,CORS 則限制瀏覽器來源。兩者都不是驗證機制;請使用 HARNESS_MCP_AUTH_TOKEN 或已驗證的閘道/反向代理進行存取控制。
用戶端設定
注意:
HARNESS_ORG和HARNESS_PROJECT為選用。它們設定在未於每次工具呼叫指定時使用的組織 ID 和專案 ID。代理程式可以使用harness_list(resource_type="organization")和harness_list(resource_type="project")動態探索組織和專案。已棄用的名稱HARNESS_DEFAULT_ORG_ID和HARNESS_DEFAULT_PROJECT_ID仍被接受以維持向後相容性。
託管式 Harness MCP
Harness 也為已啟用受管理服務的帳戶支援託管式 MCP 端點。當您想要共享的遠端 MCP 端點,而非自行執行 npx harness-mcp-v2 或自架 HTTP 傳輸時,這會很有用。
重要: 託管 MCP 驗證使用 Harness Platform OAuth。它不使用用戶端設定中的
HARNESS_API_KEY。託管 MCP 的可用性是按 Harness 帳戶配置的,因此您需要與 Harness 支援合作,才能在使用前啟用/配置該設定。託管端點
https://mcp.harness.io/mcp是一項受管服務。Claude、Cursor 或 Cowork 中的用戶端 MCP 設定無法覆寫其路由到的 Harness 環境。對於 Harness0 或其他私有 Harness SaaS 環境,請要求 Harness 支援為該環境啟用/配置託管 MCP,或執行本機/自架伺服器並將HARNESS_BASE_URL設定為目標 Harness 主機。
託管 MCP 範例:
{
"mcpServers": {
"harness-prod1-mcp": {
"url": "https://mcp.harness.io/mcp",
"auth": {
"CLIENT_ID": "mcp-client"
}
}
}
}
同時包含託管和本機條目的範例:
{
"mcpServers": {
"harness-hosted": {
"url": "https://mcp.harness.io/mcp",
"auth": {
"CLIENT_ID": "mcp-client"
}
},
"harness-local": {
"command": "/absolute/path/to/npx",
"args": ["-y", "harness-mcp-v2@latest"],
"env": {
"HARNESS_API_KEY": "pat.xxx.xxx.xxx",
"PATH": "/directory/containing/node:/usr/local/bin:/usr/bin:/bin"
}
}
}
}
疑難排解
npx ENOENT或node: No such file or directory這是用戶端程序啟動失敗,而非 Harness 驗證失敗。MCP 伺服器尚未啟動,因此變更
HARNESS_API_KEY不會影響spawn npx ENOENT。GUI 應用程式(Cursor、Claude Desktop、Devin Desktop、VS Code)不一定會繼承您 shell 的
PATH,因此在重新載入設定後,它們可能無法找到npx或node。請使用絕對路徑並在env區塊中明確設定PATH來修正此問題:{ "mcpServers": { "harness": { "command": "/absolute/path/to/npx", "args": ["-y", "harness-mcp-v2"], "env": { "HARNESS_API_KEY": "pat.xxx.xxx.xxx", "PATH": "/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin" } } } }在終端機中使用
which npx和which node找到您的路徑,然後確保包含node的目錄已包含在上述PATH值中。常見位置:
- Homebrew (macOS):
/opt/homebrew/bin/npx- nvm:
~/.nvm/versions/node/v20.x.x/bin/npx(執行nvm which current以找到確切路徑)- 系統 Node:
/usr/local/bin/npx
Claude Desktop (claude_desktop_config.json)
npx(零安裝)
{
"mcpServers": {
"harness": {
"command": "/absolute/path/to/npx",
"args": ["-y", "harness-mcp-v2@latest"],
"env": {
"HARNESS_API_KEY": "pat.xxx.xxx.xxx",
"PATH": "/directory/containing/node:/usr/local/bin:/usr/bin:/bin"
}
}
}
}
node(本機安裝)
npm install -g harness-mcp-v2
{
"mcpServers": {
"harness": {
"command": "/absolute/path/to/harness-mcp-v2",
"env": {
"HARNESS_API_KEY": "pat.xxx.xxx.xxx",
"PATH": "/directory/containing/node:/usr/local/bin:/usr/bin:/bin"
}
}
}
}
Claude Code(透過 claude mcp add)
npx(零安裝)
claude mcp add harness -- npx harness-mcp-v2
node(本機安裝)
npm install -g harness-mcp-v2
claude mcp add harness -- harness-mcp-v2
然後在您的環境或 .env 檔案中設定 HARNESS_API_KEY。
Cursor (.cursor/mcp.json)
npx(零安裝,建議用於本機 Cursor 設定)
{
"mcpServers": {
"harness": {
"command": "/absolute/path/to/npx",
"args": ["-y", "harness-mcp-v2@latest"],
"env": {
"HARNESS_API_KEY": "pat.xxx.xxx.xxx",
"PATH": "/directory/containing/node:/usr/local/bin:/usr/bin:/bin"
}
}
}
}
在終端機中執行 which npx,並使用該完整路徑作為 command;將 which node 中的目錄放在 PATH 的前面。
node(本機安裝)
npm install -g harness-mcp-v2
{
"mcpServers": {
"harness": {
"command": "/absolute/path/to/harness-mcp-v2",
"env": {
"HARNESS_API_KEY": "pat.xxx.xxx.xxx",
"PATH": "/directory/containing/node:/usr/local/bin:/usr/bin:/bin"
}
}
}
}
在 npm install -g harness-mcp-v2 之後執行 which harness-mcp-v2,並使用該完整路徑作為 command;將 which node 中的目錄放在 PATH 的前面。
Devin Desktop (~/.windsurf/mcp.json)
npx(零安裝)
{
"mcpServers": {
"harness": {
"command": "/absolute/path/to/npx",
"args": ["-y", "harness-mcp-v2@latest"],
"env": {
"HARNESS_API_KEY": "pat.xxx.xxx.xxx",
"PATH": "/directory/containing/node:/usr/local/bin:/usr/bin:/bin"
}
}
}
}
node(本機安裝)
npm install -g harness-mcp-v2
{
"mcpServers": {
"harness": {
"command": "/absolute/path/to/harness-mcp-v2",
"env": {
"HARNESS_API_KEY": "pat.xxx.xxx.xxx",
"PATH": "/directory/containing/node:/usr/local/bin:/usr/bin:/bin"
}
}
}
}
使用從原始碼建置的本機版本?
將命令替換為您建置之 index.js 的路徑:
{
"command": "node",
"args": ["/absolute/path/to/harness-mcp-v2/build/index.js", "stdio"]
}
MCP 閘道
Harness MCP 伺服器與 MCP 閘道完全相容——這些反向代理可跨多個 MCP 伺服器提供集中式驗證、治理、工具路由和可觀測性。由於伺服器實作標準 MCP 協定,並同時支援 stdio 和 HTTP 傳輸,因此它可以在任何符合 MCP 規範的閘道後方運作,無需變更程式碼。
為何使用閘道?
- 集中式憑證管理——代理程式設定中無需 API 金鑰
- 跨團隊所有工具呼叫的治理與稽核日誌
- 代理程式的單一端點,而非 N 個連線到 N 個 MCP 伺服器
- 存取控制——限制哪些團隊可以使用哪些工具
Docker MCP 閘道
在您的 Docker MCP 閘道設定中註冊伺服器:
{
"mcpServers": {
"harness": {
"command": "npx",
"args": ["harness-mcp-v2"],
"env": {
"HARNESS_API_KEY": "pat.xxx.xxx.xxx"
}
}
}
}
Portkey
將 Harness MCP 伺服器新增至您的 Portkey MCP 閘道,以獲得企業治理、成本追蹤和多 LLM 路由:
{
"mcpServers": {
"harness": {
"command": "npx",
"args": ["harness-mcp-v2"],
"env": {
"HARNESS_API_KEY": "pat.xxx.xxx.xxx"
}
}
}
}
LiteLLM
新增至您的 LiteLLM 代理設定:
mcp_servers:
- name: harness
command: npx
args:
- harness-mcp-v2
env:
HARNESS_API_KEY: "pat.xxx.xxx.xxx"
Envoy AI 閘道
伺服器可透過 HTTP 傳輸與 Envoy AI 閘道的 MCP 支援 搭配運作:
# Start the server in HTTP mode
HARNESS_API_KEY=pat.xxx.xxx.xxx npx harness-mcp-v2 http --port 8080
然後將 Envoy 設定為將 http://localhost:8080/mcp 作為上游 MCP 後端進行路由。
Kong
使用 Kong 的 AI MCP 代理外掛程式 透過您現有的 Kong 閘道基礎架構公開 Harness MCP 伺服器。
其他閘道
任何支援 MCP 規範的閘道(Microsoft MCP Gateway、IBM ContextForge、Cloudflare Workers 等)都可以代理此伺服器。對於基於 stdio 的閘道,請使用預設傳輸。對於基於 HTTP 的閘道,請使用 http 傳輸啟動伺服器,並將閘道指向 /mcp 端點。
Docker
將伺服器建置並執行為 Docker 容器:
# Build the image
pnpm docker:build
# Run with your .env file
pnpm docker:run
# Or run directly with env vars
docker run --rm -p 3000:3000 \
-e HARNESS_API_KEY=pat.xxx.xxx.xxx \
-e HARNESS_ACCOUNT_ID=your-account-id \
harness-mcp-server
容器預設以 HTTP 模式在連接埠 3000 上執行,並內建健康檢查。
Kubernetes
使用提供的清單部署到 Kubernetes 叢集:
# 1. Edit the Secret with your real credentials
# k8s/secret.yaml — replace HARNESS_API_KEY and HARNESS_ACCOUNT_ID
# 2. Apply all manifests
kubectl apply -f k8s/
# 3. Verify the deployment
kubectl -n harness-mcp get pods
# 4. Port-forward for local testing
kubectl -n harness-mcp port-forward svc/harness-mcp-server 3000:80
curl http://localhost:3000/health
部署會執行 2 個複本,並配備就緒/存活探測、資源限制和非 root 安全性內容。Service 在內部公開連接埠 80(目標為容器連接埠 3000)。
設定
如果專案根目錄中存在 .env 檔案,伺服器會自動從中載入環境變數。將 .env.example 複製為 .env 並填入您的值。環境變數也可以透過您的 shell 或 MCP 用戶端設定來設定。
| 變數 | 必填 | 預設值 | 說明 |
|---|---|---|---|
HARNESS_MCP_MODE | 否 | single-user | 部署模式:single-user(共用 API 金鑰)、multi-user(HTTP,每個工作階段使用各自的 API 金鑰)或 oauth(HTTP,使用 HarnessID 存取權杖驗證) |
HARNESS_API_KEY | 是* | -- | Harness 個人存取權杖或服務帳戶權杖。在 single-user 模式下為必填。在 multi-user 或 oauth 模式下不得設定,因為每個工作階段會攜帶自己的憑證 |
HARNESS_ACCOUNT_ID | 否 | (來自 PAT/SAT) | Harness 帳戶識別碼。在單一使用者模式下會從 PAT/SAT 權杖自動擷取;多使用者工作階段可在 API 金鑰未內嵌帳戶識別碼時,透過 x-harness-account-id 提供各自的帳戶識別碼 |
HARNESS_BASE_URL | 否 | https://app.harness.io(OAuth 模式下為 https://mcp.harness.io/cli) | Harness API/UI 基礎 URL。OAuth 模式預設透過託管的 MCP /cli 代理伺服器路由;其他模式直接使用 Harness SaaS API |
HARNESS_MCP_OAUTH_ISSUER | 否 | https://id.harness.io/idp/realms/HarnessIDP | HarnessID 簽發者,會與存取權杖的 iss 宣告進行精確比對 |
HARNESS_MCP_OAUTH_RESOURCE | 否 | https://mcp.harness.io/mcp | 公開的標準 MCP URL,發布為 RFC 9728 資源識別碼 |
HARNESS_MCP_OAUTH_JWKS_URI | 否 | <issuer>/protocol/openid-connect/certs | 用於驗證 RS256 存取權杖簽章的 HarnessID JWKS 端點 |
HARNESS_MCP_OAUTH_CLIENT_ID | 否 | mcp-client | 存取權杖必須簽發給的 HarnessID 用戶端,會與權杖的 azp 宣告進行比對 |
HARNESS_MCP_OAUTH_ACCOUNT_CLAIM | 否 | account_id | 攜帶 Harness 帳戶 ID 的存取權杖宣告,由 HarnessID organization 範圍填入 |
HARNESS_MCP_OAUTH_SCOPES | 否 | openid profile email organization | 以空格分隔的範圍,發布於 RFC 9728 受保護資源中繼資料 |
HARNESS_FME_API_KEY | 否 | -- | 選用的單一使用者/自架 FME/Split 管理員憑證,僅在舊版(workspace_id)模式下用於 fme_ 資源。舊版 FME 在 OAuth 模式下不可用,因此 HarnessID 權杖絕不會傳送至 api.split.io;請改用 Harness 原生 org_id+project_id 範圍。在 multi-user 或 oauth 模式下不得設定 |
HARNESS_FME_BASE_URL | 否 | https://api.split.io | Split/FME 管理員 API 基礎 URL,僅在舊版(workspace_id)模式下由 fme_ 資源使用。HTTP URL 需要 HARNESS_ALLOW_HTTP=true 才能進行本機開發。Harness 原生(org_id+project_id)模式會忽略此設定,改用標準的 HARNESS_API_KEY/HARNESS_BASE_URL |
HARNESS_ORG | 否 | -- | 組織 ID。當每次工具呼叫未指定 org_id 時使用。若省略,則必須明確提供 org_id。代理程式也可以透過 harness_list(resource_type="organization") 動態探索組織 |
HARNESS_PROJECT | 否 | -- | 專案 ID。當每次工具呼叫未指定 project_id 時使用。代理程式也可以透過 harness_list(resource_type="project") 動態探索專案 |
HARNESS_API_TIMEOUT_MS | 否 | 30000 | HTTP 請求逾時時間(毫秒) |
HARNESS_MAX_RETRIES | 否 | 3 | 暫時性失敗(429、5xx)的重試次數 |
HARNESS_MAX_BODY_SIZE_MB | 否 | 10 | http 傳輸的 HTTP 請求主體大小上限(MB) |
HARNESS_RATE_LIMIT_RPS | 否 | 10 | 用戶端請求節流(每秒請求數),套用於 Harness API |
LOG_LEVEL | 否 | info | 記錄詳細程度:debug、info、warn、error |
HARNESS_TOOLSETS | 否 | (預設值) | 以逗號分隔的工具集清單。空白會載入預設工具集。支援 +name 以明確包含選擇加入的工具集,以及 -name 以移除預設工具集(請參閱 工具集篩選) |
HARNESS_READ_ONLY | 否 | false | 封鎖所有變更操作(建立、更新、刪除、執行)。僅允許清單和取得。適用於共用/示範環境 |
HARNESS_AUTO_APPROVE_RISK | 否 | none | 自主工作流程的風險型自動核准閾值。風險等於或低於此值的操作會直接執行,無需確認。數值:none、low_write、medium_write、high_write、all。請參閱 提示引導 |
HARNESS_SKIP_ELICITATION | 否 | false | 已棄用 — 請改用 HARNESS_AUTO_APPROVE_RISK=all。保留以維持向後相容性 |
HARNESS_ALLOW_HTTP | 否 | false | 允許非 HTTPS 的 HARNESS_BASE_URL。預設情況下,伺服器會強制使用 HTTPS 以確保安全。僅在針對非 TLS Harness 執行個體進行本機開發時,才設定為 true |
HARNESS_PIPELINE_VERSION | 否 | 0 | (Alpha) Pipeline YAML 版本。0 會載入 pipeline 資源類型並排除 pipeline_v1;1 會載入 pipeline_v1 並排除 pipeline。HTTP 工作階段可在初始化時使用 x-harness-pipeline-version: 0 或 1 覆寫此設定 |
HARNESS_MCP_ALLOWED_HOSTS | 否 | -- | HTTP 傳輸 Host 標頭驗證允許的主機名稱清單(以逗號分隔)。mcp.harness.io 預設允許用於 localhost 繫結;請在此處新增代理伺服器/自訂網域 |
HARNESS_MCP_AUTH_TOKEN | 否 | -- | 設定後,/mcp HTTP 路由需要靜態 Bearer 權杖。非迴圈位址的單一使用者和多使用者繫結預設為必填。在 oauth 模式下必須取消設定 |
HARNESS_MCP_ALLOW_UNAUTHENTICATED_HTTP | 否 | false | 明確允許非迴圈位址繫結上未經驗證的 HTTP 傳輸。僅可在另一個已驗證的控制項後方使用 |
HARNESS_MCP_TRUST_PROXY | 否 | 0 | 用於用戶端 IP 解析時信任的反向代理/負載平衡器躍點數(Express trust proxy)。請設定為伺服器前方的代理數量,以便依 IP 進行的速率限制以真實用戶端為依據,而非代理的 socket 對端 |
HARNESS_MCP_LOG_FILE | 否 | ~/.claude/harness-mcp.log | 當 stderr 可能無法使用時,用於 stdio 斷線/當機診斷的檔案 |
HARNESS_LOG_UNSAFE_BODIES | 否 | false | 在記錄中包含原始請求/回應主體。預設關閉,因為主體可能包含機密;僅在進行本機除錯時啟用 |
HARNESS_AUDIT_FILE | 否 | -- | 將稽核事件附加至以換行分隔的 JSON 檔案,以進行持久的本機收集 |
HARNESS_AUDIT_WEBHOOK_URL | 否 | -- | 接收批次稽核事件的 HTTPS 端點。HTTP URL 需要 HARNESS_ALLOW_HTTP=true 才能進行本機開發 |
HARNESS_AUDIT_WEBHOOK_TOKEN | 否 | -- | 傳送至稽核 Webhook 的選用 Bearer 權杖 |
HARNESS_AUDIT_WEBHOOK_BATCH_SIZE | 否 | 10 | Webhook 重新整理前要批次處理的稽核事件數 |
HARNESS_AUDIT_WEBHOOK_FLUSH_MS | 否 | 5000 | Webhook 刷新前保留審計事件的最長時間 |
OTEL_EXPORTER_OTLP_ENDPOINT | 否 | -- | 當安裝了可選的 OpenTelemetry 套件時,啟用 OpenTelemetry 審計跨度 |
HARNESS_SEARCH_PROVIDER | 否 | local | 語意搜尋後端:local(程序內 ONNX 嵌入,預設)、remote(透過 HTTP 的外部搜尋服務,多使用者模式必備)或 none(停用語意搜尋,僅回退至關鍵字分散式蒐集)。在氣隙環境或啟動時不希望載入模型的情況下,請使用 none |
HARNESS_SEARCH_SERVICE_URL | 否 | -- | 當使用 HARNESS_SEARCH_PROVIDER=remote 時,遠端搜尋服務的基礎 URL(例如 http://search-svc:8080)。使用 remote 提供者時必填 |
HARNESS_SEARCH_SERVICE_HEADERS | 否 | -- | 隨每個請求傳送至遠端搜尋服務的標頭 JSON 物件。支援任何驗證方案:{"Authorization":"Bearer tok"}、{"x-api-key":"key"} 或多個內部服務對服務標頭 |
HARNESS_HF_CACHE_DIR | 否 | /tmp/hf-cache | 用於 local 搜尋提供者所使用的 @huggingface/transformers 模型快取目錄。Docker 映像已將模型預先烘焙至 /app/.cache/hf 以避免執行時下載。在生產部署中,請設定為持久化磁碟區路徑 |
HARNESS_DIAGNOSE_LOG_FETCH_CONCURRENCY | 否 | 3 | harness_diagnose 在擷取失敗步驟的日誌時,所發出的最大並行日誌區塊下載數。僅在診斷延遲主要由日誌擷取牆鐘時間主導且 Pod 有足夠記憶體餘裕時才增加 |
語意搜尋
harness_search 使用語意路由來縮小 scatter-gather API 呼叫的範圍,然後再分散到 Harness。目前提供三種搜尋提供者:
| 提供者 | 使用時機 |
|---|---|
local(預設) | 單一使用者 stdio 模式。透過 @huggingface/transformers 在處理程序中執行 all-MiniLM-L6-v2。首次使用時下載約 23 MB 的模型;後續啟動使用快取。 |
remote | 多使用者 HTTP 模式(Harness 代管)。將嵌入和檢索委派給外部搜尋服務。透過 tenant_id 強制執行租戶隔離 — 靜態知識/文件使用 global,每個帳戶的實體資料使用帳戶 ID。 |
none | 完全停用語意搜尋;改為在所有資源類型上使用關鍵字 scatter-gather。 |
遠端提供者設定:
HARNESS_SEARCH_PROVIDER=remote
HARNESS_SEARCH_SERVICE_URL=http://search-svc:8080
# Auth — any scheme via HARNESS_SEARCH_SERVICE_HEADERS (JSON object):
HARNESS_SEARCH_SERVICE_HEADERS='{"Authorization":"Bearer <token>"}' # standard bearer
HARNESS_SEARCH_SERVICE_HEADERS='{"x-api-key":"<key>"}' # API key header
HARNESS_SEARCH_SERVICE_HEADERS='{"x-harness-token":"<svc-token>"}' # internal service-to-service
# Multiple headers (e.g. service mesh + tenant routing):
HARNESS_SEARCH_SERVICE_HEADERS='{"x-harness-token":"<tok>","x-tenant":"<id>"}'
# No auth (service mesh / mTLS handles it):
# omit HARNESS_SEARCH_SERVICE_HEADERS entirely
使用隨附的 stub 服務在本機測試遠端提供者(無需外部相依項目):
# 1. Create a venv and install FastAPI
python3 -m venv .venv-stub
.venv-stub/bin/pip install fastapi uvicorn
# 2. Start the stub (in-memory, cosine similarity, corpus + tenant filtering)
.venv-stub/bin/uvicorn stub-search-service:app --port 8082
# 3. Build the MCP server
pnpm build
# 4. Run the integration smoke test
node test-remote-provider.mjs
# Expected output:
# available: true
# indexed 2 docs
# entity search results: pipeline:ts-test score=... corpus=entities
# knowledge search results: schema:trigger score=...
# all-corpus search results: (merged, sorted by score)
# isolation check (other-acct, should be empty): PASS
# 5. Tear down
kill $(lsof -ti :8082)
Stub(stub-search-service.py)實作了與正式搜尋服務相同的 /v1/health、/v1/ingest 和 /v1/search 合約。它使用簡單的 bag-of-chars 嵌入,因此不需要下載模型 — 結果在語意上合理,但不具備正式品質。
HTTPS 強制執行
HARNESS_BASE_URL 預設必須使用 HTTPS。如果您設定了非 HTTPS 的 URL(例如 http://localhost:8080),伺服器將拒絕啟動,並顯示:
HARNESS_BASE_URL must use HTTPS (got "http://..."). If you need HTTP for local development, set HARNESS_ALLOW_HTTP=true.
稽核日誌
當設定稽核接收器時,所有由 registry 分派的 Harness API 操作(list、get、create、update、delete 和 execute)都會發出結構化稽核事件。變更事件包含在存在確認上下文時,由 elicitation 或自動核准使用的確認路徑;讀取事件目前省略確認中繼資料。繞過 registry 的本機中繼資料和 schema 探索工具(例如 harness_describe 和 harness_schema)不屬於此稽核串流的一部分。預設會註冊 stderr 接收器,但它會透過一般 logger 運作並遵循 LOG_LEVEL;請設定檔案或 webhook 接收器以進行持久化稽核收集:
HARNESS_AUDIT_FILE附加換行分隔的 JSON 事件,供本機收集使用。HARNESS_AUDIT_WEBHOOK_URL將{ "events": [...] }批次發布到 HTTPS webhook,可選擇搭配HARNESS_AUDIT_WEBHOOK_TOKEN。失敗的批次會以有限的容量重新排入佇列,最終會以警告方式丟棄,而不會阻擋工具執行。OTEL_EXPORTER_OTLP_ENDPOINT在安裝選用的 OpenTelemetry 同儕相依項目時啟用稽核 span。接收器會重複使用已註冊的現有 tracer provider,否則會自行啟動獨立的 OTLP exporter。
每個事件都包含工具名稱、資源類型、操作、識別碼、時間戳記、風險、結果、HTTP 方法/路徑、持續時間,以及適用的確認方法。稽核接收器是盡力而為的遙測;傳遞問題會記錄下來,絕不會重播或改變底層的 Harness API 操作。有關 OTel 設定詳細資訊和 span 屬性,請參閱 specs/005-otel-audit-sink.md。
工具參考
伺服器公開 11 個 MCP 工具。大多數 API 工具接受 org_id 和 project_id 作為選用覆寫 — 如果省略,則會回退到 HARNESS_ORG 和 HARNESS_PROJECT。harness_describe 僅限本機中繼資料,不使用 org/project 範圍。
URL 支援: 大多數面向 API 的工具接受 url 參數 — 貼上 Harness UI URL,伺服器會自動擷取 org、project、資源類型、資源 ID、pipeline ID 和執行 ID。harness_describe 不接受 url。
範圍支援: 具有 account/org/project 變體的資源類型會在 harness_describe 中公開 supportedScopes。當您需要特定層級時,請傳入 resource_scope:
resource_scope: "account"僅傳送accountIdentifier。resource_scope: "org"傳送accountIdentifier和orgIdentifier。resource_scope: "project"傳送 account、org 和 project 識別碼。
目前的多範圍資源包括 connector、service、environment、infrastructure、secret、file_store、template、policy 和 policy_set。如果省略 resource_scope,registry 會使用資源的預設範圍和設定的預設值,但標記為選用範圍的資源可能會省略 org/project,除非明確傳入。當路徑包含 account 層級或 project 層級上下文時,Harness URL 也可以自動設定範圍。
結構化輸出: 每個工具都宣告一個 MCP outputSchema。harness_list 會將類似清單的 Harness 回應正規化為物件形狀的結構化內容,以便嚴格的用戶端可以驗證它:頂層陣列會變成 { "items": [...], "total": <count>, "page": <page> },常見的包裝鍵(例如 content、data、body、objects 或 features)會在需要時提升到 items。文字回應仍包含傳回給所有用戶端的精簡 JSON 負載。
| 工具 | 描述 |
|---|---|
harness_describe | 探索可用的資源類型、操作和欄位。不呼叫 API — 回傳本機註冊表元資料。 |
harness_schema | 取得用於建立/更新資源的準確 YAML/JSON Schema 定義和範例。Pipeline/模板 schema 為內建;連接器、環境、服務、密鑰和基礎設施 schema 為具範圍感知的實體 schema,從內建快照或 NG /yaml-schema 取得;release_process 和 release_activity schema 則從 RMG /api/yamlSchema 即時取得。支援透過 path 進行深度鑽取。 |
harness_list | 列出指定類型的資源,支援篩選、搜尋和分頁。 |
harness_get | 依識別碼取得單一資源。 |
harness_create | 建立新資源。支援內聯和遠端(Git 支援)的 pipeline。透過 elicitation 提示使用者確認。 |
harness_update | 更新現有資源。支援內聯和遠端(Git 支援)的 pipeline。透過 elicitation 提示使用者確認。 |
harness_delete | 刪除資源。透過 elicitation 提示使用者確認。具破壞性。 |
harness_execute | 對資源執行操作(執行/重試 pipeline、從 Git 匯入 pipeline、切換旗標、同步應用程式)。透過 elicitation 提示使用者確認。對於 pipeline 執行,請使用下方的執行時輸入工作流程(支援 branch/tag/pr_number/commit_sha 速記展開)。 |
harness_search | 使用單一查詢跨 Harness 資源類型進行搜尋。使用語意路由(本機 all-MiniLM-L6-v2 ONNX 嵌入,384 維)從啟動時索引的 knowledge 語料庫預測相關資源類型 — 通常在 scatter-gather 前從約 163 種類型縮小到 1–8 種。當語意信心度低時,會回退到完整關鍵字 scatter-gather。當路由觸發時,回應包含 semantic_routed 和 types_skipped。參閱 docs/search-guidelines.md 了解如何讓新資源類型可被探索。 |
harness_diagnose | 診斷 pipeline、connector、delegate 和 gitops_application 資源(別名:execution -> pipeline、gitops_app -> gitops_application)。對於 pipeline,回傳階段/步驟時間和失敗詳細資訊;對於連接器/委派/GitOps 應用程式,回傳針對性的健康狀態和疑難排解訊號。 |
harness_status | 取得即時專案健康狀態儀表板 — 最近的執行、失敗率和深層連結。 |
Schema 查詢工作流程
在建立或更新 YAML 支援的資源之前,請使用 harness_schema,以便代理程式可以複製確切的欄位名稱和約束,而不是從文字描述中猜測。
- 內建 schema 包括
pipeline、template、trigger、pipeline_v1、template_v1、inputSet_v1、overlayInputSet_v1和agent-pipeline。 - 實體 schema 包括
connector、environment、service、secret和infrastructure。它們具有範圍感知(account、org或project),當所選範圍需要時,需要org_id/project_id。 - Release Management 定義(
release_process、release_activity)從 RMG/api/yamlSchema即時取得 JSON Schema(非內建)。當範圍限定為組織或專案時,請傳入scope、org_id和project_id。 - 當供應商實體快照與執行時帳戶相符時,會優先使用;否則工具會回退到 Harness NG
/yaml-schemaAPI 並快取結果。 - 省略
path以取得欄位/區段摘要,然後傳入以點分隔的path來檢查巢狀定義。
範例:
{ "resource_type": "pipeline", "path": "pipeline.stages" }
{
"resource_type": "connector",
"scope": "project",
"org_id": "default",
"project_id": "payments"
}
當 Harness 實體 YAML schema 變更時,維護者可以使用 pnpm sync-entity-schemas 重新整理供應商實體快照。
工具範例
探索可用的資源:
{ "resource_type": "pipeline" }
列出帳戶中的組織:
{ "resource_type": "organization" }
列出組織中的專案:
{ "resource_type": "project", "org_id": "default" }
列出專案中的 pipeline:
{ "resource_type": "pipeline", "search_term": "deploy", "size": 10 }
取得特定服務:
{ "resource_type": "service", "resource_id": "my-service-id" }
執行 pipeline:
{
"resource_type": "pipeline",
"action": "run",
"resource_id": "my-pipeline",
"inputs": { "tag": "v1.2.3" },
"wait": true
}
切換功能旗標:
{
"resource_type": "feature_flag",
"action": "toggle",
"resource_id": "new_checkout_flow",
"enable": true,
"environment": "production"
}
跨所有資源類型搜尋:
{ "query": "payment-service" }
依 ID 診斷執行(摘要模式 — 預設):
{ "execution_id": "abc123XYZ" }
從 Harness URL 診斷:
{ "url": "https://app.harness.io/ng/account/.../pipelines/myPipeline/executions/abc123XYZ/pipeline" }
診斷連接器連線:
{ "resource_type": "connector", "resource_id": "my_github_connector" }
診斷委派健康狀態:
{ "resource_type": "delegate", "resource_id": "delegate-us-east-1" }
診斷 GitOps 應用程式(含選項):
{
"resource_type": "gitops_application",
"resource_id": "checkout-app",
"options": { "agent_id": "gitops-agent-1" }
}
取得 pipeline 的最新執行報告:
{ "pipeline_id": "my-pipeline" }
完整診斷模式,含 YAML 和失敗步驟日誌:
{ "execution_id": "abc123XYZ", "summary": false }
摘要模式並啟用日誌(兩全其美):
{ "execution_id": "abc123XYZ", "include_logs": true }
取得專案健康狀態:
{ "org_id": "default", "project_id": "my-project", "limit": 5 }
依遷移類型篩選列出資料庫 schema:
{ "resource_type": "database_schema", "migration_type": "Liquibase" }
列出 schema 的資料庫實例:
{ "resource_type": "database_instance", "dbschema_id": "my_schema" }
取得 schema 和實例的已解析 LLM 編寫 pipeline:
{ "resource_type": "database_llm_authoring_pipeline", "resource_id": "my_schema", "dbinstance_id": "prod_db" }
列出 schema 實例的快照物件名稱(例如資料表):
{
"resource_type": "database_snapshot_object",
"dbschema_id": "my_schema",
"dbinstance_id": "prod_db",
"object_type": "Table"
}
取得特定命名物件的完整快照元資料:
{
"resource_type": "database_snapshot_object",
"resource_id": "prod_db",
"params": {
"dbschema_id": "my_schema",
"object_type": "Table",
"object_names": ["users", "orders"]
}
}
Pipeline 執行工作流程(建議)
對於 v0 pipeline,請使用此順序以減少執行時輸入錯誤:
- 探索必要的執行時輸入
harness_get(resource_type="runtime_input_template", resource_id="<pipeline_id>")- 回傳的模板顯示需要值的
<+input>佔位符。
- 選擇輸入策略
-
簡單變數: 傳入扁平鍵值
inputs(例如{"branch":"main","env":"prod"})。 -
複雜/結構化輸入: 使用
input_set_ids(CI codebase/建置區塊和巢狀模板輸入最適合以此方式處理)。 -
CI codebase 速記鍵(僅限 pipeline 執行):
速記鍵 展開結構 branchbuild.type=branch、build.spec.branch=<value>tagbuild.type=tag、build.spec.tag=<value>pr_numberbuild.type=PR、build.spec.number=<value>commit_shabuild.type=commitSha、build.spec.commitSha=<value> -
約束: 當
inputs.build已存在時,會跳過速記展開(明確的build優先)。
- 執行執行
-
harness_execute(resource_type="pipeline", action="run", resource_id="<pipeline_id>", ...) -
對於應從非預設分支載入 YAML 的 Git 支援 pipeline,請傳入
params.pipeline_branch(以branch傳送至 Harness)。此明確的定義選擇器優先於params.branch別名。inputs.branch獨立選擇 CI codebase 分支:{ "resource_type": "pipeline", "action": "run", "resource_id": "deploy_app", "params": { "pipeline_branch": "feature/new-stage" }, "inputs": { "branch": "main" }, "wait": true }
- 可選:兩者結合
- 使用
input_set_ids作為基礎形狀,並使用inputs進行簡單覆寫。
對於 v1 pipeline:
- 取得
harness_get(resource_type="runtime_input_template_v1", resource_id="<pipeline_id>")。 對於 Git 支援的 pipeline,請透過params傳入branch_name、connector_ref和repo_name。 - 將每個回傳的
inputs[].details.name用作harness_execute.inputs中的頂層鍵。 - 執行
harness_execute(resource_type="pipeline_v1", action="run", resource_id="<pipeline_id>", inputs={...})。 伺服器將這些值包裝在inputs:YAML 根節點下,並傳送 API 的inputs_yaml主體。
如果必要欄位無法解析,工具會回傳預檢錯誤,其中包含預期的鍵與建議的輸入集。您可以使用 harness_describe(resource_type="pipeline")(executeActions.run.inputShorthands)檢查可用的速記對應。
動態管線執行
當代理程式或外部系統在執行階段產生完整的 v0 管線 YAML,並需要針對現有的 Harness 管線外殼執行時,請使用 pipeline_dynamic_execution.run。這不是一般 pipeline.run 的替代方案:已儲存的 v0 管線必須已存在,帳戶層級與管線層級的 允許動態執行 必須啟用,且呼叫者需要具備管線的編輯與執行權限。
{
"resource_type": "pipeline_dynamic_execution",
"action": "run",
"resource_id": "deploy_app",
"body": {
"yaml": "pipeline:\n identifier: deploy_app\n name: Deploy App\n stages: []"
},
"params": {
"module_type": "CD",
"notes": "agent-generated dynamic run",
"notify_only_user": true
}
}
限制:
body必須是包含yaml欄位的物件。公開的harness_execute結構描述會拒絕原始字串內文。body.yaml可以是 YAML 字串或 JSON 管線物件;JSON 會在請求前序列化為 YAML。- 此 API 不會解析執行階段的
<+input>佔位符。請提交已完整解析的 YAML。 - 動態執行端點不支援輸入集、選擇性階段執行、重試與觸發器。
- 此動作是
high_write,並使用一般的確認/自動核准路徑。回應會將 API 封套投影至{ "execution_id": "...", "status": "..." },並在範圍資料可用時包含openInHarness執行連結。
如果 Harness 拒絕執行並顯示未啟用,請檢查帳戶層級的「允許動態執行」設定,以及管線層級位於「管線 → 進階選項 → 動態執行設定」下的切換開關。
執行輸入鑑識
在執行後使用 execution_inputs,檢查產生特定執行的合併輸入 YAML。當失敗取決於輸入集合併、Git 備份輸入集分支,或難以僅從執行頁面重建的觸發器/執行階段值時,這會很有用。
{
"resource_type": "execution_inputs",
"resource_id": "PLAN_EXECUTION_ID",
"params": {
"resolve_expressions": true,
"resolve_expressions_type": "RESOLVE_ALL_EXPRESSIONS"
}
}
取得回應會投影至:
executionId- 來自resource_id的計畫執行 ID。inputSetYaml- 用於執行的合併執行階段輸入 YAML,或null。inputSetTemplateYaml- 執行時的輸入範本,或null。resolvedYaml- 當resolve_expressions=true時的運算式解析 YAML,否則通常為null。inputSetDetails- 作為{ identifier, name }配對的貢獻已儲存輸入集。inputSetBranchName- Git 備份輸入集的來源分支,或null。
execution_inputs 僅供取得且為唯讀風險。如果省略 resolve_expressions,伺服器會省略 API 查詢參數,而 Harness 會使用其預設的 UNKNOWN 解析模式。
管線執行等待模式
對於 pipeline.run、pipeline.retry 與 pipeline_v1.run,傳入 wait: true 可讓伺服器輪詢,直到執行達到終端狀態。這可讓管線啟動與狀態檢查保持在單一工具呼叫中,而不需要要求用戶端或 LLM 執行輪詢迴圈。
{
"resource_type": "pipeline",
"action": "run",
"resource_id": "deploy_app",
"inputs": { "branch": "main" },
"wait": true,
"wait_timeout_seconds": 900,
"wait_poll_interval_seconds": 5
}
等待模式行為:
- 預設逾時為 600 秒;允許範圍為 10 秒至 7200 秒。
- 初始輪詢間隔預設為 3 秒,以 1.5 倍退避,並上限為 30 秒。
- 成功或失敗時,回應會包含
execution_id、execution_status、execution_terminal、execution_elapsed_ms與execution_poll_count等欄位。 - 如果逾時觸發,原始觸發器仍已成功;回應會包含
execution_timed_out: true與_wait.hint,並帶有最後觀察到的狀態。 - 如果觸發器成功後輪詢失敗,回應會包含
_wait.error與重新檢查提示。除非您已確認第一次執行未在執行中,否則請勿盲目重新執行管線。 - 失敗的終端狀態包含
_diagnose_hint,指向harness_diagnose(resource_type="execution", options={execution_id: "..."})。
要求 AI DevOps 代理程式建立管線:
{
"prompt": "Create a pipeline that builds a Go app with Docker and deploys to Kubernetes",
"action": "CREATE_PIPELINE"
}
透過自然語言更新服務:
{
"prompt": "Add a sidecar container for logging",
"action": "UPDATE_SERVICE",
"conversation_id": "prev-conversation-id",
"context": [{ "type": "yaml", "payload": "<existing service YAML>" }]
}
管線儲存模式
Harness 管線可以三種方式儲存:
| 模式 | 說明 | 使用時機 |
|---|---|---|
| 內嵌 | 管線 YAML 儲存在 Harness 中 | 預設。最簡單的設定,不需要 Git。 |
| 遠端(外部 Git) | 管線 YAML 儲存在 GitHub、GitLab、Bitbucket 等中 | 使用外部提供者的 Git 備份管線即程式碼的團隊。 |
| 遠端(Harness Code) | 管線 YAML 儲存在 Harness Code 儲存庫中 | 使用 Harness 內建 Git 託管的團隊。 |
建立內嵌管線(預設):
// harness_create
{
"resource_type": "pipeline",
"body": {
"yamlPipeline": "pipeline:\n name: My Pipeline\n identifier: my_pipeline\n stages:\n - stage:\n name: Build\n type: CI\n spec:\n execution:\n steps:\n - step:\n type: Run\n name: Echo\n spec:\n command: echo hello"
}
}
建立遠端管線(外部 Git — 例如 GitHub):
// harness_create
{
"resource_type": "pipeline",
"body": {
"yamlPipeline": "pipeline:\n name: Deploy Service\n identifier: deploy_service\n stages: []"
},
"params": {
"store_type": "REMOTE",
"connector_ref": "my_github_connector",
"repo_name": "my-repo",
"branch": "main",
"file_path": ".harness/deploy-service.yaml",
"commit_msg": "Add deploy pipeline via MCP"
}
}
建立遠端管線(Harness Code — 不需要連接器):
// harness_create
{
"resource_type": "pipeline",
"body": {
"yamlPipeline": "pipeline:\n name: Build App\n identifier: build_app\n stages: []"
},
"params": {
"store_type": "REMOTE",
"is_harness_code_repo": true,
"repo_name": "product-management",
"branch": "main",
"file_path": ".harness/build-app.yaml",
"commit_msg": "Add build pipeline via MCP"
}
}
更新遠端管線:
// harness_update
{
"resource_type": "pipeline",
"resource_id": "deploy_service",
"body": {
"yamlPipeline": "pipeline:\n name: Deploy Service\n identifier: deploy_service\n stages:\n - stage:\n name: Deploy\n type: Deployment"
},
"params": {
"store_type": "REMOTE",
"connector_ref": "my_github_connector",
"repo_name": "my-repo",
"branch": "main",
"file_path": ".harness/deploy-service.yaml",
"commit_msg": "Update deploy pipeline via MCP",
"last_object_id": "abc123",
"last_commit_id": "def456"
}
}
從外部 Git 儲存庫匯入管線:
// harness_execute
{
"resource_type": "pipeline",
"action": "import",
"params": {
"connector_ref": "my_github_connector",
"repo_name": "my-repo",
"branch": "main",
"file_path": ".harness/existing-pipeline.yaml"
},
"body": {
"pipeline_name": "Existing Pipeline",
"pipeline_description": "Imported from GitHub"
}
}
從 Harness Code 儲存庫匯入管線:
// harness_execute
{
"resource_type": "pipeline",
"action": "import",
"params": {
"is_harness_code_repo": true,
"repo_name": "product-management",
"branch": "main",
"file_path": ".harness/existing-pipeline.yaml"
},
"body": {
"pipeline_name": "Existing Pipeline"
}
}
建立連接器:
{
"resource_type": "connector",
"body": { "connector": { "name": "My Docker Hub", "identifier": "my_docker", "type": "DockerRegistry" } }
}
刪除觸發器:
{
"resource_type": "trigger",
"resource_id": "nightly-trigger",
"pipeline_id": "my-pipeline"
}
列出管線的輸入集:
{
"resource_type": "input_set",
"pipeline_id": "my-pipeline"
}
取得特定輸入集:
{
"resource_type": "input_set",
"resource_id": "prod-inputs",
"pipeline_id": "my-pipeline"
}
建立輸入集:
{
"resource_type": "input_set",
"pipeline_id": "my-pipeline",
"body": "inputSet:\n name: Production Inputs\n identifier: prod_inputs\n pipeline:\n identifier: my-pipeline\n variables:\n - name: env\n type: String\n value: production"
}
更新輸入集:
{
"resource_type": "input_set",
"resource_id": "prod_inputs",
"pipeline_id": "my-pipeline",
"body": "inputSet:\n name: Production Inputs\n identifier: prod_inputs\n pipeline:\n identifier: my-pipeline\n variables:\n - name: env\n type: String\n value: production\n - name: replicas\n type: String\n value: \"3\""
}
刪除輸入集:
{
"resource_type": "input_set",
"resource_id": "prod_inputs",
"pipeline_id": "my-pipeline"
}
資源類型
255 種資源類型,組織於 41 個工具集中。每種資源類型支援 CRUD 操作的子集與選用的執行動作。
平台
| 資源類型 | 列出 | 取得 | 建立 | 更新 | 刪除 | 執行動作 |
|---|---|---|---|---|---|---|
organization | x | x | x | x | x | |
project | x | x | x | x | x |
管線
| 資源類型 | 列出 | 取得 | 建立 | 更新 | 刪除 | 執行動作 |
|---|---|---|---|---|---|---|
pipeline | x | x | x | x | x | run、retry |
pipeline_v1 (Alpha) | x | x | x | x | x | run |
pipeline_dynamic_execution | run | |||||
execution | x | x | interrupt | |||
execution_inputs | x | |||||
trigger | x | x | x | x | x | |
pipeline_summary | x | |||||
input_set | x | x | x | x | x | |
runtime_input_template | x | |||||
runtime_input_template_v1 | x | |||||
pipeline_resolved_yaml | x | |||||
approval_instance | x | approve、reject |
當管線工具集啟用時,兩種管線 YAML 資源類型皆可用。HARNESS_PIPELINE_VERSION 與 HTTP x-harness-pipeline-version 初始化標頭會選取預設版本偏好;它們不會隱藏其他版本。
AI 代理程式
| 資源類型 | 列出 | 取得 | 建立 | 更新 | 刪除 | 執行動作 |
|---|---|---|---|---|---|---|
agent | x | x | x | x | x | |
agent_run | x |
服務
| 資源類型 | 列出 | 取得 | 建立 | 更新 | 刪除 | 執行動作 |
|---|---|---|---|---|---|---|
service | x | x | x | x | x |
環境
| 資源類型 | 列出 | 取得 | 建立 | 更新 | 刪除 | 執行動作 |
|---|---|---|---|---|---|---|
environment | x | x | x | x | x | move_configs |
連接器
| 資源類型 | 列出 | 取得 | 建立 | 更新 | 刪除 | 執行動作 |
|---|---|---|---|---|---|---|
connector | x | x | x | x | x | test_connection |
connector_catalogue | x |
基礎設施
| 資源類型 | 列出 | 取得 | 建立 | 更新 | 刪除 | 執行動作 |
|---|---|---|---|---|---|---|
infrastructure | x | x | x | x | x | move_configs |
密碼
| 資源類型 | 列出 | 取得 | 建立 | 更新 | 刪除 | 執行動作 |
|---|---|---|---|---|---|---|
secret | x | x |
執行日誌
| 資源類型 | 列出 | 取得 | 建立 | 更新 | 刪除 | 執行動作 |
|---|---|---|---|---|---|---|
execution_log | x |
稽核軌跡
| 資源類型 | 列出 | 取得 | 建立 | 更新 | 刪除 | 執行動作 |
|---|---|---|---|---|---|---|
audit_event | x | x |
委派者
| 資源類型 | 列出 | 取得 | 建立 | 更新 | 刪除 | 執行動作 |
|---|---|---|---|---|---|---|
delegate | x | x | ||||
delegate_token | x | x | x | x | revoke、get_delegates |
程式碼儲存庫
| 資源類型 | 列出 | 取得 | 建立 | 更新 | 刪除 | 執行動作 |
|---|---|---|---|---|---|---|
repository | x | x | x | x | ||
branch | x | x | x | x | ||
commit | x | x | x | diff、diff_stats | ||
file_content | x | x | blame | |||
tag | x | x | x | |||
repo_rule | x | x | ||||
space_rule | x | x |
commit 建立會直接透過 Harness Code API 提交一個或多個檔案動作,而不需複製。傳入 body.title、body.branch 與 body.actions;每個動作是 CREATE、UPDATE、DELETE 或 MOVE,且 UPDATE 需要目前的 blob SHA。
file_content 列出會回傳 ref 上的每個路徑;取得會回傳檔案或目錄內容(省略或傳入空的 path 以取得儲存庫根目錄;巢狀路徑保留斜線)。省略 git_ref 以使用儲存庫預設分支 — 請勿猜測 main。
成品登錄
| 資源類型 | 列表 | 取得 | 建立 | 更新 | 刪除 | 執行操作 |
|---|---|---|---|---|---|---|
registry | x | x | ||||
artifact | x | |||||
artifact_version | x | |||||
artifact_file | x |
檔案存放庫
| 資源類型 | 列表 | 取得 | 建立 | 更新 | 刪除 | 執行操作 |
|---|---|---|---|---|---|---|
file_store | x | x | x | x | x | list_children |
file_store 透過通用工具管理 Harness 檔案存放庫的檔案與資料夾。它支援帳戶、組織與專案範圍;傳入 resource_scope="account"|"org"|"project" 或貼上 Harness 檔案存放庫 URL,伺服器即可推導出範圍與 ID。
常見呼叫:
# List the account-level File Store.
harness_list(resource_type="file_store", resource_scope="account")
# Create a folder at the current scope root.
harness_create(resource_type="file_store", body={
name: "scripts",
type: "FOLDER",
parent_identifier: "Root"
})
# Upload a UTF-8 script file. Use content_base64 instead for binary data.
harness_create(resource_type="file_store", body={
name: "deploy.sh",
type: "FILE",
parent_identifier: "Root",
content: "#!/usr/bin/env bash\n./deploy",
mime_type: "text/x-shellscript",
file_usage: "SCRIPT"
})
# Rename metadata without replacing file content.
harness_update(resource_type="file_store", resource_id="deploy_script", body={
name: "deploy-prod.sh",
type: "FILE",
parent_identifier: "Root"
})
# List first-level children of a folder. This is a read-risk execute action.
harness_execute(resource_type="file_store", action="list_children",
resource_id="scripts_folder", params={folder_name: "scripts"})
Multipart 主體限制:
- 建立/更新接受 JSON
body,然後將其轉換為multipart/form-data以用於/ng/api/file-store。 name、type(FILE或FOLDER)與parent_identifier為必填;僅對所選範圍的根目錄使用字面值"Root"。FILE建立需要content(UTF-8 字串)或content_base64(有效的非空 base64)其中恰好一個。FILE更新可省略內容以進行僅中繼資料更新,或提供恰好一個內容欄位以取代內容。FOLDER建立/更新必須省略content與content_base64。- 選用的
file_usage必須為MANIFEST_FILE、CONFIG或SCRIPT;選用的純量中繼資料(如description、mime_type、path與tags)必須為字串。 - 上傳內容上限為 100 MB。確認提示會在徵詢前隱藏
content、content_base64與contentBase64的預覽。
list_children 接受簡寫(resource_id 加上 params.folder_name,或 params.file_store_id/params.folder_identifier 加上 params.folder_name)或完整的 FileStoreNode body(含 identifier、name 與 type: "FOLDER")。完整主體使用 Harness 的 camelCase parentIdentifier;簡寫可使用 params.parent_identifier。
範本
| 資源類型 | 列表 | 取得 | 建立 | 更新 | 刪除 | 執行操作 |
|---|---|---|---|---|---|---|
template | x | x | x | x | x |
範本操作使用 Harness 範本服務路徑(/template/api/templates...)。建立與更新需要在 body.template_yaml 或 body.yaml 中提供完整的範本 YAML 字串;version_label 針對特定版本進行更新/刪除,而刪除時若未提供 version_label 則刪除所有版本。
儀表板
| 資源類型 | 列表 | 取得 | 建立 | 更新 | 刪除 | 執行操作 |
|---|---|---|---|---|---|---|
dashboard | x | x | ||||
dashboard_data | x |
資料庫 DevOps
| 資源類型 | 列表 | 取得 | 建立 | 更新 | 刪除 | 執行操作 |
|---|---|---|---|---|---|---|
database_schema | x | x | x | x | x | |
database_instance | x | x | x | x | x | |
database_snapshot_object | x | x | ||||
database_llm_authoring_pipeline | x |
基礎設施即程式碼管理(IaCM)
IaCM 資源預設啟用且大多為專案範圍。先使用 iacm_workspace 尋找工作區識別碼,然後對工作區資源、成本與活動差異使用該 workspace_id。使用 iacm_variable_set 取得帳戶、組織或專案範圍內可重複使用的變數集。提供者登錄為帳戶範圍。
iacm_module 涵蓋帳戶、組織與專案範圍。它預設使用帳戶登錄;每個操作(列表、取得、建立、更新)都傳送相同的 scope_org / scope_project 查詢參數,因此您建立的模組可在您建立的範圍內被發現。使用 resource_scope="account" | "org" | "project" 加上 org_id/project_id 選擇範圍。範圍設定為選擇加入:當省略 resource_scope 時,org_id/project_id 僅在您明確傳入時才套用——已設定的 HARNESS_ORG/HARNESS_PROJECT 預設值不會套用,因此環境中的專案設定無法在專案下靜默註冊帳戶模組。模組主體自身的 org/project 欄位用於定位其 Git 連接器,與此可見性範圍無關。
iacm_workspace 建立/更新僅回傳 { policy_evaluation }——請接著使用 harness_get 取得工作區。iacm_variable_set 與 iacm_module 建立/更新會回傳資源本身。iacm_provider 建立僅回傳 { id }——請接著使用 harness_get;更新僅限版本導向(POST/PUT /providers/{id}/version)——沒有中繼資料 PUT。版本寫入可能回傳空主體;HarnessClient 會將其正規化為 { status: "SUCCESS", message: "No content" }。
變數集的更新為 HTTP PUT 且集合為完整取代——務必先 harness_get,然後 PUT 完整的期望主體(更新時 terraform_variables / environment_variables 為必填;省略/留空會清除連接器與變數檔案)。模組更新也是 PUT——建議對選用欄位採用先取得後 PUT 的方式。寫入操作為 medium_write 且需要確認(徵詢或 confirm: true)。
變數集與提供者登錄的 RBAC(iac_variableset_*、iac_providerregistry_*)目前在 Harness 中為實驗性——在 iac-server 啟用強制執行前,存取檢查一律允許。模組登錄 RBAC(iac_registry_view / iac_registry_edit)為啟用狀態且可強制執行。MCP 一律原封不動地轉發呼叫者的 PAT/SAT。
| 資源類型 | 列表 | 取得 | 建立 | 更新 | 刪除 | 執行操作 |
|---|---|---|---|---|---|---|
iacm_workspace | x | x | x | x | ||
iacm_variable_set | x | x | x | x | ||
iacm_resource | x | |||||
iacm_module | x | x | x | x | ||
iacm_provider | x | x | x | x | ||
iacm_workspace_costs | x | |||||
iacm_activity_resource_change | x |
典型工作流程:
harness_list(resource_type="iacm_workspace", org_id="...", project_id="...")尋找工作區。- 在
iacm_workspace上使用harness_create/harness_update從零開始或從範本(associated_template)建立,或更新現有工作區——回應僅為{ policy_evaluation }。 harness_get(resource_type="iacm_workspace", workspace_id="...")取得已建立/更新的工作區。- 在
iacm_variable_set上使用harness_list/harness_create/harness_update(可選用resource_scope)取得可重複使用的 Terraform/env 變數集——回應為 VariableSet 資源。 - 在
iacm_module上使用harness_list/harness_create/harness_update存取模組登錄(name+system為必填;加上resource_scope與org_id/project_id以取得組織或專案範圍的模組)——回應為模組資源。 - 在
iacm_provider上使用harness_list/harness_create/harness_update存取帳戶提供者登錄(建立時body.type為必填;建立僅回傳{ id }——然後harness_get;更新僅建立/更新版本)——版本更新可能回傳空成功。 harness_list(resource_type="iacm_resource", org_id="...", project_id="...", workspace_id="...")檢查 Terraform 資源、輸出與資料來源。harness_list(resource_type="iacm_workspace_costs", org_id="...", project_id="...", workspace_id="...")檢視每次執行的成本項目。harness_list(resource_type="iacm_activity_resource_change", org_id="...", project_id="...", activity_id="...", workspace_id="...")檢查計畫、套用或銷毀活動的資源前後差異。
IaCM 列表回應將 page_count 暴露為僅目前頁面的計數(iacm_variable_set 除外,它不分頁)。當 has_more 為 true 時,持續請求下一個以 1 為基礎的頁面,並在需要總數時加總頁面計數。
內部開發者入口網站(IDP)
| 資源類型 | 列表 | 取得 | 建立 | 更新 | 刪除 | 執行操作 |
|---|---|---|---|---|---|---|
idp_entity | x | x | ||||
scorecard | x | x | ||||
scorecard_check | x | x | ||||
scorecard_stats | x | |||||
scorecard_check_stats | x | |||||
idp_score | x | x | ||||
idp_workflow | x | execute | ||||
idp_tech_doc | x |
拉取請求
| 資源類型 | 列表 | 取得 | 建立 | 更新 | 刪除 | 執行操作 |
|---|---|---|---|---|---|---|
pull_request | x | x | x | x | close、merge | |
pr_reviewer | x | x | submit_review | |||
pr_comment | x | x | x | |||
pr_check | x | |||||
pr_activity | x |
使用 harness_execute(resource_type="pull_request", action="close", ...) 進行明確的關閉操作。harness_update 也接受 body.state(open 或 closed),並將狀態變更路由到專用的 Harness Code PR 狀態端點;請在單獨的更新呼叫中傳送標題/描述編輯。
使用 harness_list(resource_type="pr_activity", filters={type: ["comment", "code-comment"]}, ...) 讀取 PR 評論。使用 pr_comment 進行評論寫入操作。
發布管理
發布管理(RMG)資源預設啟用。定義資源(release_process、release_activity)支援列表/取得/建立/更新/刪除,搭配 body.yaml;在建立/更新前呼叫 harness_schema(resource_type="release_process"|"release_activity")。執行資源監控進行中的發布——大多數列表操作需要 release_id(來自 harness_list resource_type=release 的 UUID,或 UI URL 片段,如 identifier-1.0.0-abc)。將 RMG 發布 URL 貼入 harness_list 以自動填入 release_id。
RMG 呼叫使用 ${HARNESS_BASE_URL}/gateway/rmg,並透過 Harness-Account 標頭進行帳戶範圍設定。當提供 org_id/project_id 時,組織/專案範圍使用基於標頭的範圍設定。release_execution_phase 僅限列表——在呼叫 harness_get 於階段輸入/輸出資源時,使用每個階段項目的 identifier 欄位作為 params.phase_identifier(不要在 release_execution_phase 本身上呼叫 harness_get)。發布列表的 status 篩選僅在目前頁面上於用戶端套用;當結果可能跨頁時,請使用相同篩選條件繼續分頁。
| 資源類型 | 列表 | 取得 | 建立 | 更新 | 刪除 | 執行動作 |
|---|---|---|---|---|---|---|
release_process | x | x | x | x | x | |
release_activity | x | x | x | x | x | |
release | x | x | ||||
release_execution_phase | x | |||||
release_execution_task | x | |||||
release_execution_activity | x | |||||
release_input | x | |||||
release_execution_phase_input | x | |||||
release_execution_phase_output | x | |||||
release_execution_activity_input | x | |||||
release_execution_activity_output | x |
典型工作流程:
harness_list(resource_type="release_process", org_id="...", project_id="...")以探索編排流程定義。- 在建立/更新之前先執行
harness_schema(resource_type="release_process")(或release_activity);接著使用body.yaml執行harness_create/harness_update。 harness_list(resource_type="release", org_id="...", project_id="...")以尋找作用中或最近的版本(預設回溯 30 天;可選用filters.status、filters.search_term、filters.days_back)。harness_get(resource_type="release", release_id="...")以取得版本詳細資料。harness_list(resource_type="release_execution_phase", filters={ release_id: "..." })以取得階段狀態;release_execution_task和release_execution_activity使用相同的release_id。- 對
release_input、release_execution_phase_input、release_execution_phase_output、release_execution_activity_output或release_execution_activity_input執行harness_get,使用release_id加上params.phase_identifier/params.activity_identifier/activity_execution_id,如各資源文件所述。
Vibe
預設啟用的 vibe 工具集涵蓋 ${HARNESS_BASE_URL}/vibe/v1 下的 Vibe Orchestrator BFF 合約。它使用現有的 Harness 連線和帳戶標頭,不會在請求主體中新增帳戶/組織/專案查詢參數或範圍欄位。團隊使用 Harness API 金鑰驗證(PAT/SAT)驗證了 Vibe 流程,因此預設工作階段不需要選擇加入設定。精選的 OpenAPI 文件說明 bearer/工作階段驗證;伺服器的 OAuth 模式會轉送目前工作階段的 bearer token。自動化回歸測試驗證兩種標頭路徑;閘道驗證仍受目標環境組態的約束。
| 資源類型 | 列表 | 取得 | 建立 | 更新 | 刪除 | 執行動作 |
|---|---|---|---|---|---|---|
vibe_project | x | prepare、deploy | ||||
vibe_app_lifecycle | x | events |
API 支援兩種輸入路徑。請保留這些 API 原生請求格式:
| 提供給編碼代理的來源 | API 流程 |
|---|---|
| GitHub 儲存庫連結/連接器 | harness_create 搭配 resource_type="vibe_project" 和 body.mode 以及模式特定欄位。合約命名了 github_link 和 github_connector,但未定義其 URL、分支或連接器欄位格式;這些欄位會轉發到後端,不會自行發明對應關係。 |
| ZIP 檔案 | 呼叫 prepare 並提供應用程式名稱和檔案中繼資料,將位元組上傳到傳回的簽署目標,然後呼叫 deploy。 |
| 本機來源目錄 | 編碼代理會先將預期的工作區來源封裝成本機 ZIP,然後遵循 ZIP 流程。本機路徑或對話內容不是 API 支援的來源上傳方式。 |
封裝目錄時,請包含建置所需的來源、manifest、鎖定檔、組態和預期的未提交編輯。排除憑證、.git、已安裝的相依項目和產生的成品。封裝和簽署上傳會在檔案可存取的位置進行;託管的 MCP 伺服器無法讀取編碼代理的本機目錄。
對於現有的 ZIP,請準備上傳:
{
"resource_type": "vibe_project",
"action": "prepare",
"body": {
"name": "demo-app",
"file": {
"path": "app.zip",
"size_bytes": 12345,
"content_type": "application/zip"
}
}
}
將此傳遞給 harness_execute。大小必須描述實際的 ZIP;size_bytes、content_type 和 md5 為可選且可為 null。其他準備欄位會保留以供後端驗證,如 OpenAPI 所允許。準備會傳回 projectId、sourceId 和 upload,包括每個檔案的 uploadUrl、method、headers 和 expiresAt。使用該簽署 URL、方法和標頭直接上傳檔案位元組;請精確保留 URL,不要將 Harness 憑證加入儲存請求。準備動作不會讀取或上傳本機檔案。
成功上傳後,明確部署:
{
"resource_type": "vibe_project",
"action": "deploy",
"resource_id": "<projectId returned by prepare>"
}
對於 JSON 匯入,請改用傳回的 id。部署也接受 body: {"project_id": "<Vibe app id>"} 或 params.app_id;API 線路欄位為 snake_case 的 project_id,即使準備傳回 camelCase 的 projectId。通用工具的最上層 project_id 是 Harness 範圍識別碼,絕不會用作 Vibe 應用程式 ID。匯入和準備會建立應用程式/來源;兩者都不會啟動部署。寫入不會自動重試,部署使用現有的高風險確認政策。
使用 harness_get(resource_type="vibe_app_lifecycle", resource_id="<Vibe app id>") 讀取進度。它保留應用程式 URL、執行階段、子步驟、失敗、日誌行和建置分析器詳細資料。events 執行動作接受 resource_id 或 params.app_id,並將 SSE 端點作為有限批次使用:最多 20 個 JSON 事件或連線後五秒,回應限制為 1 MiB。這些限制屬於 Vibe 端點。連線的 HARNESS_API_TIMEOUT_MS 也同時限制連線和串流消耗;到期會傳回逾時錯誤。完成的批次會傳回 events 和 stop_reason(end、event_limit 或 duration_limit)並關閉串流。初始連線失敗和中斷的串流都不會重試。事件是暫時的差異,沒有文件化的重播游標;請使用生命週期取得以取得權威快照。兩個生命週期讀取都可在唯讀模式中使用。
功能旗標
| 資源類型 | 列表 | 取得 | 建立 | 更新 | 刪除 | 執行動作 |
|---|---|---|---|---|---|---|
fme_workspace | x | |||||
fme_environment | x | x | x | x | x | |
fme_feature_flag | x | x | x | x | x | kill、restore、reallocate、archive、unarchive |
fme_feature_flag_definition | x | x | x | x | x | kill、restore、reallocate |
fme_rollout_status | x | |||||
fme_rule_based_segment | x | x | x | x | ||
fme_rule_based_segment_definition | x | x | enable、disable、change_request | |||
fme_traffic_type | x | |||||
fme_identity | x | x | ||||
fme_standard_segment | x | x | ||||
fme_segment_keys | x | x | ||||
fme_segment | x | x | x | x | x | |
fme_segment_definition | x | x | x | x | x | list_keys、add_keys、remove_keys |
fme_metric | x | x | x | x | x | |
fme_event_type | x | x |
FME(Split.io)資源 — fme_* 資源支援雙模式範圍:舊版呼叫傳遞 workspace_id 並存取 Split.io API(api.split.io);較新的呼叫同時傳遞 org_id+project_id,並存取 Harness 原生端點(標準 HARNESS_API_KEY/HARNESS_BASE_URL,與其他所有 harness_* 資源使用相同的驗證)。在同一呼叫中同時傳遞 workspace_id 和 org_id/project_id,或將 org_id 與單獨的 project_id 混合使用,都是錯誤 — 每次呼叫請選擇一種模式。除非資源標記為僅限 Harness 原生,否則以下每個操作都可在舊版模式中使用,且保持不變。Harness 原生模式的涵蓋範圍目前較窄:
-
fme_workspace— 沒有 Harness 原生對應;僅限舊版(用於探索workspace_id值)。 -
fme_environment— 雙模式list(workspace_id或org_id+project_id)。get/create/update/delete僅限 Harness 原生(/fme/api/v4/environments)— MCP 從未對這些操作有workspace_id契約。原生列表使用可選的offset/limit(最多 100 個;harness_listsize對應到limit);信封{data, limit, offset, totalCount}被提升為items/total。原生建立/更新使用isProduction(接受production作為別名)。原生更新是 JSON Merge Patch;name和isProduction不可清除。名稱最多 15 個字元。 -
fme_feature_flag— 雙模式,兩個分支皆完整接線。Harness 原生(org_id+project_id):list/get/create/delete命中/fme/api/v4/feature-flags(create的 body:name、trafficType、可選的description/tags/owners,依CreateFeatureFlagRequest);update發送 merge-patch 到/fme/api/v4/feature-flags/{name};archive/unarchive命中/fme/api/v4/feature-flags/{name}/archive|unarchive(僅可選的comment— 無title,依ArchiveUnarchiveRequest);kill/restore/reallocate命中/fme/api/v4/feature-flag-definitions/{name}/kill|restore|reallocate,以environment_id作為查詢參數(可選的comment/title,依FeatureFlagDefinitionActionRequest)。 -
fme_feature_flag_definition—get/create/update保持雙模式(workspace_id或org_id+project_id)。list/delete/kill/restore/reallocate僅限 Harness 原生(org_id+project_id)— MCP 從未對那些操作有workspace_id契約。原生列表需要feature_flag_name並使用offset/limit(預設 100,最多 100);不接受environment_id。刪除和執行需要environment_id。Kill/restore/reallocate 與fme_feature_flag上的操作相同。Get/create/update body 符合舊版(treatments、defaultTreatment、defaultRule、可選的rules/baselineTreatment/trafficAllocation/comment),加上 Harness 原生模式中的可選title。原生更新是 JSON Merge Patch。 -
fme_rollout_status— 雙模式list。傳遞org_id+project_id(較佳)或已棄用的workspace_id。原生分頁使用offset/limit(最多 100 個;harness_listsize對應到limit);結果被提升為items/total。每個項目有id、name和可選的description。 -
fme_rule_based_segment—(已棄用 — 請參閱fme_segment。)Harness 原生模式在每個操作上都被拒絕(list/get/create/delete)— 請改用fme_segment;此資源僅支援舊版workspace_id契約。 -
fme_rule_based_segment_definition—(已棄用 — 請參閱fme_segment_definition。)Harness 原生模式在每個操作/動作上都被拒絕(list/update/enable/disable/change_request)— 請改用fme_segment_definition(那裡沒有enable/disable/change_request對應);此資源僅支援舊版workspace_id/environment_id契約。 -
fme_traffic_type— 雙模式list。傳遞org_id+project_id(較佳)或已棄用的workspace_id。原生分頁使用offset/limit(最多 100 個;harness_listsize對應到limit);結果被提升為items/total。每個項目有id和name(無displayAttributeId)。 -
fme_identity— 如果org_id+project_id一起傳遞,create/update尚未實作;否則作為正常舊版呼叫進行。 -
fme_standard_segment— 已棄用。舊版workspace_id仍命中 Split v2。Harness 原生被拒絕 — 請改用fme_segment。 -
fme_segment_keys—list/update保持舊版(workspace_id/environment_id+segment_name)。Harness 原生(org_id+project_id)被拒絕 — 請改用fme_segment_definition執行list_keys/add_keys/remove_keys。 -
fme_segment— 僅限原生(org_id+project_id)。CRUD。list/get/update/delete需要segment_type:STANDARD|LARGE|RULE_BASED。建立 body:name、trafficType、segmentType;可選的description、tags、owners。 -
fme_segment_definition— 僅限原生。CRUD 加上執行list_keys/add_keys/remove_keys。更新僅限描述。當鍵仍存在時,刪除會失敗並出現hasDependents。 -
fme_metric— 僅限 Harness 原生(無舊版workspace_id支援)。list/get/create/update/delete已接線到/fme/api/v4/metrics(list的harness_listsize對應到limit)。create需要spread,即使後端CreateMetricRequest將其保持為可選(預設PER)— 這是僅限 MCP 端的更嚴格契約,因為省略它會靜默改變RATE指標的語義。update是 JSON Merge Patch;name/trafficType不可變且不接受。delete是永久硬刪除(無封存/還原)— 分類為destructive。 -
fme_event_type— 僅限 Harness 原生(無舊版workspace_id支援)。唯讀:list/get已接線到/fme/api/v4/event-types;id是事件名稱。只有過去 30 天內有事件的事件類型可見;get對請求工作區流量類型範圍之外的事件類型,或閒置超過 30 天的事件類型,回傳 404。列表篩選:name(子字串)、traffic_type(按 ID 或名稱)、offset/limit(harness_listsize對應到limit)。在fme_metric的baseEventTypes/filterEventType或event_type_ids篩選中引用真實事件類型 ID 之前,請使用此資源來探索真實的事件類型 ID,而不是猜測 ID。
在單使用者/自架模式中,舊版模式驗證使用來自 HARNESS_FME_API_KEY 的 Bearer token,回退到非佔位符的 HARNESS_API_KEY。HARNESS_FME_API_KEY 可以是舊版 Split 管理員金鑰或具 FME 權限的 Harness PAT/SAT,但在 multi-user 模式中被拒絕,因此共享部署無法覆寫每個工作階段使用者的憑證。託管 OAuth/服務路由憑證用於 Harness 平台 API,無法驗證直接的 Split.io 請求。fme_feature_flag 支援舊版模式的完整生命週期管理:建立(需要 traffic_type_id)、列表、取得、更新中繼資料、刪除,以及 kill/restore/reallocate/archive/unarchive 執行動作。使用 fme_traffic_type 探索流量類型 ID,使用 fme_identity 建立/更新身分屬性,使用 fme_standard_segment / fme_segment_keys 檢查標準區段並新增成員鍵。fme_rule_based_segment 提供目標區段的 CRUD,而 fme_rule_based_segment_definition 管理特定環境的區段規則,包含啟用/停用和變更請求核准流程。
GitOps
| 資源類型 | 列表 | 取得 | 建立 | 更新 | 刪除 | 執行動作 |
|---|---|---|---|---|---|---|
gitops_agent | x | x | ||||
gitops_argo_project | x | |||||
gitops_app_project_mapping | x | x | x | x | import | |
gitops_autocreate_log | x | |||||
gitops_application | x | x | sync | |||
gitops_cluster | x | x | ||||
gitops_repository | x | x | ||||
gitops_applicationset | x | x | ||||
gitops_repo_credential | x | x | ||||
gitops_app_event | x | |||||
gitops_pod_log | x | |||||
gitops_managed_resource | x | |||||
gitops_resource_action | x | |||||
gitops_dashboard | x | |||||
gitops_app_resource_tree | x | |||||
gitops_cluster_link | x | x | x |
混沌工程
| 資源類型 | 列表 | 取得 | 建立 | 更新 | 刪除 | 執行動作 |
|---|---|---|---|---|---|---|
chaos_experiment | x | x | x | x | run, stop | |
chaos_experiment_run | x | |||||
chaos_experiment_variable | x | |||||
chaos_component_variable | x | |||||
chaos_input_set | x | x | x | x | x | |
chaos_experiment_template | x | x | x | create_from_template, list_revisions, get_variables, get_yaml, compare_revisions | ||
chaos_probe | x | x | x | x | enable, verify, get_manifest | |
chaos_probe_in_run | x | |||||
chaos_probe_template | x | x | x | get_variables | ||
chaos_infrastructure | x | |||||
chaos_k8s_infrastructure | x | x | x | check_health | ||
chaos_enabled_infrastructure | x | |||||
chaos_environment | x | |||||
chaos_hub | x | x | x | x | x | |
chaos_hub_fault | x | |||||
chaos_fault | x | x | x | get_variables, get_yaml | ||
chaos_fault_template | x | x | x | list_revisions, get_variables, get_yaml, compare_revisions | ||
chaos_fault_experiment_run | x | |||||
chaos_action | x | x | x | x | get_manifest | |
chaos_action_template | x | x | x | list_revisions, get_variables, compare_revisions | ||
chaos_loadtest | x | x | x | x | x | run, stop |
chaos_service | x | x | x | x | x | list_experiment_runs, list_load_tests |
chaos_application_map | x | x | ||||
discovered_agent | x | |||||
discovered_namespace | x | |||||
discovered_service | x | |||||
discovered_network_map | x | |||||
chaos_guard_condition | x | x | x | |||
chaos_guard_rule | x | x | x | enable | ||
chaos_recommendation | x | x | ||||
chaos_risk | x | x | ||||
chaos_dr_test | x | x | ||||
scanned_risk | x | x | occurrences, summary_by_service | |||
chaos_risk_rule | x | x | ||||
chaos_risk_scan | x | x | x | x | x | retry, abort, report, report_download, heatmap |
雲端成本管理 (CCM)
| 資源類型 | 列表 | 取得 | 建立 | 更新 | 刪除 | 執行動作 |
|---|---|---|---|---|---|---|
cost_perspective | x | x | x | x | x | |
cost_breakdown | x | |||||
cost_timeseries | x | |||||
cost_summary | x | x | ||||
cost_recommendation | x | x | update_state, override_savings, create_jira_ticket, create_snow_ticket | |||
cost_anomaly | x | |||||
cost_anomaly_summary | x | |||||
cost_category | x | x | ||||
cost_account_overview | x | |||||
cost_filter_value | x | |||||
cost_recommendation_stats | x | |||||
cost_recommendation_detail | x | |||||
cost_commitment | x | |||||
ai_budget | x | x | x | x | x | |
ai_budget_overview | x | |||||
ai_budget_consumption | x | |||||
ai_budget_override_request | x | x | x | approve, reject |
軟體工程洞察 (SEI)
SEI 資源已整合以提升 token 效率。使用 metric 或 aspect 參數取得 DORA、團隊/組織樹狀結構詳細資訊,以及 AI 洞察。
| 資源類型 | 列表 | 取得 | 建立 | 更新 | 刪除 | 執行動作 |
|---|---|---|---|---|---|---|
sei_metric | x | |||||
sei_productivity_metric | x | |||||
sei_dora_metric | x | 傳入 metric:deployment_frequency、change_failure_rate、mttr、lead_time 或 *_drilldown | ||||
sei_team | x | x | ||||
sei_team_detail | x | 傳入 aspect:integrations、developers、integration_filters | ||||
sei_org_tree | x | x | ||||
sei_org_tree_detail | x | x | 傳入 aspect:efficiency_profile、productivity_profile、business_alignment_profile、integrations、teams | |||
sei_business_alignment | x | x | 傳入 aspect:feature_metrics、feature_summary、drilldown 以取得資料 | |||
sei_ai_usage | x | x | 傳入 aspect:metrics、breakdown、summary、top_languages | |||
sei_ai_adoption | x | x | 傳入 aspect:metrics、breakdown、summary | |||
sei_ai_impact | x | 傳入 aspect:pr_velocity、rework | ||||
sei_ai_raw_metric | x |
軟體供應鏈安全 (SCS)
| 資源類型 | 列表 | 取得 | 建立 | 更新 | 刪除 | 執行動作 |
|---|---|---|---|---|---|---|
scs_artifact_source | x | |||||
artifact_security | x | x | ||||
scs_artifact_component | x | |||||
scs_artifact_remediation | x | |||||
scs_chain_of_custody | x | |||||
scs_compliance_result | x | |||||
code_repo_security | x | x | ||||
scs_sbom | x |
證據保管庫
證據保管庫儲存 in-toto 證明(SDLC 證據)。列表支援透過 resource_scope 進行帳戶/組織/專案範圍的篩選。單一自由文字篩選(管線、單獨的工件、gitoid)使用 search_term;額外的名稱約束使用 filters.subject_name;主體內容摘要使用 filters.subject_digest。取得透過 gitoid_sha256 查詢,並需要 org_id/project_id(來自列表列)。下載(harness_execute 動作 download)會回傳一個有時效性的 download_url — 務必向使用者顯示該連結。需要功能旗標 SCS_EVIDENCE_VAULT。
| 資源類型 | 列表 | 取得 | 建立 | 更新 | 刪除 | 執行動作 |
|---|---|---|---|---|---|---|
attestation | x | x | download |
安全測試編排(STO)
| 資源類型 | 列表 | 取得 | 建立 | 更新 | 刪除 | 執行動作 |
|---|---|---|---|---|---|---|
security_issue | x | |||||
security_issue_filter | x | |||||
security_exemption | x | x | approve, reject | |||
remediation_diff | x |
security_exemption 建立是一個 high_write 操作。伺服器從已驗證的 PAT 推導出 requester_id,設定 exemptFutureOccurrences=true,並在未提供時將 duration_days 預設為 30。若要列出豁免,請傳入一個較小的明確頁面大小(例如 filters: { "status": "Pending", "size": 5 }),並遵循每個回應中回傳的 _nextPageHint。
安全豁免執行工作流程:
- 使用
harness_list搭配resource_type="security_exemption"和明確的status,例如Pending、Approved、Rejected、Expired或Canceled。 - 使用
harness_execute搭配action="approve"和必要的body.scope:CURRENT、ACCOUNT、ORG或PROJECT。CURRENT在豁免的現有範圍內核准;其他範圍則在內部使用 STO 提升端點。當省略時,伺服器會從已驗證的使用者自動填入body.approver_id;body.comment為選填。 - 使用
action="reject"拒絕豁免。省略時,body.approver_id也會自動填入。 - 沒有單獨的
promote執行動作。當請求的結果是在帳戶、組織或專案範圍內核准時,請使用action="approve"搭配非CURRENT的body.scope。
存取控制
| 資源類型 | 列表 | 取得 | 建立 | 更新 | 刪除 | 執行動作 |
|---|---|---|---|---|---|---|
user | x | x | ||||
user_group | x | x | x | x | x | |
service_account | x | x | x | x | ||
role | x | x | x | x | ||
role_assignment | x | x | ||||
resource_group | x | x | x | x | ||
permission | x |
治理
| 資源類型 | 列表 | 取得 | 建立 | 更新 | 刪除 | 執行動作 |
|---|---|---|---|---|---|---|
policy | x | x | x | x | x | |
policy_set | x | x | x | x | x | |
policy_evaluation | x | x |
部署凍結
| 資源類型 | 列表 | 取得 | 建立 | 更新 | 刪除 | 執行動作 |
|---|---|---|---|---|---|---|
freeze_window | x | x | x | x | x | toggle_status |
global_freeze | x | manage |
服務覆寫
| 資源類型 | 列表 | 取得 | 建立 | 更新 | 刪除 | 執行動作 |
|---|---|---|---|---|---|---|
service_override | x | x | x | x | x |
設定
| 資源類型 | 列表 | 取得 | 建立 | 更新 | 刪除 | 執行動作 |
|---|---|---|---|---|---|---|
setting | x |
MCP 提示詞
DevOps
| Prompt | Description | Parameters |
|---|---|---|
build-deploy-app | 端到端 CI/CD 工作流程:掃描 Git 儲存庫、產生 CI 管線(建置並推送 Docker 映像)、探索或產生 K8s 清單、建立 CD 管線並部署——在 CI 失敗時自動重試(最多 5 次),CD 失敗時自動重試(最多 3 次,需使用者許可)。重試耗盡時,提供 Harness UI 深層連結至所有已建立的資源,供手動調查。 | repoUrl (必填), imageName (必填), projectId (選填), namespace (選填) |
debug-pipeline-failure | 分析失敗的執行:接受執行 ID、管線 ID 或 Harness URL。透過 harness_diagnose 取得階段/步驟明細、失敗詳情、代理程式資訊及失敗步驟日誌,然後提供根本原因分析與建議修正。自動追蹤鏈式管線失敗。 | executionId (選填), projectId (選填) |
pipeline_summarizer | 擷取並彙總管線執行中的所有步驟日誌。使用 harness_diagnose 搭配 include_logs: true, include_all_step_logs: true 取得每個步驟的日誌,然後以表格呈現步驟名稱、狀態、持續時間及發生事件(基於日誌的摘要)。不會跳過任何步驟。 | executionId (選填), projectId (選填) |
create-pipeline | 根據自然語言需求產生新的管線 YAML,並檢視現有資源以取得上下文 | description (必填), projectId (選填) |
create-agent | 互動式建置 Harness AI 代理程式——檢查現有代理程式(更新時偵測目前的 agent.uses 與舊版 agent.step.group.steps 規格格式)、收集需求、以適當格式產生代理程式規格、與使用者確認,然後透過 harness_create/harness_update 建立或更新 | agent_name (必填), task_description (必填), org_id (選填), project_id (選填) |
onboard-service | 逐步引導新服務的上線流程,包含環境與部署管線 | serviceName (必填), projectId (選填) |
dora-metrics-review | 檢視 DORA 指標(部署頻率、變更失敗率、MTTR、前置時間),附 Elite/High/Medium/Low 分級與改善建議 | teamRefId (選填), dateStart (選填), dateEnd (選填) |
setup-gitops-application | 引導 GitOps 應用程式上線——驗證代理程式、叢集、儲存庫,並建立應用程式 | agentId (必填), projectId (選填) |
chaos-resilience-test | 設計混沌實驗以測試服務韌性,包含故障注入、探針及預期結果 | serviceName (必填), projectId (選填) |
feature-flag-rollout | 規劃並執行跨環境的漸進式功能旗標推出,附安全閘道 | flagIdentifier (必填), projectId (選填) |
migrate-pipeline-to-template | 分析現有管線並從中萃取可重用的階段/步驟範本 | pipelineId (必填), projectId (選填) |
delegate-health-check | 檢查代理程式連線、健康狀態、權杖狀態,並疑難排解基礎設施問題 | projectId (選填) |
developer-portal-scorecard | 檢視服務的 IDP 記分卡,並找出改善開發者體驗的落差 | projectId (選填) |
pending-approvals | 尋找等待核准的管線執行、顯示詳情,並提供核准或拒絕的選項 | projectId (選填), orgId (選填), pipelineId (選填) |
FinOps
| Prompt | Description | Parameters |
|---|---|---|
optimize-costs | 分析雲端成本資料、呈現建議與異常,依潛在節省金額排序 | projectId (選填) |
cloud-cost-breakdown | 依服務、環境或叢集深入分析雲端成本,附趨勢分析與異常偵測 | perspectiveId (選填), projectId (選填) |
commitment-utilization-review | 分析預留執行個體與節省方案使用率,找出浪費並最佳化承諾 | projectId (選填) |
cost-anomaly-investigation | 調查成本異常——判斷根本原因、受影響資源及修正措施 | projectId (選填) |
rightsizing-recommendations | 檢視並排定權限調整建議的優先順序,可選擇建立 Jira 或 ServiceNow 工單 | projectId (選填), minSavings (選填) |
DevSecOps
| Prompt | Description | Parameters |
|---|---|---|
security-review | 檢視 Harness 資源中的安全性問題,並依嚴重性建議修正 | projectId (選填), severity (選填, 預設: critical,high) |
vulnerability-triage | 對管線與工件中的安全性漏洞進行分流,依嚴重性與可利用性排序 | projectId (選填), severity (選填) |
sbom-compliance-check | 稽核工件的 SBOM 與合規狀態——授權風險、政策違規、元件漏洞 | artifactId (選填), projectId (選填) |
supply-chain-audit | 端到端軟體供應鏈安全稽核——來源、保管鏈、政策合規 | projectId (選填) |
security-exemption-review | 檢視待處理的安全性豁免,並做出批次核准或拒絕決定 | projectId (選填) |
bulk-exemption-create | 為多個 STO 問題建立有依據的安全性豁免,附明確範圍與期間指引 | projectId (必填), exemption_type (必填), reason (必填), 問題篩選器 (選填) |
access-control-audit | 稽核使用者權限、過度授權帳戶及角色指派,以強制執行最小權限 | projectId (選填), orgId (選填) |
Harness Code
| Prompt | 描述 | 參數 |
|---|---|---|
code-review | 審查拉取請求 — 分析 diff、提交、檢查和評論,以提供關於錯誤、安全性、效能和程式碼風格的結構化回饋 | repoId (必填), prNumber (必填), projectId (選填) |
pr-summary | 從分支的提交歷史和 diff 自動產生 PR 標題和描述 | repoId (必填), sourceBranch (必填), targetBranch (選填, 預設: main), projectId (選填) |
branch-cleanup | 分析儲存庫中的分支,並建議刪除過時或已合併的分支 | repoId (必填), projectId (選填) |
MCP 資源
| 資源 URI | 描述 | MIME 類型 |
|---|---|---|
pipeline:///{pipelineId} | Pipeline YAML 定義 | application/x-yaml |
pipeline:///{orgId}/{projectId}/{pipelineId} | Pipeline YAML(含明確範圍) | application/x-yaml |
executions:///recent | 最近 10 筆 pipeline 執行摘要 | application/json |
schema:///pipeline | Harness pipeline JSON Schema | application/schema+json |
schema:///template | Harness template JSON Schema | application/schema+json |
schema:///trigger | Harness trigger JSON Schema | application/schema+json |
schema:///pipeline_v1 (Alpha) | Harness V1 pipeline JSON Schema(簡化 stages/steps 格式) | application/schema+json |
schema:///agent-pipeline | Harness AI agent pipeline JSON Schema | application/schema+json |
agent-docs:///legacy-format | 舊版 agent spec 格式參考(agent.step.group.steps / PLUGIN_TASK),由 create-agent prompt 在更新現有舊版格式 agent 時讀取 | text/markdown |
工具集篩選
預設情況下,45 個工具集中的 41 個已啟用。四個工具集為選擇加入,並從預設中排除:
ansible— Harness Ansible(inventories、playbooks、hosts、activity)。選擇加入,因為它屬於專案範圍,並增加了許多使用者不需要的概念。autonomous_work— Development Harness(自主工作)。選擇加入;請參閱工具集描述以了解範圍。observability-evaluations— 排定的生產遙測評估規則。選擇加入,因為它依賴於已部署的評分控制平面。registries-v3— Harness Artifact Registry v3(packages、versions、files、metadata、scans、firewall exceptions)。選擇加入,直到 v3 寫入功能落地,因此 agent 不必在 v1 registries/artifacts 和 v3 packages/versions 之間進行區分。
使用 + 前綴新增工具集
使用 + 前綴,以在預設工具集之外明確包含選擇加入的工具集:
# Explicitly include Ansible alongside all defaults
HARNESS_TOOLSETS=+ansible
移除預設工具集
使用 - 前綴來排除您不需要的工具集:
# Remove chaos and ccm from defaults
HARNESS_TOOLSETS=-chaos,-ccm
結合 + 和 -
# Add Ansible, remove chaos
HARNESS_TOOLSETS=+ansible,-chaos
明確允許清單
明確的逗號分隔清單(無前綴)會完全取代預設值。僅啟用列出的工具集:
# Only expose pipelines, services, and connectors
HARNESS_TOOLSETS=pipelines,services,connectors
可用的工具集名稱:
| 工具集 | 資源類型 |
|---|---|
platform | organization, project |
pipelines | pipeline, pipeline_v1, pipeline_dynamic_execution, execution, execution_inputs, trigger, pipeline_summary, input_set, approval_instance |
agents | agent, agent_run |
services | service |
environments | environment |
connectors | connector, connector_catalogue |
infrastructure | infrastructure |
secrets | secret |
logs | execution_log |
audit | audit_event |
delegates | delegate, delegate_token |
repositories | repository, branch, commit, file_content, tag, repo_rule, space_rule |
registries | registry, artifact, artifact_version, artifact_file |
file_store | file_store |
templates | template |
dashboards | dashboard, dashboard_data |
idp | idp_entity, scorecard, scorecard_check, scorecard_stats, scorecard_check_stats, idp_score, idp_workflow, idp_tech_doc |
pull-requests | pull_request, pr_reviewer, pr_comment, pr_check, pr_activity |
feature-flags | fme_workspace, fme_environment, fme_feature_flag, fme_feature_flag_definition, fme_rollout_status, fme_rule_based_segment, fme_rule_based_segment_definition, fme_traffic_type, fme_identity, fme_standard_segment, fme_segment_keys, fme_segment, fme_segment_definition, fme_metric, fme_event_type |
gitops | gitops_agent, gitops_argo_project, gitops_app_project_mapping, gitops_autocreate_log, gitops_application, gitops_cluster, gitops_repository, gitops_applicationset, gitops_repo_credential, gitops_app_event, gitops_pod_log, gitops_managed_resource, gitops_resource_action, gitops_dashboard, gitops_app_resource_tree, gitops_cluster_link |
chaos | chaos_experiment, chaos_experiment_run, chaos_experiment_variable, chaos_component_variable, chaos_input_set, chaos_experiment_template, chaos_probe, chaos_probe_in_run, chaos_probe_template, chaos_infrastructure, chaos_k8s_infrastructure, chaos_enabled_infrastructure, chaos_environment, chaos_hub, chaos_hub_fault, chaos_fault, chaos_fault_template, chaos_fault_experiment_run, chaos_action, chaos_action_template, chaos_loadtest, chaos_service, chaos_application_map, discovered_agent, discovered_namespace, discovered_service, discovered_network_map, chaos_guard_condition, chaos_guard_rule, chaos_recommendation, chaos_risk, chaos_dr_test, scanned_risk, chaos_risk_rule, chaos_risk_scan |
ccm | cost_perspective, cost_breakdown, cost_timeseries, cost_summary, cost_recommendation, cost_anomaly, cost_anomaly_summary, cost_category, cost_account_overview, cost_filter_value, cost_recommendation_stats, cost_recommendation_detail, cost_commitment |
sei | sei_metric, sei_productivity_metric, sei_dora_metric, sei_team, sei_team_detail, sei_org_tree, sei_org_tree_detail, sei_business_alignment, sei_ai_usage, sei_ai_adoption, sei_ai_impact, sei_ai_raw_metric |
scs | scs_artifact_source, artifact_security, scs_artifact_component, scs_artifact_remediation, scs_chain_of_custody, scs_compliance_result, code_repo_security, scs_sbom |
evidence-vault | attestation |
sto | security_issue, security_issue_filter, security_exemption, remediation_diff |
dbops | database_schema, database_instance, database_snapshot_object, database_llm_authoring_pipeline |
autonomous_work (選擇加入) | work_item, work_item_resume, work_item_approve, work_timeline, work_budget, work_phase, work_phase_artifact, work_artifact, budget, budget_grant, budget_usage, work_class, work_trigger, capability, risk_evaluator, team, member, member_template, software_component, content_source_connector |
access_control | user, user_group, service_account, role, role_assignment, resource_group, permission |
governance | policy, policy_set, policy_evaluation |
freeze | freeze_window, global_freeze |
overrides | service_override |
settings | setting |
knowledge-graph | kg_queryable_type_summary, kg_grammar, hql_query |
semantic-layer | kg_type, kg_related_type |
ai-evals | eval_dataset, eval_dataset_item, evaluation, eval_run, eval_run_item, eval_run_by_eval, eval_metric, eval_metric_set, eval_metric_set_entry, eval_suite, eval_suite_evaluation, eval_suite_run, eval_target, eval_annotation, eval_analytics, eval_git_settings, eval_registry_item, eval_git_registration, online_eval |
observability-evaluations (選擇加入) | observability_evaluation_rule |
iacm | iacm_workspace, iacm_variable_set, iacm_resource, iacm_module, iacm_provider, iacm_workspace_costs, iacm_activity_resource_change |
ansible (選擇加入) | ansible_inventory, ansible_playbook, ansible_host, ansible_host_activity, ansible_activity |
registries-v3 (選擇加入) | package_v3, version_v3, file_v3, registry_metadata_v3, package_metadata_v3, version_metadata_v3, file_metadata_v3, metadata_key_v3, metadata_value_v3, artifact_scan_v3, bulk_scan_evaluation_v3, firewall_exception_v3, firewall_exception_version_v3 |
release-management | release_process, release_activity, release, release_execution_phase, release_execution_task, release_execution_activity, release_input, release_execution_phase_input, release_execution_phase_output, release_execution_activity_input, release_execution_activity_output |
vibe | vibe_project, vibe_app_lifecycle |
架構
+------------------+
| AI Agent |
| (Claude, etc.) |
+--------+---------+
| MCP (stdio or HTTP)
+--------v---------+
| MCP Server |
| 11 Generic Tools |
+--------+---------+
|
+--------v---------+
| Registry | <-- Declarative resource definitions
| 45 Toolsets (41 default) |
| 255 Resource Types|
+--------+---------+
|
+--------v---------+
| HarnessClient | <-- Auth, retry, rate limiting
+--------+---------+
| HTTPS
+--------v---------+
| Harness REST API |
+-------------------+
運作方式
- 工具是通用動詞:
harness_list、harness_get等。它們接受一個resource_type參數,用於路由到正確的 API 端點。 - 註冊表將每個
resource_type映射到一個ResourceDefinition——一個宣告式資料結構,指定 HTTP 方法、URL 路徑、路徑/查詢參數映射,以及回應提取邏輯。 - 分派解析資源定義、建構 HTTP 請求(路徑替換、查詢參數、
resource_scope感知的帳戶/組織/專案注入)、透過HarnessClient呼叫 Harness API,並提取相關的回應資料。 - 工具集過濾(
HARNESS_TOOLSETS)控制在啟動時將哪些資源定義載入註冊表。 - 結構化輸出使用 MCP
outputSchema宣告;harness_list將陣列和常見的列表包裝器強制轉換為物件形狀的structuredContent,以支援嚴格的用戶端。 - 深層連結會自動附加到回應中,為每個資源提供直接的 Harness UI URL。
- 精簡模式會從列表結果中移除冗長的中繼資料,僅保留可操作的欄位(身分、狀態、類型、時間戳記、深層連結),以最小化 token 使用量。
新增資源類型
在 src/registry/toolsets/ 中建立新檔案,或將資源新增到現有的工具集:
// src/registry/toolsets/my-module.ts
import type { ToolsetDefinition } from "../types.js";
export const myModuleToolset: ToolsetDefinition = {
name: "my-module",
displayName: "My Module",
description: "Description of the module",
resources: [
{
resourceType: "my_resource",
displayName: "My Resource",
description: "What this resource represents",
toolset: "my-module",
scope: "project", // "project" | "org" | "account"
identifierFields: ["resource_id"],
listFilterFields: ["search_term"],
operations: {
list: {
method: "GET",
path: "/my-module/api/resources",
queryParams: { search_term: "search", page: "page", size: "size" },
responseExtractor: (raw) => raw,
description: "List resources",
},
get: {
method: "GET",
path: "/my-module/api/resources/{resourceId}",
pathParams: { resource_id: "resourceId" },
responseExtractor: (raw) => raw,
description: "Get resource details",
},
},
},
],
};
然後在 src/registry/index.ts 中匯入它,並將其新增到 ALL_TOOLSETS 陣列中。不需要變更任何工具檔案。
開發
# Build
pnpm build
# Watch mode
pnpm dev
# Type check
pnpm typecheck
# Run tests
pnpm test
# Watch tests
pnpm test:watch
# Interactive MCP Inspector
pnpm inspect
# Refresh generated README counts from the built registry
pnpm docs:generate
# Verify README counts and clone instructions are current
pnpm docs:check
# Sync and verify JSON Schemas used by harness_schema
pnpm sync-schemas
pnpm check-schema-coverage
專案結構
src/
index.ts # Entrypoint, transport setup
config.ts # Env var validation (Zod)
client/
harness-client.ts # HTTP client (auth, retry, rate limiting)
types.ts # Shared API types
registry/
index.ts # Registry class + dispatch logic
types.ts # ResourceDefinition, ToolsetDefinition, etc.
toolsets/ # One file per toolset (declarative data)
platform.ts
pipelines.ts
services.ts
ccm.ts
access-control.ts
...
tools/ # 11 generic MCP tools
harness-list.ts
harness-get.ts
harness-create.ts
harness-update.ts
harness-delete.ts
harness-execute.ts
harness-search.ts
harness-diagnose.ts
harness-describe.ts
harness-status.ts
harness-schema.ts
resources/ # MCP resource providers
pipeline-yaml.ts
execution-summary.ts
prompts/ # MCP prompt templates
build-deploy-app.ts # DevOps: end-to-end build & deploy workflow
debug-pipeline.ts # DevOps: debug failed executions
create-pipeline.ts # DevOps: generate pipeline from requirements
onboard-service.ts # DevOps: onboard new service
dora-metrics.ts # DevOps: DORA metrics review
setup-gitops.ts # DevOps: GitOps application setup
chaos-resilience.ts # DevOps: chaos experiment design
feature-flag-rollout.ts # DevOps: progressive flag rollout
migrate-to-template.ts # DevOps: extract templates from pipeline
delegate-health.ts # DevOps: delegate health check
developer-scorecard.ts # DevOps: IDP scorecard review
optimize-costs.ts # FinOps: cost optimization
cloud-cost-breakdown.ts # FinOps: cost deep-dive
commitment-utilization.ts # FinOps: RI/savings plan analysis
cost-anomaly.ts # FinOps: anomaly investigation
rightsizing.ts # FinOps: rightsizing recommendations
security-review.ts # DevSecOps: security issue review
vulnerability-triage.ts # DevSecOps: vulnerability triage
sbom-compliance.ts # DevSecOps: SBOM compliance audit
supply-chain-audit.ts # DevSecOps: supply chain audit
exemption-review.ts # DevSecOps: exemption approval
access-control-audit.ts # DevSecOps: access control audit
code-review.ts # Harness Code: PR code review
pr-summary.ts # Harness Code: auto-generate PR summary
branch-cleanup.ts # Harness Code: stale branch cleanup
pending-approvals.ts # Approvals: find and act on pending approvals
utils/
cli.ts # CLI arg parsing (transport, port)
errors.ts # Error normalization
logger.ts # stderr-only logger
progress.ts # MCP progress & logging notifications
rate-limiter.ts # Client-side rate limiting
deep-links.ts # Harness UI deep link builder
response-formatter.ts # Consistent MCP response formatting
compact.ts # Compact list output for token efficiency
tests/
config.test.ts # Config schema validation tests
utils/
response-formatter.test.ts
deep-links.test.ts
errors.test.ts
registry/
registry.test.ts # Registry loading, filtering, dispatch tests
引導確認
寫入工具(harness_create、harness_update、harness_delete、harness_execute)使用 MCP 引導確認 在動作的風險需要時提示使用者確認——僅限 medium_write、high_write 和 destructive 操作。低風險的建立/更新/讀取(例如 pipeline.create、pipeline.update、hql_query.run)會靜默執行,不顯示提示。當顯示提示時,使用者會看到即將執行的操作並選擇接受或拒絕,為實際變更或執行事物的操作提供真正的人員介入核准。
運作方式:
- LLM 以
medium_write+ 風險呼叫寫入工具(例如harness_delete、harness_execute pipeline.run)。低風險的建立/更新/讀取不會顯示提示。 - 伺服器向用戶端發送引導確認請求,包含操作摘要和一個
confirm核取方塊(預設勾選)。 - 使用者檢視詳細資訊並點擊接受(勾選
confirm)或拒絕/取消。 - 如果以勾選
confirm: true的方式接受,操作會繼續執行。如果以未勾選confirm的方式接受、拒絕或取消,操作會被封鎖並告知 LLM(明確拒絕是權威性的,不會被工具呼叫上的confirm: true繞過)。
用戶端支援:
| 用戶端 | 引導確認支援 |
|---|---|
| Cursor | 是 |
| VS Code (Copilot) | 是 |
| Claude Desktop | 尚未支援 |
| Devin Desktop | 尚未支援 |
| MCP Inspector | 是 |
當用戶端缺少支援時,引導確認行為會因操作風險而異:
| 風險等級 | 用戶端支援引導確認 | 傳遞 confirm: true | 行為 |
|---|---|---|---|
read、low_write | 任何 | 任何 | 靜默執行——不顯示提示(confirm 在此風險等級無效) |
medium_write、high_write、destructive | 是 | 任何 | 提示使用者。僅在使用者勾選 confirm: true(schema 的預設值)接受時才繼續執行。明確拒絕、取消或接受時未勾選 confirm: false(使用者取消勾選)是權威性的,不會被工具呼叫上的 confirm: true 繞過。接受時缺少 confirm 欄位會被視為用戶端未能顯示可用的提示——可透過使用 confirm: true 重試來恢復 |
medium_write、high_write、destructive | 否 | 否 | 封鎖(回傳錯誤並提示使用 confirm: true 重試) |
medium_write、high_write、destructive | 否 | 是 | 繼續執行(非互動式自動化的明確選擇加入) |
任何(等於或低於 HARNESS_AUTO_APPROVE_RISK) | 任何 | 任何 | 自動核准而不提示 |
如果 elicitInput 在執行時期失敗(傳輸錯誤、不支援的方法),且操作為 medium_write+,則呼叫會被封鎖,除非呼叫者傳遞 confirm: true。當用戶端無法顯示提示或回傳退化的接受({action: "accept"} 缺少確認欄位)時,confirm: true 會作為後備方案被採用,但它不會覆蓋已完成引導確認交握的用戶端所做出的明確拒絕/取消。
自主模式
自主模式表示伺服器會繼續執行所有操作——包括寫入和破壞性動作——而不提示確認。透過設定以下項目啟用:
HARNESS_AUTO_APPROVE_RISK=all
這是部署層級的上限:一旦設定,個別工作階段無法超越它(不過它們可以透過 x-harness-auto-approve-risk 標頭為每個工作階段選擇更嚴格的閾值)。
或在您的 MCP 用戶端設定中:
{
"mcpServers": {
"harness": {
"command": "npx",
"args": ["harness-mcp-v2"],
"env": {
"HARNESS_API_KEY": "pat.xxx.xxx.xxx",
"HARNESS_AUTO_APPROVE_RISK": "all"
}
}
}
}
**部分自主:**您也可以僅自動核准特定風險等級以下的操作,同時仍提示較高風險的操作:
# Auto-approve reads and low-risk writes; prompt for medium_write, high_write, destructive
HARNESS_AUTO_APPROVE_RISK=low_write
# Auto-approve up to high-risk writes; only prompt for destructive operations
HARNESS_AUTO_APPROVE_RISK=high_write
| 值 | 自動核准的內容 |
|---|---|
none(預設) | 無——沒有自動核准閾值 |
low_write | 讀取 + 低風險寫入 |
medium_write | 讀取 + 低 + 中風險寫入 |
high_write | 讀取 + 低 + 中 + 高風險寫入 |
all | 所有操作,包括破壞性操作 |
自主模式警告:
HARNESS_AUTO_APPROVE_RISK=all會跳過所有操作的確認,包括harness_delete。請謹慎使用,並考慮搭配HARNESS_TOOLSETS來限制可用的資源類型。
遷移注意事項:
HARNESS_SKIP_ELICITATION=true仍受支援,並映射到HARNESS_AUTO_APPROVE_RISK=all。會記錄棄用警告到 stderr。如果兩者都設定,HARNESS_AUTO_APPROVE_RISK優先。
安全性
- 機密永遠不會暴露。
secret資源類型僅回傳中繼資料(名稱、類型、範圍)——機密值永遠不會包含在任何回應中。 - 需要確認的操作在可用時使用引導確認。 當寫入或執行動作具有
medium_write、high_write或destructive風險時,harness_create、harness_update、harness_delete和harness_execute會在繼續執行前嘗試 MCP 引導確認(請參閱 引導確認)。低風險動作(read、low_write——例如pipeline.create、pipeline.update、hql_query.run)會靜默執行,不顯示提示。 - 中風險及以上預設封鎖。 如果無法為
medium_write、high_write或destructive操作取得確認,它們會被封鎖,而不是盲目執行。可使用HARNESS_AUTO_APPROVE_RISK覆寫以支援自主工作流程。 - CORS 限制為同源。 HTTP 傳輸僅允許同源請求,防止惡意網站針對 localhost 上的 MCP 伺服器發動 CSRF 攻擊。
- HTTP 速率限制。 HTTP 傳輸強制每個 IP 每分鐘 60 個請求,以防止請求洪水。
- API 速率限制。 Harness API 用戶端強制每秒 10 個請求的限制,以避免觸發上游速率限制。
- 強制分頁邊界。 列表查詢上限為總共 10,000 個項目,每頁 100 個,以防止記憶體耗盡。
- 指數退避重試。 暫時性失敗(HTTP 429、5xx)會以指數退避和抖動進行重試。
- 僅綁定 localhost。 HTTP 傳輸預設綁定到
127.0.0.1——無法從網路存取。 - 無 stdout 日誌。 所有日誌都寫入 stderr,以避免破壞 stdio JSON-RPC 傳輸。
互補技能
Harness MCP 伺服器與 Harness Skills 搭配良好——這是一組現成的 Claude Code 技能(斜線指令),專為常見的 Harness 工作流程設計。將它們與此 MCP 伺服器一起安裝,即可獲得如 /deploy、/rollback、/triage 等的高階自動化,而無需編寫自訂提示詞。
疑難排解與常見陷阱
| 症狀 | 可能原因 | 處理方式 |
|---|---|---|
HARNESS_ACCOUNT_ID is required when the API key does not include an account ID segment... | API 金鑰不是受支援的帳戶範圍格式(pat.<accountId>... 或 sat.<accountId>...),因此無法推斷帳戶 ID | 明確設定 HARNESS_ACCOUNT_ID |
啟動時出現 Unknown transport: "..." | 不支援的 CLI 傳輸參數 | 僅使用 stdio 或 http |
啟動時出現 Invalid HARNESS_TOOLSETS: ... | 一個或多個工具集名稱無法辨識 | 僅使用 Toolset Filtering 中的名稱(需完全相符) |
HTTP mcp-session-id header is required... | 工作階段請求未附帶工作階段標頭 | 先傳送 initialize,然後在 POST/GET/DELETE /mcp 上包含 mcp-session-id |
HTTP Session not found... | 工作階段在 MCP_SESSION_TTL_MS 毫秒閒置後過期或已關閉 | 重新執行 initialize 以建立新工作階段,然後使用新標頭重試 |
在 /mcp 上出現 HTTP 405 Method Not Allowed | MCP 端點不支援的方法 | 僅使用 POST、GET、DELETE 或 OPTIONS |
HTTP Invalid request | JSON 內文無效或請求內文超過 HARNESS_MAX_BODY_SIZE_MB | 驗證 JSON 負載的大小/結構;如有需要,增加 HARNESS_MAX_BODY_SIZE_MB |
工具回傳 Unknown resource_type "..." | 資源類型拼寫錯誤或透過 HARNESS_TOOLSETS 被過濾掉 | 呼叫 harness_describe(可搭配選用的 search_term)以探索有效類型 |
Missing required field "... for path parameter ..." | 專案/組織範圍的呼叫缺少識別碼 | 設定 HARNESS_ORG/HARNESS_PROJECT,或在每次工具呼叫時傳遞 org_id/project_id |
resource_scope "org" requires org_id... 或 resource_scope "project" requires project_id... | 多範圍資源被強制限定為組織/專案範圍,但識別碼不足 | 傳遞缺少的 org_id/project_id、設定 HARNESS_ORG/HARNESS_PROJECT,或在支援時使用 resource_scope: "account" |
Read-only mode is enabled ... operations are not allowed | HARNESS_READ_ONLY=true 封鎖了建立/更新/刪除/執行 | 如果預期進行寫入操作,請設定 HARNESS_READ_ONLY=false |
| 管線執行在預檢階段因未解析的必要輸入而失敗 | 提供的 inputs 未涵蓋必要的執行時期佔位符 | 取得 runtime_input_template、提供缺少的簡單金鑰,或對結構化輸入使用 input_set_ids |
管線 CI 簡寫(branch、tag、pr_number、commit_sha)未生效 | 已提供 inputs.build,因此刻意跳過簡寫展開 | 移除 inputs.build 以使用簡寫展開,或保留完整的明確 build 結構 |
| 管線執行載入了錯誤的 YAML 修訂版本 | 管線定義儲存在 Git 中,且執行未指定所需的管線分支 | 在 run 動作上傳遞 params.pipeline_branch;這對應到 Harness branch |
wait: true 回傳 _wait.error | 管線觸發成功,但伺服器端輪詢失敗 | 在決定是否重新執行前,使用 harness_get(resource_type="execution", ...) 重新檢查 execution_id |
wait: true 回傳 execution_timed_out: true | 執行在 wait_timeout_seconds 之前未達到終止狀態 | 使用回傳的 execution_id 重新檢查狀態;在執行 harness_diagnose 前等待終止狀態 |
| 執行日誌為空或 blob 下載回傳 403 | Harness 託管的日誌 blob URL 需要設定的 Harness 用戶端/驗證路徑,尤其是內部或自行管理的主機 | 將 HARNESS_BASE_URL 指向目標 Harness 主機,並使用 harness_get(resource_type="execution_log", ...) 或 harness_diagnose(..., include_logs=true),而非繞過 MCP 用戶端 |
Operation declined by user / Operation cancelled by user | 使用者拒絕或取消了引導確認對話框 — 具有權威性 | 與使用者確認操作詳細資訊;confirm: true 不會繞過明確的拒絕。使用者必須接受提示 |
Operation blocked: the client could not surface a usable confirmation prompt | 用戶端缺乏引導支援、elicitInput 失敗,或回傳了退化的接受 | 對非互動式自動化使用 confirm: true 重試,或使用支援引導的用戶端 |
範本建立/更新時出現 body.template_yaml (or body.yaml) is required | 範本 API 預期完整的 YAML 負載 | 在 body 中提供完整的 template_yaml 字串;對於刪除,傳遞 version_label 以刪除單一版本(省略則刪除所有版本) |
啟動時出現 HARNESS_BASE_URL must use HTTPS | HARNESS_BASE_URL 設定為 HTTP URL | 使用 HTTPS,或為本機開發設定 HARNESS_ALLOW_HTTP=true |
授權
MIT