Skip to main content
valcloud is the Validation Cloud command-line tool. It connects to the same MCP gateway that Claude Code and other AI clients use, and turns every tool on that gateway into a subcommand. The command list is fetched from the gateway at runtime, so new Node API and Mavrik capabilities show up in valcloud without upgrading the CLI.

Install

valcloud requires Node.js 22.12 or newer.
Install valcloud globally:
Check the installed version:
Then sign in and run your first command:

Authenticate

Sign in with your Validation Cloud account:
The CLI opens your browser, completes the sign-in (OAuth authorization code with PKCE) and stores the credentials locally. Expired access tokens are refreshed automatically. If a refresh fails, the command exits with code 3 and asks you to run valcloud auth login again.
Login waits up to 5 minutes for the browser redirect on http://localhost:38417/callback. If another process is using port 38417, the command fails and names the address that is taken.

Headless and remote environments

If the CLI can’t open a browser, print the sign-in URL and open it yourself:
The sign-in still redirects to localhost:38417 on the machine where you open the URL. When valcloud runs on a remote host, forward that port over SSH so the redirect reaches the CLI:
Device-code login isn’t supported. For CI and other non-interactive environments, see Authenticating without a browser.

Manage your session

Your first commands

List the commands available to your account:
Explore a namespace, then the options of a single command:
Try a few Node API reads:

How commands work

Every command is a tool on the Validation Cloud MCP gateway. The CLI maps each tool to valcloud <namespace> <command> [options], where the namespace is the part of the tool name before the first dot, and names are converted from snake_case and camelCase to kebab-case: Each input property of a tool becomes a --kebab-case flag, and the tool’s descriptions appear in --help: Required properties are required flags. When a tool has exactly one required property, you can also pass it as a positional argument: valcloud nodeapi get-endpoint <id> is the same as valcloud nodeapi get-endpoint --id <id>. To pass all arguments at once, use --input with a JSON object, or --input - to read it from stdin. Explicit flags override values from --input:
The command list is cached for one hour and refreshed by valcloud auth login, valcloud auth logout and valcloud tools --refresh. If a command you expect is missing, or the gateway rejects a command as unknown or its arguments as invalid, run valcloud tools --refresh.

Command reference

Commands come from the gateway, so the tables below reflect the time of writing and what your account can call may differ. Run valcloud tools for the current list and valcloud <namespace> <command> --help for every option.

Built-in commands

Node API

Mavrik

Tool command flags

Every tool command accepts: Destructive commands also accept: A tool input property whose flag would clash with one of these flags, or with another property, has no flag of its own. Its --help says so, and you can set it through --input.

Output

Results go to stdout. Diagnostics, prompts and hints go to stderr. Output is never colored. TSV works with standard Unix tools, and JSON works with jq:
Errors are printed to stderr as <code>: <message>. With --json, stderr gets {"error":{"code":"...","message":"..."}} instead, including for usage errors.

Scripts, CI and AI agents

valcloud is designed to be called from scripts, CI jobs and AI agents:
  • --json gives structured results on stdout and structured errors on stderr
  • Exit codes separate tool, usage and authentication failures
  • --dry-run shows exactly what would be sent, without calling the tool
  • Destructive commands never block waiting for input when there’s no terminal

Confirmations

A command is destructive unless its tool is marked read-only or non-destructive. valcloud tools shows which commands are destructive. Without --yes, valcloud asks [y/N] on stderr only when stdin is a terminal and neither --no-interactive nor CI is set. Otherwise it refuses with exit code 2 before contacting the gateway. Any answer other than y aborts with exit code 1.
--input - reads the arguments from stdin, so a destructive command that uses it can’t ask for confirmation. Pass --yes explicitly.

Authenticating without a browser

Set VC_TOKEN to an access token you already have, for example one printed by valcloud auth token, and store it in your CI secret store:
VC_TOKEN takes precedence over stored credentials and is never refreshed, so commands fail with exit code 3 once the token expires.

Exit codes

Configuration

Environment variables

By default, valcloud connects to https://mcp.validationcloud.io/mcp. Credentials and the cached command list are kept per gateway URL, so each gateway has its own login and command list.

Stored files

credentials.json is written with mode 0600 inside a 0700 directory. Tokens are printed only by valcloud auth token, and tool results are never written to disk.

Next steps