Harness MCP server: 11 tools, 240 resources
How Harness covers a whole delivery platform with eleven tools, what that design costs an agent's context, and where the cost moves to rather than disappearing.
Last verified 1 September 2026 · from Harness's repository, its documentation and the server's own tools/list response
This page is one of 90 in a directory of monitoring and developer tools. Each page checks what an AI coding agent can get out of the tool through its MCP server, the connector that lets the agent query the tool directly.
Summary
The Harness MCP server registers eleven tools and routes them across 240 resource types. Most connectors register one tool per capability; this one does not.
The coverage is the widest here, across 39 default toolsets. A toolset is a named group of resource types, and you can turn one off. It reaches CI/CD, GitOps for deploying from a git repository, feature flags, cloud cost management, security testing, chaos engineering for fault injection, and an internal developer portal.
Consolidation does not remove the cost. It moves the cost into the schemas. Eleven tools cost about 8,625 tokens because each schema has to describe every resource type it can reach, at 3,230 characters per tool.
What is the Harness MCP server?
It is Harness's server for the Model Context Protocol. Harness is a delivery platform, so the agent gains reach across pipelines, services, environments, feature flags and cost data.
The eleven tools are verbs rather than nouns: harness_list, harness_get, harness_create, harness_update, harness_delete, harness_execute, harness_search, harness_describe, harness_status, harness_diagnose and harness_schema. The resource type is an argument.
Harness states the reason plainly: the model picks from eleven tools instead of hundreds. Several tools also accept a Harness URL and read the account, organization and project scope out of it.
Harness covers release broadly, reaches part of the way into code review through security testing and into cost through cloud cost management, and reaches nothing in agent observability.
| Part of the work | What Harness has here | Can an agent reach it |
|---|---|---|
| Code, tests & review | Security testing orchestration | Partial. Security scan results are reachable as a resource type. There is no diff or review feature |
| CI & release | Pipelines, GitOps, feature flags, release management | Yes. Core strength, and the widest release coverage measured in this guide |
| Production observability | Chaos engineering, service reliability | Partial. Chaos experiments and release health are reachable; there is no metrics, logs or traces surface |
| Agent observability & evals | None | No traces, evaluations or prompt versioning for your own agents |
| AI cost management | Cloud Cost Management | Partial, and not AI cost. Cloud spend and recommendations are reachable; token spend is not a Harness concept |
For an agent, Harness answers questions about how software gets delivered, from the pipeline to the flag to the cloud bill. An agent connected here can find the failing pipeline stage. It can check which feature flag is on. It can read what the deployment cost. It cannot tell you what the running service is doing, so this connector pairs with a telemetry one.
What can an AI agent do with Harness?
| Task | Tools | Works | Watch out for |
|---|---|---|---|
| Find what a pipeline did | harness_list harness_get harness_status | Yes | Pass the resource type; a Harness URL sets the scope automatically |
| Diagnose a failed execution | harness_diagnose | Yes | Diagnosis is Harness's own analysis, not raw logs |
| Find a resource across the platform | harness_search harness_describe | Yes | harness_describe is how an agent learns what a resource type accepts |
| Write valid pipeline YAML | harness_schema | Yes | Pipeline and template schemas are bundled; others are fetched |
| Run, retry or interrupt a pipeline | harness_execute | Yes | The same tool kills feature flags, syncs GitOps apps and runs chaos experiments |
| Change a resource | harness_create harness_update harness_delete | Yes | harness_create, harness_update and harness_delete cover 240 resource types. Scope the API key rather than the tool list |
| Investigate a production incident | Datadog or Dynatrace | No, separate server | No metrics, logs or traces. Harness knows what shipped, not how it behaves |
Consolidation changes what an allowlist can do. On most connectors an allowlist can approve one tool and refuse another. Here harness_execute is one entry. It covers pipeline runs, flag kills, GitOps syncs and chaos experiments. The permission boundary has to be the API key's scope instead.
11 tools registered, all on by default, dispatched across 240 resource types
- Reading3
harness_listharness_getharness_status- Finding2
harness_searchharness_describe- Understanding2
harness_schemaharness_diagnose- Acting1Write
harness_execute- Changing3Write
harness_createharness_updateharness_delete
Groups are by verb, because that is what the tools are. The resource type is an argument, so harness_delete covers pipelines, connectors, feature flags and everything else in the registry. Counted on 24 August 2026.
What connecting costs before the first question
A context window is the amount of text a model can hold at once, and connecting uses some of it before the agent asks anything. Every tool the server registers sends its name, description and input schema to the model when the session starts. The tool list is charged whether or not a single tool is called.
Eleven tools cost about 8,625 tokens. Playwright registers twenty-four tools for less, and Arize Phoenix twenty-seven. Consolidation moved the cost rather than removing it.
The schemas carry it: 3,230 characters per tool, because a tool that can reach 240 resource types has to describe what it accepts for them. Descriptions are short, at 282 characters, so this is structure rather than prose.
| Tool set | Tools | Tokens (GPT-5.6, GPT-5.5) | Tokens (GPT-4, GPT-3.5) | Tokens (Claude Haiku 4.5 to Opus 5) | Share of a 200,000-token window |
|---|---|---|---|---|---|
| Every tool, as registered | 11 | 8,625 to 12,324 | 8,422 to 12,224 | 12,489 to 16,403 | 4.2% to 8.2% |
Encodings: GPT-5.6, GPT-5.5 o200k_base; GPT-4, GPT-3.5 cl100k_base; Claude Haiku 4.5 to Opus 5 count_tokens. Counted 24 August 2026 from tools/list on the released v3.2.20 bundle's Node server. It was run locally with a placeholder key.
Registration is static, so no Harness account was involved. Figures cover name, description and input schema. The two models in column one share the o200k_base encoding, so they get one count. The spread is formatting, about 43%. Reasoning tokens are output, spent per request. This count is input, charged once at connection.
The Claude figures are measured rather than encoded. Anthropic publishes no local tokenizer. The definitions were sent to the API's count_tokens endpoint, and a no-tools baseline was subtracted. The range covers two tokenizer generations rather than two serializations. Haiku 4.5 and Opus 4.6 sit at the low end. Opus 5 and Sonnet 5 sit at the high end. The gap between them is about a third.
Harness MCP server limits: where answers come back incomplete
The limits below follow from the dispatch design rather than from anything failing.
The agent says: “I ran that for you.” `harness_execute` covers more than pipelines.
One tool executes actions across the platform: running, retrying and interrupting pipelines, killing and restoring feature flags, testing connectors, syncing GitOps apps and running chaos experiments.
An allowlist cannot separate those, because they are one tool with different arguments. Approving harness_execute for a pipeline retry also approves it for a flag kill.
Guard: Make the API key the boundary. Give the agent a key scoped to what it may act on, and treat client allowlists as a second line rather than the first.
The agent says: “I could not find that pipeline.” It looked in the wrong project.
Harness scopes resources by account, organization and project. HARNESS_DEFAULT_ORG_ID and HARNESS_DEFAULT_PROJECT_ID set defaults, and several tools read the scope out of a pasted Harness URL. Without either, a query can run against a scope that simply has no such resource.
Guard: Set the defaults, or give the agent a Harness URL and let it extract the scope. Have it state which project it queried.
The agent says: “Here is the pipeline YAML.” It may not match the schema.
Harness pipelines are YAML with a strict schema. harness_schema fetches the schema or an example for a resource type, and pipeline and template schemas ship bundled with the server.
Guard: Have the agent call harness_schema before writing YAML rather than after the pipeline is rejected.
How to configure Harness MCP for agents
- 1
Scope the API key, not the tool list
With
harness_create,harness_update,harness_deleteandharness_executecovering 240 resource types, an allowlist cannot separate a pipeline retry from a feature-flag kill. The key's permissions are the real boundary. - 2
Set the default scope
HARNESS_DEFAULT_ORG_IDandHARNESS_DEFAULT_PROJECT_IDstop the agent querying the wrong project. PAT means personal access token, and SAT means service account token. Both carry the account ID, soHARNESS_ACCOUNT_IDis only needed for keys without one. - 3
Filter toolsets if you do not need everything
39 toolsets are on by default. Harness does not publish their names in the README, so this page cannot list them; Ansible coverage is the one named as opt-in.
- 4
Protect any shared deployment
HARNESS_MCP_AUTH_TOKENmakes every request to/mcprequire a bearer token, which matters the moment the server is reachable by anything but you.
Paste this into your agent’s instructions
Dispatch hides which resource an action touched, and scope errors return empty rather than failing. The block makes the agent name both.
When you answer using Harness MCP tools, state: - The account, organization and project scope you queried. - The resource type you passed, not just the tool name. A harness_get on the wrong type returns nothing. - Whether you called harness_execute, and on what. It runs pipelines, kills feature flags and starts chaos experiments. Never state that data does not exist. State that none was returned under the scope above. Write your answer in ASD-STE100 Simplified Technical English. Use short sentences with one idea in each.
Do you need the MCP server at all?
Sometimes. Harness has a documented REST API, and for one known operation a direct call is cheaper than 8,625 tokens of tool definitions.
The connector earns its place on breadth. An agent that does not know which of 240 resource types holds the answer can use harness_search and harness_describe to find out, which is not a thing the REST API makes easy.
The hosted MCP service is the third option. It authenticates with Harness Platform OAuth rather than an API key, and Harness Support has to enable it per account.
Connect the server when the agent is exploring the platform. Call the API directly when you already know the endpoint.
Harness MCP server setup
The package runs with npx and needs a Harness API key. PAT and SAT tokens carry the account ID, so most setups need nothing else.
There is also a hosted service, which authenticates with Harness Platform OAuth rather than an API key and has to be enabled per account by Harness Support.
Claude Code
A PAT carries the account ID, so the key is the only required value.
claude mcp add-json "harness" '{"command":"npx",
"args":["-y","harness-mcp-v2","stdio"],
"env":{"HARNESS_API_KEY":"pat.<account>.<id>.<secret>"}}'Cursor
In ~/.cursor/mcp.json. Setting default scope avoids empty results from the wrong project.
{"mcpServers":{"harness":{"command":"npx",
"args":["-y","harness-mcp-v2","stdio"],
"env":{"HARNESS_API_KEY":"<your-key>",
"HARNESS_DEFAULT_ORG_ID":"<org>",
"HARNESS_DEFAULT_PROJECT_ID":"<project>"}}}}Codex CLI
Codex reads TOML, so the JSON blocks above will not transfer.
[mcp_servers.harness]
command = "npx"
args = ["-y", "harness-mcp-v2", "stdio"]
env = { HARNESS_API_KEY = "<your-key>" }Every other client
Each block below is the configuration for one client, with the file path and the key that client expects.
Claude Desktop
macOS ~/Library/Application Support/Claude/claude_desktop_config.json. Windows %APPDATA%\Claude\claude_desktop_config.json. There is no CLI. Edit through Settings, Developer, Edit Config.
Quit and restart fully for changes to load. Paths in args must be absolute. Logs at ~/Library/Logs/Claude/mcp.log.
{"mcpServers":{"harness":{"command":"npx",
"args":["-y","harness-mcp-v2","stdio"],
"env":{"HARNESS_API_KEY":"<your-key>","HARNESS_DEFAULT_ORG_ID":"<org>","HARNESS_DEFAULT_PROJECT_ID":"<project>"}}}}Gemini CLI
~/.gemini/settings.json globally, or .gemini/settings.json per project. Key mcpServers. CLI: gemini mcp add.
{"mcpServers":{"harness":{"command":"npx",
"args":["-y","harness-mcp-v2","stdio"],
"env":{"HARNESS_API_KEY":"<your-key>","HARNESS_DEFAULT_ORG_ID":"<org>","HARNESS_DEFAULT_PROJECT_ID":"<project>"}}}}VS Code Copilot
.vscode/mcp.json per workspace, or your user profile. CLI: code --add-mcp.
{"servers":{"harness":{"command":"npx",
"args":["-y","harness-mcp-v2","stdio"],
"env":{"HARNESS_API_KEY":"<your-key>","HARNESS_DEFAULT_ORG_ID":"<org>","HARNESS_DEFAULT_PROJECT_ID":"<project>"}}}}The key is `servers`, not `mcpServers`. VS Code is the only client that uses that name, and copying a config from anywhere else fails silently.
Windsurf
~/.codeium/windsurf/mcp_config.json, which is the path Windsurf documents. Key mcpServers, the same JSON shape as Cursor, carrying the same API key.
Zed
~/.config/zed/settings.json, carrying the same API key as the blocks above.
The key is `context_servers`. Zed does not call them MCP servers in config, so searching its settings for mcp finds nothing.
Google Antigravity
~/.gemini/config/mcp_config.json globally, or .agents/mcp_config.json per project. Key mcpServers. There is no CLI. Use the /mcp overlay in the editor. Supports stdio, streamable HTTP, SSE and websocket.
{"mcpServers":{"harness":{"command":"npx",
"args":["-y","harness-mcp-v2","stdio"],
"env":{"HARNESS_API_KEY":"<your-key>","HARNESS_DEFAULT_ORG_ID":"<org>","HARNESS_DEFAULT_PROJECT_ID":"<project>"}}}}Amp (Sourcegraph)
~/.config/amp/settings.json or .amp/settings.json, carrying the same API key. The amp mcp CLI covers approve, doctor and oauth.
The key is `amp.mcpServers`, namespaced. A bare mcpServers block is ignored.
Cline
~/.cline/mcp.json per the docs. The source also reads ~/.cline/data/settings/cline_mcp_settings.json. Key mcpServers, standard JSON shape, carrying the same API key. Supports stdio, streamable HTTP and SSE.
Goose (Block)
~/.config/goose/config.yaml, carrying the same API key.
YAML, and servers are called `extensions`. Goose does not use the MCP vocabulary in config at all. Add one interactively with goose configure, or per session with goose session --with-extension.
Kiro (AWS)
.kiro/settings/mcp.json per workspace, or ~/.kiro/settings/mcp.json globally. Key mcpServers, standard JSON shape, carrying the same API key.
Warp
~/.warp/.mcp.json or .warp/.mcp.json. Key mcpServers, standard shape, carrying the same API key. Also addable through the /agent-add-mcp skill.
JetBrains Junie
.junie/mcp/mcp.json per project, or ~/.junie/mcp/mcp.json. Key mcpServers, carrying the same API key. Use /mcp in the CLI to manage.
Roo Code
.roo/mcp.json per project. The global file is mcp_settings.json, opened from the Roo Code MCP settings view with Edit Global MCP. Key mcpServers, carrying the same API key.
Continue
.continue/mcpServers/*.yaml, one file per server, carrying the same API key.
YAML, and `mcpServers` is a list, not an object. Every JSON client keys servers by name. Continue takes an array, so a converted config will not parse.
Trae
.trae/mcp.json per project, or paste into the UI under Raw Config (JSON). Key mcpServers, standard shape, carrying the same API key.
Devin
Devin has no config file to edit. Servers are added through a web form in the settings UI, and Devin's documentation states you do not need to write or paste JSON. The block below is the shape those fields describe, shown for reference. Either route uses the same API key.
Shared HTTP deployment
Anything reachable beyond your own machine needs the bearer token, or the endpoint is open to whoever can route to it.
HARNESS_API_KEY=<your-key> \ HARNESS_MCP_AUTH_TOKEN=<shared-secret> \ npx -y harness-mcp-v2 http --port 8080
Read-only access, permissions and security
The API key is the permission boundary
harness_create,harness_update,harness_deleteandharness_executereach 240 resource types, so a client allowlist cannot express "read pipelines but do not delete connectors". Scope the key instead.One tool executes across the platform
harness_executeruns and interrupts pipelines, kills and restores feature flags, syncs GitOps apps and runs chaos experiments.A shared deployment is open by default
HARNESS_MCP_AUTH_TOKENadds bearer authentication to/mcp; without it, any client that can reach the port acts with the server's key.The hosted service authenticates differently
It uses Harness Platform OAuth, and Harness Support must enable it per account before the endpoint works.
Troubleshooting
- The server will not start
- An API key without an embedded account segment needs
HARNESS_ACCOUNT_ID. PAT and SAT tokens carry it; other key types do not. - A resource that exists is not found
- Check the scope. Set
HARNESS_DEFAULT_ORG_IDandHARNESS_DEFAULT_PROJECT_ID, or paste a Harness URL and let the tool read the scope from it. - Pipeline YAML is rejected
- Call
harness_schemafor the resource type first. Pipeline and template schemas ship bundled with the server; others are fetched. - An action ran that you did not expect
harness_executecovers pipeline runs, flag kills, GitOps syncs and chaos experiments. Narrow the API key rather than the allowlist.
Harness MCP server: Reference
| Item | Value |
|---|---|
| Status | v3.2.22 released 31 August 2026 · measured on v3.2.20 · repository pushed 1 September 2026 · MIT license |
| Adoption | 93 stars · 77 forks |
| Package | harness-mcp-v2 on npm, plus a downloadable MCP bundle |
| Hosted | Harness Platform OAuth, enabled per account by Harness Support |
| Auth | HARNESS_API_KEY; account ID auto-read from PAT and SAT tokens |
| Tools | 11, across 240 resource types and 39 default toolsets |
| Read-only | None. Scope the API key |
| Shared deployments | HARNESS_MCP_AUTH_TOKEN for bearer auth on /mcp |
What engineers report
Harness's connector has a modest public footprint, so the useful signals are its design and its coverage.
| What was checked | What it shows |
|---|---|
| Stars | 90 |
| Last push | 23 August 2026 |
| License | MIT |
| Tools | 11, dispatched across 240 resource types |
| Toolsets | 39 by default, with opt-in Ansible coverage |
| Schema size | 3,230 characters per tool on average |
Repository facts from the GitHub API, retrieved 24 August 2026. Tool counts come from the server's own tools/list response on the released bundle. The resource-type figure is Harness's own, from the repository README.
Should you connect an agent to Harness?
Yes. Best for harness teams scoping the API key tightly, since the key is the real permission boundary here.
- Strongest fit
- Harness teams who want one connection covering delivery, flags and cloud cost rather than three.
- Main advantage
- The broadest platform reach in this guide, from eleven tools an agent can hold in mind at once.
- Main weakness
- Consolidation moves cost into schemas, so eleven tools cost more than another vendor's twenty-seven.
- Operational risk
- A single execute tool spans pipeline runs, flag kills and chaos experiments, which an allowlist cannot separate.
From Oodle
One platform for agent traces and infrastructure
Agent traces usually sit in a different product from the rest of your telemetry, so when a slow database makes an agent slow the symptom is in one tool and the cause is in another. Oodle keeps both in one query surface, from $10 per million spans.
See agent observabilityFrequently asked questions
How many tools does the Harness MCP server have?
Eleven, dispatched across 240 resource types. Counted from the server's own tools/list response on the released v3.2.20 bundle, 24 August 2026.
Why so few tools for so much platform?
A registry-based dispatch system routes generic verbs such as harness_list and harness_get to any resource type. Harness's stated reason is that the model picks from eleven tools instead of hundreds.
Does consolidation save context?
Less than it looks. Eleven tools cost about 8,625 tokens because each schema describes the resource types it can reach, at 3,230 characters per tool.
Can an agent kill a feature flag?
Yes, through harness_execute, which also runs pipelines, syncs GitOps apps and runs chaos experiments. Scope the API key rather than relying on a client allowlist.
Is there a hosted option?
Yes, and it authenticates differently: Harness Platform OAuth rather than an API key, and Harness Support must enable it per account.