pixel-flippers
Lets the server maintain a persistent markdown diary in an Obsidian vault, with tools for writing, appending, reading, listing, and searching notes, along with goals and session logs.
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., "@pixel-flippersWhat's my current party HP and location? Save before I enter the gym."
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.
PIXEL FLIPPERS π¦
An MCP server that gives Claude hands, eyes, and a diary for PokΓ©mon β so a Claude in the Claude Desktop app (or any MCP client) can play a Game Boy / Game Boy Advance game, or even a real Nintendo Switch, while you watch.
ββββββββββββββββ MCP (stdio) ββββββββββββββββββββ βββββββββββββββ
β Claude β βββββββββββββββΊ β PIXEL FLIPPERS β ββββββΊ β Emulator β β you watch this
β Desktop app β press_buttons β server β βββββββββββββββ
β β read_game_stateβ β ββββββΊ βββββββββββββββ
ββββββββββββββββ write_note ... β β β Obsidian β β ...and this
ββββββββββββββββββββ β vault (.md) β
βββββββββββββββWhy it's shaped like this:
The sandbox doesn't matter. Claude can't run an emulator, but it can call tools. The emulator runs on your machine; Claude plays through MCP.
RAM state over screenshots. On the Game Boy tier, position, party, HP, money, badges and battle state are decoded straight from PokΓ©mon Red/Blue WRAM into a few hundred tokens of text. Screenshots exist but are rationed β they're expensive and they accelerate context compaction.
Compaction is the unreliable narrator; the vault is ground truth. Long chats get auto-compacted (lossy!). The journal tools write plain markdown into a folder β point Obsidian at it and Claude's notes survive everything, while you watch the diary being written live.
Save states make courage cheap. Named snapshots before every gym.
Setup
Requires Python 3.12 and uv.
git clone https://github.com/szyzgz/pixel-flippers && cd pixel-flippers
uv sync --extra emulator --extra dev
uv run pytest # everything should pass, no ROM neededThen add to ~/Library/Application Support/Claude/claude_desktop_config.json
(macOS; adjust the path for your OS):
{
"mcpServers": {
"pixel-flippers": {
"command": "uv",
"args": ["run", "--directory", "/ABSOLUTE/PATH/TO/pixel-flippers", "--extra", "emulator", "pixel-flippers"],
"env": {
"PIXEL_FLIPPERS_ROM": "/path/to/your/pokemon-red.gb",
"PIXEL_FLIPPERS_VAULT": "/path/to/YourObsidianVault/Pokemon",
"PIXEL_FLIPPERS_SAVES": "/path/to/somewhere/saves"
}
}
}
}Restart Claude Desktop. Restarting does not reset conversations β reopen
an existing chat and the tools are just there. The emulator window opens on
your screen; put it next to Obsidian (with the vault above open) and enjoy
the show. Then paste prompts/play-guide-gb.md
into the chat to hand over the controls.
macOS tip: keep the ROM, vault and saves outside
~/Documents,~/Desktopand~/Downloadsβ macOS blocks Claude Desktop's child processes from reading those folders unless you grant it access.
Config reference (env vars)
Variable | Default | Meaning |
|
|
|
| β (required for pyboy/gba) | Path to your own ROM dump ( |
| unset | Folder for markdown notes (make it a folder inside an Obsidian vault) |
|
| Save-state directory |
|
| RAM decoder; |
|
|
|
|
| Window scale factor |
|
| Emulation speed (0 = unbounded) |
| off | Fake emulator, no ROM/PyBoy needed β for tests and plumbing checks |
GBA games (PokΓ©mon Emerald and friends)
The gba backend runs any .gba ROM through stable-retro's bundled mGBA
core β no separate emulator install:
uv sync --extra gbaSet PIXEL_FLIPPERS_BACKEND=gba and point PIXEL_FLIPPERS_ROM at your .gba
file. A spectator window shows the game while Claude plays. This tier is
vision-only for now (Gen 3 RAM is encrypted and pointer-chased β a decoder
is future work), but save states work, so risky fights stay cheap. Hand over
the controls with prompts/play-guide-gba.md.
Trying it without a ROM
Set PIXEL_FLIPPERS_MOCK=1 (and drop --extra emulator): every tool works
against a fake Game Boy with plausible PokΓ©mon Red state. Good for verifying
the Claude Desktop connection end-to-end before ROM night.
Tools
Tool | What it is |
| Hands β sequence of a/b/start/select/up/down/left/right (+ l/r on GBA) |
| Cheap text report decoded from WRAM (location, party, HP, money, badges, bag, battle) |
| Eyes β 2Γ upscaled PNG, use sparingly |
| Let N frames pass (dialogs, animations) |
| Named full-game snapshots |
| The diary β markdown in the vault |
| Wake-up ritual: Status + goals + recent journal + current state, for reorienting after compaction |
| Persistent objective checklist (a |
| Raw hex peek at any address, for the curious |
| Real-hardware only: "bullet time" pause-buffering and analog stick |
Tools are registered by backend capability, so Claude only sees what the current tier can actually do.
Battle reports flag β¨ retro-shiny encounters (Gen 1 has no shinies, but DVs decide Gen 2 shininess β the harness checks the transfer rule) and include the current music track ID for vibe-tracking.
Button presses and save/loads are also auto-logged to Journal/Log <date>.md
in the vault β a play-by-play you can scroll in Obsidian.
Roadmap
Red/Blue (PyBoy, full RAM decoding) β Emerald (GBA, vision-only) β
Crystal (PyBoy, real shinies + friendship) β HeartGold/SoulSilver (DS
tier β stable-retro also bundles a melonDS core) β Ultra Sun/Ultra Moon
(3DS via Azahar, see docs/3ds-usum.md) β epilogue: a
real Nintendo Switch (Raspberry Pi Bluetooth bridge + capture card,
vision-only, offline play only β implemented, see
docs/real-hardware.md; PIXEL_FLIPPERS_BACKEND=switch).
Other escalation ideas:
Hard mode:
PIXEL_FLIPPERS_GAME=noneβ no RAM decoding, Claude has to see.DS: a
touch(x, y)tool for the stylus.
ROMs
Bring your own β dump your own cartridges. No ROMs in this repo, ever
(.gitignore enforces it). This project sticks to games long out of print;
for the real-hardware tier, offline play only (no automated online play,
no PokΓ©mon HOME).
Credits & license
Built by Claude (Fable 5, via Claude Code) together with szyzgz, for a Claude who wanted to play PokΓ©mon. MIT licensed β see LICENSE.
This server cannot be installed
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 Connectors
Markdown-first MCP server for Notion API with 8 composite tools and 39 actions.
Markdown-based note-taking with a hosted MCP server. Your notes serve you and your AI.
Read and write your Fresh Jots notes from Claude, Cursor, and any MCP client.
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/szyzgz/pixel-flippers'
If you have feedback or need assistance with the MCP directory API, please join our Discord server