MCP
Let a coding agent look the web components up in the registry, and add them, through the shadcn MCP server.
The web collection is a shadcn registry, so the MCP server for it is shadcn's own. Pointed at the registry, it lets an agent list the components, read one in full with its source, and get the command that adds it, without leaving the editor.
It reads the registry. It does not know your project's conventions, which is what the skill is for. Most projects want both.
Add the registry
The server reads the registries named in components.json. Add PanelUI's once:
{
"registries": {
"@panelui": "https://panelui.dev/r/web/{name}.json"
}
}That is also what lets you add a component by name:
npx shadcn@latest add @panelui/planetpnpm dlx shadcn@latest add @panelui/planetyarn dlx shadcn@latest add @panelui/planetbunx shadcn@latest add @panelui/planetStart the server
npx shadcn@latest mcp init --client claudepnpm dlx shadcn@latest mcp init --client claudeyarn dlx shadcn@latest mcp init --client claudebunx shadcn@latest mcp init --client claude--client is claude, cursor, vscode, codex or opencode. The command writes the server
into that client's config file and merges with whatever is there.
By hand, it is:
{
"mcpServers": {
"shadcn": {
"command": "npx",
"args": ["shadcn@latest", "mcp"]
}
}
}| Client | Config file |
|---|---|
| Claude Code | .mcp.json |
| Cursor | .cursor/mcp.json |
| VS Code | .vscode/mcp.json |
Restart the client after adding it.
What to ask
The server answers for every registry in components.json, so name PanelUI when you mean it.
- "List the components in the @panelui registry."
- "Show me the KPI component from @panelui and its props."
- "Add the Lane Board from @panelui and put my tasks in it."
Without the server
The same lookups are CLI commands, and an agent that can run a shell can use them:
npx shadcn@latest search @panelui
npx shadcn@latest view @panelui/kpi