UNPKG

reactbits-mcp-server

Version:

MCP Server for React Bits - Access 99+ React components with animations, backgrounds, and UI elements

82 lines (81 loc) 2.83 kB
import { getAvailableComponents } from './utils/file-reader.js'; import { logError, logInfo } from './utils/logger.js'; /** * Resource handlers for the React Bits MCP server */ export const resourceHandlers = { /** * Handle get_components resource request */ async get_components() { try { logInfo('Handling get_components resource request'); const components = await getAvailableComponents(); // Group components by category const componentsByCategory = components.reduce((acc, component) => { if (!acc[component.category]) { acc[component.category] = []; } acc[component.category].push(component.name); return acc; }, {}); // Format as text content let content = 'Available React Bits Components:\n\n'; for (const [category, componentNames] of Object.entries(componentsByCategory)) { content += `## ${category}\n`; componentNames.sort().forEach(name => { content += `- ${name}\n`; }); content += '\n'; } content += `\nTotal: ${components.length} components across ${Object.keys(componentsByCategory).length} categories`; return { contents: [ { uri: 'react-bits://components/list', mimeType: 'text/plain', text: content } ] }; } catch (error) { logError('Error handling get_components resource', error); throw error; } } }; /** * Available resources for the React Bits MCP server */ export const resources = [ { uri: 'react-bits://components/list', name: 'React Bits Components', description: 'List of all available React Bits components organized by category', mimeType: 'text/plain' } ]; /** * Resource templates for dynamic resource discovery */ export const resourceTemplates = [ { uriTemplate: 'react-bits://components/{category}', name: 'Components by Category', description: 'List components filtered by category (Animations, Backgrounds, Components, TextAnimations)', mimeType: 'text/plain' }, { uriTemplate: 'react-bits://component/{name}', name: 'Component Source', description: 'Source code for a specific React Bits component', mimeType: 'text/javascript' }, { uriTemplate: 'react-bits://demo/{name}', name: 'Component Demo', description: 'Demo code for a specific React Bits component', mimeType: 'text/javascript' } ];