Skip to main content

mcp-server-if

An MCP (Model Context Protocol) server for playing interactive fiction games. Enables AI assistants like Claude to play text adventure games through a standardized interface.

Features

  • Play Glulx (.ulx, .gblorb) and Z-machine (.z3-.z8, .zblorb) games
  • Automatic game state persistence (save/restore between sessions)
  • Download games directly from the IF Archive
  • Optional journaling mode for reflective playthroughs
  • Works with Claude Desktop, Claude Code, and other MCP clients
  • Bundled interpreters (glulxe for Glulx, bocfel for Z-machine)

Installation

# Using uvx (recommended)
uvx mcp-server-if

# Or install with pip
pip install mcp-server-if

The package includes pre-compiled interpreters. No additional setup required.

Configuration

Environment Variables

Variable Description Default
IF_GAMES_DIR Directory to store games ~/.mcp-server-if/games
IF_GLULXE_PATH Override path to glulxe binary Bundled binary
IF_BOCFEL_PATH Override path to bocfel binary Bundled binary
IF_REQUIRE_JOURNAL Require journal reflections false

Command Line Arguments

mcp-server-if --help

Options:
  --games-dir PATH       Directory to store games
  --glulxe-path PATH     Path to glulxe binary (overrides bundled)
  --require-journal      Require journal reflections between turns

Usage with Claude Desktop

Add to your Claude Desktop configuration (~/Library/Application Support/Claude/claude_desktop_config.json on macOS or %APPDATA%\Claude\claude_desktop_config.json on Windows):

{
  "mcpServers": {
    "interactive-fiction": {
      "command": "uvx",
      "args": ["mcp-server-if"]
    }
  }
}

Usage with Claude Code

claude mcp add interactive-fiction -- uvx mcp-server-if

Available Tools

play_if

Play a turn of interactive fiction.

play_if(game="zork", command="go north")
play_if(game="zork", command="", journal="...reflection...")  # with journaling

list_games

List available games and their save state status.

download_game

Download a game from the IF Archive or any URL.

download_game(name="advent", url="advent.ulx")
download_game(name="bronze", url="https://example.com/Bronze.gblorb")

reset_game

Reset a game to start fresh (clears save state, preserves journal).

read_journal

Read the playthrough journal for a game.

read_journal(game="zork", recent=10)  # last 10 entries

search_journal

Search journal entries by keyword.

search_journal(game="zork", query="treasure")

Supported Game Formats

Glulx (modern, uses glulxe interpreter):

  • .ulx - Raw Glulx game files
  • .gblorb - Blorb containers with Glulx games

Z-machine (classic Infocom format, uses bocfel interpreter):

  • .z3, .z4, .z5, .z7, .z8 - Z-code game files
  • .zblorb - Blorb containers with Z-machine games

Find games at the IF Archive: Glulx games, Z-code games.

Journaling Mode

Enable with --require-journal or IF_REQUIRE_JOURNAL=true. In this mode:

  1. After playing your first command, subsequent turns require a journal entry
  2. Journal entries must be at least 100 words
  3. Entries are saved to {game}/journal.jsonl
  4. Use read_journal and search_journal to review your playthrough

This encourages thoughtful, reflective gameplay rather than rushing through.

How It Works

  1. Games are stored in ~/.mcp-server-if/games/{name}/

  2. Each game directory contains:

    • The game file (.ulx, .gblorb, .z5, etc.)
    • state/ - autosave data (persists between sessions)
    • metadata.json - session metadata
    • journal.jsonl - playthrough journal (if enabled)
  3. The server selects the appropriate interpreter based on file format:

    • Glulx games → glulxe
    • Z-machine games → bocfel
  4. Both interpreters use RemGlk for JSON-based I/O

  5. Game state is automatically saved after each turn

Development

Requires uv, a C compiler (gcc or clang), a C++ compiler (g++ or clang++), make, and git.

git clone --recursive https://github.com/davidar/mcp-server-if.git
cd mcp-server-if
uv sync --group dev
uv run pytest -v

uv sync compiles the bundled interpreters (glulxe and bocfel) from source automatically. If binaries are missing after a fresh clone, run uv sync --reinstall-package mcp-server-if to force recompilation.

Troubleshooting

"glulxe binary not found"

This shouldn't happen with pip/uvx installs. If it does:

  • Try reinstalling: pip install --force-reinstall mcp-server-if or uv sync --reinstall-package mcp-server-if
  • Or set IF_GLULXE_PATH to a manually installed glulxe

"Game file not found"

Use list_games to see available games, or download_game to get new ones.

Save/restore commands don't work

In-game save/restore triggers file dialogs that aren't supported. Use the automatic autosave system instead - your game state persists between sessions automatically.

License

MIT License - see LICENSE for details.

Credits

  • glulxe - The Glulx VM interpreter by Andrew Plotkin
  • bocfel - Z-machine interpreter by Chris Spiegel
  • RemGlk - Remote Glk library for JSON I/O
  • MCP - Model Context Protocol by Anthropic

