# All tools

The MCP server offers 38 tools in three kinds: read, propose, and write. This page lists each one with what it does, its arguments, and the permissions it needs.

> **Type:** reference
> **For:** Developers who connect an assistant or want to know exactly what it can reach
> **Prerequisite:** none

## Read

These tools change nothing.

| Tool | What it does | Arguments | Permissions |
|---|---|---|---|
| `whoami` | Names account, organization, and permissions of the connection, and which permissions the tools lack | none | none |
| `list_scenes` | Lists scenes with name, status, version, and format, also only those assigned nowhere | `status`, `search`, `assignment`, `limit`, `cursor` | `scene.list` |
| `get_scene` | Shows a scene with its zones, widgets, and open issues, each with a hint | `sceneId` | `scene.read` |
| `get_scene_document` | Returns the complete document of the draft and its version, the start for every change | `sceneId` | `scene.read` |
| `list_scene_templates` | Lists the curated scene templates | `orientation` | `scene.read` |
| `list_widgets` | Lists the widgets scenes are made of, core widgets and those of installed apps | `search`, `installedOnly` | none |
| `get_widget_schema` | Returns the JSON Schema of a widget's configuration with examples | `widgetType`, `appId` | none |
| `list_graphics` | Lists the graphics of the core widget `graphic`, searchable with German words | `search`, `category` | none |
| `list_assets` | Lists media with name, type, size, and tags, also only unused ones, without download addresses | `search`, `tags`, `usage`, `limit`, `cursor` | `asset.list` |
| `list_players` | Lists displays with status, content, location, and tags, also by location, without program, or silent for a while | `status`, `search`, `locationId`, `program`, `offlineSince`, `limit`, `cursor` | `fleet.player.list`, `location.list` |
| `get_player` | Shows a display with status, tags, program, and a running override | `playerId` | `fleet.player.read` |
| `get_player_screenshot` | Returns the most recent capture of a display as an image | `playerId` | `fleet.player.read` |
| `list_display_groups` | Lists the video walls with their surface and number of displays | none | `fleet.player.list` |
| `list_locations` | Lists locations with address, time zone, and number of displays | none | `location.list` |
| `get_location` | Shows a location with opening hours, the holidays of the next four weeks, and its displays | `locationId` | `fleet.player.list`, `location.read` |
| `list_playlists` | Lists playlists with name, source, and number of items | `search`, `sourceKind`, `limit`, `cursor` | `playlist.list` |
| `get_playlist` | Shows a playlist with source, duration, and sequence of scenes, media, and app contents | `playlistId` | `playlist.read` |
| `list_schedules` | Lists programs with base, number of entries, and number of displays | `search`, `limit`, `cursor` | `schedule.list` |
| `get_hygiene` | Counts what could be cleaned up and names the tool that shows the rows behind each number | `offlineSince`, `dormantSince` | `analytics.query.run` |
| `validate_scene` | Checks a scene document without saving it | `document` | `scene.read` |

## Propose

These tools create or change drafts that appear on no display until someone publishes and assigns them. `create_scene` and `update_scene` still carry `confirm`, because they write content nobody has seen yet.

| Tool | What it does | Arguments | Permissions |
|---|---|---|---|
| `create_scene_from_template` | Creates a draft from a curated template | `templateId`, `name` | `scene.create` |
| `create_scene` | Creates a draft from your own document, after a dry run | `name`, `description`, `document`, `confirm` | `scene.create`, `scene.read`, `scene.update` |
| `update_scene` | Replaces the document of a scene as a whole, after a dry run | `sceneId`, `expectedVersion`, `document`, `confirm` | `scene.read`, `scene.update` |
| `render_scene` | Renders a published version as a PNG image | `sceneId`, `versionId`, `width` | `scene.read`, `scene.update` |
| `create_playlist` | Creates a playlist from scenes and media | `name`, `description`, `items`, `defaultItemDurationMs` | `playlist.create` |
| `add_to_playlist` | Adds scenes or media to a playlist, at the end or first. App contents already in the sequence stay | `playlistId`, `items`, `position` | `playlist.read`, `playlist.update` |

## Write

Each of these tools first answers with a preview and changes something only on a second call with `confirm: true`.

| Tool | What it does | Arguments | Permissions |
|---|---|---|---|
| `publish_scene` | Publishes a scene, assigned displays fetch the new version | `sceneId`, `releaseNotes`, `confirm` | `scene.publish`, `scene.read` |
| `set_player_program` | Assigns a program, scene, playlist, or media item to a display, or removes the assignment | `playerId`, `program`, `confirm` | `fleet.player.read`, `schedule.update` |
| `set_display_group_program` | Assigns content to a video wall and with it to all of its displays | `displayGroupId`, `program`, `confirm` | `fleet.player.list`, `schedule.update` |
| `set_player_override` | Shows other content on a display until a set time | `playerId`, `content`, `until`, `confirm` | `fleet.player.read`, `schedule.update` |
| `clear_player_override` | Ends an override, the display returns to its program | `playerId`, `confirm` | `fleet.player.read`, `schedule.update` |
| `send_player_command` | Sends `reboot`, `refresh-snapshot`, `identify`, or `screenshot` to a device | `playerId`, `command`, `confirm` | `fleet.player.command.issue`, `fleet.player.read` |
| `assign_player_location` | Assigns a display to a location or removes the assignment | `playerId`, `locationId`, `confirm` | `fleet.player.read`, `fleet.player.update`, `location.list` |
| `create_location` | Creates a location | `name`, `timeZone`, `address`, `coordinates`, `note`, `confirm` | `location.create` |
| `set_location_opening_hours` | Sets the weekly plan, special days, and federal state of a location | `locationId`, `openingHours`, `region`, `confirm` | `location.read`, `location.update` |
| `create_web_display` | Creates a display that runs in a browser and returns its connection address | `name`, `locationId`, `program`, `confirm` | `fleet.web-display.manage`, `schedule.update` |
| `issue_web_display_link` | Issues a new connection address for a web display | `displayId`, `confirm` | `fleet.player.read`, `fleet.web-display.manage` |
| `delete_web_display` | Deletes a web display and frees its booked seat, a display with a device is rejected | `displayId`, `confirm` | `fleet.player.read`, `fleet.web-display.manage` |

## A display that shows something

`create_web_display` is how an assistant can show anything at all without someone connecting hardware first. It answers with the identifier of the display and a connection address. Opening that address in a browser on the target device is the one step no assistant can do, so the assistant passes it on to you.

Until then, the display is in the fleet as "Not connected" (`"status": "not_connected"`), with its name, its location, and, if wanted, its program. It occupies a booked seat from the start. If all seats are taken, the tool answers `no_seat_available`. `issue_web_display_link` gives the same display a new address if its browser has lost its storage.

## Cleaning up

The questions about what is lying around are filters on the lists that exist anyway: `list_assets` with `usage`, `list_scenes` with `assignment`, and `list_players` with `program` or `offlineSince`. `get_hygiene` counts them and names for each number the tool that shows the rows.

## Related

- [What can an AI assistant do with Szenera?](/mcp/about-mcp)
- [Permissions and consent](/mcp/permissions)
- [Build a scene with an assistant](/mcp/build-scene)
