# Apps and components

> Find published Nodaro apps and components, read their inputs, and run them from an AI assistant with list_apps, run_app, list_components and run_component.

Source: https://nodaro.ai/docs/mcp/tools/apps-and-components

The **app and component tools** let an assistant use workflows that people published. An [app](https://nodaro.ai/docs/concepts/apps) is a published workflow with a simple form, such as a photo restoration or a themed edit, and a [component](https://nodaro.ai/docs/concepts/components-and-sub-workflows) is a published building block. The assistant searches for one, reads its inputs, and runs it with your credits.

Apps cover many requests that no single generation tool handles, such as novel transformations, themed edits and multi-step pipelines. An assistant should search the apps before it answers that something cannot be done.

## `list_apps`

Searches published apps: the public marketplace, or your own apps.

**Permission:** `apps:read`. **Credits:** free.

| Parameter | Type | Notes |
| --- | --- | --- |
| `scope` | string | `public` (default) for the marketplace, or `mine` for your own apps. |
| `search` | string | A topic to search for, up to 100 characters. |
| `category` | string | A category, up to 50 characters. |
| `limit` | integer | From 1 to 50. |
| `cursor` | string | The cursor of the previous page. |

**Returns:** the matching apps with their slugs.

## `get_app_inputs`

Returns the inputs of an app, the same form the app's page shows. Call it before `run_app` to learn the input keys.

**Permission:** `apps:read`. **Credits:** free.

| Parameter | Type | Notes |
| --- | --- | --- |
| `slug` | string | **Required.** The app's slug, for example `photo-restoration`. |

**Returns:** one entry per input, with its `key`, `label`, `type` (`image`, `video`, `audio`, `text`, `select`, `number`, `boolean` or `list`), whether it is `required`, and the `options` of a select.

## `run_app`

Runs a published app. You pay the credits of the run.

**Permission:** `workflows:execute`. **Credits:** the credits of the nodes that run inside the app.

| Parameter | Type | Notes |
| --- | --- | --- |
| `slug` | string | **Required.** The app's slug. |
| `inputs` | object | A flat object keyed by the input keys from `get_app_inputs`. Leave it out to use the defaults. |
| `inputOverrides` | object | Advanced. Raw node fields keyed by node id and field, applied over `inputs`, for example `{ "n1": { "promptPrefix": "..." } }`. |
| `client_request_id` | string | A retry token: 8 to 128 characters of letters, digits and `_ - . :`. Reuse it when you retry after a timeout, so the run is not started or charged twice. |

**Returns:** a run id. Follow the run with [`get_app_run`](https://nodaro.ai/docs/mcp/tools/gallery-and-assets#get_app_run).

`inputOverrides` cannot set where an output goes, such as the URL of a **Webhook Output** node, the account of a publishing node, or the target of a scraper. A run that tries is refused with `400 locked_field`.

## `delete_app_run`

Moves an app run to your archive. You can restore it or delete it for good at [app.nodaro.ai/archived-runs](https://app.nodaro.ai/archived-runs).

**Permission:** `workflows:execute`. **Credits:** free.

| Parameter | Type | Notes |
| --- | --- | --- |
| `slug` | string | **Required.** The app's slug, the last part of the app's URL. |
| `runId` | string | **Required.** The run id. |

**Returns:** a confirmation.

## `list_components`

Searches published components: the public marketplace, or your own. Use it when the user names a component, or asks for a multi-step pipeline that matches a known one.

**Permission:** `workflows:read`. **Credits:** free.

| Parameter | Type | Notes |
| --- | --- | --- |
| `scope` | string | `public` (default) for the marketplace, or `mine` for your own components. |
| `search` | string | A topic to search for, up to 100 characters. |
| `limit` | integer | From 1 to 50. |
| `cursor` | string | The cursor of the previous page. |

**Returns:** the matching components with their slugs.

## `get_component_inputs`

Returns the inputs of a component. Call it before `run_component` to learn the input keys.

**Permission:** `workflows:read`. **Credits:** free.

| Parameter | Type | Notes |
| --- | --- | --- |
| `component_id` | string | **Required.** The component's slug. |

**Returns:** one entry per input, with its `key`, `label`, `type` and whether it is `required`.

## `run_component`

Runs a published component.

**Permission:** `workflows:execute`. **Credits:** the credits of the nodes that run inside the component.

| Parameter | Type | Notes |
| --- | --- | --- |
| `component_id` | string | **Required.** The component's slug. |
| `inputs` | object | A flat object keyed by the input keys from `get_component_inputs`. Leave it out to use the defaults. |
| `client_request_id` | string | A retry token: 8 to 128 characters of letters, digits and `_ - . :`. Reuse it when you retry after a timeout. |

**Returns:** a job id. When the job completes, its `output_data` carries the component's outputs. In clients with MCP Apps, the job card shows the outputs one under the other.

## Frequently asked questions

### What is the difference between an app and a component?

An app is a published workflow that runs on its own from a simple form. A component is a published building block that other workflows reuse. Assistants look for an app first when a request has no direct tool.

### Who pays for an app run started by an assistant?

You do. run_app and run_component spend credits from your own account, at the prices of the nodes inside the app or component.

### Can an assistant change an app's hidden settings?

Only some. inputOverrides can set raw node fields, such as the text added before a prompt, but it cannot change where an output goes, such as a webhook URL or a social account. Those runs are refused.

### How do I delete an app run from the assistant?

Call delete_app_run with the app's slug and the run id. The run moves to your archive, where you can restore it or delete it for good.
