vcf-orchestrator-mcp
MCP server that lets an AI assistant discover, author, run and inspect VCF Operations Orchestrator (vRO) 9.x workflows and actions, plus reach the full Orchestrator REST API.
Check connectivity:
vro_server_inforeports version, auth mode and token expiry.Find/read workflows:
vro_find_workflows,vro_get_workflow(inputs, outputs, version, optionally full content).Run and track workflows:
vro_run_workflowwith plain JSON inputs,vro_get_execution(state, outputs, error, logs, optional wait),vro_list_executions.Find/read/run actions:
vro_find_actions,vro_get_action(script, inputs, return type),vro_run_action.Author content:
vro_save_actionandvro_save_workflowcreate or update (with automatic version bumping),vro_run_scriptruns ad-hoc ES5 snippets via a temporary action.Manage versions:
vro_set_versionssets or bumps action/workflow versions without touching content.Delete:
vro_delete_workflow.Raw API access:
vro_api_search,vro_api_describe,vro_api_callcover 300+ Orchestrator REST operations (GET/POST/PUT/PATCH/DELETE).
Provides tools for interacting with VMware VCF Operations Orchestrator (vRO) 9.x, including searching, describing, and calling REST API operations; finding and running workflows and actions; inspecting executions and logs; saving actions; and running ad-hoc scripts. Supports both embedded VCF Automation and external/standalone Orchestrator deployments.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@vcf-orchestrator-mcprun the 'Create VM' workflow with name web01 and 2 CPUs"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
vcf-orchestrator-mcp
MCP server that lets your AI assistant work directly with VCF Operations Orchestrator (vRO) 9.x: find and read workflows, create and update actions and workflows, run them, and read executions and logs. It works with the Orchestrator embedded in VCF Automation 9 and with a standalone Orchestrator, and has been verified on VCF Automation 9.1.1.
It works with any MCP client: Claude Desktop, Claude Code, Cursor, VS Code with GitHub Copilot, and others.
๐ Full documentation: docs ยท ๐ Blog post with demo video
Quick start
Install (Node.js 18.17+):
npm install -g vcf-orchestrator-mcpRun the one-time setup. It creates a VCF Automation service account and stores its refresh token on your machine. The password is asked for with a masked prompt and never stored.
vcf-orchestrator-mcp setup --url https://auto.example.lab --org <org name> --user <local admin> --name <service account name> --role "Organization Owner,Orchestrator Administrator" --insecure--orgis the org name fromhttps://<host>/tenant/<name>. The service account needs the Orchestrator Administrator role. Details and options: Setup and Service Account.Add it to your client. Setup prints this block; no password or token goes in it:
{ "mcpServers": { "vcf-orchestrator": { "command": "vcf-orchestrator-mcp", "env": { "VRO_URL": "https://auto.example.lab", "VRO_AUTH_MODE": "api-token", "VRO_ORG": "<org name>", "VRO_INSECURE": "true" } } } }Claude Code, Cursor and VS Code: Client Configuration.
Fully restart your client, then ask: "Run vro_server_info and tell me which Orchestrator I'm connected to."
The server renews its token by itself, so you never paste tokens: Token Refresh.
Related MCP server: ObjectStack MCP Server
Tools
Tool | What it does |
| Connectivity check: version, auth mode, token expiry |
| Find workflows, read inputs and outputs |
| Run workflows with plain JSON inputs, read state, outputs and logs |
| Find, read and run actions |
| Create or update actions and workflows; versions are bumped automatically |
| Run a quick ES5 snippet via a temporary action |
| Set or bump versions of actions and workflows |
| Delete a workflow |
| Reach the full Orchestrator REST API (303 operations) |
Parameters for each: Tools Reference.
Documentation
Page | What's in it |
Requirements, npm and source installs, updating | |
The setup command, roles, SSO-only orgs | |
Claude Desktop, Claude Code, Cursor, VS Code | |
All | |
Prompts to try and worked walkthroughs | |
Error messages and fixes | |
Common questions |
Also in this repo
skill/vcf-orchestrator-mcp: a free agent skill that teaches agents how to use these tools well.examples/onboard-vms-by-name.workflow.json: a fullvro_save_workflowspec, run end to end on VCF Automation 9.1.1.docs/: the full documentation.
Development
git clone https://github.com/imtrinity94/vcf-orchestrator-mcp.git
cd vcf-orchestrator-mcp
npm install # also builds into dist/test-client.mjs exercises every tool over stdio against a mock or lab Orchestrator.
Releasing: pushing a v* tag publishes to npm through .github/workflows/publish.yml (npm trusted publishing, no stored token). Or run npm login and npm publish locally.
License
MIT
Available Tools
17 toolsvro_api_callA
Call any Orchestrator REST endpoint (full access โ GET/POST/PUT/PATCH/DELETE). Identify it by operationId (preferred, from vro_api_search) or by method + path relative to /vco/api. Inventory lists (link/attributes) are flattened into 'items' unless raw=true.
| Name | Required | Description | Default |
|---|---|---|---|
| raw | No | Return the body exactly as received | |
| body | No | JSON body (object) or a raw string (XML/text) | |
| path | No | e.g. /workflows/{id} or a concrete /workflows/abc-123; relative to the API base | |
| query | No | Query params; arrays become repeated keys (e.g. conditions: ['name~vm']) | |
| accept | No | json (default) | xml | text | explicit media type | |
| method | No | ||
| headers | No | ||
| maxChars | No | ||
| pathParams | No | Values for {placeholders} in the path | |
| contentType | No | ||
| operationId | No | ||
| includeHeaders | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose meaningful traits: full write/delete capability (destructive methods named), and the non-obvious output transformation that inventory lists are flattened into 'items' unless raw=true. Auth requirements, rate limits, and error behavior are not mentioned, so it is not complete, but the response-shaping disclosure is real value beyond the schema.
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 dense sentences with zero filler; the endpoint/method scope and identification mechanism are front-loaded, and the output-shaping caveat follows immediately. Every clause carries information an agent needs.
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 12-parameter generic passthrough with no output schema and no annotations, the description covers the essentials: what it reaches, how to target it, and how the body is shaped. It stops short of the surrounding context an agent would want (auth prerequisites, error/validation behavior, relationship to the dedicated workflow/action tools), leaving a modest gap given the tool's complexity.
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 50%, so the description must compensate, and it does for the central parameters: it explains operationId (preferred, sourced from vro_api_search), method+path relative to /vco/api, and the raw flag's effect on flattening. Several parameters (maxChars, includeHeaders, contentType, headers, body) remain undocumented in both schema and description, which keeps it short of a 5.
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 a specific verb and resource ('Call any Orchestrator REST endpoint'), enumerates the full method scope (GET/POST/PUT/PATCH/DELETE), and explicitly routes discovery to the sibling vro_api_search for operationId. An agent can distinguish this generic passthrough from the dedicated siblings without opening the schema.
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 a clear preference rule for identifying the endpoint (operationId preferred, sourced from vro_api_search, else method+path), which is genuine usage guidance. However, it never says when to prefer the dedicated siblings (vro_run_workflow, vro_get_workflow, vro_find_workflows, etc.) over this generic caller, nor when this tool is the wrong choice. Usage is implied rather than bounded.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vro_api_describeARead-only
Show one Orchestrator API operation in detail: path/query/header parameters, request body schema ($refs resolved) and success response shape. Use before vro_api_call for anything with a body.
| Name | Required | Description | Default |
|---|---|---|---|
| depth | No | How deep to inline nested schemas (default 3) | |
| operationId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnlyHint=true already declaring the safety profile, the description adds real value: it discloses that $refs are resolved in the returned body schema and specifies the success-response coverage. It stops short of stating anything about failure modes (e.g., unknown operationId) or how large a resolved schema may be.
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, zero filler. The output enumeration comes first and the routing instruction second, which is the right front-loading for a lookup tool.
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?
No output schema exists, so the description must carry the return-value burden, and it does: it names the parameter categories, the resolved body schema, and the success response shape. The only omission is the provenance of operationId, which an agent must infer from the sibling search 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 50%: depth is documented inline ('How deep to inline nested schemas (default 3)') while operationId has no schema description. The description indirectly supports depth by advertising $refs resolution, but never explains where an operationId comes from (presumably vro_api_search), so it only partially compensates for the gap.
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?
Specific verb ('Show') plus specific resource ('one Orchestrator API operation in detail'), with an enumeration of exactly what is returned: path/query/header parameters, request body schema with $refs resolved, and success response shape. An agent can distinguish this from the sibling vro_api_search (find operations) and vro_api_call (invoke them) without opening any schema.
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 routes usage: 'Use before vro_api_call for anything with a body,' naming both the alternative tool and the selecting condition. No explicit when-not is given (e.g., that a bodyless GET needs no describe step), so it falls just short of the full when/when-not/alternatives bar.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vro_api_searchARead-only
Search the Orchestrator REST API spec (300+ operations) by keyword, e.g. 'workflow execution logs', 'configuration element', 'package export', 'resource element'. Returns operationIds to use with vro_api_describe / vro_api_call. Pass query='' with listTags=true to see API areas.
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | Restrict to an API area (tag), partial match | |
| limit | No | ||
| query | Yes | Keywords, a path fragment like '/packages', or an operationId | |
| method | No | ||
| listTags | No | Also return all API tags with operation counts |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, so safety is covered. The description adds useful context: the spec size (300+ operations), the return type (operationIds), and the special empty-query mode. It does not mention result limits/caps or ranking behavior, which matters for a search tool.
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 tightly-packed sentences: purpose, outputs/next-step, and a discovery tip. Front-loaded and no filler, though the example list is slightly dense in one sentence.
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?
No output schema, but the description states what comes back (operationIds) and how to use them, which is what matters for a discovery tool. Missing: result-count behavior and how tag/method filters interact.
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 60%, so the description must partially compensate. It explains the empty-query/listTags idiom and names concrete query shapes ('workflow execution logs', '/packages'), going beyond the schema for the two parameters an agent most needs to understand. It does not clarify tag/method/limit 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?
States a specific verb (Search) and resource (Orchestrator REST API spec) with concrete example queries, and explicitly names the sibling tools (vro_api_describe / vro_api_call) that consume its output. An agent can distinguish it from every sibling in the list.
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?
Clearly situates this as the discovery step before vro_api_describe/vro_api_call, and gives the query='' + listTags=true idiom for browsing API areas. It lacks explicit when-not-to-use guidance (e.g., when to prefer the higher-level workflow tools like vro_find_workflows).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vro_delete_workflowBDestructive
Delete a workflow by id or exact name.
| Name | Required | Description | Default |
|---|---|---|---|
| force | No | ||
| workflow | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The destructiveHint=true annotation already tells the agent this is a destructive operation, lowering the disclosure bar. The description usefully adds that the workflow may be resolved by an exact name rather than only an id, but says nothing about whether deletion is permanent, what dependencies or versions are affected, or what permissions are needed, and the boolean 'force' behavior is entirely undisclosed.
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?
A single tight sentence with the operation and identifier semantics front-loaded and no filler. It is arguably over-terse for a destructive tool, but nothing is wasted.
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 destructive, irreversible-sounding delete with an undocumented 'force' flag, no output schema, and only a destructiveHint annotation, the description omits permanence, dependency/version side effects, and auth requirements. An agent has enough to attempt the call but not enough to judge the consequences.
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 0% schema description coverage, the description carries the burden, and it does clarify the required 'workflow' parameter (id or exact name), which is more than the schema states. However, the 'force' boolean is left completely unexplained in both schema and description, so the compensation is only partial.
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 a specific verb and resource ('Delete a workflow'), which clearly separates it from read-oriented siblings like vro_get_workflow and write siblings like vro_save_workflow. It adds a resolvable-identifier clause ('by id or exact name'), though it never references a sibling by name to route the agent explicitly.
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?
There is no guidance on when to use this versus alternatives such as vro_save_workflow (which can overwrite) or vro_find_workflows (to locate a target first), and no mention of prerequisites or irreversibility. The agent must infer usage entirely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vro_find_actionsBRead-only
Find Orchestrator actions by partial module or name (e.g. 'getAllVMs', 'com.vmware.library.vc'). Returns fqn module/name and id.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already establishes this is a safe, non-mutating lookup, so the description's burden is lower. It adds useful return-shape information (fqn module/name and id) but says nothing about result ordering, truncation, or how limit interacts with results.
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 tight sentences, front-loaded with the action and its matching semantics, followed by the return fields. No filler; only the bare return clause is slightly clipped.
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 no output schema, the description must carry return-value context; it names the returned fields but not the surrounding structure (list, ordering, whether matches are exhaustive within limit). Adequate for a simple search tool, but incomplete on result 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 description coverage is 0%, so the description must compensate. It explains the semantics of 'query' (partial module or name match) with examples, which is genuinely helpful, but 'limit' is completely undocumented in both schema and description, leaving half the parameters opaque.
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?
Specific verb+resource: 'Find Orchestrator actions by partial module or name', with concrete query examples ('getAllVMs', 'com.vmware.library.vc'). It is clear this is the search/fuzzy-match entry point, but it does not explicitly distinguish itself from siblings like vro_get_action or vro_api_search.
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 statement of when to use this versus alternatives such as vro_get_action or vro_api_search. The phrase 'by partial module or name' implies fuzzy lookup, but the agent must infer that this is the discovery step preceding get/run calls.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vro_find_workflowsBRead-only
Find Orchestrator workflows by (partial) name. Returns id, name, category, version, description.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Partial name; omit to list all | |
| limit | No | ||
| startIndex | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint=true annotation already establishes this is a safe, non-mutating read, so the description's burden is reduced. It adds the enumerated return fields (id, name, category, version, description), which is genuine value, but says nothing about result volume, paging behavior, or case sensitivity of the partial match.
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 tight sentences with zero filler, front-loading the action and match mode before the return payload. Every clause carries 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 no output schema, listing the returned fields is a necessary and well-used addition, and the search semantics are clear. But for a paginated lookup tool, the absence of any paging or result-size guidance leaves the definition adequate rather than 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 only 33%: 'name' is documented ('Partial name; omit to list all') but 'limit' and 'startIndex' have no descriptions at all. The tool description does nothing to compensate, never explaining paging, the 500 cap, or how startIndex interacts with limit, leaving two of three parameters semantically opaque.
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 a specific verb and resource ('Find Orchestrator workflows') plus the matching mode ('by (partial) name'), which distinguishes it from the id-based sibling vro_get_workflow. It does not, however, mention the near-twin vro_find_actions or explicitly contrast search vs. get, so sibling differentiation is only implied.
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?
Usage is only implied: the word 'Find' plus 'partial name' suggests this is the discovery/lookup entry point before using vro_get_workflow or vro_run_workflow, but the description never states when to prefer it over those siblings or what prerequisites apply. No exclusions or alternative routing are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vro_get_actionCRead-only
Get an action's script, inputs and return type. Reference as 'module/name' or id.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations supply readOnlyHint=true, so the safety profile is covered; the description adds only the returned fields (script, inputs, return type), which is useful but thin. It says nothing about whether unknown references error out, scoping/permissions, or payload size.
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 short, front-loaded sentences with no filler. Terse to the point of omitting needed detail, but nothing is wasted or buried.
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 no output schema, the description at least names the returned fields, and annotations cover safety, so this is minimally viable. But for a lookup tool with an undocumented parameter and no error behavior described, an agent is left guessing on edge cases.
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 0%, so the description carries the full burden, and it only partially does so: it gives the accepted reference formats 'module/name' or id. It does not clarify whether id is a UUID or numeric, case sensitivity, or what happens on a missing action.
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 a specific verb (Get) and resource (an action), and enumerates what is returned: script, inputs, return type. It is distinguishable from vro_run_action and vro_find_actions, but does not explicitly name a sibling to differentiate from, holding it at 4 rather than 5.
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 call this versus vro_find_actions (to locate actions) or vro_run_action (to execute one). The implicit reading is 'use this when you already know the action identity,' but that is never stated, and no exclusions or prerequisites are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vro_get_executionBRead-only
Get a workflow execution's state, outputs and error, optionally with logs. Can also wait for it to finish.
| Name | Required | Description | Default |
|---|---|---|---|
| workflowId | Yes | ||
| executionId | Yes | ||
| includeLogs | No | ||
| waitSeconds | No | Wait up to N seconds for completion | |
| includeInputs | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds some behavioral context by mentioning optional logs and the ability to wait for completion, but it does not describe limits on waiting, log volume, or behavior when the execution is already finished.
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 compact sentences and is front-loaded with the core action. Every sentence contributes useful information 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?
For a read-only get tool with no output schema, the description does explain what is returned at a high level. However, with five parameters and only 20% schema description coverage, it leaves too much parameter detail and usage guidance unstated.
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 only 20%, and the description only loosely covers includeLogs and waitSeconds. It does not explain workflowId, executionId, or includeInputs, leaving most parameters semantically undocumented beyond their names.
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 gives a specific verb and resource: get a workflow execution, returning state, outputs, error, and optionally logs. It also states that it can wait for completion. However, it does not explicitly differentiate itself from siblings like list_executions or run_workflow.
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 inspecting a specific execution and notes the optional wait behavior, which is a useful scenario cue. But it does not say when to use this tool versus list_executions or other execution-related siblings, and it gives no exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vro_get_workflowARead-only
Get a workflow's inputs/outputs (names + types), version and description, by id or exact name.
| Name | Required | Description | Default |
|---|---|---|---|
| workflow | Yes | Workflow id or name | |
| includeContent | No | Also return the full workflow content (schema, scripts) โ can be large |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already tells the agent this is a safe read with no side effects, so the description carries less burden. It adds that the lookup is exact-match and that returned data includes typed inputs/outputs, but says nothing about failure modes when the name is ambiguous or not found, nor about the large-payload risk that the schema mentions for includeContent.
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?
A single sentence that front-loads the verb and resource, then the payload fields, then the lookup key. No filler 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?
With no output schema, the description usefully enumerates what comes back and how identifiers are resolved, and annotations cover the safety profile. Only minor gaps remain, such as behavior on ambiguous/missing names or the exclusion of full content by default.
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 both parameters are already documented in the schema, establishing a baseline of 3. The description only reinforces that 'workflow' accepts an id or exact name and says nothing extra about includeContent beyond what the schema states.
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 a specific verb ('Get'), resource ('a workflow'), and enumerates the returned fields (inputs/outputs names + types, version, description). This clearly separates it from vro_find_workflows (search) and vro_save_workflow (mutation).
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 phrase 'by id or exact name' signals this is a precise-identifier lookup rather than a search, which implicitly routes agents away from vro_find_workflows. However, it never names the alternative or states an exclusion explicitly, so usage context is clear but not fully prescriptive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vro_list_executionsBRead-only
List recent executions of a workflow (id, state, start/end, started by).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| state | No | Filter, e.g. failed | completed | running | |
| workflow | Yes | Workflow id or name |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already tells the agent this is a safe read operation. The description adds useful return-field context (id, state, start/end, started by), which matters since no output schema exists, but it does not define 'recent', the default limit, or pagination 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?
A single front-loaded sentence with the verb and resource first and the returned fields in parentheses. No wasted words, though it is terse to the point of omitting operational 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?
For a read-only list tool with annotations covering safety, the core purpose is conveyed. However, 'recent' is undefined, no default or maximum for limit is given, and there is no hint about how the state filter interacts with the results, which leaves real gaps for a filtering list operation.
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 67%, and the description's parenthetical lists returned fields rather than inputs, so it adds no meaning for the three parameters. The 'limit' parameter has no schema description and no compensating explanation in the description, leaving the agent to guess its default and cap.
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 a specific verb (List) and resource (executions of a workflow), so the agent knows it retrieves execution history rather than running or fetching a single execution. It does not explicitly distinguish itself from the singular sibling vro_get_execution, but the intent 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?
There is no when-to-use or when-not-to-use guidance, and no mention of alternatives such as vro_get_execution for a single run or vro_run_workflow to start one. The agent must infer the list-vs-get distinction 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.
vro_run_actionB
Execute an action synchronously with plain JSON inputs ({inputName: value}) and return its result (converted to plain JSON), error with line number, and logs.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | 'module/name' or action id | |
| inputs | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden but does disclose meaningful behavior: synchronous execution, plain-JSON input coercion, plain-JSON result conversion, error reporting with line number, and logs. It stops short of stating permission requirements or side effects of the executed action.
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?
A single front-loaded sentence with no filler, packing execution mode, input format, and return shape efficiently. Dense but not padded.
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?
No output schema exists, so the description usefully describes the return payload (result, error with line number, logs). It is largely complete for a run tool, with the main gap being the absence of usage routing against sibling execution 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 coverage is 50%: 'action' is documented in the schema ('module/name' or action id), while 'inputs' is not. The description compensates by specifying the inputs shape ({inputName: value}), adding real meaning for the undocumented parameter, but says nothing about resolving the action identifier.
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 a specific verb (Execute) and resource (action), and notes synchronous execution. It implicitly distinguishes itself from the sibling execution tools (vro_run_workflow, vro_run_script) by naming 'action', though it never explicitly contrasts them.
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 notes it runs synchronously but gives no guidance on when to choose this over vro_run_workflow, vro_run_script, or the async/execution-based tools. An agent must infer the selection criteria 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.
vro_run_scriptA
Run an ad-hoc JavaScript snippet on Orchestrator โ for prototyping and quick checks. Creates a temporary action, executes it with the given inputs (available as variables), returns the 'return' value + System.log output, then deletes the action. Script must be plain ES5 (Rhino): var, function(){}, no arrow functions/let/const/template literals.
| Name | Required | Description | Default |
|---|---|---|---|
| inputs | No | Variables passed into the script | |
| script | Yes | Body of the function. Use `return x;` to return a value. | |
| inputTypes | No | Optional explicit types, e.g. {vm: 'VC:VirtualMachine'} | |
| keepAction | No | Don't delete the temp action afterwards (to inspect it) | |
| returnType | No | Default 'Any' |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses the temporary-action lifecycle, return value plus System.log output, and the ES5/Rhino script constraints, but omits permissions, rate limits, and potential side effects of executing arbitrary code.
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, front-loaded with purpose and usage, then behavior, then constraints. Every sentence earns its place; no redundant or vague wording.
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 absence of an output schema, the description explains the return value and System.log output. It also covers script language constraints and the temporary action lifecycle, making it largely complete, though it could mention error handling or required permissions for a code-execution 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 schema already documents all five parameters. The description adds only that inputs are 'available as variables' inside the script, which is marginal beyond the schema's own 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?
States a specific verb and resource: run an ad-hoc JavaScript snippet on Orchestrator. It distinguishes itself from saved-action siblings by noting the temporary action lifecycle ('creates a temporary action ... then deletes the action'), though it does not name an alternative sibling explicitly.
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 clear usage context: 'for prototyping and quick checks.' However, it does not state when not to use it or name alternative tools (e.g., vro_run_action) for production or repeatable tasks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vro_run_workflowA
Run a workflow by id or name with plain JSON inputs ({inputName: value}); values are converted to Orchestrator types automatically (string, number, boolean, Date, Properties, Array/x, SecureString, SDK objects given as id). By default waits for completion and returns state, outputs, error and logs.
| Name | Required | Description | Default |
|---|---|---|---|
| wait | No | Wait for the run to finish (default true) | |
| inputs | No | ||
| workflow | Yes | Workflow id or name | |
| includeLogs | No | Include logs even on success (always included on failure) | |
| timeoutSeconds | No | Max wait (default 180) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden and does so well: it discloses automatic type conversion, the default blocking/wait behavior, and what is returned (state, outputs, error, logs). It omits auth/permission requirements and side-effect details, but the execution semantics are unusually well covered.
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?
A single dense sentence that front-loads the core action before the parenthetical detail on type conversion and the trailing note on default wait behavior. Every clause earns its place, though the density is slightly heavy for one sentence.
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 no annotations and no output schema, the description compensates by describing return contents and default timing, and it covers the otherwise-undocumented inputs parameter. Missing only edge-case/error and permission context, so it is close to complete for calling 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 80% (only 'inputs' is undocumented in the schema), and the description fills that gap precisely by explaining the {inputName: value} shape and the automatic conversion of values to Orchestrator types. This adds real meaning beyond the structured fields.
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 a specific verb+resource ('Run a workflow') and how it is identified (by id or name), which separates it from run_action and run_script siblings by resource type. It does not explicitly name those siblings, so it stops short of full differentiation.
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?
Usage is implied by the verb and the 'by default waits' behavior, but there is no explicit when-to-use guidance nor any mention of alternatives like vro_run_action or when wait=false is preferable. A reader can infer intent but gets no routing help.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vro_save_actionA
Create or update an action (upsert by module/name). Script must be plain ES5 JavaScript (no arrow functions, let/const, template literals, etc.) โ Orchestrator runs Rhino. Omitted inputs/returnType keep the existing ones on update. Versions are always maintained: new actions start at 1.0.0, every update bumps the patch version unless version/bump is given.
| Name | Required | Description | Default |
|---|---|---|---|
| bump | No | Auto-bump level when version is omitted (default patch) | |
| name | Yes | ||
| inputs | No | ||
| module | Yes | e.g. com.mayank.lab | |
| script | Yes | ||
| version | No | Explicit x.y.z. Omit to auto-bump: new = 1.0.0, update = patch+1 | |
| returnType | No | e.g. string, Properties, Array/string, VC:VirtualMachine, void | |
| description | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so well: it discloses the ES5/Rhino runtime constraint, that omitted inputs/returnType are preserved on update, and the versioning policy (new = 1.0.0, patch bump unless version/bump given). It does not cover permissions, atomicity, or what the call returns, so not a 5.
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?
Four tight sentences, each with a distinct payload (purpose, script constraint, update merge, versioning), and the primary create/update intent is front-loaded. Parenthetical examples are compact and useful.
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 an 8-parameter mutation with no annotations and no output schema, the description covers the operational essentials an agent needs (upsert key, script dialect, merge behavior, versioning). It leaves out permission requirements and the failure/return shape, which would be nice but are secondary.
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 only 50%, so description additions matter: it constrains script to plain ES5 (a real correctness rule absent from the schema) and clarifies preservation semantics for inputs/returnType plus version/bump behavior. It does not resolve module/name formats beyond 'upsert by module/name', but that plus the schema examples is adequate.
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 a specific verb (create/update, i.e. upsert) and resource (action), with the keying scheme (module/name) that defines identity. It is clearly distinguishable from siblings like vro_get_action and vro_run_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 implies when it applies (new action vs update, keyed on module/name) and notes update-time merge behavior, but names no alternatives or when-not conditions. An agent must infer that vro_get_action/delete workflows are the other routes. Implied usage only.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vro_save_workflowA
Create or update (upsert by name + folder) an Orchestrator workflow from a compact spec: inputs, outputs, attributes and ordered steps (script tasks, action calls, decisions, ends). Builds the schema, creates the folder path if missing, and validates. Scripts must be plain ES5. Steps flow in array order unless next/ifTrue/ifFalse say otherwise. Versions are always maintained: new = 1.0.0, each update bumps the patch version unless version/bump is given. Set dryRun to only return the generated XML.
| Name | Required | Description | Default |
|---|---|---|---|
| bump | No | Auto-bump level when version is omitted (default patch) | |
| name | Yes | ||
| steps | Yes | ||
| dryRun | No | ||
| folder | Yes | Workflow folder path, e.g. 'mbcom/Onboarding' (created if missing) | |
| inputs | No | ||
| outputs | No | ||
| version | No | Explicit x.y.z. Omit to auto-bump: new = 1.0.0, update = patch+1 | |
| attributes | No | ||
| description | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses side effects (builds schema, creates missing folder path, validates), an ES5 scripting constraint, control-flow defaults (array order unless next/ifTrue/ifFalse), and a versioning policy (new = 1.0.0, patch bump on update unless version/bump given). It omits auth/permission needs and what happens on validation failure or when overwriting an existing workflow.
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 but front-loaded: the upsert purpose and spec come first, then side effects, then the scripting constraint, versioning, and dryRun. Sentences are information-bearing, though the version-bump rule is stated twice (in prose and implied again in the schema) and the block is on the long side.
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 10-parameter nested-spec tool with no output schema and no annotations, the description covers the authoring model, control flow, versioning, and dryRun preview well enough to call it correctly. Remaining gaps are return-shape specifics (workflow id, resulting version, validation errors) and permission requirements, which are not addressed.
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 only 30% across 10 parameters, so the description must compensate, and it does for the highest-value ones: dryRun's preview-only XML behavior, the version/bump interaction, step ordering and next/ifTrue/ifFalse routing, and the inputs/outputs/attributes spec. It adds real meaning beyond the schema, though args/action linking and resultTo are left entirely to 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 a specific verb (upsert/create-or-update) and resource (Orchestrator workflow) plus the keying rule (name + folder) and the spec it consumes. It is distinguishable from sibling save/find tools like vro_save_action and vro_get_workflow without opening any schema.
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 create-vs-update behavior is implied by 'upsert by name + folder' and dryRun gives a preview path, but there is no explicit when-to-use guidance, no prerequisites (e.g. whether an existing workflow should be fetched first), and no named alternatives such as vro_save_action. Usage is inferable rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vro_server_infoARead-only
Check connectivity to VCF Operations Orchestrator: logs in, returns the server's /about info, the auth mode in use, and the loaded API spec. Call this first if anything fails.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With only readOnlyHint declared, the description adds real behavioral context: it performs a login, and it reports the server's about info, auth mode, and loaded spec. The 'logs in' detail is worth disclosing since a session handshake is more than a pure read, though it is not destructive enough to contradict readOnlyHint.
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 short sentences: the first front-loads what the tool does and returns, the second delivers the single most actionable instruction ('call this first if anything fails'). 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?
No output schema exists, so the description compensates by naming the returned payload (about info, auth mode, API spec), and there are no parameters to document. An agent has everything needed to decide to call it and interpret the result.
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 tool takes zero parameters, so per the baseline there is nothing for the description to disambiguate. It correctly avoids inventing input 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?
States a specific verb ('Check connectivity') plus resource ('VCF Operations Orchestrator') and enumerates exactly what is returned: /about info, auth mode, loaded API spec. This is clearly distinguishable from every sibling (api_search, find_workflows, run_workflow, etc.), none of which is a connectivity/diagnostic probe.
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?
Gives explicit routing guidance: 'Call this first if anything fails,' which tells the agent exactly when to reach for it. It stops short of naming an alternative or a when-not condition, so it falls just under the top band.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vro_set_versionsA
Set or bump the version of actions (whole module or listed fqns) and/or workflows (ids or names) in one call, without touching their content. Use to baseline versions (e.g. set 1.0.0) or to mark a release (bump minor/major).
| Name | Required | Description | Default |
|---|---|---|---|
| bump | No | Bump instead of set (default patch if version omitted) | |
| module | No | Action module: apply to every action in it | |
| actions | No | Action 'module/name' or ids | |
| version | No | Set exactly this x.y.z | |
| workflows | No | Workflow ids or exact names | |
| onlyIfBelow | No | With version: only change items currently below this version (e.g. baseline 0.0.0 items to 1.0.0) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It usefully discloses that it acts in bulk over whole modules or listed fqns/ids and does not alter content, but says nothing about reversibility, permissions, version-history semantics, or error behavior when a target is missing or the version conflicts.
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 tightly written sentences; the operation and its scoping constraint are front-loaded and the use case follows. No filler 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?
For a 6-parameter mutation tool with no annotations and no output schema, the description covers the 'what' and 'why' well but omits operational detail an agent would want, such as conflict behavior, whether prior versions are retained, and what a partial failure across a module returns.
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 all six parameters are already documented. The description mostly restates the schema's set-vs-bump semantics ('set 1.0.0' / 'bump minor/major') and adds little beyond it, so the baseline 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?
States a precise verb (set/bump) and resource (action and workflow versions) plus the key scoping fact 'without touching their content'. That last clause implicitly separates it from the save/run siblings, so an agent can identify it without opening the schema.
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?
Gives concrete when-to-use guidance: baselining versions (e.g. set 1.0.0) versus marking a release (bump minor/major). It does not name alternatives or state when not to use it (e.g. versus save_action), so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
17 tool updates
v0.6.1- First observed
vro_api_call - First observed
vro_api_describe - First observed
vro_api_search - First observed
vro_delete_workflow - First observed
vro_find_actions - First observed
vro_find_workflows - First observed
vro_get_action - First observed
vro_get_execution - First observed
vro_get_workflow - First observed
vro_list_executions - First observed
vro_run_action - First observed
vro_run_script - First observed
vro_run_workflow - First observed
vro_save_action - First observed
vro_save_workflow - First observed
vro_server_info - First observed
vro_set_versions
TDQS
Scored across 17 tools
Most tools have clearly distinct resource+action targets (find/get/save/run for workflows and actions, executions, API spec). Minor overlap between vro_run_workflow (which waits and returns state) and vro_get_execution, and between vro_run_action and vro_run_script, but descriptions clarify the intended use of each.
Every tool follows the same vro_<verb>_<noun> snake_case pattern (vro_api_search, vro_find_workflows, vro_save_action, vro_run_execution-style verbs). No mixed conventions or vague verbs, making the set highly predictable.
17 tools for a broad platform (workflows, actions, executions, versions, and full REST API access) is reasonable and each tool earns its place. It leans slightly heavy, but the scope (full Orchestrator domain) justifies it.
Strong lifecycle coverage: find/get/save/run/delete for workflows, find/get/save/run for actions, plus execution inspection, version management, and a raw vro_api_call escape hatch for anything missing. Minor gaps exist (no delete action, no cancel/delete execution tool), workable via the generic API call.
Maintenance
Related MCP Connectors
Any REST/SOAP/GraphQL/OData/SQL API as MCP tools for Claude & ChatGPT. 475 connectors: SAP, ERP.
- platform7nOAuthtech.p7n
Connect Claude to your Platform7n workspaces โ chat, links, and tasks. One-click OAuth.
Manage your IoT device fleet directly from Claude. Create device templates with datastreams and events, provision new devices, read live sensor data, and control outputs. The Blynk connector integrates with the Blynk IoT platform, enabling direct configuration and monitoring of connected devices and infrastructure.
Deploy, monitor, and manage your OpenClaw AI assistants via natural language.
Related MCP Servers
- FlicenseBqualityNot gradedmaintenanceBridges Claude Code to a Cloud Orchestrator API, providing access to multi-AI consensus, web search, code execution sandboxes, long-term memory, knowledge graphs, deployment management, and 20+ integrated AI and developer tools.28-
- AlicenseNot gradedqualityDmaintenanceConnects Claude Code to any ObjectStack deployment, enabling discovery, querying, and updating of objects and records, plus running business actions, all under user permissions and row-level security.Apache 2.0
- FlicenseAqualityDmaintenanceEnables Claude to read and control Veeam Backup & Replication infrastructure through natural language, supporting full operator capabilities like starting/stopping jobs, creating backups, and monitoring threat detection via the VBR REST API.34-
- AlicenseNot gradedqualityCmaintenanceEnables Claude to discover and call any REST API from an OpenAPI/Swagger spec or Postman collection at runtime, with authentication, workflows, and prebuilt registry support.13 npmMIT