The Genome of Games — One Knowledge Base, Four Surfaces

Knowledge graphs · agent-facing infrastructure ·

A build that publishes 1,180 records four ways — static pages, an interactive graph, a search index, and an MCP server — in 0.39 seconds with zero dependencies.

Problem

A structured knowledge base that has to serve both a search engine and a model usually ends up serving them from different code paths, and the two drift. The crawler sees one answer, the agent gets another, and nobody notices until someone compares them side by side.

The Genome of Games is an ontology of video game mechanics — 168 mechanics, 618 games, 394 companies, 4,366 recorded links, spanning 1962 to 2025. What the records describe does not matter. The shape of the problem shows up anywhere one knowledge base has to answer to more than one kind of consumer.

Constraints

  • An agent and a crawler must never be able to return different answers for the same record.
  • The build had to stay dependency-free and fast enough to run on every commit.
  • Agents cannot afford a second hop — a tool response that returns a stub is a failed call, not a partial one.

My role

I designed and built the whole pipeline: the source ontology, the build, all four output surfaces, and the MCP tool design. The decision worth copying — having the MCP server import a build artifact rather than query the site — is the one I would defend hardest.

What shipped

  • 1,245 static HTML pages for crawlers and humans.
  • An interactive canvas graph of the full ontology.
  • A 129,037-byte search index powering the site’s own search.
  • An 8-tool Model Context Protocol server that statically imports the build artifact rather than querying the site.

Outcome

  • 1,180 records → four surfaces in 0.39 seconds — One command, zero npm dependencies, writing all four outputs from six hand-edited JSON files. Read the full write-up
  • 12.7× read-surface expansion — 1,312,577 bytes of source becomes 16,644,215 bytes of generated read surface — and every byte of it is disposable. Read the full write-up
  • 7,492 links of drift on the one surface the build does not own — The measured cost of the failure mode the architecture was designed to prevent, observed on the single surface left outside it. Read the full write-up

The decision that sounds like a downgrade

The MCP server does not query the site and does not read the source data. It statically imports a 1.9 MB index that the build wrote. There is exactly one place where slugs, lineage, and adoption edges get joined, so an agent and a crawler cannot come back with different answers.

Tool design for a consumer with no second hop

A human who gets a stub clicks through. An agent that gets a stub has burned a call. So each tool returns the whole useful object, and the tool descriptions spend their token budget on when to call the tool rather than on what the tool contains.

Stack

Node.js · Model Context Protocol · Static site generation · Canvas

Artifacts

All projects · Michael Kaminski


Book a Call · Download Resume · MKaminski1337@gmail.com · (404) 838-8613 · LinkedIn · GitHub · DEV