harness-mcp-v2 3.1.3 → 3.1.5

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.
Files changed (47) hide show
  1. package/README.md +57 -9
  2. package/build/config.d.ts +3 -0
  3. package/build/config.d.ts.map +1 -1
  4. package/build/config.js +6 -0
  5. package/build/config.js.map +1 -1
  6. package/build/prompts/create-agent.d.ts.map +1 -1
  7. package/build/prompts/create-agent.js +149 -121
  8. package/build/prompts/create-agent.js.map +1 -1
  9. package/build/registry/index.d.ts.map +1 -1
  10. package/build/registry/index.js +4 -0
  11. package/build/registry/index.js.map +1 -1
  12. package/build/registry/scope-utils.d.ts +3 -3
  13. package/build/registry/scope-utils.d.ts.map +1 -1
  14. package/build/registry/scope-utils.js +26 -8
  15. package/build/registry/scope-utils.js.map +1 -1
  16. package/build/registry/toolsets/knowledge-graph.d.ts +3 -0
  17. package/build/registry/toolsets/knowledge-graph.d.ts.map +1 -0
  18. package/build/registry/toolsets/knowledge-graph.js +283 -0
  19. package/build/registry/toolsets/knowledge-graph.js.map +1 -0
  20. package/build/registry/toolsets/semantic-layer.d.ts +3 -0
  21. package/build/registry/toolsets/semantic-layer.d.ts.map +1 -0
  22. package/build/registry/toolsets/semantic-layer.js +253 -0
  23. package/build/registry/toolsets/semantic-layer.js.map +1 -0
  24. package/build/tools/diagnose/pipeline.d.ts.map +1 -1
  25. package/build/tools/diagnose/pipeline.js +31 -15
  26. package/build/tools/diagnose/pipeline.js.map +1 -1
  27. package/build/tools/harness-create.d.ts.map +1 -1
  28. package/build/tools/harness-create.js +2 -3
  29. package/build/tools/harness-create.js.map +1 -1
  30. package/build/tools/harness-execute.d.ts.map +1 -1
  31. package/build/tools/harness-execute.js +91 -2
  32. package/build/tools/harness-execute.js.map +1 -1
  33. package/build/tools/harness-update.d.ts.map +1 -1
  34. package/build/tools/harness-update.js +2 -3
  35. package/build/tools/harness-update.js.map +1 -1
  36. package/build/utils/body-preview.d.ts +2 -0
  37. package/build/utils/body-preview.d.ts.map +1 -0
  38. package/build/utils/body-preview.js +56 -0
  39. package/build/utils/body-preview.js.map +1 -0
  40. package/build/utils/log-resolver.d.ts.map +1 -1
  41. package/build/utils/log-resolver.js +5 -1
  42. package/build/utils/log-resolver.js.map +1 -1
  43. package/build/utils/strip-meta.d.ts +15 -0
  44. package/build/utils/strip-meta.d.ts.map +1 -0
  45. package/build/utils/strip-meta.js +44 -0
  46. package/build/utils/strip-meta.js.map +1 -0
  47. package/package.json +1 -1
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  ## Harness MCP Server 2.0
2
2
 
3
- An MCP (Model Context Protocol) server that gives AI agents full access to the Harness.io platform through 11 consolidated tools and 208 resource types.
3
+ An MCP (Model Context Protocol) server that gives AI agents full access to the Harness.io platform through 11 consolidated tools and 213 resource types.
4
4
 
5
5
  ## Why Use This MCP Server
6
6
 
@@ -8,8 +8,8 @@ Most MCP servers map one tool per API endpoint. For a platform as broad as Harne
8
8
 
9
9
  This server is built differently:
10
10
 
11
- - **11 tools, 208 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
- - **Full platform coverage.** 34 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, Visualizations, and more. Opt-in Ansible coverage is available when you need inventory and playbook data.
11
+ - **11 tools, 213 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
+ - **Full platform coverage.** 36 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, Visualizations, and more. Opt-in Ansible coverage is available when you need inventory and playbook data.
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
  - **32 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.
@@ -592,7 +592,7 @@ The server exposes 11 MCP tools. Most API tools accept `org_id` and `project_id`
592
592
  - `resource_scope: "org"` sends `accountIdentifier` and `orgIdentifier`.
593
593
  - `resource_scope: "project"` sends account, org, and project identifiers.
594
594
 
595
- Current multi-scope resources include `connector`, `service`, `environment`, `infrastructure`, `secret`, and `template`. 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.
595
+ Current multi-scope resources include `connector`, `service`, `environment`, `infrastructure`, `secret`, `file_store`, and `template`. 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.
596
596
 
597
597
  **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.
598
598
 
@@ -1082,7 +1082,7 @@ Harness pipelines can be stored in three ways:
1082
1082
 
1083
1083
  ## Resource Types
1084
1084
 
1085
- 208 resource types organized across 34 toolsets. Each resource type supports a subset of CRUD operations and optional execute actions.
1085
+ 213 resource types organized across 36 toolsets. Each resource type supports a subset of CRUD operations and optional execute actions.
1086
1086
 
