mcp-retroarch

mcp-retroarch

An MCP server for controlling RetroArch via its Network Control Interface, enabling memory read/write, save states, screenshots, emulator control, and gamepad input through the Network RetroPad protocol.

Category
Visit Server

README

mcp-retroarch

MCP server for RetroArch — memory r/w, save states, screenshots, pause/frame-advance/reset via the Network Control Interface, plus gamepad input via the Network RetroPad protocol (UDP).

Inspired by dmang-dev/mcp-retroarch. Rewritten in Python to eliminate the npm git-install reliability issues that plagued the original TypeScript distribution (npm install -g github:... produces a broken symlink on most systems due to a known npm bug). uv tool install git+... handles this correctly.

Requirements

  • Python 3.13
  • RetroArch with:
    • Network Commands enabled for NCI tools (memory, save states, screenshots, emulator control)
    • Network Gamepad enabled for input tools

Install

# Install as a persistent uv tool (recommended)
uv tool install git+https://github.com/pythoninthegrass/mcp-retroarch

# Or run ephemerally without installing
uvx --from git+https://github.com/pythoninthegrass/mcp-retroarch mcp-retroarch

RetroArch configuration

Network Commands (NCI — required for most tools)

In retroarch.cfg or via Settings → Network → Network Commands:

network_cmd_enable = "true"
network_cmd_port = "55355"

Network Gamepad (required for input tools)

In retroarch.cfg or via Settings → Input → Network Gamepad:

network_remote_enable = "true"
network_remote_base_port = "55400"

# Enable per player (p1 through p16)
network_remote_enable_user_p1 = "true"

Client configuration

Claude Desktop

~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):

{
  "mcpServers": {
    "retroarch": {
      "command": "uvx",
      "args": [
        "--from",
        "git+https://github.com/pythoninthegrass/mcp-retroarch",
        "mcp-retroarch"
      ]
    }
  }
}

If installed via uv tool install:

{
  "mcpServers": {
    "retroarch": {
      "command": "mcp-retroarch"
    }
  }
}

Environment variables

Variable Default Description
RETROARCH_HOST 127.0.0.1 RetroArch host for both NCI and RetroPad
RETROARCH_PORT 55355 NCI UDP port (network_cmd_port)
RETROARCH_RETROPAD_HOST $RETROARCH_HOST Override host for Network Gamepad only
RETROARCH_RETROPAD_BASE_PORT 55400 Base port for Network Gamepad (network_remote_base_port); player N listens at base + N

Tools

Connectivity & introspection

Tool Description
retroarch_ping Verify NCI connectivity; returns RetroArch version
retroarch_get_status Report playing/paused state, loaded system, game, and CRC32
retroarch_get_config Read a single RetroArch config parameter by name

Memory

Tool Description
retroarch_read_memory Read bytes via the libretro system memory map (preferred)
retroarch_read_ram Read bytes via the CHEEVOS address space (fallback)
retroarch_write_memory Write bytes via the libretro system memory map
retroarch_write_ram Write bytes via the CHEEVOS address space (no acknowledgement)

Emulator control

Tool Description
retroarch_pause_toggle Toggle pause/unpause
retroarch_frame_advance Step one frame (paused only)
retroarch_reset Soft-reset the loaded game
retroarch_screenshot Save a screenshot to RetroArch's screenshot directory
retroarch_show_message Display an OSD notification on the RetroArch window

Save states

Tool Description
retroarch_save_state_current Save to currently-selected slot
retroarch_load_state_current Load from currently-selected slot
retroarch_load_state_slot Load from an explicit slot number (does not change the current-slot pointer)
retroarch_state_slot_plus Increment current slot pointer
retroarch_state_slot_minus Decrement current slot pointer

Gamepad input (Network RetroPad)

Tool Description
retroarch_input_press Latch one or more buttons down
retroarch_input_release Release one or more buttons
retroarch_input_release_all Zero all buttons and analog sticks in one packet
retroarch_input_set_analog Set an analog stick's X/Y position
retroarch_input_tap Press, hold for a duration, then release (everyday input)

Valid RetroPad button names: b, y, select, start, up, down, left, right, a, x, l, r, l2, r2, l3, r3.

On PlayStation cores: b=Cross, a=Circle, y=Square, x=Triangle.

See docs/RECIPES.md for usage patterns.

Development

# Install with dev dependencies
uv sync

# Run tests
uv run pytest

# Format and lint
uv run ruff format .
uv run ruff check .

Docker

docker build -t mcp-retroarch .
docker run --rm -i \
  -e RETROARCH_HOST=host.docker.internal \
  mcp-retroarch

License

MIT — see LICENSE.

Recommended Servers

playwright-mcp

playwright-mcp

A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.

Official
Featured
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.

Official
Featured
Local
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
graphlit-mcp-server

graphlit-mcp-server

The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.

Official
Featured
TypeScript
Kagi MCP Server

Kagi MCP Server

An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.

Official
Featured
Python
E2B

E2B

Using MCP to run code via e2b.

Official
Featured
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Exa Search

Exa Search

A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured