The Screenly CLI simplifies interactions with Screenly through your terminal, designed for both manual use and task automation.
Download the latest release here.
$ brew tap screenly/screenly-cli
$ brew install screenly-cli$ nix-shell -p screenly-cliFor other operating systems or Docker usage:
$ docker run --rm \
-e API_TOKEN=YOUR_API_TOKEN \
screenly/cli:latest helpTo build the Screenly CLI from source, ensure you have Rust installed:
$ cargo build --releaseNote
If you're building from source in Ubuntu, make sure to install build-essential:
sudo apt-get install -y build-essentialOtherwise, you'll get the following error:
error: linker `cc` not found
The screenly binary will be located in target/release.
To configure a non-production API server, set the API_SERVER_NAME environment variable:
$ API_SERVER_NAME=local cargo build --releaseExplore available commands here.
The Screenly CLI includes a built-in Model Context Protocol (MCP) server, enabling AI assistants like Claude, Cursor, and others to interact with your Screenly digital signage network.
$ screenly mcpThe server communicates over stdio and exposes the full Screenly API as tools.
| Category | Tools |
|---|---|
| Screens | screen_list, screen_get |
| Assets | asset_list, asset_get, asset_create, asset_update, asset_delete |
| Asset Groups | asset_group_list, asset_group_create, asset_group_update, asset_group_delete |
| Playlists | playlist_list, playlist_create, playlist_update, playlist_delete |
| Playlist Items | playlist_item_list, playlist_item_create, playlist_item_update, playlist_item_delete |
| Labels | label_list, label_create, label_update, label_delete, label_link_screen, label_unlink_screen, label_link_playlist, label_unlink_playlist |
| Shared Playlists | shared_playlist_list, shared_playlist_create, shared_playlist_delete |
| Edge Apps | edge_app_list, edge_app_list_settings, edge_app_list_instances |
Add to your MCP configuration file:
{
"mcpServers": {
"screenly": {
"command": "screenly",
"args": ["mcp"],
"env": {
"API_TOKEN": "your-api-token-here"
}
}
}
}The MCP server uses the same authentication as the CLI:
- Set the
API_TOKENenvironment variable, or - Run
screenly loginto store credentials in~/.screenly
Integrate Screenly CLI into your GitHub workflows:
Required Screenly API token for your team.
Required Command to execute (e.g., screen list).
Optional CLI version override.
uses: screenly/cli@master
with:
screenly_api_token: ${{ secrets.SCREENLY_API_TOKEN }}
cli_commands: screen listGenerate pb_signature.rs from signature.proto:
$ cargo install protobuf-codegen
$ protoc --rust_out . signature.proto
$ mv signature.rs src/pb_signature.rsThis project follows Semantic Versioning (M.m.p = Major.minor.patch).
- Prepare the release:
- Create a release branch (e.g.,
release-M.m.p, likerelease-1.0.6). - Update the version in
Cargo.toml,action.yml, andDockerfile - Run
cargo buildto updateCargo.lockwith the new version (optional but recommended)
- Create and merge the pull request:
- Create a pull request from the release branch to
master - Once approved, merge the pull request
- Create the GitHub release:
- Make sure that you're on the
masterbranch and have pulled the latest changes - Create a version tag (e.g.,
vM.m.p, likev1.0.6) and push it to GitHub by running:git tag vM.m.p git push origin vM.m.p
- The release workflow will detect the version tag and create the release automatically
- Add the release notes to the GitHub release description
- Update Homebrew:
- Update the Homebrew repo with the latest version