windows98-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| WIN98_MCP_CONFIG | No | Path to a specific broker config file (.win98-mcp/config.json) | |
| WIN98_MCP_GUEST_IP | Yes | The expected IPv4 address of the Windows 98 guest (required for connection) | |
| WIN98_MCP_BIND_HOST | No | Override the host-only listener address | |
| WIN98_MCP_STATE_DIR | No | Override logs/artifacts state directory | |
| WIN98_MCP_GUEST_PORT | No | Override TCP port (default 9898) | |
| WIN98_MCP_HOST_ROOTS | No | Add an allowed host transfer root (repeatable, provide as single path) |
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 |
|---|---|
| qemu_doctorB | Check the local QEMU host, configured binary, managed VM root, accelerator policy, and stable guest-to-host TCP route. |
| qemu_vm_listA | List broker-managed QEMU VMs and their lifecycle state. |
| qemu_vm_selectA | Record the managed QEMU VM selected in this MCP/Admin session's QEMU panel. In-guest MCP control remains the agent's outbound TCP connection. |
| qemu_vm_unselectA | Clear this session's managed QEMU VM selection. |
| qemu_vm_statusB | Read one managed QEMU VM's process, QMP, and guest TCP transport state. |
| qemu_vm_command_previewB | Preview the exact managed QEMU command without changing VM state. |
| qemu_vm_createA | Import a broker-local disk into a new managed qcow2 QEMU VM. disk_path currently belongs to the broker host; remote-media upload is not available yet. |
| qemu_vm_updateA | Update a stopped managed QEMU VM definition, including accelerator policy and any profile component. |
| qemu_vm_startB | Start a managed QEMU VM with QMP and the profile's guest TCP network. |
| qemu_vm_shutdownA | Request graceful guest shutdown, wait 40 seconds, then stop only this QEMU process if needed. |
| qemu_vm_restartA | Gracefully stop then restart a managed QEMU VM. |
| qemu_vm_force_stopA | Immediately stop a managed QEMU VM when graceful shutdown is not possible. |
| qemu_vm_deleteB | Move a managed QEMU VM to recoverable broker trash; only the newest three entries are retained. |
| qemu_vm_trash_listA | List recoverable deleted managed VMs. |
| qemu_vm_restoreC | Restore a managed VM from broker trash. |
| qemu_vm_trash_emptyA | Permanently delete every retained QEMU trash entry. |
| qemu_vm_metricsB | Read managed QEMU process and QMP metrics. |
| qemu_media_pushA | Copy a broker-local .iso image into this VM's managed media directory. source_path is resolved on the broker host; remote media upload is not available yet. |
| qemu_media_listA | List ISO images stored in this managed VM's media directory and report which ISO is configured as mounted. |
| qemu_media_mountA | Mount a managed ISO now when the VM is running and persist it for future starts. |
| qemu_media_ejectA | Eject the managed CD-ROM now when running and persist an empty drive for future starts. |
| qemu_media_deleteA | Delete an unmounted managed ISO. force=true ejects it first when it is mounted. |
| qemu_media_set_bootA | Set persistent QEMU boot order to disk, cdrom, or network. The VM must be stopped. |
| qemu_snapshot_listA | List stopped-VM qcow2 internal snapshots. |
| qemu_snapshot_createA | Create a named qcow2 internal disk snapshot while the VM is stopped. |
| qemu_snapshot_restoreA | Restore a named qcow2 internal disk snapshot while the VM is stopped. |
| qemu_snapshot_deleteA | Delete a named qcow2 internal disk snapshot while the VM is stopped. |
| qemu_screen_captureA | Capture the QEMU framebuffer before the Windows controller has started. |
| qemu_keyboard_keyA | Send a QMP qcode key event before or after guest-agent startup. |
| qemu_keyboard_typeB | Type basic QEMU monitor-compatible text into the active QEMU display. |
| qemu_mouse_moveA | Send absolute QMP mouse coordinates to a running QEMU VM. |
| qemu_mouse_clickA | Move then click through QMP before the Windows controller is available. |
| qemu_qmp_executeC | Run an advanced QMP command against a managed VM's local broker-owned QMP endpoint. |
| qemu_hmp_commandC | Run an advanced HMP command through QMP human-monitor-command. |
| vm_listA | List every named VM known to this broker with its current connection, build, address, capabilities, and lease state. |
| vm_statusA | Inspect guest connection and lease state without acquiring the VM lease. |
| vm_capabilitiesA | Read the connected Windows 98 guest capabilities without acquiring the VM lease. |
| vm_lockA | Explicitly acquire the exclusive VM lease. Most operational tools acquire it automatically. VM remains locked by this session; call vm_unlock when finished. |
| vm_waitA | Wait in the FIFO lease queue for at most ten minutes. Use after VM_BUSY. VM remains locked by this session; call vm_unlock when finished. |
| vm_unlockA | Release this session's VM lease. Normal unlock refuses while terminals or transfers remain open. |
| show_messageA | Display a Windows 98 message dialog titled Windows 98 Remote Control. Acquires the VM lease. VM remains locked by this session; call vm_unlock when finished. |
| screen_captureA | Capture the primary display or a pixel region as native MCP PNG image content. Acquires the VM lease. VM remains locked by this session; call vm_unlock when finished. |
| mouse_moveB | Move the mouse to an exact zero-based physical pixel coordinate. VM remains locked by this session; call vm_unlock when finished. |
| mouse_clickA | Click at the supplied coordinates, or at the current pointer position when omitted. VM remains locked by this session; call vm_unlock when finished. |
| mouse_downA | Hold a mouse button down, optionally moving to coordinates first. Always release it later. VM remains locked by this session; call vm_unlock when finished. |
| mouse_upA | Release a held mouse button, optionally moving to coordinates first. VM remains locked by this session; call vm_unlock when finished. |
| mouse_dragA | Drag between exact pixel coordinates while holding the selected mouse button. VM remains locked by this session; call vm_unlock when finished. |
| mouse_scrollA | Send a mouse-wheel delta at optional coordinates. Requires guest wheel support. VM remains locked by this session; call vm_unlock when finished. |
| mouse_positionA | Read the current mouse pointer position. VM remains locked by this session; call vm_unlock when finished. |
| mouse_release_allA | Release every mouse button tracked as held by this session. VM remains locked by this session; call vm_unlock when finished. |
| keyboard_typeA | Type text with the active Windows 98 keyboard layout; fails rather than substituting unrepresentable characters. VM remains locked by this session; call vm_unlock when finished. |
| keyboard_keyA | Press, hold, or release a named key such as ENTER, CTRL, LEFT, or F1. VM remains locked by this session; call vm_unlock when finished. |
| keyboard_hotkeyA | Press named keys in order and release them in reverse order. VM remains locked by this session; call vm_unlock when finished. |
| keyboard_keycodeB | Send a low-level Win32 virtual-key or scan-code input event. VM remains locked by this session; call vm_unlock when finished. |
| keyboard_release_allA | Release every keyboard key tracked as held by this session. VM remains locked by this session; call vm_unlock when finished. |
| input_batchA | Execute a validated mouse, keyboard, delay, clipboard, and focus sequence in one guest round trip. VM remains locked by this session; call vm_unlock when finished. |
| clipboard_getA | Read text from the Windows 98 clipboard. VM remains locked by this session; call vm_unlock when finished. |
| clipboard_setA | Replace Windows 98 clipboard text. VM remains locked by this session; call vm_unlock when finished. |
| window_listA | List windows with handle, title, class, process, visibility, enabled state, and screen rectangle. VM remains locked by this session; call vm_unlock when finished. |
| window_focusA | Bring a window returned by window_list to the foreground. VM remains locked by this session; call vm_unlock when finished. |
| window_closeA | Request that a selected window close. VM remains locked by this session; call vm_unlock when finished. |
| window_captureA | Capture a selected window as native MCP PNG image content. VM remains locked by this session; call vm_unlock when finished. |
| shell_execA | Run a command to completion with captured ordered stdout+stderr output; error results may include a screenshot. VM remains locked by this session; call vm_unlock when finished. |
| shell_startA | Start an interactive redirected-pipe shell session and return its session ID. VM remains locked by this session; call vm_unlock when finished. |
| shell_readA | Read bounded output after a cursor from an interactive shell, optionally long-polling. VM remains locked by this session; call vm_unlock when finished. |
| shell_writeA | Write UTF-8 text or base64 bytes to an interactive shell and optionally close stdin. VM remains locked by this session; call vm_unlock when finished. |
| shell_terminateA | Terminate a running interactive shell session. VM remains locked by this session; call vm_unlock when finished. |
| shell_closeA | Release broker resources for a completed interactive shell session. VM remains locked by this session; call vm_unlock when finished. |
| process_listA | List Windows 98 processes. VM remains locked by this session; call vm_unlock when finished. |
| process_waitA | Wait for a process to exit for a bounded period. VM remains locked by this session; call vm_unlock when finished. |
| process_killA | Terminate a process and, by default, its discovered child tree. VM remains locked by this session; call vm_unlock when finished. |
| fs_drivesA | List available Windows drive roots for filesystem browsing. VM remains locked by this session; call vm_unlock when finished. |
| fs_statA | Read metadata for a guest filesystem path. VM remains locked by this session; call vm_unlock when finished. |
| fs_listA | List a guest directory, optionally recursively. VM remains locked by this session; call vm_unlock when finished. |
| fs_mkdirB | Create a guest directory. VM remains locked by this session; call vm_unlock when finished. |
| fs_moveA | Move or rename a guest file or directory. VM remains locked by this session; call vm_unlock when finished. |
| fs_deleteA | Delete a guest file or directory. VM remains locked by this session; call vm_unlock when finished. |
| file_pushA | Copy a host file into the guest through a verified temporary-file commit. VM remains locked by this session; call vm_unlock when finished. |
| file_pullA | Copy a guest file to an allowed host path through a verified temporary-file commit. VM remains locked by this session; call vm_unlock when finished. |
| directory_pushA | Merge-copy a host directory into the guest without deleting unrelated guest files. VM remains locked by this session; call vm_unlock when finished. |
| directory_pullA | Merge-copy a guest directory to an allowed host path without deleting unrelated host files. VM remains locked by this session; call vm_unlock when finished. |
| system_infoA | Read detailed guest operating-system, code-page, display, and build information. VM remains locked by this session; call vm_unlock when finished. |
| agent_diagnosticsA | Read the guest crash context and supervisor recovery status without acquiring the VM lease. |
| system_rebootA | Reboot Windows 98. This disconnects the guest and requires configured autostart for recovery. VM remains locked by this session; call vm_unlock when finished. |
| system_shutdownA | Shut down Windows 98. The guest cannot reconnect until the VM is started externally. VM remains locked by this session; call vm_unlock when finished. |
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 85 tools
Several tool pairs have heavily overlapping purposes: qemu_keyboard_type/keyboard_type, qemu_mouse_click/mouse_click, qemu_screen_capture/screen_capture, and vm_list/qemu_vm_list. The QMP vs guest-agent distinction is documented, but with 85 tools an agent can easily select the wrong one, especially when both versions of an action exist for the same nominal target.
The overwhelming majority of tools follow a clear object-prefix + action pattern using snake_case, such as qemu_vm_*, qemu_media_*, shell_*, mouse_*, window_*, and fs_*. A few outliers like show_message, agent_diagnostics, input_batch, and qemu_doctor break the pattern, but naming is generally predictable and category-scoped.
85 tools is far beyond what an agent can cleanly reason about, and the rubric explicitly treats 50+ as an extreme mismatch. The server tries to cover VM lifecycle, media, snapshots, files, processes, shells, input, clipboard, windows, and transfers all in one namespace, resulting in severe tool-surface bloat.
The tool set covers the Windows 98/QEMU domain unusually well: full VM lifecycle with trash/recovery, media and snapshot management, filesystem and process access, interactive shell handling, input and clipboard control, window management, file transfer, and diagnostics. There are no obvious dead ends or critical missing operations for the stated purpose.