dos-mcp
The dos-mcp server enables modern AI/MCP clients to remotely observe and control DOS systems (real hardware or simulators) over a network bridge, without requiring modern software on the retro machine.
Capabilities:
Target Management: List available DOS targets (
dos.list_targets), get their current status (dos.get_status), and query their specific capabilities (dos.get_capabilities).Screen Capture: Capture the full text screen including attributes and cursor (
dos.capture_screen), or capture graphics framebuffers (CGA, Hercules, EGA, VGA) viados.capture_graphics(requires RA-TSR).Input Control: Inject text and named keys (e.g., Enter, F1, Ctrl+C) with configurable delay and settle time using
dos.send_keys.File Transfer: Download files from (
dos.download_file) and upload files to (dos.upload_file) a target's sandboxed file area, with overwrite option.Flexible Deployment: Supports foreground (
RAGENT.EXE), background/resident (RA-TSR.EXE), Linux PTY, and UDP simulator endpoints.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@dos-mcpcapture the current screen"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
DOS MCP
DOS MCP lets a modern MCP client observe and control DOS systems without putting MCP, JSON, HTTP, or an AI runtime on the retro machine. The modern Python bridge owns MCP, credentials, retries, target routing, policy, and structured results. DOS runs a small packet-driver endpoint.
Two DOS executables are retained:
RAGENT.EXE: the original foreground command-shell endpoint;RA-TSR.EXE: a loadable/unloadable resident endpoint for background observation, BIOS keyboard insertion, sandboxed file transfer, and raw standard graphics capture.
PicoMEM/PicoMEM2-specific code is intentionally absent.
Implemented MCP tools
dos.list_targetsdos.get_statusdos.get_capabilitiesdos.capture_screendos.capture_graphicsdos.send_keysdos.download_filedos.upload_file
All target-taking tools accept an optional target selector. It may be
omitted only when the bridge knows exactly one system.
Related MCP server: terminal-use-mcp
Target matrix
Capability | Linux PTY | UDP simulator | RAGENT | RA-TSR |
Status/capabilities | Yes | Yes | Yes | Yes |
80×25 text capture | Yes | Yes | Yes | Yes |
Keyboard input | terminal | UDP | BIOS queue | BIOS queue |
Sandboxed file read/write | opt-in | opt-in | No | opt-in |
Raw graphics capture | No | fixture-dependent | No | CGA/Herc/EGA/VGA |
Background operation | host process | host process | No | Yes |
Load/unload | process | process | process | DOS TSR |
Named local discovery | No | No | No | Yes |
RA-TSR is built with 8086 instruction generation for 8088 through 486-class
machines. DOSBox-X verifies the complete resident path, including exact
text/VGA capture, keyboard-driven VER, binary upload/download, and unload.
Physical adapter, BIOS, video-card, and 4.77 MHz timing coverage remains an
explicit hardware-verification item.
Architecture
MCP client
│ MCP over stdio
▼
Python DOS MCP bridge
│ target registry + transport-independent Backend operations
├── Linux PTY backend
├── configured UDP target(s)
└── validated local discovery records
│ authenticated protocol v2 over UDP
├── Linux simulator
├── RAGENT.EXE
└── RA-TSR.EXE
│ FTP/Crynwr packet driver
└── Ethernet adapterDiscovery is only an unauthenticated address hint. Every target operation still performs the configured credentialed handshake. RA-TSR announcements use Ethernet/IP limited broadcast and TTL 1, and stop while connected.
Quick start: local Linux backend
Requirements are Linux, Python 3.12+, and
uv:
uv sync
uv run dos-mcpSelect a shell and starting directory:
DOS_MCP_ROOT=/path/to/workspace \
DOS_MCP_SHELL=/bin/bash \
uv run dos-mcpThe starting directory is not an OS sandbox; the child retains the bridge user's permissions.
Quick start: Linux-backed UDP simulator
# terminal 1
uv run dos-mcp-simulator \
--bind 127.0.0.1:21300 \
--password 'local-test-only' \
--root "$PWD" \
--allow-file-read \
--allow-file-write
# terminal 2
DOS_MCP_TARGET=127.0.0.1:21300 \
DOS_MCP_PASSWORD='local-test-only' \
DOS_MCP_ALLOW_FILE_READ=1 \
DOS_MCP_ALLOW_FILE_WRITE=1 \
uv run dos-mcpQuick start: DOS
For a hardware PC, copy the ready-to-commission bin/ directory to
C:\DOSMCP. It contains both endpoints, offline protocol/configuration tests,
an editable mTCP-style configuration, and load/unload batch files. Edit
C:\DOSMCP\MTCP.CFG, load the adapter packet driver, then run:
CD \DOSMCP
PROTOCHK
CFGCHK
STARTTSR Unique-Lab-PassphraseThe example IP addresses in bin/MTCP.CFG are documentation-only TEST-NET
addresses and must be replaced. STARTTSR sets MTCPCFG and uses its
IPADDR, PACKETINT, and HOSTNAME values.
Build with Open Watcom 2:
make -C dos WATCOM=/path/to/watcom allRegenerate the tracked commissioning bundle after a DOS source change:
make -C dos WATCOM=/path/to/watcom binForeground:
RAGENT pass:UniqueLabPass 192.168.10.55 21300 0x60Both DOS endpoints can instead share an mTCP configuration:
SET MTCPCFG=C:\MTCP.CFG
RAGENT pass:UniqueLabPass - 21300 -With MTCPCFG set, running a fresh RA-TSR without arguments takes its IP,
packet-driver interrupt, and visible name from IPADDR, PACKETINT, and
HOSTNAME (or DHCP's HOSTNAME_ASSIGNED). It installs in conspicuous open
mode with file access disabled. The unused default file root does not need to
exist in that mode.
Resident, named, with an explicit file root:
MD C:\REMOTE
RA-TSR pass:UniqueLabPass 192.168.10.55 21300 0x60 C:\REMOTE RW WORKBENCH-386For deliberate unrestricted access to every DOS drive, use the literal root
ALL. Network paths must then be absolute drive paths such as
C:\CONFIG.SYS; RA-TSR prints a prominent warning when ALL and write access
are enabled:
RA-TSR pass:UniqueLabPass 192.168.10.55 21300 0x60 ALL RW WORKBENCH-386The Linux bridge still requires its independent file-read and file-write flags shown below.
Connect directly:
DOS_MCP_TARGET=192.168.10.55:21300 \
DOS_MCP_PASSWORD=UniqueLabPass \
DOS_MCP_ALLOW_FILE_READ=1 \
DOS_MCP_ALLOW_FILE_WRITE=1 \
uv run dos-mcpOr listen for disconnected RA-TSRs:
DOS_MCP_DISCOVERY=1 \
DOS_MCP_PASSWORD=UniqueLabPass \
uv run dos-mcpFor multiple fixed machines:
DOS_MCP_TARGETS='{"desk8088":"192.168.10.21","lab386":"192.168.10.38"}' \
DOS_MCP_PASSWORD=UniqueLabPass \
uv run dos-mcpThe bridge currently uses one UDP credential per process. Separate bridge processes are recommended when targets have different secrets.
Credentials
A password/passphrase of any nonzero length supported by the invoking command line is deterministically reduced to a 128-bit key. A legacy 32-hex raw key is still accepted. The credential is optional on both peers; omission selects conspicuous open mode.
Open mode is unauthenticated and suitable only for an isolated test network. Credentialed protocol v2 authenticates but does not encrypt traffic and uses a deliberately short 32-bit packet tag for 8088 feasibility. Use a trusted private LAN, a unique high-entropy credential per deployment, and never forward the DOS operation port to the Internet.
Test
uv run ruff check .
uv run python tools/check_docs.py
uv run pytest
make -C dos WATCOM=/path/to/watcom allForeground and resident DOSBox-X harnesses:
WATCOM=/path/to/watcom \
DOSBOX_X=/path/to/dosbox-x \
PACKET_DRIVER=/path/to/NE2000.COM \
tools/test_dosbox_x.sh
WATCOM=/path/to/watcom \
DOSBOX_X=/path/to/dosbox-x \
PACKET_DRIVER=/path/to/NE2000.COM \
tools/test_dosbox_x_tsr.shDocumentation
Start with Documentation:
PROJECT.md is the original brief. AGENTS.md
contains the current contributor constraints.
License
A final open-source license has not yet been selected. Third-party packet drivers are not redistributed by this repository.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- Alicense-qualityDmaintenanceProvides comprehensive computer control capabilities including mouse and keyboard automation, screen capture, OCR text recognition, and window management through MCP protocol.Last updated1MIT
- AlicenseBqualityBmaintenanceLocal + remote terminal interaction control MCP Server. Lets AI agents control interactive TUI programs the way a human would.Last updated294MIT
- Alicense-qualityDmaintenanceEnables LLM agents to capture screenshots, control mouse/keyboard, and manage windows on desktop platforms, primarily Windows, via an MCP server.Last updated1MIT
- AlicenseBqualityBmaintenanceExposes Anthropic's computer-use action surface (screenshot, click, move, keyboard, clipboard, batch) against a persistent desktop display via MCP stdio protocol. Enables AI agents to control a virtual desktop environment through natural language instructions.Last updated24MIT
Related MCP Connectors
Official remote MCP server bridge for Muumuu Domain.
MCP server exposing the Backtest360 engine API as tools for AI agents.
Telegram bridge for your MCP-compatible agent. Bidirectional, no LLM in our stack.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/rvdbijl/dos-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server