It also comes with Toolforest's first interactive MCP GUI widget. Drag the slider below.
These interactive components only work on platforms that support MCP widgets, like Claude, ChatGPT, and Grok. Now that the foundation is built, I see a great opportunity to go back and add widget-leveraging tools to my existing toolkits.
Getting the widget to actually render in Claude took some effort. I noticed a lot of other developers in the community were hitting the same walls, so I built a simple, Claude-friendly reference implementation to make it easier. You can find it here: https://github.com/primevalsoup/mcp-apps-claude-demo.
Where the handle can't go
The slider is the fun answer, which naturally means it is the fragile one. Step outside a perfectly configured chat window into a markdown document, a saved history, or an older model that looks at interactive widgets the way a dog looks at a ceiling fan, and you suddenly need a regular, unglamorous image.
So EO builds the lowest common denominator first. Every panel starts with identical constraints: area, collection, settings, pixels. EO decodes each one and checks the math, mostly because APIs are perfectly happy to hand you half a picture and pretend it’s a whole one. If a panel is partial or misaligned, the comparison stubbornly refuses to proceed. Only when everything actually lines up does EO label the pieces, stitch them into a single PNG, and mint a short URL. That static image is the universal fallback.
Alongside it, EO sends a polite little dossier of the panels: their display order, image URLs, and titles. Then it washes its hands of the matter. The Toolforest layer takes over from there. Two panels become a wipe slider; three or four become a swipeable strip. A client that has no idea what an MCP widget is remains blissfully ignorant and just gets the labeled PNG.
EO’s job is to ensure the comparison is rooted in reality. Toolforest decides how to dress it up.
There is one ironclad rule: no blank panels. My first attempt at writing this post asked for a year the archive didn't actually cover at that site. Instead of cheerfully serving me a dramatic before-and-after of a Texas ranch and a dark void, EO just said no.
The picture came second
A before-and-after slider is a great trick provided you actually know the dates for the before and the after. The Stargate campus was easy since the construction schedule made the news. The real test is when nobody has any idea when to look. Here is a stretch of the Cascades near Skykomish, Washington, about two hours from my house.
(August 2022 left of the handle, July 2023 right: the same forest one summer after the Bolt Creek Fire. The burn is the brown-grey ground where green used to be.)
Nobody gave the assistant those dates. I just vaguely asked if anything had happened to this particular patch of trees in the last few years. The assistant made one statistics call and dragged back a monthly vegetation index covering ninety months. Every summer the line dutifully climbed to about 0.8. Then between August and September of 2022, the math fell completely off a cliff.
The comparison pictures were pulled only after the data spotted the drop. That statistical cliff had a real-world name: the Bolt Creek Fire, which closed Highway 2 that September.
The wrong number looks right
The Sentinel-2 API is always thrilled to hand you a number. The actual challenge is figuring out if that number has any relationship to reality.
The standard defense is a maximum cloud cover setting. But that measures the entire scene, not the specific place you care about. An image can pass the test with flying colors while a giant cloud parks itself directly over your lake.
During testing, Lake Shasta was full. For the exact same month, one cloud threshold produced a water index of −0.120 and another yielded +0.417. Both requests succeeded perfectly. Both numbers looked entirely professional. One of them was just a cloud.
So EO ignores the scene and looks at the pixels instead. It uses Sentinel-2's own classification to mask the clouds, then reports exactly what share of the month's pixels actually survived the purge. A month scraped together from ten percent of its pixels is no longer allowed to masquerade as a month computed from ninety.
When a month is completely clouded over, the Sentinel-2 API does not do the polite thing and return an empty row. The month simply ceases to exist. Read the results as a standard list, and every value after the missing month quietly slides into the wrong spot on the calendar. EO has to manually rebuild the expected timeline, put every value back where it belongs, and formally declare the gaps.
The physical burn scar is easy enough to see. The severity is harder to measure, mostly because the untouched forest still gets a vote in the average. Zoomed in on the burn, the average vegetation index the following summer was down a mere 0.09. That sounds like a mild dry spell. But the tenth percentile was down 0.25. The surviving trees soften the average, while the bottom tenth shows where the fire actually did its work. Getting that darker, more accurate view just takes one extra parameter.
Composability, again
Just like last week, when I showed how your assistant could bolt the Geo toolkit to Anki to build spatial flashcards, getting independent tools to cooperate isn't a trick. It’s just the natural result of pointing increasingly smarter LLMs at an expanding library of toolkits. The real objective here is getting the output to actually escape the chat window.
In this case, the objective was to write a short report on the Bolt Creek Fire, tracking the initial damage and measuring the forest's slow recovery over the last few years. To get there, the pieces assemble into a finished document, with each toolkit doing its specific job and passing the data cleanly to the next.
The Geo toolkit resolves the boundary into a short reference string. The heavy geometry stays safely on the server, and EO accepts the reference directly. This means a complex forest perimeter with twenty thousand vertices never has to cross the conversation and completely blow out the context window.
Once EO turns that reference into imagery and a clean time series, it hands off the baton. The Google Sheets toolkit takes the time series, builds a spreadsheet, generates a chart, and spits out an image of it. Finally, the Google Docs toolkit sweeps up the imagery, the chart, and the written analysis, and binds it all into a proper report.
(A satellite site report on the Bolt Creek Fire, assembled by the assistant in fourteen tool calls: seven years of monthly vegetation statistics, a chart built in Google Sheets, four summers of imagery, and the written analysis. Read the report.)
Boundaries on the imagery
The two toolkits also meet directly inside a single image. Boundaries supplied by Geo can be drawn straight onto satellite renders: an outline, a label, or a spotlight effect that dims everything outside the chosen polygon. Because the boundary arrives as a reference and resolves on the server, the exact same overlay gets applied to every panel of a temporal comparison. A highlighted parcel stays perfectly locked in place while the years shift beneath it. The county flashcards from last week can now show the county directly from space.
The point
Sentinel Hub, which serves the imagery under all of this, is a remarkably powerful API. It will search catalogs, process pixels, and calculate statistics all day long. What it will not do is stop you from asking a subtly wrong question. In fact, it will cheerfully return a successful, highly plausible, and entirely useless answer to one.
The toolkit's actual job is everything that happens between the raw endpoint and a trustworthy answer. It remembers which bands mean what on which sensor. It knows the difference between a cloudy scene and a cloudy pixel. It patches the calendar back together when months go missing, forces sampling scales to be explicitly reported instead of vaguely implied, and has the decency to explain a blank image rather than just shipping a void.
And now, it delivers a result that knows how to dress itself for the occasion: as a slick interactive slider where the client allows, and as a stubbornly reliable labeled image everywhere else.
The Geo post ended by promising that toolkit would get more useful this week. This is what I meant. Say where, say when, and drag the handle.
As always, ideas and suggestions are welcome at gerrit@toolforest.io.