// mcp server · stdio · 3 tools
v0's model behind an MCP server. Prompt a component, iterate a chat, deploy to production — over stdio, in any MCP client.
{
"mcpServers": {
"v0": {
"command": "npx",
"args": ["-y", "v0-mcp-server"],
"env": {
"V0_API_KEY": "your-key"
}
}
}
}claude mcp add v0 -e V0_API_KEY=your-key -- npx -y v0-mcp-serverThree tools over MCP, spoken over stdio. Your editor or agent sends a tool name and arguments; the server returns structured responses.
Prompt → UI. Returns chatId, webUrl, and files (path + content). Pass chatId to iterate an existing chat.
Generic {resource, action, params} dispatcher — deploy, chats, versions, projects, env vars, reports.
On-demand manifest of every resource, action, and parameter. Ask before an unfamiliar request.
Call generate with a prompt. The response includes chatId, webUrl, and files (path + content).
{
"tool": "generate",
"arguments": {
"prompt": "A responsive card component with an avatar, name, role, and follow button."
}
}// components/profile-card.tsx
import { Avatar, AvatarImage, AvatarFallback }
from "@/components/ui/avatar"
import { Button } from "@/components/ui/button"
interface ProfileCardProps {
name: string
role: string
avatarUrl?: string
}
export function ProfileCard({
name,
role,
avatarUrl,
}: ProfileCardProps) {
return (
<div className="flex items-center justify-between
rounded-xl border border-border bg-card p-4
shadow-sm">
<div className="flex items-center gap-3">
<Avatar>
<AvatarImage src={avatarUrl} alt={name} />
<AvatarFallback>
{name.slice(0, 2).toUpperCase()}
</AvatarFallback>
</Avatar>
<div>
<p className="text-sm font-medium
text-foreground">{name}</p>
<p className="text-xs text-muted-foreground">
{role}
</p>
</div>
</div>
<Button size="sm" variant="outline">
Follow
</Button>
</div>
)
}