Harness 集成

Harness MCP Server 保姆级教程:Hosted OAuth、Cursor、Claude 与权限验收

用 HARNESS-MCP-742 完成 M01–M14:路线选择、客户端配置、只读范围、工具发现、失败负例、写入确认、审计与撤销。

生态 连接 预计 80 分钟 更新 2026/9/10 核验 2026/9/10
本页目录
官方文档核验 · 尚未运行实测查看验证范围

已核读 Harness MCP Server、Hosted MCP、客户端配置、环境变量、批准与排错文档,并静态检查 M01–M14 材料;未登录 Harness、创建 PAT、完成 OAuth 或执行真实 MCP 写操作。

完成结果

学完后你会留下什么

一份填好的 M01–M14 MCP 验收表和运行卡,包含客户端、身份、范围、工具、正反例、写入确认、审计位置与撤销结果。

参考版本
Harness MCP 文档 2026-08-20 版(文档核读)
平台
macOS / Windows / Linux / Web
任务模式
Agent
权限
高权限
积分影响
适合谁
准备把 Cursor、Claude Code、Claude Desktop、VS Code 或 Windsurf 接入 Harness,并需要可审计验收证据的平台工程师
开始前确认
  • 有 Harness 测试账号与单独的非生产项目
  • 能查看本账号 RBAC 与项目标识
  • 自托管路线需 Node.js 和 npx
  • Hosted 路线需账号已启用 OAuth

Harness MCP Server 把 AI 客户端连接到真实的 Harness 平台资源。看到工具列表只证明协议接通;上线还要证明它用了正确身份、只能看测试范围、未知资源会失败、写操作会按预期停在确认处,而且撤销后不再可用。

本课固定一个非生产项目、一个最小权限身份和金丝雀 HARNESS-MCP-742,完成 M01–M14。首次实验只选一个客户端、一个项目和一条认证路线,不同时配置多个编辑器。

本站验证范围: 本页于 2026-09-10 核读 Harness 当前官方文档。官方当前描述为 11 个通用工具、30 个 toolsets 和 139 种 resource type;实际可见能力还受版本、许可和 RBAC 影响。本站未登录 Harness、创建 PAT、完成 OAuth 或调用真实资源。

下载两份实验材料

验收表的“实际结果”和“状态”默认留空。运行卡只记录凭据的负责人、保管位置和撤销时间,不要粘贴 PAT、OAuth token、密码或完整请求头

先理解调用链

你的任务
  → Cursor / Claude / VS Code 等 MCP 客户端
  → 11 个通用工具(list / get / create / update / delete / execute …)
  → Registry 根据 resource_type 选择 Harness API
  → Harness 身份、RBAC、资源范围与平台审计

harness_list 并不只对应一种资源。它会根据 resource_type 路由到 organization、project、pipeline、execution 等定义。工具数量少不代表权限面小;应同时限制身份、项目、toolset 和操作类型。

M01:固定实验合同

在运行卡填写:

字段首轮建议
账号 / org / project单独测试项目,禁止生产项目
客户端Cursor、Claude Code、Claude Desktop、VS Code 或 Windsurf 选一个
认证Hosted OAuth 或自托管 PAT 二选一
允许资源organizationprojectpipelineexecution
允许动作M01–M10 只允许 list / get
写入样本名称含 HARNESS-MCP-742 的测试草稿
硬停止身份不明、能看到越界项目、秘密值出现在输出、拒绝后仍写入

保存测试项目里一个已存在 pipeline 的 identifier 和一次 execution ID,后面所有正例都指向这两个对象。

M02:选择 Hosted 或自托管路线

Hosted MCP 适用于 Harness SaaS。它通过 Harness ID OAuth 沿用当前用户 RBAC,客户端不保存 Harness API key;账号需先启用 OAuth,SAML/OIDC 账号还要配置 MCP 专用回调。首轮应给登录用户分配测试项目只读角色。

