mcp-retroarch
Provides tools for interacting with RetroArch through its Network Control Interface and Network RetroPad protocols, enabling memory read/write, save state management, screenshots, emulator control (pause, frame advance, reset), and gamepad input.
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., "@mcp-retroarchSave the current state to slot 2"
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.
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
Related MCP server: mcp-retroarch
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-retroarchRetroArch 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 for both NCI and RetroPad |
|
| NCI UDP port ( |
|
| Override host for Network Gamepad only |
|
| Base port for Network Gamepad ( |
Tools
Connectivity & introspection
Tool | Description |
| Verify NCI connectivity; returns RetroArch version |
| Report playing/paused state, loaded system, game, and CRC32 |
| Read a single RetroArch config parameter by name |
Memory
Tool | Description |
| Read bytes via the libretro system memory map (preferred) |
| Read bytes via the CHEEVOS address space (fallback) |
| Write bytes via the libretro system memory map |
| Write bytes via the CHEEVOS address space (no acknowledgement) |
Emulator control
Tool | Description |
| Toggle pause/unpause |
| Step one frame (paused only) |
| Soft-reset the loaded game |
| Save a screenshot to RetroArch's screenshot directory |
| Display an OSD notification on the RetroArch window |
Save states
Tool | Description |
| Save to currently-selected slot |
| Load from currently-selected slot |
| Load from an explicit slot number (does not change the current-slot pointer) |
| Increment current slot pointer |
| Decrement current slot pointer |
Gamepad input (Network RetroPad)
Tool | Description |
| Latch one or more buttons down |
| Release one or more buttons |
| Zero all buttons and analog sticks in one packet |
| Set an analog stick's X/Y position |
| 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-retroarchLicense
MIT — see LICENSE.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseAqualityCmaintenanceMCP server for PCSX2 and other emulators that speak the PINE protocol. Read and write 8/16/32/64-bit emulator memory and control save states for PlayStation-family emulation.14172MIT
- AlicenseAqualityCmaintenanceMCP server for RetroArch via its Network Control Interface. Drive any libretro core — read/write memory, save/load state, screenshot, pause/frame-advance/reset — across NES, SNES, Genesis, N64, GBA, PS1 and more.17203MIT
- AlicenseAqualityBmaintenanceMCP server for the mGBA Game Boy Advance emulator. Read and write GBA memory, inject button presses, take screenshots, save/load state, and step the emulator through a Lua bridge.18491MIT
- AlicenseAqualityCmaintenanceMCP server for BizHawk, the multi-system emulator. Drive NES, SNES, GB/GBC/GBA, Genesis, N64, PSX, Saturn and more through one Lua bridge — memory r/w across named domains, joypad input, frame-advance, screenshot, save/load state.20314MIT
Related MCP Connectors
A MCP server built for developers enabling Git based project management with project and personal…
MCP server for doc2mcp documentation, generated by doc2mcp.
An MCP server for deep research or task groups
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/pythoninthegrass/mcp-retroarch'
If you have feedback or need assistance with the MCP directory API, please join our Discord server