ARCL CYD Desktop MCP bridge
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| CYD_MCP_LAYERS | No | Comma-separated capability layers to expose (e.g. 'L0,L1'). If not set, all layers are exposed. | |
| CYD_DESKTOP_PORT | No | Serial port for the CYD device e.g. 'COM6'. If not set, the system auto-detects a CH340 (VID 1a86 / PID 7523). | |
| CYD_DESKTOP_APPS_ROOT | No | Root folder for MCP app deployment. If not set, defaults to 'examples/' in the repository. |
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
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| arcl_statusA | Common (arcl). Control, any layer. Report the machine id, enabled layers, current view and foreground app, and the MicroPython app runtime. time_control is "none": the board runs in real time and has no frame counter, so frame is null. |
| cyd_ui_treeA | Machine-specific (cyd). Observation, L0. Read the detailed currently visible UI tree with ids, roles, labels, bounds, and enabled state. |
| cyd_apps_listA | Machine-specific (cyd). Observation, L1. List the ids of the built-in views and native apps, as a fixed list kept in the firmware. Installed MicroPython apps are listed by cyd_installed_apps_list. |
| cyd_installed_apps_listB | Machine-specific (cyd). Observation, L1. List MicroPython apps installed on the microSD, including Home pin state. |
| cyd_launchA | Machine-specific (cyd). Action, L1. Open a built-in view (clock, calendar, scripts, settings, editor), a native app, or an installed MicroPython app by id. A MicroPython app is queued: success means it will start, not that it has. |
| cyd_activateC | Machine-specific (cyd). Action, L1. Same as cyd_launch. Kept for clients written against the older name. |
| cyd_homeB | Machine-specific (cyd). Action, L1. Return the foreground application to Home. |
| cyd_runB | Machine-specific (cyd). Control, any layer. Pause the cooperative MicroPython app and grant a bounded number of cyd.update() frames. |
| cyd_runtime_statusC | Machine-specific (cyd). Control, any layer. Read cooperative MicroPython runtime pause and frame state. |
| cyd_pauseB | Machine-specific (cyd). Control, any layer. Cooperatively pause the foreground MicroPython app at its next cyd.update(). |
| cyd_resumeB | Machine-specific (cyd). Control, any layer. Resume a cooperatively paused MicroPython app. |
| cyd_stepA | Machine-specific (cyd). Control, any layer. Advance a cooperatively paused MicroPython app by one cyd.update() frame. |
| cyd_tapA | Machine-specific (cyd). Action, L0. Queue a synthetic tap at an absolute 320x240 display coordinate. |
| cyd_input_stateA | Machine-specific (cyd). Observation, L0. Read physical touch state, last coordinate, and queued synthetic tap count. |
| cyd_input_macroC | Machine-specific (cyd). Action, L0. Queue a short sequence of coordinate taps with optional delays between steps. |
| cyd_input_readA | Machine-specific (cyd). Observation, L0. Read the most recent input event, such as tap.home or tap., without clearing it. |
| cyd_input_clearB | Machine-specific (cyd). Action, L0. Read the most recent input event and clear it. |
| cyd_diagnosticsA | Machine-specific (cyd). Observation, L2. Read desktop transport and health diagnostics. fingerprint: 1 starts summing the CRC-32 of everything sent to the LCD (spi_fingerprint, from zero), 0 stops it; two firmware builds that paint identically produce the same change over the same actions. |
| cyd_logsB | Machine-specific (cyd). Observation, L2. Read the retained recent UI, input, and application event log. |
| cyd_screen_mirrorA | Machine-specific (cyd). Observation, L0. Render a lightweight logical 320x240 PNG mirror from the retained UI tree. This is not an LCD pixel readback. |
| cyd_settings_getA | Machine-specific (cyd). Observation, L1. Read brightness, color theme, animation speed, and Bluetooth keyboard layout settings. |
| cyd_settings_setB | Machine-specific (cyd). Action, L1. Persist one or more settings. Omitted settings remain unchanged. keyboard_layout is the key layout of a Bluetooth keyboard. |
| cyd_touch_calibrate_startA | Machine-specific (cyd). Action, L3. Show the first of three touch-calibration crosshairs. Tap each crosshair once to save the corrected mapping. |
| cyd_radio_statusA | Machine-specific (cyd). Observation, L3. Read the radio mode of this boot (off, wifi or bluetooth) and the mode stored for the next boot. Wi-Fi and Bluetooth are exclusive. |
| cyd_radio_setA | Machine-specific (cyd). Action, L3. Store the radio mode (off, wifi or bluetooth) for the next boot. It applies after a restart; restart true restarts the device right after replying, which fails while a foreground app is running. |
| cyd_key_pressA | Machine-specific (cyd). Action, L0. Press one key as a hardware keyboard would: the editor edits with it and a running app reads it with cyd.key(). Names: a character ("a", "A"), ENTER, BACKSPACE, DELETE, TAB, ESC, UP, DOWN, LEFT, RIGHT, HOME, END, PAGEUP, PAGEDOWN, INSERT, F1-F12, with CTRL+, ALT+ or SHIFT+ in front (CTRL+S). CTRL+C interrupts a running app. |
| cyd_type_textA | Machine-specific (cyd). Action, L0. Type text as hardware keyboard presses, one key per character; a newline is ENTER. Printable ASCII only. |
| cyd_bt_statusA | Machine-specific (cyd). Observation, L3. Read the Bluetooth keyboard state: connected and remembered keyboard, pairing progress with the PIN or passkey to type, and the results of the last scan. Bluetooth runs only in radio mode bluetooth. |
| cyd_bt_scanA | Machine-specific (cyd). Action, L3. Search for Bluetooth Classic keyboards in pairing mode for the given seconds. Poll cyd_bt_status for results. |
| cyd_bt_connectA | Machine-specific (cyd). Action, L3. Pair with a keyboard from the last scan by index. The screen shows a PIN or passkey (also in cyd_bt_status) that the user types on the keyboard, then Enter. Pairing a keyboard forgets the previous one. |
| cyd_bt_forgetB | Machine-specific (cyd). Action, L3. Disconnect and forget the remembered Bluetooth keyboard. |
| cyd_sd_statusA | Machine-specific (cyd). Observation, L3. Read whether the optional FAT microSD card was mounted safely at boot. |
| cyd_package_uploadA | Machine-specific (cyd). Action, L1. Atomically upload one file into /sd/apps// after SHA-256 verification. Text by default; pass encoding "base64" for binary assets such as JPEG images. Existing files are kept unless replace is true. Fails while a foreground app is running. |
| cyd_app_deployB | Machine-specific (cyd). Action, L1. Install or update a whole app directory - manifest.json, the entry file and every asset, binary included - after checking the manifest. app_dir is resolved inside CYD_DESKTOP_APPS_ROOT, which defaults to the repository's examples directory. Returns to Home first, because the device refuses uploads while an app runs. |
| cyd_app_errorA | Machine-specific (cyd). Observation, L2. Read the full traceback of the most recent MicroPython app failure. The event log keeps only a 48-character summary. |
| cyd_script_launchC | Machine-specific (cyd). Action, L1. Launch /sd/apps//main.py as the single foreground MicroPython app. |
| cyd_app_deleteB | Machine-specific (cyd). Action, L1. Permanently delete one installed MicroPython app and any Home shortcut that targets it. |
| cyd_shortcuts_listA | Machine-specific (cyd). Observation, L1. List the microSD-backed Home shortcuts currently loaded by the desktop. |
| cyd_shortcut_createA | Machine-specific (cyd). Action, L1. Create a new microSD-backed Home shortcut. Home shows two shortcuts on its first page and eight on each further page, 18 in all. |
| cyd_shortcut_updateC | Machine-specific (cyd). Action, L1. Update an existing microSD-backed Home shortcut. |
| cyd_shortcut_deleteC | Machine-specific (cyd). Action, L1. Delete a microSD-backed Home shortcut. |
| cyd_time_setB | Machine-specific (cyd). Action, L1. Synchronize the CYD clock from a Unix epoch. |
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 42 tools
Most tools map to a distinct subsystem and action, and descriptions clearly separate closely related groups like app listing versus installed MicroPython apps. The main ambiguity is an explicit alias (cyd_launch/cyd_activate) and a few read-versus-clear or launch-versus-script variants, but descriptions mostly prevent misselection.
Names largely follow a consistent cyd_<subsystem>_<action> pattern with snake_case throughout. Minor deviations such as noun-only names (cyd_logs, cyd_diagnostics) and the common arcl_status tool keep it from being perfectly uniform.
42 tools is well above the comfortable MCP tool count and will be heavy for an agent to navigate. Many fine-grained operations could be consolidated into parameterized tools, and the launch/activate alias inflates the count further.
The surface covers core device control well: UI observation, input synthesis, app lifecycle, settings, Bluetooth, radio, and shortcuts. Minor gaps like an explicit app-stop or standalone reboot tool and generic SD file browsing prevent a perfect score.