wasabi
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.
Drives a real Amiga (or an emulator) through Wasabi. Look before acting: amiga_screenshot or amiga_ui_list first. Keys go to the active window.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| amiga_infoA | Describe the Amiga: Kickstart and Workbench versions, CPU, free chip and fast memory, every mounted volume with its size and free space, and the daemon's version and the commands it supports (the 'can:' line). Call it first to learn which machine you are on and which volume names exist. Read-only. For temperatures, CPU load and the last crash use amiga_health instead. |
| amiga_runA | Run one AmigaDOS command line (as typed in a Shell) and wait for it to finish. Returns everything it printed, stdout and stderr merged, then a line '[return code N]': 0 ok, 5 warning, 10 error, 20 failure. The command can do anything a Shell can, including delete files. For a program that opens a window and keeps running, start it with 'Run >NIL: Program' so this returns at once, then use amiga_wait for its window. Stuck commands: amiga_slots and amiga_break. Prefer amiga_ls and amiga_read_file for looking at files. |
| amiga_lsA | List the files and subdirectories ('drawers') in one Amiga directory, drawers first then by name. One line per entry: 'd' for a drawer or '-' for a file, the size in bytes ('(dir)' for drawers), the protection bits as List shows them (hsparwed), the date and time, the name. Amiga paths start with a volume or assign and a colon, e.g. 'SYS:', 'Work:Projects', 'RAM:'; '/' is the parent, not the root. With no path it lists the mounted volumes (on Zenix, '/'). Not recursive. Read-only. |
| amiga_read_fileA | Copy one file from the Amiga and return its contents. Text comes back as text (decoded as Latin-1, the Amiga's character set); a file with a zero byte in its first 4 KB is treated as binary and comes back as 'binary file, N bytes, base64:' and the data. Fails if the path does not exist or is a directory (use amiga_ls). Read-only. |
| amiga_write_fileA | Create or replace one file on the Amiga. Give the contents either as 'text' (encoded as Latin-1, line ends become LF) or as 'base64' for binary data; not both. An existing file of that name is replaced. The parent directory must exist. System places (SYS:, C:, S:, LIBS:, DEVS:, L:, ...) are refused so a mistake cannot break the boot. Returns a line with the bytes written. |
| amiga_screenshotA | Capture the front screen as a PNG image, or only one window or a rectangle of it (smaller and faster). Also returns a line with the size. Pixel coordinates in the picture are exactly the ones amiga_mouse, amiga_drag and amiga_input take. Use it to see the screen before clicking; to find buttons by name amiga_ui_list is cheaper, and to check only whether something changed use amiga_region_changed. Read-only. |
| amiga_screensA | List the open Intuition screens, front first: address, size, colour depth, title, and which one is in front. Only screens; for the windows on them use amiga_windows. Read-only. |
| amiga_pointerA | Return where the mouse pointer is on the front screen, as 'x y' in screenshot coordinates. No picture is sent. Read-only. |
| amiga_dragA | Press a mouse button at x1,y1, move through the 'via' points if given, to x2,y2, and release. For drag and drop (icons, files), sliders and scroll bars, resizing, and Amiga menus (right button: hold it over the screen's title bar, drag to the item). The button is always released, even on an error. Coordinates as in amiga_screenshot. For a timed gesture use amiga_input; to pick a menu item by name use amiga_ui_menu. |
| amiga_waitA | Block until something happens on the Amiga, instead of sleeping: a window or task appears (or goes, with gone=true), a file appears, the screen changes, or the screen settles (stops changing). The Amiga watches, so nothing crosses the network meanwhile. Returns a line saying what happened; fails with an error after 'timeout' seconds. Use it after starting a program or clicking something that takes time. Read-only. |
| amiga_region_changedA | Tell whether the screen, a window or a rectangle has changed, without sending a picture: the Amiga works out a checksum. Call once without 'since' (answers 'first look' and a checksum), then later with that checksum as 'since' (answers 'changed' or 'unchanged' and the new checksum). Cheap polling when a screenshot would be too big; to block until a change use amiga_wait with what=change. Read-only. |
| amiga_windowsA | List every screen and the windows on it, front first: title, position, size, the task that owns it, and flags such as [active] and [backdrop]. Use it to find a window's title for the 'window' argument of other tools. For the buttons inside windows use amiga_ui_list. Read-only. |
| amiga_ui_listA | List the gadgets (buttons, text fields, checkboxes, cycle gadgets, sliders, lists and their rows) and the menu items of the windows on the front screen. One line per gadget: kind, label, id, position and size, the current value, and flags like [disabled] or [selected]; menu items as 'Menu/Item' paths with their shortcut. Works for Intuition, GadTools, ReAction and MUI 4/5 windows; custom-drawn content (games, paint programs) does not show up, so use amiga_screenshot there. Use it before amiga_ui_click, amiga_ui_set and amiga_ui_menu to learn the exact names. Read-only. |
| amiga_ui_clickA | Click a gadget found by its label (as amiga_ui_list shows it) with the real mouse, bringing its window to the front first if needed. 'close', 'depth', 'zoom' and 'size' name a window's border gadgets. If several gadgets match, narrow it with window, kind or nth, or use the gadget's id. Returns which gadget was clicked, in which window; fails if none matches. A click can make the program do anything that button does (Quit, Delete, ...). |
| amiga_ui_setA | Fill a text (string) gadget found by its label: click it, clear it, type the text through the Amiga's keymap, and press Return unless no_enter is set. Returns which field was set. Find the field's label or id with amiga_ui_list first. For typing into a Shell or editor use amiga_key_type. |
| amiga_ui_menuA | Choose a menu item by name, e.g. 'Project/Save As' or just 'Quit' if the name is unique, in the active window (or the one named). Works without moving the mouse or opening the menu on screen. The program then does whatever that item does. amiga_ui_list shows the menu paths. |
| amiga_mouseA | Move the pointer to x,y and/or click there with the real mouse: move, click, doubleclick, or press (down) and release (up) a button. Without x,y it acts where the pointer is. Coordinates as in amiga_screenshot. Prefer amiga_ui_click when the target is a named gadget; use this for icons and custom-drawn areas. For a whole drag use amiga_drag. |
| amiga_key_typeA | Type text into the active window through the Amiga's own keymap, as if typed on its keyboard. Make the right window active first (amiga_ui_click or amiga_mouse). For special keys and shortcuts (Return, F1, Amiga+Q) use amiga_key_press; to fill a named text field use amiga_ui_set. |
| amiga_key_pressA | Press keys by name, one after another, into the active window: return, esc, tab, del, backspace, space, f1-f10, up, down, left, right, help, kp0-kp9, kpenter; modifiers joined with '+': ramiga+q, lamiga+m, ctrl+c, shift+f1, alt+x; or a raw key code like 0x45. Each entry is pressed and released. For ordinary text use amiga_key_type. |
| amiga_inputA | Play a sequence of mouse and keyboard events in one request, timed on the Amiga in ticks of 1/50 s, for gestures that must be exact: a fast drag, a key chord, a burst of typing. Steps: 'key ramiga+w', 'type hello', 'move X Y', 'click [X Y]', 'double [X Y]', 'down [X Y]', 'up [X Y]' (add 'right' or 'middle' for that button), 'wait N' (N more ticks). At most 5 s of waits in total. For single actions the separate mouse and key tools are simpler. |
| amiga_rexxA | Run an ARexx program given as text and wait for it to end. Returns what it SAYs, then '[rc N]'. ARexx can call any program's port and run AmigaDOS commands, so it can change anything. Needs RexxMast running. To send one command to one program's port use amiga_arexx. |
| amiga_arexxA | Send one command to a running program's ARexx port and return its RESULT string, or 'rc N (secondary M)' when the program reports an error. What the command does depends on the program (WORKBENCH takes e.g. 'getattr ...', 'window ...'); some commands save, quit or delete. Port names are case sensitive; amiga_arexx_ports lists them. For a whole ARexx script use amiga_rexx. |
| amiga_arexx_portsA | List the public message ports, one name per line. Every program that can be scripted with ARexx shows up here under its port name, for amiga_arexx. Read-only. |
| amiga_slotsA | List the amiga_run commands that are running now: the daemon has four run slots; each line gives the slot number, its state, how many seconds it has run, and the command. Answers 'all run slots are free' when none run. Use it when amiga_run timed out or seems stuck, then amiga_break. For all tasks on the machine use amiga_ps. Read-only. |
| amiga_breakA | Stop a command started by amiga_run, by its slot number from amiga_slots: sends Ctrl-C, and if it has not stopped within three seconds, frees the slot anyway (the program is then left running until it ends, and amiga_slots shows it as stuck). The program loses whatever it had not saved. To stop any other task use amiga_kill. |
| amiga_psA | List the tasks and processes running on the Amiga, like a Unix 'ps': a header line, then one line per task with its address, kind (task or proc), priority, state (run, ready, wait), stack size and free stack, CLI number, and name (with the command it runs). 'pattern' keeps only names matching an AmigaDOS wildcard, e.g. '#?shell#?' (#? is the Amiga's *). The address or name goes to amiga_kill. Read-only. |
| amiga_killA | Stop a task or process by name or by address from amiga_ps. By default it sends Ctrl-C, which well-behaved programs obey and clean up after. force=true removes the task with RemTask: its memory, files and windows are left behind and the system may crash, so use it only when Ctrl-C has failed. Returns what was done. |
| amiga_healthA | Report the machine's health: on a PiStorm/Emu68 the Pi's temperature, voltages, clocks, under-voltage and throttling, the 68k speed and JIT cache use; on every Amiga the free chip and fast memory with the largest blocks, and the last guru meditation (crash) with its code, if one happened since the Amiga booted. Use it when the machine seems slow or after a crash. Read-only. |
| amiga_textA | Zenix only (not AmigaOS): return the text on a Zenix console as lines, so the screen can be read without a picture. On AmigaOS it fails: use amiga_screenshot. Read-only. |
| amiga_wait_textA | Zenix only (not AmigaOS): wait until a line of the console matches a pattern (an extended regular expression), e.g. 'login:'. The Amiga watches, so nothing crosses the network meanwhile. Answers when a line matches; fails after 'timeout' seconds. Read-only. |
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 30 tools
Tools are mostly well separated by resource and action, with descriptions that explicitly cross-reference alternatives such as amiga_ui_click vs amiga_mouse, amiga_key_type vs amiga_key_press, and amiga_drag vs amiga_input. However, the GUI/input and ARexx families contain several adjacent tools that require careful reading to select correctly.
All tool names use a consistent amiga_ snake_case namespace and are grouped predictably by domain, e.g. amiga_ui_*, amiga_key_*, amiga_arexx_*. The only minor deviation is that many read-only discovery tools are noun phrases (amiga_info, amiga_screens, amiga_ps) while action tools are verbs, so it is not a pure verb_noun scheme.
30 tools is a heavy surface for an MCP server, and several could plausibly be consolidated, such as pointer/mouse, region_changed/screenshot, and slots/ps. The domain is genuinely broad, so most tools earn a place, but the count is above the comfortable range.
The surface covers a wide range of Amiga remote-control workflows: filesystem reads/writes, screen and UI automation, input, processes, ARexx, health, and Zenix console access. Minor gaps remain around explicit file lifecycle operations like delete, move, and mkdir, though amiga_run can usually compensate.