harness-mcp-v2 3.0.2 → 3.0.3
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 +78 -14
- package/build/config.d.ts +18 -6
- package/build/config.d.ts.map +1 -1
- package/build/config.js +22 -5
- package/build/config.js.map +1 -1
- package/build/data/schemas/v0/pipeline.d.ts.map +1 -1
- package/build/data/schemas/v0/pipeline.js +159 -66
- 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 +159 -66
- package/build/data/schemas/v0/template.js.map +1 -1
- package/build/index.js +30 -11
- package/build/index.js.map +1 -1
- package/build/prompts/bulk-exemption-create.d.ts +3 -0
- package/build/prompts/bulk-exemption-create.d.ts.map +1 -0
- package/build/prompts/bulk-exemption-create.js +132 -0
- package/build/prompts/bulk-exemption-create.js.map +1 -0
- package/build/prompts/index.d.ts.map +1 -1
- package/build/prompts/index.js +2 -0
- package/build/prompts/index.js.map +1 -1
- package/build/registry/toolsets/repositories.d.ts.map +1 -1
- package/build/registry/toolsets/repositories.js +23 -1
- package/build/registry/toolsets/repositories.js.map +1 -1
- package/build/registry/toolsets/sto.d.ts.map +1 -1
- package/build/registry/toolsets/sto.js +55 -0
- package/build/registry/toolsets/sto.js.map +1 -1
- package/build/registry/toolsets/templates.d.ts.map +1 -1
- package/build/registry/toolsets/templates.js +11 -77
- package/build/registry/toolsets/templates.js.map +1 -1
- package/build/tools/harness-execute.d.ts.map +1 -1
- package/build/tools/harness-execute.js +132 -14
- package/build/tools/harness-execute.js.map +1 -1
- package/build/utils/http-auth.d.ts +10 -0
- package/build/utils/http-auth.d.ts.map +1 -0
- package/build/utils/http-auth.js +51 -0
- package/build/utils/http-auth.js.map +1 -0
- package/build/utils/log-resolver.d.ts.map +1 -1
- package/build/utils/log-resolver.js +41 -11
- package/build/utils/log-resolver.js.map +1 -1
- package/build/utils/poll-execution.d.ts +76 -0
- package/build/utils/poll-execution.d.ts.map +1 -0
- package/build/utils/poll-execution.js +187 -0
- package/build/utils/poll-execution.js.map +1 -0
- package/build/utils/session-headers.d.ts +11 -0
- package/build/utils/session-headers.d.ts.map +1 -1
- package/build/utils/session-headers.js +65 -2
- package/build/utils/session-headers.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -11,7 +11,7 @@ This server is built differently:
|
|
|
11
11
|
- **11 tools, 169 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.
|
|
12
12
|
- **Full platform coverage.** 31 toolsets spanning CI/CD, GitOps, Feature Flags, Cloud Cost Management, Security Testing, Chaos Engineering, Database DevOps, Internal Developer Portal, Software Supply Chain, Governance, Service Overrides, Visualizations, and more. Not just pipelines — the entire Harness platform.
|
|
13
13
|
- **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.
|
|
14
|
-
- **
|
|
14
|
+
- **31 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.
|
|
15
15
|
- **Works everywhere.** Stdio transport for local clients (Claude Desktop, Cursor, Windsurf), HTTP transport for remote/shared deployments, Docker and Kubernetes ready.
|
|
16
16
|
- **Zero-config start.** Just provide a Harness API key. Account ID is auto-extracted from PAT tokens, org/project defaults are optional, and toolset filtering lets you expose only what you need.
|
|
17
17
|
- **Extensible by design.** Adding a new Harness resource means adding a declarative data file — no new tool registration, no schema changes, no prompt updates.
|
|
@@ -125,6 +125,8 @@ The HTTP transport runs in **session-based mode**. A new MCP session is created
|
|
|
125
125
|
|
|
126
126
|
Operational constraints in HTTP mode:
|
|
127
127
|
|
|
128
|
+
- Set `HARNESS_MCP_AUTH_TOKEN` for any shared or remotely reachable deployment. When set, every `POST`, `GET`, and `DELETE` request to `/mcp` must include `Authorization: Bearer <token>`.
|
|
129
|
+
- Non-loopback binds require `HARNESS_MCP_AUTH_TOKEN` by default. To run unauthenticated on a non-loopback interface anyway, set `HARNESS_MCP_ALLOW_UNAUTHENTICATED_HTTP=true` explicitly.
|
|
128
130
|
- `POST /mcp` without `mcp-session-id` must be an `initialize` request.
|
|
129
131
|
- `POST /mcp`, `GET /mcp`, and `DELETE /mcp` for existing sessions require the `mcp-session-id` header.
|
|
130
132
|
- `GET /mcp` is used for SSE notifications (progress updates and elicitation prompts).
|
|
@@ -132,27 +134,48 @@ Operational constraints in HTTP mode:
|
|
|
132
134
|
- `GET /health` is the only non-MCP endpoint.
|
|
133
135
|
- Request body size is capped by `HARNESS_MAX_BODY_SIZE_MB` (default `10` MB).
|
|
134
136
|
- Set `x-harness-pipeline-version: 0` or `1` on the `initialize` request to select V0 or V1 pipeline resources for that HTTP session.
|
|
137
|
+
- Set `x-harness-auto-approve-risk: none|low_write|medium_write|high_write|all` on the `initialize` request to choose a stricter per-session auto-approval threshold. The server caps this value at the deployment-level `HARNESS_AUTO_APPROVE_RISK`, so a session can reduce but not expand the configured approval ceiling.
|
|
138
|
+
|
|
139
|
+
#### Multi-User Mode
|
|
140
|
+
|
|
141
|
+
Set `HARNESS_MCP_MODE=multi-user` for shared HTTP deployments where each client authenticates as a different Harness user. In this mode:
|
|
142
|
+
|
|
143
|
+
- `HARNESS_API_KEY` must **not** be set in the server config — the server holds no Harness credentials.
|
|
144
|
+
- Each session must provide `x-harness-api-key` and `x-harness-account-id` headers on the `initialize` request. Sessions without these headers are rejected with a 401.
|
|
145
|
+
- Sessions may also provide `x-harness-org` and `x-harness-project` headers to set default scope for that session.
|
|
146
|
+
- The Harness API key flows through to every Harness API call for that session, so the audit trail in Harness reflects the real user.
|
|
147
|
+
- `HARNESS_MCP_AUTH_TOKEN` is independent and can still be used as an additional transport-layer gate.
|
|
135
148
|
|
|
136
149
|
```bash
|
|
137
150
|
# Health check
|
|
138
151
|
curl http://localhost:3000/health
|
|
139
152
|
|
|
140
153
|
# MCP initialize request (capture mcp-session-id response header)
|
|
154
|
+
# In multi-user mode, x-harness-api-key and x-harness-account-id are required on initialize.
|
|
141
155
|
curl -i -X POST http://localhost:3000/mcp \
|
|
142
156
|
-H "Content-Type: application/json" \
|
|
157
|
+
-H "Accept: application/json, text/event-stream" \
|
|
158
|
+
-H "Authorization: Bearer $HARNESS_MCP_AUTH_TOKEN" \
|
|
159
|
+
-H "x-harness-api-key: $HARNESS_API_KEY" \
|
|
160
|
+
-H "x-harness-account-id: $HARNESS_ACCOUNT_ID" \
|
|
143
161
|
-d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"test","version":"1.0"}}}'
|
|
144
162
|
|
|
145
163
|
# Subsequent MCP request (use returned session ID)
|
|
146
164
|
curl -X POST http://localhost:3000/mcp \
|
|
147
165
|
-H "Content-Type: application/json" \
|
|
166
|
+
-H "Accept: application/json, text/event-stream" \
|
|
167
|
+
-H "Authorization: Bearer $HARNESS_MCP_AUTH_TOKEN" \
|
|
148
168
|
-H "mcp-session-id: <session-id>" \
|
|
149
169
|
-d '{"jsonrpc":"2.0","id":2,"method":"tools/list","params":{}}'
|
|
150
170
|
|
|
151
171
|
# Terminate session
|
|
152
172
|
curl -X DELETE http://localhost:3000/mcp \
|
|
173
|
+
-H "Authorization: Bearer $HARNESS_MCP_AUTH_TOKEN" \
|
|
153
174
|
-H "mcp-session-id: <session-id>"
|
|
154
175
|
```
|
|
155
176
|
|
|
177
|
+
`HARNESS_MCP_ALLOWED_HOSTS` controls Host-header validation for DNS-rebinding protection, and CORS limits browser origins. Neither is authentication; use `HARNESS_MCP_AUTH_TOKEN` or an authenticated gateway/reverse proxy for access control.
|
|
178
|
+
|
|
156
179
|
### Client Configuration
|
|
157
180
|
|
|
158
181
|
> **Note:** `HARNESS_ORG` and `HARNESS_PROJECT` are optional. They set the org ID and project ID used when not specified per tool call. Agents can discover orgs and projects dynamically using `harness_list(resource_type="organization")` and `harness_list(resource_type="project")`. The deprecated names `HARNESS_DEFAULT_ORG_ID` and `HARNESS_DEFAULT_PROJECT_ID` are still accepted for backward compatibility.
|
|
@@ -494,8 +517,9 @@ The server automatically loads environment variables from a `.env` file in the p
|
|
|
494
517
|
|
|
495
518
|
| Variable | Required | Default | Description |
|
|
496
519
|
| --------------------------- | -------- | --------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
497
|
-
| `
|
|
498
|
-
| `
|
|
520
|
+
| `HARNESS_MCP_MODE` | No | `single-user` | Deployment mode: `single-user` (API key in config, used for all sessions) or `multi-user` (HTTP only, per-session credentials via `x-harness-api-key` and `x-harness-account-id` headers) |
|
|
521
|
+
| `HARNESS_API_KEY` | Yes* | -- | Harness personal access token or service account token. Required in `single-user` mode. Must NOT be set in `multi-user` mode |
|
|
522
|
+
| `HARNESS_ACCOUNT_ID` | No | *(from PAT)* | Harness account identifier. Auto-extracted from PAT tokens in single-user mode; sessions provide their own via `x-harness-account-id` in multi-user mode |
|
|
499
523
|
| `HARNESS_BASE_URL` | No | `https://app.harness.io` | Harness API/UI base URL for local stdio or self-hosted HTTP deployments. Set this to environments such as `https://harness0.harness.io` when running the server yourself. It does not affect the managed `https://mcp.harness.io/mcp` hosted endpoint |
|
|
500
524
|
| `HARNESS_ORG` | No | -- | Organization ID. Used when `org_id` is not specified per tool call. If omitted, `org_id` must be provided explicitly. Agents can also discover orgs dynamically via `harness_list(resource_type="organization")` |
|
|
501
525
|
| `HARNESS_PROJECT` | No | -- | Project ID. Used when `project_id` is not specified per tool call. Agents can also discover projects dynamically via `harness_list(resource_type="project")` |
|
|
@@ -511,6 +535,8 @@ The server automatically loads environment variables from a `.env` file in the p
|
|
|
511
535
|
| `HARNESS_ALLOW_HTTP` | No | `false` | Allow non-HTTPS `HARNESS_BASE_URL`. By default, the server enforces HTTPS for security. Set to `true` only for local development against a non-TLS Harness instance |
|
|
512
536
|
| `HARNESS_PIPELINE_VERSION` | No | `0` | **(Alpha)** Pipeline YAML version. `0` loads the `pipeline` resource type and excludes `pipeline_v1`; `1` loads `pipeline_v1` and excludes `pipeline`. HTTP sessions can override this at initialize time with `x-harness-pipeline-version: 0` or `1` |
|
|
513
537
|
| `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 |
|
|
538
|
+
| `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 |
|
|
539
|
+
| `HARNESS_MCP_ALLOW_UNAUTHENTICATED_HTTP` | No | `false` | Explicitly allow unauthenticated HTTP transport on non-loopback binds. Use only behind another authenticated control |
|
|
514
540
|
| `HARNESS_MCP_LOG_FILE` | No | `~/.claude/harness-mcp.log` | File used for stdio disconnect/crash diagnostics when stderr may no longer be available |
|
|
515
541
|
|
|
516
542
|
|
|
@@ -732,6 +758,17 @@ Use this sequence to reduce execution-time input errors:
|
|
|
732
758
|
- **Constraint:** shorthand expansion is skipped when `inputs.build` is already present (explicit `build` wins).
|
|
733
759
|
3. **Execute the run**
|
|
734
760
|
- `harness_execute(resource_type="pipeline", action="run", resource_id="<pipeline_id>", ...)`
|
|
761
|
+
- For Git-backed pipelines whose YAML should be loaded from a non-default branch, pass `params.pipeline_branch` (sent to Harness as `pipelineBranchName`):
|
|
762
|
+
|
|
763
|
+
```json
|
|
764
|
+
{
|
|
765
|
+
"resource_type": "pipeline",
|
|
766
|
+
"action": "run",
|
|
767
|
+
"resource_id": "deploy_app",
|
|
768
|
+
"params": { "pipeline_branch": "feature/new-stage" },
|
|
769
|
+
"inputs": { "branch": "main" }
|
|
770
|
+
}
|
|
771
|
+
```
|
|
735
772
|
4. **Optional: combine both**
|
|
736
773
|
- Use `input_set_ids` for the base shape and `inputs` for simple overrides.
|
|
737
774
|
|
|
@@ -1064,12 +1101,14 @@ Only one pipeline YAML resource type is loaded at startup. By default `HARNESS_P
|
|
|
1064
1101
|
| -------------- | ---- | --- | ------ | ------ | ------ | -------------------- |
|
|
1065
1102
|
| `repository` | x | x | x | x | | |
|
|
1066
1103
|
| `branch` | x | x | x | | x | |
|
|
1067
|
-
| `commit` | x | x |
|
|
1104
|
+
| `commit` | x | x | x | | | `diff`, `diff_stats` |
|
|
1068
1105
|
| `file_content` | | x | | | | `blame` |
|
|
1069
1106
|
| `tag` | x | | x | | x | |
|
|
1070
1107
|
| `repo_rule` | x | x | | | | |
|
|
1071
1108
|
| `space_rule` | x | x | | | | |
|
|
1072
1109
|
|
|
1110
|
+
`commit` creation commits one or more file actions directly through the Harness Code API without cloning. Pass `body.title`, `body.branch`, and `body.actions`; each action is `CREATE`, `UPDATE`, `DELETE`, or `MOVE`, and `UPDATE` requires the current blob SHA.
|
|
1111
|
+
|
|
1073
1112
|
|
|
1074
1113
|
### Artifact Registries
|
|
1075
1114
|
|
|
@@ -1089,6 +1128,8 @@ Only one pipeline YAML resource type is loaded at startup. By default `HARNESS_P
|
|
|
1089
1128
|
| ------------- | ---- | --- | ------ | ------ | ------ | --------------- |
|
|
1090
1129
|
| `template` | x | x | x | x | x | |
|
|
1091
1130
|
|
|
1131
|
+
Template operations use the Harness Template service paths (`/template/api/templates...`). Create and update require the full template YAML string in `body.template_yaml` or `body.yaml`; `version_label` targets a specific version for update/delete, while deleting without `version_label` deletes all versions.
|
|
1132
|
+
|
|
1092
1133
|
|
|
1093
1134
|
### Dashboards
|
|
1094
1135
|
|
|
@@ -1130,12 +1171,14 @@ Only one pipeline YAML resource type is loaded at startup. By default `HARNESS_P
|
|
|
1130
1171
|
|
|
1131
1172
|
| Resource Type | List | Get | Create | Update | Delete | Execute Actions |
|
|
1132
1173
|
| -------------- | ---- | --- | ------ | ------ | ------ | --------------- |
|
|
1133
|
-
| `pull_request` | x | x | x | x | | `merge`
|
|
1174
|
+
| `pull_request` | x | x | x | x | | `close`, `merge` |
|
|
1134
1175
|
| `pr_reviewer` | x | | x | | | `submit_review` |
|
|
1135
1176
|
| `pr_comment` | x | | x | | | |
|
|
1136
1177
|
| `pr_check` | x | | | | | |
|
|
1137
1178
|
| `pr_activity` | x | | | | | |
|
|
1138
1179
|
|
|
1180
|
+
Use `harness_execute(resource_type="pull_request", action="close", ...)` for an explicit close operation. `harness_update` also accepts `body.state` (`open` or `closed`) and routes state changes to the dedicated Harness Code PR state endpoint; send title/description edits in a separate update call.
|
|
1181
|
+
|
|
1139
1182
|
|
|
1140
1183
|
### Feature Flags
|
|
1141
1184
|
|
|
@@ -1258,7 +1301,9 @@ SEI resources are consolidated for token efficiency. Use `metric` or `aspect` pa
|
|
|
1258
1301
|
| ----------------------- | ---- | --- | ------ | ------ | ------ | ------------------------------ |
|
|
1259
1302
|
| `security_issue` | x | | | | | |
|
|
1260
1303
|
| `security_issue_filter` | x | | | | | |
|
|
1261
|
-
| `security_exemption` | x | |
|
|
1304
|
+
| `security_exemption` | x | | x | | | `approve`, `reject`, `promote` |
|
|
1305
|
+
|
|
1306
|
+
`security_exemption` create is a `high_write` operation. The server derives `requester_id` from the authenticated PAT, sets `exemptFutureOccurrences=true`, and defaults `duration_days` to 30 when not provided. For listing exemptions, pass a small explicit page size (for example `filters: { "status": "Pending", "size": 5 }`) and follow the `_nextPageHint` returned in each response.
|
|
1262
1307
|
|
|
1263
1308
|
|
|
1264
1309
|
### Access Control
|
|
@@ -1370,6 +1415,7 @@ Inline PNG chart visualizations rendered from Harness data. These are metadata-o
|
|
|
1370
1415
|
| `sbom-compliance-check` | Audit SBOM and compliance posture for artifacts — license risks, policy violations, component vulnerabilities | `artifactId` (optional), `projectId` (optional) |
|
|
1371
1416
|
| `supply-chain-audit` | End-to-end software supply chain security audit — provenance, chain of custody, policy compliance | `projectId` (optional) |
|
|
1372
1417
|
| `security-exemption-review` | Review pending security exemptions and make batch approval or rejection decisions | `projectId` (optional) |
|
|
1418
|
+
| `bulk-exemption-create` | Create justified security exemptions for multiple STO issues with explicit scope and duration guidance | `projectId` (required), `exemption_type` (required), `reason` (required), issue filters (optional) |
|
|
1373
1419
|
| `access-control-audit` | Audit user permissions, over-privileged accounts, and role assignments to enforce least-privilege | `projectId` (optional), `orgId` (optional) |
|
|
1374
1420
|
|
|
1375
1421
|
|
|
@@ -1694,18 +1740,16 @@ Elicitation behavior varies by operation risk when client support is missing:
|
|
|
1694
1740
|
|
|
1695
1741
|
If elicitation fails at runtime, operations at `medium_write` or above are blocked.
|
|
1696
1742
|
|
|
1697
|
-
###
|
|
1743
|
+
### Autonomous Mode
|
|
1698
1744
|
|
|
1699
|
-
|
|
1745
|
+
**Autonomous mode** means the server proceeds with all operations — including writes and destructive actions — without prompting for confirmation. Enable it by setting:
|
|
1700
1746
|
|
|
1701
1747
|
```bash
|
|
1702
|
-
# Auto-approve everything (equivalent to old HARNESS_SKIP_ELICITATION=true)
|
|
1703
1748
|
HARNESS_AUTO_APPROVE_RISK=all
|
|
1704
|
-
|
|
1705
|
-
# Auto-approve only low-risk writes, still prompt for medium+
|
|
1706
|
-
HARNESS_AUTO_APPROVE_RISK=low_write
|
|
1707
1749
|
```
|
|
1708
1750
|
|
|
1751
|
+
This is the deployment-level ceiling: once set, individual sessions cannot escalate beyond it (though they can choose a stricter threshold per-session via the `x-harness-auto-approve-risk` header).
|
|
1752
|
+
|
|
1709
1753
|
Or in your MCP client config:
|
|
1710
1754
|
|
|
1711
1755
|
```json
|
|
@@ -1723,9 +1767,27 @@ Or in your MCP client config:
|
|
|
1723
1767
|
}
|
|
1724
1768
|
```
|
|
1725
1769
|
|
|
1726
|
-
|
|
1770
|
+
**Partial autonomy:** You can also auto-approve only up to a specific risk level while still prompting for higher-risk operations:
|
|
1771
|
+
|
|
1772
|
+
```bash
|
|
1773
|
+
# Auto-approve reads and low-risk writes; prompt for medium_write, high_write, destructive
|
|
1774
|
+
HARNESS_AUTO_APPROVE_RISK=low_write
|
|
1727
1775
|
|
|
1728
|
-
|
|
1776
|
+
# Auto-approve up to high-risk writes; only prompt for destructive operations
|
|
1777
|
+
HARNESS_AUTO_APPROVE_RISK=high_write
|
|
1778
|
+
```
|
|
1779
|
+
|
|
1780
|
+
| Value | What's auto-approved |
|
|
1781
|
+
|---|---|
|
|
1782
|
+
| `none` (default) | Nothing — no auto-approval threshold |
|
|
1783
|
+
| `low_write` | Reads + low-risk writes |
|
|
1784
|
+
| `medium_write` | Reads + low + medium-risk writes |
|
|
1785
|
+
| `high_write` | Reads + low + medium + high-risk writes |
|
|
1786
|
+
| `all` | Everything, including destructive operations |
|
|
1787
|
+
|
|
1788
|
+
> **Autonomous mode warning:** `HARNESS_AUTO_APPROVE_RISK=all` skips confirmation for **all** operations including `harness_delete`. Use with caution and consider pairing with `HARNESS_TOOLSETS` to restrict which resource types are available.
|
|
1789
|
+
|
|
1790
|
+
> **Migration note:** `HARNESS_SKIP_ELICITATION=true` is still supported and maps to `HARNESS_AUTO_APPROVE_RISK=all`. A deprecation warning is logged to stderr. If both are set, `HARNESS_AUTO_APPROVE_RISK` takes precedence.
|
|
1729
1791
|
|
|
1730
1792
|
## Safety
|
|
1731
1793
|
|
|
@@ -1761,6 +1823,8 @@ The Harness MCP server pairs well with **[Harness Skills](https://github.com/har
|
|
|
1761
1823
|
| `Read-only mode is enabled ... operations are not allowed` | `HARNESS_READ_ONLY=true` blocks create/update/delete/execute | Set `HARNESS_READ_ONLY=false` if write operations are intended |
|
|
1762
1824
|
| Pipeline run fails pre-flight with unresolved required inputs | Provided `inputs` did not cover required runtime placeholders | Fetch `runtime_input_template`, supply missing simple keys, or use `input_set_ids` for structural inputs |
|
|
1763
1825
|
| Pipeline CI shorthand (`branch`, `tag`, `pr_number`, `commit_sha`) did not apply | `inputs.build` was already provided, so shorthand expansion was intentionally skipped | Remove `inputs.build` to use shorthand expansion, or keep full explicit `build` structure |
|
|
1826
|
+
| Pipeline run loaded the wrong YAML revision | The pipeline definition is stored in Git and the run did not specify the desired pipeline branch | Pass `params.pipeline_branch` on the `run` action; this maps to Harness `pipelineBranchName` |
|
|
1827
|
+
| Execution logs are empty or blob downloads return 403 | Harness-hosted log blob URLs require the configured Harness client/auth path, especially for internal or self-managed hosts | Keep `HARNESS_BASE_URL` pointed at the target Harness host and use `harness_get(resource_type="execution_log", ...)` or `harness_diagnose(..., include_logs=true)` rather than bypassing the MCP client |
|
|
1764
1828
|
| `Operation declined by user` | User declined the elicitation confirmation dialog | The user chose not to proceed — verify the operation details and retry if intended |
|
|
1765
1829
|
| `body.template_yaml (or body.yaml) is required` for template create/update | Template APIs expect full YAML payload | Provide full `template_yaml` string in `body`; for deletes, pass `version_label` to delete one version (omit to delete all versions) |
|
|
1766
1830
|
| `HARNESS_BASE_URL must use HTTPS` on startup | `HARNESS_BASE_URL` is set to an HTTP URL | Use HTTPS, or set `HARNESS_ALLOW_HTTP=true` for local development |
|
package/build/config.d.ts
CHANGED
|
@@ -6,7 +6,11 @@ import * as z from "zod/v4";
|
|
|
6
6
|
*/
|
|
7
7
|
export declare function extractAccountIdFromToken(apiKey: string): string | undefined;
|
|
8
8
|
export declare const ConfigSchema: z.ZodPipe<z.ZodObject<{
|
|
9
|
-
|
|
9
|
+
HARNESS_MCP_MODE: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodDefault<z.ZodEnum<{
|
|
10
|
+
"single-user": "single-user";
|
|
11
|
+
"multi-user": "multi-user";
|
|
12
|
+
}>>>;
|
|
13
|
+
HARNESS_API_KEY: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodOptional<z.ZodString>>;
|
|
10
14
|
HARNESS_ACCOUNT_ID: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodOptional<z.ZodString>>;
|
|
11
15
|
HARNESS_BASE_URL: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodDefault<z.ZodString>>;
|
|
12
16
|
HARNESS_ORG: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodOptional<z.ZodString>>;
|
|
@@ -16,10 +20,10 @@ export declare const ConfigSchema: z.ZodPipe<z.ZodObject<{
|
|
|
16
20
|
HARNESS_API_TIMEOUT_MS: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
|
|
17
21
|
HARNESS_MAX_RETRIES: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
|
|
18
22
|
LOG_LEVEL: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodDefault<z.ZodEnum<{
|
|
19
|
-
error: "error";
|
|
20
23
|
debug: "debug";
|
|
21
24
|
info: "info";
|
|
22
25
|
warn: "warn";
|
|
26
|
+
error: "error";
|
|
23
27
|
}>>>;
|
|
24
28
|
HARNESS_TOOLSETS: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodOptional<z.ZodString>>;
|
|
25
29
|
HARNESS_MAX_BODY_SIZE_MB: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
|
|
@@ -35,6 +39,8 @@ export declare const ConfigSchema: z.ZodPipe<z.ZodObject<{
|
|
|
35
39
|
}>>>;
|
|
36
40
|
HARNESS_ALLOW_HTTP: z.ZodDefault<z.ZodPipe<z.ZodUnion<readonly [z.ZodBoolean, z.ZodString, z.ZodUndefined]>, z.ZodTransform<boolean, string | boolean | undefined>>>;
|
|
37
41
|
HARNESS_MCP_ALLOWED_HOSTS: z.ZodPipe<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodOptional<z.ZodString>>, z.ZodTransform<string | undefined, string | undefined>>;
|
|
42
|
+
HARNESS_MCP_AUTH_TOKEN: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodOptional<z.ZodString>>;
|
|
43
|
+
HARNESS_MCP_ALLOW_UNAUTHENTICATED_HTTP: z.ZodDefault<z.ZodPipe<z.ZodUnion<readonly [z.ZodBoolean, z.ZodString, z.ZodUndefined]>, z.ZodTransform<boolean, string | boolean | undefined>>>;
|
|
38
44
|
HARNESS_FME_BASE_URL: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodDefault<z.ZodString>>;
|
|
39
45
|
HARNESS_LOG_UNSAFE_BODIES: z.ZodDefault<z.ZodPipe<z.ZodUnion<readonly [z.ZodBoolean, z.ZodString, z.ZodUndefined]>, z.ZodTransform<boolean, string | boolean | undefined>>>;
|
|
40
46
|
HARNESS_PIPELINE_VERSION: z.ZodOptional<z.ZodEnum<{
|
|
@@ -47,46 +53,51 @@ export declare const ConfigSchema: z.ZodPipe<z.ZodObject<{
|
|
|
47
53
|
HARNESS_AUDIT_WEBHOOK_BATCH_SIZE: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodDefault<z.ZodCoercedNumber<unknown>>>;
|
|
48
54
|
HARNESS_AUDIT_WEBHOOK_FLUSH_MS: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodDefault<z.ZodCoercedNumber<unknown>>>;
|
|
49
55
|
}, z.core.$strip>, z.ZodTransform<{
|
|
56
|
+
HARNESS_API_KEY: string;
|
|
50
57
|
HARNESS_ACCOUNT_ID: string;
|
|
51
58
|
HARNESS_ORG: string | undefined;
|
|
52
59
|
HARNESS_PROJECT: string | undefined;
|
|
53
60
|
HARNESS_AUTO_APPROVE_RISK: "none" | "low_write" | "medium_write" | "high_write" | "all";
|
|
54
|
-
|
|
61
|
+
HARNESS_MCP_MODE: "single-user" | "multi-user";
|
|
55
62
|
HARNESS_BASE_URL: string;
|
|
56
63
|
HARNESS_API_TIMEOUT_MS: number;
|
|
57
64
|
HARNESS_MAX_RETRIES: number;
|
|
58
|
-
LOG_LEVEL: "
|
|
65
|
+
LOG_LEVEL: "debug" | "info" | "warn" | "error";
|
|
59
66
|
HARNESS_MAX_BODY_SIZE_MB: number;
|
|
60
67
|
HARNESS_RATE_LIMIT_RPS: number;
|
|
61
68
|
HARNESS_READ_ONLY: boolean;
|
|
62
69
|
HARNESS_SKIP_ELICITATION: boolean;
|
|
63
70
|
HARNESS_ALLOW_HTTP: boolean;
|
|
64
71
|
HARNESS_MCP_ALLOWED_HOSTS: string | undefined;
|
|
72
|
+
HARNESS_MCP_ALLOW_UNAUTHENTICATED_HTTP: boolean;
|
|
65
73
|
HARNESS_FME_BASE_URL: string;
|
|
66
74
|
HARNESS_LOG_UNSAFE_BODIES: boolean;
|
|
67
75
|
HARNESS_AUDIT_WEBHOOK_BATCH_SIZE: number;
|
|
68
76
|
HARNESS_AUDIT_WEBHOOK_FLUSH_MS: number;
|
|
69
77
|
HARNESS_TOOLSETS?: string | undefined;
|
|
78
|
+
HARNESS_MCP_AUTH_TOKEN?: string | undefined;
|
|
70
79
|
HARNESS_PIPELINE_VERSION?: "1" | "0" | undefined;
|
|
71
80
|
HARNESS_AUDIT_FILE?: string | undefined;
|
|
72
81
|
HARNESS_AUDIT_WEBHOOK_URL?: string | undefined;
|
|
73
82
|
HARNESS_AUDIT_WEBHOOK_TOKEN?: string | undefined;
|
|
74
83
|
}, {
|
|
75
|
-
|
|
84
|
+
HARNESS_MCP_MODE: "single-user" | "multi-user";
|
|
76
85
|
HARNESS_BASE_URL: string;
|
|
77
86
|
HARNESS_API_TIMEOUT_MS: number;
|
|
78
87
|
HARNESS_MAX_RETRIES: number;
|
|
79
|
-
LOG_LEVEL: "
|
|
88
|
+
LOG_LEVEL: "debug" | "info" | "warn" | "error";
|
|
80
89
|
HARNESS_MAX_BODY_SIZE_MB: number;
|
|
81
90
|
HARNESS_RATE_LIMIT_RPS: number;
|
|
82
91
|
HARNESS_READ_ONLY: boolean;
|
|
83
92
|
HARNESS_SKIP_ELICITATION: boolean;
|
|
84
93
|
HARNESS_ALLOW_HTTP: boolean;
|
|
85
94
|
HARNESS_MCP_ALLOWED_HOSTS: string | undefined;
|
|
95
|
+
HARNESS_MCP_ALLOW_UNAUTHENTICATED_HTTP: boolean;
|
|
86
96
|
HARNESS_FME_BASE_URL: string;
|
|
87
97
|
HARNESS_LOG_UNSAFE_BODIES: boolean;
|
|
88
98
|
HARNESS_AUDIT_WEBHOOK_BATCH_SIZE: number;
|
|
89
99
|
HARNESS_AUDIT_WEBHOOK_FLUSH_MS: number;
|
|
100
|
+
HARNESS_API_KEY?: string | undefined;
|
|
90
101
|
HARNESS_ACCOUNT_ID?: string | undefined;
|
|
91
102
|
HARNESS_ORG?: string | undefined;
|
|
92
103
|
HARNESS_PROJECT?: string | undefined;
|
|
@@ -94,6 +105,7 @@ export declare const ConfigSchema: z.ZodPipe<z.ZodObject<{
|
|
|
94
105
|
HARNESS_DEFAULT_PROJECT_ID?: string | undefined;
|
|
95
106
|
HARNESS_TOOLSETS?: string | undefined;
|
|
96
107
|
HARNESS_AUTO_APPROVE_RISK?: "none" | "low_write" | "medium_write" | "high_write" | "all" | undefined;
|
|
108
|
+
HARNESS_MCP_AUTH_TOKEN?: string | undefined;
|
|
97
109
|
HARNESS_PIPELINE_VERSION?: "1" | "0" | undefined;
|
|
98
110
|
HARNESS_AUDIT_FILE?: string | undefined;
|
|
99
111
|
HARNESS_AUDIT_WEBHOOK_URL?: string | undefined;
|
package/build/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;AAuC5B;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAO5E;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;AAuC5B;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAO5E;AA6CD,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyEvB,CAAC;AAEH,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAElD;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,GAAG,KAAK,GAAG,MAAM,GAAG,SAAS,CAGpG;AAED,wBAAgB,UAAU,IAAI,MAAM,CAQnC"}
|
package/build/config.js
CHANGED
|
@@ -45,7 +45,8 @@ export function extractAccountIdFromToken(apiKey) {
|
|
|
45
45
|
return undefined;
|
|
46
46
|
}
|
|
47
47
|
const RawConfigSchema = z.object({
|
|
48
|
-
|
|
48
|
+
HARNESS_MCP_MODE: z.preprocess(emptyStringAsUndefined, z.enum(["single-user", "multi-user"]).default("single-user")),
|
|
49
|
+
HARNESS_API_KEY: optionalStringFromEnv,
|
|
49
50
|
HARNESS_ACCOUNT_ID: optionalStringFromEnv,
|
|
50
51
|
HARNESS_BASE_URL: urlFromEnv("https://app.harness.io"),
|
|
51
52
|
// New names (preferred)
|
|
@@ -65,6 +66,8 @@ const RawConfigSchema = z.object({
|
|
|
65
66
|
HARNESS_AUTO_APPROVE_RISK: z.preprocess(emptyStringAsUndefined, z.enum(["none", "low_write", "medium_write", "high_write", "all"]).optional()),
|
|
66
67
|
HARNESS_ALLOW_HTTP: booleanFromEnv.default(false),
|
|
67
68
|
HARNESS_MCP_ALLOWED_HOSTS: optionalStringFromEnv.transform(validateAllowedHosts),
|
|
69
|
+
HARNESS_MCP_AUTH_TOKEN: optionalStringFromEnv,
|
|
70
|
+
HARNESS_MCP_ALLOW_UNAUTHENTICATED_HTTP: booleanFromEnv.default(false),
|
|
68
71
|
HARNESS_FME_BASE_URL: urlFromEnv("https://api.split.io"),
|
|
69
72
|
HARNESS_LOG_UNSAFE_BODIES: booleanFromEnv.default(false),
|
|
70
73
|
HARNESS_PIPELINE_VERSION: z.enum(["0", "1"]).optional(),
|
|
@@ -75,9 +78,23 @@ const RawConfigSchema = z.object({
|
|
|
75
78
|
HARNESS_AUDIT_WEBHOOK_FLUSH_MS: z.preprocess(emptyStringAsUndefined, z.coerce.number().min(1).default(5000)),
|
|
76
79
|
});
|
|
77
80
|
export const ConfigSchema = RawConfigSchema.transform((data) => {
|
|
78
|
-
const
|
|
79
|
-
if (
|
|
80
|
-
throw new Error("
|
|
81
|
+
const isMultiUser = data.HARNESS_MCP_MODE === "multi-user";
|
|
82
|
+
if (isMultiUser && data.HARNESS_API_KEY) {
|
|
83
|
+
throw new Error("HARNESS_API_KEY must not be set in multi-user mode. " +
|
|
84
|
+
"Each session must provide its own API key via the x-harness-api-key header.");
|
|
85
|
+
}
|
|
86
|
+
if (!isMultiUser && !data.HARNESS_API_KEY) {
|
|
87
|
+
throw new Error("HARNESS_API_KEY is required in single-user mode.");
|
|
88
|
+
}
|
|
89
|
+
let accountId;
|
|
90
|
+
if (isMultiUser) {
|
|
91
|
+
accountId = data.HARNESS_ACCOUNT_ID ?? "";
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
accountId = data.HARNESS_ACCOUNT_ID ?? extractAccountIdFromToken(data.HARNESS_API_KEY);
|
|
95
|
+
if (!accountId) {
|
|
96
|
+
throw new Error("HARNESS_ACCOUNT_ID is required when the API key is not a PAT (pat.<accountId>.<tokenId>.<secret>)");
|
|
97
|
+
}
|
|
81
98
|
}
|
|
82
99
|
if (!data.HARNESS_BASE_URL.startsWith("https://") && !data.HARNESS_ALLOW_HTTP) {
|
|
83
100
|
throw new Error(`HARNESS_BASE_URL must use HTTPS (got "${data.HARNESS_BASE_URL}"). ` +
|
|
@@ -109,7 +126,7 @@ export const ConfigSchema = RawConfigSchema.transform((data) => {
|
|
|
109
126
|
}
|
|
110
127
|
// Remove deprecated keys from output, expose only the canonical names
|
|
111
128
|
const { HARNESS_DEFAULT_ORG_ID: _oldOrg, HARNESS_DEFAULT_PROJECT_ID: _oldProject, ...rest } = data;
|
|
112
|
-
return { ...rest, HARNESS_ACCOUNT_ID: accountId, HARNESS_ORG, HARNESS_PROJECT, HARNESS_AUTO_APPROVE_RISK };
|
|
129
|
+
return { ...rest, HARNESS_API_KEY: data.HARNESS_API_KEY ?? "", HARNESS_ACCOUNT_ID: accountId, HARNESS_ORG, HARNESS_PROJECT, HARNESS_AUTO_APPROVE_RISK };
|
|
113
130
|
});
|
|
114
131
|
/**
|
|
115
132
|
* Resolve the base URL for a given product backend.
|
package/build/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AAEjE;;;;GAIG;AACH,MAAM,cAAc,GAAG,CAAC;KACrB,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;KAC/C,SAAS,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,GAAG,KAAK,QAAQ,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;AAEnG,MAAM,sBAAsB,GAAG,CAAC,GAAY,EAAW,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC;AACvF,MAAM,qBAAqB,GAAG,CAAC,CAAC,UAAU,CAAC,sBAAsB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC;AAC1F,MAAM,UAAU,GAAG,CAAC,YAAoB,EAAE,EAAE,CAC1C,CAAC,CAAC,UAAU,CAAC,sBAAsB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC;AAE/E,SAAS,oBAAoB,CAAC,QAA4B;IACxD,IAAI,QAAQ,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAE7C,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,YAAY,GAAa,EAAE,CAAC;IAClC,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QACxC,MAAM,QAAQ,GAAG,wBAAwB,CAAC,KAAK,CAAC,CAAC;QACjD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;QAClC,CAAC;aAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YACrC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IAED,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,MAAM,WAAW,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvE,MAAM,IAAI,KAAK,CAAC,8CAA8C,WAAW,EAAE,CAAC,CAAC;IAC/E,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,yBAAyB,CAAC,MAAc;IACtD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAChC,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAC3B,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,IAAI,SAAS,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACjF,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/B,
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -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,CAokiH/B,CAAC;AACF,eAAe,MAAM,CAAC"}
|