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
- AlicenseAqualityBmaintenanceMCP 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.Last updated14191MIT
- 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.Last updated17212MIT
- AlicenseAqualityAmaintenanceMCP 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.Last updated18411MIT
- AlicenseAqualityBmaintenanceMCP 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.Last updated20304MIT
Related MCP Connectors
Person-owned, portable AI memory as a remote MCP server, readable and writable by any MCP client.
A MCP server built for developers enabling Git based project management with project and personal…
MCP server for doc2mcp documentation, generated by doc2mcp.
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