Really enjoying this talk and panel from @domfarolino@liadyosef and @ochafik at AGNTCon!
They’re not just talking about WebMCP or MCP Apps, but also how they can interact together!
If you’re not familiar with MCP Apps, here’s some documentation
https://t.co/EMCrDCzb0v
I am very excited about the new WebMCP feature we announced at Meta Connect!
It allows Meta AI to seamlessly interact with your web app on your glasses, perfectly bridging the user, the AI agent, and your web app.
Want to learn more? Here is the presentation by @_minglin_
🎬 Next on The Agentic Web livestream: WebMCP Skills
We have new experimental skills in the webmcp-tools repo 🧪
Join @andreban and me live to see them design, test and build WebMCP tools!
📺 https://t.co/qMfXctTZIv , Friday Oct 23rd, 5pm CET, 8am PDT
@b1tr0t It doesn't solve the gotcha that you can't throw any error and both end up being quite similar, as you'd throw a ToolCallError in exactly the same places you'd return and object with isError, but now you have different treatment for different error types.
⚠️ A #WebMCP gotcha worth knowing about: throwing errors inside native registerTool() handlers.
The browser hides your message and the agent only sees "DOMException: UnknownError". Return the error as a result instead, and the agent can fix its own call.
@b1tr0t Some of this comes to tool design, and user generated content can be isolated in a separate tool. This design makes a lot of sense for things like product reviews, for instance. The freeform notes is tricky indeed, and a per-fiels hint could help.
🔒 "It's our own database, so it's safe" is a very natural thing to assume. With #WebMCP agents reading that data, it's worth a second look.
WebMCP has a hint for this case, and JupyterLite is a nice example of using it.
I'm excited to share that WebMCP is now enabled for MCP Apps in ChatGPT Desktop! 🚀
@OpenAI is also collaborating with https://t.co/WAjlykp7dX to make WebMCP the default way for agents to interact with MCP Apps.
Another big step toward a more seamless agentic web!
Set untrustedContentHint: true on any tool that returns user-written text.
That signals the host agent that the output came from an untrusted source, so the host can isolate it as data instead of treating it as instructions.
JupyterLite sets the hint on all 19 tools that read notebook cells.
@b1tr0t Would this mean something like catch an error, then re-throwing as something like a ToolCallError? That is, you'd still need the catch / return something else flow, but in this case a different error?
@sebasmediaprod@OpenAI Congratulations, and thanks for creating such a great app!
I've been analyzing what the Hackathon winners did well and just mentioned Roque Nights as a good example of handling errors here https://t.co/tr6WEiaJba
Two hackathon winners that do this well:
📓 JupyterLite WebMCP returns STALE_CELL with the cell's new content, so the agent can retry without another read.
🔭 Roque Nights puts suggestions in its hints: "Target not found. Did you mean Messier 31?"