Metadata

Release files for mcp-server-if 0.2.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for mcp-server-if 0.2.0
File Size Uploaded Provenance
mcp_server_if-0.2.0.tar.gz 11.9 MB With provenance Details

Built distributions (wheels)

Table of built distributions (wheels) for mcp-server-if 0.2.0
File
mcp_server_if-0.2.0-py3-none-win_amd64.whl Python 3 none Windows x86-64 Details
mcp_server_if-0.2.0-py3-none-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl Python 3 none Linux glibc 2.27+ x86-64, Linux glibc 2.28+ x86-64 Details
mcp_server_if-0.2.0-py3-none-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl Python 3 none Linux glibc 2.27+ ARM64, Linux glibc 2.28+ ARM64 Details
mcp_server_if-0.2.0-py3-none-macosx_13_0_x86_64.whl Python 3 none macOS 13.0+ x86-64 Details
mcp_server_if-0.2.0-py3-none-macosx_13_0_arm64.whl Python 3 none macOS 13.0+ ARM64 Details

Total release size: 15.7 MB

Release files / mcp_server_if-0.2.0.tar.gz

Download URL mcp_server_if-0.2.0.tar.gz
Size 11.9 MB
Tags Source
SHA-256 checksum
How to use checksums
1de3555526b7410acb42694d855a3d6770998ff761a2b11639231640b02593df
BLAKE2b-256 checksum
How to use checksums
80ba485b9ca5adfbf64648ed06fc80c243143a13c4206a8d310d4bb7ed898276
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Feb 3, 2026.

Transparency log

Release files / mcp_server_if-0.2.0-py3-none-win_amd64.whl

Download URL mcp_server_if-0.2.0-py3-none-win_amd64.whl
Size 1.5 MB
Tags Python 3 Windows x86-64
SHA-256 checksum
How to use checksums
d2a41d82f35eb13891bfa54986b0e67893ddcb96be03ac927901d286992f1568
BLAKE2b-256 checksum
How to use checksums
6e0f8ac011d332c4ef62bcfa32883bb1e386b5dcb7c0e7891846fdd2778167da
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Feb 3, 2026.

Transparency log

Release files / mcp_server_if-0.2.0-py3-none-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL mcp_server_if-0.2.0-py3-none-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 682.9 kB
Tags Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64 Python 3
SHA-256 checksum
How to use checksums
16be86f269d2d6b8a19f9b2e658d663e056a22a52b1629dec2e8faf29f20de19
BLAKE2b-256 checksum
How to use checksums
a795d6cb55c4d156e5ff17ab2da5571db1ee9488ddc0e1bd44cc770f960862e9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Feb 3, 2026.

Transparency log

Release files / mcp_server_if-0.2.0-py3-none-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl

Download URL mcp_server_if-0.2.0-py3-none-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Size 660.5 kB
Tags Linux glibc 2.27+ ARM64 Linux glibc 2.28+ ARM64 Python 3
SHA-256 checksum
How to use checksums
b96dda55b7449a4aa576c19ae6a6dcda43c6de8fb0524369fd5853a28af96725
BLAKE2b-256 checksum
How to use checksums
c85effb67dd15956510f1572f0e854bdc3d5d077abb1cb680f6ba8f83c3630ff
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Feb 3, 2026.

Transparency log

Release files / mcp_server_if-0.2.0-py3-none-macosx_13_0_x86_64.whl

Download URL mcp_server_if-0.2.0-py3-none-macosx_13_0_x86_64.whl
Size 505.7 kB
Tags Python 3 macOS 13.0+ x86-64
SHA-256 checksum
How to use checksums
cd06fc95b8d6f18684540c6bbbe4643a03d7034aaab5469270c2b60dde5007d2
BLAKE2b-256 checksum
How to use checksums
676562f680711578fc325f222c47410ca461fd43676bae281706fa4578c1a17e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Feb 3, 2026.

Transparency log

Release files / mcp_server_if-0.2.0-py3-none-macosx_13_0_arm64.whl

Download URL mcp_server_if-0.2.0-py3-none-macosx_13_0_arm64.whl
Size 505.8 kB
Tags Python 3 macOS 13.0+ ARM64
SHA-256 checksum
How to use checksums
0223f9e2b73b0f72690ec5bdd4fa5f6b88dd41763f3821445ede8830939aec51
BLAKE2b-256 checksum
How to use checksums
597a488de80a78b178daec1be3a31747de26e48470ca5048ddd7f499bbe87e07
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Feb 3, 2026.

Transparency log

Security for mcp-server-if 0.2.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 6 files in this release have been uploaded with provenance metadata.

Select from 6 files

Attestation for mcp_server_if-0.2.0.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Feb 3, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

Release history Release notifications | RSS feed

This release

0.2.0 This release

6 release files Full provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page