AbleSign MCP
The AbleSign MCP server provides 44 MCP tools that expose the AbleSign digital signage API, enabling AI agents to manage screens, screen groups, media, web apps, workspaces, and users without manual REST calls.
Screens: List, register (using a six-character pairing code), get, update, delete. Filter by orientation, online status, or tags. Manage per‑screen playlists: get, replace, add 1–50 media/web‑app items (at start or end), and partially update individual items.
Screen Groups: Create, list, get, update, delete. Manage group playlists: get, replace, add items, update items. View and set group members (up to 100 screens).
Media Folders: List, create, get, rename, delete. Support nested hierarchies via parent folder IDs.
Media Files: List (filter by format, orientation, tags, date, folder), get (including signed download URLs), update metadata, delete. Upload and replace files through a three‑step flow: initiate (obtains a signed PUT URL), client uploads the raw bytes, then complete.
Web Apps: List, create (from a URL or raw HTML), get, update (metadata, URL, schedule, zoom level, tags), delete.
Workspaces: List, create, get, update (set color as #RRGGBB), delete (only non‑default, empty workspaces). List workspace users.
All tools accept structured arguments and return JSON; errors include HTTP status, error code, and message.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@AbleSign MCP list all screens in my workspace"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
AbleSign MCP
A Python Model Context Protocol server for the AbleSign digital signage API.
The purpose of this project is simple: let AI agents operate AbleSign digital signage without making them speak REST by hand. It was fully vibe coded. There is no claim that this is sacred architecture or precious artisanal software. The agents do not care; they just have to do their jobs with it.
It exposes all 44 documented API operations as MCP tools:
screens and screen playlists
screen groups, membership, and group playlists
media folders and media files
AbleSign's initiate/finish upload and replacement flows
web apps
workspaces and workspace users
Requirements
Nix, or Python 3.11+ when installing with
uvan AbleSign API key, created in AbleSign CMS → Account → API Keys
Related MCP server: CustomGPT MCP Server
Install and run
Install the ablesign-mcp binary from the flake:
nix profile install github:MartinLoeper/ablesign-mcp
ABLESIGN_API_KEY=ak_your_key ablesign-mcpYou can also run it directly without installing it:
ABLESIGN_API_KEY=ak_your_key \
nix run github:MartinLoeper/ablesign-mcpTo install or run the current checkout instead, replace
github:MartinLoeper/ablesign-mcp with ..
Using uv for a source checkout:
cp .env.example .env
# Set ABLESIGN_API_KEY in .env, then export it or use your preferred env loader.
uv sync
ABLESIGN_API_KEY=ak_your_key uv run ablesign-mcpThe default transport is stdio. To run a Streamable HTTP server:
ABLESIGN_API_KEY=ak_your_key \
ablesign-mcp --transport streamable-httpClients then connect to http://127.0.0.1:8000/mcp.
MCP client configuration
For a stdio MCP client, use:
{
"mcpServers": {
"ablesign": {
"command": "ablesign-mcp",
"env": {
"ABLESIGN_API_KEY": "ak_your_key",
"ABLESIGN_WORKSPACE_ID": "123"
}
}
}
}ABLESIGN_WORKSPACE_ID is optional. Without it, AbleSign uses the account's
default workspace.
Environment
Variable | Required | Default | Purpose |
| yes | — | Bearer token used for every API request |
| no | account default | Sent as |
| no |
| API base URL |
| no |
| request timeout in seconds |
| no |
|
|
| no |
| HTTP bind host |
| no |
| HTTP bind port |
Media uploads
AbleSign uses a three-step upload flow:
Call
initiate_media_upload(orinitiate_media_replacement).Upload the raw file bytes with HTTP
PUTto the returned signed URL.Call
complete_media_upload(orcomplete_media_replacement) with the returned upload ID.
The MCP server exposes the authenticated AbleSign steps. Uploading bytes to the temporary signed storage URL is intentionally left to the caller so the server does not receive arbitrary local filesystem access.
Development
nix build
nix run . -- --help
uv sync --extra dev
uv run pytest
uv run ruff check .
uv run ruff format --check .The API is currently marked beta by AbleSign. The server returns AbleSign errors with their HTTP status, error code, and message so callers can react to validation and rate-limit failures.
Philosophy and license
This project is released under the MIT License. Do whatever you would like with it. Use it, fork it, break it, fix it, sell it, or rewrite it 1,000 times. I really do not care. My agents do not care either. They just have to do their job with it and make gastronomy great again. lol
Available Tools
44 toolsadd_screen_group_playlist_itemsC
Add 1-50 items to a screen group playlist.
Inputs: items (required), group_id (required), position. Returns: object
add_screen_playlist_itemsB
Add 1-50 media-file or web-app items to a screen playlist.
Inputs: items (required), screen_id (required), position. Returns: object
complete_media_replacementC
Finish a replacement after bytes have been PUT to the signed upload URL.
Inputs: upload_id (required). Returns: object
complete_media_uploadA
Finish an upload after bytes have been PUT to the signed upload URL.
Inputs: upload_id (required). Returns: object
create_folderC
Create a media folder, optionally under a parent.
Inputs: title (required), parent_folder_id. Returns: object
create_screen_groupC
Create a screen group.
Inputs: title (required), description. Returns: object
create_web_appB
Create a web app from either a URL or raw HTML.
Inputs: title (required), url, html, description. Returns: object
create_workspaceB
Create a workspace. Color, when supplied, is a #RRGGBB value.
Inputs: title (required), color, description. Returns: object
delete_folderB
Permanently delete a media folder.
Inputs: folder_id (required). Returns: object
delete_media_fileC
Permanently delete a media file.
Inputs: media_file_id (required). Returns: object
delete_screenB
Permanently delete a screen.
Inputs: screen_id (required). Returns: object
delete_screen_groupC
Permanently delete a screen group.
Inputs: group_id (required). Returns: object
delete_web_appC
Permanently delete a web app.
Inputs: web_app_id (required). Returns: object
delete_workspaceA
Permanently delete a non-default, empty workspace.
Inputs: workspace_id (required). Returns: object
get_folderC
Get a media folder.
Inputs: folder_id (required). Returns: object
get_media_fileA
Get media details and a signed download URL.
Inputs: media_file_id (required). Returns: object
get_screenC
Get complete details for a screen.
Inputs: screen_id (required). Returns: object
get_screen_groupC
Get screen group details.
Inputs: group_id (required). Returns: object
get_screen_group_membersA
List the screens assigned to a screen group.
Inputs: group_id (required). Returns: object
get_screen_group_playlistB
Get a screen group's playlist.
Inputs: group_id (required). Returns: object
get_screen_playlistC
Get a screen's playlist and settings.
Inputs: screen_id (required). Returns: object
get_web_appC
Get web app details.
Inputs: web_app_id (required). Returns: object
get_workspaceC
Get workspace details.
Inputs: workspace_id (required). Returns: object
initiate_media_replacementC
Start replacing a media file and return a signed PUT URL.
Inputs: size (required), filename (required), mime_type (required), media_file_id (required). Returns: object
initiate_media_uploadB
Start AbleSign's three-step upload flow and return its signed PUT URL.
Inputs: size (required), filename (required), mime_type (required), folder_id. Returns: object
list_foldersC
List media folders, optionally within a parent folder.
Inputs: limit, title, offset, sort_by, +1 more. Returns: object
list_media_filesC
List media files. Multi-value format/orientation filters are comma-separated.
Inputs: tags, limit, title, offset, +5 more. Returns: object
list_screen_groupsC
List screen groups in the active workspace.
Inputs: limit, title, offset, sort_by. Returns: object
list_screensC
List screens. Comma-separate orientation, online-status, or tag filters.
Inputs: limit, title, offset, sort_by, +3 more. Returns: object
list_web_appsC
List AbleSign web apps.
Inputs: tags, limit, title, offset, +2 more. Returns: object
list_workspacesA
List all workspaces visible to the API key.
Inputs: no named parameters. Returns: object
list_workspace_usersC
List users assigned to a workspace.
Inputs: workspace_id (required). Returns: object
register_screenC
Register a screen using its six-character device pairing code.
Inputs: title (required), orientation (required), registration_code (required), description. Returns: object
save_screen_group_playlistC
Replace a screen group's entire playlist.
Inputs: group_id (required), playlist (required). Returns: object
save_screen_playlistB
Replace a screen's entire playlist. All desired items must be included.
Inputs: playlist (required), screen_id (required). Returns: object
set_screen_group_membersA
Replace a screen group's membership with up to 100 screen IDs.
Inputs: group_id (required), screen_ids (required). Returns: object
update_folderC
Rename a media folder.
Inputs: title (required), folder_id (required). Returns: object
update_media_fileB
Partially update media metadata, dates, or tags.
Inputs: changes (required), media_file_id (required). Returns: object
update_screenC
Partially update a screen using AbleSign API field names in changes.
Inputs: changes (required), screen_id (required). Returns: object
update_screen_groupC
Partially update a screen group.
Inputs: changes (required), group_id (required). Returns: object
update_screen_group_playlist_itemC
Partially update one screen group playlist item.
Inputs: changes (required), item_id (required), group_id (required). Returns: object
update_screen_playlist_itemC
Partially update one screen playlist item without reordering it.
Inputs: changes (required), item_id (required), screen_id (required). Returns: object
update_web_appB
Partially update a web app's metadata, URL, schedule, zoom, or tags.
Inputs: changes (required), web_app_id (required). Returns: object
update_workspaceC
Partially update a workspace.
Inputs: changes (required), workspace_id (required). Returns: object
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 44 tools
Each tool targets a distinct resource and action. Media upload/replacement have separate initiate and complete steps. Screen playlist operations (save, add, update) are clearly differentiated. No ambiguity between tools.
All tools follow a consistent verb_noun pattern in snake_case (e.g., list_media_files, create_web_app, delete_screen). Verbs like list, create, get, update, delete, initiate, complete, register are used predictably.
44 tools is excessive for a single server, far exceeding the typical well-scoped range of 3-15. Many operations could be consolidated or split into separate servers.
The tool set covers all major entities (media, web apps, screens, screen groups, folders, workspaces) with full CRUD and specialized operations like upload flows and playlist management. Minor gaps exist (e.g., no user management beyond workspace users), but core workflows are well-supported.
Maintenance
Related MCP Connectors
Hosted MCP server for live public-data APIs and Skills for AI agents.
MCP server for your apps' tools and custom tools, plus hosted AI agents and approval-gated workflows
MCP server for AI agents to plan, verify, and deploy Cloudflare-native apps.
Hosted MCP server for AI agents to post to LinkedIn profiles and X and upload to YouTube.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceAn MCP (Multi-Agent Conversation Protocol) Server that enables interaction with the At-Work API (api.at-work.biz), allowing agents to communicate with this service through various transport modes like stdio, SSE, and HTTP.-
- AlicenseNot gradedqualityDmaintenanceA full-featured MCP server providing seamless access to CustomGPT.ai APIs, enabling agent and conversation management through MCP-compatible clients.5MIT
- AlicenseNot gradedqualityDmaintenanceMCP server for interacting with QUADS infrastructure systems via API, enabling resource management and automation through LLM applications.MIT
- AlicenseAqualityDmaintenanceMCP server for multi-agent AI systems providing mailbox messaging, A2A task delegation, resource coordination, and a web dashboard.2114 npm1MIT