branch:
client.tsx
5915 bytesRaw
import { createRoot } from "react-dom/client";
import { ThemeProvider } from "@cloudflare/agents-ui/hooks";
import { ModeToggle, PoweredByAgents } from "@cloudflare/agents-ui";
import { Badge, Surface, Text } from "@cloudflare/kumo";
import {
ChatCircleDotsIcon,
InfoIcon,
TerminalIcon,
CursorClickIcon,
ArrowSquareOutIcon
} from "@phosphor-icons/react";
import "./styles.css";
const MCP_URL =
typeof window !== "undefined" ? `${window.location.origin}/mcp` : "/mcp";
function App() {
return (
<div className="h-full flex flex-col bg-kumo-base">
<header className="px-5 py-4 border-b border-kumo-line">
<div className="max-w-2xl mx-auto flex items-center justify-between">
<div className="flex items-center gap-3">
<ChatCircleDotsIcon
size={22}
className="text-kumo-accent"
weight="bold"
/>
<h1 className="text-lg font-semibold text-kumo-default">
MCP Elicitation
</h1>
<Badge variant="secondary">v1.0.0</Badge>
</div>
<ModeToggle />
</div>
</header>
<main className="flex-1 overflow-auto p-5">
<div className="max-w-2xl mx-auto space-y-6">
<Surface className="p-4 rounded-xl ring ring-kumo-line">
<div className="flex gap-3">
<InfoIcon
size={20}
weight="bold"
className="text-kumo-accent shrink-0 mt-0.5"
/>
<div>
<Text size="sm" bold>
Elicitation Demo
</Text>
<span className="mt-1 block">
<Text size="xs" variant="secondary">
This MCP server uses{" "}
<code className="text-xs px-1 py-0.5 rounded bg-kumo-elevated font-mono">
this.elicitInput()
</code>{" "}
to request additional user input mid-tool-call. When you
call the “increase-counter” tool, the server
pauses and asks <em>how much</em> to increase by — the MCP
client prompts you and sends the answer back.
</Text>
</span>
</div>
</div>
</Surface>
<Surface className="p-6 rounded-xl ring ring-kumo-line text-center">
<CursorClickIcon
size={48}
weight="duotone"
className="text-kumo-accent mx-auto mb-4"
/>
<Text size="sm" bold>
Connect from an MCP client
</Text>
<span className="mt-2 block max-w-md mx-auto">
<Text size="xs" variant="secondary">
Elicitation requires an MCP client that supports the{" "}
<code className="text-xs px-1 py-0.5 rounded bg-kumo-elevated font-mono">
elicitation/create
</code>{" "}
protocol method. The browser tool tester cannot handle
elicitation prompts — connect from one of the clients below
instead.
</Text>
</span>
<div className="mt-6 space-y-2">
<Surface className="p-3 rounded-lg ring ring-kumo-line text-left">
<div className="flex items-center justify-between">
<div className="flex items-center gap-3">
<TerminalIcon
size={20}
weight="bold"
className="text-kumo-subtle"
/>
<div>
<Text size="sm" bold>
MCP Inspector
</Text>
<span className="block">
<Text size="xs" variant="secondary">
npx @modelcontextprotocol/inspector
</Text>
</span>
</div>
</div>
<a
href="https://github.com/modelcontextprotocol/inspector"
target="_blank"
rel="noopener noreferrer"
className="text-kumo-accent"
>
<ArrowSquareOutIcon size={18} />
</a>
</div>
</Surface>
<Surface className="p-3 rounded-lg ring ring-kumo-line text-left">
<div className="flex items-center gap-3">
<TerminalIcon
size={20}
weight="bold"
className="text-kumo-subtle"
/>
<div>
<Text size="sm" bold>
Claude Desktop / Cursor / Windsurf
</Text>
<span className="block">
<Text size="xs" variant="secondary">
Add as a remote MCP server
</Text>
</span>
</div>
</div>
</Surface>
</div>
<Surface className="mt-6 p-3 rounded-lg bg-kumo-elevated text-left">
<Text size="xs" variant="secondary" bold>
Server URL
</Text>
<pre className="mt-1 text-sm font-mono text-kumo-default select-all">
{MCP_URL}
</pre>
</Surface>
</Surface>
</div>
</main>
<footer className="border-t border-kumo-line py-3">
<div className="flex justify-center">
<PoweredByAgents />
</div>
</footer>
</div>
);
}
createRoot(document.getElementById("root")!).render(
<ThemeProvider>
<App />
</ThemeProvider>
);