> ## Documentation Index
> Fetch the complete documentation index at: https://comfyui-mcp.artokun.io/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Apps (micro-apps)

> List, inspect, and run the panel's micro-apps — named, one-click workflow apps with exposed inputs — for canvas-less clients (mobile).

<Info>1 tool. Generated from the live MCP tool schemas — do not edit by hand; run `npm run docs:gen`.</Info>

<Tip>**You don't type these calls.** Ask your agent for what you want in ordinary English — it chooses the tool and fills in the arguments. The JSON on this page is what it sends. New here? Start with [Using the tools](/docs/using-tools).</Tip>

## apps

Micro-apps on this ComfyUI (panel Apps feature): named workflows packaged for one-click runs. Driven by the `action` parameter:

* action:"list" — List every registered app. Each entry is the app's manifest: id, name, description, appMode \{inputs, outputs}, deps, hideWorkflow, published. No other parameters. Read-only.
* action:"get" — One app's manifest + bundle facts (has\_workflow/has\_prompt/has\_thumbnail) by `app_id`. The manifest's appMode.inputs is the app's run form: each input has nodeId, widget, label, kind (text|number|combo|toggle|image|model), optional choices and default. Read-only.
* action:"run" — Run one app: patches `values` (keys '\<nodeId>.\<widget>', e.g. \{"6.text": "a cat"}) into the app's stored prompt snapshot and queues it on ComfyUI. Returns the prompt\_id — poll action:"run\_status". Only pass values for inputs listed in appMode.inputs; omitted inputs keep their conversion-time defaults.
* action:"run\_status" — Check one run by `app_id` + `prompt_id`: status (pending|running|done|unknown) plus the run's outputs (image/video file refs under each output node, text outputs). Read-only.
* action:"import" — Install an app from the public registry: fetches the registry bundle (manifest + prompt snapshot \[+ workflow unless hidden]) and creates it locally. The registry id becomes the local id, so re-importing reports an id conflict (already installed). Deps (models/custom nodes) are NOT installed — report the manifest's deps to the user so they can install them before running.

<Tip>**In plain terms:** Micro-apps are workflows someone has already wired up and reduced to a few boxes to fill in — the closest thing here to a normal app. Handy on mobile, where there is no canvas to edit. One tool, several jobs, chosen with `action`.</Tip>

### Parameters

<ParamField path="action" type="enum" required>
  Which apps operation to perform. "list" takes no other parameters; "get"/"run" require `app_id`; "run\_status" requires `app_id` + `prompt_id`; "import" requires `registry_url` + `app_id`. Options: `action:"list"`, `action:"get"`, `action:"run"`, `action:"run_status"`, `action:"import"`.
</ParamField>

<ParamField path="app_id" type="string">
  The app's uuid. REQUIRED for actions "get", "run", "run\_status" (from action:"list") and "import" (the REGISTRY app's uuid, from the explore list).
</ParamField>

<ParamField path="values" type="object">
  action:"run" — input overrides keyed '\<nodeId>.\<widget>' (e.g. \{"6.text": "a cat", "3.seed": 42}). Unknown keys fail loudly (the manifest drifted from the snapshot).
</ParamField>

<ParamField path="prompt_id" type="string">
  action:"run\_status" — the prompt\_id returned by action:"run". Required for that action.
</ParamField>

<ParamField path="registry_url" type="string">
  action:"import" — registry worker base URL (required for that action). Must be the default public registry or an origin the operator allowlisted via COMFYUI\_MCP\_REGISTRY\_URLS (the fetch is server-side — open URLs would be SSRF).
</ParamField>

<ParamField path="slug" type="string">
  action:"import" — the app's registry slug (recorded in local metadata).
</ParamField>

<ParamField path="version" type="integer">
  action:"import" — the registry version (recorded in local metadata).
</ParamField>

### Examples

**You say:** What one-click apps do I have?

```json theme={null}
{
  "tool": "apps",
  "arguments": {
    "action": "list"
  }
}
```

**You get back:** Every installed app with its id, name and description. Read-only.

**You say:** What do I need to fill in for the portrait one?

```json theme={null}
{
  "tool": "apps",
  "arguments": {
    "action": "get",
    "app_id": "b1f4c2de-90a7-4c3e-9d21-5c8e2f7a13bb"
  }
}
```

**You get back:** That app's input form — each box with its label, type and default, and the key you set it by.

**You say:** Run it with "a snow leopard on a rooftop".

```json theme={null}
{
  "tool": "apps",
  "arguments": {
    "action": "run",
    "app_id": "b1f4c2de-90a7-4c3e-9d21-5c8e2f7a13bb",
    "values": {
      "6.text": "a snow leopard on a rooftop at dusk"
    }
  }
}
```

**You get back:** A prompt\_id immediately; the app renders in the background. Check on it with `action: "run_status"` and the same app\_id plus that prompt\_id. The odd-looking `"6.text"` key is nodeId.widget — the form from `action: "get"` tells you which keys exist.

***
