AprNes-powered cross-platform MCP server for inspecting and controlling NES iNES ROMs. Exposes CPU stepping, breakpoints, memory, controller input, frame execution and inline screen captures over the Model Context Protocol.
Install
No framework information available.
README
Nes.Mcp
Nes.Mcp is a cross-platform .NET MCP server for inspecting and controlling NES ROMs in iNES format.
The MCP server exposes CPU stepping, frame execution, deterministic controller input timelines, breakpoints/watchpoints, CPU memory reads/writes, authoritative PPU/OAM inspection, continuous PPU-register tracing, correlated screen/RAM/PPU observation, symbols, lightweight disassembly, savestates, screen-region probes, and PNG screen capture.
Nes.Mcp directly uses the vendored AprNes backend for every supported ROM. AprNes implements the complete MCP debug workflow, including continuous PPU-register tracing and correlated execution observation for mappers 0-3 and the broader supported mapper set.
Build
Requirements:
- .NET 10 SDK
From the repo root:
dotnet build nes-debug-mcp.slnx
Run
From the repo root:
dotnet run --project src/Nes.Debug.Mcp/Nes.Debug.Mcp.csproj
Connect An MCP Client
Use stdio transport. For development against this local checkout:
{
"mcpServers": {
"nes_debug": {
"command": "dotnet",
"args": [
"run",
"--no-restore",
"--project",
"/absolute/path/to/NesMcp/src/Nes.Debug.Mcp/Nes.Debug.Mcp.csproj"
],
"startup_timeout_sec": 60,
"tool_timeout_sec": 60
}
}
}
After changing or updating the local checkout, restart the MCP client so it terminates and relaunches the stdio server. The dnx form uses the published NuGet package; use the local dotnet run form when validating source changes that have not been released as a package yet.
Once the tool is packed and published, the path-independent form should be:
{
"mcpServers": {
"nes_debug": {
"command": "dnx",
"args": ["Nes.Mcp", "--yes"]
}
}
}
Tools
Implemented tools:
load_romsave_stateload_stateresetstep_instructionstep_overstep_outrun_frameset_controllerset_joypadpress_buttonsrun_input_timelinecontinue_until_breakrun_until_conditionset_breakpointclear_breakpointlist_breakpointsset_watchpointset_watchpoint_rangeclear_watchpointlist_watchpointsget_stateread_registersread_memorywrite_memorydisassembleload_symbolsresolve_symbolread_symboldump_oamread_ppu_statecapture_screenfind_last_writerfind_last_writerstrace_until_writetrace_until_write_rangetrace_ppu_register_writesread_screen_regionobserve_screenobserve_executiondump_nametablesdump_tilemapdump_tileset
See docs/mcp-tools.md for schemas and examples.
Current Limitations
- Debug stepping, conditional breakpoints, and watchpoints are implemented by the AprNes debug session.
- Disassembly is intentionally small and currently covers the opcodes most useful for first smoke/debug work; unknown opcodes are returned as
.db. - Symbol parsing is intentionally simple:
BANK:ADDR NameandADDR Namelines with;or#comments. - Savestates are debugger snapshots, not a stable long-term archival format. They should be treated as version-bound to the current backend implementation.
Validate
dotnet test nes-debug-mcp.slnx -m:1
git diff --check
Third-Party Code
See THIRD-PARTY-NOTICES.md for attribution, license notes, and acknowledgements for vendored emulator code and credited emulator reference work.
The main local license files are:
Changes from Previous Version
Adoption Assessment
Assess this package against its supported frameworks, license, maintenance signals and dependency graph before making it a project standard.
Related Guides & Workflows
Learn how to evaluate, integrate, or audit this package in your .NET project.