Skip to main content
Glama

@jpisnice/shadcn-ui-mcp-server

by Jpisnice
index.ts16.4 kB
import { getFramework } from "../utils/framework.js" import { getOptimizationInstructions, getPageTypeSpecificInstructions, } from "./helpers.js" // Small helper to append React Native specific notes to prompts when needed function getReactNativeNotes(context: "general" | "page" | "dashboard" | "auth" | "datatable"): string { const base = `\n\nREACT NATIVE NOTES:\n- Use React Native primitives (View, Text, Pressable, Image) — no DOM/HTML.\n- Style with NativeWind (className) or StyleSheet.create; avoid web CSS.\n- Prefer FlatList/SectionList for lists; implement virtualization/windowing.\n- Use accessibility props (accessibilityLabel, accessibilityRole, accessibilityHint) instead of ARIA.\n- For animations use react-native-reanimated; for gestures use react-native-gesture-handler.\n- Consider SafeAreaView and Platform checks for iOS/Android differences.` const extras: Record<typeof context, string> = { general: base, page: base, dashboard: base + `\n- Build grids with Flexbox styles; there is no CSS Grid.\n- Use RN-friendly chart libs (e.g., victory-native, react-native-svg + d3).\n- Data widgets often render as lists/cards rather than HTML tables.`, auth: base + `\n- Use TextInput with secureTextEntry for passwords; manage keyboard overlaps with KeyboardAvoidingView.\n- Consider react-hook-form with a RN resolver or controlled inputs.\n- Deep linking/redirects for OAuth providers may require additional setup.`, datatable: base + `\n- RN does not have native HTML tables; implement a DataTable with FlatList/FlashList.\n- Use item separators and row components; handle large datasets with virtualization.\n- For row actions, use Pressable/Swipeable patterns and action sheets.`, } return extras[context] } /** * List of prompts metadata available in this MCP server * Each prompt must have a name, description, and arguments if parameters are needed */ export const prompts = { "build-shadcn-page": { name: "build-shadcn-page", description: "Generate a complete shadcn/ui page using v4 components and blocks", arguments: [ { name: "pageType", description: "Type of page to build (dashboard, login, calendar, sidebar, products, custom)", required: true, }, { name: "features", description: "Specific features or components needed (comma-separated)", }, { name: "layout", description: "Layout preference (sidebar, header, full-width, centered)", }, { name: "style", description: "Design style (minimal, modern, enterprise, creative)", }, ], }, "create-dashboard": { name: "create-dashboard", description: "Create a comprehensive dashboard using shadcn/ui v4 blocks and components", arguments: [ { name: "dashboardType", description: "Type of dashboard (analytics, admin, user, project, sales)", required: true, }, { name: "widgets", description: "Dashboard widgets needed (charts, tables, cards, metrics)", }, { name: "navigation", description: "Navigation style (sidebar, top-nav, breadcrumbs)", }, ], }, "create-auth-flow": { name: "create-auth-flow", description: "Generate authentication pages using shadcn/ui v4 login blocks", arguments: [ { name: "authType", description: "Authentication type (login, register, forgot-password, two-factor)", required: true, }, { name: "providers", description: "Auth providers (email, google, github, apple)", }, { name: "features", description: "Additional features (remember-me, social-login, validation)", }, ], }, "optimize-shadcn-component": { name: "optimize-shadcn-component", description: "Optimize or enhance existing shadcn/ui components with best practices", arguments: [ { name: "component", description: "Component name to optimize", required: true, }, { name: "optimization", description: "Type of optimization (performance, accessibility, responsive, animations)", }, { name: "useCase", description: "Specific use case or context for the component", }, ], }, "create-data-table": { name: "create-data-table", description: "Create advanced data tables with shadcn/ui components", arguments: [ { name: "dataType", description: "Type of data to display (users, products, orders, analytics)", required: true, }, { name: "features", description: "Table features (sorting, filtering, pagination, search, selection)", }, { name: "actions", description: "Row actions (edit, delete, view, custom)", }, ], }, } /** * Map of prompt names to their handler functions * Each handler generates the actual prompt content with the provided parameters */ export const promptHandlers = { "build-shadcn-page": ({ pageType, features = "", layout = "sidebar", style = "modern", }: { pageType: string features?: string layout?: string style?: string }) => { const framework = getFramework() return { messages: [ { role: "user", content: { type: "text", text: `Create a complete ${pageType} page using shadcn/ui v4 components and blocks for ${framework}. REQUIREMENTS: - Framework: ${framework} - Page Type: ${pageType} - Features: ${features || "Standard features for this page type"} - Layout: ${layout} - Design Style: ${style} INSTRUCTIONS: 1. Use the MCP tools to explore available v4 blocks for this page type: - Use 'list_blocks' to see available categories - Use 'get_block' to fetch specific block implementations 2. Build the page following these principles: - Use shadcn/ui v4 components and blocks as building blocks - Ensure responsive design (${framework === "react-native" ? "use NativeWind or StyleSheet" : "use Tailwind CSS classes"}) - Implement proper TypeScript types - Follow ${framework} best practices and conventions - Include proper accessibility attributes 3. For ${pageType} pages specifically: ${getPageTypeSpecificInstructions(pageType)} 4. Code Structure: - Create a main page component using ${framework} patterns - Use sub-components for complex sections - Include proper imports from shadcn/ui registry - Add necessary state management with ${framework} best practices - Include proper error handling 5. Styling Guidelines: - Use consistent spacing and typography - Implement ${style} design principles - Ensure dark/light mode compatibility - Use shadcn/ui design tokens ${getFramework() === "react-native" ? getReactNativeNotes("page") : ""} Please provide complete, production-ready ${framework} code with proper imports and TypeScript types.`, }, }, ], } }, "create-dashboard": ({ dashboardType, widgets = "charts,tables,cards", navigation = "sidebar", }: { dashboardType: string widgets?: string navigation?: string }) => { const framework = getFramework() return { messages: [ { role: "user", content: { type: "text", text: `Create a comprehensive ${dashboardType} dashboard using shadcn/ui v4 blocks and components for ${framework}. REQUIREMENTS: - Framework: ${framework} - Dashboard Type: ${dashboardType} - Widgets: ${widgets} - Navigation: ${navigation} INSTRUCTIONS: 1. First, explore available dashboard blocks: - Use 'list_blocks' with category="dashboard" to see available dashboard blocks - Use 'get_block' to examine dashboard-01 and other dashboard implementations - Study the structure and component usage 2. Dashboard Structure: - Implement ${navigation} navigation using appropriate shadcn/ui components - Create a responsive grid layout for widgets - Include proper header with user menu and notifications - Add breadcrumb navigation 3. Widgets to Include: ${widgets .split(",") .map((widget) => `- ${widget.trim()} with real-time data simulation`) .join("\n ")} 4. Key Features: - Responsive design that works on mobile, tablet, and desktop - Interactive charts using a charting library compatible with shadcn/ui - Data tables with sorting, filtering, and pagination - Modal dialogs for detailed views - Toast notifications for user feedback 5. Data Management: - Create mock data structures for ${dashboardType} - Implement state management with ${framework} best practices - Add loading states and error handling - Include data refresh functionality 6. Accessibility: - Proper ARIA labels and roles - Keyboard navigation support - Screen reader compatibility - Color contrast compliance ${getFramework() === "react-native" ? getReactNativeNotes("dashboard") : ""} Provide complete ${framework} code with all necessary imports, types, and implementations.`, }, }, ], } }, "create-auth-flow": ({ authType, providers = "email", features = "validation", }: { authType: string providers?: string features?: string }) => { const framework = getFramework() return { messages: [ { role: "user", content: { type: "text", text: `Create a complete ${authType} authentication flow using shadcn/ui v4 login blocks and components for ${framework}. REQUIREMENTS: - Framework: ${framework} - Auth Type: ${authType} - Providers: ${providers} - Features: ${features} INSTRUCTIONS: 1. Explore login blocks first: - Use 'list_blocks' with category="login" to see available login blocks - Use 'get_block' to examine login-01, login-02, etc. implementations - Study different authentication patterns and layouts 2. Authentication Components: - Form validation using ${framework} best practices - Input components with proper error states - Loading states during authentication - Success/error feedback with toast notifications 3. Providers Implementation: ${providers .split(",") .map( (provider) => `- ${provider.trim()}: Implement ${provider.trim()} authentication UI` ) .join("\n ")} 4. Security Features: - Form validation with proper error messages - Password strength indicator (if applicable) - CSRF protection considerations - Secure form submission patterns 5. UX Considerations: - Smooth transitions between auth states - Clear error messaging - Progressive enhancement - Mobile-friendly design - Remember me functionality (if applicable) 6. Form Features: ${features .split(",") .map( (feature) => `- ${feature.trim()}: Implement ${feature.trim()} functionality` ) .join("\n ")} 7. Layout Options: - Choose appropriate layout from available login blocks - Center-aligned forms with proper spacing - Background images or gradients (optional) - Responsive design for all screen sizes ${getFramework() === "react-native" ? getReactNativeNotes("auth") : ""} Provide complete ${framework} authentication flow code with proper TypeScript types, validation, and error handling.`, }, }, ], } }, "optimize-shadcn-component": ({ component, optimization = "performance", useCase = "general", }: { component: string optimization?: string useCase?: string }) => { const framework = getFramework() return { messages: [ { role: "user", content: { type: "text", text: `Optimize the ${component} shadcn/ui component for ${optimization} and ${useCase} use case in ${framework}. REQUIREMENTS: - Framework: ${framework} - Component: ${component} - Optimization Focus: ${optimization} - Use Case: ${useCase} INSTRUCTIONS: 1. First, analyze the current component: - Use 'get_component' to fetch the ${component} source code - Use 'get_component_demo' to see current usage examples - Use 'get_component_metadata' to understand dependencies 2. Optimization Strategy for ${optimization}: ${getOptimizationInstructions(optimization, framework)} 3. Use Case Specific Enhancements for ${useCase}: - Analyze how ${component} is typically used in ${useCase} scenarios - Identify common patterns and pain points - Suggest improvements for better developer experience 4. Implementation: - Provide optimized component code - Include performance benchmarks or considerations - Add proper TypeScript types and interfaces - Include usage examples demonstrating improvements 5. Best Practices: - Follow ${framework} performance best practices - Implement ${framework} optimization patterns where needed - Ensure backward compatibility - Add comprehensive prop validation 6. Testing Considerations: - Suggest test cases for the optimized component - Include accessibility testing recommendations - Performance testing guidelines Provide the optimized ${framework} component code with detailed explanations of improvements made.`, }, }, ], } }, "create-data-table": ({ dataType, features = "sorting,filtering,pagination", actions = "edit,delete", }: { dataType: string features?: string actions?: string }) => { const framework = getFramework() return { messages: [ { role: "user", content: { type: "text", text: `Create an advanced data table for ${dataType} using shadcn/ui v4 components in ${framework}. REQUIREMENTS: - Framework: ${framework} - Data Type: ${dataType} - Features: ${features} - Actions: ${actions} INSTRUCTIONS: 1. Explore table components: - Use 'get_component' for 'table' to see the base table implementation - Use 'get_component_demo' for 'table' to see usage examples - Look for any existing table blocks in the blocks directory 2. Table Structure: - Create a reusable DataTable component using ${framework} patterns - Define proper TypeScript interfaces for ${dataType} data - Implement column definitions with proper typing - Add responsive table design 3. Features Implementation: ${features .split(",") .map((feature) => { const featureInstructions: Record<string, string> = { sorting: "- Column sorting (ascending/descending) with visual indicators", filtering: "- Global search and column-specific filters", pagination: "- Page-based navigation with configurable page sizes", search: "- Real-time search across all columns", selection: "- Row selection with bulk actions support", } return ( featureInstructions[feature.trim()] || `- ${feature.trim()}: Implement ${feature.trim()} functionality` ) }) .join("\n ")} 4. Row Actions: ${actions .split(",") .map( (action) => `- ${action.trim()}: Implement ${action.trim()} action with proper confirmation dialogs` ) .join("\n ")} 5. Data Management: - Create mock data for ${dataType} - Implement data fetching patterns using ${framework} best practices - Add loading states and error handling - Add optimistic updates for actions - Include data validation 6. UI/UX Features: - Loading skeletons during data fetch - Empty states when no data is available - Error states with retry functionality - Responsive design for mobile devices - Keyboard navigation support 7. Advanced Features: - Column resizing and reordering - Export functionality (CSV, JSON) - Bulk operations - Virtual scrolling for large datasets (if needed) ${getFramework() === "react-native" ? getReactNativeNotes("datatable") : ""} Provide complete ${framework} data table implementation with proper TypeScript types, mock data, and usage examples.`, }, }, ], } }, }

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Jpisnice/shadcn-ui-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server