Send 3 follow-upsdrafted by the agentNeeds OK
JDJane Doe · Acme“Recapping our pricing call…”
MRMarco Ruiz · Northwind“Sending the security doc…”
Build your MCP app's UI once with real, typed components. Synapse renders it in ChatGPT, Claude, and VS Code.
npm install @nimblebrain/synapseHere are your follow-ups, ready to send:
Self-hosted, Synapse renders your app via the Synapse API.
Build your app's UI for one host, and you've built it for one. Each speaks a different way.
window.openaiChatGPTui/* protocolClaude, VS CodeSynapse APIyour runtimeYou write real, typed React from your MCP tool's data. Synapse builds it to a single ui:// resource and renders it wherever your server is connected.
import { useToolResult, useAction } from "@nimblebrain/synapse/react";
import { Card, Stack, Inline, Heading, ListRow, Button, Badge } from "@nimblebrain/synapse/ui";
// Typed data, straight from your MCP tool
type FollowUp = { to: string; company: string };
// Real, typed React. The agent renders and drives it.
export function FollowUps() {
const data = useToolResult()?.structuredContent as { drafts: FollowUp[] };
const send = useAction();
if (!data) return null;
return (
<Card>
<Inline>
<Heading>Send {data.drafts.length} follow-ups</Heading>
<Badge tone="warning">Needs OK</Badge>
</Inline>
<Stack>
{data.drafts.map((d) => (
<ListRow key={d.to} title={d.to} meta={d.company} />
))}
</Stack>
<Button onClick={() => send("send_followups")}>Approve & send</Button>
</Card>
);
}Batteries-included components (Card, Inline, Stack, ListRow, Badge) or drop in your own React. Synapse builds it to one ui:// resource.
The three things that make build-once-run-everywhere hold up in production, not just in a demo.
Build your MCP app's UI once in typed React. Synapse renders it in ChatGPT, Claude, VS Code, and your own runtime. No per-host forks, no divergent UIs to maintain.
Your MCP app takes typed inputs from your MCP tools, so props stay honest as your server evolves. The host's agent reads and drives the UI it renders.
Works with your existing MCP / FastMCP server as-is. Start with the included component kit: cards, rows, tables, and status pills, or bring your own React.
Ship it to the public app stores, then run the exact same UI self-hosted inside your own product. One MCP app, both worlds.
What Synapse is: the UI layer. The agent, memory, and multi-tenancy come from the host you run it in, not the SDK.
Your MCP app, typed to your tools, rendered everywhere your server connects.
npm install @nimblebrain/synapse