React components that AI can summon on demand
Tambo turns your Zod-scribed React components into an LLM-renderable UI toolkit, complete with streaming props and MCP plumbing.

What it does
Tambo is a fullstack React SDK plus backend that lets an LLM choose and render your components in real time. You register components with Zod schemas; the agent calls them like functions and Tambo streams the props. “Show me sales by region” becomes your <Chart>. “Add a task” updates your <TaskBoard>. The SDK handles streaming, cancellation, reconnection, and conversation state. You bring your own API key; Tambo Cloud hosts the backend, or you self-host via Docker.
The interesting bit
The schema-to-tool pipeline is the quiet engine. Your Zod props become LLM tool definitions automatically—no hand-written OpenAPI specs, no manual mapping. Tambo also distinguishes between one-shot “generative” components (charts, summaries) and persistent “interactable” ones (task boards, notes) that survive across turns. That statefulness is notably absent from Vercel AI SDK and Assistant UI, per Tambo’s own comparison table.
Key highlights
- MCP built-in: Full Model Context Protocol support—tools, prompts, elicitations, sampling—connecting to Linear, Slack, databases, or custom servers.
- Client-side tools: Declare browser-local functions (DOM manipulation, authenticated fetches) as Zod-schematized tools; the AI calls them automatically.
- Multi-provider: OpenAI, Anthropic, Gemini, Mistral, Cerebras, or any OpenAI-compatible endpoint.
- Auth-aware:
userKeyfor server/trusted contexts,userToken(OAuth) for client-side identity. - Self-hostable: MIT-licensed SDK and backend; Apache-2.0 for the API workspace.
Caveats
- The comparison table is self-reported; verify claims like “experimental” MCP status in Vercel AI SDK against current docs.
- Some workspaces use Apache-2.0, not MIT—check
apps/api/LICENSEif license purity matters. - “Plenty of credits” for Tambo Cloud is vague; actual limits aren’t stated in the README.
Verdict
Worth a look if you’re building React apps where the UI should adapt to user intent rather than routing them through fixed flows. Skip it if you just need a chat widget—this is for full-app generative UI control.