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 variable PORT.
  • 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.