更新:此回购已被引入Harness.iohttps://github.com/harness/mcp-server-主分行有这个回购,我们正在接受这个MCP
利用MCP服务器2.0
MCP(模型上下文协议)服务器,通过10个整合工具和137种资源类型,使AI代理能够完全访问Harness.io平台。

为什么使用此MCP服务器
大多数MCP服务器为每个API端点映射一个工具。对于像Harness这样广泛的平台来说,这意味着240多种工具——随着数量的增长,LLM在工具选择方面变得越来越差。上下文窗口充满了模式,每个新的端点都意味着新的代码。
此服务器的构建方式不同:
- 10种工具,137种资源类型。 基于注册表的调度系统路由
harness_list,harness_get,harness_create,等等到任何Harness资源——管道、服务、环境、组织、项目、功能标志、成本数据等等。LLM从10个工具中挑选,而不是数百个。 - 全平台覆盖。 29个工具集,涵盖CI/CD、GitOps、功能标志、云成本管理、安全测试、混沌工程、内部开发人员门户、软件供应链、治理、服务覆盖、可视化等。不仅仅是管道,还有整个Harness平台。
- 开箱即用的多项目工作流。 代理动态地发现组织和项目——不需要硬编码的环境变量。询问“显示所有项目中的失败执行”,代理可以浏览完整的帐户层次结构。
- 26个提示模板。 常见工作流的预构建提示:端到端构建和部署应用程序、调试失败的管道、查看DORA指标、分类漏洞、优化云成本、审计访问控制、计划功能标志推出、审查拉取请求、批准未决管道等。
- 无处不在。 本地客户端的Stdio传输(Claude Desktop、Cursor、Windsurf),远程/共享部署的HTTP传输,Docker和Kubernetes就绪。
- 零配置启动。 只需提供Harness API密钥。帐户ID是从PAT令牌中自动提取的,组织/项目默认值是可选的,工具集过滤允许您仅公开所需的内容。
- 可通过设计进行扩展。 添加新的Harness资源意味着添加一个声明性数据文件——没有新的工具注册,没有模式更改,也没有提示更新。
先决条件
在安装或运行服务器之前,您需要Harness API密钥:
- 登录到您的 线束帐户
- 首选 我的资料 → API密钥 → +新API密钥
- 创建新 代币 在API键下-这将生成格式为的PAT
pat... - 将令牌保存在安全的地方——下一步您将需要它
有关详细说明,请参阅 线束API快速启动.
快速开始
选项1:npx(推荐)
无需安装,只需运行它:
HARNESS_API_KEY=pat.xxx.xxx.xxx npx harness-mcp-v2@latest或者在AI客户端中配置API密钥(请参阅 客户端配置 在......下面
# Stdio transport (default — for Claude Desktop, Cursor, Windsurf, 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令牌中自动提取的(pat...),所以HARNESS_ACCOUNT_ID仅用于非PAT API密钥。
选项2:全局安装
npm install -g harness-mcp-v2
# Then run directly
harness-mcp-v2选项3:从源代码构建
对于开发或定制:
git clone https://github.com/thisrohangupta/harness-mcp-v2.git
cd harness-mcp-v2
pnpm install
pnpm build
# Run
pnpm start # Stdio transport
pnpm start:http # HTTP transport
pnpm inspect # Test with MCP Inspector命令行用法
harness-mcp-v2 [stdio|http] [--port ]
Options:
--port 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端点(初始化+会话请求) |
/mcp | GET | 服务器发起的消息的SSE流(进度、启发) |
/mcp | DELETE | 终止活动的MCP会话 |
/mcp | OPTIONS | CORS飞行前 |
/health | GET | 健康检查-退货 { "status": "ok", "sessions": } |
HTTP传输在 基于会话的模式。在上创建了一个新的MCP会话 initialize,服务器返回 mcp-session-id 该会话的后续请求必须包含相同的标头。
HTTP模式下的操作约束:
POST /mcp没有mcp-session-id必须是initialize请求。POST /mcp,GET /mcp,以及DELETE /mcp对于现有会话,需要mcp-session-id头球GET /mcp用于SSE通知(进度更新和启发提示)。- 空闲会话在30分钟后结束。
GET /health是唯一的非MCP端点。- 请求正文大小上限为
HARNESS_MAX_BODY_SIZE_MB(默认值10MB)。
# Health check
curl http://localhost:3000/health
# MCP initialize request (capture mcp-session-id response header)
curl -i -X POST http://localhost:3000/mcp \
-H "Content-Type: application/json" \
-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 "mcp-session-id: " \
-d '{"jsonrpc":"2.0","id":2,"method":"tools/list","params":{}}'
# Terminate session
curl -X DELETE http://localhost:3000/mcp \
-H "mcp-session-id: "客户端配置
注:HARNESS_DEFAULT_ORG_ID和HARNESS_DEFAULT_PROJECT_ID是可选的。代理可以使用以下命令动态发现组织和项目harness_list(resource_type="organization")和harness_list(resource_type="project")。仅当您想为方便起见固定默认作用域时,才设置它们。
故障排除npx ENOENT或node: No such file or directoryGUI应用程序(Cursor、Claude Desktop、Windsurf、VS Code)不会继承您的shellPATH,所以他们经常找不到npx或node。通过使用绝对路径和显式设置来修复此问题PATH在env块: ``json { "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值以上。常见位置: - **自制(macOS):**/opt/homebrew/bin/npx- **非挥发性物质:**~/.nvm/versions/node/v20.x.x/bin/npx(奔跑nvm which current找到确切的路径) - **系统节点:**/usr/local/bin/npx`
克劳德桌面(claude_desktop_config.json)
npx (zero install)
{
"mcpServers": {
"harness": {
"command": "npx",
"args": ["harness-mcp-v2"],
"env": {
"HARNESS_API_KEY": "pat.xxx.xxx.xxx"
}
}
}
}node (local install)
npm install -g harness-mcp-v2{
"mcpServers": {
"harness": {
"command": "harness-mcp-v2",
"env": {
"HARNESS_API_KEY": "pat.xxx.xxx.xxx"
}
}
}
}克劳德代码(通过 claude mcp add)
npx (zero install)
claude mcp add harness -- npx harness-mcp-v2node (local install)
npm install -g harness-mcp-v2
claude mcp add harness -- harness-mcp-v2然后设置 HARNESS_API_KEY 在您的环境中或 .env 文件。
光标(.cursor/mcp.json)
npx (zero install)
{
"mcpServers": {
"harness": {
"command": "npx",
"args": ["harness-mcp-v2"],
"env": {
"HARNESS_API_KEY": "pat.xxx.xxx.xxx"
}
}
}
}node (local install)
npm install -g harness-mcp-v2{
"mcpServers": {
"harness": {
"command": "harness-mcp-v2",
"env": {
"HARNESS_API_KEY": "pat.xxx.xxx.xxx"
}
}
}
}风帆冲浪(~/.windsurf/mcp.json)
npx (zero install)
{
"mcpServers": {
"harness": {
"command": "npx",
"args": ["harness-mcp-v2"],
"env": {
"HARNESS_API_KEY": "pat.xxx.xxx.xxx"
}
}
}
}node (local install)
npm install -g harness-mcp-v2{
"mcpServers": {
"harness": {
"command": "harness-mcp-v2",
"env": {
"HARNESS_API_KEY": "pat.xxx.xxx.xxx"
}
}
}
}Using a local build from source?
将命令替换为构建的路径 index.js:
{
"command": "node",
"args": ["/absolute/path/to/harness-mcp-v2/build/index.js", "stdio"]
}MCP网关
Harness MCP服务器与MCP网关完全兼容,MCP网关是提供集中身份验证、治理、工具路由和跨多个MCP服务器的可观察性的反向代理。由于服务器通过stdio和HTTP传输实现了标准的MCP协议,因此它可以在任何符合MCP的网关后面工作,而无需更改代码。
为什么要使用网关?
- 集中式凭据管理-代理配置中没有API密钥
- 跨团队所有工具调用的治理和审计日志记录
- 代理的单一端点,而不是与N个MCP服务器的N个连接
- 访问控制——限制哪些团队可以使用哪些工具
Docker MCP网关
在Docker MCP网关配置中注册服务器:
{
"mcpServers": {
"harness": {
"command": "npx",
"args": ["harness-mcp-v2"],
"env": {
"HARNESS_API_KEY": "pat.xxx.xxx.xxx"
}
}
}
}门钥匙
将Harness MCP服务器添加到您的 端口密钥MCP网关 对于企业治理、成本跟踪和多LLM路由:
{
"mcpServers": {
"harness": {
"command": "npx",
"args": ["harness-mcp-v2"],
"env": {
"HARNESS_API_KEY": "pat.xxx.xxx.xxx"
}
}
}
}轻量级LLM
添加到您的 LiteLLM代理配置:
mcp_servers:
- name: harness
command: npx
args:
- harness-mcp-v2
env:
HARNESS_API_KEY: "pat.xxx.xxx.xxx"Envoy AI网关
服务器使用 Envoy AI Gateway的MCP支持 通过HTTP传输:
# 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的AI MCP代理插件 通过您现有的Kong网关基础设施公开Harness MCP服务器。
其他网关
任何支持MCP规范的网关(Microsoft MCP网关、IBM ContextForge、Cloudflare Workers等)都可以代理此服务器。对于 基于stdio 网关,使用默认传输。对于 基于HTTP gateways,用以下命令启动服务器 http 传输并将网关指向 /mcp 终点。
码头工人
将服务器构建并运行为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默认情况下,容器在端口3000上以HTTP模式运行,并内置健康检查。
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个具有就绪/活性探测、资源限制和非根安全上下文的副本。该服务在内部公开端口80(针对容器端口3000)。
配置
服务器自动从 .env 项目根目录中的文件(如果存在)。复制 .env.example 到 .env 并填写你的价值观。环境变量也可以通过shell或MCP客户端配置进行设置。
| 变量 | 必填 | 默认 | 描述 |
|---|---|---|---|
HARNESS_API_KEY | 是 | -- | 利用个人访问令牌或服务帐户令牌 |
HARNESS_ACCOUNT_ID | 没有 | *(来自PAT)* | 利用帐户标识符。自动从PAT令牌中提取;仅用于非PAT API密钥 |
HARNESS_BASE_URL | 没有 | https://app.harness.io | 基本URL(自我管理线束的覆盖) |
HARNESS_DEFAULT_ORG_ID | 没有 | default | 默认组织标识符。可选便利性——代理可以通过以下方式动态发现组织 harness_list(resource_type="organization") |
HARNESS_DEFAULT_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请求正文大小(MB) http 运输 |
HARNESS_RATE_LIMIT_RPS | 没有 | 10 | 客户端对Harness API的请求限制(每秒请求数) |
LOG_LEVEL | 没有 | info | 日志冗长: debug, info, warn, error |
HARNESS_TOOLSETS | 没有 | *(全部)* | 以逗号分隔的已启用工具集列表(请参见 工具集筛选) |
HARNESS_READ_ONLY | 没有 | false | 阻止所有变异操作(创建、更新、删除、执行)。只允许列表和获取。适用于共享/演示环境 |
HARNESS_SKIP_ELICITATION | 没有 | false | 跳过所有启发确认提示。当 true,写入和删除操作无需用户批准即可进行,从而实现了完全自主的代理工作流。看 引出 |
HARNESS_ALLOW_HTTP | 没有 | false | 允许非HTTPS HARNESS_BASE_URL默认情况下,服务器为了安全起见强制使用HTTPS。设置为 true 仅用于针对非TLS Harness实例的本地开发 |
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.审计日志
所有写入操作(harness_create, harness_update, harness_delete, harness_execute)向stderr发送结构化审核日志条目。每个条目都包括工具名称、资源类型、操作、标识符和时间戳。这提供了一个审计跟踪,而不需要外部日志记录基础设施。
工具参考
服务器公开了11个MCP工具。大多数API工具接受 org_id 和 project_id 作为可选覆盖——如果省略,它们将回退到 HARNESS_DEFAULT_ORG_ID 和 HARNESS_DEFAULT_PROJECT_ID. harness_describe 仅是本地元数据,不使用组织/项目范围。
URL支持: 大多数API-facing工具都接受 url 参数--粘贴一个Harness UI URL,服务器会自动提取组织、项目、资源类型、资源ID、管道ID和执行ID。 harness_describe 不接受 url.
| 工具 | 说明 |
|---|---|
harness_describe | 发现可用的资源类型、操作和字段。没有API调用-返回本地注册表元数据。 |
harness_schema | 获取用于创建/更新资源的精确JSON模式定义。支持通过以下方式进行深钻 path 参数。 |
harness_list | 列出具有过滤、搜索和分页功能的给定类型的资源。 |
harness_get | 通过标识符获取单个资源。 |
harness_create | 创建新资源。支持内联和远程(Git支持)管道。通过以下方式提示用户确认 引出. |
harness_update | 更新现有资源。支持内联和远程(Git支持)管道。通过以下方式提示用户确认 引出. |
harness_delete | 删除资源。通过以下方式提示用户确认 引出破坏性的。 |
harness_execute | 对资源执行操作(运行/重试管道、从Git导入管道、切换标志、同步应用程序)。通过以下方式提示用户确认 引出。对于管道运行,请使用下面的运行时输入工作流(支持 branch/tag/pr_number/commit_sha 简写扩展)。 |
harness_search | 使用单个查询并行搜索多个资源类型。 |
harness_diagnose | 诊断 pipeline, connector, delegate,以及 gitops_application 资源(别名: execution -> pipeline, gitops_app -> gitops_application).对于管道,返回阶段/步骤时间和故障详细信息;对于连接器/代表/GitOps应用程序,返回有针对性的健康和故障排除信号。 |
harness_status | 获取实时项目运行状况仪表板——最近的执行情况、失败率和深度链接。 |
工具示例
了解可用的资源:
{ "resource_type": "pipeline" }列出帐户中的组织:
{ "resource_type": "organization" }列出组织中的项目:
{ "resource_type": "project", "org_id": "default" }列出项目中的管道:
{ "resource_type": "pipeline", "search_term": "deploy", "size": 10 }获取特定服务:
{ "resource_type": "service", "resource_id": "my-service-id" }运行管道:
{
"resource_type": "pipeline",
"action": "run",
"resource_id": "my-pipeline",
"inputs": { "tag": "v1.2.3" }
}切换功能标志:
{
"resource_type": "feature_flag",
"action": "toggle",
"resource_id": "new_checkout_flow",
"enable": true,
"environment": "production"
}搜索所有资源类型:
{ "query": "payment-service" }按ID诊断执行(摘要模式--默认):
{ "execution_id": "abc123XYZ" }从线束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_id": "my-pipeline" }具有YAML和失败步骤日志的完整诊断模式:
{ "execution_id": "abc123XYZ", "summary": false }启用日志的摘要模式(两者最佳):
{ "execution_id": "abc123XYZ", "include_logs": true }获取项目运行状况:
{ "org_id": "default", "project_id": "my-project", "limit": 5 }管道运行工作流(推荐)
使用此序列可减少执行时间输入错误:
- 发现所需的运行时输入
- harness_get(resource_type="runtime_input_template", resource_id=" ") - 返回的模板显示 `` 需要值的占位符。
- 选择输入策略
- 简单变量: 传递平面键值 inputs (例如 {"branch":"main","env":"prod"}).
- 复杂/结构性输入: 使用 input_set_ids (CI代码库/构建块和嵌套模板输入最好以这种方式处理)。
- CI代码库简写键(仅限管道运行):
| 短键 | 扩展结构 |
|---|---|
branch | build.type=branch, build.spec.branch= |
tag | build.type=tag, build.spec.tag= |
pr_number | build.type=PR, build.spec.number= |
commit_sha | build.type=commitSha, build.spec.commitSha= |
- 约束: 在以下情况下跳过简写扩展 inputs.build 已存在(显式 build 获胜)。
- 执行跑步
- harness_execute(resource_type="pipeline", action="run", resource_id=" ", ...)
- 可选:两者结合
- 使用 input_set_ids 对于基础形状和 inputs 用于简单的覆盖。
如果必填字段未解决,该工具将返回一个飞行前错误,其中包含预期的按键和建议的输入集。您可以使用以下命令检查可用的简写映射 harness_describe(resource_type="pipeline") (executeActions.run.inputShorthands).
让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": "" }]
}管道储存模式
线束管路可以通过三种方式存储:
| 模式 | 描述 | 何时使用 |
|---|---|---|
| 内联 | 管道YAML存储在Harness | Default中。最简单的设置,不需要Git。 |
| 远程(外部Git) | 管道YAML存储在GitHub、GitLab、Bitbucket等中。 | 使用Git支持的管道作为外部提供程序的代码的团队。 |
| 远程(线束代码) | 存储在Harness代码库中的Pipeline YAML | 使用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_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_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"
}资源类型
在29个工具集中组织了137种资源类型。每种资源类型都支持CRUD操作和可选执行操作的子集。
平台
| 资源类型 | 列表 | 获取 | 创建 | 更新 | 删除 | 执行操作 | |
|---|---|---|---|---|---|---|---|
organization | x | x | x | x | x | ||
project | x | x | x | x | x |
管道
| 资源类型 | 列表 | 获取 | 创建 | 更新 | 删除 | 执行操作 | ||
|---|---|---|---|---|---|---|---|---|
pipeline | x | x | x | x | x | x | run, retry | |
execution | x | x | interrupt | |||||
trigger | x | x | x | x | x | |||
pipeline_summary | x | |||||||
input_set | x | x | ||||||
runtime_input_template | x | |||||||
approval_instance | x | approve, reject |
服务
| 资源类型 | 列表 | 获取 | 创建 | 更新 | 删除 | 执行操作 | |
|---|---|---|---|---|---|---|---|
service | x | x | x | x | x |
环境
| 资源类型 | 列表 | 获取 | 创建 | 更新 | 删除 | 执行操作 | ||
|---|---|---|---|---|---|---|---|---|
environment | x | x | x | x | x | x | move_configs |
连接器
| 资源类型 | 列表 | 获取 | 创建 | 更新 | 删除 | 执行操作 | ||
|---|---|---|---|---|---|---|---|---|
connector | x | x | x | x | x | x | test_connection | |
connector_catalogue | x |
基础设施
| 资源类型 | 列表 | 获取 | 创建 | 更新 | 删除 | 执行操作 | ||
|---|---|---|---|---|---|---|---|---|
infrastructure | x | x | x | x | x | x | move_configs |
秘密
| 资源类型 | 列表 | 获取 | 创建 | 更新 | 删除 | 执行操作 |
|---|---|---|---|---|---|---|
secret | x | x |
执行日志
| 资源类型 | 列表 | 获取 | 创建 | 更新 | 删除 | 执行操作 |
|---|---|---|---|---|---|---|
execution_log | x |
审计跟踪
| 资源类型 | 列表 | 获取 | 创建 | 更新 | 删除 | 执行操作 |
|---|---|---|---|---|---|---|
audit_event | x | x |
代表
| 资源类型 | 列表 | 获取 | 创建 | 更新 | 删除 | 执行操作 |
|---|---|---|---|---|---|---|
delegate | x | |||||
delegate_token | x | x | x | x | revoke, get_delegates |
代码库
| 资源类型 | 列表 | 获取 | 创建 | 更新 | 删除 | 执行操作 | |
|---|---|---|---|---|---|---|---|
repository | x | x | x | x | x | ||
branch | x | x | x | x | |||
commit | x | x | diff, diff_stats | ||||
file_content | x | blame | |||||
tag | x | x | x | ||||
repo_rule | x | x | |||||
space_rule | x | x |
文物登记处
| 资源类型 | 列表 | 获取 | 创建 | 更新 | 删除 | 执行操作 |
|---|---|---|---|---|---|---|
registry | x | x | ||||
artifact | x | |||||
artifact_version | x | |||||
artifact_file | x |
模板
| 资源类型 | 列表 | 获取 | 创建 | 更新 | 删除 | 执行操作 | |
|---|---|---|---|---|---|---|---|
template | x | x | x | x | x |
仪表盘
| 资源类型 | 列表 | 获取 | 创建 | 更新 | 删除 | 执行操作 |
|---|---|---|---|---|---|---|
dashboard | x | x | ||||
dashboard_data | x |
内部开发人员门户(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 | merge | ||
pr_reviewer | x | x | submit_review | |||
pr_comment | x | x | ||||
pr_check | x | |||||
pr_activity | x |
功能标志
| 资源类型 | 列表 | 获取 | 创建 | 更新 | 删除 | 执行操作 | ||
|---|---|---|---|---|---|---|---|---|
fme_workspace | x | |||||||
fme_environment | x | |||||||
fme_feature_flag | x | x | x | x | x | x | kill, restore, archive, unarchive | |
fme_feature_flag_definition | x | |||||||
fme_rollout_status | x | |||||||
fme_rule_based_segment | x | x | x | x | ||||
fme_rule_based_segment_definition | x | x | enable, disable, change_request | |||||
feature_flag | x | x | x | x | toggle |
FME(Split.io)资源 — fme_* 资源使用Split.io API(api.split.io)并且由工作区ID而不是组织/项目来限定范围。身份验证用途 HARNESS_API_KEY 作为不记名代币。 fme_feature_flag 支持完整的生命周期管理:创建(需要 traffic_type_id)、列出、获取、更新元数据、删除和终止/恢复/存档/取消存档执行操作。 fme_rule_based_segment 为目标段提供CRUD操作,同时 fme_rule_based_segment_definition 通过启用/禁用和更改请求审批流管理特定于环境的分段规则。使用 feature_flag 对于支持环境特定定义的Harness CF管理API,创建、删除和切换。
GitOps
| 资源类型 | 列表 | 获取 | 创建 | 更新 | 删除 | 执行操作 |
|---|---|---|---|---|---|---|
gitops_agent | x | 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 |
混沌工程
| 资源类型 | 列表 | 获取 | 创建 | 更新 | 删除 | 执行操作 |
|---|---|---|---|---|---|---|
chaos_experiment | x | x | run | |||
chaos_probe | x | x | enable, verify | |||
chaos_experiment_template | x | create_from_template | ||||
chaos_infrastructure | x | |||||
chaos_experiment_variable | x | |||||
chaos_experiment_run | x | x | ||||
chaos_loadtest | x | x | x | x | run, stop | |
chaos_k8s_infrastructure | x | x | check_health | |||
chaos_hub | x | x | ||||
chaos_fault | x | x | ||||
chaos_network_map | x | x | ||||
chaos_guard_condition | x | x | ||||
chaos_guard_rule | x | x | ||||
chaos_recommendation | x | x | ||||
chaos_risk | x | x |
云成本管理(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 |
软件工程洞察(SEI)
SEI资源被整合以提高代币效率。使用 metric 或 aspect DORA、团队/组织树详细信息和AI见解的参数。
| 资源类型 | 列表 | 获取 | 创建 | 更新 | 删除 | 执行操作 |
|---|---|---|---|---|---|---|
sei_metric | x | |||||
sei_productivity_metric | x | |||||
sei_dora_metric | x | 通过 metric:部署频率、变更失败率、mttr、交付周期或\*\_深入 | ||||
sei_team | x | x | ||||
sei_team_detail | x | 通过 aspect:集成、开发人员、集成过滤器 | ||||
sei_org_tree | x | x | ||||
sei_org_tree_detail | x | x | 通过 aspect:效率_配置文件、生产力_文件、业务_联盟_文件、集成、团队 | |||
sei_business_alignment | x | x | 通过 aspect:feature_metrics、feature_summary、深入分析以获取 | |||
sei_ai_usage | x | x | 通过 aspect:指标、细分、摘要、top_language | |||
sei_ai_adoption | x | x | 通过 aspect:指标、细分、总结 | |||
sei_ai_impact | x | 通过 aspect:pr_速度,返工 | ||||
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 |
安全测试编排(STO)
| 资源类型 | 列表 | 获取 | 创建 | 更新 | 删除 | 执行操作 |
|---|---|---|---|---|---|---|
security_issue | x | |||||
security_issue_filter | x | |||||
security_exemption | x | approve, reject, promote |
访问控制
| 资源类型 | 列表 | 获取 | 创建 | 更新 | 删除 | 执行操作 | |
|---|---|---|---|---|---|---|---|
user | x | x | |||||
user_group | 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 | x | toggle_status | |
global_freeze | x | manage |
服务覆盖
| 资源类型 | 列表 | 获取 | 创建 | 更新 | 删除 | 执行操作 | |
|---|---|---|---|---|---|---|---|
service_override | x | x | x | x | x |
设置
| 资源类型 | 列表 | 获取 | 创建 | 更新 | 删除 | 执行操作 |
|---|---|---|---|---|---|---|
setting | x |
可视化
从Harness数据渲染的内联PNG图表可视化。这些是仅元数据的资源类型,没有API操作-它们的存在使LLM可以通过 harness_describe.使用 include_visual=true 关于支持的工具(harness_diagnose, harness_list, harness_status)生成图表。
| 资源类型 | 描述 | 如何生成 |
|---|---|---|
visual_timeline | 管道阶段执行随时间变化的甘特图 | harness_diagnose 和 visual_type: "timeline" |
visual_stage_flow | 管道阶段和步骤的DAG流程图 | harness_diagnose 和 visual_type: "flow" |
visual_health_dashboard | 项目健康状况概述及状态指标 | harness_status 和 include_visual: true |
visual_pie_chart | 执行状态分解图 | harness_list 和 visual_type: "pie" |
visual_bar_chart | 按管道划分的执行计数柱状图 | harness_list 和 visual_type: "bar" |
visual_timeseries | 30天内的每日执行趋势 | harness_list 和 visual_type: "timeseries" |
visual_architecture | 管道YAML架构图(阶段→ 步骤) | harness_diagnose 和 visual_type: "architecture" |
MCP提示
开发运维
| 提示 | 说明 | 参数 |
|---|---|---|
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或线束URL。通过以下方式获取阶段/步骤细分、失败详细信息、委托信息和失败步骤日志 harness_diagnose,然后提供根本原因分析和建议修复。自动跟踪链式管道故障。 | executionId (可选), projectId (可选) |
create-pipeline | 根据自然语言需求生成新的管道YAML,审查现有资源的上下文 | description (必填), projectId (可选) |
onboard-service | 通过环境和部署管道引导新服务 | serviceName (必填), projectId (可选) |
dora-metrics-review | 审查DORA指标(部署频率、变更失败率、MTTR、交付周期),并提出精英/高/中/低分类和改进建议 | 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 的
| 提示 | 说明 | 参数 |
|---|---|---|
optimize-costs | 分析云成本数据、表面建议和异常情况,按潜在节省进行优先级排序 | projectId (可选) |
cloud-cost-breakdown | 通过趋势分析和异常检测,深入了解服务、环境或集群的云成本 | perspectiveId (可选), projectId (可选) |
commitment-utilization-review | 分析预留实例和节约计划的利用率,以发现浪费并优化承诺 | projectId (可选) |
cost-anomaly-investigation | 调查成本异常——确定根本原因、受影响的资源和补救措施 | projectId (可选) |
rightsizing-recommendations | 审查并优先考虑合理化建议,可选择创建Jira或ServiceNow票证 | projectId (可选), minSavings (可选) |
DevSeCops
| 提示 | 说明 | 参数 |
|---|---|---|
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 (可选) |
access-control-audit | 审核用户权限、超特权帐户和角色分配,以强制执行最小特权 | projectId (可选), orgId (可选) |
利用代码
| 提示 | 说明 | 参数 |
|---|---|---|
code-review | 审查拉取请求——分析差异、提交、检查和注释,以提供有关错误、安全性、性能和风格的结构化反馈 | repoId (必填), prNumber (必填), projectId (可选) |
pr-summary | 根据分支的提交历史和差异自动生成PR标题和描述 | repoId (必填), sourceBranch (必填), targetBranch (可选,默认:main), projectId (可选) |
branch-cleanup | 分析存储库中的分支,并建议删除过时或合并的分支 | repoId (必填), projectId (可选) |
MCP资源
| 资源URI | 描述 | MIME类型 |
|---|---|---|
pipeline:///{pipelineId} | 管道YAML定义 | application/x-yaml |
pipeline:///{orgId}/{projectId}/{pipelineId} | 管道YAML(具有明确的作用域) | application/x-yaml |
executions:///recent | 最后10个管道执行摘要 | application/json |
schema:///pipeline | 线束管道JSON模式 | application/schema+json |
schema:///template | 线束模板JSON架构 | application/schema+json |
schema:///trigger | 利用触发器JSON模式 | application/schema+json |
工具集筛选
默认情况下,所有29个工具集(及其137种资源类型)都处于启用状态。使用 HARNESS_TOOLSETS 仅公开所需的工具集。这减少了LLM看到的资源类型,提高了工具选择的准确性。
# Only expose pipelines, services, and connectors
HARNESS_TOOLSETS=pipelines,services,connectors可用工具集名称:
| 工具集 | 资源类型 |
|---|---|
platform | 组织、项目 |
pipelines | 管道、执行、触发器、管道_摘要、输入_设置、批准_状态 |
services | 服务 |
environments | 环境 |
connectors | 连接器,连接器目录 |
infrastructure | 基础设施 |
secrets | 秘密 |
logs | execution_log |
audit | 审核事件 |
delegates | 委托,delegate_token |
repositories | 存储库、分支、提交、文件内容、标签、报告规则、空格规则 |
registries | 注册表、工件、artifact_version、artifact_file |
templates | 模板 |
dashboards | 仪表板_数据 |
idp | idp_dentity、记分卡、记分卡检查、记分卡状态、计分卡检查状态、idp_dential、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_definition、fme_rollout_status、fme-rule_based_segment、fme_rule_based-segment、feature_flag |
gitops | gitops_agent、gitops_applications、gitops_cluster、gitops_repository、gitops-applicationset、gitops-repo_credential、gitops_adp_event、gitops_pod_log、gitops_managed_resource、gitops.resource_action、gitops_dashboard、gitops.app_resource_tree |
chaos | chaos_expert、chaos_probe、chaos_experiment_template、chaos_infrastructure、chaos-experiment_variable、chaos_experiment_run、chaos_loadtest、chaos_k8s_infrasement、chaos_hub、chaos_fault、chaos-network_map、chaos_guard_condition、chaos_guard_rule、chaos_recommendation、chaos_risk |
ccm | cost_perspective、cost_breakdown、cost_time series、cost_summary、cost_recommendation、cost_normally、cost-normally_summary、cost_category、cost-count_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_artiact_component、scs_aartifact_remediation、scs_chain_of_custody、scs_compliance_result、code_repo_security和scs_sbom |
sto | security_issue、security_issue_filter、security_exemption |
access_control | 用户、用户组、服务计数、角色、角色分配、资源组、权限 |
governance | 策略、策略集、策略估值 |
freeze | 冻结窗口,全局冻结 |
overrides | 服务_覆盖 |
settings | 设置 |
visualizations | visual_timeline、visualstage_flow、visualhealth_dashboard、visualpie_chart、visualbar_chart、visualtimeseries、visualarchitecture |
建筑
+------------------+
| AI Agent |
| (Claude, etc.) |
+--------+---------+
| MCP (stdio or HTTP)
+--------v---------+
| MCP Server |
| 10 Generic Tools |
+--------+---------+
|
+--------v---------+
| Registry | 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项目结构
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/ # 10 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
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 征集 在进行更改之前提示用户进行确认。这给出了真正的人在循环中的认可——用户看到即将发生的事情,并接受或拒绝。
它是如何工作的:
- LLM调用写工具(例如。
harness_create带有管道主体) - 服务器向客户端发送一个启发式请求,其中包含操作摘要
- 用户看到详细信息并点击 接受 或 下降
- 如果接受,操作将继续。如果被拒绝,它将被阻止,LLM将被告知
客户支持:
| 客户 | 激励支持 |
|---|---|
| 光标 | 是 |
| VS代码(副本) | 是 |
| 克劳德桌面 | 还没有 |
| 风帆冲浪 | 还没有 |
| MCP检查员 | 是 |
当缺少客户支持时,诱导行为因操作严重程度而异: 对于不支持启发式的客户:
harness_create,harness_update,以及harness_execute不进行对话(尽最大努力)。- 如果无法获得确认,则阻止破坏性操作(
harness_delete).
如果启发在运行时失败,则适用相同的规则:非破坏性写入继续,破坏性写入被阻止。
跳过自主工作流的启发式
对于完全自主的代理工作流(CI/CD机器人、无头代理、批处理自动化),可以完全禁用启发提示:
HARNESS_SKIP_ELICITATION=true或者在MCP客户端配置中:
{
"mcpServers": {
"harness": {
"command": "npx",
"args": ["harness-mcp-v2"],
"env": {
"HARNESS_API_KEY": "pat.xxx.xxx.xxx",
"HARNESS_SKIP_ELICITATION": "true"
}
}
}
}当启用时, 全部 写入和删除操作无需用户确认即可进行,包括破坏性操作,如 harness_delete请谨慎使用,并考虑与 HARNESS_TOOLSETS 以限制可用的资源类型。
安全
- 秘密永远不会暴露。 这
secret资源类型仅返回元数据(名称、类型、范围)——任何响应中都不包含机密值。
- 写操作在可用时使用启发。
harness_create,harness_update,harness_delete,以及harness_execute在继续之前尝试MCP启发(参见 引出).
- 破坏性写入失败关闭。 如果不能获得确认,
harness_delete被阻塞而不是盲目执行。覆盖HARNESS_SKIP_ELICITATION=true用于自主工作流程。
- CORS仅限于同源。 HTTP传输只允许同源请求,防止恶意网站针对本地主机上的MCP服务器进行CSRF攻击。
- HTTP速率限制。 HTTP传输强制每个IP每分钟60个请求,以防止请求泛滥。
- API速率限制。 Harness API客户端强制执行每秒10次请求的限制,以避免达到上游速率限制。
- 强制执行分页限制。 列表查询的总数上限为10000个项目,每页100个,以防止内存耗尽。
- 退回并退回。 瞬态故障(HTTP 429,5xx)会以指数回退和抖动方式重试。
- 本地主机绑定。 HTTP传输绑定到
127.0.0.1默认情况下,无法从网络访问。
- 没有stdout日志记录。 所有日志都会转到stderr,以避免损坏stdio JSON-RPC传输。
互补技能
Harness MCP服务器与 驾驭技能 --为常见的Harness工作流设计的现成Claude代码技能(斜线命令)的集合。将它们安装在此MCP服务器旁边,以获得高级自动化,如 /deploy, /rollback, /triage,而无需编写自定义提示。
故障排除和常见陷阱
| 症状 | 可能原因 | 该怎么办 |
|---|---|---|
HARNESS_ACCOUNT_ID is required when the API key is not a PAT... | API密钥不是PAT格式(pat...)因此无法推断帐户ID | 设置 HARNESS_ACCOUNT_ID 明确 |
Unknown transport: "..." 启动时 | 不支持的CLI传输参数 | 使用 stdio 或 http 只有 |
Invalid HARNESS_TOOLSETS: ... 启动时 | 一个或多个工具集名称无法识别 | 仅使用以下名称 工具集筛选 (完全匹配) |
HTTP mcp-session-id header is required... | 发送的会话请求没有会话标头 | 发送 initialize 首先,然后包括 mcp-session-id 上 POST/GET/DELETE /mcp |
HTTP Session not found... | 会话已过期(30分钟空闲TTL)或已关闭 | 重新运行 initialize 若要创建新会话,请使用新标头重试 |
HTTP 405 Method Not Allowed 上 /mcp | 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 ..." | 项目/组织范围的调用缺少标识符 | Set HARNESS_DEFAULT_ORG_ID/HARNESS_DEFAULT_PROJECT_ID 或通过 org_id/project_id 每次工具调用 |
Read-only mode is enabled ... operations are not allowed | HARNESS_READ_ONLY=true 块创建/更新/删除/执行 | 设置 HARNESS_READ_ONLY=false 如果打算进行写入操作 |
| 飞行前管道运行失败,所需输入未解决 | 已提供 inputs 未覆盖所需的运行时占位符 | Fetch runtime_input_template,提供丢失的简单密钥,或使用 input_set_ids 用于结构输入 |
管道CI简写(branch, tag, pr_number, commit_sha)不适用 | inputs.build 已提供,因此有意跳过简写扩展 | 删除 inputs.build 使用简写扩展,或保持完全明确 build 结构 |
Operation declined by user | 用户拒绝了诱导确认对话框 | 用户选择不继续--验证操作详细信息,如果需要,请重试 |
body.template_yaml (or body.yaml) is required 对于模板创建/更新 | 模板API需要完整的YAML负载 | 提供完整的 template_yaml 字符串在 body;对于删除,请传递 version_label 删除一个版本(忽略删除所有版本) |
HARNESS_BASE_URL must use HTTPS 启动时 | HARNESS_BASE_URL 设置为HTTP URL | 使用HTTPS,或设置 HARNESS_ALLOW_HTTP=true 促进地方发展 |
许可证
Apache 2.0
