Skip to main content
Glama

MCP for Crestron client

Control a Crestron 4-Series AV system from Claude, in natural language. This is the client half of MCP for Crestron: an MCP server that connects Claude (Desktop or Code) to a processor running the MCP for Crestron modules, exposing the system as MCP tools over stdio. It speaks the MCP for Crestron text protocol (see PROTOCOL.md) over TCP, with secure-key + TLS authentication.

MCP for Crestron: controlling a boardroom from Claude in plain English

Talk to your Crestron system in plain English. Watch the full demo (1:19) »

The client is free. Controlling a processor requires that processor to be licensed (or on a free trial). See Licensing. One processor licence is AUD $249 (inc GST); each processor also gets three free 1-week trials. Get a licence at https://solutionav.com.au/crestron-mcp/.

Install

Download mcp-for-crestron.mcpb from https://solutionav.com.au/crestron-mcp/ and open it (or Settings → Extensions → Install). Enter the processor's address and its secure key (shown on the MCP Server Config module's Key output); the port defaults to 50794.

Claude Code / other MCP hosts

No download needed. Run it straight from npm:

claude mcp add crestron \
  --env CRESTRON_HOST=10.0.1.38 \
  --env CRESTRON_KEY=<the processor's secure key> \
  -- npx -y mcp-for-crestron@latest

Using LibreChat or another MCP app, or choosing a model: see OTHER_CLIENTS.md.

Related MCP server: FleetShell

Configuration

Resolved low-to-high: config.json next to the entry, environment variables, then CLI args (<host> [port]).

Env

Meaning

CRESTRON_HOST

processor IP / hostname (required)

CRESTRON_PORT

TCP port (default 50794)

CRESTRON_KEY

secure key (mode 2); enables TLS + authentication

CRESTRON_AUTH

password (mode 1 only)

CRESTRON_TLS

force TLS without a key

CRESTRON_ROOM

optional room to start in; requests that name no room apply to it

Tools

discover_crestron_system, list_crestron_rooms, list_crestron_devices, query_crestron_device, get_crestron_time, get_crestron_processor_info, control_crestron_device, set_crestron_devices, pulse_crestron_device, ramp_crestron_device, cancel_crestron_device, get_room_status, set_crestron_room, schedule_crestron_event, list_crestron_schedules, remove_crestron_schedule, enable_crestron_schedule, save_crestron_preset, list_crestron_presets, recall_crestron_preset, remove_crestron_preset, activate_crestron_license, get_crestron_license_status, start_crestron_trial.

See AGENT_GUIDE.md for how an assistant should use them (timing, scenes, ramps, nudge-not-nag licensing etiquette).

Labels

The assistant only knows your system through the room, category and label set on each channel of the modules. LABEL_GUIDE.md covers what to put in a label: fade times, travel times, scale hints, toggles, and operating rules.

Licensing

The processor must be licensed before it accepts control or query commands. If it isn't, every tool returns guidance that includes the processor's activation code (its MAC). Two ways forward, both in chat:

  • Free trial: start_crestron_trial (no payment; up to 3 × 1 week per processor).

  • Buy: get a key for that MAC at https://solutionav.com.au/crestron-mcp/, paste it in chat, and the assistant calls activate_crestron_license.

The licence is stored on the processor (bound to its MAC), so it persists across reboots and covers every client. A purchased key only works on that one processor, so it's safe to receive in chat.

Develop

npm install
npm run build      # tsc -> dist/
npm start          # node dist/index.js
npm run mcpb       # build the Claude Desktop .mcpb (needs bun)

License

MIT. See LICENSE. (The client is open; the product is the per-processor licence on the box.)

Trademark

Crestron is a registered trademark of Crestron Electronics, Inc.; MCP for Crestron is a product of Solution AV Automation, not affiliated with or endorsed by Crestron.

Available Tools

14 tools
activate_crestron_licenseA

Activate (license) the Crestron processor with a license key the user provides. Use this when a command fails because the processor isn't licensed: the error explains how, and shows the processor's activation code (MAC). Ask the user for the license key issued for that code, then call this with it. Activation is one-time - the key is stored on the processor, so it stays licensed for every client and across reboots. The key is not a secret (it only works on this one processor), so it's fine to receive it in chat.

Inputs: license_key (required).

cancel_crestron_deviceA

Stop/cancel activity on a device: stop a ramp (fade) in progress and leave the level where it is, release a pulse in progress to off, and clear any pending delayed action (a scheduled set or pulse). Does not otherwise change the device's value - a device that is simply on/high from a normal set stays on. Use for "stop the fade", "stop ringing the bell", "cancel that timer". Works on any device type.

Inputs: device_id (required).

control_crestron_deviceA

