Skip to content

Configuration ​

The server reads all runtime configuration from environment variables.

Required Variables ​

VariableRequiredDescription
VCFA_HOSTYesVCF Automation hostname or host:port, for example vcfa.example.com. A value carrying a URL scheme is rejected at startup.
VCFA_USERNAMEYesUsername without organization, for example admin.
VCFA_ORGANIZATIONYesOrganization name (the tenant URL slug, not the display name), or system for provider/system administrator logins. In vra8 mode, the vIDM domain shown on the Workspace ONE login page, for example System Domain.
VCFA_PASSWORDYesPassword for the VCF Cloud API session, or the vIDM password used for the vRA 8 login when VCFA_TARGET_PLATFORM=vra8.

On the default vcfa platform, the server authenticates by sending Basic Auth as {VCFA_USERNAME}@{VCFA_ORGANIZATION}:{VCFA_PASSWORD} to the VCF Cloud API session endpoint. Tenant logins use:

text
https://{VCFA_HOST}/cloudapi/1.0.0/sessions

When VCFA_ORGANIZATION is system (case-insensitive), the login is routed to the dedicated provider endpoint instead — the tenant endpoint rejects provider accounts with 401. A provider session cannot read the tenant-scoped Automation services (catalog, deployment, blueprint, event-broker, project) — vRO works, but those tools answer 403 or 500; use a tenant organization for them. The event-broker tools are the exception a tenant organization does not fix: on VCF Automation 9.1 both GET /topics and GET /subscriptions answer 403 on a tenant session too, because the account lacks the role the service requires (VCFO-099).

The provider session request:

text
https://{VCFA_HOST}/cloudapi/1.0.0/sessions/provider

It uses the returned bearer token for later VCF Automation, Service Broker, Cloud Assembly, and vRO API calls.

VCF Cloud API Version Negotiation ​

VCF Automation 9.1 introduces API version 9.1.0 alongside 9.0.0. Before authenticating, the server probes the unauthenticated discovery document at https://{VCFA_HOST}/api/versions and selects the newest API version it knows (9.1.0 preferred, then 9.0.0) for the session request. If the probe fails or advertises no known version, the server falls back to 9.0.0, which 9.1 servers still accept. Set VCFA_TARGET_PLATFORM to vcfa9.1 or vcfa9.0 to pin the version explicitly and skip the probe.

For vRA/vRO 8.12+ compatibility, set VCFA_TARGET_PLATFORM=vra8. vRA-embedded vRO rejects Basic auth on /vco/api, so in that mode the server skips the VCF Cloud API session endpoint and the GET /api/versions probe and instead runs the vRA 8 bearer-token flow: it posts VCFA_USERNAME, VCFA_PASSWORD, and VCFA_ORGANIZATION as the vIDM domain to POST /csp/gateway/am/api/login?access_token, exchanges the returned refresh token at POST /iaas/api/login, and sends the resulting token as Authorization: Bearer on every /vco/api request. A 401 from vRO — or a 403 that carries a WWW-Authenticate challenge — renews the token and retries the request once: the cached refresh token is exchanged again, and the full CSP login runs only if that token is rejected, so a renewal does not re-send the password. A 403 without a challenge is surfaced directly as an authorization result. Neither login request is allowed to follow a redirect, because the request body carries the credentials. VCFO-068 verified this mode against a vRA 8.18 lab (vRO 8.18.1). What it supports:

Surfacevra8 mode
vRO /vco/api reads and writesSupported — create/update/delete of workflows, actions, and configuration elements, multipart artifact imports, package build/export, workflow execution and logs
Automation-service reads (catalog items, deployments, templates, projects, subscriptions, event topics)Supported — same page envelope and object shapes as VCFA 9.x, with no apiVersion pin required
Blueprint-service and event-broker writes (create-template, delete-template, subscription create/update/delete)Supported — verified against a vRA 8.18 lab with a disposable DRAFT template and a disposable disabled subscription, neither of which provisions infrastructure
Catalog-service and deployment-service writes (create-deployment, delete-deployment, run-deployment-action)Supported — verified against a vRA 8.18 lab under VCFO-088 once it held a released catalog item: a disposable deployment was requested, powered off and on, and deleted through the real tool handlers, each expected* guard refused a mismatch first, and the environment was returned to its starting count. Each path still provisions, alters or destroys real infrastructure, so the confirm gate and the target guards apply exactly as on VCF Automation
export-configuration-fileUnsupported — vRA 8 serves a configuration element as JSON only and answers the artifact request with 406. Use get-configuration, or add it to the project package and export that. prepare-artifact-promotion reports a configuration backup as skipped for the same reason and still returns its report. The same 406 was later observed on vRO 9.1, standalone and appliance-embedded alike, while workflow, action and package exports succeed on those same hosts — so the refusal is specific to configuration elements, not to vRA 8; a 406 from any platform now reports this guidance instead of the server's HTML body
import-configuration-fileUnverified but not guarded — the endpoint is reachable and the multipart transport is proven, but no genuine container has been round-tripped and none can currently be produced: no vRO tested, on either platform, exports a single configuration element as a .vsoconf

Subscription writes differ from the vcfa path in this mode: vRA 8 requires the client to choose the subscription id, answers the create 201 with an empty body, and serves neither PUT nor PATCH on /subscriptions/{id}. create-subscription therefore generates a UUID and re-reads the element, and update-subscription lays the caller's changes over the live element and upserts the whole body with a POST. Because that upsert replaces the element, the body starts from the live one and strips only server-owned fields, so the element's own type and anything the client does not model carry forward instead of being cleared; an element with no eventTopicId is refused before the write, since vRA 8 requires one on the upsert. vRA 8 also serves system subscriptions with no name, which render as (unnamed).

