harness-mcp-v2 3.2.17 → 3.2.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +10 -7
- package/build/data/schemas/v0/pipeline.d.ts.map +1 -1
- package/build/data/schemas/v0/pipeline.js +144 -4
- package/build/data/schemas/v0/pipeline.js.map +1 -1
- package/build/data/schemas/v0/template.d.ts.map +1 -1
- package/build/data/schemas/v0/template.js +144 -4
- package/build/data/schemas/v0/template.js.map +1 -1
- package/build/data/schemas/v0/trigger.d.ts.map +1 -1
- package/build/data/schemas/v0/trigger.js +105 -3
- package/build/data/schemas/v0/trigger.js.map +1 -1
- package/build/data/schemas/v1/pipeline.d.ts.map +1 -1
- package/build/data/schemas/v1/pipeline.js +101 -0
- package/build/data/schemas/v1/pipeline.js.map +1 -1
- package/build/data/schemas/v1/template.d.ts.map +1 -1
- package/build/data/schemas/v1/template.js +101 -0
- package/build/data/schemas/v1/template.js.map +1 -1
- package/build/registry/extractors.d.ts +48 -0
- package/build/registry/extractors.d.ts.map +1 -1
- package/build/registry/extractors.js +138 -0
- package/build/registry/extractors.js.map +1 -1
- package/build/registry/index.d.ts.map +1 -1
- package/build/registry/index.js +14 -10
- package/build/registry/index.js.map +1 -1
- package/build/registry/list-filter-utils.d.ts +8 -0
- package/build/registry/list-filter-utils.d.ts.map +1 -0
- package/build/registry/list-filter-utils.js +50 -0
- package/build/registry/list-filter-utils.js.map +1 -0
- package/build/registry/toolsets/ccm.d.ts.map +1 -1
- package/build/registry/toolsets/ccm.js +349 -6
- package/build/registry/toolsets/ccm.js.map +1 -1
- package/build/registry/toolsets/evidence-vault.d.ts +2 -0
- package/build/registry/toolsets/evidence-vault.d.ts.map +1 -1
- package/build/registry/toolsets/evidence-vault.js +34 -2
- package/build/registry/toolsets/evidence-vault.js.map +1 -1
- package/build/registry/toolsets/pipelines.d.ts.map +1 -1
- package/build/registry/toolsets/pipelines.js +10 -4
- package/build/registry/toolsets/pipelines.js.map +1 -1
- package/build/registry/toolsets/scs.d.ts +7 -0
- package/build/registry/toolsets/scs.d.ts.map +1 -1
- package/build/registry/toolsets/scs.js +43 -7
- package/build/registry/toolsets/scs.js.map +1 -1
- package/build/registry/toolsets/sto.d.ts.map +1 -1
- package/build/registry/toolsets/sto.js +6 -5
- package/build/registry/toolsets/sto.js.map +1 -1
- package/build/tools/harness-list.d.ts.map +1 -1
- package/build/tools/harness-list.js +2 -5
- package/build/tools/harness-list.js.map +1 -1
- package/build/utils/compact.js +1 -1
- package/build/utils/compact.js.map +1 -1
- package/npm-shrinkwrap.json +2 -2
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
[](https://mcptoplist.com/server/glama%2Fharness%2Fmcp-server)
|
|
4
4
|
|
|
5
|
-
An MCP (Model Context Protocol) server that gives AI agents full access to the Harness.io platform through 11 consolidated tools and
|
|
5
|
+
An MCP (Model Context Protocol) server that gives AI agents full access to the Harness.io platform through 11 consolidated tools and 223 resource types.
|
|
6
6
|
|
|
7
7
|
## Why Use This MCP Server
|
|
8
8
|
|
|
@@ -10,7 +10,7 @@ Most MCP servers map one tool per API endpoint. For a platform as broad as Harne
|
|
|
10
10
|
|
|
11
11
|
This server is built differently:
|
|
12
12
|
|
|
13
|
-
- **11 tools,
|
|
13
|
+
- **11 tools, 223 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.
|
|
14
14
|
- **Full platform coverage.** 38 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, Governance, Service Overrides, Knowledge Graph, and more. Opt-in Ansible coverage is available when you need inventory and playbook data.
|
|
15
15
|
- **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.
|
|
16
16
|
- **34 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.
|
|
@@ -132,7 +132,7 @@ Operational constraints in HTTP mode:
|
|
|
132
132
|
- `POST /mcp` without `mcp-session-id` must be an `initialize` request.
|
|
133
133
|
- `POST /mcp`, `GET /mcp`, and `DELETE /mcp` for existing sessions require the `mcp-session-id` header.
|
|
134
134
|
- `GET /mcp` is used for SSE notifications (progress updates and elicitation prompts).
|
|
135
|
-
- Idle sessions are reaped after `MCP_SESSION_TTL_MS` milliseconds once no request or SSE stream is active (default `
|
|
135
|
+
- Idle sessions are reaped after `MCP_SESSION_TTL_MS` milliseconds once no request or SSE stream is active (default `1800000`, or 30 minutes).
|
|
136
136
|
- `GET /health` is the only non-MCP endpoint.
|
|
137
137
|
- Request body size is capped by `HARNESS_MAX_BODY_SIZE_MB` (default `10` MB).
|
|
138
138
|
- Set `x-harness-pipeline-version: 0` or `1` on the `initialize` request to select V0 or V1 pipeline resources for that HTTP session.
|
|
@@ -555,7 +555,9 @@ The server automatically loads environment variables from a `.env` file in the p
|
|
|
555
555
|
| `HARNESS_MCP_ALLOWED_HOSTS` | No | -- | Comma-separated hostnames allowed by HTTP transport Host-header validation. `mcp.harness.io` is allowed by default for localhost binds; add proxy/custom domains here |
|
|
556
556
|
| `HARNESS_MCP_AUTH_TOKEN` | No | -- | Bearer token required on `/mcp` HTTP routes when set. Required by default when HTTP transport binds to a non-loopback host |
|
|
557
557
|
| `HARNESS_MCP_ALLOW_UNAUTHENTICATED_HTTP` | No | `false` | Explicitly allow unauthenticated HTTP transport on non-loopback binds. Use only behind another authenticated control |
|
|
558
|
+
| `HARNESS_MCP_TRUST_PROXY` | No | `0` | Number of reverse proxy / load balancer hops to trust for client IP resolution (Express `trust proxy`). Set to the proxy count in front of the server so per-IP rate limiting keys on the real client rather than the proxy socket peer |
|
|
558
559
|
| `HARNESS_MCP_LOG_FILE` | No | `~/.claude/harness-mcp.log` | File used for stdio disconnect/crash diagnostics when stderr may no longer be available |
|
|
560
|
+
| `HARNESS_LOG_UNSAFE_BODIES` | No | `false` | Include raw request/response bodies in logs. Off by default since bodies can contain secrets; enable only for local debugging |
|
|
559
561
|
| `HARNESS_AUDIT_FILE` | No | -- | Append audit events to a newline-delimited JSON file for durable local collection |
|
|
560
562
|
| `HARNESS_AUDIT_WEBHOOK_URL` | No | -- | HTTPS endpoint that receives batched audit events. HTTP URLs require `HARNESS_ALLOW_HTTP=true` for local development |
|
|
561
563
|
| `HARNESS_AUDIT_WEBHOOK_TOKEN` | No | -- | Optional bearer token sent to the audit webhook |
|
|
@@ -566,6 +568,7 @@ The server automatically loads environment variables from a `.env` file in the p
|
|
|
566
568
|
| `HARNESS_SEARCH_SERVICE_URL` | No | -- | Base URL of the remote search service when `HARNESS_SEARCH_PROVIDER=remote` (e.g. `http://search-svc:8080`). Required when using the `remote` provider |
|
|
567
569
|
| `HARNESS_SEARCH_SERVICE_HEADERS` | No | -- | JSON object of headers sent with every request to the remote search service. Supports any auth scheme: `{"Authorization":"Bearer tok"}`, `{"x-api-key":"key"}`, or multiple internal service-to-service headers |
|
|
568
570
|
| `HARNESS_HF_CACHE_DIR` | No | `/tmp/hf-cache` | Directory for the `@huggingface/transformers` model cache used by the `local` search provider. The Docker image pre-bakes the model into `/app/.cache/hf` to avoid runtime downloads. Set to a persistent volume path in production deployments |
|
|
571
|
+
| `HARNESS_DIAGNOSE_LOG_FETCH_CONCURRENCY` | No | `3` | Max concurrent log-blob downloads issued by `harness_diagnose` when fetching logs for failed steps. Increase only if diagnose latency is dominated by log-fetch wall-clock and the pod has memory headroom |
|
|
569
572
|
|
|
570
573
|
|
|
571
574
|
### Semantic Search
|
|
@@ -1199,7 +1202,7 @@ Harness pipelines can be stored in three ways:
|
|
|
1199
1202
|
|
|
1200
1203
|
## Resource Types
|
|
1201
1204
|
|
|
1202
|
-
|
|
1205
|
+
223 resource types organized across 38 toolsets. Each resource type supports a subset of CRUD operations and optional execute actions.
|
|
1203
1206
|
|
|
1204
1207
|
### Platform
|
|
1205
1208
|
|
|
@@ -1602,12 +1605,12 @@ SEI resources are consolidated for token efficiency. Use `metric` or `aspect` pa
|
|
|
1602
1605
|
|
|
1603
1606
|
### Evidence Vault
|
|
1604
1607
|
|
|
1605
|
-
Evidence Vault stores in-toto attestations (SDLC evidences). List supports account/org/project scope via `resource_scope`. Singular free-text filters (pipeline, artifact alone, gitoid) use `search_term`; an additional Name constraint uses `filters.subject_name`; subject content digest uses `filters.subject_digest`. Get looks up by `gitoid_sha256` and requires `org_id`/`project_id` (from the list row). Requires feature flag `SCS_EVIDENCE_VAULT`.
|
|
1608
|
+
Evidence Vault stores in-toto attestations (SDLC evidences). List supports account/org/project scope via `resource_scope`. Singular free-text filters (pipeline, artifact alone, gitoid) use `search_term`; an additional Name constraint uses `filters.subject_name`; subject content digest uses `filters.subject_digest`. Get looks up by `gitoid_sha256` and requires `org_id`/`project_id` (from the list row). Download (`harness_execute` action `download`) returns a time-limited `download_url` — always show that link to the user. Requires feature flag `SCS_EVIDENCE_VAULT`.
|
|
1606
1609
|
|
|
1607
1610
|
|
|
1608
1611
|
| Resource Type | List | Get | Create | Update | Delete | Execute Actions |
|
|
1609
1612
|
| ------------- | ---- | --- | ------ | ------ | ------ | --------------- |
|
|
1610
|
-
| `attestation` | x | x | | | |
|
|
1613
|
+
| `attestation` | x | x | | | | `download` |
|
|
1611
1614
|
|
|
1612
1615
|
|
|
1613
1616
|
|
|
@@ -1854,7 +1857,7 @@ Available toolset names:
|
|
|
1854
1857
|
+--------v---------+
|
|
1855
1858
|
| Registry | <-- Declarative resource definitions
|
|
1856
1859
|
| 38 Toolsets | (data files, not code)
|
|
1857
|
-
|
|
|
1860
|
+
| 223 Resource Types|
|
|
1858
1861
|
+--------+---------+
|
|
1859
1862
|
|
|
|
1860
1863
|
+--------v---------+
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../../../../src/data/schemas/v0/pipeline.ts"],"names":[],"mappings":"AAGA,QAAA,MAAM,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,
|
|
1
|
+
{"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../../../../src/data/schemas/v0/pipeline.ts"],"names":[],"mappings":"AAGA,QAAA,MAAM,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CA89vH/B,CAAC;AACF,eAAe,MAAM,CAAC"}
|
|
@@ -29255,7 +29255,8 @@ const schema = {
|
|
|
29255
29255
|
"config": {
|
|
29256
29256
|
"type": "string",
|
|
29257
29257
|
"enum": [
|
|
29258
|
-
"
|
|
29258
|
+
"hunt_full",
|
|
29259
|
+
"hunt_incremental",
|
|
29259
29260
|
"scan"
|
|
29260
29261
|
]
|
|
29261
29262
|
},
|
|
@@ -29381,7 +29382,8 @@ const schema = {
|
|
|
29381
29382
|
"config": {
|
|
29382
29383
|
"type": "string",
|
|
29383
29384
|
"enum": [
|
|
29384
|
-
"
|
|
29385
|
+
"hunt_full",
|
|
29386
|
+
"hunt_incremental",
|
|
29385
29387
|
"scan"
|
|
29386
29388
|
]
|
|
29387
29389
|
},
|
|
@@ -55662,6 +55664,18 @@ const schema = {
|
|
|
55662
55664
|
"minLength": 1
|
|
55663
55665
|
}
|
|
55664
55666
|
]
|
|
55667
|
+
},
|
|
55668
|
+
"filters": {
|
|
55669
|
+
"oneOf": [
|
|
55670
|
+
{
|
|
55671
|
+
"$ref": "#/definitions/pipeline/steps/iacm/AnsibleFilters"
|
|
55672
|
+
},
|
|
55673
|
+
{
|
|
55674
|
+
"type": "string",
|
|
55675
|
+
"pattern": "^<\\+input>((\\.)((executionInput\\(\\))|(allowedValues|default|regex)\\(.+?\\)))*$",
|
|
55676
|
+
"minLength": 1
|
|
55677
|
+
}
|
|
55678
|
+
]
|
|
55665
55679
|
}
|
|
55666
55680
|
}
|
|
55667
55681
|
}
|
|
@@ -55719,9 +55733,64 @@ const schema = {
|
|
|
55719
55733
|
"items": {
|
|
55720
55734
|
"$ref": "#/definitions/pipeline/steps/iacm/ImportCommandParameterField"
|
|
55721
55735
|
}
|
|
55736
|
+
},
|
|
55737
|
+
"filters": {
|
|
55738
|
+
"oneOf": [
|
|
55739
|
+
{
|
|
55740
|
+
"$ref": "#/definitions/pipeline/steps/iacm/AnsibleFilters"
|
|
55741
|
+
},
|
|
55742
|
+
{
|
|
55743
|
+
"type": "string",
|
|
55744
|
+
"pattern": "^<\\+input>((\\.)((executionInput\\(\\))|(allowedValues|default|regex)\\(.+?\\)))*$",
|
|
55745
|
+
"minLength": 1
|
|
55746
|
+
}
|
|
55747
|
+
]
|
|
55722
55748
|
}
|
|
55723
55749
|
}
|
|
55724
55750
|
},
|
|
55751
|
+
"AnsibleFilters": {
|
|
55752
|
+
"title": "AnsibleFilters",
|
|
55753
|
+
"type": "object",
|
|
55754
|
+
"properties": {
|
|
55755
|
+
"tags": {
|
|
55756
|
+
"description": "Only run tasks and roles carrying one of these tags.",
|
|
55757
|
+
"oneOf": [
|
|
55758
|
+
{
|
|
55759
|
+
"type": "array",
|
|
55760
|
+
"items": {
|
|
55761
|
+
"type": "string"
|
|
55762
|
+
}
|
|
55763
|
+
},
|
|
55764
|
+
{
|
|
55765
|
+
"type": "string",
|
|
55766
|
+
"pattern": "^<\\+input>((\\.)((executionInput\\(\\))|(allowedValues|default|regex)\\(.+?\\)))*$",
|
|
55767
|
+
"minLength": 1
|
|
55768
|
+
}
|
|
55769
|
+
]
|
|
55770
|
+
},
|
|
55771
|
+
"skipTags": {
|
|
55772
|
+
"description": "Skip tasks and roles carrying one of these tags. Takes precedence over tags.",
|
|
55773
|
+
"oneOf": [
|
|
55774
|
+
{
|
|
55775
|
+
"type": "array",
|
|
55776
|
+
"items": {
|
|
55777
|
+
"type": "string"
|
|
55778
|
+
}
|
|
55779
|
+
},
|
|
55780
|
+
{
|
|
55781
|
+
"type": "string",
|
|
55782
|
+
"pattern": "^<\\+input>((\\.)((executionInput\\(\\))|(allowedValues|default|regex)\\(.+?\\)))*$",
|
|
55783
|
+
"minLength": 1
|
|
55784
|
+
}
|
|
55785
|
+
]
|
|
55786
|
+
},
|
|
55787
|
+
"limit": {
|
|
55788
|
+
"description": "Restrict the run to matching hosts. A single ansible host pattern, e.g. \"web,db:!staging\".",
|
|
55789
|
+
"type": "string"
|
|
55790
|
+
}
|
|
55791
|
+
},
|
|
55792
|
+
"$schema": "http://json-schema.org/draft-07/schema#"
|
|
55793
|
+
},
|
|
55725
55794
|
"IACMRemediationAgentStepNode": {
|
|
55726
55795
|
"title": "IACMRemediationAgentStepNode",
|
|
55727
55796
|
"type": "object",
|
|
@@ -55857,6 +55926,20 @@ const schema = {
|
|
|
55857
55926
|
},
|
|
55858
55927
|
"llmConnectorRef": {
|
|
55859
55928
|
"type": "string"
|
|
55929
|
+
},
|
|
55930
|
+
"resourceAddresses": {
|
|
55931
|
+
"oneOf": [
|
|
55932
|
+
{
|
|
55933
|
+
"type": "array",
|
|
55934
|
+
"items": {
|
|
55935
|
+
"type": "string"
|
|
55936
|
+
}
|
|
55937
|
+
},
|
|
55938
|
+
{
|
|
55939
|
+
"type": "string",
|
|
55940
|
+
"pattern": "^<\\+.*>$"
|
|
55941
|
+
}
|
|
55942
|
+
]
|
|
55860
55943
|
}
|
|
55861
55944
|
}
|
|
55862
55945
|
}
|
|
@@ -55895,6 +55978,20 @@ const schema = {
|
|
|
55895
55978
|
},
|
|
55896
55979
|
"llmConnectorRef": {
|
|
55897
55980
|
"type": "string"
|
|
55981
|
+
},
|
|
55982
|
+
"resourceAddresses": {
|
|
55983
|
+
"oneOf": [
|
|
55984
|
+
{
|
|
55985
|
+
"type": "array",
|
|
55986
|
+
"items": {
|
|
55987
|
+
"type": "string"
|
|
55988
|
+
}
|
|
55989
|
+
},
|
|
55990
|
+
{
|
|
55991
|
+
"type": "string",
|
|
55992
|
+
"pattern": "^<\\+.*>$"
|
|
55993
|
+
}
|
|
55994
|
+
]
|
|
55898
55995
|
}
|
|
55899
55996
|
}
|
|
55900
55997
|
}
|
|
@@ -74928,7 +75025,8 @@ const schema = {
|
|
|
74928
75025
|
"GoogleMigInstanceTemplate",
|
|
74929
75026
|
"GoogleMigConfiguration",
|
|
74930
75027
|
"GoogleMigAutoscalerConfiguration",
|
|
74931
|
-
"GoogleMigHealthCheckConfiguration"
|
|
75028
|
+
"GoogleMigHealthCheckConfiguration",
|
|
75029
|
+
"AgentConfig"
|
|
74932
75030
|
]
|
|
74933
75031
|
},
|
|
74934
75032
|
"description": {
|
|
@@ -75448,6 +75546,22 @@ const schema = {
|
|
|
75448
75546
|
}
|
|
75449
75547
|
}
|
|
75450
75548
|
}
|
|
75549
|
+
},
|
|
75550
|
+
{
|
|
75551
|
+
"if": {
|
|
75552
|
+
"properties": {
|
|
75553
|
+
"type": {
|
|
75554
|
+
"const": "AgentConfig"
|
|
75555
|
+
}
|
|
75556
|
+
}
|
|
75557
|
+
},
|
|
75558
|
+
"then": {
|
|
75559
|
+
"properties": {
|
|
75560
|
+
"spec": {
|
|
75561
|
+
"$ref": "#/definitions/pipeline/steps/cd/AgentConfigManifest"
|
|
75562
|
+
}
|
|
75563
|
+
}
|
|
75564
|
+
}
|
|
75451
75565
|
}
|
|
75452
75566
|
]
|
|
75453
75567
|
},
|
|
@@ -75876,7 +75990,8 @@ const schema = {
|
|
|
75876
75990
|
"enum": [
|
|
75877
75991
|
"V2",
|
|
75878
75992
|
"V3",
|
|
75879
|
-
"V380"
|
|
75993
|
+
"V380",
|
|
75994
|
+
"V4"
|
|
75880
75995
|
]
|
|
75881
75996
|
},
|
|
75882
75997
|
"metadata": {
|
|
@@ -76601,6 +76716,31 @@ const schema = {
|
|
|
76601
76716
|
}
|
|
76602
76717
|
}
|
|
76603
76718
|
},
|
|
76719
|
+
"AgentConfigManifest": {
|
|
76720
|
+
"title": "AgentConfigManifest",
|
|
76721
|
+
"allOf": [
|
|
76722
|
+
{
|
|
76723
|
+
"$ref": "#/definitions/pipeline/steps/cd/ManifestAttributes"
|
|
76724
|
+
},
|
|
76725
|
+
{
|
|
76726
|
+
"type": "object",
|
|
76727
|
+
"properties": {
|
|
76728
|
+
"metadata": {
|
|
76729
|
+
"type": "string"
|
|
76730
|
+
},
|
|
76731
|
+
"store": {
|
|
76732
|
+
"$ref": "#/definitions/pipeline/steps/cd/StoreConfigWrapper"
|
|
76733
|
+
}
|
|
76734
|
+
}
|
|
76735
|
+
}
|
|
76736
|
+
],
|
|
76737
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
76738
|
+
"properties": {
|
|
76739
|
+
"description": {
|
|
76740
|
+
"desc": "This is the description for AgentConfigManifest"
|
|
76741
|
+
}
|
|
76742
|
+
}
|
|
76743
|
+
},
|
|
76604
76744
|
"ManifestSourceWrapper": {
|
|
76605
76745
|
"title": "ManifestSourceWrapper",
|
|
76606
76746
|
"type": "object",
|