harness-mcp-v2 适用于本地 stdio、自托管 HTTP、Docker 或 Kubernetes。单用户模式使用 PAT / service account token,多用户 HTTP 可逐 session 提供凭据。首轮应设置 HARNESS_READ_ONLY=true 并把 HARNESS_TOOLSETS 缩到实际需要的范围。

Hosted 默认地址为 https://mcp.harness.io/mcp;专属集群或非默认区域应向 Harness 确认地址。若普通网页登录成功但 Hosted MCP 仍报 invalid credentials,先确认账号是否开通 OAuth。

M03:创建最小权限身份并记录撤销点

自托管路线使用专门的短期 PAT 或 service account token,不复用管理员 token。限制到实验 project 的查看权限,并在密码管理器记录 owner、用途、到期与撤销入口。

Hosted 路线不把 API key 写进客户端,但 OAuth 使用当前 Harness 用户身份。先把该用户在测试项目中的 RBAC 收紧,再开始连接。

日志、截图和 CSV 只写凭据指纹末四位或内部编号。Harness secret 资源按官方说明只返回 metadata、不返回值;若看到秘密正文,立即停止实验并按泄露处置。

M04:自托管路线先验证运行环境

Hosted 用户直接进入 M05。本地路线先记录:

node --version
npx --version
which node
which npx

再用临时 shell 启动只读服务,确认包能运行后终止:

HARNESS_API_KEY='<只在当前 shell 提供>' \
HARNESS_ORG='<test-org>' \
HARNESS_PROJECT='<test-project>' \
HARNESS_TOOLSETS='platform,pipelines' \
HARNESS_READ_ONLY=true \
npx -y harness-mcp-v2@latest

不要把 token 写进版本库。GUI 客户端经常不继承 shell PATH;若报 npx ENOENTnode: No such file or directory,使用 M04 记录的绝对路径,并显式设置最小 PATH。

M05:只配置一个客户端

路线 A:Hosted OAuth

Cursor:

{
  "mcpServers": {
    "harness-hosted": {
      "url": "https://mcp.harness.io/mcp",
      "auth": { "CLIENT_ID": "mcp-client" }
    }
  }
}

Claude Code:

claude mcp add --transport http \
  --client-id mcp-client \
  harness-hosted-mcp https://mcp.harness.io/mcp

VS Code 的 .vscode/mcp.json

{
  "servers": {
    "harness-hosted": {
      "type": "http",
      "url": "https://mcp.harness.io/mcp"
    }
  },
  "inputs": []
}

保存后完成 Harness ID 登录。若企业使用 SAML/OIDC,IdP 必须包含 Harness 给出的 MCP 专用 ACS URL 或 redirect URI。

路线 B:本地 stdio

以 Cursor 的 .cursor/mcp.json 为例:

{
  "mcpServers": {
    "harness": {
      "command": "/absolute/path/to/npx",
      "args": ["-y", "harness-mcp-v2"],
      "env": {
        "HARNESS_API_KEY": "<由本机秘密方案注入>",
        "HARNESS_ORG": "<test-org>",
        "HARNESS_PROJECT": "<test-project>",
        "HARNESS_TOOLSETS": "platform,pipelines",
        "HARNESS_READ_ONLY": "true",
        "PATH": "/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin"
      }
    }
  }
}

Claude Desktop 顶层同样使用 mcpServers,macOS 配置路径是 ~/Library/Application Support/Claude/claude_desktop_config.json,Windows 是 %APPDATA%/Claude/claude_desktop_config.json。VS Code 本地配置外层使用 {"mcp":{"servers":{...}}}。复制前对照官方当前客户端页,不要在客户端之间照搬外层 schema。

M06:重启客户端并盘点实际能力

彻底退出并重新打开客户端。记录 MCP server 状态、启动时间和实际工具名;不要只看“绿色圆点”。先要求:

列出当前连接提供的 Harness MCP 工具名称,不调用任何写工具。
再用 harness_describe 说明 organization、project、pipeline、execution 四种 resource_type 的可用操作。
缺失或未知项明确写出,不要猜测。