One configuration request body still differs in this mode: PUT /configurations/{id} must carry the element name. The attribute key used to differ too — vRA 8 answers 400 for the singular attribute and for a body carrying both — but every platform now sends the plural attributes, which VCFA 9.1 accepts on create and update alike. That PUT replaces the element on both platforms, so update-configuration reads the live element once and carries an omitted name and description forward (see the tools reference for the attribute rules). Catalog items and deployments were both empty in the lab that first verified this mode, so their item shapes stayed unconfirmed until VCFO-088 read a released item and provisioned, inspected, powered off and on, and destroyed a deployment on vRA 8.18. The catalog item, deployment and deployment-action shapes match VCF Automation 9.1 key for key, with two differences: the vRA 8 catalog item serves neither isRequestable, sourceProjectId nor global, and its catalog service caps a list page at 20 items whatever size is requested (the pager follows last and totalPages, so nothing is missed). The DeploymentRequest that a day-2 submission and a delete answer with has been observed on vRA 8.18 only, since no 9.1 round has submitted an action or recorded the delete body. Both renderers still fall back to (unnamed) rather than trusting a name to be present.

External vRO Appliance ​

When an organization's vRO runs on its own appliance rather than embedded in the VCF Automation appliance, set VCFA_VRO_HOST to that appliance's host[:port]. Only the vRO API base moves:

text
https://{VCFA_VRO_HOST}/vco/api

Everything else stays on VCFA_HOST: the session endpoints above, the GET /api/versions probe, the vRA 8 CSP and IaaS logins in vra8 mode, and the catalog, deployment, blueprint, project, and event-broker services. No second login runs — the token the Automation appliance issues is sent to the external vRO as-is, which VCFO-081 verified live on VCF Automation 9.1 with an external vRO 9.1. The vra8 topology is wired the same way but has not been live-verified against an external vRO.

An external vRO cannot stand in as VCFA_HOST: it answers the session endpoint and /api/versions with a redirect to its own UI, so the login fails. Conversely, leaving VCFA_VRO_HOST unset in such an environment sends /vco/api to the Automation appliance's embedded orchestrator, which refuses a tenant with a 403 and an HTML page rather than a vRO JSON error — that error carries a hint pointing at this variable.

While the two hosts differ, every request log line and every vRO API error names the host it went to (GET /workflows on vro.example.com, export workflow on vro.example.com), a transport failure names it too (Request to vro.example.com failed: ENOTFOUND), and a redirect answer to a JSON API request is surfaced rather than followed, naming its target. Unset, blank, or equal to VCFA_HOST, the variable changes nothing. The value must be a hostname or host:port: a scheme, a path, or anything that cannot serve as the host of a URL is rejected at startup.

Optional Variables ​

VariableDescription
VCFA_TARGET_PLATFORMTarget platform mode: vcfa (default, auto-negotiates the VCF Cloud API version), vcfa9.1/vcfa9.0 (pin the VCF Cloud API version, skipping the GET /api/versions probe), or vra8 (vRA/vRO 8.12+, vIDM bearer-token auth).
VCFA_VRO_HOSTOptional host[:port] of an external vRO appliance. Only the vRO /vco/api requests go there; the login, the GET /api/versions probe, and the Automation services stay on VCFA_HOST, and the token issued there is reused as-is. Leave unset for the embedded vRO. Works with vcfa, vcfa9.x, and vra8. See External vRO Appliance.
VCFA_IGNORE_TLSSet to true to disable TLS certificate verification for this server's requests to the VCFA host and, when VCFA_VRO_HOST is set, the vRO host (lab environments only).
VCFA_ARTIFACT_DIRRoot directory for local artifact import/export files. Defaults to artifacts/ in the MCP server process working directory, typically the open project.
VCFA_PACKAGE_DIROverride the package artifact directory.
VCFA_RESOURCE_DIROverride the resource element artifact directory.
VCFA_WORKFLOW_DIROverride the workflow artifact directory.
VCFA_EXECUTION_LOG_DIROverride the workflow execution log export directory.
VCFA_ACTION_DIROverride the action artifact directory.
VCFA_CONFIGURATION_DIROverride the configuration artifact directory.
VCFA_CONTEXT_DIROverride the persisted context snapshot directory. If unset, context snapshots prefer the MCP client's current workspace root at artifacts/context/, falling back to VCFA_ARTIFACT_DIR/context.
VCFA_PROJECT_PACKAGE_NAMEStable fully-qualified package name reused by package-first workflows, for example com.example.project.
VCFA_PROJECT_PACKAGE_DESCRIPTIONOptional description used if the exact project package is explicitly created.

Artifact Directories ​

Artifacts are organized into typed subdirectories under VCFA_ARTIFACT_DIR:

text
VCFA_ARTIFACT_DIR/
  actions/
  configurations/
  context/
  execution-logs/
  packages/
  resources/
  workflows/

Use the specific directory overrides only when you need different storage locations per artifact type.

TLS Warning ​

VCFA_IGNORE_TLS=true disables TLS certificate verification only for this server's requests to the configured VCFA host — and, when VCFA_VRO_HOST is set, the vRO host — using a dedicated HTTPS agent. It does not set NODE_TLS_REJECT_UNAUTHORIZED or affect any other HTTPS traffic in the process. Use it only for lab or test environments where the risk is understood.