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
JavaScript
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'
}
];