← All work

PRODUCTION · Safecast · 2025–present

Natural language over 200M radiation measurements

Try it on the live map ↗

Context

Safecast is a volunteer-run environmental monitoring network that formed after the Fukushima disaster, when official radiation data was scarce and distrusted. Fifteen years later it holds more than 200 million measurements — one of the largest open environmental datasets anywhere — but using it meant learning the API, the export formats, or the map's query tools. The data was public without being usable.

What I built

An assistant embedded directly in the Safecast map that answers questions like "how do readings near Iitate compare to before 2015?" in plain language.

The assistant answering a live query on the Safecast map.

It's built on MCP: the assistant reaches Safecast's three data services — measurements, device metadata, and geographic lookups — as governed tools rather than through a bespoke integration layer. That choice was about survival, not fashion. Safecast runs on volunteers and grant funding, so anything I build has to be maintainable by whoever comes after me, and swapping the underlying model must never mean rewriting the data plumbing.

Two decisions did most of the work. First, streaming across all three services with scoped keys per deployment, so the embedded and standalone versions share one backend without sharing credentials. Second, neutrality guardrails: Safecast's credibility rests on never editorializing about safety, so the assistant is evaluated against a 500-query set specifically for speculative claims — "is this safe?" gets measurements and context, not reassurance.

Safecast assistant system diagramThree Safecast data services feed an MCP server inside Safecast's infrastructure. Below the boundary line, the assistant — embedded in the map and standalone — reaches across via streaming calls with scoped keys.SAFECAST INFRASTRUCTUREMeasurementsDevicesGeo lookupsMCP servergoverned toolsBOUNDARYstreaming · scoped keysAssistantembedded in map · standalonePUBLIC WEB

Results

  • Time from question to answer: ~4 min → under 15 s for map users who previously exported and filtered by hand
  • p95 under 2 s per tool call at 10K+ monthly queries
  • Speculative responses down 78% on the 500-query eval set — measured against our own eval, not an independent benchmark
  • Dual deployment: standalone and embedded in the production map
The Safecast assistant answering a radiation query inside the map interface
The answer, inside the map

Placeholder — drop safecast-trace.mp4/.gif/.png into /public/media

The tool calls behind it

Stack

MCP, TypeScript, Streaming APIs, Scoped key management