An MCP (Model Context Protocol) server that enables LLMs to interact with Game Boy games through PyBoy emulation.
This server provides LLMs with the ability to:
- ๐ฎ Load and play Game Boy ROM files
- ๐ฏ Control games through button inputs and sequences
- ๐ธ Capture and analyze game screens
- ๐พ Save and load game states
- ๐ Maintain persistent knowledge about games
- Python 3.10 or higher
- uv - Fast Python package manager
- A compatible LLM client that supports MCP protocol
# macOS/Linux
curl -LsSf https://astral.sh/uv/install.sh | sh
# Or using pip
pip install uvgit clone https://github.com/yourusername/mcp-pyboy.git
cd mcp-pyboy# Install all dependencies (creates .venv automatically)
uv sync
# Install with development dependencies
uv sync --extra dev# Check the CLI works
uv run mcp-pyboy
# Run tests (when implemented)
uv run pytest# Basic usage
uv run mcp-pyboy
# With options (coming soon)
uv run mcp-pyboy --roms-dir ./roms --log-level DEBUGmcp-pyboy/
โโโ src/mcp_server/ # Main package
โ โโโ mcp_server/ # MCP protocol implementation
โ โโโ game_session/ # PyBoy emulator wrapper
โ โโโ notebook/ # Knowledge persistence
โ โโโ handlers/ # MCP tool implementations
โ โโโ utils/ # Shared utilities
โโโ tests/ # Test suite
โโโ docs/ # Architecture documentation
โโโ roms/ # ROM files directory
โโโ saves/ # Save states directory
โโโ notebooks/ # Game knowledge storage
This project uses modern Python development tools:
- uv - Fast dependency management
- Black - Code formatting (88 char line length)
- Ruff - Linting and import sorting
- MyPy - Static type checking
- pytest - Testing framework
# Format code
uv run black src/ tests/
# Run linter
uv run ruff check src/ tests/
# Type check
uv run mypy src/
# Run tests
uv run pytest tests/ -v
# Install new dependency
uv add <package-name>
# Install dev dependency
uv add --dev <package-name>This project includes VS Code configuration for optimal development:
.vscode/settings.json- Workspace settings with Black/Ruff integration.vscode/extensions.json- Recommended extensions
The configuration ensures:
- Black handles all formatting
- Ruff handles linting only (no formatting conflicts)
- Proper Python interpreter from virtual environment
Once fully implemented, the server will provide these tools:
load_rom- Load a Game Boy ROM filereset_game- Reset the current gameset_emulation_speed- Control game speed
press_button- Press a Game Boy buttonhold_button- Hold a button downrelease_button- Release a held buttonsend_input_sequence- Execute a sequence of inputs
capture_screen- Get current game screensave_state- Save current game stateload_state- Load a saved statelist_states- List available save states
create_note- Create a note about the gameupdate_note- Update existing notesearch_notes- Search game knowledgelist_notes- List all notes for current game
For detailed architecture documentation, see:
This project is under active development. See the MVP Roadmap for current progress and planned features.
[License information to be added]
- Built on PyBoy - Game Boy emulator
- Uses MCP - Model Context Protocol
- Developed with Claude Code assistance