Meinopoly — turn any book into a playable world

A moddable Monopoly-style strategy engine: one command and an AI pipeline reads a novel into characters, boards, portraits and balance-tuned rules; LLM agents even take real seats at the table over MCP. 1,489 unit tests + 45 E2E.

JavaScriptboardgame.ioLLM pipeline (extract/build/art/balance)MCP serverJest (1,489 tests)Playwright E2E

GitHub

The engine is constant — worlds are mods: characters, boards, art, rules, even victory conditions are data. Six worlds ship in the box, and a new one can be generated from a book by AI, end to end:

npm run create-mod -- mybook.txt --from-book --portraits --boardbg --auto-balance

Four resumable stages: extract (map-reduce over the whole book — characters, places, factions) → build (six gameplay stats + a passive + personal lore per character; real places get real coordinates, fictional worlds get AI layouts) → art (pixel portraits for the whole cast + an era-styled board) → balance (a headless tournament simulator plays hundreds of games and hill-climbs the roster until no character is statistically over- or under-powered — it once caught a 67%-win-rate outlier before any player met it). Cost plans print before any API spend; a full novel runs about $0.5–1.

Play grows past roll-and-buy: rent duels (challenge the landlord instead of paying — 2d6 + stamina + luck÷2), player trading and round-robin auctions, seasons that shift prices every ten turns, four building tiers, three victory modes. Three renderers: the classic ring, a war-room atlas with glowing routes and forked paths, and a pixel globe you play on.

The favourite layer: an MCP server that seats LLM agents as real players — ten tools covering match lifecycle, seat-scoped state, legal-move listing (drift-oracle-tested against the engine), move execution and an event cursor. After claude mcp add meinopoly, Claude sees only its own seat — and plays.

Since July the table also argues back. Persuasion (舌战群儒) opens a window on every live rent, duel or trade in which a seat can make its case instead of simply acting — and attempt_persuasion is the tenth MCP tool, so an agent pleads exactly where a human would click. Bots answer under one of three policies (never, always, value-weighted), the server can disable the layer online without a redeploy, and a taunt window stops a duel stalling on a responder who never shows.

None of it moves without proof: 167 frozen game-log snapshots pin every engine message byte-for-byte, and GitHub Actions runs unit, build and Playwright as three independent jobs on every push to main — a failure in one never hides the signal from the other two.