Vista

#MCP tool reference

Every tool vistamcp offers, with its arguments. It mirrors the server's own tools/list answer, so it says exactly what an agent sees; update it when a tool changes. For setup and how the pieces fit, start with Agents.

Every per-machine tool takes machine: a name (any case), an id, or the first 8+ characters of an id. Tools that change something are marked destructive where they can lose data.

#Contents

#Library

#list_machines

List machines · read-only

Every virtual machine in the Vista library with its state (running, stopped, suspended, …), operating system, hardware (CPUs, memory, disk size and the disk space it really uses on the Mac), IP address when running, and whether agent control is allowed. Start here to learn names and ids.

No arguments.

#get_machine

Get machine details · read-only

Everything about one machine: full configuration (CPU, memory, disks, display, network mode and MAC address, shared folders, audio, Rosetta, clipboard, Secure Boot), live state (state, uptime, IP, window visible, install progress), its snapshots, whether an installer is still attached, the bundle path on the Mac, and how to reach the guest.

ArgumentTypeRequiredDescription
machinestringyesThe machine: its name (case-insensitive), its id, or the first 8+ characters of its id. list_machines shows them.

#list_systems

List installable systems · read-only

The operating systems Vista can download and install in one step, with the id to pass to create_machine. Includes macOS (latest and earlier majors, from Apple), Windows 11 for Arm (from Microsoft; experimental), and Linux/BSD distributions (Ubuntu, Fedora, Debian, Kali, CentOS Stream, Rocky, AlmaLinux, openSUSE, Pop!_OS, NixOS, Alpine, FreeBSD, OpenBSD, NetBSD). Each entry says whether it boots to a desktop and any tips for its installer. Optionally filter by os (macos, windows, linux, other) or a search word.

ArgumentTypeRequiredDescription
osmacos | windows | linux | otherOnly systems of this kind.
searchstringOnly systems whose name, family or edition contains this (case-insensitive).

#import_machine

Import a machine

Add an existing Vista machine bundle (a .vista folder, e.g. copied from another Mac) to the library.

ArgumentTypeRequiredDescription
pathstringyesAbsolute path to the .vista folder.

#configure_machine

Change machine settings

Change a machine's hardware and options. Any field left out is unchanged. Changes to a running machine are saved and take effect at its next start (restart_machine applies them). Disks can only grow. Returns the new configuration.

