Atlas / MCP servers / harness / harness-mcp-v2

harness-mcp-v2BLOCK

mcp/harness/mcp-server

Harness’ official MCP Server

Verdict
BLOCK
Grade
D
Trust score
69 /100
Exposed tools
200 259r · 21w · 2d
Transport
stdio · streamable-http
License
MIT
Stars
105
01

Overview

From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.

Harness MCP Server 2.0

[](https://mcptoplist.com/server/glama%2Fharness%2Fmcp-server)

An MCP (Model Context Protocol) server that gives AI agents full access to the Harness.io platform through 11 consolidated tools and 261 resource types.

Why Use This MCP Server

Most MCP servers map one tool per API endpoint. For a platform as broad as Harness, that means 240+ tools — and LLMs get worse at tool selection as the count grows. Context windows fill up with schemas, and every new endpoint means new code.

This server is built differently:

  • 11 tools, 261 resource types. A registry-based dispatch system routes harness_list, harness_get, harness_create, etc. to any Harness resource — pipelines, services, environments, orgs, projects, feature flags, cost data, and more. The LLM picks from 11 tools instead of hundreds.
  • Full platform coverage. 42 default toolsets spanning CI/CD, GitOps, Feature Flags, Cloud Cost Management, Security Testing, Chaos Engineering, Database DevOps, Internal Developer Portal, Software Supply Chain, Infrastructure as Code Management, Release Management, Governance, Service Overrides, Knowledge Graph, and more. Opt-in Ansible and observability-evaluation coverage is available when needed.
  • Multi-project workflows out of the box. Agents discover organizations and projects dynamically — no hardcoded env vars needed. Ask "show failed executions across all projects" and the agent can navigate the full account hierarchy.
  • 35 prompt templates. Pre-built prompts for common workflows: build & deploy apps end-to-end, debug failed pipelines, review DORA metrics, triage vulnerabilities, optimize cloud costs, audit access control, plan feature flag rollouts, review pull requests, approve pending pipelines, and more.
  • Works everywhere. Stdio transport for local clients (Claude Desktop, Cursor, Devin Desktop), HTTP transport for remote/shared depl
Read from source at commit f5ffcf9c8f3dOBSERVED · 2026-10-12
02

Connect

Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control. Replace the environment placeholders with a token scoped to the least it needs.

claude-code
claude mcp add harness-mcp-v2 --env GITHUB_TOKEN=${GITHUB_TOKEN} --env HARNESS_API_KEY=${HARNESS_API_KEY} -- npx -y [email protected]
claude-desktop
{
  "mcpServers": {
    "harness-mcp-v2": {
      "command": "npx",
      "args": [
        "-y",
        "[email protected]"
      ],
      "env": {
        "GITHUB_TOKEN": "${GITHUB_TOKEN}",
        "HARNESS_API_KEY": "${HARNESS_API_KEY}"
      }
    }
  }
}
03

Exposed tools (200)

259 read · 21 write · 2 destructive. Blast radius: 2 tools can delete or overwrite — an agent that can be talked into calling a tool can be talked into calling this one.

ToolRiskDescription
Acmeread
DeploywriteProd deploy
ServicereadA service
actionreadFilter audit logs by action type
activity_typereadComma-separated activity types
afterreadOnly entries created at/after this timestamp (unix millis)
agent_idreadScope-prefixed GitOps agent identifier (required).
allreadWhen true, include delegates in child org/project scopes under the requested scope. Omit for the current scope only.
annotationsreadFilter by annotation key(s). Only types with at least one matching annotation are returned.
annotator_typereadhuman | automated
anomaly_viewreadView type for anomaly grouping
app_namereadGitOps application name
applied_at_endreadAPPLIED-tab only: appliedAtEndTime epoch ms. Ignored for OPEN.
applied_at_startwriteAPPLIED-tab only: appliedAtStartTime epoch ms. Ignored for OPEN. Do not send the Open-tab calendar as days_back.
approval_statusreadApproval status filter
approval_typereadApproval type filter
artifact_idreadArtifact ID to list components for
artifact_typereadFilter by artifact type (e.g., CONTAINER, FILE)
aspectreadWhich BA data to fetch
audit_resource_typereadFilter audit logs by resource type (renamed from resource_type to avoid conflict with MCP parameter)
authenticationreadProvider authentication object {type, spec}. Use secret references only (e.g. spec.tokenRef=
auto_upgradereadFilter by auto upgrade status
beforereadOnly entries created before this timestamp (unix millis)
branchreadBranch to filter executions
budget_sort_typereadSort field
categoriesreadSecurity violation categories to include
categoryreadConnector category filter
checkout-experimentreadd
cloud_filterreadFilter by cloud provider
commanderreadFilter by incident commander (multi-value). Validated against the project
committerreadFilter by committer
comparisonsreadOptional filter to a subset of the experiment
connectivity_statusesreadFilter by connectivity status
connector_connectivity_modesreadFilter by connectivity mode
connector_identifiersreadFilter by connector identifiers (comma-separated)
connector_namesreadFilter by connector names (comma-separated)
cost_bucketsreadCost bucket(s) within the cost category. Comma-separated for multiple (e.g.
cost_categoryreadCost category name to filter by (must pair with cost_buckets). Use with cost_recommendation_filter to list teams/buckets.
created_afterreadOnly alerts created at or after this time (ISO-8601, e.g. 2026-05-01T00:00:00Z)
created_beforereadOnly alerts created at or before this time (ISO-8601)
created_date_fromreadFilter evaluations created after this epoch-millis timestamp. ⚠️ IMPORTANT: when omitted, the upstream policy-mgmt API silently defaults to
created_date_toreadFilter evaluations created before this epoch-millis timestamp
cursorreadCursor for the next page (from previous response pagination.next_cursor)
dataset_idreadParent dataset UUID
date_endreadEnd date for metric calculation
date_startwriteStart date for metric calculation
days_backreadOPEN/IGNORED freshness window: lastProcessedAt within this many UTC days (CCM default 4). Do NOT map the UI date picker here — that picker is appliedAt for APPLIED recs. Omitted automatically when recommendation_states is APPLIED only.
dbinstance_idreadInstance identifier — required
dbschema_idreadSchema identifier — required to list instances
delegate_group_identifierreadFilter by delegate group identifier
delegate_instance_filterreadFilter by delegate instance
delegate_namereadFilter delegates by name
delegate_typereadDelegate type filter
deletedreadInclude soft-deleted packages
dependency_typereadFilter by dependency type (DIRECT or TRANSITIVE)
deplay-action-01readoptional desc
deployed_afterreadOnly deploys at or after this time (ISO-8601, e.g. 2026-05-01T00:00:00Z)
deployed_beforereadOnly deploys at or before this time (ISO-8601)
deployment_typereadFilter by deployment type (e.g. Kubernetes, ECS)
descriptionreadFilter by connector description
drift_idreadDrift ID from scs_sbom_drift calculate response
end_timereadEnd time in ISO 8601 format (e.g. 2025-07-10T23:59:59Z). Default: now.
enforcement_idreadEnforcement ID (from artifact overview violations.enforcementId)
entityreadFilter by entity identifier
entity_identifierreadEntity identifier in
entity_typereadFilter global templates by entity type
env_typereadEnvironment type filter
environmentreadFilter by environment (multi-value, OR-combined). Validated against the project
environment_idreadFME environment ID (get from fme_environment)
epssreadEPSS probability bucket (single select).
epss_percentilereadEPSS percentile bucket (single select).
eval_idreadEvaluation UUID
event_groupsreadEvent groups to include (multi-value, OR-combined). Omit for all named groups — which is not every event:
event_type_idsreadFilter by base event type IDs
exception_idreadFilter by exception ID
exclude_regoreadExclude rego source from list response
exclude_repo_patternsreadGlob patterns matching target.name on repository targets (sto-core excludeRepoPatterns).
execution_idreadFilter by pipeline plan execution ID (e.g.
exemption_statusesreadComma-separated statuses
experiment_idreadExperiment ID (get from fme_experiment). Required.
exploitabilityreadExploitability filter.
favoritesreadOnly return entities the current user has favorited
feature_flag_namereadFeature flag name whose definitions to list. Required.
feature_typereadProductivity feature type
filter_typereadWhich groups to include at this scope
folder_idreadFilter by CCM folder ID
folder_name_patternreadFilter folders by name pattern (substring match)
freeze_statusreadFilter by freeze status
git_refreadGit reference (branch/tag) filter
globalreadWhen true, accesses global templates (list: passes isGlobal=true; get: forces accountIdentifier to __GLOBAL_TEMPLATES_ACCOUNT_ID__)
granularityreadTime granularity
groupreadKubernetes API group filter (e.g.
group_byreadGroup results by field. Use predefined fields (region, product, etc.) OR any label key name (env, team, app, environment, etc.)
harness_createwrite
harness_deletedestructive
harness_describeread
harness_diagnoseread
harness_executewrite
harness_getread
harness_listread
harness_schemaread
harness_searchread
harness_statusread
harness_updatewrite
has_modulereadFilter by module presence (hasModule)
host_namereadFilter by host name
identifier_filterreadFilter by policy identifier
identifiersreadOptional list of File Store identifiers to fetch details for (repeatable query param)
idsreadFilter to specific metric IDs
impacted_servicereadFilter by impacted Harness service identifier (multi-value, OR-combined). Validated against the project
import_request_idwriteRequired. importRequestId from the import execute response.
include_child_scopesreadInclude evaluations from child scopes
include_directoriesreadIf true, include directories in the listing as well as files.
include_metareadInclude list-envelope counts (
include_parent_scopesreadInclude settings that exist only at parent scopes
include_policy_set_countwriteInclude count of policy sets referencing each policy
inheritedreadInclude rules inherited from parent spaces (true/false)
inheriting_credentials_from_delegatereadFilter connectors inheriting credentials from delegate
integration_typereadAI coding assistant type
is_cluster_hourly_datareadWhether to use cluster hourly data
is_cluster_queryreadWhether this is a cluster query
is_customwrite(get only) Whether the check is a custom check. Set to true for custom checks; defaults to false.
issue_typesreadComma-separated issue types
keyreadMetadata key whose values to enumerate (required)
kindreadKubernetes resource kind filter
kindsreadFilter by object kind(s). Pass one or more OBJECT_KIND_* values.
labelreadFilter by label
lifecyclereadComma-separated list of lifecycles to filter on (e.g.
limitreadResult limit
match_typereadHow name is matched. Ignored when name is omitted.
metadatareadFilter by metadata using key:value format
metadata_onlyreadWhen true, fetches only template metadata via list-metadata — faster than full list
metricreadDORA metric to fetch
metric_idsreadOptional display filter to a subset of metrics. Never affects multiple comparison correction, which is always computed from the metric
metric_set_idwriteFilter by metric set UUID
metric_typereadMetric to retrieve
migration_typereadFilter by migration type
min_amountreadMinimum actual amount threshold
min_anomalous_spendreadMinimum anomalous spend threshold
min_savingreadMinimum monthly savings. Default 1 (Open/Ignored tabs). Default 0 when recommendation_states is APPLIED only. Pass 0 to include sub-$1 recs.
modulereadFilter audit logs by module
module_typereadModule type (e.g. CD, CI)
my-namereaddesc
my_deploymentsreadShow only my deployments
namereadFilter delegate tokens by name
namespacereadKubernetes namespace filter
new-apm-probedvdvread
new-custom-script-action-8s3readoptional desc
node_execution_idreadNode execution ID to filter by step
object_kindreadFilter by type kind
object_typereadType of object to list (e.g. Table) — required for list
offsetreadPagination offset
only_favoritesreadOnly favorited projects
only_true_positive_issue_typesreadIssue types that must have a TRUE_POSITIVE triage verdict to stay in scope
orderwriteSort order
order_by_directionwriteOrder direction
order_by_fieldwriteField to order by
org_idwriteOptional — not supported; use fme_segment_definition execute actions for Harness-native segment key operations.
origin_statusesreadComma-separated origin statuses.
originsreadComma-separated origin layers.
oss_risk_filterreadFilter by OSS risk category. Comma-separated values from: DEFINITE_EOL, DERIVED_EOL, CLOSE_TO_EOL, UNMAINTAINED, OUTDATED
owned_by_mereadOnly return entities owned by the current user
ownerreadComma-separated list of owner references to filter on
package_idreadPackage ID to scope the file search
package_idsreadComma-separated package IDs
package_kindreadPackage kind (huggingface model/dataset, terraform module/provider)
package_namereadFilter by package name
package_typereadFilter registries by package type
pagereadPage number (0-based)
page_tokenreadPagination token from a previous list response
parent_namereadFilter to this parent name (Feature Flag/AI Config/Config name matching parent_type). Unknown or mismatched name returns 404.
parent_typereadParent kind to list. Required. FEATURE_FLAG and AI_CONFIG are implemented; CONFIG returns 404.
pathreadFile path filter
perspective_idreadCost perspective identifier
perspective_namereadFilter by perspective name(s) (comma-separated)
phase_idwriteOptional authored phase id. When set, limits the list to the latest artifacts_reported attempt of that phase.
phase_identifierreadFilter to activities in a specific phase
pipeline_idreadPipeline identifier to filter executions
pipeline_idsreadComma-separated pipeline IDs
pod-deletedestructivePod delete chaos
policy_set_refwriteOPA policy set reference
principal_typereadPrincipal type filter
priorityreadFilter by priority option id (multi-value, OR-combined)
priyanshu-http-probe-1readops desc
product_namesreadComma-separated scanner product names (e.g.
profile_idreadBusiness alignment profile ID
project_idwriteOptional — not supported; use fme_segment_definition execute actions for Harness-native segment key operations.
providerreadLLM provider (required)
purlreadPackage URL of the component (e.g. pkg:npm/[email protected]) — required
queryreadThe semantic search query (e.g.
reachabilityreadReachability filter.
recommendation_statesreadOPEN (default, matches Open tab), APPLIED, or IGNORED (expands to IGNORED+TEMPORARILY_IGNORED). Comma-separated.
regionreadOptional provider region (e.g. for Bedrock/Vertex)
registry_idreadRegistry ID to scope the file search
registry_idsreadComma-separated registry IDs to filter within
repo_creds_idreadFilter by repository credentials ID
reported_afterreadOnly incidents reported after this time (ISO-8601)
reported_beforereadOnly incidents reported before this time (ISO-8601)
resource_group_identifierreadResource group identifier filter
resource_group_identifiersreadFilter by resource group identifiers (comma-separated)
04

Trust audit

BLOCKgrade D · trust 69/100 Do not install this without reading the findings. The audit found something that could harm you or your machine.

LayerWhat it checksResult
L0Provenance & inventoryPASS
L1Static analysis of the codeFAIL
L2Instruction surface (what it tells the agent)PASS
L3Class-specific surfaceWARN
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
declared (7 observation(s))
Network
declared (10 observation(s))
Shell
declared (6 observation(s))
Dependencies
not all pinned
Secrets in source
found

Findings (25)

HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
src/audit/sinks/otel.ts:13
return await (Function("m", "return import(m)")(moduleName) as Promise<unknown>);
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
Dockerfile:71
CMD ["node", "-e", "const port=process.env.PORT||'3000';fetch(`http://127.0.0.1:${port}/health`).then(r=>{if(!r.ok)process.exit(1)}).catch(()=>process.exit(1))"]
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
src/registry/toolsets/gitops.ts:1689
"   {list:{elements:[{cluster:'staging', url:'https://1.2.3.4'}, {cluster:'prod', url:'https://2.3.4.5'}]}}\n" +
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
src/registry/toolsets/gitops.ts:1704
"   {matrix:{generators:[{list:{elements:[{cluster:'staging', url:'https://1.2.3.4'}]}}, {git:{repoURL:'...', revision:'HEAD', directories:[{path:'apps/*'}]}}]}}\n" +
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
tests/client/harness-client.test.ts:380
let token = "keycloak-access-token-1";
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
tests/client/harness-client.test.ts:384
token = "keycloak-access-token-2";
MEDIUMFilesystem / path · mcp.destructive_tools · CWE-22, CWE-59
harness_delete, pod-delete
Why it matters. 2 tool(s) can delete or overwrite
Fix. prefer a read-only mode or scoped tokens; the page states the blast radius
LOWInventory / provenance · inv.hidden_file · CWE-1104
.mcpbignore
.mcpbignore
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWFilesystem / path · fs.credential_store · CWE-22, CWE-59
tests/registry/chaos-probe.test.ts:322
env: [{ name: "KUBECONFIG", value: "/root/.kube/config" }],
Why it matters. touches a credential store
LOWFilesystem / path · fs.credential_store · CWE-22, CWE-59
tests/registry/chaos-probe.test.ts:336
env: [{ name: "KUBECONFIG", value: "/root/.kube/config" }],
Why it matters. touches a credential store
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
src/audit/sinks/jsonl-file.ts:4
import { createLogger } from "../../utils/logger.js";
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
src/audit/sinks/otel.ts:2
import { createLogger } from "../../utils/logger.js";
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
src/audit/sinks/stderr.ts:2
import { createLogger } from "../../utils/logger.js";
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
src/audit/sinks/webhook.ts:2
import { createLogger } from "../../utils/logger.js";
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
src/registry/toolsets/alerts.ts:2
import { buildBodyNormalized } from "../../utils/body-normalizer.js";
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
.github/workflows/ci.yml:111
if curl --fail --silent --show-error http://127.0.0.1:3000/health; then
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
.github/workflows/ci.yml:122
--request POST http://127.0.0.1:3000/mcp)"
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
package.json
@hono/node-server, @modelcontextprotocol/sdk, adm-zip, dotenv, express, hono, jsonwebtoken, yaml
Why it matters. 20 dependency range(s) float
Fix. pin exact versions or ship a lockfile
LOWPrompt injection · prompt.transfer_instruction · CWE-94, CWE-1427
README.md:121
| `/mcp`    | `POST`    | MCP JSON-RPC endpoint (initialize + session requests)            |
Why it matters. an instruction to move sensitive data to an outside destination
Fix. remove; a skill never needs the user's secrets off the machine
LOWPrompt injection · prompt.transfer_instruction · CWE-94, CWE-1427
README.md:1603
When packaging a directory, include the source, manifests, lockfiles, configuration, and intended uncommitted edits needed to build it. Exclude credentials, `.git`, installed dependencies, and generat
Why it matters. an instruction to move sensitive data to an outside destination
Fix. remove; a skill never needs the user's secrets off the machine
INFOInventory / provenance · inv.oversize · CWE-1104
src/data/schemas/v0/pipeline.ts
src/data/schemas/v0/pipeline.ts
Why it matters. 4100249 bytes not read
INFOInventory / provenance · inv.oversize · CWE-1104
src/data/schemas/v0/template.ts
src/data/schemas/v0/template.ts
Why it matters. 5075173 bytes not read
INFOPrompt injection · prompt.authority_framing · CWE-94, CWE-1427
README.md:5
An MCP (Model Context Protocol) server that gives AI agents full access to the Harness.io platform through 11 consolidated tools and 261 resource types.
INFOPrompt injection · prompt.authority_framing · CWE-94, CWE-1427
<listing:description>:1
Give AI agents full access to the Harness.io platform — manage pipelines, deployments, cloud costs, chaos engineering, feature flags, SEI, and 125+ resource types through 11 MCP tools
INFOPrompt injection · prompt.credential_read · CWE-94, CWE-1427
docs/gemini.md:142
- Go to Harness Platform > Account Settings > Access Management > API Keys
Why it matters. asks the agent to read credentials

Gates applied: no_behavioural_pass.

Audited 2026-10-12 · audit v0.4.1 · source sha f5ffcf9c8f3dfull audit observations/trust-audit/mcp-server/harness__mcp-server.json · Report an issue / request a re-scan
05

Audit history

Every audit this server has had. A grade with a past is a grade somebody is still checking.

DateSourceVerdictGradeScoreChange
2026-10-12f5ffcf9c8f3dBLOCKD69first audit
06

Questions

What is the harness-mcp-v2 MCP server?

Harness’ official MCP Server

What tools does harness-mcp-v2 expose?

200 in total: 259 read-only, 21 that write, and 2 that can delete or overwrite (harness_delete, pod-delete). Every one is listed on this page with its risk.

Is harness-mcp-v2 safe to connect to an agent?

No — not without reading the findings first. The audit graded it D (69/100) and found 1 critical or high issue in the source. Each one is listed on this page with the file and line it is on. Separately from the audit: 2 of its tools can destroy data, so scope the token you give it to what you actually need.

What credentials does harness-mcp-v2 need?

It reads GITHUB_TOKEN and HARNESS_API_KEY from the environment. Give it a token scoped to the least it needs — an agent that can be talked into calling a tool can be talked into calling it with your credentials.

How does harness-mcp-v2 run?

It speaks stdio and streamable-http, so it runs as a local process your client starts. It is published on npm as harness-mcp-v2 at 3.2.33.

How current is this page?

The grade is for one exact copy of the source (f5ffcf9c8f3d), read on 2026-10-12. The repository is watched and re-audited when it changes.

Advertisement