harness-mcp-v2 3.2.19 → 3.2.21
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 +146 -75
- package/build/client/harness-client.d.ts.map +1 -1
- package/build/client/harness-client.js +32 -6
- package/build/client/harness-client.js.map +1 -1
- package/build/config.d.ts +10 -0
- package/build/config.d.ts.map +1 -1
- package/build/config.js +15 -0
- 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 +1388 -580
- 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 +1142 -166
- package/build/data/schemas/v0/template.js.map +1 -1
- package/build/data/schemas/v1/pipeline.d.ts.map +1 -1
- package/build/data/schemas/v1/pipeline.js +302 -90
- 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 +708 -488
- package/build/data/schemas/v1/template.js.map +1 -1
- package/build/prompts/deploy-ai-agent.d.ts +3 -0
- package/build/prompts/deploy-ai-agent.d.ts.map +1 -0
- package/build/prompts/deploy-ai-agent.js +300 -0
- package/build/prompts/deploy-ai-agent.js.map +1 -0
- package/build/prompts/feature-flag-rollout.d.ts.map +1 -1
- package/build/prompts/feature-flag-rollout.js +19 -8
- package/build/prompts/feature-flag-rollout.js.map +1 -1
- 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/extractors.d.ts +87 -10
- package/build/registry/extractors.d.ts.map +1 -1
- package/build/registry/extractors.js +426 -26
- package/build/registry/extractors.js.map +1 -1
- package/build/registry/index.d.ts.map +1 -1
- package/build/registry/index.js +34 -15
- package/build/registry/index.js.map +1 -1
- package/build/registry/scope-utils.d.ts +45 -0
- package/build/registry/scope-utils.d.ts.map +1 -1
- package/build/registry/scope-utils.js +78 -0
- package/build/registry/scope-utils.js.map +1 -1
- package/build/registry/toolsets/chaos-descriptions.d.ts +72 -20
- package/build/registry/toolsets/chaos-descriptions.d.ts.map +1 -1
- package/build/registry/toolsets/chaos-descriptions.js +435 -140
- package/build/registry/toolsets/chaos-descriptions.js.map +1 -1
- package/build/registry/toolsets/chaos.d.ts.map +1 -1
- package/build/registry/toolsets/chaos.js +967 -193
- package/build/registry/toolsets/chaos.js.map +1 -1
- package/build/registry/toolsets/feature-flags.d.ts.map +1 -1
- package/build/registry/toolsets/feature-flags.js +888 -85
- package/build/registry/toolsets/feature-flags.js.map +1 -1
- package/build/registry/toolsets/governance.d.ts.map +1 -1
- package/build/registry/toolsets/governance.js +4 -0
- package/build/registry/toolsets/governance.js.map +1 -1
- package/build/registry/toolsets/iacm.d.ts.map +1 -1
- package/build/registry/toolsets/iacm.js +787 -11
- package/build/registry/toolsets/iacm.js.map +1 -1
- package/build/registry/toolsets/infrastructure.d.ts.map +1 -1
- package/build/registry/toolsets/infrastructure.js +30 -5
- package/build/registry/toolsets/infrastructure.js.map +1 -1
- package/build/registry/toolsets/pipelines.d.ts.map +1 -1
- package/build/registry/toolsets/pipelines.js +208 -5
- package/build/registry/toolsets/pipelines.js.map +1 -1
- package/build/registry/toolsets/release-management.d.ts +8 -0
- package/build/registry/toolsets/release-management.d.ts.map +1 -0
- package/build/registry/toolsets/release-management.js +783 -0
- package/build/registry/toolsets/release-management.js.map +1 -0
- package/build/registry/toolsets/sto.d.ts.map +1 -1
- package/build/registry/toolsets/sto.js +93 -17
- package/build/registry/toolsets/sto.js.map +1 -1
- package/build/registry/types.d.ts +52 -4
- package/build/registry/types.d.ts.map +1 -1
- package/build/resources/harness-schema.d.ts.map +1 -1
- package/build/resources/harness-schema.js +2 -1
- package/build/resources/harness-schema.js.map +1 -1
- package/build/tools/entity-schema/live.d.ts +6 -5
- package/build/tools/entity-schema/live.d.ts.map +1 -1
- package/build/tools/entity-schema/live.js +114 -10
- package/build/tools/entity-schema/live.js.map +1 -1
- package/build/tools/entity-schema/types.d.ts +7 -1
- package/build/tools/entity-schema/types.d.ts.map +1 -1
- package/build/tools/harness-create.d.ts.map +1 -1
- package/build/tools/harness-create.js +5 -1
- package/build/tools/harness-create.js.map +1 -1
- package/build/tools/harness-delete.d.ts.map +1 -1
- package/build/tools/harness-delete.js +5 -1
- package/build/tools/harness-delete.js.map +1 -1
- package/build/tools/harness-execute.d.ts.map +1 -1
- package/build/tools/harness-execute.js +15 -9
- package/build/tools/harness-execute.js.map +1 -1
- package/build/tools/harness-get.d.ts.map +1 -1
- package/build/tools/harness-get.js +5 -1
- package/build/tools/harness-get.js.map +1 -1
- package/build/tools/harness-list.d.ts.map +1 -1
- package/build/tools/harness-list.js +18 -2
- package/build/tools/harness-list.js.map +1 -1
- package/build/tools/harness-schema.d.ts +2 -1
- package/build/tools/harness-schema.d.ts.map +1 -1
- package/build/tools/harness-schema.js +10 -8
- package/build/tools/harness-schema.js.map +1 -1
- package/build/tools/harness-update.d.ts.map +1 -1
- package/build/tools/harness-update.js +5 -1
- package/build/tools/harness-update.js.map +1 -1
- package/build/tools/index.js +1 -1
- package/build/tools/index.js.map +1 -1
- package/build/utils/url-parser.d.ts +2 -0
- package/build/utils/url-parser.d.ts.map +1 -1
- package/build/utils/url-parser.js +55 -0
- package/build/utils/url-parser.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 240 resource types.
|
|
6
6
|
|
|
7
7
|
## Why Use This MCP Server
|
|
8
8
|
|
|
@@ -10,10 +10,10 @@ 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,
|
|
14
|
-
- **Full platform coverage.**
|
|
13
|
+
- **11 tools, 240 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
|
+
- **Full platform coverage.** 39 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 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
|
+
- **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.
|
|
17
17
|
- **Works everywhere.** Stdio transport for local clients (Claude Desktop, Cursor, Devin Desktop), HTTP transport for remote/shared deployments, Docker and Kubernetes ready.
|
|
18
18
|
- **Zero-config start.** Just provide a Harness API key. Account ID is auto-extracted from PAT and SAT tokens, org/project defaults are optional, and toolset filtering lets you expose only what you need.
|
|
19
19
|
- **Extensible by design.** Adding a new Harness resource means adding a declarative data file — no new tool registration, no schema changes, no prompt updates.
|
|
@@ -86,7 +86,7 @@ pnpm inspect # Test with MCP Inspector
|
|
|
86
86
|
|
|
87
87
|
### Anthropic MCP Directory bundle
|
|
88
88
|
|
|
89
|
-
The MCPB bundle manifest lives in `[mcp-directory/](mcp-directory/)`, and the bundle icon is tracked at `[icon.png](icon.png)` in the repository root.
|
|
89
|
+
The MCPB bundle manifest lives in `[mcp-directory/](mcp-directory/)`, and the 512×512 bundle icon is tracked at `[icon.png](icon.png)` in the repository root. The packaged archive contains root-level `manifest.json`, `icon.png`, `server/`, `package.json`, `npm-shrinkwrap.json`, and production `node_modules/`.
|
|
90
90
|
|
|
91
91
|
To keep the archive small, build MCPB packages from a staging directory:
|
|
92
92
|
|
|
@@ -94,7 +94,9 @@ To keep the archive small, build MCPB packages from a staging directory:
|
|
|
94
94
|
pnpm prepare:mcpb
|
|
95
95
|
```
|
|
96
96
|
|
|
97
|
-
The
|
|
97
|
+
The staging directory is written to `dist/mcpb/` with production dependencies installed from `npm-shrinkwrap.json` using npm's flat layout. The pinned official MCPB CLI validates it and creates `dist/harness-mcp-server-<version>.mcpb`.
|
|
98
|
+
|
|
99
|
+
Version tags matching `v*.*.*` publish that bundle to the corresponding GitHub Release automatically. To backfill an existing release without republishing npm, run the `Release` workflow manually with its `release_tag` input (for example, `v3.2.20`). The workflow checks out and builds that exact tag before replacing only its versioned MCPB asset.
|
|
98
100
|
|
|
99
101
|
### CLI Usage
|
|
100
102
|
|
|
@@ -537,8 +539,8 @@ The server automatically loads environment variables from a `.env` file in the p
|
|
|
537
539
|
| `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 |
|
|
538
540
|
| `HARNESS_ACCOUNT_ID` | No | *(from PAT/SAT)* | Harness account identifier. Auto-extracted from PAT/SAT tokens in single-user mode; multi-user sessions can provide their own via `x-harness-account-id` when the API key does not embed one |
|
|
539
541
|
| `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 |
|
|
540
|
-
| `HARNESS_FME_API_KEY` | No | -- | Optional single-user/self-hosted FME/Split Admin credential used for `fme_` resources
|
|
541
|
-
| `HARNESS_FME_BASE_URL` | No | `https://api.split.io` | Split/FME Admin API base URL used by `fme_` resources
|
|
542
|
+
| `HARNESS_FME_API_KEY` | No | -- | Optional single-user/self-hosted FME/Split Admin credential used for `fme_` resources in **legacy (`workspace_id`) mode only**. This can be a legacy Split admin key or an FME-entitled Harness PAT/SAT. FME calls go directly to `api.split.io`, so hosted OAuth/service-routing credentials for Harness platform APIs do not authenticate these requests. Must not be set in `multi-user` mode; FME must use each session's `x-harness-api-key` credential. If unset, FME falls back to a non-placeholder `HARNESS_API_KEY` for self-hosted sessions. Harness-native (`org_id`+`project_id`) mode ignores this and uses the standard `HARNESS_API_KEY`/`HARNESS_BASE_URL` instead |
|
|
543
|
+
| `HARNESS_FME_BASE_URL` | No | `https://api.split.io` | Split/FME Admin API base URL used by `fme_` resources in **legacy (`workspace_id`) mode only**. HTTP URLs require `HARNESS_ALLOW_HTTP=true` for local development. Harness-native (`org_id`+`project_id`) mode ignores this and uses the standard `HARNESS_API_KEY`/`HARNESS_BASE_URL` instead |
|
|
542
544
|
| `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")` |
|
|
543
545
|
| `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")` |
|
|
544
546
|
| `HARNESS_API_TIMEOUT_MS` | No | `30000` | HTTP request timeout in milliseconds |
|
|
@@ -656,24 +658,24 @@ The server exposes 11 MCP tools. Most API tools accept `org_id` and `project_id`
|
|
|
656
658
|
- `resource_scope: "org"` sends `accountIdentifier` and `orgIdentifier`.
|
|
657
659
|
- `resource_scope: "project"` sends account, org, and project identifiers.
|
|
658
660
|
|
|
659
|
-
Current multi-scope resources include `connector`, `service`, `environment`, `infrastructure`, `secret`, `file_store`, and `
|
|
661
|
+
Current multi-scope resources include `connector`, `service`, `environment`, `infrastructure`, `secret`, `file_store`, `template`, `policy`, and `policy_set`. If `resource_scope` is omitted, the registry uses the resource's default scope and configured defaults, except resources marked as optional scope may omit org/project unless explicitly passed. Harness URLs can also set the scope automatically when the path contains account-level or project-level context.
|
|
660
662
|
|
|
661
663
|
**Structured output:** Every tool declares an MCP `outputSchema`. `harness_list` normalizes list-like Harness responses into object-shaped structured content so strict clients can validate it: top-level arrays become `{ "items": [...], "total": <count>, "page": <page> }`, and common wrapper keys such as `content`, `data`, `body`, `objects`, or `features` are hoisted to `items` when needed. The text response still contains the compact JSON payload returned to all clients.
|
|
662
664
|
|
|
663
665
|
|
|
664
|
-
| Tool | Description
|
|
665
|
-
|
|
|
666
|
-
| `harness_describe` | Discover available resource types, operations, and fields. No API call — returns local registry metadata.
|
|
667
|
-
| `harness_schema` | Fetch exact YAML/JSON Schema definitions and examples for creating/updating resources. Pipeline/template schemas are bundled; connector, environment, service, secret, and infrastructure schemas are scope-aware entity schemas fetched from bundled snapshots or NG `/yaml-schema`. Supports deep drilling via `path`.
|
|
668
|
-
| `harness_list` | List resources of a given type with filtering, search, and pagination.
|
|
669
|
-
| `harness_get` | Get a single resource by its identifier.
|
|
670
|
-
| `harness_create` | Create a new resource. Supports inline and remote (Git-backed) pipelines. Prompts for user confirmation via [elicitation](#elicitation).
|
|
671
|
-
| `harness_update` | Update an existing resource. Supports inline and remote (Git-backed) pipelines. Prompts for user confirmation via [elicitation](#elicitation).
|
|
672
|
-
| `harness_delete` | Delete a resource. Prompts for user confirmation via [elicitation](#elicitation). Destructive.
|
|
673
|
-
| `harness_execute` | Execute an action on a resource (run/retry pipeline, import pipeline from Git, toggle flag, sync app). Prompts for user confirmation via [elicitation](#elicitation). For pipeline runs, use the runtime-input workflow below (supports `branch`/`tag`/`pr_number`/`commit_sha` shorthand expansion).
|
|
666
|
+
| Tool | Description |
|
|
667
|
+
| --------------------| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
|
668
|
+
| `harness_describe` | Discover available resource types, operations, and fields. No API call — returns local registry metadata. |
|
|
669
|
+
| `harness_schema` | Fetch exact YAML/JSON Schema definitions and examples for creating/updating resources. Pipeline/template schemas are bundled; connector, environment, service, secret, and infrastructure schemas are scope-aware entity schemas fetched from bundled snapshots or NG `/yaml-schema`; `release_process` and `release_activity` schemas are fetched live from RMG `/api/yamlSchema`. Supports deep drilling via `path`. |
|
|
670
|
+
| `harness_list` | List resources of a given type with filtering, search, and pagination. |
|
|
671
|
+
| `harness_get` | Get a single resource by its identifier. |
|
|
672
|
+
| `harness_create` | Create a new resource. Supports inline and remote (Git-backed) pipelines. Prompts for user confirmation via [elicitation](#elicitation). |
|
|
673
|
+
| `harness_update` | Update an existing resource. Supports inline and remote (Git-backed) pipelines. Prompts for user confirmation via [elicitation](#elicitation). |
|
|
674
|
+
| `harness_delete` | Delete a resource. Prompts for user confirmation via [elicitation](#elicitation). Destructive. |
|
|
675
|
+
| `harness_execute` | Execute an action on a resource (run/retry pipeline, import pipeline from Git, toggle flag, sync app). Prompts for user confirmation via [elicitation](#elicitation). For pipeline runs, use the runtime-input workflow below (supports `branch`/`tag`/`pr_number`/`commit_sha` shorthand expansion). |
|
|
674
676
|
| `harness_search` | Search across Harness resource types with a single query. Uses semantic routing (local `all-MiniLM-L6-v2` ONNX embeddings, 384-dim) to predict relevant resource types from a `knowledge` corpus indexed at startup — typically narrowing from ~163 types to 1–8 before scatter-gather. Falls back to full keyword scatter-gather when semantic confidence is low. Response includes `semantic_routed` and `types_skipped` when routing fires. See `docs/search-guidelines.md` for how to make new resource types discoverable. |
|
|
675
|
-
| `harness_diagnose` | Diagnose `pipeline`, `connector`, `delegate`, and `gitops_application` resources (aliases: `execution` -> `pipeline`, `gitops_app` -> `gitops_application`). For pipelines, returns stage/step timing and failure details; for connectors/delegates/GitOps apps, returns targeted health and troubleshooting signals.
|
|
676
|
-
| `harness_status` | Get a real-time project health dashboard — recent executions, failure rates, and deep links.
|
|
677
|
+
| `harness_diagnose` | Diagnose `pipeline`, `connector`, `delegate`, and `gitops_application` resources (aliases: `execution` -> `pipeline`, `gitops_app` -> `gitops_application`). For pipelines, returns stage/step timing and failure details; for connectors/delegates/GitOps apps, returns targeted health and troubleshooting signals. |
|
|
678
|
+
| `harness_status` | Get a real-time project health dashboard — recent executions, failure rates, and deep links. |
|
|
677
679
|
|
|
678
680
|
|
|
679
681
|
### Schema Lookup Workflow
|
|
@@ -682,6 +684,7 @@ Use `harness_schema` before creating or updating YAML-backed resources so agents
|
|
|
682
684
|
|
|
683
685
|
- Bundled schemas include `pipeline`, `template`, `trigger`, `pipeline_v1`, `template_v1`, `inputSet_v1`, `overlayInputSet_v1`, and `agent-pipeline`.
|
|
684
686
|
- Entity schemas include `connector`, `environment`, `service`, `secret`, and `infrastructure`. They are scope-aware (`account`, `org`, or `project`) and require `org_id`/`project_id` when the selected scope requires them.
|
|
687
|
+
- Release Management definitions (`release_process`, `release_activity`) fetch live JSON Schema from RMG `/api/yamlSchema` (not bundled). Pass `scope`, `org_id`, and `project_id` when scoping to org or project.
|
|
685
688
|
- Vendored entity snapshots are used first when they match the runtime account; otherwise the tool falls back to the Harness NG `/yaml-schema` API and caches the result.
|
|
686
689
|
- Omit `path` for a field/section summary, then pass a dot-separated `path` to inspect a nested definition.
|
|
687
690
|
|
|
@@ -1202,7 +1205,7 @@ Harness pipelines can be stored in three ways:
|
|
|
1202
1205
|
|
|
1203
1206
|
## Resource Types
|
|
1204
1207
|
|
|
1205
|
-
|
|
1208
|
+
240 resource types organized across 39 toolsets. Each resource type supports a subset of CRUD operations and optional execute actions.
|
|
1206
1209
|
|
|
1207
1210
|
### Platform
|
|
1208
1211
|
|
|
@@ -1422,24 +1425,39 @@ Template operations use the Harness Template service paths (`/template/api/templ
|
|
|
1422
1425
|
|
|
1423
1426
|
### Infrastructure as Code Management (IaCM)
|
|
1424
1427
|
|
|
1425
|
-
IaCM resources are default-enabled and mostly project-scoped. Start with `iacm_workspace` to find workspace identifiers, then use that `workspace_id` for workspace resources, costs, and activity diffs. The
|
|
1428
|
+
IaCM resources are default-enabled and mostly project-scoped. Start with `iacm_workspace` to find workspace identifiers, then use that `workspace_id` for workspace resources, costs, and activity diffs. Use `iacm_variable_set` for reusable variable sets at account, org, or project scope. The provider registry is account-scoped.
|
|
1429
|
+
|
|
1430
|
+
`iacm_module` spans account, org, and project scope. It defaults to the account registry; every operation (list, get, create, update) sends the same `scope_org` / `scope_project` query params, so a module you create is discoverable at the scope you created it. Select the scope with `resource_scope="account" | "org" | "project"` plus `org_id`/`project_id`. Scoping is opt-in: when `resource_scope` is omitted, `org_id`/`project_id` apply only if you pass them explicitly — configured `HARNESS_ORG`/`HARNESS_PROJECT` defaults are not applied, so an ambient project config cannot silently register an account module under a project. A module body's own `org`/`project` fields locate its Git connector and are unrelated to this visibility scope.
|
|
1431
|
+
|
|
1432
|
+
`iacm_workspace` create/update return `{ policy_evaluation }` only — follow up with `harness_get` to fetch the workspace. `iacm_variable_set` and `iacm_module` create/update return the resource itself. `iacm_provider` create returns `{ id }` only — follow up with `harness_get`; **update is version-oriented only** (POST/PUT `/providers/{id}/version`) — there is no metadata PUT. Version writes may return an empty body; HarnessClient normalizes that to `{ status: "SUCCESS", message: "No content" }`.
|
|
1433
|
+
|
|
1434
|
+
Variable-set **update is HTTP PUT with full-replacement collections** — always `harness_get` first, then PUT the full desired body (`terraform_variables` / `environment_variables` are required on update; omit/empty clears connectors and variable files). Module update is also PUT — prefer get-then-put for optional fields. Writes are `medium_write` and require confirmation (elicitation or `confirm: true`).
|
|
1435
|
+
|
|
1436
|
+
Variable-set and provider-registry RBAC (`iac_variableset_*`, `iac_providerregistry_*`) are currently Experimental in Harness — access checks always allow until iac-server activates enforcement. Module registry RBAC (`iac_registry_view` / `iac_registry_edit`) is Active and enforceable. MCP always forwards the caller PAT/SAT unchanged.
|
|
1426
1437
|
|
|
1427
1438
|
| Resource Type | List | Get | Create | Update | Delete | Execute Actions |
|
|
1428
1439
|
| ------------------------------- | ---- | --- | ------ | ------ | ------ | --------------- |
|
|
1429
|
-
| `iacm_workspace` | x | x |
|
|
1440
|
+
| `iacm_workspace` | x | x | x | x | | |
|
|
1441
|
+
| `iacm_variable_set` | x | x | x | x | | |
|
|
1430
1442
|
| `iacm_resource` | x | | | | | |
|
|
1431
|
-
| `iacm_module` | x | x |
|
|
1443
|
+
| `iacm_module` | x | x | x | x | | |
|
|
1444
|
+
| `iacm_provider` | x | x | x | x | | |
|
|
1432
1445
|
| `iacm_workspace_costs` | x | | | | | |
|
|
1433
1446
|
| `iacm_activity_resource_change` | x | | | | | |
|
|
1434
1447
|
|
|
1435
1448
|
Typical workflow:
|
|
1436
1449
|
|
|
1437
1450
|
1. `harness_list(resource_type="iacm_workspace", org_id="...", project_id="...")` to find the workspace.
|
|
1438
|
-
2. `
|
|
1439
|
-
3. `
|
|
1440
|
-
4. `harness_list
|
|
1451
|
+
2. `harness_create` / `harness_update` on `iacm_workspace` to create from scratch or a template (`associated_template`), or update an existing workspace — response is `{ policy_evaluation }` only.
|
|
1452
|
+
3. `harness_get(resource_type="iacm_workspace", workspace_id="...")` to fetch the created/updated workspace.
|
|
1453
|
+
4. `harness_list` / `harness_create` / `harness_update` on `iacm_variable_set` (optionally with `resource_scope`) for reusable Terraform/env variable sets — response is the VariableSet resource.
|
|
1454
|
+
5. `harness_list` / `harness_create` / `harness_update` on `iacm_module` for the module registry (`name` + `system` required; add `resource_scope` with `org_id`/`project_id` for an org- or project-scoped module) — response is the module resource.
|
|
1455
|
+
6. `harness_list` / `harness_create` / `harness_update` on `iacm_provider` for the account provider registry (`body.type` required for create; create returns `{ id }` only — then `harness_get`; update creates/updates **versions** only) — version update may return empty success.
|
|
1456
|
+
7. `harness_list(resource_type="iacm_resource", org_id="...", project_id="...", workspace_id="...")` to inspect Terraform resources, outputs, and data sources.
|
|
1457
|
+
8. `harness_list(resource_type="iacm_workspace_costs", org_id="...", project_id="...", workspace_id="...")` to review per-execution cost entries.
|
|
1458
|
+
9. `harness_list(resource_type="iacm_activity_resource_change", org_id="...", project_id="...", activity_id="...", workspace_id="...")` to inspect before/after resource diffs for a plan, apply, or destroy activity.
|
|
1441
1459
|
|
|
1442
|
-
IaCM list responses expose `page_count` as the count for the current page only. When `has_more` is true, keep requesting the next 1-based page and sum page counts if you need a total.
|
|
1460
|
+
IaCM list responses expose `page_count` as the count for the current page only (except `iacm_variable_set`, which is not paginated). When `has_more` is true, keep requesting the next 1-based page and sum page counts if you need a total.
|
|
1443
1461
|
|
|
1444
1462
|
### Internal Developer Portal (IDP)
|
|
1445
1463
|
|
|
@@ -1470,15 +1488,45 @@ IaCM list responses expose `page_count` as the count for the current page only.
|
|
|
1470
1488
|
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.
|
|
1471
1489
|
|
|
1472
1490
|
|
|
1491
|
+
### Release Management
|
|
1492
|
+
|
|
1493
|
+
Release Management (RMG) resources are default-enabled. Definition resources (`release_process`, `release_activity`) support list/get/create/update/delete with `body.yaml`; call `harness_schema(resource_type="release_process"|"release_activity")` before create/update. Execution resources monitor running releases — most list operations require `release_id` (UUID from `harness_list resource_type=release`, or the UI URL slug such as `identifier-1.0.0-abc`). Paste an RMG release URL into `harness_list` to auto-fill `release_id`.
|
|
1494
|
+
|
|
1495
|
+
RMG calls use `${HARNESS_BASE_URL}/gateway/rmg` with account scoping via the `Harness-Account` header. Org/project scope uses header-based scoping when `org_id`/`project_id` are provided. `release_execution_phase` is list-only — use each phase item's `identifier` field as `params.phase_identifier` when calling `harness_get` on phase input/output resources (do not call `harness_get` on `release_execution_phase` itself). Release list `status` filtering is applied client-side on the current page only; keep paging with the same filters when results may span pages.
|
|
1496
|
+
|
|
1497
|
+
| Resource Type | List | Get | Create | Update | Delete | Execute Actions |
|
|
1498
|
+
| ------------------------------------- | ---- | --- | ------ | ------ | ------ | --------------- |
|
|
1499
|
+
| `release_process` | x | x | x | x | x | |
|
|
1500
|
+
| `release_activity` | x | x | x | x | x | |
|
|
1501
|
+
| `release` | x | x | | | | |
|
|
1502
|
+
| `release_execution_phase` | x | | | | | |
|
|
1503
|
+
| `release_execution_task` | x | | | | | |
|
|
1504
|
+
| `release_execution_activity` | x | | | | | |
|
|
1505
|
+
| `release_input` | | x | | | | |
|
|
1506
|
+
| `release_execution_phase_input` | | x | | | | |
|
|
1507
|
+
| `release_execution_phase_output` | | x | | | | |
|
|
1508
|
+
| `release_execution_activity_input` | | x | | | | |
|
|
1509
|
+
| `release_execution_activity_output` | | x | | | | |
|
|
1510
|
+
|
|
1511
|
+
Typical workflow:
|
|
1512
|
+
|
|
1513
|
+
1. `harness_list(resource_type="release_process", org_id="...", project_id="...")` to discover orchestration process definitions.
|
|
1514
|
+
2. `harness_schema(resource_type="release_process")` (or `release_activity`) before create/update; then `harness_create` / `harness_update` with `body.yaml`.
|
|
1515
|
+
3. `harness_list(resource_type="release", org_id="...", project_id="...")` to find active or recent releases (default 30-day look-back; optional `filters.status`, `filters.search_term`, `filters.days_back`).
|
|
1516
|
+
4. `harness_get(resource_type="release", release_id="...")` for release details.
|
|
1517
|
+
5. `harness_list(resource_type="release_execution_phase", filters={ release_id: "..." })` for phase status; same `release_id` for `release_execution_task` and `release_execution_activity`.
|
|
1518
|
+
6. `harness_get` on `release_input`, `release_execution_phase_input`, `release_execution_phase_output`, `release_execution_activity_output`, or `release_execution_activity_input` using `release_id` plus `params.phase_identifier` / `params.activity_identifier` / `activity_execution_id` as documented on each resource.
|
|
1519
|
+
|
|
1520
|
+
|
|
1473
1521
|
### Feature Flags
|
|
1474
1522
|
|
|
1475
1523
|
|
|
1476
1524
|
| Resource Type | List | Get | Create | Update | Delete | Execute Actions |
|
|
1477
1525
|
| ----------------------------------- | ---- | --- | ------ | ------ | ------ | ----------------------------------------- |
|
|
1478
1526
|
| `fme_workspace` | x | | | | | |
|
|
1479
|
-
| `fme_environment` | x |
|
|
1480
|
-
| `fme_feature_flag` | x | x | x | x | x | `kill`, `restore`, `archive`, `unarchive` |
|
|
1481
|
-
| `fme_feature_flag_definition` |
|
|
1527
|
+
| `fme_environment` | x | x | x | x | x | |
|
|
1528
|
+
| `fme_feature_flag` | x | x | x | x | x | `kill`, `restore`, `reallocate`, `archive`, `unarchive` |
|
|
1529
|
+
| `fme_feature_flag_definition` | x | x | x | x | x | `kill`, `restore`, `reallocate` |
|
|
1482
1530
|
| `fme_rollout_status` | x | | | | | |
|
|
1483
1531
|
| `fme_rule_based_segment` | x | x | x | | x | |
|
|
1484
1532
|
| `fme_rule_based_segment_definition` | x | | | x | | `enable`, `disable`, `change_request` |
|
|
@@ -1486,9 +1534,28 @@ Use `harness_execute(resource_type="pull_request", action="close", ...)` for an
|
|
|
1486
1534
|
| `fme_identity` | | | x | x | | |
|
|
1487
1535
|
| `fme_standard_segment` | x | x | | | | |
|
|
1488
1536
|
| `fme_segment_keys` | x | | | x | | |
|
|
1537
|
+
| `fme_segment` | x | x | x | | x | |
|
|
1538
|
+
| `fme_segment_definition` | x | x | x | x | x | |
|
|
1539
|
+
|
|
1540
|
+
|
|
1541
|
+
**FME (Split.io) resources** — `fme_`* resources support **dual-mode scoping**: legacy calls pass `workspace_id` and hit the Split.io API (`api.split.io`); newer calls pass `org_id`+`project_id` together and hit Harness-native endpoints (standard `HARNESS_API_KEY`/`HARNESS_BASE_URL`, same auth as every other `harness_*` resource) instead. Passing both `workspace_id` and `org_id`/`project_id` on the same call, or mixing `org_id` with `project_id` alone, is an error — pick one mode per call. Every operation below is available in legacy mode, unchanged. Harness-native mode coverage is currently narrower:
|
|
1542
|
+
|
|
1543
|
+
- **`fme_workspace`** — no Harness-native equivalent; legacy-only (used to discover `workspace_id` values).
|
|
1544
|
+
- **`fme_environment`** — dual-mode `list` (`workspace_id` or `org_id`+`project_id`). `get`/`create`/`update`/`delete` are Harness-native only (`/fme/api/v4/environments`) — MCP never had a `workspace_id` contract for those ops. Native list uses optional `offset`/`limit` (max 100; `harness_list` `size` maps to `limit`); envelope `{data, limit, offset, totalCount}` is promoted to `items`/`total`. Native create/update use `isProduction` (`production` accepted as an alias). Native update is JSON Merge Patch; `name` and `isProduction` are not clearable. Name max 15 characters.
|
|
1545
|
+
- **`fme_feature_flag`** — dual-mode, both branches fully wired. Harness-native (`org_id`+`project_id`): `list`/`get`/`create`/`delete` hit `/fme/api/v4/feature-flags` (body for `create`: `name`, `trafficType`, optional `description`/`tags`/`owners`, per `CreateFeatureFlagRequest`); `update` sends a merge-patch to `/fme/api/v4/feature-flags/{name}`; `archive`/`unarchive` hit `/fme/api/v4/feature-flags/{name}/archive|unarchive` (optional `comment` only — no `title`, per `ArchiveUnarchiveRequest`); `kill`/`restore`/`reallocate` hit `/fme/api/v4/feature-flag-definitions/{name}/kill|restore|reallocate` with `environment_id` as a query param (optional `comment`/`title`, per `FeatureFlagDefinitionActionRequest`).
|
|
1546
|
+
- **`fme_feature_flag_definition`** — `get`/`create`/`update` remain dual-mode (`workspace_id` or `org_id`+`project_id`). `list`/`delete`/`kill`/`restore`/`reallocate` are Harness-native only (`org_id`+`project_id`) — MCP never had a `workspace_id` contract for those ops. Native list requires `feature_flag_name` and uses `offset`/`limit` (default 100, max 100); it does not take `environment_id`. Delete and execute require `environment_id`. Kill/restore/reallocate are the same actions as on `fme_feature_flag`. Get/create/update body matches legacy (`treatments`, `defaultTreatment`, `defaultRule`, optional `rules`/`baselineTreatment`/`trafficAllocation`/`comment`), plus optional `title` in Harness-native mode. Native update is JSON Merge Patch.
|
|
1547
|
+
- **`fme_rollout_status`** — dual-mode `list`. Pass `org_id`+`project_id` (preferred) or the deprecated `workspace_id`. Native pagination uses `offset`/`limit` (max 100; `harness_list` `size` maps to `limit`); results are promoted to `items`/`total`. Each item has `id`, `name`, and optional `description`.
|
|
1489
1548
|
|
|
1549
|
+
- **`fme_rule_based_segment`** — (Deprecated — see `fme_segment`.) Harness-native mode is rejected on every operation (`list`/`get`/`create`/`delete`) — use `fme_segment` instead; this resource supports only the legacy `workspace_id` contract.
|
|
1550
|
+
- **`fme_rule_based_segment_definition`** — (Deprecated — see `fme_segment_definition`.) Harness-native mode is rejected on every operation/action (`list`/`update`/`enable`/`disable`/`change_request`) — use `fme_segment_definition` instead (no `enable`/`disable`/`change_request` equivalent there); this resource supports only the legacy `workspace_id`/`environment_id` contract.
|
|
1551
|
+
- **`fme_traffic_type`** — dual-mode `list`. Pass `org_id`+`project_id` (preferred) or the deprecated `workspace_id`. Native pagination uses `offset`/`limit` (max 100; `harness_list` `size` maps to `limit`); results are promoted to `items`/`total`. Each item has `id` and `name` (no `displayAttributeId`).
|
|
1552
|
+
- **`fme_identity`** — `create`/`update` are not yet implemented if `org_id`+`project_id` are passed together; otherwise proceeds as a normal legacy call.
|
|
1553
|
+
- **`fme_standard_segment`** — (Deprecated — see `fme_segment`.) Harness-native mode is rejected on every operation (`list`/`get`) — use `fme_segment` instead; this resource supports only the legacy `workspace_id` contract. There is no `create` operation for this resource in either mode.
|
|
1554
|
+
- **`fme_segment_keys`** — `list`/`update` are not yet implemented if `org_id`+`project_id` are passed together; otherwise proceeds as a normal legacy call.
|
|
1555
|
+
- **`fme_segment`** — `list`/`get`/`create`/`delete` are wired to the real `/fme/api/v4/segments` endpoint (consolidates `fme_standard_segment`/`fme_rule_based_segment`); `create` body: `name`, `trafficType`, `type` (required — one of `standard`/`rule_based`/`large`), optional `description`/`tags`/`owners`.
|
|
1556
|
+
- **`fme_segment_definition`** — Harness-native only (no legacy `workspace_id` support). `list`/`get`/`create`/`update`/`delete` are wired to `/fme/api/v4/segment-definitions`, per `Harness_Split/Main` PR #12644 (open, not yet merged as of this writing — paths may still change). `update` uses JSON Merge Patch on `description`, the only mutable field. There is no `enable`/`disable`/`change_request` action — the backend has no such endpoints for this unified resource.
|
|
1490
1557
|
|
|
1491
|
-
|
|
1558
|
+
In single-user/self-hosted mode, legacy-mode auth uses a Bearer token from `HARNESS_FME_API_KEY`, falling back to a non-placeholder `HARNESS_API_KEY`. `HARNESS_FME_API_KEY` may be a legacy Split admin key or an FME-entitled Harness PAT/SAT, but it is rejected in `multi-user` mode so shared deployments cannot override each session user's credential. Hosted OAuth/service-routing credentials for Harness platform APIs do not authenticate direct Split.io requests. `fme_feature_flag` supports full lifecycle management in legacy mode: create (requires `traffic_type_id`), list, get, update metadata, delete, and kill/restore/reallocate/archive/unarchive execute actions. Use `fme_traffic_type` to discover traffic type IDs, `fme_identity` to create/update identity attributes, and `fme_standard_segment` / `fme_segment_keys` to inspect standard segments and add member keys. `fme_rule_based_segment` provides CRUD for targeting segments, while `fme_rule_based_segment_definition` manages environment-specific segment rules with enable/disable and change request approval flows.
|
|
1492
1559
|
|
|
1493
1560
|
### GitOps
|
|
1494
1561
|
|
|
@@ -1512,40 +1579,43 @@ Use `harness_execute(resource_type="pull_request", action="close", ...)` for an
|
|
|
1512
1579
|
### Chaos Engineering
|
|
1513
1580
|
|
|
1514
1581
|
|
|
1515
|
-
| Resource Type
|
|
1516
|
-
|
|
1517
|
-
| `chaos_experiment`
|
|
1518
|
-
| `chaos_experiment_run`
|
|
1519
|
-
| `chaos_experiment_variable`
|
|
1520
|
-
| `chaos_component_variable`
|
|
1521
|
-
| `chaos_input_set`
|
|
1522
|
-
| `chaos_experiment_template`
|
|
1523
|
-
| `chaos_probe`
|
|
1524
|
-
| `chaos_probe_in_run`
|
|
1525
|
-
| `chaos_probe_template`
|
|
1526
|
-
| `chaos_infrastructure`
|
|
1527
|
-
| `chaos_k8s_infrastructure`
|
|
1528
|
-
| `
|
|
1529
|
-
| `
|
|
1530
|
-
| `
|
|
1531
|
-
| `
|
|
1532
|
-
| `
|
|
1533
|
-
| `
|
|
1534
|
-
| `
|
|
1535
|
-
| `
|
|
1536
|
-
| `
|
|
1537
|
-
| `
|
|
1538
|
-
| `
|
|
1539
|
-
| `
|
|
1540
|
-
| `
|
|
1541
|
-
| `
|
|
1542
|
-
| `
|
|
1543
|
-
| `
|
|
1544
|
-
| `
|
|
1545
|
-
| `
|
|
1546
|
-
| `
|
|
1547
|
-
| `
|
|
1548
|
-
| `
|
|
1582
|
+
| Resource Type | List | Get | Create | Update | Delete | Execute Actions |
|
|
1583
|
+
|----------------------------------| ---- | --- | ------ | ------ | ------ |------------------------------------------------------------------------------|
|
|
1584
|
+
| `chaos_experiment` | x | x | x | | x | `run`, `stop` |
|
|
1585
|
+
| `chaos_experiment_run` | | x | | | | |
|
|
1586
|
+
| `chaos_experiment_variable` | x | | | | | |
|
|
1587
|
+
| `chaos_component_variable` | | x | | | | |
|
|
1588
|
+
| `chaos_input_set` | x | x | x | x | x | |
|
|
1589
|
+
| `chaos_experiment_template` | x | x | | | x | `create_from_template`, `list_revisions`, `get_variables`, `get_yaml`, `compare_revisions` |
|
|
1590
|
+
| `chaos_probe` | x | x | x | | x | `enable`, `verify`, `get_manifest` |
|
|
1591
|
+
| `chaos_probe_in_run` | x | | | | | |
|
|
1592
|
+
| `chaos_probe_template` | x | x | | | x | `get_variables` |
|
|
1593
|
+
| `chaos_infrastructure` | x | | | | | |
|
|
1594
|
+
| `chaos_k8s_infrastructure` | x | x | x | | | `check_health` |
|
|
1595
|
+
| `chaos_enabled_infrastructure` | x | | | | | |
|
|
1596
|
+
| `chaos_environment` | x | | | | | |
|
|
1597
|
+
| `chaos_hub` | x | x | x | x | x | |
|
|
1598
|
+
| `chaos_hub_fault` | x | | | | | |
|
|
1599
|
+
| `chaos_fault` | x | x | | | x | `get_variables`, `get_yaml` |
|
|
1600
|
+
| `chaos_fault_template` | x | x | | | x | `list_revisions`, `get_variables`, `get_yaml`, `compare_revisions` |
|
|
1601
|
+
| `chaos_fault_experiment_run` | x | | | | | |
|
|
1602
|
+
| `chaos_action` | x | x | x | | x | `get_manifest` |
|
|
1603
|
+
| `chaos_action_template` | x | x | | | x | `list_revisions`, `get_variables`, `compare_revisions` |
|
|
1604
|
+
| `chaos_loadtest` | x | x | x | x | x | `run`, `stop` |
|
|
1605
|
+
| `chaos_service` | x | x | x | x | x | `list_experiment_runs`, `list_load_tests` |
|
|
1606
|
+
| `chaos_application_map` | x | x | | | | |
|
|
1607
|
+
| `discovered_agent` | x | | | | | |
|
|
1608
|
+
| `discovered_namespace` | x | | | | | |
|
|
1609
|
+
| `discovered_service` | x | | | | | |
|
|
1610
|
+
| `discovered_network_map` | x | | | | | |
|
|
1611
|
+
| `chaos_guard_condition` | x | x | | | x | |
|
|
1612
|
+
| `chaos_guard_rule` | x | x | | | x | `enable` |
|
|
1613
|
+
| `chaos_recommendation` | x | x | | | | |
|
|
1614
|
+
| `chaos_risk` | x | x | | | | |
|
|
1615
|
+
| `chaos_dr_test` | x | | x | | | |
|
|
1616
|
+
| `scanned_risk` | x | x | | | | `occurrences`, `summary_by_service` |
|
|
1617
|
+
| `chaos_risk_rule` | x | x | | | | |
|
|
1618
|
+
| `chaos_risk_scan` | x | x | x | x | x | `retry`, `abort`, `report`, `report_download`, `heatmap` |
|
|
1549
1619
|
|
|
1550
1620
|
### Cloud Cost Management (CCM)
|
|
1551
1621
|
|
|
@@ -1622,7 +1692,7 @@ Evidence Vault stores in-toto attestations (SDLC evidences). List supports accou
|
|
|
1622
1692
|
| `security_issue` | x | | | | | |
|
|
1623
1693
|
| `security_issue_filter` | x | | | | | |
|
|
1624
1694
|
| `security_exemption` | x | | x | | | `approve`, `reject` |
|
|
1625
|
-
| `
|
|
1695
|
+
| `remediation_diff` | x | | | | | |
|
|
1626
1696
|
|
|
1627
1697
|
`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.
|
|
1628
1698
|
|
|
@@ -1759,7 +1829,7 @@ Security exemption execute workflow:
|
|
|
1759
1829
|
|
|
1760
1830
|
## Toolset Filtering
|
|
1761
1831
|
|
|
1762
|
-
By default,
|
|
1832
|
+
By default, 39 of 40 toolsets are enabled. One toolset is opt-in and excluded from the defaults:
|
|
1763
1833
|
|
|
1764
1834
|
- **`ansible`** — Harness Ansible (inventories, playbooks, hosts, activity). Opt-in because it is project-scoped and adds concepts many users do not need.
|
|
1765
1835
|
|
|
@@ -1820,14 +1890,14 @@ Available toolset names:
|
|
|
1820
1890
|
| `dashboards` | dashboard, dashboard_data |
|
|
1821
1891
|
| `idp` | idp_entity, scorecard, scorecard_check, scorecard_stats, scorecard_check_stats, idp_score, idp_workflow, idp_tech_doc |
|
|
1822
1892
|
| `pull-requests` | pull_request, pr_reviewer, pr_comment, pr_check, pr_activity |
|
|
1823
|
-
| `feature-flags` | fme_workspace, fme_environment, fme_feature_flag, fme_feature_flag_definition, fme_rollout_status, fme_rule_based_segment, fme_rule_based_segment_definition, fme_traffic_type, fme_identity, fme_standard_segment, fme_segment_keys
|
|
1893
|
+
| `feature-flags` | fme_workspace, fme_environment, fme_feature_flag, fme_feature_flag_definition, fme_rollout_status, fme_rule_based_segment, fme_rule_based_segment_definition, fme_traffic_type, fme_identity, fme_standard_segment, fme_segment_keys, fme_segment, fme_segment_definition |
|
|
1824
1894
|
| `gitops` | gitops_agent, gitops_application, gitops_cluster, gitops_repository, gitops_applicationset, gitops_repo_credential, gitops_app_event, gitops_pod_log, gitops_managed_resource, gitops_resource_action, gitops_dashboard, gitops_app_resource_tree |
|
|
1825
|
-
| `chaos` | chaos_experiment, chaos_experiment_run, chaos_experiment_variable, chaos_component_variable, chaos_input_set, chaos_experiment_template, chaos_probe, chaos_probe_in_run, chaos_probe_template, chaos_infrastructure, chaos_k8s_infrastructure, chaos_environment, chaos_hub, chaos_hub_fault, chaos_fault, chaos_fault_template, chaos_fault_experiment_run, chaos_action, chaos_action_template, chaos_loadtest, chaos_application_map, discovered_namespace, discovered_service, discovered_network_map, chaos_guard_condition, chaos_guard_rule, chaos_recommendation, chaos_risk, chaos_dr_test, scanned_risk, chaos_risk_rule, chaos_risk_scan |
|
|
1895
|
+
| `chaos` | chaos_experiment, chaos_experiment_run, chaos_experiment_variable, chaos_component_variable, chaos_input_set, chaos_experiment_template, chaos_probe, chaos_probe_in_run, chaos_probe_template, chaos_infrastructure, chaos_k8s_infrastructure, chaos_enabled_infrastructure, chaos_environment, chaos_hub, chaos_hub_fault, chaos_fault, chaos_fault_template, chaos_fault_experiment_run, chaos_action, chaos_action_template, chaos_loadtest, chaos_service, chaos_application_map, discovered_agent, discovered_namespace, discovered_service, discovered_network_map, chaos_guard_condition, chaos_guard_rule, chaos_recommendation, chaos_risk, chaos_dr_test, scanned_risk, chaos_risk_rule, chaos_risk_scan |
|
|
1826
1896
|
| `ccm` | cost_perspective, cost_breakdown, cost_timeseries, cost_summary, cost_recommendation, cost_anomaly, cost_anomaly_summary, cost_category, cost_account_overview, cost_filter_value, cost_recommendation_stats, cost_recommendation_detail, cost_commitment |
|
|
1827
1897
|
| `sei` | sei_metric, sei_productivity_metric, sei_dora_metric, sei_team, sei_team_detail, sei_org_tree, sei_org_tree_detail, sei_business_alignment, sei_ai_usage, sei_ai_adoption, sei_ai_impact, sei_ai_raw_metric |
|
|
1828
1898
|
| `scs` | scs_artifact_source, artifact_security, scs_artifact_component, scs_artifact_remediation, scs_chain_of_custody, scs_compliance_result, code_repo_security, scs_sbom |
|
|
1829
1899
|
| `evidence-vault` | attestation |
|
|
1830
|
-
| `sto` | security_issue, security_issue_filter, security_exemption,
|
|
1900
|
+
| `sto` | security_issue, security_issue_filter, security_exemption, remediation_diff |
|
|
1831
1901
|
| `dbops` | database_schema, database_instance, database_snapshot_object, database_llm_authoring_pipeline |
|
|
1832
1902
|
| `access_control` | user, user_group, service_account, role, role_assignment, resource_group, permission |
|
|
1833
1903
|
| `governance` | policy, policy_set, policy_evaluation |
|
|
@@ -1837,8 +1907,9 @@ Available toolset names:
|
|
|
1837
1907
|
| `knowledge-graph` | kg_queryable_type_summary, kg_grammar, hql_query |
|
|
1838
1908
|
| `semantic-layer` | kg_type, kg_related_type |
|
|
1839
1909
|
| `ai-evals` | eval_dataset, eval_dataset_item, evaluation, eval_run, eval_run_item, eval_run_by_eval, eval_metric, eval_metric_set, eval_metric_set_entry, eval_suite, eval_suite_evaluation, eval_suite_run, eval_target, eval_annotation, eval_analytics, eval_git_settings, eval_registry_item, eval_git_registration, online_eval |
|
|
1840
|
-
| `iacm` | iacm_workspace, iacm_resource, iacm_module, iacm_workspace_costs, iacm_activity_resource_change
|
|
1910
|
+
| `iacm` | iacm_workspace, iacm_variable_set, iacm_resource, iacm_module, iacm_provider, iacm_workspace_costs, iacm_activity_resource_change |
|
|
1841
1911
|
| `ansible` *(opt-in)* | ansible_inventory, ansible_playbook, ansible_host, ansible_host_activity, ansible_activity |
|
|
1912
|
+
| `release-management` | release_process, release_activity, release, release_execution_phase, release_execution_task, release_execution_activity, release_input, release_execution_phase_input, release_execution_phase_output, release_execution_activity_input, release_execution_activity_output |
|
|
1842
1913
|
|
|
1843
1914
|
|
|
1844
1915
|
## Architecture
|
|
@@ -1856,8 +1927,8 @@ Available toolset names:
|
|
|
1856
1927
|
|
|
|
1857
1928
|
+--------v---------+
|
|
1858
1929
|
| Registry | <-- Declarative resource definitions
|
|
1859
|
-
|
|
|
1860
|
-
|
|
|
1930
|
+
| 39 Toolsets | (data files, not code)
|
|
1931
|
+
| 240 Resource Types|
|
|
1861
1932
|
+--------+---------+
|
|
1862
1933
|
|
|
|
1863
1934
|
+--------v---------+
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"harness-client.d.ts","sourceRoot":"","sources":["../../src/client/harness-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAA6C,MAAM,cAAc,CAAC;AACtF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"harness-client.d.ts","sourceRoot":"","sources":["../../src/client/harness-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAA6C,MAAM,cAAc,CAAC;AACtF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAuJjD;;;;GAIG;AACH,MAAM,MAAM,iBAAiB,GAAG,MAAM,MAAM,GAAG,SAAS,CAAC;AAEzD,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAc;IAC1C,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAU;IAC1C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAqB;IAC/C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA6B;IACrD,OAAO,CAAC,iBAAiB,CAAC,CAAoB;IAC9C,OAAO,CAAC,aAAa,CAAC,CAAS;IAC/B,OAAO,CAAC,kBAAkB,CAAC,CAAkB;gBAEjC,MAAM,EAAE,MAAM;IAY1B;;;OAGG;IACH,oBAAoB,CAAC,QAAQ,EAAE,iBAAiB,GAAG,IAAI;IAIvD,6EAA6E;IAC7E,OAAO,CAAC,gBAAgB;IAIxB,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,OAAO,CAAC,YAAY;IAoBpB,OAAO,CAAC,gBAAgB;IA4CxB;;;;;;;;OAQG;IACG,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC;IA2BnC,OAAO,CAAC,CAAC,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,CAAC,CAAC;IAwJrD;;;;OAIG;IACG,aAAa,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,QAAQ,CAAC;IA2F/D,OAAO,CAAC,QAAQ;CA8DjB"}
|
|
@@ -99,8 +99,36 @@ const ERROR_FIELD_ENRICHMENTS = [
|
|
|
99
99
|
{ pathPrefix: "/chaos/", field: "description" },
|
|
100
100
|
{ pathPrefix: "/loadTest/", field: "description" },
|
|
101
101
|
];
|
|
102
|
+
const MAX_ERROR_DETAIL_CHARS = 400;
|
|
103
|
+
/** Extra NG fields (`details`, `detailedMessage`, `responseMessages`) not already in `message`. */
|
|
104
|
+
function collectErrorDetail(parsed, message) {
|
|
105
|
+
const seen = new Set([message.trim()]);
|
|
106
|
+
const extras = [];
|
|
107
|
+
const add = (value) => {
|
|
108
|
+
if (typeof value !== "string")
|
|
109
|
+
return;
|
|
110
|
+
const text = value.trim();
|
|
111
|
+
if (!text || seen.has(text))
|
|
112
|
+
return;
|
|
113
|
+
seen.add(text);
|
|
114
|
+
extras.push(text);
|
|
115
|
+
};
|
|
116
|
+
add(parsed.details);
|
|
117
|
+
add(parsed.detailedMessage);
|
|
118
|
+
for (const entry of Array.isArray(parsed.responseMessages) ? parsed.responseMessages : []) {
|
|
119
|
+
if (entry && typeof entry === "object")
|
|
120
|
+
add(entry.message);
|
|
121
|
+
}
|
|
122
|
+
if (extras.length === 0)
|
|
123
|
+
return undefined;
|
|
124
|
+
const detail = extras.join("; ");
|
|
125
|
+
return detail.length > MAX_ERROR_DETAIL_CHARS
|
|
126
|
+
? `${detail.slice(0, MAX_ERROR_DETAIL_CHARS)}…`
|
|
127
|
+
: detail;
|
|
128
|
+
}
|
|
102
129
|
function enrichErrorMessage(rawMessage, parsed, path) {
|
|
103
|
-
|
|
130
|
+
const detail = collectErrorDetail(parsed, rawMessage);
|
|
131
|
+
let message = detail ? `${rawMessage} — ${detail}` : rawMessage;
|
|
104
132
|
for (const { pathPrefix, field } of ERROR_FIELD_ENRICHMENTS) {
|
|
105
133
|
const value = parsed[field];
|
|
106
134
|
if (path.startsWith(pathPrefix) && typeof value === "string" && value) {
|
|
@@ -317,10 +345,6 @@ export class HarnessClient {
|
|
|
317
345
|
}
|
|
318
346
|
throw error;
|
|
319
347
|
}
|
|
320
|
-
// 204 No Content — valid success response (e.g. PATCH/DELETE on PM API)
|
|
321
|
-
if (response.status === 204) {
|
|
322
|
-
return { status: "SUCCESS", message: "No content" };
|
|
323
|
-
}
|
|
324
348
|
// Binary response mode — return raw ArrayBuffer (used for ZIP downloads)
|
|
325
349
|
if (options.responseType === "buffer") {
|
|
326
350
|
const buffer = await response.arrayBuffer();
|
|
@@ -328,8 +352,10 @@ export class HarnessClient {
|
|
|
328
352
|
return buffer;
|
|
329
353
|
}
|
|
330
354
|
const text = await response.text();
|
|
355
|
+
// Empty body on 2xx is a valid success (204 No Content; also 201 from
|
|
356
|
+
// IaCM provider-registry create/update version, which returns no JSON).
|
|
331
357
|
if (!text) {
|
|
332
|
-
|
|
358
|
+
return { status: "SUCCESS", message: "No content" };
|
|
333
359
|
}
|
|
334
360
|
let data;
|
|
335
361
|
try {
|