VSS Orchestrator MCP server#
The VSS Orchestrator MCP server is the host-side process that NemoClaw’s agent calls to deploy and operate VSS. It exposes a Model Context Protocol function group named vss_orchestrator that generates Docker Compose artifacts, runs docker compose operations in the background, lists containers, and fetches logs.
The server is packaged with the VSS agent and started via uv run nat mcp serve. In the notebook flow, Section 6.1 starts it on port 9988 and polls the profiles tool until healthy.
Configuration#
The notebook starts the MCP server with this config file:
deploy/docker/scripts/vss_orchestrator_mcp_config.yml
The registered function group implementation lives in:
services/agent/src/vss_agents/orchestrator/tools.py
Before starting the server outside the notebook, verify the absolute paths in the YAML match your checkout and writable data locations:
deployments_dir- absolute path todeploy/docker.source_compose_yaml- absolute path todeploy/docker/compose.yml.source_env- absolute path template for VSS profiles.envfiles, with{profile}placeholder.mdx_data_dir- base writable VSS data directory used for generated deployments. This overrides anyVSS_DATA_DIRvalue in the selected profile.envfile.output_dir- writable directory wheredocker_generatestores generated env and compose artifacts.
If any path is invalid or non-writable, startup or artifact generation fails early.
Environment variables#
This section documents the environment variables read by the MCP server process. In the notebook flow, users set the VSS_* notebook variables in Section 1.3; Section 6.1 maps them to these unprefixed MCP process environment variables before launch.
docker_generate resolves profile values from lowest to highest precedence:
Selected profile
.envdefaults.HARDWARE_PROFILEand hardware/model rules fromvss_orchestrator_mcp_config.yml.MCP server startup environment, such as credentials, remote LLM/VLM endpoints, and GPU device IDs.
Per-call
env_overridesfromdocker_generate.
Variable |
Purpose |
|---|---|
|
Used by pre-compose NGC artifact downloads for profiles such as |
|
Propagated into generated VSS env for NVIDIA-hosted endpoints. |
|
Hardware profile applied by the orchestrator. Supported values are |
|
Externally reachable host IP used when generating URLs. If blank, the notebook resolves it from |
|
Key used by generated VSS services when remote OpenAI-compatible LLM/VLM endpoints are configured. |
|
Force the deployed VSS LLM path to remote mode and set its endpoint/model metadata. |
|
Force the deployed VSS VLM path to remote mode and set its endpoint/model metadata. |
|
Optional deployed-VSS LLM behavior override. |
|
Profile-level knob bridged into VLM NIM cache sizing. |
|
Optional GPU memory utilization override for RTVI VLM workloads. |
|
GPU IDs for local LLM and VLM NIMs on non-edge hardware profiles. |
|
Notebook launch override for bind host (default |
|
Notebook launch override for bind port (default |
Starting the server standalone#
From services/agent/:
export HARDWARE_PROFILE="RTXPRO6000BW"
export NGC_CLI_API_KEY="<your-ngc-key>"
export NVIDIA_API_KEY="<your-nvidia-key>" # required only for NVIDIA-hosted VSS endpoints
uv run nat mcp serve \
--config_file ../../deploy/docker/scripts/vss_orchestrator_mcp_config.yml \
--host 0.0.0.0 \
--port 9988
Call a tool directly with the NAT MCP client:
uv run nat mcp client tool call vss_orchestrator__profiles \
--url http://127.0.0.1:9988/mcp \
--transport streamable-http
The notebook automates startup and writes logs to <VSS_REPO_DIR>/.orchestrator-artifacts/vss_orchestrator_mcp.log.
Key IDs returned by tools#
Tools coordinate through two opaque IDs:
docker_compose_id- returned bydocker_generate; used bydocker_read,docker_up, anddocker_down.docker_compose_ops_id- returned bydocker_up/docker_down; used bydocker_statusto poll a background operation.
Tool reference#
The MCP server exposes nine tools, all prefixed vss_orchestrator__.
Tool |
Purpose |
|---|---|
|
List supported deployment profiles. |
|
Run Docker, GPU, NVIDIA container toolkit, and disk prerequisite checks. |
|
Resolve |
|
Fetch generated artifacts by |
|
Start a generated VSS stack in the background. |
|
Poll status and recent logs for a background up/down operation. |
|
List Docker container names. |
|
Fetch logs for one container. |
|
Tear down a generated VSS stack in the background. |
Note
docker_up runs pre-compose checks before starting Docker. It ensures data directories exist, downloads configured NGC model artifacts for profiles that need them, and creates alerts engine directories for the alerts profile.
Tool payloads and responses#
profiles#
List supported deployment profiles. Payload: none (use {}).
{
"status": "success",
"profiles": ["alerts", "base", "lvs", "search"]
}
prereqs#
Run prerequisite checks. Payload: none (use {}).
{
"status": "success",
"message": "Prerequisite checks passed.",
"details": {
"gpu_count": 2,
"docker_version": "Docker version 29.4.3, build ...",
"compose_version": "Docker Compose version v5.1.3",
"container_toolkit_ok": true,
"disk_free_gib": 295.3
}
}
docker_generate#
Validate the profile/env and generate resolved env + compose artifacts.
Payload:
{
"profile": "alerts",
"profile_mode": "verification",
"env_overrides": []
}
Options:
profileis required and supportsbase,search,lvs, andalerts.profile_modeis required foralertsand currently supportsverificationandreal-time. Other profiles do not acceptprofile_mode.env_overridesdefaults to[]and acceptsKEY=VALUEstrings. For values that can be set, see the Environment variables table and the selected profile.envdefaults. Per-callenv_overridesvalues have the highest precedence.
Response:
{
"status": "success",
"docker_compose_id": "alerts-abc12345",
"hardware_profile": "RTXPRO6000BW",
"host_ip": "10.0.0.10",
"external_ip": "10.0.0.10",
"mode": "2d_cv",
"llm_mode": "local",
"llm_name": "nvidia/nvidia-nemotron-nano-9b-v2",
"vlm_mode": "local",
"vlm_name": "nvidia/cosmos-reason2-8b",
"compose_profiles": "alerts_2d_cv,...",
"message": "Artifacts generated. Use docker_compose_id with docker_up/docker_down."
}
docker_read#
Fetch generated env/compose artifact contents by docker_compose_id.
Payload:
{ "docker_compose_id": "alerts-abc12345" }
Options:
docker_compose_idis required and must be a compose ID returned bydocker_generate.
Response:
{
"status": "success",
"docker_compose_id": "alerts-abc12345",
"profile": "alerts",
"env_content": "...",
"compose_yaml_content": "..."
}
docker_list#
List Docker container names. Payload: none (use {}).
Note
all_containers defaults to true. Use { "all_containers": false } only if you want to list running containers instead of all containers, including stopped ones.
Response:
{
"status": "success",
"container_names": ["vss-agent", "vst", "redis"]
}
docker_logs#
Fetch logs for one container. Be mindful when requesting a large number of log lines because it can consume many chat tokens.
Payload:
{
"container_name": "vss-agent",
"tail": 20
}
Options:
container_nameis required and must be the Docker container name.taildefaults to20and accepts values from1to200.
Response:
{
"status": "success",
"container_name": "vss-agent",
"tail": 20,
"logs": "...",
"logs_truncated": false,
"log_bytes": 12345
}
docker_up#
Start deployment for a generated compose id. Returns immediately, and status can be polled via docker_status.
Payload:
{
"docker_compose_id": "alerts-abc12345",
"build": true,
"force_recreate": false,
"pull_always": false
}
Options appended to the docker compose up command:
docker_compose_idis required and must be a compose ID returned bydocker_generate.builddefaults totrueand appends--build.force_recreateappends--force-recreate.pull_alwaysappends--pull always.
Response:
{
"status": "started",
"docker_compose_ops_id": "up-alerts-abc12345-def67890",
"docker_compose_id": "alerts-abc12345",
"action": "up",
"command": "docker compose up -d --quiet-pull --build",
"poll_tool": "docker_status",
"status_hint": "Poll docker_status with docker_compose_ops_id for progress/completion.",
"recommended_poll_interval_s": 60,
"pid": -1
}
docker_status#
Poll a running docker_up / docker_down operation.
Payload:
{
"docker_compose_ops_id": "up-alerts-abc12345-def67890",
"tail_lines": 20
}
Options:
docker_compose_ops_idis required and must be an operation ID returned bydocker_upordocker_down.tail_linesdefaults to5and accepts values from1to20.
Response:
{
"status": "running",
"docker_compose_ops_id": "up-alerts-abc12345-def67890",
"docker_compose_id": "alerts-abc12345",
"action": "up",
"pid": 12345,
"running": true,
"exit_code": null,
"command": "docker compose up -d --quiet-pull --build",
"tail_lines": 20,
"log_excerpt": "...",
"log_excerpt_truncated": false,
"log_excerpt_bytes": 23456
}
docker_down#
Stop and remove a deployment for a generated compose id. Returns immediately, and status can be polled via docker_status.
Payload:
{
"docker_compose_id": "alerts-abc12345",
"remove_volumes": true,
"remove_orphans": true,
"deep_clean": false
}
Options appended to the docker compose down command:
docker_compose_idis required and must be a compose ID returned bydocker_generate.remove_volumesdefaults totrueand appends-v.remove_orphansdefaults totrueand appends--remove-orphans.deep_cleandefaults tofalse. When set totrue, a successful down operation also deletes the configuredmdx_data_dir.
Response:
{
"status": "started",
"docker_compose_ops_id": "down-alerts-abc12345-def67890",
"docker_compose_id": "alerts-abc12345",
"action": "down",
"command": "docker compose down -v --remove-orphans",
"poll_tool": "docker_status",
"status_hint": "Poll docker_status with docker_compose_ops_id for progress/completion.",
"recommended_poll_interval_s": 10,
"pid": -1
}