Export Image
Select and Export

On the Home page, you can select the project you want to export, right-click, and choose the "Export Image File" option.

After clicking "Export," you need to wait for a moment, as the export process may take some time. Once the export is complete, you can find the exported image file in the directory you just selected.
Import to Docker

You can input the following command in the terminal to import:
docker load -i /path/to/your/image.tar.zst
When the import is complete, you will see the name of the imported image in the last line, like in the image above: Loaded image: localhost/mcp-1:latest
. Here, localhost/mcp-1:latest
is the name of the imported image.
Start
Before starting, we need to apply for an API Key
at: https://console.oomol.com/panel/api-key, so that the workflow inside the container can use functionalities like Secret
, AI
, etc.
docker run --privileged -p 3000:3000 -e OOMOL_API_TOKEN={OOMOL_API_TOKEN} -v $HOME/oomol-storage:/oomol-driver/oomol-storage localhost/mcp-1:latest
- The default API service port is
3000
, which can be re-specified by passing the environment variablePORT
. - If the current workflow does not need to use files from the local
oomol-storage
folder, you can skip mounting (remove-v $HOME/oomol-storage:/oomol-driver/oomol-storage
). - For the mounted directory, you can refer to the
Disk
listed in Space.
API
Query

After the container starts, you can access: http://localhost:3000/ui
in your browser to query the API.
Usage
You can now query workflows and their parameters by requesting http://localhost:3000/v1/flows
. For example:
{
"flows": [
{
"name": "zip-directory",
"path": "/app/workspace/flows/zip-directory/flow.oo.yaml",
"inputs": [
{
"nodeId": "copy_file#1",
"inputs": [
{
"handle": "destination_folder",
"json_schema": { "type": "string", "ui:widget": "dir" },
"nullable": true,
"value": "/oomol-driver/oomol-storage"
}
]
},
{
"nodeId": "zip_dir#1",
"inputs": [
{
"handle": "password",
"json_schema": { "type": "string" },
"nullable": true,
"value": null
},
{
"handle": "zip_file_name",
"json_schema": { "type": "string", "ui:widget": "save" },
"nullable": true,
"value": null
},
{
"handle": "dir_to_zip",
"description": "Input",
"json_schema": { "type": "string", "ui:widget": "dir" }
}
]
}
]
},
{
"name": "zip-file",
"path": "/app/workspace/flows/zip-file/flow.oo.yaml",
"description": "zip a file",
"inputs": [
{
"nodeId": "zip_file#1",
"inputs": [
{
"handle": "file_to_zip",
"description": "Input",
"json_schema": { "type": "string", "ui:widget": "file" }
},
{
"handle": "zip_file_name",
"json_schema": { "type": "string", "ui:widget": "save" },
"nullable": true,
"value": null
},
{
"handle": "password",
"json_schema": { "type": "string" },
"nullable": true,
"value": null
}
]
},
{
"nodeId": "copy_file#1",
"inputs": [
{
"handle": "destination_folder",
"json_schema": { "type": "string", "ui:widget": "dir" },
"nullable": true,
"value": "/oomol-driver/oomol-storage"
}
]
}
]
}
]
}
Through the above JSON, we can see a Flow with the name
as zip-file
. This Flow contains a Node with nodeId
as zip_file#1
, and there is a handle
named file_to_zip
that needs a value.
With this information, we can create a task by sending a POST request to localhost:3000/v1/tasks
, with the request body as
{
"flowName": "zip-file",
"inputValues": [
{
"nodeId": "zip_file#1",
"inputs": [
{
"handle": "file_to_zip",
"value": "/oomol-driver/oomol-storage/data.csv"
}
]
}
]
}
When the request is complete, you will receive a JSON response similar to:
{
"task": {
"id": "9a56494e-919c-44b7-b897-ca7bae9713aa",
"project_id": "mcp-1_7691f464d9ef",
"manifest_path": "/app/workspace/flows/zip-file/flow.oo.yaml",
"status": "created",
"inputValues": [
{
"nodeId": "zip_file#1",
"inputs": [
{
"handle": "file_to_zip",
"value": "/oomol-driver/oomol-storage/data.csv"
}
]
}
],
"created_at": 1751530274000,
"updated_at": 1751530274000
}
}
You can check the status of the task execution by requesting localhost:3000/v1/tasks/{taskId}/logs
.