zmachine-mcp
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., "@zmachine-mcpstart a new game of Zork"
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.
zmachine-mcp
An MCP server for playing Z-Machine text adventure games (Zork, Hitchhiker's Guide, etc.) with AI agents.
Three interfaces expose the same game engine:
MCP — stdio or HTTP transport, so AI assistants like Claude can play text adventures
REST API — programmatic session management and input/output
WebSocket — real-time output streaming
A built-in status page at / shows server health, active sessions, and MCP setup instructions.
Quick Start
npm installPlace your Z-Machine story files (.z3, .z4, .z5, .z7, .z8, .zblorb) in a folder and point to it:
export STORIES=../storiesThen start the server:
# Development (auto-reload, server on :3000, Vite on :5173)
npm run dev
# Production
npm run build && npm startOpen http://localhost:3000 to see the server status page.
MCP Integration
Claude Desktop (stdio)
npm run start:stdioAdd to your Claude Desktop config (claude_desktop_config.json):
{
"mcpServers": {
"zmachine": {
"command": "npx",
"args": ["tsx", "src/server/main.ts", "--stdio"],
"env": {
"STORIES": "/path/to/your/stories"
}
}
}
}HTTP Transport
When running in HTTP mode, the MCP endpoint is available at POST /mcp.
MCP Tools
Tool | Description |
| List available story files |
| Start a new session; returns session ID and opening text |
| Send a command; returns the game's response |
| Get session state and status line |
| End a session |
REST API
Interactive documentation is available at /api/docs when the server is running. The raw OpenAPI spec is at /api/openapi.yml.
Method | Endpoint | Description |
|
| Server status, uptime, active sessions |
|
| List available games |
|
| List all active sessions with their IDs, game, state, and status line |
|
| Create a new game session |
|
| Send input to a session |
|
| End a session |
WebSocket
Connect to ws://localhost:3000/ws?session=<id> for real-time output streaming.
Configuration
Environment Variable | Default | Description |
|
| Path to folder containing Z-Machine story files |
|
| HTTP server port |
| — | Redis connection URL for session persistence |
| — | Set to |
Redis Persistence (optional)
Set REDIS_URL (e.g. redis://localhost:6379) to persist sessions and save data to Redis. Without it, sessions are in-memory only and lost on restart.
Development
npm run dev # Dev server with auto-reload
npm test # Run tests
npm run test:coverage # Tests with coverage report
npm run typecheck # TypeScript type checkingProject Structure
src/
server/
main.ts — Entry point (HTTP or stdio mode)
mcp-server.ts — MCP tool definitions
rest-server.ts — Express REST API
ws-server.ts — WebSocket server
session-manager.ts — Loads stories, manages sessions
game-session.ts — Single game session (wraps Z-Machine VM)
glkote-async.ts — Custom GlkOte for synchronous I/O capture
redis-store.ts — Optional Redis persistence
client/
main.ts — Status page (polls /api/status)
index.css — Status page styles
__tests__/ — Jest test suitesTech Stack
Runtime: Node.js + TypeScript (ESM)
Z-Machine: ifvms + glkote-term
Server: Express 5, WebSocket (ws)
Client: Vanilla TypeScript, Vite
Testing: Jest + ts-jest
This server cannot be installed
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
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/jonathan-meyer/zmachine-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server