Built by Claude Code
On 2026-10-29, the emulator behind this player was written from scratch in one Claude Code session. Times are taken from the project’s file and commit timestamps.
| Elapsed | Milestone |
|---|---|
| 0 min | First line of the 65C816 CPU |
| ~6 min | Graphics (PPU), DMA and sound (SPC700 + DSP) written — the game’s intro runs |
| ~10 min | Title screen and main menu, with music |
| ~20 min | Playable in the browser: play with the keyboard |
The player
- Runs entirely in your browser.
- Save states, autosave and “continue where you left off”
- 1–8× speed; hold Tab to fast-forward
- Cheat tools: Pro Action Replay codes and a memory search
- Key profiles and gamepad support
Let an AI watch or play
The player speaks MCP (Model Context Protocol), so Claude Code, Codex or any MCP client can join your game. Two modes:
- AI watches — you keep playing; the AI looks at the screen and memory and gives advice, shown in the player.
- AI plays — the AI presses the buttons; the game advances only when it acts.
Claude Code: one command
In an empty folder (Node.js 18 or later):
npx https://aixsfc.app/skill/aixsfc.tgz
claude
This installs the aixsfc and sfc-make skills and the MCP server into the folder. Allow the aixsfc server when Claude Code asks, then say “Use aixsfc to watch me play and give advice”. Open the player, load a game, press Connect AI, choose a mode and enter the pairing code the AI gives you. Run the same npx command again to update.
Other MCP clients
Download the server — one file, no dependencies: aixsfc-mcp.mjs. For Codex (~/.codex/config.toml):
[mcp_servers.aixsfc]
command = "node"
args = ["/path/to/aixsfc-mcp.mjs"]
Then ask the AI to call bridge_status for the pairing code.
| Tool | What it does |
|---|---|
screenshot, read_screen_text | See the screen; read its text exactly with the game’s own font (with a game plugin) |
search_memory, diff_memory, read_memory | Research: find where values live |
note | Show a comment in the player |
press, tap, wait, wait_for_change | AI plays: input buttons, then return a screenshot once the screen settles |
save_state, load_state, write_memory | AI plays: try something, roll back, change values |
Build your own with Claude Code
Curious how far one prompt goes? This is close to how the project started:
Write a Super Famicom (SNES) emulator that runs in the browser, in plain JavaScript with no third-party libraries and no code copied from existing emulators. Implement the 65C816 CPU, the PPU (backgrounds, sprites, windows, color math), DMA/HDMA, and the SPC700 + DSP audio, and emulate the audio boot ROM's upload protocol instead of including it. Load .sfc/.smc/.zip files by drag and drop, map the keyboard and gamepads, and keep SRAM in IndexedDB. Before building any UI, write a headless Node runner that renders frames to PNG and records audio, and use it to verify each step.
Research notice
AI x SFC Player is a personal research project on emulation and AI agents. It provides no games.