9 months building an advanced StarCraft reporting tool with Go and Claude

maloga1 pts0 comments

Mariano Gappa's Blog<br>9 months in: building an advanced StarCraft reporting tool with Go & Claude<br>Jul 14, 2026

How it started<br>When I was 15, I met my best mate at a LAN party in downtown Buenos Aires, right as the StarCraft: Brood War craze was catching fire. We fell in love with the game on the spot.<br>It&rsquo;s 2026 now, we have jobs and live on opposite ends of the world, but we still Zoom almost every weekend to play and mess around. And through that decades-long passion came an idea.<br>The idea, on a weekend call<br>&ldquo;What if we could just ask an AI in natural language about the game we&rsquo;d just played?&rdquo;<br>e.g.:<br>Does this guy always go Carriers?<br>Did all 3 of them ally against us last game?<br>What&rsquo;s the average time I should have turrets against this particular Zerg?<br>The natural shape for that is an MCP server<br>, but what do we feed to it?<br>Brood War writes a replay file (a .rep) after every game, which lets the game client play the game back to you. But MCP doesn&rsquo;t read StarCraft replay files.<br>So I went looking for parsers, and András Belicza&rsquo;s screp<br>was the natural choice (which is already written in Go).<br>Thus, screpdb was born:<br>Parse replays using screp<br>Structure the output and ingest it onto a relational database (SQLite)<br>Put an MCP server in front<br>The first commit<br>landed on September 30th, 2025 .<br>From chatbot to reporting tool<br>Then we actually used it for a couple of sessions, and something felt off. Typing questions to a chatbot was an impedance mismatch.

The first version: Claude querying screpdb over MCP and drawing its own chart. Powerful, but asking a chatbot to rebuild every view, every time, got old fast.<br>What we wanted wasn&rsquo;t a conversation. It was a reporting tool.<br>However, that&rsquo;s a much bigger build. Before I&rsquo;d get into that, I&rsquo;d want to see what options already existed.<br>The tools that already existed<br>BWChart<br>is the pioneer tool we all used since 2003. Its last update was in 2017, after which SCRChart (below) superseded it. Its Liquipedia page<br>has the full history.

SCRChart<br>is the 2019 heir to BWChart, though it seems to have been abandoned later that same year. Being a Java application, it&rsquo;s cross-platform.

RepMastered<br>is András Belicza<br>&rsquo;s excellent web database and in-browser analyzer, built on his screp parser, which this whole project stands on (intro thread<br>). It holds over 100 million replays<br>and is fully featured:<br>Bulk-upload and share replays, even whole folders at once.<br>A huge, filterable database: search by player, map, matchup, or tag.<br>In-browser analysis: APM/EAPM, hotkeys, build-order and strategy charts, and an animated map replay.

vespene.gg<br>is the newest arrival (2026) and the boldest: according to its creator, dethsc, responding to my question in the intro thread on TL.net<br>, it&rsquo;s a fresh reverse-engineering of SC:R&rsquo;s binaries, which lets you upload a replay and watch the game in-browser, with all kinds of real-time metrics, an AI coach, a replay database, tournaments, Twitch streams and more.

These are great tools. But what we needed wasn&rsquo;t quite covered. We wanted to see higher-level semantics during our play sessions.<br>But before building the reporting tool, I had to learn how tricky it was to get semantics from a replay file.<br>Why StarCraft replays are secretly, wonderfully hard<br>A StarCraft replay does not record what happened. It records only the commands : the stream of orders each player issued.<br>The engineering of the game engine and replays is fascinating, but it&rsquo;s not the focus of this article; if you&rsquo;re interested, I vibe-coded this didactic site that goes deeper into it while staying approachable: Inside Brood War

In short: in order to know what really happened in the game, you&rsquo;d need to run the commands against the game engine, but as of SC:Remastered, there&rsquo;s no headless API to do this (BWAPI & OpenBW exist for pre-remastered but come with tradeoffs; dethsc&rsquo;s reverse-engineering of Remastered is closed source).<br>This means that certain things just cannot be answered from replays alone:<br>How many resources does each player have over time? Is a player supply-blocked right now?<br>A unit was created, but was it killed later? Was a building destroyed?<br>A unit was ordered to go somewhere, but was it able to arrive there? When?

And the commands themselves are noisy:<br>Spam. Plenty of orders were recorded but rejected by the engine (not enough resources, cancelled builds, a worker killed on the way), and we often can&rsquo;t tell which ones actually happened.<br>Missing data. Commands that ought to carry coordinates, or a source unit or target, frequently just don&rsquo;t.<br>Ambiguous units. Units are identified by a recyclable 16-bit &ldquo;unit tag&rdquo;, not a type, so it&rsquo;s often impossible to say which unit did what.<br>But then AI started getting so good, so fast, that I could prototype things that would have been impossible back when BWChart and SCRChart were...

rsquo game replay starcraft tool replays

Related Articles