If you're curious about the philosophy and design decisions behind MCP-Web, keep on reading at mcp-web.dev/made-with-love.
Posts by Fritz Lekschas
MCP-Web also lets you trigger AI queries directly from the frontend. Your app can "ask" AI questions, not just respond to AI requests. As an example, checkers.demo.mcp-web.dev is a checkers game where you play against AI. But since the app is AI-controllable, you can also let AI play against AI.
To build AI-controllable frontend apps with MCP-Web, you need to model your frontend state declaratively. Break your state into atomic and derived units, and describe it with Zod schemas. Exposing your state as tools is then straightforward. MCP-Web comes with utilities to streamline all this.
Another benefit is when your UI has rich ephemeral state that shouldn't live in a db. Think of dashboards or
visualization tools with crossfilters, selections, and dynamic color scales. These view models are often larger than the data model itself.
See higlass.demo.mcp-web.dev as an example
This approach makes the frontend the main control surface, which has a few benefits. Primarily, it makes human-AI parity easy. Humans control state through UIs and AI controls the same state through tools. So both have the same capabilities, which also enables mixed-initiative interactions
With MCP-Web, your frontend app becomes the MCP server. AI doesn't need to parse HTML to identify possible actions. It gets typed tools to directly manipulate your frontend app's state like your UIs do.
Try it: todo.demo.mcp-web.dev is a todo app that either you or AI can fully control.
Did you ever want to control frontend apps through AI while being able to take over at any point? I built a library called MCP-Web that lets you expose state, actions, and UI as MCP tools+apps for AI while maintaining human agency.
Code: github.com/flekschas/mc...
Docs: mcp-web.dev
I'm proud to announce the latest release of 🧬 #Oxbow 🏹, with new features to make NGS data analysis more powerful, efficient, and "composable".
Learn more at: oxbow.readthedocs.io
Ohhhhh nice shortcut ✨
To test it yourself, head to github.com/flekschas/ju..., clone the repo, cd into notebooks, and run `juv run dimbridge.ipynb`. This requires juv (github.com/manzt/juv), a super handy new tool from @manzt.sh that makes Jupyter Notebooks reproducible! I highly recommend you check it out if you haven't
Using a single-cell surface protein dataset, you can use Jupyter Scatter to select points and have DimBridge compute the key protein expressions. You can also contrast two or more selections or use the brush selection to study a sequence of selections in the dataset.
To test the new brush selection, I combined JScatter w/ DimBridge (arxiv.org/abs/2404.07386) a method to identify key dims in the high-dim space that explain a subset of points in the embedding. The idea is to tell you which handful of dims from the dataset can explain patterns in the embedding.
The brush selection can be useful when working with temporal or sequential patterns. Huge kudos to Andres Colubri who brought up that idea and the initial implementation for regl-scatterplot (Jupyter Scatter's rendering engine github.com/flekschas/re...).
A new version of Jupyter Scatter (jupyter-scatter.dev) is out: v0.21.0. 🥳 This version introduces fun new ways to select points using either a brush or rectangle. You can now also more easily extend or reduce a selection by holding down the meta (CMD on macOS) key or alt key respectively.
See the full changelog at github.com/flekschas/ju... and let me know what you think!
And most importantly, Guten Rutsch and Happy New Year! 🥳
Under the hood, we've modernized the tooling by switching to Biome for JS code formatting and uv for Python package management. The min Python version is now 3.9.
Again thanks to @manzt.sh for taking on the switch to uv. And a big shoutout to the wonderful folks behind Biome and uv 🙏
To give Jupyter Scatter a try is now easier than ever:
➡️ `uvx jupyter-scatter demo`
This fantastic feature is shamelessly copied from @manzt.sh who implemented it for cev github.com/OzetteTech/c.... Huuuge thanks Trevor 🙏
Another addition is the ability to change the points' zoom scale function to constant or linear. By default, points are scaled up using the inverse hyperbolic sine to reveal overlapping points as you zoom in. Finally, you can also now lock the camera view with to avoid zooming in as you scroll.
My first 🦋 post before 2024 is a wrap 🫣: here is a new version of Jupyter Scatter! 🎉 This release adds support for full-screen mode, which makes it easier to explore large plots. You can also use it to create custom high-resolution exports.
➡️ github.com/flekschas/ju...
📚 jupyter-scatter.dev
Here it is!
The big thing is the (experimental) Environment API: our hope is it can serve as the foundation for frameworks that run code in multiple different JS runtimes.
The internal module runner refactors also pave the way for some interesting things down the road...