Set a device's value. Optionally schedule it to run after a delay (delay_ms), e.g. "turn the porch light on in 30 seconds".

Inputs: device_id (required), value (required), delay_ms.

discover_crestron_systemA

Discover the devices and capabilities available in the Crestron system. Returns rooms, categories, and device counts.

Inputs: no named parameters.

get_crestron_license_statusA

Check the processor's license/trial state: whether it's licensed right now, whether that's a time-limited free trial (time_limited), how much trial time remains (remaining_human / remaining_ms), the processor MAC, and a buy_url. Call it to orient at the start of a session and whenever license status is relevant. If it's a trial, mention the remaining time naturally; as it gets low (under ~2 days) gently offer to start another free trial or buy a license. Nudge, don't nag.

Inputs: no named parameters.

get_crestron_timeA

Get the processor's current time as epoch milliseconds (epoch_ms) and ISO 8601 (iso). Use it to correlate the absolute *_at timestamps from query_crestron_device, or whenever you need the system's real time (no need to decode a wired clock).

Inputs: no named parameters.

get_room_statusC

Get the status of every device in a room.

Inputs: room_name (required).

list_crestron_devicesA

List controllable devices, optionally filtered by room and/or category (Lighting, AV, HVAC, Shades).

Inputs: room, category.

list_crestron_roomsA

List all rooms in the building with their device counts.

Inputs: no named parameters.

pulse_crestron_deviceA

Momentarily pulse a DIGITAL device: drive it on for pulse_ms, then back off - a simulated button press. Use for momentary triggers like "press the doorbell", "tap the projector power button", "trigger the gate". Optionally wait delay_ms before the pulse. Digital devices only; analog and serial devices are rejected (use control_crestron_device / ramp_crestron_device).

Inputs: device_id (required), pulse_ms (required), delay_ms.

query_crestron_deviceA

Get the live state of a device: its current value plus whether it is idle, ramping (with target and completes_at), or pulsing (releases_at), and any pending scheduled action (with fires_at). Time fields are epoch milliseconds (matching get_crestron_time); remaining_ms / in_ms tell you directly how long until it finishes/fires, so you can decide how long to wait without polling a clock. One read tells you idle vs in-flight vs scheduled.

Inputs: device_id (required).

ramp_crestron_deviceA

Smoothly ramp (fade) an ANALOG device to a value over a duration. Use for requests like "fade the lounge lights to 50% over 3 seconds". Optionally start the fade after delay_ms ("fade down in 30 seconds, over 2 seconds"). Analog devices only; digital and serial devices don't ramp - use control_crestron_device for those (and for an instant analog set).

Inputs: device_id (required), value (required), duration_ms (required), delay_ms.

set_crestron_devicesA

Apply a scene/macro: set many devices in one call. Each entry can optionally fade (duration_ms, analog only - the device ramps to value instead of snapping) and/or start after a wait (delay_ms). Use for "movie night" (fade lights down over 2s + lower screen + projector on) or staged sequences. Values follow control_crestron_device rules (digital/analog/serial). A plain (no-timing) value may contain colons but not commas.

Inputs: assignments (required).

start_crestron_trialA

Start a free 7-day trial on this processor - no payment, no card, nothing for the user to paste. Use it when the processor is unlicensed, or when a trial has lapsed and the user wants to keep going. Each processor gets up to 3 one-week trials; this reports trials_remaining and the expiry after starting one. When the trials are used up it returns a buy link instead. The underlying AV keeps working regardless; licensing only gates this natural-language layer.

Inputs: no named parameters.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A3.9/5.0

    Scored across 14 tools

    Disambiguation5/5

    Each tool targets a distinct operation: licensing (activate/check/start trial), device control (control/pulse/ramp/cancel), batch control (set), querying (query, get_room_status, list, discover), and system info (get time). No two tools have overlapping purposes; agents can easily distinguish when to use which.

    Naming Consistency4/5

    Most tools follow a verb_crestron_device or verb_crestron_system pattern, with consistent snake_case. The only minor deviation is 'get_room_status' instead of 'get_crestron_room_status', but it's a single outlier and still clear.

    Tool Count5/5

    14 tools are well-scoped for a Crestron control system: licensing (3 tools), device control (5: control, pulse, ramp, cancel, set), information (5: discover, list rooms, list devices, get room status, query device), and utility (1: get time). This covers all core operations without bloat.

    Completeness4/5

    The set covers the full lifecycle: discover, list, query, control (single & batch), ramp, pulse, cancel, and licensing management. Minor gaps like a 'stop all devices' or 'reset device' are absent but not essential for typical agent workflows. Overall highly complete.

    Maintenance

    ActivityMaintained
    ResponsivenessLimited data

    Related MCP Connectors

    Related MCP Servers