Install
openclaw skills install openfactoryBuild, test, and deploy custom Linux ISOs with OpenFactory. Create VMs, run compliance tests, manage recipes.
openclaw skills install openfactoryBuild custom Linux ISOs, deploy VMs, run compliance tests, and manage infrastructure — all through natural language.
OpenFactory exposes an MCP (Model Context Protocol) server over SSE.
Endpoint: https://build.openfactory.tech/api/mcp/sse
Authentication (pick one):
api_key parameter on every tool call, or as Authorization: Bearer of_mcp_<key> HTTP header.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.
| Tool | What 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. |
| Tool | What 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. |
| Tool | What 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. |
| Tool | What 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. |
{
"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
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
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
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)
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
retry_build(build_id) or check the recipe for issues with validate_recipe(recipe).get_test_results(run_id) to see which assertions failed and why.get_build_status(build_id)."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"}
}