# What the MCP server is


> The CLI's operations, exposed as tools an assistant can call, with hints that tell a client which ones are destructive.
`screenly mcp` starts a server on stdio that exposes the Screenly API as a set of tools. An assistant connected to it can list screens, upload content, build playlists, manage labels, and publish an app.

It is part of the [CLI](/docs/developers/cli/), not a separate download. Every current build includes it.

## Behaviour hints

Every tool is annotated with `readOnlyHint`, `destructiveHint`, `idempotentHint`, and `openWorldHint`.

That matters more than it sounds. A client can tell `screen_list` from `playlist_delete` without parsing English, and prompt for confirmation before a destructive call rather than after it. If your client supports confirmations, these are what drive them.

Roughly half the tools are read-only. The rest are split between creating things and modifying or deleting them.

## What it is good at

**Questions about a fleet.** "Which screens in the Frankfurt plant are offline?" is a `screen_list` call and some filtering, answered without anyone writing a query.

**Bulk work through labels.** "Find every screen labeled Warehouse and assign the Safety Rotation playlist" is `label_list` then `label_link_playlist`, which is the shape where an assistant saves real time because the alternative is a lot of clicking.

**Publishing something you just made.** `edge_app_publish_from_html` turns a page an assistant generated into a Screenly app on your screens. See [Publishing HTML as an app](/docs/developers/mcp/guides/publish-html-as-an-app/).

## What it is not

It is not a separate permission system. The server holds no access of its own and does exactly what your token allows, in one workspace. See [Permissions](/docs/developers/mcp/overview/permissions/).