ArgumentTypeRequiredDescription
machinestringyesThe machine: its name (case-insensitive), its id, or the first 8+ characters of its id. list_machines shows them.
add_sharesarrayMac folders to share into the guest. Each item: name, path, readonly.
audiobooleanSound output.
autostartbooleanStart in the background when Vista opens.
clipboardbooleanLinux only: clipboard sharing through spice-vdagent.
cpusintegerVirtual CPU cores.
disk_gbintegerGrow the system disk to this many GB (the guest must then extend its partition).
display_heightintegerDisplay height in pixels.
display_widthintegerDisplay width in pixels (the window still resizes it while running).
eject_installerbooleanDetach the installer media (ISO) at the next start.
memory_gbnumberMemory in GB.
microphonebooleanGive the guest the Mac's microphone.
namestringNew display name.
nestedbooleanNested virtualization (M3 or later).
networkstring"shared" (NAT through the Mac, default), "none", or "bridged:" e.g. "bridged:en0" (needs Apple's bridging entitlement).
remove_sharesarrayNames of shared folders to stop sharing.
rosettabooleanLinux only: share Rosetta so the guest can run x86-64 Linux binaries (mount with mount -t virtiofs rosetta /media/rosetta, then register binfmt).

#clone_machine

Clone a machine

Make a copy of a stopped machine. On APFS the copy shares blocks with the original, so it's instant and uses no space until either changes. The clone gets a new id, MAC address and machine identity; snapshots aren't copied.

ArgumentTypeRequiredDescription
machinestringyesThe machine: its name (case-insensitive), its id, or the first 8+ characters of its id. list_machines shows them.
namestringName for the copy (default: " copy").
startbooleanStart the clone right away.

#delete_machine

Delete a machine · destructive

Move a stopped machine's bundle (disks, snapshots, everything) to the Trash and remove it from the library. Irreversible from Vista's side. Requires confirm=true.

ArgumentTypeRequiredDescription
confirmbooleanyesMust be true.
machinestringyesThe machine: its name (case-insensitive), its id, or the first 8+ characters of its id. list_machines shows them.

#Creating machines

#create_machine

Create a machine

Create a new virtual machine. Give either system (an id from list_systems: Vista downloads the installer from its publisher, verifies its checksum and keeps it for next time) or installer_path (an .iso or .ipsw already on this Mac). Runs as a background job and returns its id at once; poll get_job (wait_seconds lets you block). With start=true (default) the machine boots into its installer when ready: macOS installs by itself (and with username/password on a macOS 27 host, creates the account and skips Setup Assistant); Linux/BSD installers run in the window — drive them with screenshot, click, type_text and press_keys; Windows 11 (experimental) installs unattended with the given account. Sensible hardware defaults are chosen per OS.

ArgumentTypeRequiredDescription
cpusintegerVirtual CPU cores (default 4; 2 for BSDs).
disk_gbintegerSystem disk in GB (default 96 macOS, 80 Windows, 64 Linux). Sparse: only what the guest writes uses space.
enable_sshbooleanmacOS: turn on Remote Login for the first account.
fullnamestringFirst account's full name.
installer_pathstringAbsolute path to an .iso or .ipsw on this Mac, instead of system.
memory_gbnumberMemory in GB (default 8 for macOS/Windows, 4 for Linux).
namestringDisplay name. Defaults to the system's name.
osmacos | linux | windows | otherWith installer_path: what it installs (guessed from the file name otherwise).
passwordstringFirst account's password.
rosettabooleanLinux: share Rosetta for x86-64 binaries.
share_downloadsbooleanShare the Mac's Downloads folder into the guest (default true).
startbooleanStart the machine once it's built (default true).
systemstringCatalog id from list_systems, e.g. "ubuntudesktop2604", "macoslatest", "fedoraworkstation", "windows11".
usernamestringFirst account's short name (macOS on a macOS 27 host; Windows).
visiblebooleanOpen its window when started (default true; needed for screenshots).
wait_secondsintegerWait up to this long for the job to finish before answering (default 0).

#get_job

Get creation job · read-only

Progress of a create_machine job: its phase (resolving, downloading, verifying, preparing, creating, starting, done, failed, cancelled), bytes downloaded and expected, percentage, a message, and the new machine's id once it exists. Pass wait_seconds to block until the job finishes or the time runs out.

ArgumentTypeRequiredDescription
jobstringyesThe job id create_machine returned (or its first 8 characters).
wait_secondsintegerBlock up to this long for the job to finish.

#list_jobs

List creation jobs · read-only

Recent machine creation jobs (from agents and from Vista's own window), newest first, with their phase and progress.

No arguments.

#cancel_job

Cancel creation job

Stop a running create_machine job. A partly downloaded installer is kept, so creating the same system again resumes the download.

ArgumentTypeRequiredDescription
jobstringyesThe job id.

#Power and windows

#start_machine

Start a machine

Power on a machine (or resume it if suspended). Each machine runs in its own process; this returns once that process answers, with the machine's state. The guest OS still needs time to boot — take a screenshot to see where it is.

ArgumentTypeRequiredDescription
machinestringyesThe machine: its name (case-insensitive), its id, or the first 8+ characters of its id. list_machines shows them.
visiblebooleanOpen its window (default true). Screenshots and pointer tools need a visible window; a hidden machine can be shown later with show_machine.

#stop_machine

Stop a machine · destructive

Shut a machine down. By default this presses the guest's power button so it shuts down cleanly (the guest decides; macOS may ask about unsaved work). force=true pulls the plug immediately, like holding the power button — unsaved data in the guest is lost. wait=true (default) waits up to 60 seconds for it to finish.

ArgumentTypeRequiredDescription
machinestringyesThe machine: its name (case-insensitive), its id, or the first 8+ characters of its id. list_machines shows them.
forcebooleanStop immediately without asking the guest (default false).
waitbooleanWait for the machine to be off (default true).

#restart_machine

Restart a machine

Ask the guest to shut down, then start it again with its current saved configuration (so configure_machine changes take effect). Falls back to a hard restart if the guest can't be asked.

ArgumentTypeRequiredDescription
machinestringyesThe machine: its name (case-insensitive), its id, or the first 8+ characters of its id. list_machines shows them.

#pause_machine

Pause a machine

Freeze a running machine in place: its CPUs stop, memory stays. resume_machine continues exactly where it was.

ArgumentTypeRequiredDescription
machinestringyesThe machine: its name (case-insensitive), its id, or the first 8+ characters of its id. list_machines shows them.

#resume_machine

Resume a machine

Continue a paused machine.

ArgumentTypeRequiredDescription
machinestringyesThe machine: its name (case-insensitive), its id, or the first 8+ characters of its id. list_machines shows them.

#suspend_machine

Suspend a machine

Save the machine's memory to disk and quit its process. The next start_machine resumes it exactly where it was, in seconds. Not every configuration supports it.

ArgumentTypeRequiredDescription
machinestringyesThe machine: its name (case-insensitive), its id, or the first 8+ characters of its id. list_machines shows them.

#show_machine

Show a machine's window

Bring a running machine's window to the front (opening it if the machine was started hidden). Needed before screenshots of a hidden machine.

ArgumentTypeRequiredDescription
machinestringyesThe machine: its name (case-insensitive), its id, or the first 8+ characters of its id. list_machines shows them.

#hide_machine

Hide a machine's window

Hide a running machine's window; it keeps running in the background.

ArgumentTypeRequiredDescription
machinestringyesThe machine: its name (case-insensitive), its id, or the first 8+ characters of its id. list_machines shows them.

#Snapshots

#take_snapshot

Take a snapshot

Save the machine's current state so you can come back to it. Works stopped or running: for a running machine the guest is paused for a moment and its memory is saved too, so reverting resumes exactly here (open apps and all). Copy-on-write: instant, and costs disk space only as the machine changes afterwards.

ArgumentTypeRequiredDescription
machinestringyesThe machine: its name (case-insensitive), its id, or the first 8+ characters of its id. list_machines shows them.
namestringA name, e.g. "before upgrade" (default: Snapshot N).

#list_snapshots

List snapshots · read-only

A machine's snapshots, newest first, with id, name, when it was taken, and whether it includes memory (taken while running).

ArgumentTypeRequiredDescription
machinestringyesThe machine: its name (case-insensitive), its id, or the first 8+ characters of its id. list_machines shows them.

#revert_snapshot

Revert to a snapshot · destructive

Put the machine back exactly as it was when the snapshot was taken, discarding everything since. The machine must be off; stop_first=true force-stops it first. A snapshot taken while running leaves the machine suspended, so start_machine resumes into it. Consider take_snapshot first if the current state may be wanted.

ArgumentTypeRequiredDescription
machinestringyesThe machine: its name (case-insensitive), its id, or the first 8+ characters of its id. list_machines shows them.
snapshotstringyesThe snapshot's id (or first 8 characters) or its name, from list_snapshots.
startbooleanStart the machine after reverting (default false).
stop_firstbooleanForce-stop the machine if it's running (default false).

#rename_snapshot

Rename a snapshot

Give a snapshot a new name.

ArgumentTypeRequiredDescription
machinestringyesThe machine: its name (case-insensitive), its id, or the first 8+ characters of its id. list_machines shows them.
namestringyes
snapshotstringyesThe snapshot's id (or first 8 characters) or its name, from list_snapshots.

#delete_snapshot

Delete a snapshot · destructive

Remove a snapshot and free the space only it was using. The machine's current state is not affected.

ArgumentTypeRequiredDescription
machinestringyesThe machine: its name (case-insensitive), its id, or the first 8+ characters of its id. list_machines shows them.
snapshotstringyesThe snapshot's id (or first 8 characters) or its name, from list_snapshots.

#Screen, keyboard and pointer

#screenshot

Take a screenshot · read-only

A PNG of the machine's display, exactly as a person would see it. The image's pixel size is the coordinate space for click/drag/scroll (origin top-left). The window is shown first if the machine runs hidden. Take one after starting a machine, and after acting, to check what happened.

ArgumentTypeRequiredDescription
machinestringyesThe machine: its name (case-insensitive), its id, or the first 8+ characters of its id. list_machines shows them.

#click

Click

Move the pointer to (x, y) in screenshot pixels and click the left button.

ArgumentTypeRequiredDescription
machinestringyesThe machine: its name (case-insensitive), its id, or the first 8+ characters of its id. list_machines shows them.
xnumberyesPixels from the left edge of the screenshot.
ynumberyesPixels from the top edge of the screenshot.
screenshotbooleanReturn a screenshot after acting (default false).
settle_msintegerWith screenshot: milliseconds to wait before taking it, so the guest can react (default 600).

#double_click

Double-click

Double-click the left button at (x, y), e.g. to open a file or select a word.

ArgumentTypeRequiredDescription
machinestringyesThe machine: its name (case-insensitive), its id, or the first 8+ characters of its id. list_machines shows them.
xnumberyesPixels from the left edge of the screenshot.
ynumberyesPixels from the top edge of the screenshot.
screenshotbooleanReturn a screenshot after acting (default false).
settle_msintegerWith screenshot: milliseconds to wait before taking it, so the guest can react (default 600).

#right_click

Right-click

Click the right (secondary) button at (x, y) to open a context menu.

ArgumentTypeRequiredDescription
machinestringyesThe machine: its name (case-insensitive), its id, or the first 8+ characters of its id. list_machines shows them.
xnumberyesPixels from the left edge of the screenshot.
ynumberyesPixels from the top edge of the screenshot.
screenshotbooleanReturn a screenshot after acting (default false).
settle_msintegerWith screenshot: milliseconds to wait before taking it, so the guest can react (default 600).

#move_mouse

Move the pointer

Move the pointer to (x, y) without clicking — to hover menus and tooltips.

ArgumentTypeRequiredDescription
machinestringyesThe machine: its name (case-insensitive), its id, or the first 8+ characters of its id. list_machines shows them.
xnumberyesPixels from the left edge of the screenshot.
ynumberyesPixels from the top edge of the screenshot.
screenshotbooleanReturn a screenshot after acting (default false).
settle_msintegerWith screenshot: milliseconds to wait before taking it, so the guest can react (default 600).

#drag

Drag

Press the left button at (x, y), move to (to_x, to_y) and release: dragging windows, files, sliders, or selecting text.

ArgumentTypeRequiredDescription
machinestringyesThe machine: its name (case-insensitive), its id, or the first 8+ characters of its id. list_machines shows them.
to_xnumberyesEnd point, pixels from the left.
to_ynumberyesEnd point, pixels from the top.
xnumberyesPixels from the left edge of the screenshot.
ynumberyesPixels from the top edge of the screenshot.
screenshotbooleanReturn a screenshot after acting (default false).
settle_msintegerWith screenshot: milliseconds to wait before taking it, so the guest can react (default 600).

#scroll

Scroll

Scroll at (x, y). dy > 0 scrolls down (content moves up), dy < 0 up; dx scrolls sideways. Units are pixels; 300–600 is roughly a page of text.

ArgumentTypeRequiredDescription
machinestringyesThe machine: its name (case-insensitive), its id, or the first 8+ characters of its id. list_machines shows them.
xnumberyesPixels from the left edge of the screenshot.
ynumberyesPixels from the top edge of the screenshot.
dxnumberHorizontal pixels (default 0).
dynumberVertical pixels (default 0).
screenshotbooleanReturn a screenshot after acting (default false).
settle_msintegerWith screenshot: milliseconds to wait before taking it, so the guest can react (default 600).

#type_text

Type text

Type text into whatever has keyboard focus in the guest, one keystroke per character on a US layout. Newlines press Return and tabs press Tab. Characters with no key on a US keyboard (é, emoji) are skipped and reported. Click a field first if needed.

ArgumentTypeRequiredDescription
machinestringyesThe machine: its name (case-insensitive), its id, or the first 8+ characters of its id. list_machines shows them.
textstringyesWhat to type.
screenshotbooleanReturn a screenshot after acting (default false).
settle_msintegerWith screenshot: milliseconds to wait before taking it, so the guest can react (default 600).

#press_keys

Press keys

Press a key or shortcut. Examples: "enter", "escape", "tab", "backspace", "delete" (backspace), "forwarddelete", "up", "pagedown", "f5", "cmd+c", "cmd+shift+t", "ctrl+alt+delete", "alt+f4", "cmd+space". Modifiers: cmd (Command on macOS, Windows/Super key elsewhere), ctrl, alt/option, shift. Several presses separated by spaces run in order: "cmd+a backspace".

ArgumentTypeRequiredDescription
keysstringyesKeys to press, e.g. "cmd+s" or "ctrl+c enter".
machinestringyesThe machine: its name (case-insensitive), its id, or the first 8+ characters of its id. list_machines shows them.
screenshotbooleanReturn a screenshot after acting (default false).
settle_msintegerWith screenshot: milliseconds to wait before taking it, so the guest can react (default 600).

#Inside the guest (Vista Tools)

#guest_info

Guest information · read-only

Ask Vista Tools inside the guest who and what it is: OS, version, kernel, architecture, hostname, and the user it runs commands as. A quick way to check Vista Tools is installed and answering.

ArgumentTypeRequiredDescription
machinestringyesThe machine: its name (case-insensitive), its id, or the first 8+ characters of its id. list_machines shows them.

#run_command

Run a command in the guest

Run a shell command inside the guest and get its exit code, stdout and stderr (each truncated to 1 MB). Runs through /bin/sh -c by default, so pipes, globs and && work. Commands run as the guest's console user unless admin=true (root). Interactive programs that wait for input will hang until the timeout; pass stdin or use non-interactive flags (apt-get -y, DEBIAN_FRONTEND=noninteractive). Needs Vista Tools in the guest (Linux, macOS).

ArgumentTypeRequiredDescription
commandstringyesThe command line, e.g. "uname -a" or "cd /srv && ls -la".
machinestringyesThe machine: its name (case-insensitive), its id, or the first 8+ characters of its id. list_machines shows them.
adminbooleanRun as root (default false).
cwdstringWorking directory (default: the user's home).
envobjectExtra environment variables.
shellbooleanRun through /bin/sh -c (default true). false splits the command on spaces and runs it directly.
stdinstringText to feed to the command's standard input.
timeoutintegerSeconds before the command is killed (default 120).

#read_file

Read a guest file · read-only

Read a file inside the guest. Text comes back as text; binary files (or encoding=base64) come back base64-encoded. Up to 64 MB per call; use offset/length to page through bigger files, or download_file to copy one to the Mac.

ArgumentTypeRequiredDescription
machinestringyesThe machine: its name (case-insensitive), its id, or the first 8+ characters of its id. list_machines shows them.
pathstringyesAbsolute path in the guest.
encodingauto | text | base64auto (default): text when it's valid UTF-8.
lengthintegerBytes to read.
offsetintegerByte offset to start at.

#write_file

Write a guest file

Create or overwrite a file inside the guest (parent directories are created). content is text unless encoding=base64. append=true adds to the end. mode sets permissions, e.g. "755" for a script.

ArgumentTypeRequiredDescription
contentstringyesThe file's contents.
machinestringyesThe machine: its name (case-insensitive), its id, or the first 8+ characters of its id. list_machines shows them.
pathstringyesAbsolute path in the guest.
appendboolean
encodingtext | base64How content is encoded (default text).
modestringOctal permissions, e.g. "644" or "755".

#list_directory

List a guest directory · read-only

The entries of a directory inside the guest with kind (file, dir, link), size, permissions and modification time.

ArgumentTypeRequiredDescription
machinestringyesThe machine: its name (case-insensitive), its id, or the first 8+ characters of its id. list_machines shows them.
pathstringyesAbsolute directory path in the guest.

#file_info

Guest file info · read-only

Whether a path exists inside the guest, and its kind, size, permissions and modification time.

ArgumentTypeRequiredDescription
machinestringyesThe machine: its name (case-insensitive), its id, or the first 8+ characters of its id. list_machines shows them.
pathstringyesAbsolute path in the guest.

#make_directory

Make a guest directory

Create a directory (and its parents) inside the guest.

ArgumentTypeRequiredDescription
machinestringyesThe machine: its name (case-insensitive), its id, or the first 8+ characters of its id. list_machines shows them.
pathstringyesAbsolute directory path in the guest.

#delete_path

Delete a guest path · destructive

Delete a file, or a directory with recursive=true, inside the guest.

ArgumentTypeRequiredDescription
machinestringyesThe machine: its name (case-insensitive), its id, or the first 8+ characters of its id. list_machines shows them.
pathstringyesAbsolute path in the guest.
recursiveboolean

#upload_file

Copy a file into the guest

Copy a file from this Mac into the guest, in chunks (any size). For whole folders, share the folder instead (configure_machine add_shares) or archive it first.

ArgumentTypeRequiredDescription
guest_pathstringyesAbsolute destination path in the guest.
host_pathstringyesAbsolute path on the Mac.
machinestringyesThe machine: its name (case-insensitive), its id, or the first 8+ characters of its id. list_machines shows them.

#download_file

Copy a file out of the guest

Copy a file from the guest to this Mac, in chunks (any size).

ArgumentTypeRequiredDescription
guest_pathstringyesAbsolute path in the guest.
host_pathstringyesAbsolute destination path on the Mac.
machinestringyesThe machine: its name (case-insensitive), its id, or the first 8+ characters of its id. list_machines shows them.

Edit this page on GitHub