通过条件是能看到实际工具,并能区分 resource type 与操作。Hosted 可见资源受许可影响,不要求机械出现 139 种。

M07:用正例证明身份与范围

要求客户端依次:

  1. harness_list(resource_type="organization"),找到预期 test org。
  2. harness_list(resource_type="project", org_id="<test-org>"),找到预期 test project。
  3. harness_get(resource_type="pipeline", ...),读取 M01 固定 pipeline。
  4. harness_get(resource_type="execution", ...),读取固定 execution。

把 resource identifier、结果数量、execution 状态和 Harness deep link 写进验收表。自然语言总结本身不算证据,必须能回到准确资源。

M08:用越界负例证明最小权限

请求读取一个已知存在、但该实验身份没有权限的其他项目。预期是拒绝、不可见或空结果,具体表现以 RBAC 为准;返回越界项目详情就是硬失败

再请求不存在的 project_id="HARNESS-MCP-742-NOT-FOUND"。记录 not found 与 permission denied 的实际差异,避免日后把权限问题误诊为资源不存在。

M09:用金丝雀验证只读问答

针对固定失败 execution 提问:

只读取这一次 execution。输出 pipeline identifier、execution identifier、commit、首个失败步骤、退出状态与对应 deep link。
观察不到的字段写“未知”。不要重跑、更新、创建或删除任何资源。
最后一行原样输出 HARNESS-MCP-742。

通过条件:标识与平台页面一致、结论能回到当前 execution,且没有写调用。只复述金丝雀不能证明读取成功。

M10:验证工具发现与错误恢复

故意调用不存在的 resource_type="pipeline_typo_742"。预期返回 unknown resource type;随后使用 harness_describe 搜索正确类型,再重新读取固定 pipeline。

若项目级调用提示缺少 path 参数,显式传 org_id / project_id,或核对 HARNESS_ORG / HARNESS_PROJECT。不要通过扩大账号权限修复字段缺失。

M11:证明只读模式真的挡住写入

HARNESS_READ_ONLY=true 或只读 RBAC 下,请求创建一个只含 HARNESS-MCP-742 名称的测试草稿。预期 create 被拒绝,随后 list/get 证明资源不存在。

若资源被创建,停止实验:检查启动的是不是另一套 MCP 配置、环境变量是否生效、Hosted 登录用户是否拥有超出预期的角色。

M12:在隔离项目验证确认机制

只有 M01–M11 全部通过,才为同一身份增加测试项目内的最小创建权限,并关闭本地 HARNESS_READ_ONLY。当前官方表列出 Cursor、VS Code Copilot 和 MCP Inspector 支持 elicitation;Claude Desktop、Windsurf 尚不支持。

在支持 elicitation 的客户端做两次:

  1. 请求创建 HARNESS-MCP-742-decline,看到完整摘要后拒绝,再证明资源不存在。
  2. 请求创建最小测试草稿 HARNESS-MCP-742-accept,核对 org/project/type/name 后接受,再用 get 读取准确 ID。

不支持 elicitation 的客户端中,create、update、execute 可能无对话框继续,delete 默认会被阻止。此时不要做 M12 写入实验;维持只读模式或只读 RBAC,并写“客户端不支持,未执行”。

不要设置 HARNESS_AUTO_APPROVE_RISK=all。它会跳过包括 delete 在内的确认。自动任务若确有需要,只在独立环境从 low_write 起步并缩小 toolsets;HTTP session header 只能把部署阈值收紧,不能放宽。

M13:检查日志、审计与故障证据

本地 stdio 可设置:

HARNESS_MCP_LOG_FILE=/approved/local/path/harness-mcp.log
HARNESS_AUDIT_FILE=/approved/local/path/harness-mcp-audit.ndjson
LOG_LEVEL=info

