windows98-mcp

windows98-mcp

Controls a real Windows 98 VM through 47 MCP tools, enabling screenshots, mouse/keyboard input, command execution, and file transfers.

Category
访问服务器

README

windows98-mcp

CI npm license

Control a real Windows 98 VM through 47 explicit Model Context Protocol (MCP) tools. Agents can take screenshots, use exact mouse and keyboard input, run and stream commands, manage windows and processes, use the clipboard, and transfer files and directories without relying on Computer Use for ordinary VM work.

Download the latest Windows 98 guest · SHA-256 · All releases · npm package

The GitHub repository is private, so release links require an account that can access it. The npm package is public.

How it works

WIN98CTL.EXE is a C89 Windows 98 guest agent. It maintains an authenticated outbound TCP connection to a TypeScript broker on the host-only VM network. Every MCP client connects to the singleton broker through a local named pipe. The broker provides exclusive leases so two agents cannot control the same VM at the same time.

Guest traffic is integrity-protected with HMAC-SHA256 but is not encrypted. Use an isolated host-only network and never expose the guest listener publicly.

Requirements

  • Node.js 22.17 or newer on the host.
  • Windows 98 Second Edition with Winsock 2 in a VM.
  • A VMware/VirtualBox host-only adapter shared by the host and guest.
  • The host-only IPv4 address of the host and the IPv4 address assigned to the Windows 98 guest.

The verified development setup uses host 192.168.60.1 and guest 192.168.60.128 on a /24 host-only network.

Quick start

Download and extract the latest Windows 98 guest ZIP on the host. Then, from the workspace that agents may access, generate the matching host config and WIN98CTL.INI inside that extracted release folder:

npx -y windows98-mcp@latest configure `
  --bind 192.168.60.1 `
  --ip 192.168.60.128 `
  --guest-dir "C:\Downloads\windows98-mcp-guest"

This creates two matching local configurations:

  • .win98-mcp/config.json in the current workspace: broker bind address, expected guest IP, random PSK, allowed host root, and state location.
  • WIN98CTL.INI in the extracted guest folder: host address, port, identity, and the same PSK. Running configure again reuses the existing PSK.

Copy the complete configured release folder to C:\WIN98CTL in Windows 98. Then:

  1. Run RUNTEST.BAT.

  2. If it reports PASS, run WIN98CTL.EXE and leave its small status window open.

  3. On the host, verify the connection:

    npx -y windows98-mcp@latest doctor --ip 192.168.60.128
    npx -y windows98-mcp@latest smoke-test --ip 192.168.60.128
    
  4. After the smoke test passes, run INSTALL.BAT in Windows 98 to start the guest agent at login.

The guest retries every two seconds forever when the broker is offline or restarted.

MCP client configuration

Running the package without a subcommand starts the stdio MCP adapter. --ip is the expected Windows 98 guest source IP; the guest still connects outbound to the host address stored in WIN98CTL.INI.

Codex project configuration (.codex/config.toml):

[mcp_servers.win98]
command = "npx"
args = ["-y", "windows98-mcp@latest", "--ip", "192.168.60.128"]
cwd = 'C:\path\to\your\workspace'
startup_timeout_sec = 20
tool_timeout_sec = 1860
required = false

Generic MCP JSON configuration:

{
  "mcpServers": {
    "win98": {
      "command": "npx",
      "args": [
        "-y",
        "windows98-mcp@latest",
        "--ip",
        "192.168.60.128"
      ],
      "cwd": "C:\\path\\to\\your\\workspace"
    }
  }
}

The configured cwd must contain the .win98-mcp/config.json generated by configure, or set WIN98_MCP_CONFIG to an absolute config path.

CLI

windows98-mcp [command] [options]

broker              Run the long-lived singleton broker
stdio               Run the stdio MCP adapter (the default)
configure           Match the host config to a downloaded guest release
doctor              Check the broker, guest, and capabilities
simulator           Run the deterministic simulated guest
smoke-test          Exercise a connected guest inside C:\MCPTEST
diagnostics [dir]   Collect sanitized diagnostics

--ip <guest-ip>     Accept only this Windows 98 guest IPv4 address
--bind <host-ip>    Override the host-only listener address
--port <port>       Override TCP port 9898
--config <file>     Use a specific broker config
--state-dir <dir>   Override logs/artifacts state directory
--host-root <dir>   Add an allowed host transfer root (repeatable)

configure additionally requires --guest-dir <extracted-release-folder>.

Equivalent environment variables include WIN98_MCP_GUEST_IP, WIN98_MCP_BIND_HOST, WIN98_MCP_GUEST_PORT, WIN98_MCP_CONFIG, WIN98_MCP_STATE_DIR, WIN98_MCP_HOST_ROOTS, and WIN98_MCP_PSK.

MCP tools

The tool groups are:

  • Lease and status: vm_status, vm_capabilities, vm_lock, vm_wait, vm_unlock.
  • Screen and input: screen_capture, eight mouse tools, five keyboard tools, and input_batch.
  • Desktop: clipboard get/set plus window list, focus, close, and capture.
  • Commands: one-shot shell execution and cursor-based interactive terminal sessions.
  • System and files: processes, filesystem primitives, resumable file transfer, and merging directory transfer.

The first VM-affecting tool atomically acquires the lease. Status calls do not. Every operational result reminds the caller that the VM remains locked and must be released with vm_unlock. Inactive leases expire after 30 minutes; disconnect cleanup also releases held keys, buttons, terminals, and transfers.

Development

npm ci
npm run typecheck
npm test
npm run build
npm audit --audit-level=moderate

# Build the real Windows 98 guest with pinned Open Watcom 1.9
powershell -File scripts/bootstrap-openwatcom.ps1 -Install
powershell -File scripts/build-guest.ps1 -Clean
powershell -File scripts/stage-release.ps1

The test suite includes deterministic protocol, broker, MCP, lease, transfer, artifact, and input tests. The guest build audits the PE32 GUI subsystem (4.0) and permits imports only from Windows 98 system DLLs.

Limitations

Windows 98 has no ConPTY, so terminals use redirected pipes rather than a true full-screen console. DOS/TUI screens, boot failures, BSODs, kernel hangs, and exclusive graphics surfaces remain outside the guest agent. File transfers are limited to 2 GiB minus one byte, and unrepresentable ANSI/keyboard characters are rejected instead of silently substituted.

License

MIT

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选