Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
DOSBOX_API_URLNoThe URL of the dosbox-automation API (loopback only)
DOSBOX_API_TOKENNoThe emulator's API token
DOSBOX_TOKEN_FILENoPath to the file containing the emulator's API token

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

CapabilityDetails
tools
{
  "listChanged": false
}

Tools

Functions exposed to the LLM to take actions

NameDescription
dosbox_statusA

Machine state: what program is running, mount status, version. One call answers 'what is the machine doing right now'. While a mount waits on an archive, status.archive says what the archive helper does (activity identifying or materializing, archive, bytes_done, bytes_total); the field is absent otherwise.

dosbox_shutdownA

Shut down the emulator. Irreversible.

session_infoA

Connection details for driving the REST API directly: base URL, token location, and a curl example that reads the token from its file. Use this when you need an endpoint the MCP tools don't wrap, such as saving a video frame to a file. The token value itself is never returned - it stays out of transcripts by design.

screen_textA

Read the DOS text-mode screen buffer as a string. Works only in text modes (CGA/EGA/VGA/Hercules text).

screen_captureA

Capture the current screen as a PNG image. Works in all video modes.

screen_infoB

Frame metadata: resolution, pixel format, palette status.

video_capture_startA

Start ZMBV video recording of the emulator screen.

video_capture_stopB

Stop ZMBV video recording.

video_capture_statusA

Check whether a video capture is in progress.

audio_capture_startB

Start WAV audio capture of the mixer output.

audio_capture_stopA

Stop WAV audio capture.

audio_capture_statusB

Check whether an audio capture is in progress.

mixer_statusA

Get mixer state: master volume, mute, all channels with volumes and sample rates.

mixer_volumeC

Set the master mixer volume.

mixer_muteA

Mute the master mixer output.

mixer_unmuteA

Unmute the master mixer output.

mixer_channel_volumeB

Set a mixer channel's user volume by name (SB, GUS, CDAUDIO, SPKR, etc.).

script_runA

Load and start a Lua script. The script runs sandboxed on the emulation thread. Any DOS automation capability without a dedicated tool is reachable through a Lua script.

script_statusA

Check the running script's state and read its output table. Scripts communicate results through dosbox.output['key'] = value.

script_stopB

Stop a running Lua script.

input_typeA

Type a string on the DOS keyboard. Characters are injected with pacing so the 8-slot i8042 buffer never overflows. Supports printable ASCII and common symbols (US layout).

input_keyA

Press or release a single key by its KBD_* name. Use for special keys (F1-F12, arrows, Escape, etc) that input_type cannot produce.

input_sequenceA

Inject a timed sequence of key, mouse, and wheel events. For complex input patterns or recorded replays. Mouse movement is RELATIVE (x_rel/y_rel deltas from the current cursor position); there is no absolute positioning. To reach a known position, sweep past a screen corner first (e.g. x_rel:-4000, y_rel:-4000 pins the cursor top-left), then move by the target offset. A click is a mouse_button press event followed by a release event. Unknown fields are rejected with an error naming the allowed ones.

mem_readA

Read bytes from guest physical memory. Returns base64 data and current CPU register state.

mem_writeC

Write bytes to guest physical memory.

mem_searchA

Scan a range of guest memory for a value. Returns matching physical addresses. Width is 1 (byte), 2 (word), or 4 (dword), little-endian.

dos_memory_mapA

Walk the DOS MCB chain and report which PSP owns which memory block. Shows the full conventional memory layout.

freeze_setA

Lock a memory address to a value. The value is rewritten every frame, trainer-style. Width is 1/2/4 bytes, little-endian.

freeze_listA

List all active memory freezes.

freeze_clearA

Remove a freeze. Pass an address to remove one, or omit to clear all freezes.

port_readA

Read an x86 I/O port. Width is 1 (byte) or 2 (word). Use for VGA registers, sound cards, HGC control ports.

port_writeB

Write to an x86 I/O port. Width is 1 (byte) or 2 (word). For Mode X unchaining, Hercules graphics, hardware config.

cpu_write_registerA

Write a CPU register. General registers (eax..ebp) accept 32-bit values. Segment registers (cs,ds,es,ss,fs,gs) accept 16-bit values and update the cached physical base.

debug_statusB

Debugger state: paused, breakpoints, current instruction.

debug_pauseB

Pause emulation at the current instruction.

debug_continueA

Resume emulation from the current pause point.

debug_stepA

Execute one instruction and pause again.

bridge_versionB

Bridge version and the protocol level it implements.

bridge_statusA

Bridge and connection state: engine version, effective protocol, enabled features, capability mode, managed instance, token presence (never the value).

bridge_helpA

One-call orientation: version, connection state, and every available tool with a one-line description.

bridge_connectA

Explicitly attach to the running dosbox instance: reads the token, probes the API, negotiates the protocol version. Reports a precise reason when it cannot.

bridge_disconnectA

Detach from the instance; it keeps running.

bridge_startA

Spawn the dosbox binary named in the human-edited config file (with an isolated config dir) and attach to it. Refuses while an instance is already managed.

bridge_stopA

Stop the instance this bridge spawned. Never stops an instance it merely attached to.

bridge_logsA

Tail of the spawned instance's output (untrusted machine output). Only covers an instance this bridge started.

bridge_setupA

Change safe bridge settings: port, headless, protocol pin. The binary path and the capability mode are human-edited only and are rejected here by design.

bridge_swaggerB

Digest of the instance's OpenAPI surface: route counts per group and routes unknown to the negotiated protocol.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

B3.4/5.0

Scored across 47 tools

Disambiguation4/5

Most tools are cleanly separated by resource prefix (video_, audio_, mixer_, mem_, port_, debug_, bridge_, script_, input_), so an agent can usually pick the right one. Some state-reporting tools overlap conceptually—bridge_status, dosbox_status, debug_status, bridge_version, session_info—but their descriptions clearly distinguish connection, machine, debugger, protocol, and REST details.

Naming Consistency4/5

Names are overwhelmingly predictable snake_case with a group prefix and action suffix, e.g. mem_read, port_write, freeze_list, bridge_connect. Minor deviations like cpu_write_register and dosbox_status/session_info/bridge_help are still readable and do not create confusion.

Tool Count2/5

47 tools is very heavy for an MCP surface, even for full emulator control. Many start/stop/status triplets and bridge-management tools could be consolidated without losing capability, making the set feel oversized rather than lean.

Completeness4/5

Coverage is broad: capture, input, memory, ports, CPU registers, debugger, mixer, and bridge lifecycle are all represented. Direct mount/save-state/config operations are not wrapped, but script_run explicitly provides an escape hatch to any Lua-reachable DOSBox capability, leaving only minor gaps.

Maintenance

ActivityMaintained
ResponsivenessUnresponsive