核对 M07、M08、M11、M12 的时间、操作、资源类型、结果和操作者能否追踪,并确认没有 PAT 或 secret value。HTTP 入口还应验证:非 loopback bind 需要 HARNESS_MCP_AUTH_TOKEN,默认 Host 校验、same-origin CORS、每 IP 每分钟 60 次限制,以及 Harness API 客户端每秒 10 次限制。

若报 mcp-session-id 缺失,先 initialize,再在后续 /mcp 请求携带同一 session ID;空闲 30 分钟后 session 会过期。VS Code 出现 401/404 重连循环时,按官方排错页移除缓存的 dynamic authentication provider,再重连 OAuth。

M14:撤销并证明入口失效

  1. 删除或禁用客户端里的 Harness MCP 配置。
  2. Hosted 路线撤销 OAuth session;自托管路线停止进程并撤销测试 token。
  3. 回收 M12 临时创建权限;测试草稿按团队流程清理并保存删除记录。
  4. 重启客户端,确认 Harness 工具列表消失或连接不可用。
  5. 用旧 token / 旧 session 做一次只读负例,预期认证失败;不要把秘密值写入验收表。

只有“配置移除 + 身份撤销 + 权限回收 + 客户端复验”全部有证据,才算完成。停止一个进程不能证明 OAuth 或 PAT 已失效。

常见失败定位

  • **Hosted invalid credentials:**先查账号是否启用 OAuth;修复后重新连接并完成 Harness ID 登录。
  • **SAML/OIDC reply URL mismatch:**先查 IdP 是否加入 MCP 专用回调;修复后从客户端重新发起登录。
  • **GUI 报 npx ENOENT:**先查 command 与 PATH 是否为绝对可用路径;重启后重新盘点工具。
  • **unknown resource_type:**先查拼写与 HARNESS_TOOLSETS;用 harness_describe 找到正确类型后重试。
  • **缺 org/project 字段:**先查默认范围或本次参数;显式传 identifier 后重试。
  • **write not allowed:**先查 HARNESS_READ_ONLY 与 RBAC,并确认本轮是否真的需要写。
  • **pipeline 缺 runtime inputs:**先读取 runtime_input_template;补齐 inputs 或 input set 后再在测试项目重试。
  • **拒绝后仍发生写入:**立即撤销 token,检查实际配置、auto-approve 阈值和审计记录。

最终验收门槛

  • M01–M14 每行都有时间、实际证据和状态,未执行项有原因。
  • 正例只能访问指定测试 org/project,越界与不存在资源的负例可区分。
  • 只读模式阻止 create/update/delete/execute,而不是只靠提示词约束。
  • 支持 elicitation 的客户端完成一次拒绝不落地与一次受控接受;不支持者没有冒充通过。
  • 日志和审计能定位操作但不包含秘密值。
  • 客户端配置、token/OAuth、临时权限和测试资源均有撤销记录。

接下来若要理解 MCP 与 Agent 运行框架的分层,完成 Agent Harness H01–H12 实验;若要把失败分析放进 Pipeline,再进入 Harness Worker Agents W01–W14 实验

官方资料

版本和参数,以这些来源为准

本文按实际任务重写,快速变化的信息仍应在操作前回到官方页面核对。

常见问题

继续操作前,先确认这些边界

Hosted MCP 和本地 harness-mcp-v2 怎么选?

Harness SaaS、账号已启用 OAuth且希望按当前用户 RBAC 登录时优先 Hosted;需要自管运行环境、PAT、toolsets、只读模式或审计输出时选择本地或自托管。

接通后为什么仍不能直接给生产写权限?

MCP 只负责连接和调用。客户端对 elicitation 的支持不同,账号 RBAC、toolset、只读模式、风险阈值和审计必须单独验收。

Claude Desktop 没弹确认框是否等于安全?

不等于。当前官方表中 Claude Desktop 尚不支持 elicitation;create、update、execute 可能无对话框继续,而 delete 默认失败关闭。此类客户端应先用 HARNESS_READ_ONLY 或只读 RBAC。

继续学习

按当前任务继续推进