MCP Virtual Computer

io.github.flujo-appPublished by GitHub account flujo-appv0.2.11Updated Oct 25, 2026

A persistent Docker or Fly computer with a Three.js interface and optional live Xfce desktop.

Overview

AI-generated overview

Gives an assistant a persistent Docker or Fly.io computer with a terminal, file tools and an optional live Xfce desktop it can see and control.

What you can do
  • Run shell commands in the configured Docker container or Fly Machine
  • Read, write and edit UTF-8 text files under /workspace or by absolute path
  • Open a Three.js computer view in an MCP App or external browser
  • With the real desktop enabled: capture the screen as PNG or an accessibility tree, and click, type and scroll
  • List, switch, move, maximize, restore, minimize and close Xfce windows
  • Optionally expose runtime status and network/desktop switching tools to the model
When to use it
Useful when an assistant needs a durable sandbox machine to run commands, manage files and drive a graphical desktop, either locally in Docker or as a permanent Fly.io Machine that survives restarts.
Requirements
Local process run with uvx from the PyPI package; Docker Desktop for the default docker backend (auto-installable on Windows, which may need WSL 2 and an administrator prompt), or flyctl plus a Fly.io account for the fly backend. COMPUTER_ID is required in the manifest (defaults to agent-workstation); optional FLY_API_TOKEN or a cached flyctl login, and FLY_ORG, FLY_APP_NAME, FLY_REGION overrides. Desktop only.
Before you install
The assistant gets shell and file access inside the computer, and with the desktop enabled can click and type in it; NETWORK_ACCESS controls outbound network. Fly mode creates a permanent Machine that keeps running and incurring usage after the MCP shuts down, and deleting or factory-resetting it destroys its persistent filesystem. FLY_API_TOKEN is a secret; auto-install options download Docker Desktop or flyctl and may prompt for administrator rights.

Installation

In SourceWeft

  1. Open MCP Virtual Computer in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.

Other MCP clients

Follow the launch instructions in the repository.

README

MCP Virtual Computer

[image]

A VM for your agent. And for you.

  • click the mug to switch between a virtual desktop or a real one
  • unplug the network cable and cut network access
  • use the computer screen like a normal screen
  • copy and paste text between the host browser and the Xfce desktop
  • model can use terminal, create/read/edit files, see the screen, click, type
  • little fun thing: if either you or the llm types text, you see that on the keyboard; if one uses the cursor, you see the mouse move on the table.
  • automatically installs Docker Desktop on Windows for local mode, or flyctl for Fly mode

MCP client example

Local Docker (default)

COMPUTER_ID defaults to agent-workstation when omitted. Set it explicitly to keep using a named computer or to create a separate one. On a fresh Windows PC, setup prepares WSL 2 before installing Docker Desktop. Approve the Windows administrator prompt if shown; if a restart is required, restart Windows, reopen your MCP client, and retry. See Windows first-use validation.

json
{  "mcpServers": {    "virtual-computer": {      "command": "uvx",      "args": ["mcp-virtual-computer"],      "env": {        "COMPUTER_ID": "agent-workstation",        "DESKTOP_ENVIRONMENT": "true",        "NETWORK_ACCESS": "true",        "AUTO_INSTALL_DOCKER": "true",        "EXPOSE_LIFECYCLE_TOOLS": "false"      }    }  }}

Fly.io Machine

On a fresh machine, start the MCP once, run the exact flyctl auth login command shown by its error, and restart the MCP client

json
{  "mcpServers": {    "virtual-computer-fly": {      "command": "uvx",      "args": ["mcp-virtual-computer", "--backend", "fly"],      "env": {        "COMPUTER_ID": "agent-workstation",        "DESKTOP_ENVIRONMENT": "true",        "NETWORK_ACCESS": "true",        "AUTO_INSTALL_FLYCTL": "true",        "EXPOSE_LIFECYCLE_TOOLS": "false"      }    }  }}

What it exposes

  • terminal_execute — run a command in the configured Docker container or Fly Machine.
  • read_file — read a UTF-8 text file relative to /workspace or by absolute path.
  • write_file — atomically write a UTF-8 text file.
  • edit_file — replace one exact text match, or all matches when requested.
  • computer_ui — open or attach the Three.js computer view. Its result includes both the MCP App resource_uri and a real loopback url/dashboard_url that opens in an external browser, including for stdio clients.

DESKTOP_ENVIRONMENT defaults to true. With the real desktop enabled it additionally exposes:

  • look_at_screen — return the current PNG framebuffer, AT-SPI snapshot, or both.
  • click, type, and scroll — interact by AT-SPI element reference or coordinates.
  • list_windows and switch_window — enumerate and activate real Xfce windows.
  • move_window, maximize_window, restore_window, minimize_window, and close_window — control a selected window by ID, title, or class.
  • computer://screen/current.png — current live framebuffer resource.
  • computer://screen/accessibility.json — Playwright-like AT-SPI tree with element refs, roles, names, actions, focus state, and screen bounds.

The MCP App can always call runtime_status, set_network_access, and set_desktop_environment. Set EXPOSE_LIFECYCLE_TOOLS=true to additionally expose those lifecycle controls to the model; they remain model-hidden by default.

Architecture

[image]

Demo: FLUJO

[image]

Demo: Claude Desktop

[image]

Demo: Goose

[image]

Permanent Fly Machine

Fly mode builds the bundled Xfce image with Fly's remote builder and deploys it as one permanent Machine. The root filesystem and /workspace survive MCP restarts, and the Three.js screen uses the same noVNC desktop through Fly's HTTPS/WebSocket proxy.

This is the Xfce framebuffer returned by look_at_screen from a deployed Fly Machine. The same live desktop appears on the rendered computer after computer_ui connects to VNC:

[Xfce desktop running on a permanent Fly Machine]

No app name, region, CPU size, memory size, Docker installation, or VNC configuration is required. The package's MCP Registry declaration, including the docker and fly backend choices, is in server.json. See Fly setup for the complete first-run and authentication flow.

On first use, virtual-computer finds fly/flyctl or downloads the current official release to ~/.fly/bin. It uses a cached fly auth login session or FLY_API_TOKEN, selects the personal organization when available, creates and remembers a generated app, lets Fly choose the closest placement, and defaults to one shared CPU with 1 GB RAM.

Authentication is the only unavoidable account step. On a fresh machine, start the MCP once, run the exact flyctl auth login command shown by its error, and restart the MCP client. The first computer call can take several minutes while Fly remotely builds Xfce. Later starts attach to the same Machine.

Optional overrides remain available as FLY_ORG, FLY_APP_NAME, FLY_REGION, FLY_API_TOKEN, and the --fly-* flags. Set AUTO_INSTALL_FLYCTL=false to require a preinstalled CLI. Deleting or factory-resetting the computer destroys its persistent Fly root filesystem; ordinary MCP shutdown leaves the permanent Machine running. Stop or delete it from Fly when you no longer want it to incur usage.

License and origin

MIT licensed. This project is a persistent-computer fork of Kilntainers with Docker and Fly backends.

Source: README.md at commit 3bd3895

Tools

0
SourceWeft has not started this package in its sandbox yet, so its tools are not known.

Version history

1
  1. v0.2.11LatestSep 16, 2026

Score

50% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 days25 pts

    Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.

  • Auth declared10 pts

    Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.

  • Tools listed15 pts

    Answer tools/list without a credential, or ship a package that starts in a sandbox without one.

  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts