AI x SFC Player

A research project · built with Claude Code

AI x SFC Player

A Super Famicom player written from scratch by Claude Code, with an MCP interface that lets AI agents play and study games.

Open the player Let an AI play

Research project. No games are provided.

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.

ElapsedMilestone
0 minFirst line of the 65C816 CPU
~6 minGraphics (PPU), DMA and sound (SPC700 + DSP) written — the game’s intro runs
~10 minTitle screen and main menu, with music
~20 minPlayable in the browser: play with the keyboard

The player

Open the player →

Let an AI play

The player speaks MCP (Model Context Protocol), so Claude Code, Codex or any MCP client can play: press buttons, look at the screen, read on-screen text, save and load states, and search or change memory. The game only advances when the AI acts, so it never misses a moment while it is thinking.

  1. Download the MCP server — one file, Node.js 18 or later, no dependencies: aixsfc-mcp.mjs
  2. Add it to Claude Code:
    claude mcp add aixsfc -- node /path/to/aixsfc-mcp.mjs
    
    or to Codex (~/.codex/config.toml):
    [mcp_servers.aixsfc]
    command = "node"
    args = ["/path/to/aixsfc-mcp.mjs"]
    
  3. Open the player, load a game and press Connect AI. Enter the pairing code shown at http://localhost:8765, or ask the AI to call bridge_status.
  4. Ask the AI to play:
prompt>

Call bridge_status, then play the game in the paired browser player. Use read_screen_text before looking at screenshots, narrate what you see and what you plan with note, and save_state before risky choices. Once you understand the main commands, write a short strategy guide to guide.md.

Your game files stay in your browser. The MCP server runs on your own computer and only relays commands between the AI and the page.

ToolWhat it does
press, tap, wait, wait_for_changePlay: input buttons, then return a screenshot once the screen settles
screenshot, read_screen_textSee the screen; read its text exactly with the game’s own font (supported games)
save_state, load_stateTry something, roll back if it goes wrong
search_memory, diff_memory, read_memory, write_memoryResearch: find where values live and change them
noteNarrate for the human watching

Build your own with Claude Code

Curious how far one prompt goes? This is close to how the project started:

prompt>

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 with my game at ./game.sfc.

Research notice

AI x SFC Player is a personal research project on emulation and AI agents. It provides no games.