uc-remote-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| logging | {} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| extensions | {
"io.modelcontextprotocol/ui": {}
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| setup_remoteB | First-run setup. Authenticate with admin PIN, create a long-lived API key, and save config. Only needed once per remote. |
| discover_remotesA | Scan the LAN via mDNS for UC remotes. Returns a list of {name, host, port, model, fw, id}. |
| get_remote_infoA | Return model, firmware, battery level/status, and currently active activities. Uses the first configured remote if host is not specified. |
| list_devicesA | List all configured devices (entities). Each physical device may appear as several entities (e.g. a TV has both a media_player and a remote entity). Optionally filter by entity_type (media_player, remote, light, switch, sensor). Returns {id, name, type, integration, device_class, state} per entity. |
| get_deviceB | Full config for one device (entity): features, available commands, current attributes, and options. |
| list_device_commandsA | Commands a device exposes, for picking when mapping buttons. Returns {features, simple_commands}. |
| list_activitiesC | List all activities with id, name, state, description, and included entities. |
| get_activityC | Full activity config: included entities, on/off power sequences, button overrides, and the list of UI pages. |
| get_button_mappingA | Physical-button -> command bindings. scope is 'activity' (needs scope_id=activity_id), 'remote' (needs scope_id=remote entity_id), or 'device' (needs scope_id=target entity_id; returns every binding across all activities and remotes that targets that device). |
| list_ui_pagesA | List UI pages for a scope: 'activity' or 'remote'. scope_id is that entity's id. Returns page ids, names, grids, and item counts. |
| get_ui_pageA | Items on one UI page: grid size and each item's position, type, and command. Identify the page by its parent scope ('activity'/'remote'), the scope's entity_id, and the page_id (from list_ui_pages). |
| backup_configA | Dump the entire remote configuration (system, entities, activities, remote-entities, UI pages — full detail) to one JSON file. Defaults to %APPDATA%/uc-remote-mcp/backups/.json, keeping the last 50. |
| send_commandA | Fire a one-off command at a device (entity). Transient (does not change saved config) but affects the device, so defaults to dry_run=True. Set dry_run=false to actually send. Body: PUT /entities/{id}/command {cmd_id, params?}. |
| set_button_mappingA | Set one physical-button -> command binding on an 'activity' or 'remote'. entity_id is REQUIRED for activities (the command target) and ignored for remotes. Defaults to dry_run=True (shows before/after); auto-backs-up before any real write. Set dry_run=false to apply. |
| bulk_set_button_mappingA | Set the same button binding across many activities at once (e.g. route VOLUME_UP on every activity to the AVR). Filter with activity_ids and/or name_contains; no filter = all activities. Invalid activities are skipped with a reason. One backup before the batch. Defaults to dry_run=True (returns the full per-activity plan); set dry_run=false to apply. |
| update_ui_pageA | Update a UI page's name, grid, and/or items on an 'activity' or 'remote'. Omitted fields stay unchanged; an EMPTY items list clears the page. Item commands are validated against the scope before writing. Defaults to dry_run=True; auto-backup before any real write. |
| delete_ui_pageA | Delete a UI page from an 'activity' or 'remote'. IRREVOCABLE on the device — the auto-backup taken before the write is the only way back. Dry-run (default) shows the full page content that would be lost. |
| set_default_ui_pageA | Make a page the first/default page of an 'activity' or 'remote' UI (the page shown when it opens). Implemented as a page reorder — the API has no explicit default-page property. Defaults to dry_run=True. |
| update_activity_sequenceA | Replace an activity's on and/or off power sequence. Steps are {"type":"command","command":{"entity_id","cmd_id","params"?}} or {"type":"delay","delay":}. Omitted sequence = unchanged; empty list clears it. Command steps are validated against the activity's included entities. Defaults to dry_run=True; auto-backup before any real write. |
| diff_configA | Show what changed between the current live config and a backup file (read-only). Reports the operations a restore would perform plus differences that cannot be restored. |
| restore_configA | Restore activities/remotes customization (names, button mappings, UI pages, sequences) from a backup file. First call returns a confirmation_token + full plan without writing; call again with the token and dry_run=false to apply. Auto-backup of the current state is taken before applying. |
| list_integrationsA | Installed integration drivers and their configured instances. device_state is not a health signal: an instance reports CONNECTED while its entities are stale. Check the entities too. |
| get_integrationB | One integration instance in full, including the entities it has configured. |
| list_integration_entitiesB | Entities an integration offers. only_new re-polls the integration and lists what is not exposed yet, which is required after pairing a new device. |
| configure_integration_entitiesA | Expose entities from an integration so activities and pages can use them. Additive; removes nothing. Setup finishing does not do this for you. |
| set_integration_enabledC | Enable or disable an integration instance. |
| restart_integrationA | Disable and re-enable an integration. The usual fix when devices stop responding but the integration still claims to be connected. |
| install_integrationA | Install a custom driver from a .tar.gz archive on this machine. There is no in-place update: delete the old driver first. Restart the system afterwards or its setup flow will not start. |
| delete_integrationA | Remove a driver, its instance and all its entities. Also strips every button mapping and page item that used them. Read the preview before applying. |
| start_integration_setupA | Begin an integration's setup and return its first screen. Some drivers require a value up front (usually an API key) and answer "400 Setup data not provided for field: X" without it — pass setup_data={"X": "..."}. A 503 means the driver process is not running yet, which is normal right after installing: restart the system first. |
| get_integration_setupB | The current screen of a setup flow. 404 means no flow is in progress. |
| answer_integration_setupB | Answer the current setup screen and return the next. Send every field the screen asks for; a rejected step ends the flow and it must be restarted. |
| cancel_integration_setupA | Abandon an in-progress setup flow, changing nothing. |
| restart_remoteA | Restart the remote's "ui", "core", or "system". Sends no device commands and changes no configuration. "ui" is how configuration changes are made to repaint; "system" is required after installing a driver. |
| list_scope_entitiesC | Entities an activity or macro is currently allowed to use. scope is "activity" or "macro" — both keep their own list, and a command naming an entity outside it is rejected. |
| add_scope_entitiesA | Allow an activity or macro to use more entities. Exposing an entity from an integration is not enough on its own — it must also be added here before a button or page item can use it. Existing entries are preserved. |
| remove_scope_entitiesB | Stop an activity or macro using entities. Every button mapping and page item referencing them is removed too, so read the preview before applying. |
| confirm_integration_setupA | Answer a confirmation screen ("press the button on the device, then continue") and return the next one. Use answer_integration_setup for screens with fields; this is for the ones without. |
| delete_integration_instanceA | Remove one configured instance and its entities, keeping the driver. The teardown for firmware-shipped drivers. Also strips every button mapping and page item that used those entities — read the preview. |
| create_ui_pageA | Add a new page to an activity or remote-entity. scope is "activity" or "remote". grid is {"width": N, "height": M}; items use the same shape as get_ui_page returns. The page is appended last; reorder with set_default_ui_page. Every item command is validated first. |
| create_activityA | Create an activity — a "device" on the remote's home screen. Pass entity_ids to build from scratch, or clone_from to copy an existing activity/macro/remote-entity; not both. icon takes "uc:name" or "custom:file.png". The empty page the remote creates alongside it is removed, and the result says if it joined the default activity group, which can make its tile power devices on and off. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 41 tools
Most tools target a distinct resource+action, and descriptions explicitly disambiguate close pairs like delete_integration vs delete_integration_instance and answer vs confirm_integration_setup. A few entity-listing tools (list_devices, list_integration_entities, list_scope_entities) require careful reading, but their scope qualifiers make selection possible.
All tools use snake_case verb_noun names with consistent verbs (list/get/create/update/delete/set/restart). Pluralization is predictable (list_* plural, get_* singular), and modifiers like bulk_ and diff_ are used consistently.
At 41 tools, the surface is far beyond the typical 3-15 tool sweet spot and falls in the 'too many' range even for a broad remote-control domain. While most tools are individually justified, the count makes selection harder and suggests consolidation opportunities.
The surface covers integration lifecycle, setup flows, devices, activities, UI pages, mappings, and backup/restore, which is broad. However, activities have create/get/partial update but no delete/rename, and backup_config has no companion list_backups tool, leaving some dead ends.