Control Plane
Server Details
Deploy and operate workloads, secrets, and networking across AWS, GCP, Azure, and private clouds.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP
- URL
Glama MCP Gateway
Connect through Glama MCP Gateway for full control over tool access and complete visibility into every call.
Full call logging
Every tool call is logged with complete inputs and outputs, so you can debug issues and audit what your agents are doing.
Tool access control
Enable or disable individual tools per connector, so you decide what your agents can and cannot do.
Managed credentials
Glama handles OAuth flows, token storage, and automatic rotation, so credentials never expire on your clients.
Usage analytics
See which tools your agents call, how often, and when, so you can understand usage patterns and catch anomalies.
Tool Definition Quality
Average 4.4/5 across 58 of 58 tools scored. Lowest: 3.3/5.
Every tool has a clearly distinct purpose. Domain, secret, policy, identity, workload, volumeset, template, and auxiliary tools (metrics, logs, terraform, search) are all well-separated. Even related tools like add_domain_route vs update_domain_route are clearly differentiated by description.
Most tools follow a consistent verb_noun pattern (e.g., create_gvc, update_workload, list_resources). However, there are minor deviations like 'expand_volumeset' (expand vs update), 'workload_reveal_secret' (with prefix), and 'convert_to_terraform' (preposition). These are understandable but not perfectly uniform.
With 58 tools, the count is high but justified by the breadth of Control Plane resources and operations. Each tool serves a specific, non-redundant purpose. The number is slightly above the ideal range, but the scope of the platform demands it.
The tool surface covers all major lifecycle operations for every resource type: create, read, update, delete, plus specialized actions (expand volumeset, reveal secret, exec into workloads, query metrics/logs, manage templates, export terraform). There are no obvious gaps that would hinder an agent's workflow.
Available Tools
58 toolsadd_domain_portAdd a Domain Port ListenerAIdempotentInspect
Add a new port listener to a domain. Minimal port is {number, protocol}; routes, cors, and tls are optional. Errors if a listener for that port number already exists — use the route/CORS/TLS tools to modify an existing listener instead. Recommended reading before first use: get_cpln_skill("domain") — the runbook for this tool family (read once per session).
| Name | Required | Description | Default |
|---|---|---|---|
| org | Yes | Organization slug (lowercase kebab-case). NEVER guess — if the user has not named one, ask. On org-not-found, stop and ask; do not retry variants. | |
| port | Yes | Complete port listener definition. Minimal valid listener: { "number": 443, "protocol": "http" }; routes, cors, and tls are optional. | |
| domain | Yes | Fully qualified domain name. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether the call succeeded. |
| data | No | The full machine-readable result — list rows, the resource object, query results. Read THIS, not just the summary. |
| summary | Yes | One-line summary of the result. |
| nextSteps | No | Recommended follow-up actions for this task, in order. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description contradicts the annotations: it says 'Errors if a listener for that port number already exists', which implies non-idempotent behavior, but the annotation has idempotentHint=true. No other behavioral details are disclosed beyond what annotations already provide, and the contradiction undermines trust.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with three sentences, front-loading the purpose and adding necessary usage guidance. No wasted words, though the contradiction slightly detracts from overall utility.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of nested objects and optional fields, the description covers the minimal requirement, error condition, and points to additional reading. The output schema exists, so return values are not needed. However, the contradiction with annotations leaves a gap in behavioral understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with detailed descriptions for all parameters. The description adds minimal value beyond summarizing the minimal port definition and noting optional fields. Baseline 3 is appropriate as the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb (Add) and resource (new port listener to a domain). It distinguishes from sibling tools like add_domain_route and remove_domain_port by specifying the exact action and resource.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells when to use this tool (to add a new port listener) and when not (if listener already exists, use other tools). It also recommends reading a runbook, providing context for first-time users.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_domain_routeAdd a Route to a Domain ListenerAIdempotentInspect
Append a route entry to an existing port listener. Minimal route is {workloadLink}; omit prefix/regex to match /. Routes are matched by prefix (default) or regex; the new route must not collide with an existing one. Use update_domain_route to replace an existing entry. Recommended reading before first use: get_cpln_skill("domain") — the runbook for this tool family (read once per session).
| Name | Required | Description | Default |
|---|---|---|---|
| org | Yes | Organization slug (lowercase kebab-case). NEVER guess — if the user has not named one, ask. On org-not-found, stop and ask; do not retry variants. | |
| route | Yes | Route entry forwarding listener traffic to a workload. Minimal valid route: { "workloadLink": "//gvc/{gvc}/workload/{name}" }. All matchers are optional; omit prefix/regex to match /. | |
| domain | Yes | Fully qualified domain name. | |
| portNumber | Yes | Existing listener port number to target. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether the call succeeded. |
| data | No | The full machine-readable result — list rows, the resource object, query results. Read THIS, not just the summary. |
| summary | Yes | One-line summary of the result. |
| nextSteps | No | Recommended follow-up actions for this task, in order. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate idempotent, non-destructive, and open world. The description adds the critical behavioral rule that the new route must not collide with an existing one, which explains potential failure modes. It does not detail exact error behavior but adds value beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, each earning its place: purpose and action, minimal route and matching options, and alternative tool plus learning resource. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of nested parameters and many sibling tools, the description covers the essential points: what the tool does, how to construct the route, collision constraint, and reference to further documentation. The output schema exists, so return values are not needed. Slightly missing mentions of preconditions (listener existence) but overall sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema coverage, the description still adds value by summarizing the minimal valid route structure and the default matching behavior (omit prefix/regex to match '/'). This helps the agent quickly understand the most common usage without reading the full schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Append a route entry to an existing port listener'), specifies the minimal route structure, and distinguishes from the sibling tool 'update_domain_route' by mentioning replacement. The purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says when to use (appending), when not to (must not collide), and provides an alternative ('Use update_domain_route to replace an existing entry'). It also recommends the runbook for first-time use, giving clear guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browse_templatesBrowse Template CatalogARead-onlyIdempotentInspect
List the Control Plane Template Catalog — production-ready stacks (Postgres, Redis, Kafka, MongoDB, nginx, …) you can install instead of hand-authoring resources. Returns each template’s name, category, latest version, and whether it creates its own GVC. Reach for this first whenever the user wants a database, cache, queue, or other common service. Pass filter to narrow. Then call get_template for versions and the example values.yaml.
| Name | Required | Description | Default |
|---|---|---|---|
| filter | No | Optional case-insensitive substring to narrow by name, category, or description (e.g. "database", "redis"). |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether the call succeeded. |
| data | No | The full machine-readable result — list rows, the resource object, query results. Read THIS, not just the summary. |
| summary | Yes | One-line summary of the result. |
| nextSteps | No | Recommended follow-up actions for this task, in order. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint, idempotentHint, destructiveHint, and the description clarifies it's a listing operation that returns specific fields (name, category, version, GVC info), fully consistent with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured, starting with the action 'List', providing examples, usage guidance, and next steps in a single focused paragraph with no redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Complete for a read-only browse tool with one parameter and an existing output schema; it covers what the tool returns, when to use it, and how to proceed (call get_template), leaving no gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already fully describes the filter parameter (case-insensitive substring), and the description only repeats 'Pass `filter` to narrow' without adding new semantic meaning, warranting the baseline score for high coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the tool lists the Control Plane Template Catalog with specific examples, and distinguishes itself from sibling tools like get_template by positioning itself as the first step for browsing common services.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells users to 'Reach for this first' when they want a database, cache, queue, etc., and advises passing a filter and then calling get_template for details, providing clear workflow guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
clear_domain_tlsClear TLS on a Domain ListenerADestructiveIdempotentInspect
Remove the TLS configuration from a port listener; the listener reverts to platform defaults. NOTE: on 443 with http/http2 the platform re-injects a default TLS block — TLS cannot be disabled there, only reset.
| Name | Required | Description | Default |
|---|---|---|---|
| org | Yes | Organization slug (lowercase kebab-case). NEVER guess — if the user has not named one, ask. On org-not-found, stop and ask; do not retry variants. | |
| domain | Yes | Fully qualified domain name. | |
| portNumber | Yes | Existing listener port number to target. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether the call succeeded. |
| data | No | The full machine-readable result — list rows, the resource object, query results. Read THIS, not just the summary. |
| summary | Yes | One-line summary of the result. |
| nextSteps | No | Recommended follow-up actions for this task, in order. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds useful behavioral context beyond annotations: it states the listener reverts to defaults and specifies that on port 443 with http/http2, TLS cannot be disabled only reset. This aligns with destructiveHint=true and idempotentHint=true, and provides nuance.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: two sentences with no wasted words. The main action is front-loaded, and the caveat about port 443 is provided immediately.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple nature of the tool and presence of output schema, the description is comprehensive enough. It explains the core behavior and a key edge case. Could mention that only TLS is affected, but overall sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptive parameter descriptions for org, domain, and portNumber. The description does not add additional parameter semantics beyond the schema, so baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool removes TLS configuration from a port listener and reverts it to platform defaults, with a specific note about port 443 behavior. This distinguishes it clearly from sibling tools like set_domain_tls.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for clearing TLS on ports other than 443, but does not explicitly state when to use this tool versus alternatives like set_domain_tls or remove_domain_port. The note about port 443 provides some guidance but overall lacks explicit when/when-not criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
convert_to_terraformConvert a manifest to TerraformARead-onlyIdempotentInspect
Convert a Control Plane resource manifest (YAML or JSON) into the equivalent Terraform (HCL). The manifest is first DRY-RUN VALIDATED against the API (no resource is created) — if it fails validation you get the error instead of HCL, so the returned Terraform always corresponds to a schema-valid resource. Pass gvc when the kind is GVC-scoped (workload, identity, volumeset). Set generateImports to also return ready-to-run terraform import commands. To convert an EXISTING resource instead of a manifest, use export_terraform.
| Name | Required | Description | Default |
|---|---|---|---|
| gvc | No | Required only when the manifest kind is GVC-scoped (workload, identity, volumeset). | |
| org | Yes | Organization slug (lowercase kebab-case). NEVER guess — if the user has not named one, ask. On org-not-found, stop and ask; do not retry variants. | |
| manifest | Yes | A single Control Plane resource manifest as YAML or JSON (must include `kind` and `name`). It is dry-run validated against the API before conversion, so an invalid manifest returns the validation error instead of HCL. | |
| generateImports | No | Also return the matching `terraform import` commands, one per resource with the import IDs prefilled. Run them after `terraform init` and before the first `terraform apply` so the existing resources are adopted into state instead of re-created. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether the call succeeded. |
| data | No | The full machine-readable result — list rows, the resource object, query results. Read THIS, not just the summary. |
| summary | Yes | One-line summary of the result. |
| nextSteps | No | Recommended follow-up actions for this task, in order. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description reveals that the manifest is dry-run validated before conversion (no resource created), returning errors instead of HCL for invalid manifests. This adds context beyond the readOnlyHint and idempotentHint annotations, detailing the exact behavior and error handling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise at four sentences, each serving a distinct purpose: stating the main function, explaining validation, indicating gvc usage, describing generateImports, and providing the sibling alternative. No redundant or unnecessary information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 4 parameters, existing output schema, and full annotations, the description covers the core purpose, validation behavior, parameter conditions, import command workflow, and alternative tool. It provides sufficient context for correct selection and invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds extra guidance for 'generateImports' (when to run the import commands) and reiterates the gvc condition. While most parameter details are already in the schema, the additional context for generateImports slightly increases value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'convert' and clearly identifies the resource (Control Plane manifest YAML/JSON to Terraform HCL). It distinguishes the tool from the sibling 'export_terraform', which is for existing resources, by explicitly stating the alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use this tool (for manifest conversion) and when not (for existing resources, use export_terraform). Also provides a condition for the 'gvc' parameter (required for GVC-scoped kinds) and explains the purpose of 'generateImports'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_domainCreate a DomainAInspect
Provision a Control Plane domain, map routes to workloads, and capture DNS records required for validation. Minimal port item is {number, protocol}; route items minimally need workloadLink and may omit prefix/regex to match /. Run this in the organization that will own the domain. Recommended reading before first use: get_cpln_skill("domain") — the runbook for this tool family (read once per session).
| Name | Required | Description | Default |
|---|---|---|---|
| org | Yes | Organization slug (lowercase kebab-case). NEVER guess — if the user has not named one, ask. On org-not-found, stop and ask; do not retry variants. | |
| tags | No | Optional tags; they behave like Kubernetes labels. Special behavior-changing tags: cpln/routeLimitOverride (raises the per-port route cap to 200), cpln/skipDNSCheck, cpln/wildcard (wildcard certificate). | |
| ports | Yes | Required listener list. Each listener minimally needs number and protocol; cors, routes, and tls are optional nested blocks. | |
| domain | Yes | Fully qualified domain name such as example.com or api.example.com. | |
| dnsMode | Yes | DNS delegation mode. cname — REQUIRED for apex domains (example.com) and the common choice for a single subdomain. ns — subdomains ONLY (delegates that subdomain zone to Control Plane); the platform rejects ns on an apex. | |
| gvcLink | No | Optional GVC link (full or shorthand //gvc/{name}). Each workload in the GVC gets a {workload}.{domain} subdomain. Mutually exclusive with workloadLink. | |
| description | No | Domain description so operators understand the purpose (treat it like a concise annotation). | |
| workloadLink | No | Optional workload link (e.g. //gvc/{gvc}/workload/{name}) to bind the ENTIRE domain to one workload — STATEFUL workloads only (the platform rejects serverless/standard here). For those, target the workload with ports[].routes instead. Mutually exclusive with gvcLink. | |
| acceptAllHosts | No | Accept any host header (defaults to false). | |
| certChallengeType | No | Certificate challenge type (http01 or dns01). Optional — omit for the platform default, and MUST be omitted for .internal domains (the platform rejects it there). | |
| acceptAllSubdomains | No | Accept any subdomain (defaults to false). |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether the call succeeded. |
| data | No | The full machine-readable result — list rows, the resource object, query results. Read THIS, not just the summary. |
| summary | Yes | One-line summary of the result. |
| nextSteps | No | Recommended follow-up actions for this task, in order. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate a write operation (readOnlyHint=false) and not destructive (destructiveHint=false). The description adds context about provisioning, DNS validation, and organizational ownership, but does not contradict annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one paragraph of about 4-5 sentences, front-loading the main purpose. It is reasonably concise without fluff, but could be slightly shorter.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (11 parameters, 4 required) and the existence of an output schema, the description covers the main purpose and minimal requirements. It lacks details on error states or special port behavior, but is adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds minimal parameter context (minimal port and route items) but does not significantly enhance understanding beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool provisions a Control Plane domain, maps routes to workloads, and captures DNS records. It specifies minimal requirements for ports and routes, distinguishing it from sibling tools like add_domain_port or update_domain.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description instructs to run the tool in the owning organization and recommends reading a runbook first. However, it does not explicitly state when to avoid this tool or compare it to alternatives like update_domain or add_domain_route.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_gvcCreate a Control Plane GVCAInspect
Create a new GVC (Global Virtual Cloud) — the deployment scope workloads live in. Set locations in this call: a GVC without locations cannot run workloads. If the user did not name the location(s), ASK first (list_resources kind="location" shows the options) — never guess a region and never create an empty GVC. Custom domains are configured with the Domain resource (create_domain), not on the GVC.
| Name | Required | Description | Default |
|---|---|---|---|
| env | No | Environment variables defined on the GVC. Workloads with inheritEnv=true redeploy when these values change. | |
| org | Yes | Organization slug (lowercase kebab-case). NEVER guess — if the user has not named one, ask. On org-not-found, stop and ask; do not retry variants. | |
| keda | No | KEDA autoscaling configuration for the GVC. | |
| name | Yes | Resource name (lowercase kebab-case, starts with a letter, 2-64 chars). Names are IMMUTABLE — renaming = delete + recreate (loses URL, DNS, policy links). | |
| tags | No | Optional tags (key-value pairs such as env=prod). Use them like Kubernetes labels for governance and search. | |
| tracing | No | Distributed tracing configuration. | |
| locations | No | Locations the GVC deploys to (friendly names like "frankfurt" or IDs like "aws-eu-central-1" — resolved server-side). REQUIRED unless locationOptions or locationQuery is used instead. If the user has not named one, ASK which location(s) to use (list_resources kind="location" shows the options); never pick one silently. | |
| description | No | Description (surfaced in tooling similar to a Kubernetes annotation). | |
| loadBalancer | No | GVC load balancer configuration. | |
| sidecarEnvoy | No | Advanced Envoy sidecar filters (maps to spec.sidecar.envoy). | |
| locationQuery | No | Dynamic placement: a query that selects locations. | |
| locationOptions | No | Per-location DNS geo-routing options (priority/latency). An alternative to `locations` for advanced routing. | |
| pullSecretLinks | No | Secret links for docker/ecr/gcp secrets so workloads can pull from private registries (e.g., /org/{org}/secret/{secret} or //secret/{secret}). | |
| aliasWorkloadLink | No | Link to a workload in this GVC whose canonical endpoint backs the GVC alias DNS record (e.g. //gvc/{gvc}/workload/{name}). NOTE: the alias is INERT while the target workload is suspended (suspend=true or maxScale=0) — it takes effect only while the workload runs. | |
| endpointNamingFormat | No | Subdomain format for the canonical workload endpoint. "default": {workload}-{gvc}.cpln.app; "org": {workload}-{gvc}.{org}.cpln.app; "legacy": legacy scheme. When omitted on create, the platform defaults to "org". |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether the call succeeded. |
| data | No | The full machine-readable result — list rows, the resource object, query results. Read THIS, not just the summary. |
| summary | Yes | One-line summary of the result. |
| nextSteps | No | Recommended follow-up actions for this task, in order. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=false and destructiveHint=false. The description adds no additional behavioral context beyond that. It does not mention side effects, permissions, or rate limits, but also does not contradict annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the purpose, and efficient. Every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (15 parameters, nested objects, output schema exists), the description covers critical usage points (locations, alternative tool) and avoids unnecessary detail. The output schema handles return values, so completeness is high.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description does not add new semantic information for parameters beyond what the schema already provides; it focuses on usage advice rather than parameter details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Create a new GVC (Global Virtual Cloud)' with a specific verb and resource. It distinguishes the tool from sibling tools like create_domain, create_identity, etc., by focusing on the GVC resource.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance: requires locations, advises to ask user first (not guess), warns against creating empty GVC, and directs to create_domain for custom domains. This fully addresses when and how to use the tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_identityCreate an IdentityBInspect
Create a new identity in a GVC. Optionally seed networkResources (agent-based) and nativeNetworkResources (PrivateLink / PSC). Identities are assigned to workloads via spec.identityLink. Recommended reading before first use: get_cpln_skill("access-control") — the runbook for this tool family (read once per session).
| Name | Required | Description | Default |
|---|---|---|---|
| aws | No | AWS cloud-identity block. Binds the identity to an AWS cloud account so workloads can assume the role. | |
| gcp | No | GCP cloud-identity block. Binds the identity to a GCP service account / bindings on cloud resources. | |
| gvc | Yes | GVC slug (lowercase kebab-case). Use the GVC the user named; otherwise discover with list_resources (kind="gvc") and let them choose — never guess (a wrong GVC targets the wrong environment). | |
| ngs | No | NGS cloud-identity block. Binds the identity to a NATS account for pub/sub permissions. | |
| org | Yes | Organization slug (lowercase kebab-case). NEVER guess — if the user has not named one, ask. On org-not-found, stop and ask; do not retry variants. | |
| name | Yes | Resource name (lowercase kebab-case, starts with a letter, 2-64 chars). Names are IMMUTABLE — renaming = delete + recreate (loses URL, DNS, policy links). | |
| tags | No | Optional tags for the identity. | |
| azure | No | Azure cloud-identity block. Binds the identity to an Azure managed identity with role assignments. | |
| description | No | Identity description. | |
| spicedbAccess | No | Grant access to SpiceDB clusters (max 5). | |
| memcacheAccess | No | Grant access to memcache clusters (max 5). | |
| networkResources | No | Agent-based network resources (cloud wormhole). Max 50 (nativeNetworkResources has its own separate limit); names/FQDNs share one namespace across both arrays. | |
| nativeNetworkResources | No | Optional cloud-native network resources (AWS PrivateLink, GCP PSC). Each item requires name, ports, and exactly one provider block. Max 50 (networkResources has its own separate limit); names/FQDNs share one namespace across both arrays. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether the call succeeded. |
| data | No | The full machine-readable result — list rows, the resource object, query results. Read THIS, not just the summary. |
| summary | Yes | One-line summary of the result. |
| nextSteps | No | Recommended follow-up actions for this task, in order. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide no hints (readOnlyHint=false, etc.), so the description must carry the burden. It states 'Create a new identity' indicating mutation, but fails to disclose side effects, permissions required, or any behavioral traits beyond creation. The return values are handled by output schema, but the creation process itself (e.g., synchronous, idempotent) is not mentioned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loading the core purpose and a usage recommendation. Every word earns its place, with no redundancy or fluff. It is appropriately concise for a tool with a rich input schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (13 parameters, nested objects), the description is too brief. It does not explain the structure of identity creation, how to choose between network resource types, or the relationship between identity and workload. The runbook recommendation helps, but the description itself is incomplete for a first-time user.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description mentions optional seeding of networkResources and nativeNetworkResources, but this is already clear from the schema. No additional parameter-specific meaning is added that goes beyond what the schema provides. Hence, the description adds minimal value here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool creates a new identity in a GVC, with optional network resource seeding. It uses a specific verb and resource, and the mention of assignment via spec.identityLink adds clarity. Although it doesn't explicitly differentiate from siblings like update_identity, the action 'create' is distinct enough.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description recommends reading a runbook before first use, which provides context. However, it does not explicitly state when to use this tool versus alternatives (e.g., update_identity), nor does it provide any exclusions or specific usage scenarios. The guidance is minimal.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_policyCreate a PolicyAInspect
Create a new policy with target kind, exactly one target scope (targetAll/targetLinks/targetQuery), and principal bindings (addPermissions plus at least one principal list — one without the other is an error). Recommended reading before first use: get_cpln_skill("access-control") — the runbook for this tool family (read once per session).
| Name | Required | Description | Default |
|---|---|---|---|
| org | Yes | Organization slug (lowercase kebab-case). NEVER guess — if the user has not named one, ask. On org-not-found, stop and ask; do not retry variants. | |
| name | Yes | Resource name (lowercase kebab-case, starts with a letter, 2-64 chars). Names are IMMUTABLE — renaming = delete + recreate (loses URL, DNS, policy links). | |
| tags | No | Optional tags for the policy (behave like Kubernetes labels for selectors and compliance). | |
| addUsers | No | User links to add (e.g., ["//user/alice"]) | |
| addGroups | No | Group links to add | |
| targetAll | No | Set to true to target all resources of the kind. Pick the target scope that matches intent (combining scopes is legal; target=all wins). | |
| targetKind | Yes | Target resource kind (e.g., "secret", "workload", "identity"). Only the kinds listed by get_permissions have meaningful permission schemas — confirm permission names there before binding. | |
| description | No | Policy description | |
| targetLinks | No | Target resource links (e.g., ["//secret/my-secret"]). GVC-scoped kinds (workload/identity/volumeset/dbcluster) need the gvc segment: //gvc/GVC/workload/NAME. Pick the target scope that matches intent (combining scopes is legal; target=all wins). | |
| targetQuery | No | Dynamically target resources matching a query (e.g. all secrets tagged env=prod). Pick the target scope that matches intent (combining scopes is legal; target=all wins). | |
| addIdentities | No | Identity links to add (e.g., ["//gvc/my-gvc/identity/my-identity"]). Identities are GVC-scoped — the gvc segment is required. | |
| addPermissions | No | Permissions to grant (e.g., ["reveal", "use"]). For the full list run get_permissions. Secret values need `reveal`, not `read`. | |
| addServiceAccounts | No | Service account links to add (e.g., ["//serviceaccount/sa-1"]) |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether the call succeeded. |
| data | No | The full machine-readable result — list rows, the resource object, query results. Read THIS, not just the summary. |
| summary | Yes | One-line summary of the result. |
| nextSteps | No | Recommended follow-up actions for this task, in order. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate non-read-only and non-destructive. The description adds important behavioral context: name immutability (renaming = delete+recreate), error conditions (missing principal list), and the need for naming conventions. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two well-structured sentences with critical information front-loaded. Every part is meaningful with no waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (13 params, nested objects, output schema exists), the description covers the essential constraints and setup. The output schema handles return values, so no need to describe them. Slightly incomplete regarding the full scope of targetQuery structure, but adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All 13 parameters have schema descriptions (100% coverage), so baseline is 3. The description adds value by explaining the relationship between parameters (exactly one target scope, principal bindings), which goes beyond individual parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool creates a new policy, specifies the required components (target kind, target scope, principal bindings), and is distinct from sibling tools like update_policy or delete_resource.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use and provides critical constraints (exactly one target scope, principal bindings with addPermissions plus at least one principal list). Recommends reading the runbook, but doesn't explicitly differentiate when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_secret_dictionaryCreate dictionary SecretBInspect
Create a dictionary secret. A map of arbitrary key→value string pairs. Provide the typed fields below; the server assembles the secret data.
| Name | Required | Description | Default |
|---|---|---|---|
| org | Yes | Organization slug (lowercase kebab-case). NEVER guess — if the user has not named one, ask. On org-not-found, stop and ask; do not retry variants. | |
| name | Yes | Resource name (lowercase kebab-case, starts with a letter, 2-64 chars). Names are IMMUTABLE — renaming = delete + recreate (loses URL, DNS, policy links). | |
| tags | No | Optional tags for classifying the secret (work like Kubernetes labels for search/policy targeting). | |
| entries | Yes | Key→value string pairs. Keys must match [a-zA-Z0-9._-]; values are arbitrary strings. | |
| description | No | Secret description — capture operator intent (works like a Kubernetes annotation). |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether the call succeeded. |
| data | No | The full machine-readable result — list rows, the resource object, query results. Read THIS, not just the summary. |
| summary | Yes | One-line summary of the result. |
| nextSteps | No | Recommended follow-up actions for this task, in order. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description only restates 'create' and notes server assembly, adding minimal context beyond annotations. Annotations already indicate it's not read-only and not destructive, so description provides little new behavioral insight.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, 18 words, front-loaded with purpose. Every word earns its place; no fluff or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite output schema existing (from context signals), the description omits success/error states, uniqueness constraints (e.g., name immutability mentioned in schema but not reinforced), and behavior on duplicate entries. Adequate but with notable gaps for a creation tool with nested parameters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with detailed descriptions for each parameter. Description adds only generic 'provide the typed fields below', which does not enhance understanding beyond the schema. Baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'create' and the resource 'dictionary secret', and explains it is a map of arbitrary key→value string pairs. This distinguishes it from sibling secret types like docker, ecr, opaque, tls.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool vs alternatives (e.g., when to use dictionary vs opaque secret). No exclusions or context for selection among the many sibling secret creation tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_secret_dockerCreate Docker registry SecretAInspect
Create a docker secret. A Docker registry pull secret (the docker config JSON). Provide the typed fields below; the server assembles the secret data.
| Name | Required | Description | Default |
|---|---|---|---|
| org | Yes | Organization slug (lowercase kebab-case). NEVER guess — if the user has not named one, ask. On org-not-found, stop and ask; do not retry variants. | |
| name | Yes | Resource name (lowercase kebab-case, starts with a letter, 2-64 chars). Names are IMMUTABLE — renaming = delete + recreate (loses URL, DNS, policy links). | |
| tags | No | Optional tags for classifying the secret (work like Kubernetes labels for search/policy targeting). | |
| description | No | Secret description — capture operator intent (works like a Kubernetes annotation). | |
| dockerConfigJson | Yes | The FULL Docker config JSON (the ~/.docker/config.json contents, with an "auths" object) as a string. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether the call succeeded. |
| data | No | The full machine-readable result — list rows, the resource object, query results. Read THIS, not just the summary. |
| summary | Yes | One-line summary of the result. |
| nextSteps | No | Recommended follow-up actions for this task, in order. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=false and destructiveHint=false. The description adds the behavioral note that 'the server assembles the secret data', providing some additional context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences that immediately convey purpose and process. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the core purpose and input method. With an output schema present, it does not need to detail return values. Slight omission: no mention of required vs optional parameters, but the schema covers that.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all parameters. The description adds a general instruction about typed fields but does not enhance parameter meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action 'Create', the resource 'docker secret' / 'Docker registry pull secret', and distinguishes from sibling secret types by specifying the Docker registry scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for Docker registry authentication via 'Docker registry pull secret', but does not explicitly compare with alternatives like create_secret_opaque or create_secret_tls. Context is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_secret_ecrCreate AWS ECR pull SecretAInspect
Create a ecr secret. An ECR pull secret (AWS creds scoped to one or more ECR repos). Provide the typed fields below; the server assembles the secret data.
| Name | Required | Description | Default |
|---|---|---|---|
| org | Yes | Organization slug (lowercase kebab-case). NEVER guess — if the user has not named one, ask. On org-not-found, stop and ask; do not retry variants. | |
| name | Yes | Resource name (lowercase kebab-case, starts with a letter, 2-64 chars). Names are IMMUTABLE — renaming = delete + recreate (loses URL, DNS, policy links). | |
| tags | No | Optional tags for classifying the secret (work like Kubernetes labels for search/policy targeting). | |
| repos | Yes | ECR repository URIs this credential may pull from (at least one), e.g. 123456789012.dkr.ecr.us-east-1.amazonaws.com/myrepo. | |
| roleArn | No | Optional IAM role ARN to assume (arn:…). | |
| accessKey | Yes | AWS access key ID (starts with AKIA…). | |
| secretKey | Yes | AWS secret access key. | |
| externalId | No | Optional STS external ID for the assumed role. | |
| description | No | Secret description — capture operator intent (works like a Kubernetes annotation). |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether the call succeeded. |
| data | No | The full machine-readable result — list rows, the resource object, query results. Read THIS, not just the summary. |
| summary | Yes | One-line summary of the result. |
| nextSteps | No | Recommended follow-up actions for this task, in order. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=false and destructiveHint=false, so the description's statement 'the server assembles the secret data' adds a minor behavioral note about data assembly. However, it does not disclose error behavior, idempotency, or side effects beyond creation. The description adds limited value over annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise with two short sentences, no redundant information, and front-loads the main action. Every word serves a purpose, making it efficient for an agent to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 9 parameters (5 required) and an output schema exists, the description is minimal. It does not explain what the server returns, any prerequisites (e.g., existing ECR repository), or post-creation effects. While output schema reduces the need for return value details, the creation process itself is underspecified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description states 'Provide the typed fields below; the server assembles the secret data', which does not add meaningful semantic detail beyond what each parameter's description already provides. No additional context is given for parameters like constraints or relationships.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Create a ecr secret' with specific resource type 'ECR pull secret (AWS creds scoped to one or more ECR repos)'. This distinguishes it from sibling tools like create_secret_docker or create_secret_opaque, as it is purpose-built for ECR pull credentials.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not explicitly guide when to use this tool versus alternatives. While the name and context imply it is for ECR pull secrets, there is no mention of prerequisites, when not to use it, or comparisons with other secret types. Sibling tools cover different secret formats, but no guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_secret_opaqueCreate opaque SecretAInspect
Create a opaque secret. A single freeform value (the most common type). Provide the typed fields below; the server assembles the secret data.
| Name | Required | Description | Default |
|---|---|---|---|
| org | Yes | Organization slug (lowercase kebab-case). NEVER guess — if the user has not named one, ask. On org-not-found, stop and ask; do not retry variants. | |
| name | Yes | Resource name (lowercase kebab-case, starts with a letter, 2-64 chars). Names are IMMUTABLE — renaming = delete + recreate (loses URL, DNS, policy links). | |
| tags | No | Optional tags for classifying the secret (work like Kubernetes labels for search/policy targeting). | |
| payload | Yes | The secret value (plaintext, or a base64 string when encoding="base64"). | |
| encoding | No | Encoding of payload — "plain" (default) or "base64". | |
| description | No | Secret description — capture operator intent (works like a Kubernetes annotation). |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether the call succeeded. |
| data | No | The full machine-readable result — list rows, the resource object, query results. Read THIS, not just the summary. |
| summary | Yes | One-line summary of the result. |
| nextSteps | No | Recommended follow-up actions for this task, in order. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint=false, destructiveHint=false), the description adds no behavioral traits. It states that the server assembles the data, but does not disclose potential failures, idempotency, or whether existing secrets are overwritten. For a create operation, more transparency about side effects would be helpful.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loads the key information, and contains no unnecessary words. Every sentence serves a purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema and comprehensive schema descriptions, the description is largely complete. It could briefly mention the output (e.g., secret metadata) but the output schema likely covers that. For a create tool, this is sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with detailed individual parameter descriptions. The tool description adds minimal value beyond the schema—it only generically mentions 'typed fields' and 'server assembles the secret data.' Baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Create') and the resource ('opaque secret'), and distinguishes it from sibling secret tools by noting it is the most common type for a single freeform value. It also directs the user to provide typed fields, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies this is for single freeform values (the most common type), but does not explicitly state when to use this tool versus alternatives like create_secret_dictionary or create_secret_tls. No 'when not to use' or exclusion criteria are provided; the name alone does the differentiation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_secret_tlsCreate TLS SecretAInspect
Create a tls secret. A TLS certificate (and optional private key / chain). Provide the typed fields below; the server assembles the secret data.
| Name | Required | Description | Default |
|---|---|---|---|
| key | No | PEM-encoded private key for the certificate. | |
| org | Yes | Organization slug (lowercase kebab-case). NEVER guess — if the user has not named one, ask. On org-not-found, stop and ask; do not retry variants. | |
| cert | Yes | PEM-encoded TLS certificate. | |
| name | Yes | Resource name (lowercase kebab-case, starts with a letter, 2-64 chars). Names are IMMUTABLE — renaming = delete + recreate (loses URL, DNS, policy links). | |
| tags | No | Optional tags for classifying the secret (work like Kubernetes labels for search/policy targeting). | |
| chain | No | Optional PEM-encoded certificate chain. | |
| description | No | Secret description — capture operator intent (works like a Kubernetes annotation). |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether the call succeeded. |
| data | No | The full machine-readable result — list rows, the resource object, query results. Read THIS, not just the summary. |
| summary | Yes | One-line summary of the result. |
| nextSteps | No | Recommended follow-up actions for this task, in order. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate non-readOnly and non-destructive behavior. The description adds minimal behavioral context beyond stating creation and that the server assembles the data. No contradictions, but no significant additional disclosure beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three short sentences, front-loading the core purpose. Every sentence is necessary and free of fluff, achieving maximum conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has an output schema and 100% parameter documentation, the description is nearly complete. It briefly explains the assembly process, but lacks mention of immutability or output structure, though these are covered in the schema. Slight gap in summarizing key constraints.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, providing thorough parameter details. The description's mention of 'typed fields' and 'server assembles' adds little new meaning; the schema already adequately documents each parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states 'Create a tls secret' and specifies the components (certificate, private key, chain). It clearly distinguishes from other secret types like create_secret_opaque or create_secret_docker, making the tool's purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not provide guidance on when to use this tool over alternatives such as create_secret_opaque or update_secret_tls. It lacks explicit context for when a TLS secret is appropriate, leaving the agent to infer from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_volumesetCreate a VolumesetAInspect
Create a new volumeset in a GVC with explicit performance class, filesystem type, initial capacity, snapshot policy, and (optional) autoscaling. Performance class and filesystem type are IMMUTABLE — choose carefully. xfs/ext4 support snapshots; shared is read-write-many but cannot be snapshotted. Snapshot defaults injected when omitted: createFinalSnapshot=true, retentionDuration "7d". customEncryption (customer-managed KMS keys) cannot be set here — apply a full manifest with the CLI (cpln apply), calling get_resource_schema (kind=volumeset) first. Mount separately via mount_volumeset_to_workload (ext4/xfs need a stateful or vm workload; shared mounts on any workload type).
| Name | Required | Description | Default |
|---|---|---|---|
| gvc | Yes | GVC slug (lowercase kebab-case). Use the GVC the user named; otherwise discover with list_resources (kind="gvc") and let them choose — never guess (a wrong GVC targets the wrong environment). | |
| org | Yes | Organization slug (lowercase kebab-case). NEVER guess — if the user has not named one, ask. On org-not-found, stop and ask; do not retry variants. | |
| name | Yes | Resource name (lowercase kebab-case, starts with a letter, 2-64 chars). Names are IMMUTABLE — renaming = delete + recreate (loses URL, DNS, policy links). | |
| tags | No | Optional tags (treat like Kubernetes labels for governance and search). | |
| snapshots | No | Snapshot policy. | |
| autoscaling | No | Reactive + predictive autoscaling settings. | |
| description | No | Volumeset description so operators know what data lives here. | |
| mountOptions | No | Mount options — only for shared-filesystem volume sets (resources provisioned per mount point). | |
| fileSystemType | No | Filesystem type. Immutable. xfs/ext4 support snapshots; shared is RWX without snapshots (default xfs). | |
| initialCapacity | Yes | Initial capacity in GB. Performance-class minimums apply (general-purpose-ssd ≥10, high-throughput-ssd ≥200). Max 65536. | |
| performanceClass | No | Performance class. Immutable after creation — choose carefully (default general-purpose-ssd). | |
| storageClassSuffix | No | Self-hosted location override for storage class lookup. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether the call succeeded. |
| data | No | The full machine-readable result — list rows, the resource object, query results. Read THIS, not just the summary. |
| summary | Yes | One-line summary of the result. |
| nextSteps | No | Recommended follow-up actions for this task, in order. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
While annotations indicate this is not read-only or destructive, the description elaborates on immutable fields (performance class, filesystem type, name), snapshot default injection, and renaming consequences. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is longer than average but every sentence adds critical information. It is front-loaded with the main purpose and well-structured. Could be slightly more concise, but the detail is justified given complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 12 parameters, required fields, nested objects, and existing output schema, the description covers all essential behavioral aspects: creation steps, immutability, snapshot defaults, limitations, and related tools. No gaps identified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description adds significant value beyond the schema: explains how initialCapacity minimums depend on performanceClass, that mountOptions only apply to shared filesystem, and the distinction between fileSystemType options (xfs/ext4 support snapshots, shared does not).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool creates a volumeset with explicit parameters, distinguishing it from siblings like expand_volumeset, mount_volumeset_to_workload, and update_volumeset. It provides a specific verb-resource combination and scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use this tool (create a volumeset) and when not to use it (customEncryption cannot be set here, use cpln apply instead). It also directs to use get_resource_schema first and mentions mounting via mount_volumeset_to_workload.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_workloadCreate a WorkloadAInspect
Create a serverless/standard/stateful workload — or a SCHEDULED JOB by setting type: "cron". Define the container(s) in the typed containers[] array (the only way — there are no flat image/cpu/port fields) and scaling in the single autoscaling block. For a cron workload set type: "cron" and a required schedule (plus optional job policy); autoscaling/capacityAI/timeoutSeconds/debug do not apply to cron and are rejected. Decide reachability IN THIS CALL: a user-facing service needs public: true (or an explicit firewallConfig); omitted = deny-by-default, no internet access — do not create closed and patch the firewall afterward. Use the production-grade defaults from get_cpln_rules: explicit readiness + liveness probes, minScale ≥ 2 for user-facing services, CPU/memory sized to the runtime (NOT the platform defaults of 50m / 128Mi), autoscaling metric matched to traffic shape, never scale-to-zero unless the user asked for it by name. Type and name are immutable — changing either = delete + recreate. For databases / caches / queues / brokers / search / gateways / WAF / S3-compatible storage, propose the matching Template Catalog entry first (see get_cpln_rules). Recommended reading before first use: get_cpln_skill("workload") — the runbook for this tool family (read once per session).
| Name | Required | Description | Default |
|---|---|---|---|
| gvc | Yes | GVC slug (lowercase kebab-case). Use the GVC the user named; otherwise discover with list_resources (kind="gvc") and let them choose — never guess (a wrong GVC targets the wrong environment). | |
| org | Yes | Organization slug (lowercase kebab-case). NEVER guess — if the user has not named one, ask. On org-not-found, stop and ask; do not retry variants. | |
| name | Yes | Workload name (lowercase kebab-case, must start with a letter, max 49 chars, cannot end with -headless). The name is IMMUTABLE — "renaming" requires delete + recreate (loses public URL, internal DNS, policy targetLinks). | |
| tags | No | Optional tags (key/value pairs such as env=prod). | |
| type | No | Workload type (default: standard — always-running). Use "cron" for a SCHEDULED JOB: then `schedule` is REQUIRED and the job-policy fields apply, while autoscaling/capacityAI/timeoutSeconds/debug do NOT (they are rejected — probes and autoscaling have no meaning for a cron run). vm is not supported. | standard |
| debug | No | Enable or disable spec.defaultOptions.debug. Not valid with type: "cron". | |
| public | No | Convenience shortcut: opens the external firewall BOTH ways — inbound 0.0.0.0/0 AND outbound 0.0.0.0/0 (a public service almost always needs both directions). Mutually exclusive with firewallConfig, and an explicit firewallConfig overrides it. OMITTED = no external access (deny-by-default) — decide exposure here, at create time; do not create closed and patch the firewall open afterward. | |
| suspend | No | Enable or disable spec.defaultOptions.suspend (no replicas run while suspended; for a cron workload this pauses scheduled runs) | |
| schedule | No | REQUIRED when type is "cron" (and ONLY valid then): a NUMERIC 5-field cron expression like "0 */6 * * *" (no @daily macros, no MON/JAN names). Omit entirely for serverless/standard/stateful. | |
| capacityAI | No | Enable or disable spec.defaultOptions.capacityAI (default ON for serverless/standard, stripped on stateful/cron; explicit true is rejected with the cpu metric and with GPUs). Not valid with type: "cron". | |
| containers | Yes | Required full container specs (1-8). Each item minimally needs name and image; all other container fields are optional. This is the only way to define containers — there are no flat image/cpu/port fields. | |
| autoscaling | No | Autoscaling configuration → spec.defaultOptions.autoscaling (metric, target, minScale, maxScale, scaleToZeroDelay, maxConcurrency, keda). This is the ONLY place scaling is configured. Omit to use platform defaults (minScale 1, maxScale 5). | |
| description | No | Workload description | |
| historyLimit | No | Number of completed job instances to retain (default 5) | |
| identityLink | No | Identity link granting 3rd-party cloud resource access, e.g. //identity/my-id | |
| restartPolicy | No | What to do when a job instance fails | |
| firewallConfig | No | Inbound/outbound access control. Access is restricted by default. | |
| timeoutSeconds | No | Set spec.defaultOptions.timeoutSeconds — max request duration (platform default 5s; serverless caps at 600) | |
| concurrencyPolicy | No | What to do when a run is due while a prior run is still active (default Forbid) | |
| supportDynamicTags | No | Enable or disable spec.supportDynamicTags (detects image digest changes). | |
| activeDeadlineSeconds | No | Max seconds to wait for the job to complete before it is stopped |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether the call succeeded. |
| data | No | The full machine-readable result — list rows, the resource object, query results. Read THIS, not just the summary. |
| summary | Yes | One-line summary of the result. |
| nextSteps | No | Recommended follow-up actions for this task, in order. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses important behavioral traits beyond annotations: type and name immutability (delete+recreate), cron-specific parameter rejections, public omitted meaning deny-by-default, secret reference reveal permission, and platform defaults for probes and scaling. No contradiction with annotations (readOnlyHint=false, openWorldHint=true, destructiveHint=false).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but well-structured with line breaks and bold for emphasis. It front-loads the main purpose and provides detailed guidance. Given the tool's complexity (21 parameters), the length is justified, though a more streamlined version could be slightly more concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex tool with nested schemas and 4 required parameters, the description is thorough: covers immutable fields, cron specifics, firewall decisions, secret handling, KEDA prerequisites, and references to related tools. Output schema exists, so return values need not be detailed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description adds value by summarizing key parameter constraints (e.g., containers is the only way to define containers, autoscaling metric defaults per type, cron parameter exclusions) but some repetition of schema details exists.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool creates serverless/standard/stateful workloads or cron jobs. It differentiates from siblings by explicitly mentioning that for databases/caches/etc. the Template Catalog should be proposed first, and it references other tools like get_cpln_rules and get_cpln_skill.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Extensive guidance is provided: when to use cron vs other types, when to set public, how to define containers in the typed array, autoscaling restrictions per type, and explicit instructions to decide firewall exposure at create time. It also advises against guessing org/gvc and recommends reading the runbook.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_resourceDelete a ResourceADestructiveInspect
Delete one Control Plane resource by kind + name — the single delete tool for every deletable kind. Deletes on the call (your client confirms the write first). Before calling, read the resource and tell the user what the deletion removes and which dependents break, and proceed only on their explicit approval. Deletion is permanent. Never invent a name.
| Name | Required | Description | Default |
|---|---|---|---|
| gvc | No | GVC slug — REQUIRED only for GVC-scoped kinds (workload, identity, volumeset); ignored otherwise. | |
| org | Yes | Organization slug (lowercase kebab-case). NEVER guess — if the user has not named one, ask. On org-not-found, stop and ask; do not retry variants. | |
| kind | Yes | Resource kind to delete. One of: workload, identity, volumeset, gvc, secret, policy, group, domain, cloudaccount, agent, ipset, mk8s, serviceaccount, image, user. | |
| name | Yes | Name of the resource to delete. Read the resource and present what the deletion removes and breaks, then call only on the user's explicit approval. Never invent a name. Most kinds use lowercase kebab-case names; exceptions: domain = the full hostname ("app.example.com"), image = NAME or NAME:TAG ("my-app:v1.2"). |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether the call succeeded. |
| data | No | The full machine-readable result — list rows, the resource object, query results. Read THIS, not just the summary. |
| summary | Yes | One-line summary of the result. |
| nextSteps | No | Recommended follow-up actions for this task, in order. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate destructiveHint=true, and the description adds crucial context: 'Deletes on the call (your client confirms the write first),' 'Deletion is permanent,' and the prerequisite to read the resource first. This builds trust beyond what annotations alone provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Every sentence is purposeful: purpose, confirmation behavior, precondition, permanence, and naming guidelines. No wasted words despite being a single paragraph; it is front-loaded with the core action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the tool's purpose, preconditions, side effects (permanent), and parameter usage guidance. With an output schema present, not detailing return values is acceptable. The description is complete for safe and effective use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema description coverage, the description still adds significant value: for 'org' it warns 'NEVER guess' and how to handle errors; for 'gvc' clarifies it's required only for certain kinds; for 'name' gives examples for domain and image; for 'kind' lists all values. The schema descriptions alone would not capture this behavioral nuance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states 'Delete one Control Plane resource by kind + name' and positions itself as 'the single delete tool for every deletable kind,' providing a specific verb and resource while distinguishing it from sibling tools that are not deletion-oriented.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear guidance: 'Before calling, read the resource and tell the user what the deletion removes and which dependents break, and proceed only on their explicit approval.' Also advises 'Never invent a name.' Though it does not explicitly mention alternative tools, there are no other delete tools among siblings, so the guidance is strong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
expand_volumesetExpand Volumeset VolumeAIdempotentInspect
Increase the storage capacity of a volume in a volumeset. Live operation — no downtime, no data loss. Throttled: expansion is throttled to 4 per volume per rolling 24 hours — an HTTP 429 means the rolling window is exhausted (waiting briefly will NOT help; wait for the oldest expansion to age out). Available for all filesystem types (ext4, xfs, shared). Recommended reading before first use: get_cpln_skill("stateful-storage") — the runbook for this tool family (read once per session).
| Name | Required | Description | Default |
|---|---|---|---|
| gvc | Yes | GVC slug (lowercase kebab-case). Use the GVC the user named; otherwise discover with list_resources (kind="gvc") and let them choose — never guess (a wrong GVC targets the wrong environment). | |
| org | Yes | Organization slug (lowercase kebab-case). NEVER guess — if the user has not named one, ask. On org-not-found, stop and ask; do not retry variants. | |
| name | Yes | Resource name (lowercase kebab-case, starts with a letter, 2-64 chars). Names are IMMUTABLE — renaming = delete + recreate (loses URL, DNS, policy links). | |
| location | Yes | Location of the volume to expand (e.g. aws-us-east-2) | |
| volumeIndex | Yes | Index of the volume to expand | |
| timeoutSeconds | No | Maximum time (seconds) to wait for the resize to complete. Optional — server applies a default if omitted. | |
| newStorageCapacity | Yes | New storage capacity in GB (must be larger than current size). Max 65536. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether the call succeeded. |
| data | No | The full machine-readable result — list rows, the resource object, query results. Read THIS, not just the summary. |
| summary | Yes | One-line summary of the result. |
| nextSteps | No | Recommended follow-up actions for this task, in order. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations (readOnlyHint=false, idempotentHint=true, destructiveHint=false) are minimal. The description adds critical behavioral details: live operation, no data loss, throttling behavior, filesystem compatibility, and the recommendation to read a runbook. This goes well beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (3 sentences), front-loaded with the primary action, and includes essential behavioral notes without fluff. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 7 parameters (6 required), an output schema, and annotations, the description covers all essential aspects: what the tool does, safety profile (no downtime/data loss), throttling constraints, filesystem compatibility, and a recommended runbook. No critical information is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and each parameter already has detailed descriptions in the schema (e.g., GVC slug usage rules, immutability of names). The tool description adds no additional parameter-specific meaning, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states 'Increase the storage capacity of a volume in a volumeset,' providing a specific verb and resource. This clearly distinguishes it from sibling tools like create_volumeset, update_volumeset, and mount_volumeset_to_workload.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear usage context: it is a live operation with no downtime, details throttling limits (4 per volume per 24 hours) and HTTP 429 handling, and recommends reading a runbook. However, it does not explicitly contrast with alternatives or state when not to use this tool, missing a minor opportunity for exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_terraformExport an existing resource to TerraformARead-onlyIdempotentInspect
Generate Terraform (HCL) for EXISTING Control Plane resources from a self link. Single resource (/org/acme/gvc/prod/workload/api) or bulk by path depth — /org/acme exports the whole org, /org/acme/gvc/prod/workload exports every workload in a GVC. Set generateImports to get ready-to-run terraform import commands for adopting the resources into Terraform state, and includeDependencies to pull in referenced resources. Exported secrets embed their REVEALED plaintext values — without includeSecretValues they are redacted, and a ref that targets secrets directly is refused. An unsupported kind is rejected with the supported list (list_terraform_kinds, full profile, enumerates them up front). For an in-memory manifest, use convert_to_terraform. Recommended reading: get_cpln_skill("iac-terraform-pulumi").
| Name | Required | Description | Default |
|---|---|---|---|
| resource | Yes | Self link of an existing resource, e.g. `/org/acme/gvc/prod/workload/api` (a full `https://api.cpln.io/org/...` URL is also accepted). Use a shorter path for a bulk export: `/org/acme` (whole org) or `/org/acme/gvc/prod/workload` (all workloads in a GVC). | |
| generateImports | No | Also return the matching `terraform import` commands, one per resource with the import IDs prefilled. Run them after `terraform init` and before the first `terraform apply` so the existing resources are adopted into state instead of re-created. | |
| includeDependencies | No | Also export referenced/dependent resources so the generated HCL is self-contained. | |
| includeSecretValues | No | Exported secrets embed their REVEALED PLAINTEXT values in the HCL (the exporter follows the reveal link). false (default): refs that directly target secrets are refused, and an export that pulls secrets in via includeDependencies/org-root is refused too (re-run with this flag to allow it). true: values pass through and the result is labeled sensitive — set ONLY after the user explicitly approves. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether the call succeeded. |
| data | No | The full machine-readable result — list rows, the resource object, query results. Read THIS, not just the summary. |
| summary | Yes | One-line summary of the result. |
| nextSteps | No | Recommended follow-up actions for this task, in order. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnly, idempotent, non-destructive. Description adds important behavioral details: secrets embed revealed plaintext, refs targeting secrets directly are refused without includeSecretValues, unsupported kinds return supported list. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is comprehensive yet concise, covering all key aspects in a dense paragraph. Some restructuring could improve readability, but every sentence adds value and is front-loaded with core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given complexity (4 params, bulk export, secrets handling, output schema exists), description covers input, flags, behavioral nuances, error handling, and references sibling tools. Users have sufficient info to use correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but description adds significant value beyond schema: explains self link path depth, usage of generateImports after terraform init, includeDependencies for self-containment, and security implications of includeSecretValues. Provides actionable context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it generates Terraform HCL for existing resources from a self link, differentiating single vs. bulk export. It explicitly distinguishes from sibling tool 'convert_to_terraform' which handles in-memory manifests.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance on when to use this tool (export existing resources) vs. convert_to_terraform. Details when to set generateImports, includeDependencies, and includeSecretValues with clear context. Recommends reading get_cpln_skill for further guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_cpln_rulesGet Control Plane Operating GuideARead-onlyIdempotentInspect
Returns the Control Plane operating guide — the resource model, how secrets/images/workloads/domains fit together, production-grade defaults, how to verify a change landed, and how to handle failures. Read it once per session before the first create/update/delete, and any time a multi-resource task spans unfamiliar ground.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether the call succeeded. |
| data | No | The full machine-readable result — list rows, the resource object, query results. Read THIS, not just the summary. |
| summary | Yes | One-line summary of the result. |
| nextSteps | No | Recommended follow-up actions for this task, in order. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, so the safety profile is covered. The description adds behavioral context about content scope and usage pattern, but does not contradict annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no wasted words. Front-loaded with the purpose and then usage advice. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With zero parameters and an output schema present, the description fully explains what the tool returns and provides usage context. No gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, so the description correctly omits parameter details. Baseline score of 4 is appropriate as no additional parameter information is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it returns the Control Plane operating guide and lists the specific topics covered (resource model, secrets/images/workloads/domains, defaults, verification, failure handling). The verb 'Returns' and resource 'operating guide' are specific, and it distinguishes from sibling tools which are all about specific actions (create, update, delete, etc.)
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly advises reading it once per session before the first create/update/delete, and anytime a multi-resource task is unfamiliar. This provides clear when-to-use guidance and implies when not to use (skip if familiar).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_cpln_skillGet a Control Plane SkillARead-onlyIdempotentInspect
Returns the runbook for one Control Plane task family — how to use the feature correctly, the platform constraints that are easy to miss, when it is the WRONG tool, and what to do with the result. Tools that belong to a family name their skill as recommended reading; read it once per session before the first such operation.
| Name | Required | Description | Default |
|---|---|---|---|
| skill | Yes | Skill to read — tools name their skill as "recommended reading". Available: access-control, audit-compliance, autoscaling-capacity, cdn-rate-limiting, cpln, domain, environment-promotion, external-logging, firewall-networking, gitops-cicd, iac-terraform-pulumi, image, ipset-load-balancing, k8s-operator, logql-observability, metrics-observability, migration-patterns, mk8s-byok, native-networking, org-management, query-spec, setup-agent, setup-cloud-access, setup-secret, stateful-storage, tag, template-catalog, workload, workload-security, workload-troubleshooting. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether the call succeeded. |
| data | No | The full machine-readable result — list rows, the resource object, query results. Read THIS, not just the summary. |
| summary | Yes | One-line summary of the result. |
| nextSteps | No | Recommended follow-up actions for this task, in order. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true, idempotentHint=true, destructiveHint=false. The description adds value by detailing the contents of the runbook (constraints, wrong tool indications, result usage), going beyond the annotations to inform the agent of behavioral traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, each serving a distinct purpose: first explains what the runbook contains, second explains when to use the tool. No redundant information, front-loaded with key concepts.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has one parameter, full annotation coverage, and an output schema (not shown), the description covers purpose, usage, behavioral traits, and result handling. It is complete for the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with a complete enum listing. The description adds 'Skill to read — tools name their skill as "recommended reading".' which provides context but does not significantly extend the schema's own description. Baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description explicitly states: 'Returns the runbook for one Control Plane task family — how to use the feature correctly, the platform constraints that are easy to miss, when it is the WRONG tool, and what to do with the result.' This clearly identifies the verb (returns) and resource (runbook), and distinguishes it from sibling tools which are concrete actions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage guidance: 'Tools that belong to a family name their skill as recommended reading; read it once per session before the first such operation.' It also states the runbook itself will indicate when the tool is the WRONG choice, offering clear context for when to use this tool versus alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_installed_templateGet Installed Template ResourcesARead-onlyIdempotentInspect
Show an installed release’s current status, revision, and the Control Plane resources it created (kind, name, link). Requires the token to have secret reveal permission (release state is stored in a helm-release secret).
| Name | Required | Description | Default |
|---|---|---|---|
| org | Yes | Organization slug (lowercase kebab-case). NEVER guess — if the user has not named one, ask. On org-not-found, stop and ask; do not retry variants. | |
| name | Yes | Release name — the unique, immutable identifier for this installed instance within the org. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether the call succeeded. |
| data | No | The full machine-readable result — list rows, the resource object, query results. Read THIS, not just the summary. |
| summary | Yes | One-line summary of the result. |
| nextSteps | No | Recommended follow-up actions for this task, in order. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true and idempotentHint=true. The description adds that the tool requires secret reveal permission because release state is stored in a helm-release secret, which is valuable behavioral context beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is a single clear sentence plus a short permission note, with no wasted words. Front-loaded with the primary action and return values.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema, the description covers all necessary aspects: what is returned (status, revision, resources), a permission constraint, and the tool's read-only nature. No gaps identified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has 100% description coverage with detailed explanations for org and name. The tool description does not add additional parameter semantics beyond what the schema provides, so a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool shows an installed release's status, revision, and created resources, with a specific verb and resource. It distinguishes from sibling tools like get_template, list_installed_templates, and install/uninstall.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Description mentions a permission requirement (secret reveal), which is a usage condition, but it does not provide explicit guidance on when to use this tool versus alternatives like get_template or list_installed_templates. Usage is implied but not contrasted with siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_permissionsGet Permissions for a Resource KindARead-onlyIdempotentInspect
Fetch available permissions for a resource kind from the /-schema/permissions endpoint. Recommended reading before first use: get_cpln_skill("access-control") — the runbook for this tool family (read once per session).
| Name | Required | Description | Default |
|---|---|---|---|
| org | Yes | Organization slug (lowercase kebab-case). NEVER guess — if the user has not named one, ask. On org-not-found, stop and ask; do not retry variants. | |
| kind | Yes | Resource kind to get permissions for |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether the call succeeded. |
| data | No | The full machine-readable result — list rows, the resource object, query results. Read THIS, not just the summary. |
| summary | Yes | One-line summary of the result. |
| nextSteps | No | Recommended follow-up actions for this task, in order. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint, idempotentHint, and non-destructive nature. Description adds the endpoint path but no further behavioral traits like rate limits or authorization needs. With good annotation coverage, a 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences: first states purpose, second gives a usage recommendation. No filler, front-loaded with core information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description need not detail return values. It covers purpose and a recommended reading. The tool is simple with 2 parameters and clear schema, so description is largely sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with detailed parameter descriptions. The tool description does not add extra meaning beyond the schema, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool fetches available permissions for a resource kind, with a specific endpoint path. Differentiates from sibling tools like get_resource or get_resource_schema, which serve other purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Recommends reading get_cpln_skill('access-control') as a runbook before first use, which is explicit guidance. However, does not specify when to use this tool versus alternatives like get_resource or get_resource_schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_resourceGet a ResourceARead-onlyIdempotentInspect
Fetch one Control Plane resource by kind + name (no name for kind="org"). Returns a summary plus the full JSON. The single read-one tool for every resource kind. Secret values are masked — use reveal_secret to read them. Call this before any update or delete to capture current state.
| Name | Required | Description | Default |
|---|---|---|---|
| gvc | No | GVC slug — REQUIRED only for GVC-scoped kinds (workload, identity, volumeset); ignored otherwise. | |
| org | Yes | Organization slug (lowercase kebab-case). NEVER guess — if the user has not named one, ask. On org-not-found, stop and ask; do not retry variants. | |
| kind | Yes | Resource kind to fetch. One of: org, workload, identity, volumeset, gvc, secret, policy, group, domain, cloudaccount, agent, ipset, mk8s, serviceaccount, auditctx, image, location, user. | |
| name | No | Resource name. Required for every kind except `org` (which is singular). Most kinds use lowercase kebab-case names; exceptions: domain = the full hostname ("app.example.com"), image = NAME or NAME:TAG ("my-app:v1.2"). |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether the call succeeded. |
| data | No | The full machine-readable result — list rows, the resource object, query results. Read THIS, not just the summary. |
| summary | Yes | One-line summary of the result. |
| nextSteps | No | Recommended follow-up actions for this task, in order. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
While annotations declare readOnlyHint, idempotentHint, and destructiveHint, the description adds that it returns a summary plus full JSON, and that secret values are masked. This provides behavioral context beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each earning its place: purpose, special behavior (secret masking), and usage advice. Front-loaded with core purpose and constraints; no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of resource kinds and many sibling tools, the description covers org special case, secret masking, and pre-update/delete recommendation. Output schema exists, so return value details are not needed. Completes the tool's role effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds meaning: no name for org kind, naming conventions for domain (full hostname) and image (NAME:TAG), and that gvc is required only for GVC-scoped kinds. This enhances parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it fetches one Control Plane resource by kind and name, with a specific exception for org (no name required). This distinguishes it from list_resources and other read tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states it is the single read-one tool for all kinds, advises using reveal_secret for masked secret values, and recommends calling it before update/delete to capture current state. Provides clear when-to-use and when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_resource_schemaGet Resource Schema & API EndpointsARead-onlyIdempotentInspect
Return the exact object schema and REST API endpoints for a Control Plane resource kind, so you can author an accurate manifest for cpln apply or call the API directly. ALWAYS call this FIRST whenever you are about to write a cpln apply YAML/JSON file, set up CI/CD that applies Control Plane resources, or build a request body for the REST API — do not hand-write a manifest or guess field names from memory. Pick a kind and pass org (and gvc for workload/identity/volumeset). Large schemas come back as a shallow map with deep sections collapsed to {"_expand":""} stubs; pass path (e.g. "spec.containers") to expand a section on demand. Server-managed fields (id/status/version/etc.) are already removed; name and kind are required at create.
| Name | Required | Description | Default |
|---|---|---|---|
| gvc | No | GVC slug. REQUIRED only for GVC-scoped kinds (workload, identity, volumeset); ignored for org-scoped kinds. | |
| org | Yes | Organization slug (lowercase kebab-case). NEVER guess — if the user has not named one, ask. On org-not-found, stop and ask; do not retry variants. | |
| kind | Yes | The Control Plane resource kind to describe. Returns its apply-ready object schema plus the concrete REST endpoints. workload, identity, and volumeset are GVC-scoped (require `gvc`); all others are org-scoped. | |
| path | No | Dot-path into the schema to expand in full, e.g. "spec.containers" or "spec.defaultOptions.autoscaling". Omit for the top-level overview. Deeply nested objects come back as {"_expand":"<path>"} stubs — call this tool again with `path` set to that value to see that section. | |
| maxDepth | No | Override how many object levels to expand from the path root. Omit for the default (small schemas return in full; large ones return a shallow map you can drill into). Raise it to pull more in one call. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether the call succeeded. |
| data | No | The full machine-readable result — list rows, the resource object, query results. Read THIS, not just the summary. |
| summary | Yes | One-line summary of the result. |
| nextSteps | No | Recommended follow-up actions for this task, in order. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses that large schemas return stubs and explains how to expand them via `path`. Mentions that server-managed fields are removed and `name`/`kind` are required at create. All consistent with annotations (readOnlyHint, idempotentHint, destructiveHint). No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is informative but could be slightly more concise. Each sentence adds value, and the critical instructions are front-loaded. Minor verbosity in the middle.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description fully covers the tool's purpose, usage context, parameter behavior, and limitations (e.g., stub expansion). With high schema coverage, annotations, and output schema present, no significant gaps remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema coverage, the description adds significant value by explaining when each parameter is needed (e.g., `gvc` for GVC-scoped kinds, `path` for expansion, `maxDepth` for depth control). Provides actionable advice like 'never guess the org slug'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns the exact object schema and REST API endpoints for a Control Plane resource kind, enabling accurate manifest authoring or direct API calls. It distinguishes from siblings by being the only tool that provides schema information.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly instructs to call this tool FIRST when writing manifests or building API requests, including a strong directive not to guess field names. Provides conditions for using specific parameters like `gvc` and `path`.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_templateGet Template Detail & Example ValuesARead-onlyIdempotentInspect
Show a catalog template’s available versions, prerequisites, whether it creates its own GVC, and the EXAMPLE values.yaml for the chosen (or latest) version. Read this before install_template — copy and edit the example values to configure the deployment.
| Name | Required | Description | Default |
|---|---|---|---|
| version | No | Template version (e.g. "3.0.1"). Omit to use the latest. See get_template for available versions. | |
| template | Yes | Catalog template to use — select one of the available templates (full details via browse_templates/get_template). |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether the call succeeded. |
| data | No | The full machine-readable result — list rows, the resource object, query results. Read THIS, not just the summary. |
| summary | Yes | One-line summary of the result. |
| nextSteps | No | Recommended follow-up actions for this task, in order. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, idempotent, non-destructive behavior. Description adds further details about the specific information returned (versions, prerequisites, GVC creation, example values) and that it can target a specific version or the latest, which goes beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences that front-load key outputs and purpose, with no wasted words. The structure efficiently conveys all necessary information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (read-only retrieval of template details), the description covers all major outputs. The presence of an output schema (not shown) further reduces the need to describe return values. Slightly lower due to lack of mention of pagination or error handling, but not critical for this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with already clear descriptions for both 'template' and 'version' parameters. The description does not add new semantic meaning for the parameters themselves, just recommends copying the example values, which is a usage hint rather than parameter explanation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool shows catalog template details including versions, prerequisites, GVC creation info, and example values. It specifically distinguishes from sibling tools like browse_templates and install_template, making its role unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Read this before install_template' and advises to copy and edit example values for deployment configuration. This provides clear context, though it does not explicitly state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_workload_eventsGet Workload EventsARead-onlyIdempotentInspect
Fetch event log for a workload to diagnose readiness/liveness probe issues and errors. Use after a deploy fails — pair with list_deployments and get_workload_logs to triangulate the failure. Recommended reading before first use: get_cpln_skill("workload-troubleshooting") — the runbook for this tool family (read once per session).
| Name | Required | Description | Default |
|---|---|---|---|
| gvc | Yes | GVC slug (lowercase kebab-case). Use the GVC the user named; otherwise discover with list_resources (kind="gvc") and let them choose — never guess (a wrong GVC targets the wrong environment). | |
| org | Yes | Organization slug (lowercase kebab-case). NEVER guess — if the user has not named one, ask. On org-not-found, stop and ask; do not retry variants. | |
| name | Yes | Workload name (lowercase kebab-case, must start with a letter, max 49 chars, cannot end with -headless). The name is IMMUTABLE — "renaming" requires delete + recreate (loses public URL, internal DNS, policy targetLinks). |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether the call succeeded. |
| data | No | The full machine-readable result — list rows, the resource object, query results. Read THIS, not just the summary. |
| summary | Yes | One-line summary of the result. |
| nextSteps | No | Recommended follow-up actions for this task, in order. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds context about the kind of events returned (probe issues, errors), which helps the agent understand the diagnostic value. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each earning its place: purpose, usage guidance, and a recommendation to read a skill. Front-loaded with the core purpose, no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values are covered. The description provides sufficient context for a simple read-only tool with three well-documented parameters, including usage scenarios and companion tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description does not add any parameter-level information beyond the schema; it only implicitly references the workload identity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Fetch' and resource 'event log for a workload', with a specific diagnostic purpose 'to diagnose readiness/liveness probe issues and errors'. It distinguishes from sibling tools like get_workload_logs and list_deployments by explicitly mentioning them as companions for triangulation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit when-to-use guidance ('Use after a deploy fails'), recommends companion tools for triangulation, and suggests reading a skill runbook before first use. This is comprehensive and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_workload_logsGet Workload LogsARead-onlyIdempotentInspect
Query workload logs from a GVC. Provide structured params (gvc, workload, container, location, filter) OR a raw LogQL query — a raw query REPLACES the structured params, so it must embed ALL labels itself. Available labels: gvc, workload, container, location, provider, replica, stream — replica and stream are only reachable via a raw query. filter is a literal substring match (|=), not regex; for regex use a raw query with |~. Cron workload? Get jobExecutions via list_deployments (with location), then re-query with a raw query scoping replica= plus the execution's time window — embed gvc/workload/location labels in the raw query. Returns structured JSON with timestamps, messages, and labels. Recommended reading before first use: get_cpln_skill("workload-troubleshooting") — the runbook for this tool family (read once per session).
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | Absolute end time (exclusive, ISO 8601). | |
| gvc | No | GVC name. Required unless raw `query` is provided. | |
| org | Yes | Organization slug (lowercase kebab-case). NEVER guess — if the user has not named one, ask. On org-not-found, stop and ask; do not retry variants. | |
| from | No | Absolute start time (inclusive, ISO 8601). Overrides `since`. Must be earlier than `to`. | |
| limit | No | Maximum log entries to return (default: 30, max: 999). | |
| order | No | Sort order (default: "oldest_first"). | |
| query | No | Raw LogQL query. REPLACES the structured params entirely, so it must embed ALL labels itself (gvc, workload, location, …) — required for the replica/stream labels, which have no structured param. Not sanitized — use structured params when possible. | |
| since | No | Lookback window as relative duration (default: "1h"). Examples: "30m", "2h", "1d". | |
| filter | No | Literal substring filter (LogQL `|=`) — only return log lines containing this exact text. NOT a regex; for regex matching use a raw `query` with `|~`. | |
| location | No | Location to filter logs for (e.g., "aws-us-east-1"). | |
| workload | No | Workload name to filter logs for. | |
| container | No | Container name to filter logs for (e.g., "main", "_accesslog"). |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether the call succeeded. |
| data | No | The full machine-readable result — list rows, the resource object, query results. Read THIS, not just the summary. |
| summary | Yes | One-line summary of the result. |
| nextSteps | No | Recommended follow-up actions for this task, in order. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnlyHint=true, idempotentHint=true, destructiveHint=false), the description adds critical behavioral details: raw query replaces structured params, filter is literal substring not regex, raw query is unsanitized, and return format is structured JSON with timestamps, messages, and labels. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single paragraph that is front-loaded with the main action. Every sentence adds value, covering modes, labels, cron handling, and recommendations. It is moderately long but efficient; slight improvement could be achieved with bullet points for clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of two query modes, multiple labels, cron edge case, and reference to a runbook, the description is thoroughly complete. It includes output format, unsanitized warning, and specific label availability, making it fully actionable for an AI agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description adds significant system-level context: explains the structured vs. raw query dichotomy, which labels are accessible only via raw query, and the difference between filter (|=) and regex (|~). It also details the cron workflow, adding value beyond individual parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Query workload logs from a GVC.' as the purpose, using a specific verb and resource. It distinguishes from siblings like list_deployments for cron workloads and recommends get_cpln_skill as a runbook for this tool family.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use structured params vs. raw query, including specific scenarios like accessing replica/stream labels or using regex. It also gives step-by-step instructions for cron workloads involving list_deployments and raw queries, and recommends reading the runbook before first use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
install_templateInstall TemplateAInspect
Install a catalog template as a new release. Provide name (release name), template, optional version (defaults to latest), the values YAML (from get_template), and gvc unless the template creates its own. Validate first where available: preview_template (full profile; same inputs) dry-runs the render and catches values mistakes before anything is created. Deployment is asynchronous — verify with get_installed_template afterwards. Recommended reading before first use: get_cpln_skill("template-catalog") — the runbook for this tool family (read once per session).
| Name | Required | Description | Default |
|---|---|---|---|
| gvc | No | Target GVC. Required unless the template creates its own GVC (get_template shows which). If the user named one for the template, use it; if not, list available GVCs with list_resources (kind="gvc") and let them choose. | |
| org | Yes | Organization slug (lowercase kebab-case). NEVER guess — if the user has not named one, ask. On org-not-found, stop and ask; do not retry variants. | |
| name | Yes | Release name — the unique, immutable identifier for this installed instance within the org. | |
| values | Yes | The values.yaml content (YAML mapping) that configures the install. Start from get_template’s example values. | |
| version | No | Template version (e.g. "3.0.1"). Omit to use the latest. See get_template for available versions. | |
| template | Yes | Catalog template to use — select one of the available templates (full details via browse_templates/get_template). |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether the call succeeded. |
| data | No | The full machine-readable result — list rows, the resource object, query results. Read THIS, not just the summary. |
| summary | Yes | One-line summary of the result. |
| nextSteps | No | Recommended follow-up actions for this task, in order. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false and destructiveHint=false. The description adds value by disclosing asynchronous deployment and the need to verify with get_installed_template. It also mentions validation step, which helps the agent understand non-obvious behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is four sentences, each concise and meaningful. It front-loads the purpose, then flows logically through validation, async note, and recommended reading. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (6 params, async behavior, validation workflow), the description covers all essential aspects: purpose, usage flow, parameter hints, error prevention (validation), and post-deployment verification. Output schema exists, so return values need not be detailed here.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, but the description adds a helpful summary of which parameters to provide and their roles (e.g., 'version defaults to latest', 'gvc unless the template creates its own'). This aids understanding beyond the schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Install a catalog template as a new release,' using a specific verb and resource. It distinguishes from siblings like browse_templates, get_template, upgrade_template, and uninstall_template by focusing on the initial installation action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance: recommends validating with preview_template first, mentions async deployment with verification via get_installed_template, and suggests reading get_cpln_skill for context. It lacks explicit when-not-to-use but gives clear context and alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_deploymentsList Workload DeploymentsARead-onlyIdempotentInspect
A workload's deployments — its per-location rollout status. This is the PRIMARY readiness check after create_workload/update_workload: poll it (without location) until ready, then report the canonical endpoint as the public URL — never construct a URL by hand. Without location: every location with readiness, endpoints, and the canonical URL. With location: that single deployment in full detail — version chain, per-container readiness/restarts/messages, full JSON. For cron workloads, per-execution run history lives in status.jobExecutions of that per-location detail. Pair with get_workload_events and get_workload_logs to diagnose failures.
| Name | Required | Description | Default |
|---|---|---|---|
| gvc | Yes | GVC slug (lowercase kebab-case). Use the GVC the user named; otherwise discover with list_resources (kind="gvc") and let them choose — never guess (a wrong GVC targets the wrong environment). | |
| org | Yes | Organization slug (lowercase kebab-case). NEVER guess — if the user has not named one, ask. On org-not-found, stop and ask; do not retry variants. | |
| location | No | OPTIONAL. A workload has one deployment per location it runs in. Omit for readiness across ALL locations plus the canonical public URL. Pass a location (e.g. "aws-us-east-1") for that single deployment's full detail — version chain, per-container readiness, and full JSON. | |
| workload | Yes | Workload whose deployments to inspect. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether the call succeeded. |
| data | No | The full machine-readable result — list rows, the resource object, query results. Read THIS, not just the summary. |
| summary | Yes | One-line summary of the result. |
| nextSteps | No | Recommended follow-up actions for this task, in order. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnly, idempotent, non-destructive. Description adds behavioral details: polling semantics, distinction between location modes, and specific fields returned (version chain, per-container readiness, restarts, messages). No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is informative but slightly verbose. It front-loads the core purpose and provides critical usage guidance. Each sentence adds value, though some could be tightened without losing clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (4 params, output schema exists) and annotations, the description covers all necessary context: purpose, usage modes, behavior, and linkage to other diagnostic tools. It is complete for effective use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with detailed parameter descriptions. The tool description further explains the impact of the location parameter, distinguishing between listing all locations vs. full detail for a single location, adding value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: listing per-location deployment status for a workload. It distinguishes itself as the primary readiness check after create/update operations and differentiates from siblings like get_workload_events by specifying its role.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly guides when to use: poll without location until ready, then report canonical endpoint. It specifies never to construct URLs manually and pairs with get_workload_events and get_workload_logs for diagnosis, providing clear context and alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_installed_templatesList Installed TemplatesARead-onlyIdempotentInspect
List the template releases installed in an org (name, template, version, GVC, revision). Use get_installed_template for the resources and status of a specific release.
| Name | Required | Description | Default |
|---|---|---|---|
| org | Yes | Organization slug (lowercase kebab-case). NEVER guess — if the user has not named one, ask. On org-not-found, stop and ask; do not retry variants. | |
| limit | No | Maximum number of items to return (1-500, default: all). |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether the call succeeded. |
| data | No | The full machine-readable result — list rows, the resource object, query results. Read THIS, not just the summary. |
| summary | Yes | One-line summary of the result. |
| nextSteps | No | Recommended follow-up actions for this task, in order. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is clear. The description adds the return fields (name, template, version, GVC, revision), which is helpful but not essential beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two efficient sentences: first states purpose and output, second provides alternative. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a listing tool with 2 parameters, strong annotations, and an output schema, the description is complete. It covers purpose, scope, and differentiation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the description does not elaborate on parameter syntax or meaning beyond what the schema provides. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'List' and the resource 'template releases installed in an org', specifies fields returned (name, template, version, GVC, revision), and explicitly differentiates from the sibling tool 'get_installed_template'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly guides when to use this tool (to list all installed templates) vs. an alternative (get_installed_template for specific release). It does not explicitly state when not to use, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_metricsList & Discover MetricsARead-onlyIdempotentInspect
Discover what metrics you can query before calling query_metrics, so you never guess a metric name or label. Returns the documented Control Plane default metrics (with type and a correct PromQL template each), PLUS the metrics actually present in the org right now — including CUSTOM metrics your workloads expose and kube_/node_ families. Pass filter to narrow by substring. Pass metric to see that metric’s REAL label dimensions and values (workload, gvc, location, …) from live data so your PromQL filters are grounded, not invented. Reach for this whenever a metrics query returns nothing or you are unsure of names/labels — it is optional, not required when you already know the metric you want.
| Name | Required | Description | Default |
|---|---|---|---|
| org | Yes | Organization slug (lowercase kebab-case). NEVER guess — if the user has not named one, ask. On org-not-found, stop and ask; do not retry variants. | |
| limit | No | Maximum number of items to return (1-500, default: all). | |
| filter | No | Case-insensitive substring to narrow the catalog and live metric names (e.g. "cpu", "workload", "agent"). | |
| metric | No | A metric name to ground: returns its REAL label dimensions and sample values (workload, gvc, location, …) from live data, so you can build an accurate PromQL filter. Works for custom metrics too. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether the call succeeded. |
| data | No | The full machine-readable result — list rows, the resource object, query results. Read THIS, not just the summary. |
| summary | Yes | One-line summary of the result. |
| nextSteps | No | Recommended follow-up actions for this task, in order. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true. The description adds value by explaining it returns both documented default metrics (with type and PromQL template) and live/custom metrics, and that passing `metric` yields real label dimensions. This goes beyond annotations, though annotations already cover safety and idempotency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is moderately long but front-loaded with the core purpose. Every sentence adds value (discovery, behavior, parameter use, usage guidelines). Some redundancy exists (e.g., 'live data' mentioned twice), but overall it is well-structured and informative without fluff. Score 4 due to slight verbosity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description fully covers the tool's functionality: what it returns (defaults with templates, live custom metrics), how to filter (`filter`), how to get label dimensions (`metric`), and when to use. Given the complexity (discovery tool with multiple return types) and that an output schema exists, this description is complete and leaves no gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for all 4 parameters. The description adds context beyond schema: for `filter` it explains substring narrowing, for `metric` it explains grounding with real labels, for `org` it warns against guessing, and for `limit` it states default 'all' (not in schema). This extra guidance earns above baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states it is for discovering metrics before calling `query_metrics`, and distinguishes itself as a discovery tool vs. its sibling `query_metrics`. It specifies the verb 'discover' and the resource 'metrics', with clear scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit when-to-use guidance: 'Reach for this whenever a metrics query returns nothing or you are unsure of names/labels' and also clarifies when not needed ('optional, not required when you already know the metric you want'). It also names the alternative sibling tool `query_metrics`.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_resourcesList Resources of a KindARead-onlyIdempotentInspect
List Control Plane resources of one kind as a summary table. The single read-list tool for every resource kind — pass kind (e.g. "workload", "secret", "gvc"), org, and gvc for GVC-scoped kinds. For a single item's full JSON use get_resource. Workload deployments are not a kind here — use list_deployments.
| Name | Required | Description | Default |
|---|---|---|---|
| gvc | No | GVC slug — REQUIRED only for GVC-scoped kinds (workload, identity, volumeset); ignored otherwise. | |
| org | Yes | Organization slug (lowercase kebab-case). NEVER guess — if the user has not named one, ask. On org-not-found, stop and ask; do not retry variants. | |
| kind | Yes | Resource kind to list. One of: workload, identity, volumeset, gvc, secret, policy, group, domain, cloudaccount, agent, ipset, mk8s, serviceaccount, auditctx, image, location, user. | |
| limit | No | Maximum number of items to return (1-500, default: all). |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether the call succeeded. |
| data | No | The full machine-readable result — list rows, the resource object, query results. Read THIS, not just the summary. |
| summary | Yes | One-line summary of the result. |
| nextSteps | No | Recommended follow-up actions for this task, in order. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds that the output is a summary table, implying a non-exhaustive view, and clarifies scope (e.g., workload deployments excluded). This adds some context beyond annotations but not extensive behavioral details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences: first summarizes purpose and scope, second provides parameter guidance and alternatives. Every word is necessary, no redundancy, and the key information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Considering the 4 parameters (all schema-described), annotations, and presence of an output schema, the description covers the core behavior, parameter usage, and distinguishes from key sibling tools. It doesn't mention the limit parameter or pagination, but those are in the schema. Overall, complete for a list tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds usage examples for kind and clarifies that gvc is required only for GVC-scoped kinds, which is already in the schema but reinforced. It does not add significant new meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists Control Plane resources of one kind as a summary table, using the verb 'list' and specific resource identifier. It distinguishes from siblings by pointing to get_resource for full JSON and list_deployments for workload deployments, which are not covered here.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells when to use this tool (for listing any resource kind) and when not to (for single item JSON use get_resource, for deployments use list_deployments). It also specifies required parameters and context. However, it could be more explicit about other sibling list tools like list_metrics, but those are different domains.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_workload_replicasList Workload ReplicasARead-onlyIdempotentInspect
List the names of the running replicas (pods) of a workload in a location. Read-only. Use this before workload_exec to target a specific replica with its replica argument; without it, exec uses the first replica. Recommended reading before first use: get_cpln_skill("workload-troubleshooting") — the runbook for this tool family (read once per session).
| Name | Required | Description | Default |
|---|---|---|---|
| gvc | Yes | GVC slug (lowercase kebab-case). Use the GVC the user named; otherwise discover with list_resources (kind="gvc") and let them choose — never guess (a wrong GVC targets the wrong environment). | |
| org | Yes | Organization slug (lowercase kebab-case). NEVER guess — if the user has not named one, ask. On org-not-found, stop and ask; do not retry variants. | |
| limit | No | Maximum number of items to return (1-500, default: all). | |
| location | No | GVC location / deployment name. Default: the GVC's first location. | |
| workload | Yes | Workload whose running replicas to list. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether the call succeeded. |
| data | No | The full machine-readable result — list rows, the resource object, query results. Read THIS, not just the summary. |
| summary | Yes | One-line summary of the result. |
| nextSteps | No | Recommended follow-up actions for this task, in order. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint. Description adds the context that listing is read-only and that exec uses the first replica by default, which is helpful beyond annotations. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences: purpose, usage guidance, and recommendation. No wasted words, front-loaded with key information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given output schema exists, description doesn't need to detail return values. It adequately explains what the tool does and how to use it, and includes a reference to a runbook for deeper context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description does not add any parameter-specific details beyond what the schema already provides, such as format or constraints.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it lists the names of running replicas (pods) of a workload in a location. It distinguishes itself from sibling tools by explaining its use before workload_exec to target a specific replica, differentiating it from other list tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use this tool ('Use this before workload_exec to target a specific replica with its replica argument') and what happens without it. Also recommends reading a skill runbook, providing context for first-time use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mount_volumeset_to_workloadMount Volumeset to WorkloadAIdempotentInspect
Attach a volumeset to a workload — mounts into the FIRST container only. Creates the volumeset when missing; size/fileSystemType/performanceClass apply ONLY on that create path and are ignored when the volumeset already exists. Workload-type rule: ext4/xfs (read-write-once) volumesets require a stateful or vm workload and bind to ONE workload; shared-filesystem volumesets mount on any workload type. Workload types are immutable — switching requires deleting and recreating the workload (plan downtime). Recommended reading before first use: get_cpln_skill("stateful-storage") — the runbook for this tool family (read once per session).
| Name | Required | Description | Default |
|---|---|---|---|
| gvc | Yes | GVC slug (lowercase kebab-case). Use the GVC the user named; otherwise discover with list_resources (kind="gvc") and let them choose — never guess (a wrong GVC targets the wrong environment). | |
| org | Yes | Organization slug (lowercase kebab-case). NEVER guess — if the user has not named one, ask. On org-not-found, stop and ask; do not retry variants. | |
| size | No | Initial capacity in GB — CREATE-ONLY (ignored when the volumeset already exists; expand_volumeset grows it). Required when creating. Min 10 (200 for high-throughput-ssd), max 65536. | |
| tags | No | Optional tags for the volumeset; use them like Kubernetes labels for governance and search. | |
| mountPath | No | Mount path inside the container (defaults to /mnt/{volumesetName}). Normalized before validation (".." resolved, "//" collapsed); reserved paths /dev, /dev/log, /tmp, /var, /var/log are rejected. | |
| description | No | Volumeset description so operators know what data lives here (treat it like a Kubernetes annotation). | |
| workloadName | Yes | Existing workload name to mount storage into; pass the name only, not a link. | |
| volumesetName | No | Optional volumeset resource name, not a link. Omit to use {workloadName}-vol. If this volumeset does not exist yet, `size` is required so the tool can create it before mounting. | |
| fileSystemType | No | File system type — CREATE-ONLY (ignored when the volumeset already exists); default xfs. ext4/xfs are read-write-once (stateful or vm workloads only); shared is read-write-many (any workload type). | |
| recoveryPolicy | No | What a NEW replica does when a matching volume already exists: "retain" (default) reuses the data, "recycle" starts fresh (schema/volumeSpec recoveryPolicy). | |
| performanceClass | No | Performance class — CREATE-ONLY (ignored when the volumeset already exists); default general-purpose-ssd. high-throughput-ssd requires size ≥ 200; shared pairs only with fileSystemType shared. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether the call succeeded. |
| data | No | The full machine-readable result — list rows, the resource object, query results. Read THIS, not just the summary. |
| summary | Yes | One-line summary of the result. |
| nextSteps | No | Recommended follow-up actions for this task, in order. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate idempotentHint=true, destructiveHint=false. The description adds critical behavioral details: it creates volumesets if missing, ignores create-only parameters on existing volumesets, mounts only to the first container, and enforces file system type rules. This fully discloses the tool's side effects and constraints beyond what annotations convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is moderately long but every sentence serves a purpose. It is front-loaded with the core action and uses formatting (bold) for emphasis. The inclusion of a skill recommendation adds context without being overly verbose, maintaining good conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's 11 parameters, 3 required, and presence of an output schema (not shown), the description covers all key behavioral aspects: idempotency, create vs. mount, workload-type rules, and parameter role differentiation. It references a runbook for deeper context, making it complete for an AI agent to understand proper invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, but the description adds significant value by explaining which parameters are create-only (size, fileSystemType, performanceClass) and their specific constraints (e.g., high-throughput-ssd requires size ≥ 200). It clarifies that workloadName must reference an existing workload and that volumesetName defaults to '{workloadName}-vol'. This enriches the schema's already detailed descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('attach a volumeset to a workload'), specifies scope ('mounts into the FIRST container only'), and distinguishes from sibling tools by explaining create-on-missing behavior and workload-type rules. It leaves no ambiguity about what the tool does and how it differs from alternatives like 'create_volumeset' or 'expand_volumeset'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit context: when to use (mount volumeset to workload), when parameters are ignored (create-only for existing volumesets), workload-type constraints (ext4/xfs require stateful/vm, shared mounts on any), and recommends reading a skill before first use. It also warns about immutability of workload types, guiding appropriate usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_audit_eventsQuery Audit EventsARead-onlyIdempotentInspect
Query the Control Plane audit trail for mutations on one or more resources of the same kind. Omit name and names to fetch every event for that kind in the org. Supply names to audit multiple resources in one call (events are merged and sorted newest-first). Supports filtering by subject, audit context, and time range. Platform events live in the built-in cpln context.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | End time — ISO 8601 OR a relative duration meaning that long ago (units m/h/d/w/mo/y; months are "mo"). Only valid with `from`. | |
| gvc | No | GVC name. Required when `kind` is GVC-scoped (workload, identity, dbcluster, volumeset) AND `name`/`names` is provided. | |
| org | Yes | Organization slug (lowercase kebab-case). NEVER guess — if the user has not named one, ask. On org-not-found, stop and ask; do not retry variants. | |
| from | No | Start time — ISO 8601 (e.g. "2025-10-23T07:00:00Z") OR a relative duration meaning that long ago (units m/h/d/w/mo/y; months are "mo", e.g. "3mo"). Overrides `since`. | |
| kind | Yes | Resource kind to query audit events for — singular, exact spelling (e.g., "workload", "secret", "policy", "identity", "auditctx", "gvc"). With a custom `context`, kind instead matches the arbitrary `resource.type` your workload wrote (e.g., "order"). | |
| name | No | Single resource name. Mutually exclusive with `names`. Omit both to query every resource of that kind in the org. | |
| limit | No | Maximum events to return in the merged result (default: 50, max: 1000). | |
| names | No | Multiple resource names to audit in one call. Merges events from all named resources, sorted newest-first. Max 25 names. Mutually exclusive with `name`. | |
| since | No | Relative lookback window from now (default: "7d"). Examples: "1h", "24h", "7d", "30d". Mutually exclusive with from/to. | |
| context | No | Audit context name (default: "cpln"). Use a custom context name to query workload-written events. | |
| subject | No | Filter by subject: user email (contains "@"), full link (starts with "/"), or bare service-account name (auto-resolved to /org/{org}/serviceaccount/{name}). |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether the call succeeded. |
| data | No | The full machine-readable result — list rows, the resource object, query results. Read THIS, not just the summary. |
| summary | Yes | One-line summary of the result. |
| nextSteps | No | Recommended follow-up actions for this task, in order. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true and idempotentHint=true. The description adds important behavioral traits: events are merged and sorted newest-first, supports filtering by subject and time range, and mentions platform events in the cpln context. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single paragraph that efficiently conveys the main purpose and key details. It is front-loaded with the primary function. Could benefit from slight restructuring but is still concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists (not shown but indicated true), the description covers the key behaviors: merging, sorting, filtering, and context handling. It is complete enough for a query tool with 11 parameters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds significant meaning beyond the schema: explains the relationship between name/names, from/to vs since, kind usage for custom contexts, and subject patterns. This adds value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it queries the Control Plane audit trail for mutations on resources of the same kind. It specifies the verb 'Query' and the resource 'Audit Events', distinguishing it from sibling tools like query_metrics or get_workload_events.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to use the tool, including how to omit name/names for all events, use names for multiple resources, and the GVC requirement for GVC-scoped kinds. It does not explicitly state when not to use, but the context is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_metricsQuery Workload Metrics (PromQL)ARead-onlyIdempotentInspect
Run a PromQL query against Control Plane metrics (Prometheus-compatible). Default is a range query over the last hour at 60s step — pass resolution: "instant" for a point-in-time query, since / from / to to adjust the window, and step to control resolution. Results are sliced to the first 50 series in prose; the full Prometheus response is included as JSON. If you already know the metric, just query it: gauges like cpu_used, mem_used, replica_count are used bare — as are the pre-rated egress and requests_per_second (never wrap these in rate()); genuine counters need rate(), e.g. sum by (workload) (rate(container_restarts[5m])); latency is a histogram: histogram_quantile(0.95, sum by (le) (request_duration_ms_bucket)). Only when you are unsure of the exact metric name or label values — or a query returns no series — call list_metrics first to see what is actually present in the org (incl. custom metrics) and a metric’s real labels. Use this to verify autoscaling signals before changing scaling settings — measure first, then change.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | End of range — RFC3339 or epoch seconds. Default: now. | |
| org | Yes | Organization slug (lowercase kebab-case). NEVER guess — if the user has not named one, ask. On org-not-found, stop and ask; do not retry variants. | |
| from | No | Start of range — RFC3339 or epoch seconds. Overrides `since` when set. | |
| step | No | Step (range queries only). Examples: "15s", "60s", "5m". Default: "60s". | |
| query | Yes | PromQL query, scoped automatically to the org in the request path (no `org=` label needed). Use REAL Control Plane metric names — call list_metrics if unsure. Examples with actual metrics: `avg by (workload) (cpu_used)` (gauge), `sum by (workload) (rate(container_restarts[5m]))` (counter), `histogram_quantile(0.95, sum by (le) (request_duration_ms_bucket))` (latency histogram). Pre-rated series — `egress`, `cross_zone_traffic`, `requests_per_second` — are queried bare, never wrapped in rate(). | |
| since | No | Relative lookback (e.g., "5m", "1h", "24h"). Used when `from` is not provided. Default: "1h". | |
| resolution | No | `instant` for /query — a single sample at `to` (defaults to now); `from`/`since`/`step` are ignored. `range` for /query_range (default). |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether the call succeeded. |
| data | No | The full machine-readable result — list rows, the resource object, query results. Read THIS, not just the summary. |
| summary | Yes | One-line summary of the result. |
| nextSteps | No | Recommended follow-up actions for this task, in order. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses slicing to first 50 series, full JSON response, automatic org scoping, and parameter interactions. All annotations are consistent and description adds significant context beyond read-only/idempotent hints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense and front-loaded with key information; every sentence adds value, though slightly long. Could be more concise but well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Fully covers complexity: defaults, metric types, edge cases, and sibling guidance. Output schema exists, so return value explanation is unnecessary.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 100% coverage, but description adds concrete examples for query, explains resolution differences, and clarifies parameter overrides, enriching the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States the tool runs a PromQL query against Control Plane metrics, clearly distinguishing from sibling list_metrics by explicitly noting when to use the sibling instead.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides extensive guidance: default behavior, parameter adjustments, metric type examples, and explicit instructions to call list_metrics when unsure of metric names or no results.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_domain_portRemove a Domain Port ListenerADestructiveIdempotentInspect
Remove a port listener from a domain. Live traffic on that port stops immediately and any routed workloads become unreachable through this domain on that port.
| Name | Required | Description | Default |
|---|---|---|---|
| org | Yes | Organization slug (lowercase kebab-case). NEVER guess — if the user has not named one, ask. On org-not-found, stop and ask; do not retry variants. | |
| domain | Yes | Fully qualified domain name. | |
| portNumber | Yes | Existing listener port number to target. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether the call succeeded. |
| data | No | The full machine-readable result — list rows, the resource object, query results. Read THIS, not just the summary. |
| summary | Yes | One-line summary of the result. |
| nextSteps | No | Recommended follow-up actions for this task, in order. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds significant behavioral context beyond annotations by stating that live traffic stops immediately and workloads become unreachable. This reinforces the destructiveHint and openWorldHint. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no fluff. First sentence states action, second describes consequences. Efficient and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (3 required params, annotations, output schema), the description covers purpose and consequences well. Minor gaps: does not mention idempotency or error cases like non-existent port.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema already describes all three parameters well. The description does not add further meaning to the parameters, so baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Remove') and resource ('port listener from a domain'), clearly stating the action and immediate consequence. It distinguishes this tool from siblings like 'remove_domain_route' and 'add_domain_port'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage (to stop traffic on a port) but does not explicitly state when to use this tool vs. alternatives or when not to use it. No mention of prerequisites or conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_domain_routeRemove a Route from a Domain ListenerADestructiveIdempotentInspect
Delete a single route entry from a port listener. Traffic that matched this route returns 404 on the affected listener until a new matching route is configured.
| Name | Required | Description | Default |
|---|---|---|---|
| org | Yes | Organization slug (lowercase kebab-case). NEVER guess — if the user has not named one, ask. On org-not-found, stop and ask; do not retry variants. | |
| domain | Yes | Fully qualified domain name. | |
| portNumber | Yes | Existing listener port number to target. | |
| routeIdentifier | Yes | Identifier for an existing route. Route identity is path matcher + host matcher (Joi uniqueRoute) — include the route's hostPrefix/hostRegex when it has one, or a same-path route on a different host is matched instead. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether the call succeeded. |
| data | No | The full machine-readable result — list rows, the resource object, query results. Read THIS, not just the summary. |
| summary | Yes | One-line summary of the result. |
| nextSteps | No | Recommended follow-up actions for this task, in order. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark destructiveHint=true, but the description adds value by explaining the concrete behavioral outcome: traffic returning 404 until a new route is configured.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no wasted words. The first states the action, the second explains the consequence. Efficient and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the existence of an output schema and full schema coverage, the description covers the core purpose and effect. It could benefit from noting when to use this over remove_domain_port, but is otherwise complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the description does not need to add parameter details. It adds no extra meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Delete') and the resource ('a single route entry from a port listener'), effectively distinguishing it from sibling tools like add_domain_route or remove_domain_port.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by mentioning the 404 effect, but does not explicitly state when to use this tool over alternatives or provide when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reveal_secretReveal Secret DataARead-onlyIdempotentInspect
Reveal the actual secret data (break-glass access; audited). Call ONLY when the user explicitly asked to see the plaintext value — workloads consume secrets via cpln://secret/NAME references without ever revealing them. The result prints the plaintext into the conversation context — do not persist it anywhere (no files, no specs, no logs). Requires reveal permission on the secret.
| Name | Required | Description | Default |
|---|---|---|---|
| org | Yes | Organization slug (lowercase kebab-case). NEVER guess — if the user has not named one, ask. On org-not-found, stop and ask; do not retry variants. | |
| name | Yes | Resource name (lowercase kebab-case, starts with a letter, 2-64 chars). Names are IMMUTABLE — renaming = delete + recreate (loses URL, DNS, policy links). | |
| userRequestedPlaintext | Yes | Pass true ONLY if the user explicitly asked to see this secret's plaintext value in this conversation. If they did not, do not call this tool — use the cpln://secret/NAME reference instead. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether the call succeeded. |
| data | No | The full machine-readable result — list rows, the resource object, query results. Read THIS, not just the summary. |
| summary | Yes | One-line summary of the result. |
| nextSteps | No | Recommended follow-up actions for this task, in order. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses that the result prints plaintext into conversation context and warns against persistence. Adds context about auditing and permission requirements beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, no wasted words, front-loaded with purpose, then usage and behavioral notes. Highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema, the description covers purpose, usage, behavioral impact, and permission—leaving no gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the description adds crucial guidance for userRequestedPlaintext, emphasizing it must be true only on explicit user request.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool reveals actual secret data with break-glass access, distinguishing it from siblings like workload_reveal_secret. It specifies the verb 'Reveal' and resource 'secret data'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states to call ONLY when the user explicitly asks for plaintext, and contrasts with using cpln://secret/NAME references. Provides clear usage boundaries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_control_planeSearch Control Plane DocsARead-onlyIdempotentInspect
Search across the Control Plane knowledge base to find relevant information, code examples, API references, and guides. Use this tool when you need to answer questions about Control Plane, find specific documentation, understand how features work, or locate implementation details. The search returns contextual content with titles and direct links to the documentation pages. If you need the full content of a specific page, use the query_docs_filesystem tool to head or cat the page path (append .mdx to the path returned from search — e.g. head -200 /api-reference/create-customer.mdx).
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Search query |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether the call succeeded. |
| data | No | The full machine-readable result — list rows, the resource object, query results. Read THIS, not just the summary. |
| summary | Yes | One-line summary of the result. |
| nextSteps | No | Recommended follow-up actions for this task, in order. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false. The description adds that it returns contextual content with titles and links, but no new behavioral traits beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences: first states purpose, second gives usage and next steps. Every word is valuable, no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Tool is simple (one param, read-only). Description covers purpose, usage, output format, and how to get full content. Output schema exists to document return structure.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter 'query' with a basic description. Schema coverage is 100%, so the schema carries the burden. Description doesn't add query syntax or format details, meeting the baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states it searches the Control Plane knowledge base for relevant info, code examples, API refs, and guides. It distinguishes from the sibling query_docs_filesystem by explaining when to use each.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to use (answer questions, find docs, understand features) and provides a specific alternative (query_docs_filesystem) with instructions on appending .mdx.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_domain_tlsSet TLS on a Domain ListenerADestructiveIdempotentInspect
Set or replace the TLS block on a port listener (cipher suites, minimum protocol version). Provide the complete TLS shape; existing TLS settings on this listener are overwritten. Recommended reading before first use: get_cpln_skill("domain") — the runbook for this tool family (read once per session).
| Name | Required | Description | Default |
|---|---|---|---|
| org | Yes | Organization slug (lowercase kebab-case). NEVER guess — if the user has not named one, ask. On org-not-found, stop and ask; do not retry variants. | |
| tls | Yes | TLS configuration for the listener (cipher suites, min protocol, and optional custom server/client certificates). | |
| domain | Yes | Fully qualified domain name. | |
| portNumber | Yes | Existing listener port number to target. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether the call succeeded. |
| data | No | The full machine-readable result — list rows, the resource object, query results. Read THIS, not just the summary. |
| summary | Yes | One-line summary of the result. |
| nextSteps | No | Recommended follow-up actions for this task, in order. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true. The description adds the key behavioral detail that existing settings are overwritten, which aligns with destructiveHint and provides practical guidance. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with no filler. Each sentence adds distinct value: purpose, behavioral warning, and preparatory recommendation. Well front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of a sibling tool for clearing TLS (clear_domain_tls) and the annotations, the description covers the essential contextual need: it's a write operation that overwrites. It does not detail the output schema but that is provided separately. Minor gap: no mention of error handling or prerequisites beyond reading the runbook.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so parameters are well-documented structurally. The description adds crucial usage insight: 'Provide the complete TLS shape' implying a full replacement, not incremental update. This compensates for any ambiguity in schema about partial updates.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Set or replace the TLS block'), specifies the resource ('port listener'), and lists the components affected ('cipher suites, minimum protocol version'). It distinguishes from sibling clear_domain_tls by emphasizing replacement.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description warns that existing TLS settings are overwritten and recommends reading the runbook for the tool family before first use. It does not explicitly mention when not to use (e.g., to remove TLS), but the context is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uninstall_templateUninstall TemplateADestructiveInspect
Uninstall a release and remove the resources it created. Provide the release name. Recommended reading before first use: get_cpln_skill("template-catalog") — the runbook for this tool family (read once per session).
| Name | Required | Description | Default |
|---|---|---|---|
| org | Yes | Organization slug (lowercase kebab-case). NEVER guess — if the user has not named one, ask. On org-not-found, stop and ask; do not retry variants. | |
| name | Yes | Release name — the unique, immutable identifier for this installed instance within the org. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether the call succeeded. |
| data | No | The full machine-readable result — list rows, the resource object, query results. Read THIS, not just the summary. |
| summary | Yes | One-line summary of the result. |
| nextSteps | No | Recommended follow-up actions for this task, in order. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true. The description adds that resources are removed, confirming the destructive nature. It also includes a recommended reading link, which adds helpful context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: two sentences, no fluff. The first sentence states the action and result. The second sentence provides a usage hint. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (2 parameters, all required, with 100% schema coverage, destructiveHint annotation, and an output schema), the description fully covers what an AI agent needs to know to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the description does not need to add much. It mentions the release `name` parameter, consistent with the schema. No additional semantics are provided beyond what the schema already offers.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Uninstall a release and remove the resources it created.' This provides a specific verb (uninstall) and resource (release/template), distinguishing it from siblings like install_template and upgrade_template.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description instructs to 'Provide the release `name`.' and recommends reading the template-catalog skill before first use. While it doesn't explicitly state when not to use, the context is clear for a destructive uninstall operation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_domainUpdate a DomainADestructiveIdempotentInspect
Update metadata (description, tags), top-level spec flags (acceptAllHosts, acceptAllSubdomains), or the GVC/workload binding. CANNOT change ports or routes directly — to add, repoint, or remove a route on an existing domain use add_domain_route / update_domain_route / remove_domain_route for routes, add_domain_port / remove_domain_port for listener ports, and set_domain_tls / clear_domain_tls for TLS (all core); only CORS edits (set_domain_cors / clear_domain_cors) are full profile. After binding gvcLink/workloadLink, re-read status.dnsConfig — bindings add records the user must create. Recommended reading before first use: get_cpln_skill("domain") — the runbook for this tool family (read once per session).
| Name | Required | Description | Default |
|---|---|---|---|
| org | Yes | Organization slug (lowercase kebab-case). NEVER guess — if the user has not named one, ask. On org-not-found, stop and ask; do not retry variants. | |
| tags | No | Add or update tags without replacing the full set. Submit an empty list to clear all tags. | |
| domain | Yes | Fully qualified domain name to update. | |
| gvcLink | No | Bind the domain to a GVC (e.g., /org/{org}/gvc/{gvc} or //gvc/{gvc}). Mutually exclusive with `removeGvcLink` and `workloadLink`. | |
| description | No | New description for the domain. | |
| workloadLink | No | Bind the entire domain to one workload (e.g. //gvc/{gvc}/workload/{name}). Mutually exclusive with `removeWorkloadLink` and `gvcLink`. | |
| removeGvcLink | No | Detach the domain from its current GVC binding. | |
| removeTagKeys | No | Tag keys to remove from the resource. | |
| acceptAllHosts | No | Accept any host header (overrides existing). | |
| removeWorkloadLink | No | Detach the domain from its current workload binding. | |
| acceptAllSubdomains | No | Accept any subdomain (overrides existing). |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether the call succeeded. |
| data | No | The full machine-readable result — list rows, the resource object, query results. Read THIS, not just the summary. |
| summary | Yes | One-line summary of the result. |
| nextSteps | No | Recommended follow-up actions for this task, in order. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructive, idempotent, and open-world behavior. The description adds context about DNS record creation after binding and constraints on what cannot be changed. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is relatively long but every sentence serves a purpose: main updates, exclusions, post-update instructions. It is well-structured and front-loaded with the core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description focuses on what the tool does, constraints, and post-update actions (re-read dnsConfig). It covers all necessary aspects for an agent to use the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description goes beyond by grouping parameters (metadata, flags, bindings) and explaining mutual exclusivity (e.g., gvcLink vs removeGvcLink). This adds significant value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool updates metadata, flags, and bindings on a domain, and explicitly lists what it cannot do (ports, routes, TLS, CORS) while directing to sibling tools. The verb 'update' with resource 'domain' is specific.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit when-to-use (metadata, flags, bindings) and when-not-to-use (ports/routes, TLS, CORS) with references to specific sibling tools. It also recommends reading the runbook for the tool family.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_domain_routeUpdate a Route on a Domain ListenerADestructiveIdempotentInspect
Replace a single route entry on a port listener. Identify the existing route via prefix or regex (whichever it uses); the replacement route needs workloadLink and may omit optional matchers to match /. Returns the full updated domain JSON for inspection. Recommended reading before first use: get_cpln_skill("domain") — the runbook for this tool family (read once per session).
| Name | Required | Description | Default |
|---|---|---|---|
| org | Yes | Organization slug (lowercase kebab-case). NEVER guess — if the user has not named one, ask. On org-not-found, stop and ask; do not retry variants. | |
| route | Yes | Route entry forwarding listener traffic to a workload. Minimal valid route: { "workloadLink": "//gvc/{gvc}/workload/{name}" }. All matchers are optional; omit prefix/regex to match /. | |
| domain | Yes | Fully qualified domain name. | |
| portNumber | Yes | Existing listener port number to target. | |
| routeIdentifier | Yes | Identifier for an existing route. Route identity is path matcher + host matcher (Joi uniqueRoute) — include the route's hostPrefix/hostRegex when it has one, or a same-path route on a different host is matched instead. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether the call succeeded. |
| data | No | The full machine-readable result — list rows, the resource object, query results. Read THIS, not just the summary. |
| summary | Yes | One-line summary of the result. |
| nextSteps | No | Recommended follow-up actions for this task, in order. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark it as destructive and idempotent. The description adds that it returns the full updated domain JSON and that the route identifier must match the existing route's matchers. This is consistent with annotations and provides useful behavioral context, though it could mention the potential impact of mismatched identifiers.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, front-loads the action, and includes a practical recommendation. It is concise but not overly terse, providing necessary context without fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 5 required parameters, nested objects, and an output schema, the description covers the core identification and replacement logic, and references the runbook. It does not detail the output but that is covered by the schema. Minor gap: no explicit mention of the need for the org and domain parameters, but those are in the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds value by explaining that the route identifier must match the existing route's matchers and that the replacement route can omit optional matchers to match '/'. This clarifies usage beyond schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Replace') and resource ('a single route entry on a port listener'), clearly distinguishing it from siblings like add_domain_route and remove_domain_route. It also explains identification via prefix or regex, which is unique to this operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states when to use (replacing a route) and recommends reading the domain skill runbook first. It implies alternatives (add/remove) but does not explicitly exclude cases where the route does not exist or when to use a different tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_gvcUpdate a Control Plane GVCADestructiveIdempotentInspect
Update a GVC. Scalars, description, tags, env, and pullSecretLinks MERGE with existing values, but the nested objects (loadBalancer, keda, tracing, sidecarEnvoy, locationOptions, locationQuery) are REPLACED wholesale — always submit the complete object, never a partial patch, or the omitted sub-fields are dropped. Custom domains are configured with the Domain resource (create_domain), not on the GVC.
| Name | Required | Description | Default |
|---|---|---|---|
| env | No | Add or update GVC environment variables (merged with existing). Submit an empty list to clear every env variable. | |
| org | Yes | Organization slug (lowercase kebab-case). NEVER guess — if the user has not named one, ask. On org-not-found, stop and ask; do not retry variants. | |
| keda | No | Replace the KEDA configuration. | |
| tags | No | Add or update GVC tags (merged with existing tags) without replacing the entire set. Submit an empty list to clear all tags. | |
| gvcName | Yes | GVC slug (lowercase kebab-case). Use the GVC the user named; otherwise discover with list_resources (kind="gvc") and let them choose — never guess (a wrong GVC targets the wrong environment). | |
| tracing | No | Replace the tracing configuration. | |
| description | No | New description. Treat it like a concise annotation for future operators. | |
| loadBalancer | No | Replace the GVC load balancer configuration. | |
| sidecarEnvoy | No | Replace the Envoy sidecar filters (spec.sidecar.envoy). | |
| locationQuery | No | Replace the dynamic placement query. | |
| removeTagKeys | No | Tag keys to remove from the GVC. | |
| removeEnvNames | No | Environment variable names to remove. | |
| locationOptions | No | Replace per-location geo-routing options. | |
| pullSecretLinks | No | Add pullSecretLinks (merged with existing). Submit an empty list to clear them all. | |
| aliasWorkloadLink | No | Link to a workload in this GVC whose canonical endpoint backs the GVC alias DNS record (e.g. //gvc/{gvc}/workload/{name}). NOTE: the alias is INERT while the target workload is suspended (suspend=true or maxScale=0) — it takes effect only while the workload runs. | |
| endpointNamingFormat | No | Set the canonical endpoint subdomain format (default/legacy/org). | |
| removePullSecretLinks | No | pullSecretLinks to remove (exact string match). |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether the call succeeded. |
| data | No | The full machine-readable result — list rows, the resource object, query results. Read THIS, not just the summary. |
| summary | Yes | One-line summary of the result. |
| nextSteps | No | Recommended follow-up actions for this task, in order. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses crucial behavioral nuance (merge vs replace) beyond what annotations (destructiveHint, idempotentHint) provide. Warns about the danger of partial patches dropping sub-fields. This is exactly the kind of transparency needed for safe usage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely concise: three sentences total. Front-loaded with the main action. Every sentence is substantive. Zero wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (17 params, nested objects, merging behavior), the description covers the essential patterns. The schema handles parameter-level details, and output schema exists. The description's warning about partial patches is critical for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with rich descriptions. The description adds value by grouping parameters into merge and replace categories, and by explicitly calling out the replacement behavior for nested objects. This provides a mental model that schema alone doesn't convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'Update a GVC' and immediately clarifies the merge vs replace semantics for different field types, distinguishing it from create_gvc and from sibling update tools. It also warns that custom domains are not handled here, preventing misuse.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance on when to submit the complete object for nested fields and that scalars merge. Mentions one exclusion (custom domains via create_domain). Could be improved by explicitly stating when to use this vs create_gvc, but the distinction is clear from context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_identityUpdate an IdentityADestructiveIdempotentInspect
Update an identity's description, tags, and (optionally) replace its networkResources / nativeNetworkResources wholesale. Recommended reading before first use: get_cpln_skill("access-control") — the runbook for this tool family (read once per session).
| Name | Required | Description | Default |
|---|---|---|---|
| aws | No | Replace the AWS cloud-identity block (full object). To switch xor-fields (roleName ↔ policyRefs), just send the new block — it replaces wholesale. | |
| gcp | No | Replace the GCP cloud-identity block (full object). To switch xor-fields (serviceAccount ↔ bindings), just send the new block — it replaces wholesale. | |
| gvc | Yes | GVC slug (lowercase kebab-case). Use the GVC the user named; otherwise discover with list_resources (kind="gvc") and let them choose — never guess (a wrong GVC targets the wrong environment). | |
| ngs | No | Replace the NGS cloud-identity block (full object — it replaces wholesale). | |
| org | Yes | Organization slug (lowercase kebab-case). NEVER guess — if the user has not named one, ask. On org-not-found, stop and ask; do not retry variants. | |
| name | Yes | Resource name (lowercase kebab-case, starts with a letter, 2-64 chars). Names are IMMUTABLE — renaming = delete + recreate (loses URL, DNS, policy links). | |
| tags | No | Add or update tags without replacing the full set. | |
| azure | No | Replace the Azure cloud-identity block (full object — it replaces wholesale). | |
| description | No | New description for the identity. | |
| removeTagKeys | No | Tag keys to remove from the resource. | |
| spicedbAccess | No | Replace the SpiceDB cluster access list (max 5). | |
| memcacheAccess | No | Replace the memcache cluster access list (max 5). | |
| networkResources | No | Replace the full networkResources array (wholesale). | |
| removeCloudIdentities | No | Cloud-identity blocks to clear from the identity (e.g., ["aws"]). Server-side $drop semantics — use this to detach an identity from a cloud account. | |
| nativeNetworkResources | No | Optional replacement for the full nativeNetworkResources array (wholesale). Each item requires name, ports, and exactly one provider block. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether the call succeeded. |
| data | No | The full machine-readable result — list rows, the resource object, query results. Read THIS, not just the summary. |
| summary | Yes | One-line summary of the result. |
| nextSteps | No | Recommended follow-up actions for this task, in order. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructive and idempotent. The description adds the concept of wholesale replacement and the immutability of name in schema but not in description. It provides some added context but not extensively.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is only two sentences, no waste. Front-loaded with action and scope. The reading recommendation is concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (15 params, nested objects, many siblings), the description only covers description, tags, and network resources. Missing mention of cloud identity blocks, access controls, etc. However, output schema exists, and reading recommendation helps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all parameters. The description adds minimal extra meaning beyond the schema, only mentioning wholesale replacement which is also in schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it updates description, tags, and optionally replaces networkResources/nativeNetworkResources. This distinguishes it from create_identity (creation) and other update tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a recommendation to read the access-control skill before first use. It implies usage for updating an identity but lacks explicit when-not-to-use or alternative tools. The wholesale replacement guidance is useful.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_policyUpdate a PolicyADestructiveIdempotentInspect
Update a policy: metadata (description, tags), target scope (targetAll / targetLinks / removeTargetLinks), and bindings (addBindings merges by permission set; removeBindings strips principals from matching bindings). Optimistic concurrency uses version/id from the current state. Call get_resource (kind="policy") first to capture state.
| Name | Required | Description | Default |
|---|---|---|---|
| org | Yes | Organization slug (lowercase kebab-case). NEVER guess — if the user has not named one, ask. On org-not-found, stop and ask; do not retry variants. | |
| name | Yes | Resource name (lowercase kebab-case, starts with a letter, 2-64 chars). Names are IMMUTABLE — renaming = delete + recreate (loses URL, DNS, policy links). | |
| tags | No | Add or update tags without replacing the full set. Submit an empty list to clear all tags. | |
| targetAll | No | When true sets target="all" and clears targetLinks (exclusive with targetLinks/removeTargetLinks). | |
| addBindings | No | Bindings to merge in. Matching permission sets merge principalLinks; otherwise a new binding is appended. | |
| description | No | New description for the policy. | |
| targetLinks | No | Replace the targetLinks list with this exact set. Use removeTargetLinks for incremental removal. | |
| targetQuery | No | Replace the dynamic target query (resources matching it are targeted). | |
| removeTagKeys | No | Tag keys to remove from the resource. | |
| removeBindings | No | Bindings to remove. Each item is { permissions: string[], principalLinks: string[] }; matching permission/principal pairs are stripped and empty bindings are removed. | |
| removeTargetLinks | No | Remove these targetLinks from the existing list (mutually exclusive with full-replacement targetLinks). |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether the call succeeded. |
| data | No | The full machine-readable result — list rows, the resource object, query results. Read THIS, not just the summary. |
| summary | Yes | One-line summary of the result. |
| nextSteps | No | Recommended follow-up actions for this task, in order. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds context beyond annotations: describes merge behavior for bindings ('addBindings merges by permission set; removeBindings strips principals') and optimistic concurrency. Annotations already note destructiveHint=true and idempotentHint=true, so description complements well.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Efficient two-sentence structure. First sentence front-loads purpose and scope; second sentence adds critical usage guidance. No redundant words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 11 parameters with nested objects and an output schema, the description covers major update categories and prerequisite. Could mention potential side-effects or error conditions, but overall adequate for a complex tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (all params described), baseline 3. Description adds value by summarizing parameter groups and clarifying merge/strip semantics for bindings, which is not detailed in schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states 'Update a policy' with specific verb and resource. Lists updateable aspects: metadata, target scope, bindings. Distinguishes from siblings like create_policy by focusing on update semantics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit prerequisite: 'Call get_resource (kind="policy") first to capture state' for optimistic concurrency. Implies when to use (for updating an existing policy) but does not explicitly exclude scenarios or compare to alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_secret_dictionaryUpdate dictionary SecretADestructiveIdempotentInspect
Update a dictionary secret: change description/tags, and/or rotate the secret data by re-supplying the typed fields (entries MERGE into the existing dictionary — a null value deletes that key, omitted keys are kept). Type and name are immutable.
| Name | Required | Description | Default |
|---|---|---|---|
| org | Yes | Organization slug (lowercase kebab-case). NEVER guess — if the user has not named one, ask. On org-not-found, stop and ask; do not retry variants. | |
| name | Yes | Resource name (lowercase kebab-case, starts with a letter, 2-64 chars). Names are IMMUTABLE — renaming = delete + recreate (loses URL, DNS, policy links). | |
| tags | No | Optional tags for classifying the secret (work like Kubernetes labels for search/policy targeting). | |
| entries | No | Key→value pairs to merge into the dictionary. Keys must match [a-zA-Z0-9._-]. A null value DELETES that key; keys you omit are kept (RFC 7386 merge-patch). | |
| description | No | Secret description — capture operator intent (works like a Kubernetes annotation). | |
| removeTagKeys | No | Tag keys to remove from the resource. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether the call succeeded. |
| data | No | The full machine-readable result — list rows, the resource object, query results. Read THIS, not just the summary. |
| summary | Yes | One-line summary of the result. |
| nextSteps | No | Recommended follow-up actions for this task, in order. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds critical behavioral details beyond annotations: entries merge with null deletion, omitted keys kept, and type/name immutability. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no fluff. Front-loaded with action and key details (merge behavior, immutability). Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers core aspects: purpose, merge behavior, immutability. Doesn't discuss output or prerequisites, but output schema exists and context is sufficient for a mutation tool with hints.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 100% coverage, but the description adds semantic meaning for 'entries' (merge behavior) and notes immutability, which aids understanding beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Update') and resource ('dictionary secret'), and distinguishes it from other secret types by detailing the merge behavior. It also specifies immutability of type and name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to use the tool (update dictionary secret) and describes the merge behavior (null deletes, omitted kept). While it doesn't explicitly contrast with sibling tools, the verb and resource make it clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_secret_dockerUpdate Docker registry SecretADestructiveIdempotentInspect
Update a docker secret: change description/tags, and/or rotate the secret data by re-supplying the typed fields (provide the full required set — data is replaced wholesale, not merged). Type and name are immutable.
| Name | Required | Description | Default |
|---|---|---|---|
| org | Yes | Organization slug (lowercase kebab-case). NEVER guess — if the user has not named one, ask. On org-not-found, stop and ask; do not retry variants. | |
| name | Yes | Resource name (lowercase kebab-case, starts with a letter, 2-64 chars). Names are IMMUTABLE — renaming = delete + recreate (loses URL, DNS, policy links). | |
| tags | No | Optional tags for classifying the secret (work like Kubernetes labels for search/policy targeting). | |
| description | No | Secret description — capture operator intent (works like a Kubernetes annotation). | |
| removeTagKeys | No | Tag keys to remove from the resource. | |
| dockerConfigJson | No | The FULL Docker config JSON (the ~/.docker/config.json contents, with an "auths" object) as a string. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether the call succeeded. |
| data | No | The full machine-readable result — list rows, the resource object, query results. Read THIS, not just the summary. |
| summary | Yes | One-line summary of the result. |
| nextSteps | No | Recommended follow-up actions for this task, in order. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description adds behavioral details beyond annotations: data is replaced wholesale, not merged, and type/name are immutable. Annotations already indicate destructive (destructiveHint=true) and idempotent (idempotentHint=true), but the description clarifies the mutation pattern.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long, front-loaded with the purpose, and every phrase earns its place. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 6 parameters and an output schema, the description covers the essential behavioral points: wholesale replacement and immutability. It does not detail the removeTagKeys behavior (though the schema covers it), and it could mention that the operation is destructive. Overall, it is sufficient for an agent to use correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds value by emphasizing that the full required set must be resupplied and that data is replaced wholesale, which clarifies the behavior of the dockerConfigJson and other fields. The schema descriptions are already good, but the overarching description reinforces the key semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the verb (Update) and resource (Docker secret) and specifies the actions: change description/tags and/or rotate secret data. It distinguishes from siblings like create_secret_docker and other update_secret_* tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Description includes important usage context: data is replaced wholesale (not merged), and type/name are immutable. This implies that to change name or type, one must delete and recreate. However, it does not explicitly state when to avoid using this tool or mention alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_secret_ecrUpdate AWS ECR pull SecretADestructiveIdempotentInspect
Update a ecr secret: change description/tags, and/or rotate the secret data by re-supplying the typed fields (provide the full required set — data is replaced wholesale, not merged). Type and name are immutable.
| Name | Required | Description | Default |
|---|---|---|---|
| org | Yes | Organization slug (lowercase kebab-case). NEVER guess — if the user has not named one, ask. On org-not-found, stop and ask; do not retry variants. | |
| name | Yes | Resource name (lowercase kebab-case, starts with a letter, 2-64 chars). Names are IMMUTABLE — renaming = delete + recreate (loses URL, DNS, policy links). | |
| tags | No | Optional tags for classifying the secret (work like Kubernetes labels for search/policy targeting). | |
| repos | No | ECR repository URIs this credential may pull from (at least one), e.g. 123456789012.dkr.ecr.us-east-1.amazonaws.com/myrepo. | |
| roleArn | No | Optional IAM role ARN to assume (arn:…). | |
| accessKey | No | AWS access key ID (starts with AKIA…). | |
| secretKey | No | AWS secret access key. | |
| externalId | No | Optional STS external ID for the assumed role. | |
| description | No | Secret description — capture operator intent (works like a Kubernetes annotation). | |
| removeTagKeys | No | Tag keys to remove from the resource. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether the call succeeded. |
| data | No | The full machine-readable result — list rows, the resource object, query results. Read THIS, not just the summary. |
| summary | Yes | One-line summary of the result. |
| nextSteps | No | Recommended follow-up actions for this task, in order. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds value beyond the annotations by specifying that data is replaced wholesale, not merged, and that type and name are immutable. This provides concrete behavioral details about the destructive nature (consistent with destructiveHint=true) and the idempotency implication (full replace). It does not contradict any annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise: three sentences that front-load the key purpose and usage guidelines. Every sentence provides unique and essential information without any redundancy or unnecessary detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (10 parameters, annotations present, output schema exists), the description adequately explains the replacement behavior and immutability. It could be improved by mentioning that the secret must already exist or that specific permissions are needed, but the current content is sufficient for competent use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema description coverage, the baseline is 3. The description goes beyond the schema by explaining the semantics of re-supplying all typed fields (i.e., data is replaced wholesale), which gives the agent important behavioral context for how to use the parameters correctly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'update' and the resource 'ecr secret', and lists the modifiable aspects: description, tags, and secret data. It also notes immutable fields (type and name), effectively distinguishing it from sibling tools for other secret types and from create operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides context on when to use the tool (to change description/tags or rotate secret data) and notes that data is replaced wholesale, not merged. It also warns that type and name are immutable, implying these should not be updated here. However, it does not explicitly guide when to use this tool over sibling update_secret_* tools or when to avoid it (e.g., for renaming), but the tool name and title differentiate by secret type.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_secret_opaqueUpdate opaque SecretADestructiveIdempotentInspect
Update a opaque secret: change description/tags, and/or rotate the secret data by re-supplying the typed fields (provide the full required set — data is replaced wholesale, not merged). Type and name are immutable.
| Name | Required | Description | Default |
|---|---|---|---|
| org | Yes | Organization slug (lowercase kebab-case). NEVER guess — if the user has not named one, ask. On org-not-found, stop and ask; do not retry variants. | |
| name | Yes | Resource name (lowercase kebab-case, starts with a letter, 2-64 chars). Names are IMMUTABLE — renaming = delete + recreate (loses URL, DNS, policy links). | |
| tags | No | Optional tags for classifying the secret (work like Kubernetes labels for search/policy targeting). | |
| payload | No | The secret value (plaintext, or a base64 string when encoding="base64"). | |
| encoding | No | Encoding of payload — "plain" (default) or "base64". | |
| description | No | Secret description — capture operator intent (works like a Kubernetes annotation). | |
| removeTagKeys | No | Tag keys to remove from the resource. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether the call succeeded. |
| data | No | The full machine-readable result — list rows, the resource object, query results. Read THIS, not just the summary. |
| summary | Yes | One-line summary of the result. |
| nextSteps | No | Recommended follow-up actions for this task, in order. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations (destructiveHint=true, idempotentHint=true, readOnlyHint=false) are supported by the description stating data is replaced wholesale and type/name are immutable. The description adds context that the full set must be re-supplied, which goes beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence with a clarifying parenthetical. It is front-loaded with the action and resource, and every phrase adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given full schema coverage and an output schema, the description adequately covers the main behavioral aspects (full replacement, immutability). It could mention prerequisites like permissions, but the annotations already hint at destructive behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds a behavioral note about data replacement but does not provide new semantics about individual parameters beyond what the schema already documents.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'update', the resource 'opaque secret', and specifies actions: change description/tags and rotate secret data. It distinguishes from sibling tools by noting that type and name are immutable, which implies other secret types may differ.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides guidance on when to use (to update an opaque secret) and explains that data is replaced wholesale, not merged. It does not explicitly state when not to use or list alternatives, but the sibling context suggests other tools for other secret types.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_secret_tlsUpdate TLS SecretADestructiveIdempotentInspect
Update a tls secret: change description/tags, and/or rotate the secret data by re-supplying the typed fields (provide the full required set — data is replaced wholesale, not merged). Type and name are immutable.
| Name | Required | Description | Default |
|---|---|---|---|
| key | No | PEM-encoded private key for the certificate. | |
| org | Yes | Organization slug (lowercase kebab-case). NEVER guess — if the user has not named one, ask. On org-not-found, stop and ask; do not retry variants. | |
| cert | No | PEM-encoded TLS certificate. | |
| name | Yes | Resource name (lowercase kebab-case, starts with a letter, 2-64 chars). Names are IMMUTABLE — renaming = delete + recreate (loses URL, DNS, policy links). | |
| tags | No | Optional tags for classifying the secret (work like Kubernetes labels for search/policy targeting). | |
| chain | No | Optional PEM-encoded certificate chain. | |
| description | No | Secret description — capture operator intent (works like a Kubernetes annotation). | |
| removeTagKeys | No | Tag keys to remove from the resource. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether the call succeeded. |
| data | No | The full machine-readable result — list rows, the resource object, query results. Read THIS, not just the summary. |
| summary | Yes | One-line summary of the result. |
| nextSteps | No | Recommended follow-up actions for this task, in order. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (idempotentHint=true, destructiveHint=true), the description adds that data is replaced wholesale and that type and name are immutable. This clarifies the operation's behavior and consequences.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loading the primary action. Some redundancy could be trimmed, but it is efficient and focused.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (8 parameters, 2 required) and the presence of an output schema, the description provides the essential behavioral rules (wholesale replacement, immutability). It covers what the agent needs to know to use the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, but the description adds valuable context: 'provide the full required set — data is replaced wholesale, not merged.' This clarifies that parameters like key, cert, chain must be fully re-supplied, enhancing understanding beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Update a TLS secret') and the specific resources it operates on (description, tags, secret data). It distinguishes itself from sibling tools like update_secret_opaque by specifying 'TLS' and mentioning typed fields.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to use (to update a TLS secret) and important constraints: data is replaced wholesale, not merged, and type/name are immutable. It does not explicitly mention alternatives but provides sufficient context for correct invocation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_volumesetUpdate a VolumesetADestructiveIdempotentInspect
Update mutable volumeset fields: description, tags, initialCapacity (for newly-provisioned volumes), snapshot policy, autoscaling, mountOptions. snapshots/autoscaling/mountOptions REPLACE the entire stored object — include every field you want to keep. Filesystem type and performance class are IMMUTABLE — to change either, snapshot first and recreate. customEncryption cannot be set here — apply a full manifest with the CLI (cpln apply; get_resource_schema kind=volumeset first). Changing initialCapacity does not resize existing volumes; expand_volumeset grows them.
| Name | Required | Description | Default |
|---|---|---|---|
| gvc | Yes | GVC slug (lowercase kebab-case). Use the GVC the user named; otherwise discover with list_resources (kind="gvc") and let them choose — never guess (a wrong GVC targets the wrong environment). | |
| org | Yes | Organization slug (lowercase kebab-case). NEVER guess — if the user has not named one, ask. On org-not-found, stop and ask; do not retry variants. | |
| name | Yes | Resource name (lowercase kebab-case, starts with a letter, 2-64 chars). Names are IMMUTABLE — renaming = delete + recreate (loses URL, DNS, policy links). | |
| tags | No | Add or update tags without replacing the full set. Submit an empty list to clear all tags. | |
| snapshots | No | REPLACES the entire snapshot policy — include every field you want to keep (omitted fields are removed). | |
| autoscaling | No | REPLACES the entire autoscaling object — include every field you want to keep (omitted fields are removed). | |
| description | No | New description. | |
| mountOptions | No | REPLACES the entire mountOptions object (shared-filesystem volume sets only) — include every field you want to keep. | |
| removeTagKeys | No | Tag keys to remove from the resource. | |
| initialCapacity | No | Update the initialCapacity (note: existing volumes do not shrink — expand_volumeset does hot expansion). |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether the call succeeded. |
| data | No | The full machine-readable result — list rows, the resource object, query results. Read THIS, not just the summary. |
| summary | Yes | One-line summary of the result. |
| nextSteps | No | Recommended follow-up actions for this task, in order. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations mark this as destructiveHint=true and idempotentHint=true. The description adds critical context: snapshots/autoscaling/mountOptions 'REPLACE the entire stored object', tags are additive (not replace), and changing initialCapacity does not resize existing volumes. It also warns about customEncryption being unsupported here. No contradictions with annotations; it enriches the behavioral model.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single paragraph of ~90 words, front-loaded with a list of mutable fields. It wastes no words but could benefit from line breaks or bullets for readability. Still, it's efficient and every sentence adds information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 10 parameters, nested objects, and 50+ sibling tools, the description covers all essential points: mutable fields, replace vs additive semantics, immutability constraints, and cross-tool guidance (expand_volumeset, CLI). Output schema exists, so return values don't need explanation. No gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds value beyond schema: it clarifies replace semantics for nested objects (snapshots, autoscaling, mountOptions) and additive behavior for tags. It also explains why initialCapacity changes don't affect existing volumes. This goes above baseline, justifying 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Update mutable volumeset fields: description, tags, initialCapacity, ...' clearly stating the verb (update) and resource (volumeset) with specific fields. It distinguishes from sibling tools like 'create_volumeset' and 'expand_volumeset' by noting where to resize existing volumes, and from 'get_resource_schema' for customEncryption. No ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use this tool (updating mutable fields) and when not to (for immutable fields like filesystem type, or for customEncryption which requires CLI). It names alternatives: 'snapshot first and recreate' for immutable changes, 'expand_volumeset' for resizing. This meets all criteria for explicit when/when-not/alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_workloadUpdate a WorkloadADestructiveIdempotentInspect
Update an existing workload (PATCH semantics — only specified fields change). Workload type and name are IMMUTABLE: trying to change either via update fails — those require delete + recreate. If the target is a CRON workload, patch its schedule / job policy / suspend / containers here (autoscaling/capacityAI/timeoutSeconds/debug do not apply to cron and are rejected); schedule/job fields are likewise rejected against a non-cron workload. Call get_resource (kind="workload") first to capture current state so a rollback exists. Avoid silent downgrades (probes, autoscaling) — see the production-grade defaults in get_cpln_rules. Advanced spec sections (loadBalancer, sidecar, extras, localOptions, rolloutOptions, securityOptions, requestRetryPolicy) are NOT here — use the matching configure_workload_* tool. Recommended reading before first use: get_cpln_skill("workload") — the runbook for this tool family (read once per session).
| Name | Required | Description | Default |
|---|---|---|---|
| gvc | Yes | GVC slug (lowercase kebab-case). Use the GVC the user named; otherwise discover with list_resources (kind="gvc") and let them choose — never guess (a wrong GVC targets the wrong environment). | |
| org | Yes | Organization slug (lowercase kebab-case). NEVER guess — if the user has not named one, ask. On org-not-found, stop and ask; do not retry variants. | |
| name | Yes | Workload name (lowercase kebab-case, must start with a letter, max 49 chars, cannot end with -headless). The name is IMMUTABLE — "renaming" requires delete + recreate (loses public URL, internal DNS, policy targetLinks). | |
| tags | No | Add or update tags without replacing the full set. Submit an empty list to clear all tags. | |
| debug | No | Enable or disable spec.defaultOptions.debug. Not valid for a cron workload. | |
| public | No | Convenience shortcut: opens the external firewall BOTH ways — inbound 0.0.0.0/0 AND outbound 0.0.0.0/0. Mutually exclusive with firewallConfig (an explicit firewallConfig overrides it). | |
| suspend | No | Enable or disable spec.defaultOptions.suspend (for a cron workload, pauses/resumes scheduled runs) | |
| schedule | No | New cron schedule (NUMERIC 5-field expression, e.g. "0 */6 * * *" — no macros or day/month names). Only valid when the target workload is type "cron". | |
| capacityAI | No | Enable or disable spec.defaultOptions.capacityAI (default ON for serverless/standard, stripped on stateful/cron; explicit true is rejected with the cpu metric and with GPUs). Not valid for a cron workload. | |
| containers | No | Optional container patches, merged by required `name` into existing containers. Minimal patch item is { "name": "app" }; other containers are preserved. Set only fields you want to change. An unknown name ADDS a new container and must include image. | |
| autoscaling | No | Autoscaling patch → merged key-by-key into spec.defaultOptions.autoscaling. | |
| description | No | Update workload description | |
| historyLimit | No | Number of completed job instances to retain (default 5) | |
| identityLink | No | Identity link granting 3rd-party cloud resource access, e.g. //identity/my-id | |
| removeTagKeys | No | Tag keys to remove from the resource. | |
| restartPolicy | No | What to do when a job instance fails | |
| firewallConfig | No | Replace the firewall config wholesale. | |
| timeoutSeconds | No | Set spec.defaultOptions.timeoutSeconds — max request duration (platform default 5s; serverless caps at 600) | |
| concurrencyPolicy | No | What to do when a run is due while a prior run is still active (default Forbid) | |
| supportDynamicTags | No | Enable or disable spec.supportDynamicTags (detects image digest changes) | |
| activeDeadlineSeconds | No | Max seconds to wait for the job to complete before it is stopped |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether the call succeeded. |
| data | No | The full machine-readable result — list rows, the resource object, query results. Read THIS, not just the summary. |
| summary | Yes | One-line summary of the result. |
| nextSteps | No | Recommended follow-up actions for this task, in order. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description fully discloses behavioral traits: PATCH semantics, immutability of type/name, field validity per workload type, side effects (downgrades), and prerequisites (capture state). Annotations provide destructiveHint=true, which the description supports by warning about changes. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with key points front-loaded (PATCH semantics, immutability, cron/non-cron). While dense and somewhat lengthy, every sentence serves a purpose, and the organization aids comprehension. Minor redundancy could be trimmed but overall effective.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (21 parameters, nested schemas, no output schema), the description provides comprehensive context: usage scenarios, limitations, prerequisites, and references to complementary tools. It fully addresses the agent's needs for safe and correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema coverage, the description still adds value by explaining field interactions (e.g., public vs firewallConfig), validity constraints (cron vs non-cron), and providing usage guidance for complex parameters like containers and firewallConfig, exceeding the baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it updates an existing workload with PATCH semantics, specifies what fields are mutable, and identifies immutable attributes (type, name) that require delete+recreate. It distinguishes from siblings by noting advanced sections are in other tools, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells when to use this tool (update existing workload), when not (changing type/name), and directs to sibling tools for advanced sections (configure_workload_*). It also recommends reading get_cpln_skill('workload') and capturing state with get_resource, providing clear context for correct usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upgrade_templateUpgrade TemplateADestructiveIdempotentInspect
Upgrade an installed release to a new version and/or updated values. Identify the release by name only — the template and GVC are immutable and read from the installed release, so you do NOT pass them. Omit version to move to the latest available. values REPLACE the release's current values entirely (no merge) — start from the currently applied values (CLI: cpln helm get values <name> --all), not the template example. Verify with get_installed_template after. Recommended reading before first use: get_cpln_skill("template-catalog") — the runbook for this tool family (read once per session).
| Name | Required | Description | Default |
|---|---|---|---|
| org | Yes | Organization slug (lowercase kebab-case). NEVER guess — if the user has not named one, ask. On org-not-found, stop and ask; do not retry variants. | |
| name | Yes | Release name — the unique, immutable identifier for this installed instance within the org. | |
| values | Yes | The complete values.yaml for the release going forward — it REPLACES the currently applied values entirely (there is no reuse-values merge). Start from the release's CURRENT values (CLI: `cpln helm get values <RELEASE> --all`; there is no MCP path), not the template example, or previously customized settings silently fall back to defaults. | |
| version | No | Target version to upgrade to. Omit for the latest available version. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether the call succeeded. |
| data | No | The full machine-readable result — list rows, the resource object, query results. Read THIS, not just the summary. |
| summary | Yes | One-line summary of the result. |
| nextSteps | No | Recommended follow-up actions for this task, in order. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds critical behavioral context beyond annotations: values REPLACE entirely, no merge, template/GVC are immutable. It explains how to obtain current values (CLI command) and warns against using template example values. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (4 sentences) and well-structured: first sentence states purpose, then key usage details, then critical behavioral warning, and finally post-upgrade action. Every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of an upgrade with values replacement, the description is complete: it covers identification, version handling, values sourcing, replacement behavior, and verification step. It also references external documentation for deeper context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description enriches parameters significantly: for 'values' it explains replacement semantics and source, for 'version' it specifies omission behavior, for 'name' it clarifies immutability. This adds meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool upgrades an installed release to a new version and/or updated values. It distinguishes from sibling tools like install_template (new installation) and get_installed_template (verification) by specifying the immutable template/GVC context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit when-to-use and how-to-use guidelines: identify by name only, omit version for latest, values replace entirely (no merge), start from current values, and verify after upgrade. It also recommends reading the runbook for the tool family.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
workload_execWorkload Exec — Run a Command in a ContainerADestructiveInspect
Run a single command inside a running workload container and return its output (like cpln workload exec). Runs as the container user against a live replica and is recorded in the org audit trail. Pass command as an argv array (command[0] is the executable); it is not run through a shell, so for pipes, globs, or redirection pass an explicit shell, e.g. ["sh","-lc",""]. Optional stdin pipes UTF-8 text in.
One-shot only: no interactive shells, TTYs, REPLs, or editors (they hang until the timeout). Defaults to the first running replica and first container (override with replica/container; discover replicas via list_workload_replicas). exitCode is best-effort (null on timeout or truncation). Not supported for type=vm workloads.
Get the user's explicit approval before any state-changing command, and prefer the least-invasive command that answers the question. See the workload skill for exec guidance and the cpln CLI fallback. Recommended reading before first use: get_cpln_skill("workload") — the runbook for this tool family (read once per session).
| Name | Required | Description | Default |
|---|---|---|---|
| gvc | Yes | GVC slug (lowercase kebab-case). Use the GVC the user named; otherwise discover with list_resources (kind="gvc") and let them choose — never guess (a wrong GVC targets the wrong environment). | |
| org | Yes | Organization slug (lowercase kebab-case). NEVER guess — if the user has not named one, ask. On org-not-found, stop and ask; do not retry variants. | |
| stdin | No | Optional UTF-8 text piped to the command on stdin (max 64KB). The command must not require an interactive prompt. | |
| command | Yes | Command and arguments as an argv array, e.g. ["ls","-la","/app"]. command[0] is the executable. It is NOT run through a shell — to use pipes, globs, or env expansion, pass an explicit shell, e.g. ["sh","-lc","echo $HOME && ls"]. The command must not require an interactive TTY (no shells/REPLs/editors). | |
| replica | No | Exact replica (pod) name. Default: the first running replica. Use list_workload_replicas to discover names. | |
| location | No | GVC location / deployment name (e.g. "aws-us-east-1"). Default: the GVC's first location. | |
| workload | Yes | Workload to execute the command in. | |
| container | No | Optional container name string, not an index and not a link. Omit to use the first container with ports, otherwise the first container. Use get_resource kind="workload" to see container names. | |
| maxOutputBytes | No | Cap on captured output bytes (1KB–1MB, default 256KB). Beyond it, output is truncated and flagged. | |
| timeoutSeconds | No | Hard wall-clock limit (1–300s, default 60). On timeout the command is killed and partial output is returned. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether the call succeeded. |
| data | No | The full machine-readable result — list rows, the resource object, query results. Read THIS, not just the summary. |
| summary | Yes | One-line summary of the result. |
| nextSteps | No | Recommended follow-up actions for this task, in order. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses key behavioral traits: runs as container user, recorded in audit trail, not through a shell, default to first replica/container, exit code best-effort, timeout/truncation behavior, and unsupported workload types. These go beyond the annotations which only mark destructiveHint=true.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single dense paragraph that front-loads the primary purpose. While it packs many details, each sentence adds value. It could be slightly more concise but remains efficient for the complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (10 params, output schema present), the description covers all essential aspects: core functionality, shell caveat, one-shot constraint, defaults, exit code, unsupported workloads, guidance on approval and siblings. It is thorough without needing to explain return values.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema coverage, the baseline is 3. The description adds operational context: explains argv array usage, shell pipes, stdin, default behaviors, and limitations (e.g., exitCode best-effort). This extra value justifies a 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool runs a single command in a running workload container and returns output. It specifies the verb 'Run a command' and the resource, and distinguishes itself from siblings like list_workload_replicas and get_workload_logs by mentioning alternatives and limitations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance: one-shot only, no interactive shells, not for VM workloads, user approval needed, prefer least-invasive command, refer to workload skill, and mentions sibling tools for replica discovery and CLI fallback.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
workload_reveal_secretWorkload — Grant Secret AccessAIdempotentInspect
Grant an EXISTING workload access to a secret: ensures the workload has an identity and creates/updates a policy with reveal permission. The workload must already exist — for a NEW workload, call create_workload first, then this (a deployment referencing a secret stays paused until access is granted, then resumes). Does NOT modify workload env/volumes — reference the secret there via cpln://secret/ in the spec. Recommended reading before first use: get_cpln_skill("setup-secret") — the runbook for this tool family (read once per session).
| Name | Required | Description | Default |
|---|---|---|---|
| gvc | Yes | GVC slug (lowercase kebab-case). Use the GVC the user named; otherwise discover with list_resources (kind="gvc") and let them choose — never guess (a wrong GVC targets the wrong environment). | |
| org | Yes | Organization slug (lowercase kebab-case). NEVER guess — if the user has not named one, ask. On org-not-found, stop and ask; do not retry variants. | |
| policyName | No | Optional org-scoped policy resource name to create/use; pass the name only. Omit to default to {gvc}-{workloadName}-secrets-policy. | |
| secretName | Yes | Existing org-scoped secret name to grant access to; pass the name only, not cpln://secret/... or //secret/... . | |
| identityName | No | Optional identity resource name to create/use in this GVC; pass the name only. Omit to default to {gvc}-{workloadName}. | |
| workloadName | Yes | Existing workload name that should receive secret access; pass the name only, not a link. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether the call succeeded. |
| data | No | The full machine-readable result — list rows, the resource object, query results. Read THIS, not just the summary. |
| summary | Yes | One-line summary of the result. |
| nextSteps | No | Recommended follow-up actions for this task, in order. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds context beyond annotations: mentions that it creates/updates a policy and ensures identity (idempotent consistent with annotation), clarifies it does not modify workload env/volumes, and describes the deployment lifecycle. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each serving a distinct purpose: primary action, prerequisite/ordering, and boundary clarification plus recommendation. Front-loaded with main purpose. No fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers the overall process, dependencies, and what the tool does not do. Includes a recommendation to read the skill runbook. Could mention error conditions or idempotent behaviour more explicitly, but sufficient for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so description's parameter info is supplementary. The description adds workflow context (workload must exist, secret must exist) and default naming conventions, but does not significantly enhance parameter meaning beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'grant', the resource 'existing workload access to a secret', and the actions 'ensures workload has an identity and creates/updates a policy'. It distinguishes from siblings like create_workload by specifying the prerequisite of an existing workload.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use ('workload must already exist') and when not ('for a NEW workload, call create_workload first'). Also describes the effect on deployment (paused until access granted, then resumes). No explicit listing of alternatives for other scenarios, but the guidance is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Claim this connector by publishing a /.well-known/glama.json file on your server's domain with the following structure:
{
"$schema": "https://glama.ai/mcp/schemas/connector.json",
"maintainers": [{ "email": "your-email@example.com" }]
}The email address must match the email associated with your Glama account. Once published, Glama will automatically detect and verify the file within a few minutes.
Control your server's listing on Glama, including description and metadata
Access analytics and receive server usage reports
Get monitoring and health status updates for your server
Feature your server to boost visibility and reach more users
For users:
Full audit trail – every tool call is logged with inputs and outputs for compliance and debugging
Granular tool control – enable or disable individual tools per connector to limit what your AI agents can do
Centralized credential management – store and rotate API keys and OAuth tokens in one place
Change alerts – get notified when a connector changes its schema, adds or removes tools, or updates tool definitions, so nothing breaks silently
For server owners:
Proven adoption – public usage metrics on your listing show real-world traction and build trust with prospective users
Tool-level analytics – see which tools are being used most, helping you prioritize development and documentation
Direct user feedback – users can report issues and suggest improvements through the listing, giving you a channel you would not have otherwise
The connector status is unhealthy when Glama is unable to successfully connect to the server. This can happen for several reasons:
The server is experiencing an outage
The URL of the server is wrong
Credentials required to access the server are missing or invalid
If you are the owner of this MCP connector and would like to make modifications to the listing, including providing test credentials for accessing the server, please contact support@glama.ai.
Discussions
No comments yet. Be the first to start the discussion!