MCP — من غير أي شغل منك
الـ shadcn MCP server شغال مع أي registry متوافق على طول. مش محتاج تعمل حاجة مخصوصة في الـ registry.
الشرط الوحيد
- الـ MCP بيطلب الفهرس، فلازم يكون فيه ملف اسمه
registryفي الـ root بتاع الـ registry. - مثال: لو الـ items على
https://nile.dev/r/[name].json، يبقى الفهرس علىhttps://nile.dev/r/registry.json، أوhttps://nile.dev/r/registryلو مش بتستخدم امتداد. - الفهرس ده لازم يكون JSON ماشي على registry schema.
المستخدم بيعمل إيه؟
أولًا: يعرّف الـ registry في components.json:
components.json
{ "registries": { "@nile": "https://nile.dev/r/{name}.json" }}ثانيًا: يضيف الـ MCP server حسب الأداة:
terminal
npx shadcn@latest mcp init --client claude # وبعدها restart لـ Claude Codenpx shadcn@latest mcp init --client cursor # وبعدها فعّل shadcn في Cursor Settingsnpx shadcn@latest mcp init --client vscode # وبعدها افتح .vscode/mcp.json واضغط Startnpx shadcn@latest mcp init --client opencode # وبعدها restart لـ OpenCode~/.codex/config.toml (Codex)
[mcp_servers.shadcn]command = "npx"args = ["shadcn@latest", "mcp"]- Codex مفيش له
init، فبتضيف الـ config بإيدك وبعدها restart. - في Claude Code تقدر تستخدم
/mcpعشان تعمل debug للـ server. - في VS Code الـ agent هو GitHub Copilot.
ثالثًا: يجرّب prompts زي دي:
- “وريني الـ components اللي في nile registry”
- “اعمل landing page من items الـ nile registry”
عشان الـ AI يستخدم الـ registry صح
- descriptions واضحة: قصيرة وبتقول الـ item بيعمل إيه وبيتستخدم إزاي.
dependenciesكاملة: عشان الـ MCP يسطّبها لوحده.registryDependencies: عشان يفهم العلاقات بين الـ items.- أسماء kebab-case وثابتة على نفس الشكل في الـ registry كله.
Open in v0
لو الـ registry public وعلى URL، أي item يتفتح في v0 بالرابط ده:
الرابط
https://v0.dev/chat/api/open?url=https://nile.dev/r/checkout-card.jsonزرار “Open in v0”
components/open-in-v0.tsx
import { Button } from "@/components/ui/button"export function OpenInV0Button({ url }: { url: string }) { return ( <Button asChild aria-label="Open in v0" className="h-8 gap-1 bg-black px-3 text-xs text-white"> <a href={`https://v0.dev/chat/api/open?url=${url}`} target="_blank" rel="noreferrer"> Open in v0 </a> </Button> )}الاستخدام
<OpenInV0Button url="https://nile.dev/r/checkout-card.json" />ولو عايز الشكل الرسمي بالـ logo، فيه صفحة Build your Open in v0 button.
الـ auth مع v0
v0 بيدعم query param بس:
الرابط
https://registry.nile.dev/r/checkout-card.json?token=xxxxxxxx- السيرفر يقرا الـ
tokenمن الـ query. - يتحقق منه.
- يرجّع 401 لو الـ token غلط أو مش موجود.
- الـ CLI وv0 الاتنين بيفهموا الـ 401 ويعرضوا رسالة مناسبة.
خلّصت الفصل لما
🧠 اختبر نفسك
١) الـ items على /r/{name}.json. الـ MCP هيدوّر على الفهرس فين؟
على /r/registry.json.
٢) item فيه cssVars واتفتح في v0. الألوان هتيجي؟
لأ. v0 مش بيدعم cssVars.
٣) registry private بـ Bearer header. ينفع مع Open in v0؟
لأ. v0 بيدعم query param token بس.