ggui
OfficialClick on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@gguicreate a drag-and-drop task manager board"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
๐ง Active development โ pre-1.0. All 32
@ggui-ai/*packages ship in lockstep minor waves โ the badges below show the current one; the protocol is a draft and may still change between waves. Pin exact versions (see badges below) and watch Releases for each wave's notes;v1.0marks the protocol freeze.
Agents describe what they need in natural language; ggui generates ephemeral, interactive interfaces over MCP. No frontend code, no React templates, no custom components โ agents talk, users see UI.
This repo is the open protocol + reference runtime. Self-host with ggui serve; pair against any MCP-aware agent runtime (Claude Desktop, Claude Code, claude.ai, Cursor, ChatGPT desktop, Goose, your own). Zero account required, zero managed infrastructure required, zero cloud dependency.
Quick start โ pick your path
1. Composed golden path โ platform-composed (guuey-sdk)
One flow from a guuey.json to a rendered, interactive todo UI โ every piece a published SDK. guuey's dev tooling runs the agent (@guuey/cli + @guuey/worker), the ggui runtime is the dev router's injected MCP default, and the web client talks to the router with @guuey/agent-client. This path is platform-composed: it drives the ggui protocol through guuey's published SDKs. The protocol itself has no guuey dependency โ paths 2โ4 run without it, and the framework-native samples (path 2) stay first-class.
Prerequisites: Node.js 22+, pnpm, and an ANTHROPIC_API_KEY (one key drives both the agent and ggui's UI generation).
git clone https://github.com/ggui-ai/ggui && cd ggui
pnpm install # workspace deps โ `guuey dev` spawns the colocated
# todo MCP from samples/mcp-servers/todo
export ANTHROPIC_API_KEY=sk-ant-โฆ # in every terminal below
# terminal 1 โ the ggui runtime MCP (guuey's dev router injects ggui โ this port)
npx -y @ggui-ai/cli serve --mcp-only # http://127.0.0.1:6781/mcp
# terminal 2 โ the agent half: guuey.json + a Claude agent worker
cd samples/agents/with-guuey
npm install
npm run dev # guuey dev --serve โ http://localhost:6790
# terminal 3 โ the web half: chat + rendered ggui cards
cd samples/apps/with-guuey-web
npm install
npm run dev # http://127.0.0.1:6890Browser-based clients. Pages served from localhost reach the MCP
endpoint out of the box. A page on any other origin โ a deployed site,
an Electron renderer โ must be allowlisted:
ggui serve --browser-origin https://app.example.com(repeatable; or GGUI_BROWSER_ORIGINS=a,b). The allowlist drives both
MCP-wire Origin validation and the CORS response headers, so one flag
covers both. It is not authentication โ /mcp still requires a bearer.
Non-browser clients (Claude Desktop, agents, curl) are unaffected: they
connect server-to-server and ignore CORS entirely.
Open http://127.0.0.1:6890 and ask for your todos: the agent calls the todo MCP, renders an interactive todo UI through ggui, and your clicks flow back to the agent. Per-sample detail (ports, env vars, known limitations): samples/agents/with-guuey ยท samples/apps/with-guuey-web. Prefer a scaffolded start? npx @guuey/create-agentic-app scaffolds a guuey agentic app of the same shape (agent + MCP + ggui + web) in one command.
Dev-server trust:
guuey devruns your agent unjailed with your environment โ standard dev-server trust; run it in a container if that posture doesn't fit.
2. Bring your own framework โ build from the framework-native samples
The framework-native path to ship an agent end-to-end โ no guuey dependency. The canonical samples are complete, runnable pieces of an agentic app โ an agent backend per SDK, a stock ggui server config, a reference MCP server, and a web client. Compose them into a workspace and run the whole thing:
git clone https://github.com/ggui-ai/ggui && cd ggui
# your app = four samples composed into one pnpm workspace:
# samples/agents/<sdk>/ โ servers/agent/ (claude-agent-sdk | openai-agents-sdk | google-adk)
# samples/gguis/default/ โ servers/ggui/ (stock `ggui serve` config)
# samples/mcp-servers/todo/ โ servers/mcps/todo/ (reference domain MCP)
# samples/apps/ggui-basic-web/ โ apps/web/ (Vite + React chat client)
# (e2e/samples-render/app-shell/ is the reference root wrapper โ package.json
# with the dev scripts + pnpm-workspace.yaml + the `pnpm dev` orchestrator.)
pnpm install
# put your LLM API key in .env.local, then:
pnpm dev # starts ggui + MCP servers + agent + web, then opens the apppnpm dev brings all four services up together and opens http://localhost:6890 once it's ready โ so you never have to guess which port to visit (server logs are hidden by default; pnpm dev --verbose streams them). The full loop runs locally: you type โ the agent calls domain tools and renders a React UI โ you click in that UI โ the agent reacts. Each sample carries its own README with standalone run instructions.
Building a hosted agent instead? See guuey.com โ the managed platform for running agents (not a drop-in replacement for the samples path).
3. Self-host the OSS MCP server + test from claude.ai
For testing the ggui protocol against a real chat host. Localhost won't work from claude.ai โ you need a public HTTPS URL, which cloudflared provides for free.
# terminal 1 โ boot the OSS MCP server
npm install -g @ggui-ai/cli
ANTHROPIC_API_KEY=sk-โฆ ggui serve --mcp-only # http://127.0.0.1:6781/mcp
# terminal 2 โ expose it to the public internet (no Cloudflare account needed)
cloudflared tunnel --url http://127.0.0.1:6781 # prints https://<random>.trycloudflare.comBrowser-based clients. Pages served from localhost reach the MCP
endpoint out of the box. A page on any other origin โ a deployed site,
an Electron renderer โ must be allowlisted:
ggui serve --browser-origin https://app.example.com(repeatable; or GGUI_BROWSER_ORIGINS=a,b). The allowlist drives both
MCP-wire Origin validation and the CORS response headers, so one flag
covers both. It is not authentication โ /mcp still requires a bearer.
Non-browser clients (Claude Desktop, agents, curl) are unaffected: they
connect server-to-server and ignore CORS entirely.
Then in claude.ai โ Settings โ Connectors โ Add custom connector, paste https://<random>.trycloudflare.com/mcp. Ask Claude to render any UI; the server generates the component and serves it back as a rich rendered card inside the chat.
Install cloudflared via your package manager: brew install cloudflared (macOS), apt install cloudflared (Debian), or grab a binary from cloudflare.com/products/tunnel.
4. Use the hosted ggui cloud โ mcp.ggui.ai
For production, sign in at the ggui console โ create an app โ mint a connector key. Paste the bare https://mcp.ggui.ai endpoint into your chat host's connector settings โ no self-hosting, no tunnel, no key management.
Related MCP server: OpenGenUI MCP
The ggui CLI
@ggui-ai/cli ships the ggui binary โ the single entrypoint for every OSS workflow. Five verbs cover the full lifecycle:
Verb | What it does |
| Boot the OSS MCP server ( |
| Local UI registry + compile-on-demand dev hub for iterating on a |
| Author + publish + install cached UI templates โ |
| Author + publish + install client-side libraries (maps, charts, camera, clipboard, anything) wrapped as ggui hooks/components so the generator can use them โ |
| Validate and inspect |
Plus auth verbs for the hosted path: ggui login / ggui logout / ggui whoami / ggui keys. Run ggui --help for the top-level overview, or ggui <verb> --help for per-command flags.
Full CLI reference: @ggui-ai/cli README.
Runnable examples
samples/ holds end-to-end examples you can clone:
samples/gguis/โ ready-to-run project configs (default,leaflet-demo,mapbox-demo,canvas-demo) showing how aggui.jsonis shaped.samples/agents/โ framework-native reference agents per SDK (Claude Agent SDK, OpenAI Agents SDK, Google ADK) talking to ggui as an MCP server.samples/agents/with-guuey+samples/apps/with-guuey-webโ the platform-composed (guuey-sdk) golden-path pair: aguuey.jsonClaude agent served by@guuey/cli's dev router, and a web client on@guuey/agent-clientrendering ggui cards (see path 1 above).samples/gadgets/โ example component / hook gadgets for the marketplace.samples/mcp-servers/โ minimal domain MCP servers (e.g. a todo server) you can pair against.
Honest scope today
โ Local server, viewer, cookie-authenticated WebSocket subscribe โ ack all work end-to-end.
โ
ggui_rendermints shortCodes and lands on the same-origin viewer.โ Component-code generation is wired on the OSS path via
createUiGenerator()from@ggui-ai/ui-gen(the same harness the hosted runtime uses). When no BYOK credentials resolve (noANTHROPIC_API_KEY/OPENAI_API_KEY/ etc.),ggui_renderreturns anisError: truetool result whosestructuredContent.error.codeisNO_CREDENTIALS; supply a key to get full generation locally.๐ Default auth is dev-mode (any non-empty bearer โ
builder). Swap in a realAuthAdapterviacreateGguiServer({ auth })before exposing beyond127.0.0.1.
How it works
โโโโโโโโโโโ MCP Tools โโโโโโโโโโโโ WebSocket โโโโโโโโโโโโ
โ Your โ โโโโโโโโโโโโโโโโโ โ ggui โ โโโโโโโโโโโโโโโโโ โ User's โ
โ Agent โ ggui_render โ server โ real-time UI โ browser โ
โ โ ggui_update โ โ updates โ โ
โ โ โโโโโโโโโโโโโโโโโ โ โ โโโโโโโโโโโโโโโโโ โ โ
โ โ user events โ โ clicks, forms โ โ
โโโโโโโโโโโ โโโโโโโโโโโโ โโโโโโโโโโโโYour agent uses MCP tools to push UIs and receive user events. The protocol is defined by @ggui-ai/protocol; the reference server lives in @ggui-ai/mcp-server; embedding host-helpers ship in @ggui-ai/mcp-apps-react (web) and @ggui-ai/mcp-apps-react-native (React Native).
MCP tools (primary surface)
Tool | Description |
| Render a UI for the user (natural-language prompt + data) |
| Update props on an existing UI (no regeneration, ~200ms) |
| Initial session bootstrap |
| Long-poll for user gestures (clicks, form submits) |
Plus a blueprint family (ggui_search_blueprints, ggui_render_blueprint, ggui_list_featured_blueprints, โฆ) for catalogue lookups. Full reference: MCP Protocol Reference.
Zero agent code (MCP config only)
If your agent runtime supports MCP natively, skip the SDK entirely. Add ggui serve as an MCP server:
{
"mcpServers": {
"ggui": {
"url": "http://127.0.0.1:6781/mcp",
"headers": { "Authorization": "Bearer dev" }
}
}
}The runtime's native tool-calling loop discovers ggui_render, ggui_update, ggui_consume, and the blueprint catalogue tools directly. Working examples per framework: Claude, OpenAI, Gemini, generic MCP.
Embedding UIs
On web, <AppRenderer> โ imported directly from @mcp-ui/client, the spec-canonical MCP Apps host โ is the canonical consumer primitive, driven by ggui's useMcpAppsChat hook from @ggui-ai/mcp-apps-react. <AppRenderer> mounts each ggui render inside a sandboxed iframe; the iframe owns the WebSocket lifecycle and renderer bundle, so host code never touches render internals or WebSocket machinery directly.
npm install @ggui-ai/mcp-apps-react @mcp-ui/clientimport { AppRenderer } from "@mcp-ui/client";
import { useMcpAppsChat } from "@ggui-ai/mcp-apps-react/chat-helpers";
function Chat({ agentUrl, sandboxUrl }: { agentUrl: string; sandboxUrl: string }) {
const { sessions, send, handleAppMessage } = useMcpAppsChat({
chatEndpoint: `${agentUrl}/agent`,
});
// render `entries` as chat bubbles; call send(prompt) to talk to the agent.
// onReadResource / onCallTool relay through your agent backend โ see the
// full runnable reference below for the wiring.
const latest = sessions[sessions.length - 1];
return latest ? (
<AppRenderer
toolName="ggui_render"
sandbox={{ url: new URL(sandboxUrl) }}
html={latest.inlinedResource?.text}
onMessage={handleAppMessage}
onError={(err) => console.warn("render error", err)}
/>
) : null;
}The complete runnable reference โ including auth, sandbox relay, and tool-call wiring โ is the ggui-basic-web sample. Start there.
React Native's equivalent host is <McpAppIframe> from @ggui-ai/mcp-apps-react-native โ RN-only; there is no <McpAppIframe> on web.
Implementer references for the full protocol: React host helpers, Architecture overview, MCP Apps support, WebSocket protocol.
For non-React frameworks, embed the viewer directly:
<iframe src="http://127.0.0.1:6781/r/{shortCode}" width="100%" height="600"></iframe>Packages
Consumer-facing surface โ what you npm install:
Package | Purpose | npm |
The | ||
Reference OSS server (programmatic embedding) | ||
React web host helpers โ | ||
React Native host helpers โ | ||
Wire types (events, sessions, WebSocket, MCP envelopes) | ||
Author wrappers for 3rd-party libs (Leaflet, Mapbox, โฆ) |
Plus 27 supporting packages under packages/ spanning the runtime (@ggui-ai/mcp-server-core, @ggui-ai/mcp-server-handlers, @ggui-ai/ui-gen, @ggui-ai/negotiator), authoring (@ggui-ai/project-config, @ggui-ai/ui-registry), registry (@ggui-ai/registry-core, @ggui-ai/registry-server), and dev tooling (@ggui-ai/dev-stack, @ggui-ai/agent-runtime, @ggui-ai/console). See each subdirectory for details.
Hosted providers
Self-hosting is the primary path. For managed infrastructure (no server to run, no LLM key to wire, hosted dashboards), the first-party hosted endpoint at mcp.ggui.ai is live โ see path 4 above. Guuey hosts an upgraded experience built on top of the protocol. The protocol is identical on all paths โ you can move between self-hosted and hosted without rewriting anything against this SDK.
Contributing
See CONTRIBUTING.md. Issues + PRs welcome.
License
Apache 2.0 โ see LICENSE.
This server cannot be deployed
Maintenance
Related MCP Connectors
Deploy AI-generated HTML/CSS/JS to instant public HTTPS URLs from any MCP-compatible agent.
One message in, a full agentic application out: website and MCP app, live. Built from any AI client.
Give any MCP-compatible AI assistant a builder for live, hosted web tools and workflows.
MCP server for building and testing AI agents with multi-model experimentation and insights.
Related MCP Servers
- AlicenseCqualityDmaintenanceA Model Context Protocol server that enables AI agents to generate, fetch, and manage UI components through natural language interactions.39 npm7ISC
- AlicenseNot gradedqualityDmaintenanceAn MCP server that turns natural-language descriptions into interactive HTML/JS UI components, leveraging OpenGenerativeUI and AG-UI protocol.10MIT
- AlicenseAqualityDmaintenanceEnables AI agents to render interactive user interfaces such as forms, dashboards, charts, tables, and wizards directly in MCP-compatible clients. Supports structured data collection and richer interactions beyond text responses.6MIT
- AlicenseNot gradedqualityBmaintenanceAn MCP server that lets coding agents ask their human via interactive UIs like sliders, forms, diffs, and live previews.MIT