Build Custom Linux ISO's and Deployments

Dev Tools

Build, test, and deploy custom Linux ISOs with OpenFactory. Create VMs, run compliance tests, manage recipes.

Install

openclaw skills install openfactory

OpenFactory Skill

Build custom Linux ISOs, deploy VMs, run compliance tests, and manage infrastructure — all through natural language.

Connection

OpenFactory exposes an MCP (Model Context Protocol) server over SSE.

Endpoint: https://build.openfactory.tech/api/mcp/sse

Authentication (pick one):

  • API Key (recommended): Generate at the OpenFactory console under Settings > MCP Keys. Pass as api_key parameter on every tool call, or as Authorization: Bearer of_mcp_<key> HTTP header.
  • Session Token: The first tool call returns a session_token in its response. Pass it to all subsequent calls for session continuity.

Session token is critical — cloud MCP clients rotate IPs between requests. Without passing session_token back, each call looks like a new anonymous user.

Tools

Builds

ToolWhat it does
list_builds(status_filter?, limit?)List your builds. Filter by queued, building, built, failed, completed.
get_build(build_id)Get full build details including recipe, ISO path, test results.
get_build_status(build_id)Get current status, stage, and progress percentage.
create_build(recipe)Create a new build from a recipe (see Recipe Schema below).
retry_build(build_id)Retry a failed build with the same recipe.
get_iso_download_url(build_id)Get a download URL for the completed ISO.
deploy_from_git(repo_url, base_image?, branch?)Build an ISO that auto-deploys a git repo as a service.

Recipes

ToolWhat it does
list_recipes(category?, search?)Browse pre-built recipe templates. Categories: healthcare, industrial, education, municipal, research, ai-development.
list_recipe_categories()List all available categories with descriptions.
get_recipe(recipe_id)Get full recipe details.
validate_recipe(recipe)Validate a recipe without starting a build.
create_recipe_from_template(template_id, name, modifications)Fork a template and customize it.

Tests

ToolWhat it does
run_tests(build_id, tests?, memory_mb?, vcpus?, timeout_seconds?, keep_environment?)Spin up a VM from the ISO and run tests. Leave tests empty for defaults (boot, login, packages, network + feature tests).
get_test_results(run_id)Get test results: passed/failed assertions, screenshots, VM info.
list_test_runs(build_id?, limit?)List test runs, optionally filtered by build.
stop_test_run(run_id)Stop a running test and clean up VMs.

VMs

ToolWhat it does
list_vms(build_id?)List running VMs, optionally filtered by build.
create_vm(build_id, name?, memory_mb?, vcpus?)Create and boot a VM from a built ISO.
start_vm(vm_name)Start a stopped VM.
stop_vm(vm_name, force?)Stop a VM. force=true for immediate power-off.
delete_vm(vm_name)Delete a VM and its disk.
screenshot_vm(vm_name)Capture a PNG screenshot of the VM display.
get_vm_console_url(vm_name)Get a VNC console URL for browser access.

Recipe Schema

{
  "name": "My Custom Server",
  "base_image": "ubuntu-24.04",
  "description": "What this variant is for",
  "features": ["ssh", "docker", "monitoring"],
  "packages": ["curl", "htop", "vim"],
  "users": [
    {"username": "admin", "password": "changeme", "groups": ["sudo"]}
  ],
  "services": [
    {"name": "ssh", "config": {"port": 22}}
  ],
  "security": {"hardening_level": "standard"},
  "hardware": {"min_memory_gb": 4, "min_storage_gb": 32},
  "networking": {
    "dns_servers": ["8.8.8.8", "1.1.1.1"]
  }
}

Supported base images: debian-bookworm, debian-trixie, ubuntu-24.04, fedora-40, fedora-43, opensuse-tumbleweed, elster-os

Common features: ssh, docker, desktop, development-tools, python, nodejs, monitoring, security-hardening, audit-logging, gxp, hipaa, ollama, claude-code, openclaw, nspawn-containers, agent-containers

Workflows

Build a custom Linux ISO

1. create_build(recipe)          → returns build_id
2. get_build_status(build_id)    → poll until status is "built"
3. run_tests(build_id)           → returns run_id
4. get_test_results(run_id)      → check passed/failed
5. get_iso_download_url(build_id) → download the ISO

Deploy a git repo as a service

1. deploy_from_git("https://github.com/user/app.git", base_image="ubuntu-24.04")
   → builds ISO with app auto-deployed at boot
2. get_build_status(build_id) → poll until built
3. create_vm(build_id)        → boot a VM running your app

Start from a template

1. list_recipe_categories()
2. list_recipes(category="healthcare")
3. create_recipe_from_template("gxp-medtech-station", "My MedTech", {
     "add_features": ["monitoring"],
     "add_packages": ["prometheus-node-exporter"]
   })
4. create_build(modified_recipe)

Test a build with compliance checks

1. run_tests(build_id, tests=["boot", "login", "network"], keep_environment=true)
2. get_test_results(run_id)
3. screenshot_vm(vm_name)  → visually verify the desktop

Error Handling

  • Build failed: Use retry_build(build_id) or check the recipe for issues with validate_recipe(recipe).
  • Test failed: Use get_test_results(run_id) to see which assertions failed and why.
  • VM won't start: Check that the build completed successfully with get_build_status(build_id).

Rate Limits

  • Builds: 1 concurrent per user (queued if busy)
  • VMs: Up to 10 per user
  • Tests: 1 concurrent per build
  • API calls: No hard limit, be reasonable

Examples

"Build me an Ubuntu server with Docker and SSH"

{
  "name": "Docker Server",
  "base_image": "ubuntu-24.04",
  "features": ["ssh", "docker"],
  "users": [{"username": "admin", "password": "admin", "groups": ["sudo", "docker"]}]
}

"Create a Fedora desktop with AI tools"

{
  "name": "AI Workstation",
  "base_image": "fedora-43",
  "features": ["desktop", "ssh", "python", "ollama", "claude-code"],
  "hardware": {"min_memory_gb": 16, "min_storage_gb": 64}
}

"Build a GxP-compliant medical device image"

{
  "name": "MedTech Station",
  "base_image": "debian-bookworm",
  "features": ["ssh", "desktop", "gxp", "hipaa", "audit-logging", "security-hardening"],
  "security": {"hardening_level": "strict"}
}