1087
1087
  ### Platform
1088
1088
 
@@ -1219,7 +1219,53 @@ Only one pipeline YAML resource type is loaded at startup. By default `HARNESS_P
1219
1219
  | ------------- | ---- | --- | ------ | ------ | ------ | --------------- |
1220
1220
  | `file_store` | x | x | x | x | x | `list_children` |
1221
1221
 
1222
- `file_store` create/update operations convert the JSON `body` into Harness File Store multipart form data. For files, pass `content` or valid `content_base64`; for folders, omit content fields. `list_children` accepts `resource_id` plus `folder_name`, or a full FileStoreNode `body`.
1222
+ `file_store` manages Harness File Store files and folders through the generic tools. It supports account, org, and project scope; pass `resource_scope="account"|"org"|"project"` or paste a Harness File Store URL so the server can derive scope and IDs.
1223
+
1224
+ Common calls:
1225
+
1226
+ ```text
1227
+ # List the account-level File Store.
1228
+ harness_list(resource_type="file_store", resource_scope="account")
1229
+
1230
+ # Create a folder at the current scope root.
1231
+ harness_create(resource_type="file_store", body={
1232
+ name: "scripts",
1233
+ type: "FOLDER",
1234
+ parent_identifier: "Root"
1235
+ })
1236
+
1237
+ # Upload a UTF-8 script file. Use content_base64 instead for binary data.
1238
+ harness_create(resource_type="file_store", body={
1239
+ name: "deploy.sh",
1240
+ type: "FILE",
1241
+ parent_identifier: "Root",
1242
+ content: "#!/usr/bin/env bash\n./deploy",
1243
+ mime_type: "text/x-shellscript",
1244
+ file_usage: "SCRIPT"
1245
+ })
1246
+
1247
+ # Rename metadata without replacing file content.
1248
+ harness_update(resource_type="file_store", resource_id="deploy_script", body={
1249
+ name: "deploy-prod.sh",
1250
+ type: "FILE",
1251
+ parent_identifier: "Root"
1252
+ })
1253
+
1254
+ # List first-level children of a folder. This is a read-risk execute action.
1255
+ harness_execute(resource_type="file_store", action="list_children",
1256
+ resource_id="scripts_folder", params={folder_name: "scripts"})
1257
+ ```
1258
+
1259
+ Multipart body constraints:
1260
+
1261
+ - Create/update accept JSON `body`, then convert it to `multipart/form-data` for `/ng/api/file-store`.
1262
+ - `name`, `type` (`FILE` or `FOLDER`), and `parent_identifier` are required; use the literal `"Root"` only for the root of the selected scope.
1263
+ - `FILE` create requires exactly one of `content` (UTF-8 string) or `content_base64` (valid non-empty base64). `FILE` update can omit content for metadata-only updates, or provide exactly one content field to replace content.
1264
+ - `FOLDER` create/update must omit `content` and `content_base64`.
1265
+ - Optional `file_usage` must be `MANIFEST_FILE`, `CONFIG`, or `SCRIPT`; optional scalar metadata such as `description`, `mime_type`, `path`, and `tags` must be strings.
1266
+ - Upload content is capped at 100 MB. Confirmation prompts redact `content`, `content_base64`, and `contentBase64` previews before elicitation.
1267
+
1268
+ `list_children` accepts either shorthand (`resource_id` plus `params.folder_name`, or `params.file_store_id`/`params.folder_identifier` plus `params.folder_name`) or a full FileStoreNode `body` with `identifier`, `name`, and `type: "FOLDER"`. Full bodies use Harness camelCase `parentIdentifier`; shorthand may use `params.parent_identifier`.
1223
1269
 
1224
1270
 
1225
1271
  ### Templates
@@ -1592,7 +1638,7 @@ Inline PNG chart visualizations rendered from Harness data. These are metadata-o
1592
1638
 
1593
1639
  ## Toolset Filtering
1594
1640
 
1595
- By default, 34 of 35 toolsets are enabled. One toolset is opt-in and excluded from the defaults:
1641
+ By default, 36 of 37 toolsets are enabled. One toolset is opt-in and excluded from the defaults:
1596
1642
 
1597
1643
  - **`ansible`** — Harness Ansible (inventories, playbooks, hosts, activity). Opt-in because it is project-scoped and adds concepts many users do not need.
1598
1644
 
@@ -1667,6 +1713,8 @@ Available toolset names:
1667
1713
  | `overrides` | service_override |
1668
1714
  | `settings` | setting |
1669
1715
  | `visualizations` | visual_timeline, visual_stage_flow, visual_health_dashboard, visual_pie_chart, visual_bar_chart, visual_timeseries, visual_architecture |
1716
+ | `knowledge-graph` | kg_queryable_type_summary, kg_grammar, hql_query |
1717
+ | `semantic-layer` | kg_type, kg_related_type |
1670
1718
  | `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_model, eval_annotation, eval_analytics, eval_git_settings, eval_registry_item |
1671
1719
  | `iacm` | iacm_workspace, iacm_resource, iacm_module, iacm_workspace_costs, iacm_activity_resource_change |
1672
1720
  | `ansible` *(opt-in)* | ansible_inventory, ansible_playbook, ansible_host, ansible_host_activity, ansible_activity |
@@ -1687,8 +1735,8 @@ Available toolset names:
1687
1735
  |
1688
1736
  +--------v---------+
1689
1737
  | Registry | <-- Declarative resource definitions
1690
- | 34 Toolsets | (data files, not code)
1691
- | 208 Resource Types|
1738
+ | 36 Toolsets | (data files, not code)
1739
+ | 213 Resource Types|
1692
1740
  +--------+---------+
1693
1741
  |
1694
1742
  +--------v---------+
package/build/config.d.ts CHANGED
@@ -55,6 +55,7 @@ export declare const ConfigSchema: z.ZodPipe<z.ZodObject<{
55
55
  HARNESS_AUDIT_WEBHOOK_TOKEN: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodOptional<z.ZodString>>;
56
56
  HARNESS_AUDIT_WEBHOOK_BATCH_SIZE: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodDefault<z.ZodCoercedNumber<unknown>>>;
57
57
  HARNESS_AUDIT_WEBHOOK_FLUSH_MS: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodDefault<z.ZodCoercedNumber<unknown>>>;
58
+ HARNESS_DIAGNOSE_LOG_FETCH_CONCURRENCY: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodDefault<z.ZodCoercedNumber<unknown>>>;
58
59
  }, z.core.$strip>, z.ZodTransform<{
59
60
  HARNESS_API_KEY: string;
60
61
  HARNESS_ACCOUNT_ID: string;
@@ -77,6 +78,7 @@ export declare const ConfigSchema: z.ZodPipe<z.ZodObject<{
77
78
  HARNESS_LOG_UNSAFE_BODIES: boolean;
78
79
  HARNESS_AUDIT_WEBHOOK_BATCH_SIZE: number;
79
80
  HARNESS_AUDIT_WEBHOOK_FLUSH_MS: number;
81
+ HARNESS_DIAGNOSE_LOG_FETCH_CONCURRENCY: number;
80
82
  HARNESS_TOOLSETS?: string | undefined;
81
83
  HARNESS_MCP_AUTH_TOKEN?: string | undefined;
82
84
  HARNESS_FME_API_KEY?: string | undefined;
@@ -101,6 +103,7 @@ export declare const ConfigSchema: z.ZodPipe<z.ZodObject<{
101
103
  HARNESS_LOG_UNSAFE_BODIES: boolean;
102
104
  HARNESS_AUDIT_WEBHOOK_BATCH_SIZE: number;
103
105
  HARNESS_AUDIT_WEBHOOK_FLUSH_MS: number;
106
+ HARNESS_DIAGNOSE_LOG_FETCH_CONCURRENCY: number;
104
107
  HARNESS_API_KEY?: string | undefined;
105
108
  HARNESS_ACCOUNT_ID?: string | undefined;
106
109
  HARNESS_ORG?: string | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;AAyC5B;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAc5E;AA8CD,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgFvB,CAAC;AAEH,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAElD;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAI1E;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,kBAAkB,GAAG,qBAAqB,GAAG,iBAAiB,CAAC,GACnF,MAAM,GAAG,SAAS,CAcpB;AAED;;;;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"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;AAyC5B;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAc5E;AAuDD,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgFvB,CAAC;AAEH,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAElD;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAI1E;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,kBAAkB,GAAG,qBAAqB,GAAG,iBAAiB,CAAC,GACnF,MAAM,GAAG,SAAS,CAcpB;AAED;;;;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
@@ -85,6 +85,12 @@ const RawConfigSchema = z.object({
85
85
  HARNESS_AUDIT_WEBHOOK_TOKEN: optionalStringFromEnv,
86
86
  HARNESS_AUDIT_WEBHOOK_BATCH_SIZE: z.preprocess(emptyStringAsUndefined, z.coerce.number().min(1).default(10)),
87
87
  HARNESS_AUDIT_WEBHOOK_FLUSH_MS: z.preprocess(emptyStringAsUndefined, z.coerce.number().min(1).default(5000)),
88
+ // Maximum number of concurrent log-blob downloads issued by harness_diagnose
89
+ // when fetching logs for failed steps. Default 3 keeps peak memory bounded
90
+ // while still parallelising the common case (1–3 failed steps). Increase
91
+ // only if diagnose latency is dominated by log-fetch wall-clock and the
92
+ // pod has memory headroom (AIDEVOPS-2200).
93
+ HARNESS_DIAGNOSE_LOG_FETCH_CONCURRENCY: z.preprocess(emptyStringAsUndefined, z.coerce.number().min(1).max(20).default(3)),
88
94
  });
89
95
  export const ConfigSchema = RawConfigSchema.transform((data) => {
90
96
  const isMultiUser = data.HARNESS_MCP_MODE === "multi-user";
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"create-agent.d.ts","sourceRoot":"","sources":["../../src/prompts/create-agent.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAqWjE"}
1
+ {"version":3,"file":"create-agent.d.ts","sourceRoot":"","sources":["../../src/prompts/create-agent.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAiYjE"}
@@ -45,100 +45,96 @@ If creating a new agent or updating an existing one, collect the following befor
45
45
  ### 1. Agent Metadata
46
46
  - **Name**: Display name for the agent (e.g. "Code Coverage Agent", "PR Reviewer")
47
47
  - **Description**: Brief description of the agent's purpose (optional)
48
- - **UID**: Unique identifier (auto-generated from name if not provided e.g. "Code Coverage Agent" "code_coverage_agent")
48
+ - **UID/UUID**: Always generate this from the name and pass it explicitly to create/update APIs. Do not rely on the create API fallback.
49
+ - Generation rule: prefix with \`ca_\`, then lowercase the name, convert spaces and hyphens (\`-\`) to \`_\`, replace any remaining non-alphanumeric runs with \`_\`, collapse duplicate \`_\`, and trim leading/trailing \`_\` from the slug portion (e.g. "Code Coverage Agent" → \`ca_code_coverage_agent\`, "PR Reviewer" → \`ca_pr_reviewer\`)
50
+ - If the generated UID conflicts with an existing agent, ask the user whether to reuse/update that agent or append a short suffix
49
51
 
50
52
  ### 2. Task Details
51
53
 
52
54
  **This is an INTERACTIVE requirements gathering process. Ask clarifying questions and verify understanding with the user before proceeding.**
53
55
 
54
- #### Step 1: Understand the Agent's Purpose
55
-
56
56
  Ask and clarify the following with the user:
57
57
 
58
- 1. **Agent's exact goal**: What specific outcome should the agent achieve?
59
- - Examples: "Increase code coverage to 80%", "Review PRs for security vulnerabilities", "Generate unit tests for uncovered functions"
60
- - Be specific — avoid vague goals like "improve code quality"
58
+ 1. **Agent's exact goal**: What specific outcome should the agent achieve? Be specific — avoid vague goals.
61
59
 
62
- 2. **Inputs the agent needs**: What data or context does the agent require to start?
63
- - Repository information? (repo name, branch, PR number)
64
- - Execution context? (pipeline execution ID, previous step outputs)
65
- - Configuration? (coverage threshold, target files, exclusion patterns)
66
- - Secrets? (API keys, tokens for external services)
60
+ 2. **Inputs the agent needs**: Repository info? Execution context? Configuration? Secrets?
67
61
 
68
- 3. **Outputs the agent produces**: What artifacts, reports, or actions should result?
69
- - Files? (COVERAGE.md, test files, reports)
70
- - External actions? (create PR, post comments, send notifications)
71
- - Data? (metrics, logs, analysis results)
62
+ 3. **Outputs the agent produces**: Files? External actions? Data/metrics?
72
63
 
73
- 4. **What the agent works on**: What files, services, or systems does it interact with?
74
- - Specific file paths or patterns? (e.g., \`pkg/**/*.go\`, \`src/services/\`)
75
- - External services? (GitHub API, Slack, monitoring systems)
76
- - Databases or APIs? (read-only access, write operations)
64
+ 4. **What the agent works on**: Specific file paths? External services? Databases/APIs?
77
65
 
78
- 5. **Task workflow**: Understand the user's workflow for the task — what should happen step-by-step (do 1, then 2, then 3, etc.)
66
+ 5. **Task workflow**: Step-by-step workflow (do 1, then 2, then 3, etc.)
79
67
 
80
- 6. **Constraints and preferences**: Any user preferences for completing the task limitations, rules, or coding standards the agent should follow
81
- - Examples: "Use idiomatic Go code", "Do not modify existing tests", "Keep reports under 10000 characters"
68
+ 6. **Constraints and preferences**: Limitations, rules, or coding standards (e.g., "Use idiomatic Go code", "Do not modify existing tests")
82
69
 
83
- 7. **Definition of done**: How do you know the agent succeeded?
84
- - Specific criteria? ("Coverage increased by X%", "All files have tests")
85
- - Artifacts created? ("PR created with tests", "COVERAGE.md updated")
86
- - Exit conditions? ("No security vulnerabilities found", "All checks passed")
70
+ 7. **Definition of done**: How do you know the agent succeeded? Specific criteria, artifacts, or exit conditions.
87
71
 
88
- #### Step 2: Recommend Configuration
72
+ ### 3. Recommend Configuration
89
73
 
90
- Based on the requirements gathered in Step 1, recommend specific configurations and verify with the user:
74
+ Based on requirements, recommend and verify with the user:
91
75
 
92
- 1. **Task instructions** (\`task\` field):
76
+ 1. **Task instructions** (\`PLUGIN_TASK\` env var):
93
77
  - Break down the goal into detailed step-by-step instructions
94
78
  - Include specific commands, file paths, and expected outcomes
95
- - Reference inputs using \`<+inputs.fieldName>\` syntax
96
- - Example: "1. Run \`go test -cover ./...\` to measure coverage\\n2. Identify functions below 80% coverage\\n3. Generate tests for uncovered functions\\n4. Create PR with new tests"
79
+ - Reference inputs using \`\${{inputs.fieldName}}\` syntax inside \`PLUGIN_TASK\` and other env vars
80
+ - Add \`## RULES\` section at the end with constraints formatted as markdown bullet points
97
81
 
98
82
  2. **Runtime inputs** (\`inputs\` section in spec):
99
83
  - Only add if user confirms runtime parameters are needed
100
84
  - Map each input to what the agent needs (repo, branch, executionId, thresholds, etc.)
101
- - Example: \`repo\` (string), \`coverageThreshold\` (string), \`llmKey\` (secret)
102
-
103
- 3. **User preferences** (RULES section in \`task\` field):
104
- - Convert constraints and coding standards into a dedicated RULES section at the end of the task
105
- - Format as a markdown section with bullet points
106
- - Be specific and actionable
107
- - Example: Add \`## RULES\\n- Use idiomatic Go code\\n- Do not modify existing tests\\n- Keep COVERAGE.md under 10000 characters\` at the end of the task
85
+ - **Always set a \`default\` value for every non-required input** — if \`\${{inputs.fieldName}}\` is referenced in \`PLUGIN_TASK\` or any env var and no value is supplied at runtime nor a default exists, the agent will error at execution time
108
86
 
109
- 4. **Connectors**:
87
+ 3. **Connectors**:
110
88
  - LLM connector for model access (required for all agents) - User must create via Harness UI or MCP
111
89
  - MCP connectors for external services (GitHub, Slack, Harness platform, etc.) - only if needed
112
90
  - All authentication and secrets are managed within the connectors
113
91
 
114
92
  **Present this recommended configuration to the user and iterate until confirmed.**
115
93
 
116
- ### 3. Default Configuration & Inputs
94
+ ### 4. Default Configuration & Inputs
117
95
 
118
- **Agent Structure:** Agents use \`agent.step.run\` format with a single step.
96
+ **Agent Structure:** Agents use \`agent.step.group.steps\` format the run step is nested inside a named step group.
119
97
 
120
- **Default container image:**
98
+ **Default structure:**
121
99
  \`\`\`yaml
122
- container:
123
- image: pkg.harness.io/vrvdt5ius7uwygso8s0bia/harness-agents/harness-ai-agent:latest
100
+ version: 1
101
+ agent:
102
+ step:
103
+ group:
104
+ steps:
105
+ - name: Agent
106
+ if: <+Always>
107
+ id: agent
108
+ run:
109
+ container:
110
+ image: pkg.harness.io/vrvdt5ius7uwygso8s0bia/harness-agents/harness-ai-agent:latest
111
+ env:
112
+ PLUGIN_TASK: |
113
+ <step-by-step task instructions>
114
+ PLUGIN_MAX_TURNS: 150
115
+ PLUGIN_HARNESS_CONNECTOR: \${{inputs.llmConnector.id}}
124
116
  \`\`\`
125
117
 
126
118
  **Required environment variables:**
127
119
  \`\`\`yaml
128
120
  env:
129
- ANTHROPIC_MODEL: <+inputs.anthropicModel> # Points to anthropicModel input field
130
- PLUGIN_HARNESS_CONNECTOR: <+inputs.llmConnector.id> # Points to llmConnector input's id property
121
+ PLUGIN_TASK: | # Task instructions go here as a multiline string
122
+ <step-by-step instructions>
123
+ PLUGIN_MAX_TURNS: 150 # Adjust 100-200 based on task complexity
124
+ PLUGIN_HARNESS_CONNECTOR: \${{inputs.llmConnector.id}} # References llmConnector input's id property
131
125
  \`\`\`
132
126
 
133
- **Default max_turns:**
127
+ **MCP configuration (only if external services needed):**
134
128
  \`\`\`yaml
135
- max_turns: 150 # Adjust 100-200 based on task complexity
129
+ env:
130
+ PLUGIN_MCP_FORMAT: harness
131
+ PLUGIN_MCP_SERVERS: <+connectorInputs.resolveList(<+inputs.mcpConnectors>)> # References mcpConnectors input
136
132
  \`\`\`
137
133
 
138
- **MCP configuration (only if external services needed):**
134
+ **Optional model override (only if user explicitly requests it):**
139
135
  \`\`\`yaml
140
- mcp_format: harness
141
- mcp_servers: <+connectorInputs.resolveList(<+inputs.mcpConnectors>)> # Points to mcpConnectors input field
136
+ env:
137
+ ANTHROPIC_MODEL: \${{inputs.modelName}} # Only add when user insists on a modelName input
142
138
  \`\`\`
143
139
 
144
140
  **Required inputs (always include):**
@@ -149,11 +145,9 @@ agent:
149
145
  type: connector
150
146
  required: true
151
147
  default: your_llm_connector_id # User must replace with actual connector ID
152
-
153
- anthropicModel:
154
- type: string
155
- required: true
156
- default: arn:aws:bedrock:us-east-1:587817102444:application-inference-profile/7p8sn93lhspw # User may replace with their preferred model
148
+ ui:
149
+ connectorCategories:
150
+ - AI
157
151
  \`\`\`
158
152
 
159
153
  **Optional inputs (add as needed):**
@@ -164,6 +158,18 @@ agent:
164
158
  default:
165
159
  - your_github_mcp_connector # User must replace
166
160
  - your_slack_mcp_connector # User must replace
161
+ ui:
162
+ component: array
163
+ input:
164
+ inputType: connector
165
+ inputConfig:
166
+ connectorTypes:
167
+ - Mcp
168
+
169
+ # Model name override - ONLY add if user explicitly requests it
170
+ modelName:
171
+ type: string
172
+ default: your_model_arn_or_id # User must replace with their model ARN or ID
167
173
 
168
174
  # Custom parameters
169
175
  repo_name:
@@ -171,6 +177,20 @@ agent:
171
177
  default: my-org/my-repo
172
178
  \`\`\`
173
179
 
180
+ **\`layout\` block (always include, only list fields that are present as inputs):**
181
+
182
+ The \`layout\` block controls what appears in the agent configuration UI. It contains **at most three items** — \`llmConnector\`, \`modelName\`, and \`mcpConnectors\` — and only those that exist as first-class input fields in the \`inputs\` section. Never include any other fields (e.g. custom inputs like \`repo_name\`) in the layout block:
183
+
184
+ \`\`\`yaml
185
+ agent:
186
+ layout:
187
+ - title: Agent Configuration
188
+ items:
189
+ - llmConnector # always present
190
+ - modelName # only if modelName input exists
191
+ - mcpConnectors # only if mcpConnectors input exists
192
+ \`\`\`
193
+
174
194
  **Supported input types:** \`string\`, \`secret\`, \`boolean\`, \`connector\`, \`array\`
175
195
 
176
196
  **IMPORTANT:** Users must create connectors via Harness UI or \`harness_create\` with \`resource_type="connector"\` before running the agent.
@@ -182,21 +202,25 @@ agent:
182
202
  Assemble the complete agent YAML specification (\`spec\` field):
183
203
 
184
204
  1. Start with \`version: 1\` and \`agent:\` structure
185
- 2. Create \`agent.step.run\` block with:
186
- - \`container.image: pkg.harness.io/vrvdt5ius7uwygso8s0bia/harness-agents/harness-ai-agent:latest\`
187
- - \`with\` section:
188
- - \`task:\` with step-by-step instructions and \`## RULES\` section
189
- - \`max_turns: 150\` (adjust 100-200 based on complexity)
190
- - \`mcp_format: harness\` (only if MCPs needed)
191
- - \`mcp_servers: <+connectorInputs.resolveList(<+inputs.mcpConnectors>)>\` (only if MCPs needed)
192
- - \`env\` section:
193
- - \`ANTHROPIC_MODEL: <+inputs.anthropicModel>\`
194
- - \`PLUGIN_HARNESS_CONNECTOR: <+inputs.llmConnector.id>\`
205
+ 2. Create \`agent.step.group.steps\` block with a single step entry:
206
+ - \`name: Agent\`, \`if: <+Always>\`, \`id: agent\`
207
+ - \`run.container.image: pkg.harness.io/vrvdt5ius7uwygso8s0bia/harness-agents/harness-ai-agent:latest\`
208
+ - \`run.env\` section (all task config lives here as env vars):
209
+ - \`PLUGIN_TASK:\` multiline string with step-by-step instructions and \`## RULES\` section
210
+ - \`PLUGIN_MAX_TURNS: 150\` (adjust 100-200 based on complexity)
211
+ - \`PLUGIN_HARNESS_CONNECTOR: \${{inputs.llmConnector.id}}\`
212
+ - \`PLUGIN_MCP_FORMAT: harness\` (only if MCPs needed)
213
+ - \`PLUGIN_MCP_SERVERS: <+connectorInputs.resolveList(<+inputs.mcpConnectors>)>\` (only if MCPs needed)
214
+ - \`ANTHROPIC_MODEL: \${{inputs.modelName}}\` (**only** if user explicitly requests a \`modelName\` input)
195
215
  3. Add \`agent.inputs\` section with:
196
- - \`llmConnector\` (required - use placeholder ID)
197
- - \`anthropicModel\` (required - use default ARN, but user may update)
198
- - \`mcpConnectors\` (optional - only if needed)
216
+ - \`llmConnector\` (required) with \`ui.connectorCategories: [AI]\`
217
+ - \`mcpConnectors\` (optional - only if needed) with \`ui.component: array\`, \`ui.input.inputType: connector\`, and \`ui.input.inputConfig.connectorTypes: [Mcp]\`
218
+ - \`modelName\` (optional - **only** if user explicitly requests it)
199
219
  - Custom inputs (as needed)
220
+ 4. Add \`agent.layout\` block — only include items that are present as inputs:
221
+ - Always include \`llmConnector\`
222
+ - Include \`modelName\` only if that input exists
223
+ - Include \`mcpConnectors\` only if that input exists
200
224
 
201
225
  **Always notify users to create connectors and replace placeholder IDs before running the agent.**
202
226
 
@@ -226,7 +250,7 @@ Parameters:
226
250
  org_id: "<organization>"
227
251
  project_id: "<project>"
228
252
  body: {
229
- uid: "<agent_identifier>",
253
+ uid: "<generated_from_agent_name>",
230
254
  name: "<Agent Display Name>",
231
255
  description: "<Brief description of agent purpose>",
232
256
  spec: "<agent YAML spec as a string>",
@@ -235,10 +259,10 @@ Parameters:
235
259
  \`\`\`
236
260
 
237
261
  **Key fields for creation:**
238
- - \`uid\` (required): Unique identifier. Auto-generated from \`name\` if not provided (e.g. "Code Coverage Agent" → "code_coverage_agent")
262
+ - \`uid\` (required): Unique identifier. Always generate from \`name\` as \`ca_<slug>\` and send explicitly (e.g. "Code Coverage Agent" → \`ca_code_coverage_agent\`). Do not omit it or rely on API-side auto-generation.
239
263
  - \`name\` (required): Display name for the agent
240
264
  - \`description\` (optional): Brief description
241
- - \`spec\` (required): The full agent YAML specification as a string (includes \`version: 1\`, \`agent:\`, etc.)
265
+ - \`spec\` (required): The full agent YAML specification as a string (includes \`version: 1\`, \`agent:\`, \`agent.step.group.steps\`, \`agent.inputs\`, and \`agent.layout\`)
242
266
  - \`wiki\` (optional): Markdown documentation for the agent
243
267
 
244
268
  ### Updating an Existing Agent
@@ -247,7 +271,7 @@ Parameters:
247
271
  Call MCP tool: harness_update
248
272
  Parameters:
249
273
  resource_type: "agent"
250
- agent_id: "<agent_identifier>"
274
+ resource_id: "<agent_identifier>"
251
275
  org_id: "<organization>"
252
276
  project_id: "<project>"
253
277
  body: {
@@ -272,44 +296,52 @@ Parameters:
272
296
  version: 1
273
297
  agent:
274
298
  step:
275
- run:
276
- container:
277
- image: pkg.harness.io/vrvdt5ius7uwygso8s0bia/harness-agents/harness-ai-agent:latest
278
- with:
279
- task: |
280
- Review the pull request for repository <+inputs.repo_name> on branch <+inputs.branch>.
281
-
282
- 1. Analyze code changes for security vulnerabilities
283
- 2. Check for code quality issues
284
- 3. Verify test coverage
285
- 4. Post review comments using GitHub MCP tools
286
-
287
- ## RULES
288
- - Focus on critical security issues first
289
- - Be constructive in feedback
290
- - Suggest specific code improvements
291
- max_turns: 150
292
- mcp_format: harness
293
- mcp_servers: <+connectorInputs.resolveList(<+inputs.mcpConnectors>)>
294
- env:
295
- ANTHROPIC_MODEL: <+inputs.anthropicModel>
296
- PLUGIN_HARNESS_CONNECTOR: <+inputs.llmConnector.id>
299
+ group:
300
+ steps:
301
+ - name: Agent
302
+ if: <+Always>
303
+ id: agent
304
+ run:
305
+ container:
306
+ image: pkg.harness.io/vrvdt5ius7uwygso8s0bia/harness-agents/harness-ai-agent:latest
307
+ env:
308
+ PLUGIN_TASK: |
309
+ Review the pull request for repository \${{inputs.repo_name}} on branch \${{inputs.branch}}.
310
+
311
+ 1. Analyze code changes for security vulnerabilities
312
+ 2. Check for code quality issues
313
+ 3. Verify test coverage
314
+ 4. Post review comments using GitHub MCP tools
315
+
316
+ ## RULES
317
+ - Focus on critical security issues first
318
+ - Be constructive in feedback
319
+ - Suggest specific code improvements
320
+ PLUGIN_MAX_TURNS: 150
321
+ PLUGIN_HARNESS_CONNECTOR: \${{inputs.llmConnector.id}}
322
+ PLUGIN_MCP_FORMAT: harness
323
+ PLUGIN_MCP_SERVERS: <+connectorInputs.resolveList(<+inputs.mcpConnectors>)>
297
324
 
298
325
  inputs:
299
326
  llmConnector:
300
327
  type: connector
301
328
  required: true
302
329
  default: your_llm_connector_id # User must replace with actual connector ID
303
-
304
- anthropicModel:
305
- type: string
306
- required: true
307
- default: arn:aws:bedrock:us-east-1:587817102444:application-inference-profile/7p8sn93lhspw
330
+ ui:
331
+ connectorCategories:
332
+ - AI
308
333
 
309
334
  mcpConnectors:
310
335
  type: array
311
336
  default:
312
337
  - your_github_mcp_connector # User must replace with actual connector ID
338
+ ui:
339
+ component: array
340
+ input:
341
+ inputType: connector
342
+ inputConfig:
343
+ connectorTypes:
344
+ - Mcp
313
345
 
314
346
  repo_name:
315
347
  type: string
@@ -318,6 +350,12 @@ agent:
318
350
  branch:
319
351
  type: string
320
352
  default: main
353
+
354
+ layout:
355
+ - title: Agent Configuration
356
+ items:
357
+ - llmConnector
358
+ - mcpConnectors
321
359
  \`\`\`
322
360
 
323
361
  ---
@@ -328,27 +366,17 @@ agent:
328
366
 
329
367
  | Guideline | Rule |
330
368
  | ----------------------------| ------------------------------------------------------------------------------------------------------------------------------------------|
331
- | **Check existing first** | Always call \`harness_list(resource_type="agent")\` to see if an existing agent can solve the use case before creating new |
332
- | **Updating agents** | Use \`harness_get\` to retrieve current config, then \`harness_update\` (not \`harness_create\`) to modify. Only custom agents can be updated. |
333
- | **Agent spec format** | The \`spec\` field contains standalone agent YAML (version: 1, agent:, step:, run:, inputs:) |
334
- | **Connectors required** | All agents require \`llmConnector\` (required) and optional \`mcpConnectors\` (array) in the inputs section users must create these first |
335
- | **Connector placeholders** | Always use placeholders like \`your_llm_connector_id\` and notify users to replace with actual connector IDs |
336
- | **Prefer inputs** | Use \`inputs\` for configuration instead of environment variables reference with \`<+inputs.variableName>\` |
337
- | **No clone/platform** | Do NOT add \`clone\`, \`platform\`, \`os\`, \`arch\`, \`stages\`, or \`allowed_tools\` sectionsagents are standalone with simplified structure |
338
- | **Quality first** | Agent quality is paramountverify YAML structure, validate all references, ensure complete task instructions before creating |
339
-
340
-
341
- ---
342
-
343
- ## Best Practices
344
-
345
- - Use \`type: connector\` for LLM and MCP access
346
- - **Prefer inputs over environment variables** for all configuration
347
- - Include meaningful descriptions on all inputs
348
- - Provide detailed step-by-step instructions in \`task\` field with \`## RULES\` section
349
- - Adjust \`max_turns\` based on task complexity (100-200)
350
- - Always use placeholder connector IDs and notify users to replace them
351
- - Create connectors via Harness UI or \`harness_create\` with \`resource_type="connector"\``
369
+ | **Check existing first** | Always call \`harness_list(resource_type="agent")\` to see if an existing agent can solve the use case before creating new |
370
+ | **Updating agents** | Use \`harness_get\` to retrieve current config, then \`harness_update\` (not \`harness_create\`) to modify. Only custom agents can be updated. |
371
+ | **Generate UID** | Always derive \`uid\` as \`ca_<slug>\` (e.g. "Code Coverage Agent" → \`ca_code_coverage_agent\`) — matches platform UI \`nameToUid()\`. Pass it explicitly; do not rely on create API fallback. |
372
+ | **Agent spec format** | The \`spec\` field uses \`agent.step.group.steps\` structure the run step is nested inside a named group with \`name: Agent\`, \`if: <+Always>\`, \`id: agent\` |
373
+ | **Task in env** | Task instructions go in \`PLUGIN_TASK\` env var (multiline string). Max turns in \`PLUGIN_MAX_TURNS\`. There is no \`with:\` block. |
374
+ | **Expression syntax** | Use \`\${{inputs.fieldName}}\` inside env values. Use \`<+connectorInputs.resolveList(...)>\` for MCP server resolution. |
375
+ | **modelName is optional** | Do NOT add \`modelName\` input or \`ANTHROPIC_MODEL\` env var by default only add when the user explicitly requests it |
376
+ | **Input defaults** | Every non-required input that is referenced via \`\${{inputs.fieldName}}\` **must have a \`default\` value** omitting it causes a runtime error if the caller does not supply the value |
377
+ | **Connector placeholders** | Always use placeholders like \`your_llm_connector_id\` and \`your_mcp_connector_id\` and notify users to replace both LLM and MCP connector IDs with actual values before running the agent |
378
+ | **No clone/platform** | Do NOT add \`clone\`, \`platform\`, \`os\`, \`arch\`, or \`allowed_tools\` sections — agents are standalone with simplified structure |
379
+ | **Quality first** | Agent quality is paramount — verify YAML structure, validate all references, ensure complete task instructions before creating |`
352
380
  }
353
381
  }]
354
382
  }));