Action WireYour app’s actions. One connected assistant.
Your application registers its actions once with WebMCP. People click them. The assistant calls the same handlers, with the same permissions, and asks before anything destructive.
Your application registers its actions once with WebMCP. People click them. The assistant calls the same handlers, with the same permissions, and asks before anything destructive.
import { createAssistant, openAICompatible } from 'actionwire';
createAssistant({
model: openAICompatible({ endpoint: '/api/assistant' }),
}).mount();No second copy of your tools
The assistant discovers the schemas and handlers the page already registered. You do not write them again for the model, and the two cannot drift apart.
The browser decides, not the model
Model output is a request. Destructive tools need explicit approval, approval expires when the tool list changes, and your application authorization still applies.
Any framework, or none
The widget is a Web Component with no framework dependency. Vanilla JavaScript, React, Vue, and Svelte examples run against the same build.
Bring your own interface
The headless bridge exposes state and methods without any UI. Render the transcript, the tool cards, and the confirmations yourself.