Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
MCP_VM_RELAY_URLNoThe loopback vm-service origin. Non-loopback servers, redirects and physical targets are refused.http://localhost:6240
MCP_VM_RELAY_PYTHONNoThe Python 3 used for the registry lock.python3
VM_ENVIRONMENT_FILENoA selected environment profile; it overrides the URL, state directory and registry above and binds the Tart store.
MCP_VM_RELAY_PROJECTNoThe project directory (the plugin passes Claude Code's). Evidence lands under `relay-evidence/<task>/` there.
MCP_VM_RELAY_SESSIONNoAn explicit session identity. By default each server process takes a fresh random one; a stable identity lets a restarted server reconcile and reattach the enclosure of the same identity.
MCP_VM_RELAY_REGISTRYNoAn explicit task registry file; otherwise an existing compatible `~/AGENTS.md` VM table, or a private managed `registry.md` in the state directory.
MCP_VM_RELAY_STATE_DIRNoHost state directory, otherwise `$XDG_STATE_HOME/mcp-vm-relay` or `~/.local/state/mcp-vm-relay`, one subdirectory per session.

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

This server publishes no instructions, or was last inspected before Glama recorded them.

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

CapabilityDetails
tools
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
relay_searchA

Find an installed application in the image inventories by name, then choose an image yourself; optional before relay_acquire. Matches canonical names and aliases by exact, prefix and substring comparison, with an optional hard os filter (linux/macos). Returns each match's installed versions (which may be null), image keys, OS and architecture; a truncated result means whole installations were omitted, and an empty result is distinct from a catalog error. Never allocates, boots, installs, reserves capacity or chooses an image for you.

relay_probeA

Read-only host and service facts, used to judge whether a task is interruptive and to pick an image; it reports current owned state on its own, so call it again after context compaction rather than trusting earlier messages. Default scope: "host" reports host permissions and activity, VM service availability, and this session's owned lifecycle state, not guest readiness; unknown is not idle. scope: "guest" (on an already-owned VM) reports whether Node, CuaDriver and each relay_run target (cua, playwright, chrome-devtools) are available, without installing or starting anything, and never claims capture readiness. Relay only interruptive work judged from these facts; non-disruptive or headless work stays with local tools. Continue in order: relay_acquire, relay_stage, relay_run (or a command tool), relay_image/relay_extract, then relay_finish or relay_release, called explicitly before you return.

relay_acquisition_capabilitiesA

Read the backend's versioned VNC console options for the images it serves. Read-only: it neither acquires a VM nor recovers ownership of one.

relay_acquireA

Acquire one fresh VM for this task and start its ownership heartbeat. Requires task (a short slug), image (a key from relay_probe or relay_search) and extractions: every output you intend to bring home, declared before any work ([] is allowed; nothing is extracted automatically). Optional ttlHours (default 4), env (a credential pack, never baked into images), fullWorkspace (opt in to deliver the whole workspace) and vnc (default false; only prepares console-sharing capacity, never opens a viewer). One task per enclosure: call this once per task, not again for another task. Continue with relay_stage, relay_run (or a command tool), relay_image/relay_extract, then relay_finish or relay_release explicitly before you return; a failed step keeps the VM for repair rather than replaying uncertain input.

relay_stageA

Push and hash-check the guest runtime, plus an optional workspace and support files (files, landing under support/), onto an acquired VM. The guest Node and CuaDriver executables must already exist (nodePath, cuaDriver); Linux guests need native X11 and cua-driver serve --no-overlay. browserExecutable names the guest browser the playwright and chrome-devtools targets launch (default: installed Google Chrome); their pinned servers are staged on first use. A failed stage can be retried; once staged, only corrected executable paths may be resubmitted, and staging does not prove capture readiness. resetRecording: true archives the current recording's evidence and starts a fresh recording on the same VM; it refuses while a receiver lock is held.

relay_execA

Run one guest command (argv) as one recorded operation; never hide several interactions in one call. Evidence is automatic: the relay snapshots the display before and after and records a step derived from the command. Optional reason (intent, never authorization), step (id, title, expected, inputMode) and snapshots.afterIntervalMs (default 500 ms) enrich or tune the record; consecutive keystrokes may form an explicit text group with snapshots.group (first/member/last). timeoutMs bounds execution (default 120000, up to 3600000). The result carries the outcome and bounded stdout/stderr; it names the after-snapshot as pending with its imageId while the image downloads in the background, so call relay_image with that imageId to see it. A refused, uncertain or nonzero result keeps the VM; never replay input whose effect is uncertain. diagnostic: true records a diagnosis or repair without snapshots, even before relay_stage; it is never visual verification, and its result has one output field with stdout and stderr combined.

relay_scriptA

Run one guest script file as this call's single recorded operation. Evidence is automatic, as for relay_exec, whose optional reason, step, snapshots and timeoutMs it shares. Requires localPath (a host file path) and language (javascript, typescript or python); it runs under the staged workspace.

relay_codeB

Run inline guest code as this call's single recorded operation. Evidence is automatic, as for relay_exec, whose optional reason, step, snapshots and timeoutMs it shares. Requires code (up to 1 MiB) and language (javascript, typescript or python).

relay_runA

Send one tool call to an MCP server inside the VM. target is cua (cua-driver), playwright (Playwright MCP) or chrome-devtools (Chrome DevTools MCP); tool and args are that server's own tool name and arguments, forwarded unchanged. Use relay_tools to see a target's exact tools. Evidence is automatic: snapshots before and after, and a step record; reason, expected and afterIntervalMs are optional overrides. The result names the after-snapshot as pending with its imageId and does not wait for it: the image downloads in the background, relay_image with that imageId shows it, and relay_finish and relay_release wait for the downloads. Images the target tool itself returns stay inline. Never replay an uncertain call.

relay_toolsA

List a relay_run target's real tools from its server inside the VM: names, descriptions and input schemas; tool returns just one. Starts the server if needed, without sending it any tool call. Requires relay_stage.

relay_imageA

Retrieve one already-saved image; never a new capture, input or directory export, and it never acquires a VM. target selects a display phase (sessionId/executionId/phase: before/after), a declared application file (name, plus a relative path for a directory declaration), or an immutable reference (imageId). PNG, JPEG and WebP only; originals up to 64 MiB and 40,000,000 decoded pixels; the delivered preview is at most 2000x2000 px and 4 MiB of base64 (PNG originals are resampled in-process; JPEG/WebP pass through only within bounds). Each delivery has a 90-second deadline and up to three transfer attempts. A relay_run tool image is the application file name: "relay-run" at the path its result gives. A run's after-snapshot is pending in its result; retrieve it here with its imageId or display selector, which waits for its background download within the same deadline. If an image did not arrive, recover it here the same way, never by repeating the input or capturing again, and stop after at most two such recovery calls if it still cannot be inspected. A closed enclosure returns stale-reference for a display or reference target; its delivered originals stay readable with host file tools. An attached image proves only that the block was included, not that anyone inspected or reviewed it.

relay_extractA

Pull one or more already-declared extraction outputs home early, by names. Only outputs declared on relay_acquire may be pulled; each pull verifies source and host hashes and rejects path traversal, symlinks, or a source that changed underneath it.

relay_finishA

Complete the task: extract every declared output, deliver and verify a portable evidence package, then destroy the VM and unregister it. The result reports delivery, snapshot completeness, execution outcome and human review as separate facts; a verified package is not a passing test, and a delivered package is not itself human approval. Call this, or relay_release, explicitly before you return, since ending the session does not do it for you. A declared output that was never produced is listed in incompleteExtractions and does not stop the delivery; any other failed extraction or delivery keeps the VM for a corrected attempt.

relay_releaseA

Abandon the task: destroy the owned VM and unregister it, retaining whatever evidence already exists, without claiming the task succeeded. Use this instead of relay_finish when the task is not being completed. Safe to retry if a previous release attempt failed; a failed release keeps ownership until destruction is verified. When this session owns no lease, the result is an error saying that nothing was released; a lease acquired under another session identity is never guessed at.

relay_console_resolveA

Refresh this session's non-secret console-viewing status for the owned lease. Read-only, and it never recovers ownership. A ready status means guest preflight only, not that a viewer launched: console operations carry no screenshots and never establish authentication, displayed pixels or a human's confirmation. On macOS, viewing requires the human to choose Standard sharing of the existing console, not a new Log In session or a High Performance display, and the relay never auto-confirms that choice; server_enforced_view_only: false and an unverified viewer selection remain limitations even once transport connects. Never replay an uncertain attempt: resolve it here, or close it with relay_console_cancel.

relay_console_openA

Open console viewing for the owned lease, only following an explicit user request to watch. Requires console_id and attempt_id from relay_console_resolve, userRequested: true, reason (intent) and expected (what the human should expect to see); it opens on the declared service host, never a remote client, and is never triggered automatically by relay_acquire's vnc option. See relay_console_resolve for what a ready status does and does not prove. A failed or uncertain open keeps the attempt: resolve or cancel it rather than opening again with a new attempt.

relay_console_cancelA

Cancel an open or uncertain console-viewing attempt by console_id and attempt_id. Closes managed viewing resources only; it never releases or destroys the VM.

relay_statusA

Show this session's owned VM lease (backend binding, guest state, renewal, console observation, last error), staging state and evidence path, plus the project directory, the VM service origin and the selected environment in use; active:false when nothing is owned. Read-only; it does not touch the VM.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

A4.1/5.0

Scored across 18 tools

Disambiguation4/5

Tools cover distinct phases: discovery (search/probe/capabilities/tools), lifecycle (acquire/stage/finish/release/status), execution (run/exec/script/code), evidence (image/extract), and console. A few read-state tools (probe vs status) and execution variants could be confused, but descriptions draw clear boundaries.

Naming Consistency5/5

All tools use a relay_ prefix and snake_case, with no mixed casing or inconsistent styles. The suffixes vary by action, but the naming convention is highly predictable across the set.

Tool Count4/5

18 tools is slightly above the typical 3-15 sweet spot, but the surface spans discovery, lifecycle, execution, evidence, console, and status for a complex VM relay. Most tools have a clearly necessary role.

Completeness5/5

Covers full VM lifecycle from image discovery and acquisition through staging, execution, evidence extraction, and finish/release, plus console and status. No obvious dead ends for the one-task-per-enclosure workflow.

Maintenance

ActivityMaintained
ResponsivenessNo issues