API Reference
CastHub MCP Tool Reference
Approximately 58 tools across 10 domains. Every operation your AI assistant can perform on your signage network.
CastHub MCP implements the Model Context Protocol to give AI assistants structured, governed access to your digital signage infrastructure.
Every tool below is annotated in the production MCP server with one of three hints: ReadOnly, Destructive, or Idempotent. AI assistants use these hints to decide when to ask for your confirmation. Read tools run freely. Write tools surface a preview and request confirmation. Destructive tools require explicit confirmation. The Level labels on individual tools below summarize the confirmation pattern your AI client will follow.
Dashboard & User Live
Account overview and identity tools. Retrieve screen counts, device status, user profile, and quick identity checks.
get_dashboard
Returns a dashboard summary including screen count, active presentations, and device status overview.
| Parameter | Type | Required |
|---|---|---|
| No parameters | ||
Example request & response
{ "tool": "get_dashboard" }{
"screenCount": 24,
"activePresentations": 12,
"devicesOnline": 22,
"devicesOffline": 2
}get_user_info
Returns the current user profile and account details including role and plan information.
| Parameter | Type | Required |
|---|---|---|
| No parameters | ||
Example request & response
{ "tool": "get_user_info" }{
"email": "admin@school.org",
"role": "admin",
"plan": "enterprise",
"screensAllowed": "unlimited"
}who_am_i
Quick identity check returning the current user name and email address.
| Parameter | Type | Required |
|---|---|---|
| No parameters | ||
Example request & response
{ "tool": "who_am_i" }{
"name": "Sarah Chen",
"email": "sarah@company.com"
}Presentations Live
Create, update, delete, and assign presentations to device groups. The core content management tools for your signage network.
get_presentations
List all presentations in the account with pagination support.
| Parameter | Type | Required |
|---|---|---|
| page | int | Optional |
| limit | int | Optional |
Example request & response
{
"tool": "get_presentations",
"params": { "page": 1, "limit": 10 }
}[
{
"id": "pres_abc123",
"name": "Welcome Lobby Display",
"slidesCount": 5,
"status": "active"
},
{
"id": "pres_def456",
"name": "Cafeteria Menu Board",
"slidesCount": 3,
"status": "active"
}
]get_presentation
Retrieve full details for a single presentation including all slide data.
| Parameter | Type | Required |
|---|---|---|
| presentationId | string | Required |
Example request & response
{
"tool": "get_presentation",
"params": { "presentationId": "pres_abc123" }
}{
"id": "pres_abc123",
"name": "Welcome Lobby Display",
"slidesCount": 5,
"status": "active",
"slides": [ /* ... full slide data ... */ ],
"createdAt": "2025-11-01T09:00:00Z"
}create_presentation
Create a new presentation with an optional initial set of slides.
| Parameter | Type | Required |
|---|---|---|
| name | string | Required |
| slides | array | Optional |
Example request & response
{
"tool": "create_presentation",
"params": {
"name": "Holiday Hours Notice",
"slides": [
{ "type": "text", "content": "Closed Dec 25-26" }
]
}
}{
"id": "pres_ghi789",
"name": "Holiday Hours Notice",
"slidesCount": 1,
"status": "draft"
}update_presentation
Update an existing presentation's name or slides.
| Parameter | Type | Required |
|---|---|---|
| presentationId | string | Required |
| name | string | Optional |
| slides | array | Optional |
Example request & response
{
"tool": "update_presentation",
"params": {
"presentationId": "pres_abc123",
"name": "Updated Lobby Display"
}
}{
"id": "pres_abc123",
"name": "Updated Lobby Display",
"status": "active"
}delete_presentation
Permanently delete a presentation from the account.
| Parameter | Type | Required |
|---|---|---|
| presentationId | string | Required |
Example request & response
{
"tool": "delete_presentation",
"params": { "presentationId": "pres_abc123" }
}{ "success": true }assign_presentation
Level 2Assign a presentation to a specific device group. Governance Level 2 — requires confirmation before execution.
| Parameter | Type | Required |
|---|---|---|
| presentationId | string | Required |
| groupId | string | Required |
Example request & response
{
"tool": "assign_presentation",
"params": {
"presentationId": "pres_abc123",
"groupId": "grp_lobby"
}
}{
"success": true,
"affectedDevices": 6
}assign_presentation_to_default
Level 3Assign a presentation to the default group, affecting all screens across the network. Governance Level 3 — high-impact action requiring explicit approval.
| Parameter | Type | Required |
|---|---|---|
| presentationId | string | Required |
Example request & response
{
"tool": "assign_presentation_to_default",
"params": { "presentationId": "pres_abc123" }
}{
"success": true,
"affectedDevices": 24
}Slide Media Live
Upload, register, and acknowledge image and video assets used as slides in presentations. The upload flow follows a register, upload to storage, acknowledge pattern to support large media without timeouts.
register_slide_image_upload
Level 2Register an intent to upload an image slide. Returns a signed upload URL and a slide identifier. Step 1 of the image upload flow.
acknowledge_slide_image_upload
Level 2Confirm that an image upload completed successfully. CastHub finalizes the slide and attaches it to its parent presentation. Step 3 of the image upload flow.
register_slide_video_upload
Level 2Register an intent to upload a video slide. Returns a signed upload URL and a slide identifier. Step 1 of the video upload flow.
acknowledge_slide_video_upload
Level 2Confirm that a video upload completed successfully. CastHub finalizes the slide and attaches it to its parent presentation. Step 3 of the video upload flow.
Devices Live
List, update, delete, and move devices between groups. Monitor your fleet of signage players.
get_devices
List all devices, optionally filtered by group or status.
| Parameter | Type | Required |
|---|---|---|
| groupId | string | Optional |
| status | string | Optional |
Example request & response
{
"tool": "get_devices",
"params": { "status": "online" }
}[
{
"id": "dev_001",
"name": "Lobby Screen Left",
"status": "online",
"groupId": "grp_lobby"
}
]update_device
Update a device name or configuration.
| Parameter | Type | Required |
|---|---|---|
| deviceId | string | Required |
| name | string | Optional |
Example request & response
{
"tool": "update_device",
"params": { "deviceId": "dev_001", "name": "Main Entrance Screen" }
}{
"id": "dev_001",
"name": "Main Entrance Screen",
"status": "online"
}delete_device
Level 2Remove a device from the account. Governance Level 2 — requires confirmation.
| Parameter | Type | Required |
|---|---|---|
| deviceId | string | Required |
Example request & response
{
"tool": "delete_device",
"params": { "deviceId": "dev_001" }
}{ "success": true }change_device_group
Move a device from its current group to a different group.
| Parameter | Type | Required |
|---|---|---|
| deviceId | string | Required |
| groupId | string | Required |
Example request & response
{
"tool": "change_device_group",
"params": { "deviceId": "dev_001", "groupId": "grp_cafeteria" }
}{
"success": true,
"previousGroup": "grp_lobby",
"newGroup": "grp_cafeteria"
}Device Groups Live
Create and manage logical groupings of devices. Groups are the primary unit for content targeting, scheduling, and alerts.
create_device_group
Create a new device group with a name and optional description.
| Parameter | Type | Required |
|---|---|---|
| name | string | Required |
| description | string | Optional |
Example request & response
{
"tool": "create_device_group",
"params": {
"name": "Building B - Hallways",
"description": "All hallway screens in Building B"
}
}{
"id": "grp_bldgb_hall",
"name": "Building B - Hallways",
"deviceCount": 0
}update_device_group
Update a group's name or description.
| Parameter | Type | Required |
|---|---|---|
| groupId | string | Required |
| name | string | Optional |
| description | string | Optional |
Example request & response
{
"tool": "update_device_group",
"params": { "groupId": "grp_lobby", "name": "Main Lobby" }
}{
"id": "grp_lobby",
"name": "Main Lobby",
"deviceCount": 6
}delete_device_group
Level 2Delete a device group. Devices in the group will be moved to the default group. Governance Level 2.
| Parameter | Type | Required |
|---|---|---|
| groupId | string | Required |
Example request & response
{
"tool": "delete_device_group",
"params": { "groupId": "grp_bldgb_hall" }
}{ "success": true, "devicesReassigned": 4 }Schedules Live
Manage linear and weekly schedules that automate when presentations play on device groups.
get_schedules
List all schedules, optionally filtered by group.
| Parameter | Type | Required |
|---|---|---|
| groupId | string | Optional |
Example request & response
{
"tool": "get_schedules",
"params": { "groupId": "grp_lobby" }
}[
{
"id": "sched_001",
"type": "weekly",
"name": "Weekday Rotation",
"groupId": "grp_lobby"
}
]get_linear_schedule
Get details for a linear (sequential) schedule.
| Parameter | Type | Required |
|---|---|---|
| scheduleId | string | Required |
Example request & response
{
"tool": "get_linear_schedule",
"params": { "scheduleId": "sched_002" }
}{
"id": "sched_002",
"type": "linear",
"name": "Morning Announcements",
"entries": [
{ "presentationId": "pres_abc123", "startTime": "08:00", "endTime": "12:00" }
]
}get_weekly_schedule
Get details for a weekly schedule with day-by-day configuration.
| Parameter | Type | Required |
|---|---|---|
| scheduleId | string | Required |
Example request & response
{
"tool": "get_weekly_schedule",
"params": { "scheduleId": "sched_001" }
}{
"id": "sched_001",
"type": "weekly",
"name": "Weekday Rotation",
"days": {
"monday": [{ "presentationId": "pres_abc123", "time": "09:00" }],
"friday": [{ "presentationId": "pres_def456", "time": "09:00" }]
}
}assign_schedule
Level 2Assign a schedule to a device group. Governance Level 2.
| Parameter | Type | Required |
|---|---|---|
| scheduleId | string | Required |
| groupId | string | Required |
Example request & response
{
"tool": "assign_schedule",
"params": { "scheduleId": "sched_001", "groupId": "grp_lobby" }
}{ "success": true, "affectedDevices": 6 }remove_schedule
Unassign a schedule from a device group without deleting it.
| Parameter | Type | Required |
|---|---|---|
| scheduleId | string | Required |
| groupId | string | Required |
Example request & response
{
"tool": "remove_schedule",
"params": { "scheduleId": "sched_001", "groupId": "grp_lobby" }
}{ "success": true }delete_schedule
Level 2Permanently delete a schedule. Governance Level 2.
| Parameter | Type | Required |
|---|---|---|
| scheduleId | string | Required |
Example request & response
{
"tool": "delete_schedule",
"params": { "scheduleId": "sched_002" }
}{ "success": true }Alerts Live
Emergency alerts, text alerts, and alert presentation management. Trigger visual or text-based alerts across all screens or targeted groups.
start_all_alerts
Level 4Trigger an alert on all screens across the entire network. Governance Level 4 — critical action requiring multi-step approval.
| Parameter | Type | Required |
|---|---|---|
| No parameters | ||
Example request & response
{ "tool": "start_all_alerts" }{
"success": true,
"screensAffected": 24,
"alertId": "alert_emergency_001"
}stop_all_alerts
Level 3Stop all currently active alerts across the network. Governance Level 3.
| Parameter | Type | Required |
|---|---|---|
| No parameters | ||
Example request & response
{ "tool": "stop_all_alerts" }{ "success": true, "alertsStopped": 1 }start_group_alert
Level 2Trigger an alert on a specific device group. Governance Level 2.
| Parameter | Type | Required |
|---|---|---|
| groupId | string | Required |
Example request & response
{
"tool": "start_group_alert",
"params": { "groupId": "grp_lobby" }
}{ "success": true, "screensAffected": 6 }stop_group_alert
Stop an active alert on a specific device group.
| Parameter | Type | Required |
|---|---|---|
| groupId | string | Required |
Example request & response
{
"tool": "stop_group_alert",
"params": { "groupId": "grp_lobby" }
}{ "success": true }start_text_alert
Level 4Send a text-based alert message to all screens across the network. Governance Level 4.
| Parameter | Type | Required |
|---|---|---|
| message | string | Required |
| duration | int | Optional |
Example request & response
{
"tool": "start_text_alert",
"params": {
"message": "Fire drill in progress. Please evacuate.",
"duration": 300
}
}{
"success": true,
"screensAffected": 24,
"expiresIn": 300
}start_text_alert_for_group
Level 2Send a text-based alert to a specific device group. Governance Level 2.
| Parameter | Type | Required |
|---|---|---|
| groupId | string | Required |
| message | string | Required |
| duration | int | Optional |
Example request & response
{
"tool": "start_text_alert_for_group",
"params": {
"groupId": "grp_cafeteria",
"message": "Kitchen closed for maintenance",
"duration": 600
}
}{ "success": true, "screensAffected": 3 }assign_alert_presentation
Level 2Set which presentation displays when an alert is triggered. Governance Level 2.
| Parameter | Type | Required |
|---|---|---|
| presentationId | string | Required |
Example request & response
{
"tool": "assign_alert_presentation",
"params": { "presentationId": "pres_emergency" }
}{ "success": true }assign_alert_presentation_to_default
Level 3Set the default alert presentation for all groups. Governance Level 3.
| Parameter | Type | Required |
|---|---|---|
| presentationId | string | Required |
Example request & response
{
"tool": "assign_alert_presentation_to_default",
"params": { "presentationId": "pres_emergency" }
}{ "success": true, "groupsAffected": 5 }remove_alert_presentation
Remove the currently assigned alert presentation, reverting to no alert content.
| Parameter | Type | Required |
|---|---|---|
| presentationId | string | Required |
Example request & response
{
"tool": "remove_alert_presentation",
"params": { "presentationId": "pres_emergency" }
}{ "success": true }Device Commands, Amazon Signage Stick Live
AmazonLow-level hardware operations for Amazon Signage Stick devices: restart, reset, screen capture, display power, and health diagnostics.
These tools require Amazon Signage Stick hardware. See the Amazon Signage API docs for hardware-level details.
restart_device
Level 2 AmazonRestart an Amazon Signage Stick. Governance Level 2.
| Parameter | Type | Required |
|---|---|---|
| deviceId | string | Required |
Example request & response
{
"tool": "restart_device",
"params": { "deviceId": "dev_001" }
}{ "success": true, "estimatedDowntime": 30 }factory_reset_device
Level 4 AmazonFactory reset an Amazon Signage Stick, erasing all local data. Governance Level 4 — irreversible, requires multi-step approval.
| Parameter | Type | Required |
|---|---|---|
| deviceId | string | Required |
Example request & response
{
"tool": "factory_reset_device",
"params": { "deviceId": "dev_001" }
}{ "success": true, "warning": "Device will require re-provisioning" }get_device_health
AmazonRetrieve hardware health metrics including CPU/GPU temperature, memory usage, storage, and WiFi signal strength.
| Parameter | Type | Required |
|---|---|---|
| deviceId | string | Required |
Example request & response
{
"tool": "get_device_health",
"params": { "deviceId": "dev_001" }
}{
"cpuTemp": 52.3,
"gpuTemp": 48.1,
"memoryUsedMB": 412,
"memoryTotalMB": 2048,
"storageUsedGB": 3.2,
"storageTotalGB": 8,
"wifiSignalDbm": -42
}capture_screen
AmazonCapture a screenshot of what the device is currently displaying. Returns a temporary image URL.
| Parameter | Type | Required |
|---|---|---|
| deviceId | string | Required |
Example request & response
{
"tool": "capture_screen",
"params": { "deviceId": "dev_001" }
}{
"imageUrl": "https://cdn.cast-hub.com/captures/dev_001_1706..png",
"capturedAt": "2025-12-01T14:30:00Z"
}display_on
Level 2 / 3 AmazonTurn on the physical display. Governance Level 2 for a single device, Level 3 when targeting all devices in a group.
| Parameter | Type | Required |
|---|---|---|
| deviceId | string | Required (or groupId) |
| groupId | string | Optional (targets all in group) |
Example request & response
{
"tool": "display_on",
"params": { "deviceId": "dev_001" }
}{ "success": true, "displayState": "on" }display_off
Level 2 / 3 AmazonTurn off the physical display. Governance Level 2 for a single device, Level 3 when targeting all devices in a group.
| Parameter | Type | Required |
|---|---|---|
| deviceId | string | Required (or groupId) |
| groupId | string | Optional (targets all in group) |
Example request & response
{
"tool": "display_off",
"params": { "groupId": "grp_lobby" }
}{ "success": true, "devicesAffected": 6, "displayState": "off" }clear_device_cache
Level 2 AmazonClear locally cached content on the Signage Stick to free storage or force a fresh download. Governance Level 2.
| Parameter | Type | Required |
|---|---|---|
| deviceId | string | Required |
Example request & response
{
"tool": "clear_device_cache",
"params": { "deviceId": "dev_001" }
}{ "success": true, "freedMB": 1240 }get_device_info
AmazonRetrieve detailed device information including MAC address, serial number, IP address, and firmware version.
| Parameter | Type | Required |
|---|---|---|
| deviceId | string | Required |
Example request & response
{
"tool": "get_device_info",
"params": { "deviceId": "dev_001" }
}{
"deviceId": "dev_001",
"macAddress": "A4:CF:12:8B:3E:01",
"serialNumber": "G0W1LA07XXXXXXX",
"ipAddress": "192.168.1.42",
"firmwareVersion": "FireOS 7.6.3.2"
}Team Members Live
Invite people, set who is a Manager and who is a Member, and hand the account over, from an AI assistant. These tools need the Enterprise plan. Inviting sends a real email, so the assistant always confirms first.
get_account_members
List everyone on the account, with the account holder marked, plus the seat limit and whether another member can be invited. Read-only, and any member can call it.
| Parameter | Type | Required |
|---|---|---|
| No parameters | ||
Example request
{ "tool": "get_account_members" }invite_account_member
Invite a person onto the account. This sends a real email with a generated password and creates their login, so the assistant confirms with you first. Account holder only, Enterprise only, and within the seat limit.
| Parameter | Type | Required |
|---|---|---|
| string | Required | |
| firstName | string | Optional |
| lastName | string | Optional |
| role | string: Manager or Member | Optional |
Example request
{
"tool": "invite_account_member",
"params": { "email": "sam@example.com", "role": "Member" }
}resend_account_member_invite
Level 2Issue an invited member a new password and email it again, for an invite that never arrived. Requires confirmation: their current password stops working at once.
| Parameter | Type | Required |
|---|---|---|
| userId | integer | Required |
Example request
{
"tool": "resend_account_member_invite",
"params": { "userId": 42 }
}remove_account_member
Level 2Permanently delete an invited member's login. Requires confirmation and cannot be undone. Content belongs to the account, so nothing the member created is lost.
| Parameter | Type | Required |
|---|---|---|
| userId | integer | Required |
Example request
{
"tool": "remove_account_member",
"params": { "userId": 42 }
}set_account_member_role
Level 2Promote a member to Manager, who sees and changes everything, or demote a Manager to Member, who sees only the spaces they belong to. Requires confirmation when demoting.
| Parameter | Type | Required |
|---|---|---|
| userId | integer | Required |
| role | string: Manager or Member | Required |
Example request
{
"tool": "set_account_member_role",
"params": { "userId": 42, "role": "Manager" }
}transfer_account_holder
Level 2Hand the account, billing included, to another member. Requires confirmation: the caller stops being the account holder and cannot transfer it back on their own.
| Parameter | Type | Required |
|---|---|---|
| userId | integer | Required |
Example request
{
"tool": "transfer_account_holder",
"params": { "userId": 42 }
}Spaces Live
Split one account into spaces, one per store, site or team, and decide who reaches each. A Member sees only the spaces they belong to. These tools need the Enterprise plan.
get_spaces
List the spaces you can reach, who is in each one and how much content each holds. Everyone reaches the shared space. Read-only.
| Parameter | Type | Required |
|---|---|---|
| No parameters | ||
Example request
{ "tool": "get_spaces" }create_space
Create a restricted space that only its members reach, for example one per store or site. Manager only, Enterprise only.
| Parameter | Type | Required |
|---|---|---|
| title | string | Required |
Example request
{
"tool": "create_space",
"params": { "title": "Berlin store" }
}rename_space
Rename a space. The shared space can be renamed too. Manager only.
| Parameter | Type | Required |
|---|---|---|
| spaceId | integer | Required |
| title | string | Required |
Example request
{
"tool": "rename_space",
"params": { "spaceId": 7, "title": "Warehouse" }
}delete_space
Level 2Delete an empty space. Requires confirmation, and is refused while the space still holds presentations, device groups or schedules.
| Parameter | Type | Required |
|---|---|---|
| spaceId | integer | Required |
Example request
{
"tool": "delete_space",
"params": { "spaceId": 7 }
}add_member_to_space
Put one member into one space, which gives them everything in it: presentations, device groups and schedules. Manager only.
| Parameter | Type | Required |
|---|---|---|
| userId | integer | Required |
| spaceId | integer | Required |
Example request
{
"tool": "add_member_to_space",
"params": { "userId": 42, "spaceId": 7 }
}remove_member_from_space
Level 2Take one member out of one space, which hides everything in it from them. Requires confirmation; it changes their access, not any content. Nobody can be removed from the shared space.
| Parameter | Type | Required |
|---|---|---|
| userId | integer | Required |
| spaceId | integer | Required |
Example request
{
"tool": "remove_member_from_space",
"params": { "userId": 42, "spaceId": 7 }
}move_content_to_space
Move presentations, device groups and schedules into a space. Everything named moves together, or nothing does. Manager only.
| Parameter | Type | Required |
|---|---|---|
| spaceId | integer | Required |
| presentationIds | integer[] | Optional |
| deviceGroupIds | integer[] | Optional |
| scheduleIds | integer[] | Optional |
Example request
{
"tool": "move_content_to_space",
"params": { "spaceId": 7, "presentationIds": [12, 15], "deviceGroupIds": [3] }
}Ready to get started?
Set up CastHub MCP with your preferred AI assistant in under five minutes, or see how it compares to manual signage management.
Ready to connect?
Set up CastHub MCP with your preferred AI assistant in under five minutes.